Finch/bootstrap/linux-x86_64.ll
Nexoniarz 81df9f8c3e Install, CI, seeds and docs for the compiler written in Finch
bootstrap/install.sh and a share/finch lookup for the runtime and std; an ARM64 Linux seed; bootstrap/README.md;
CI builds from the seed on x64 and ARM64 and runs every test on Windows (Wine) and ARM64 (qemu); README, install and
layout sections of the guides (EN+PL) no longer talk about CMake; editors know enum, match and export.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015f73FesGZGYPkmDvUcj6QX
2026-10-25 21:53:50 +01:00

95095 lines
4.1 MiB

; generated by the Finch compiler written in Finch
%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, { 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.Scope = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } }
%S.gen.Loop = type { { ptr, i64, i64 }, { ptr, 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 }, %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 }, 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.fd_set = type { [16 x i64] }
%S.C.timeval = type { i64, i64 }
%S.C.timespec = type { i64, i64 }
%S.C.sigset_t = type { [16 x i64] }
%S.C.random_data = type { ptr, ptr, ptr, i32, i32, i32, [4 x i8], ptr }
%S.C.drand48_data = type { [3 x i16], [3 x i16], i16, i16, 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.__locale_struct = type { [13 x ptr], ptr, ptr, ptr, [13 x ptr] }
%S.C.itimerspec = type { %S.C.timespec, %S.C.timespec }
%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.FILE = type { i32, [4 x i8], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, [3 x i8], [1 x i8], i64, i16, i8, [1 x i8], [4 x i8], ptr, i64, ptr, ptr, ptr, ptr, ptr, i32, i32, i64, [8 x i8] }
%S.C.cookie_io_functions_t = type { ptr, ptr, ptr, ptr }
%S.C.__va_list_tag = type { i32, i32, ptr, ptr }
%S.C.__mbstate_t = type { i32, [4 x i8] }
%S.C.fpos_t = type { i64, %S.C.__mbstate_t }
@.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 <file.fch> [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 <file.fch> [-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 <file.fch> 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 <lib> 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 <dir> 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 <name> 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 [13 x i8] c"src/main.fch\00"
@.str.146 = private unnamed_addr constant [8 x i8] c"version\00"
@.str.147 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.148 = private unnamed_addr constant [10 x i8] c"--version\00"
@.str.149 = private unnamed_addr constant [47 x i8] c"Finch 2.4.0 (the compiler is written in Finch)\00"
@.str.150 = private unnamed_addr constant [1 x i8] c"\00"
@.str.151 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.152 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.153 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.154 = private unnamed_addr constant [4 x i8] c"lsp\00"
@.str.155 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.156 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.157 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.158 = private unnamed_addr constant [6 x i8] c"build\00"
@.str.159 = private unnamed_addr constant [4 x i8] c"run\00"
@.str.160 = private unnamed_addr constant [3 x i8] c"ir\00"
@.str.161 = private unnamed_addr constant [6 x i8] c"index\00"
@.str.162 = private unnamed_addr constant [1 x i8] c"\00"
@.str.163 = private unnamed_addr constant [4 x i8] c"-O2\00"
@.str.164 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.165 = private unnamed_addr constant [4 x i8] c"run\00"
@.str.166 = private unnamed_addr constant [3 x i8] c"-o\00"
@.str.167 = private unnamed_addr constant [6 x i8] c"build\00"
@.str.168 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.169 = private unnamed_addr constant [9 x i8] c"--shared\00"
@.str.170 = private unnamed_addr constant [6 x i8] c"build\00"
@.str.171 = private unnamed_addr constant [4 x i8] c"-O0\00"
@.str.172 = private unnamed_addr constant [4 x i8] c"-O0\00"
@.str.173 = private unnamed_addr constant [3 x i8] c"-l\00"
@.str.174 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.175 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.176 = private unnamed_addr constant [3 x i8] c"-l\00"
@.str.177 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.178 = private unnamed_addr constant [3 x i8] c"-I\00"
@.str.179 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.180 = private unnamed_addr constant [10 x i8] c"--overlay\00"
@.str.181 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.182 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.183 = private unnamed_addr constant [2 x i8] c"=\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"-g\00"
@.str.187 = private unnamed_addr constant [9 x i8] c"--target\00"
@.str.188 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.189 = private unnamed_addr constant [4 x i8] c"run\00"
@.str.190 = private unnamed_addr constant [4 x i8] c"run\00"
@.str.191 = private unnamed_addr constant [16 x i8] c"/tmp/finch_run_\00"
@.str.192 = private unnamed_addr constant [5 x i8] c".dll\00"
@.str.193 = private unnamed_addr constant [4 x i8] c"lib\00"
@.str.194 = private unnamed_addr constant [7 x i8] c".dylib\00"
@.str.195 = private unnamed_addr constant [4 x i8] c"lib\00"
@.str.196 = private unnamed_addr constant [4 x i8] c".so\00"
@.str.197 = private unnamed_addr constant [6 x i8] c"linux\00"
@.str.198 = private unnamed_addr constant [8 x i8] c"windows\00"
@.str.199 = private unnamed_addr constant [6 x i8] c"macos\00"
@.str.200 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.201 = private unnamed_addr constant [8 x i8] c"/../std\00"
@.str.202 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.203 = private unnamed_addr constant [5 x i8] c"/std\00"
@.str.204 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.205 = private unnamed_addr constant [20 x i8] c"/../share/finch/std\00"
@.str.206 = private unnamed_addr constant [4 x i8] c"std\00"
@.str.207 = private unnamed_addr constant [10 x i8] c"/path.fch\00"
@.str.208 = private unnamed_addr constant [11 x i8] c"FINCH_PATH\00"
@.str.209 = private unnamed_addr constant [1 x i8] c"\00"
declare ptr @getenv(ptr)
@.str.210 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.211 = private unnamed_addr constant [2 x i8] c":\00"
@.str.212 = private unnamed_addr constant [1 x i8] c"\00"
@.str.213 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.214 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.215 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.216 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.217 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.218 = private unnamed_addr constant [3 x i8] c".c\00"
@.str.219 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.220 = private unnamed_addr constant [3 x i8] c".o\00"
@.str.221 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.222 = private unnamed_addr constant [3 x i8] c".a\00"
@.str.223 = private unnamed_addr constant [2 x i8] c"/\00"
@.str.224 = private unnamed_addr constant [1 x i8] c"\00"
@.str.225 = private unnamed_addr constant [1 x i8] c"\00"
@.str.226 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.227 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.228 = private unnamed_addr constant [6 x i8] c"index\00"
@.str.229 = private unnamed_addr constant [4 x i8] c"PWD\00"
@.str.230 = private unnamed_addr constant [1 x i8] c"\00"
@.str.231 = private unnamed_addr constant [3 x i8] c"ir\00"
@.str.232 = private unnamed_addr constant [6 x i8] c"index\00"
@.str.233 = private unnamed_addr constant [1 x i8] c"\00"
@.str.234 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.235 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.236 = private unnamed_addr constant [9 x i8] c"FINCH_RT\00"
@.str.237 = private unnamed_addr constant [1 x i8] c"\00"
@.str.238 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.239 = private unnamed_addr constant [23 x i8] c"/../runtime/finch_rt.c\00"
@.str.240 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.241 = private unnamed_addr constant [20 x i8] c"/runtime/finch_rt.c\00"
@.str.242 = private unnamed_addr constant [13 x i8] c"src/main.fch\00"
@.str.243 = private unnamed_addr constant [35 x i8] c"/../share/finch/runtime/finch_rt.c\00"
@.str.244 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00"
@.str.245 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00"
@.str.246 = private unnamed_addr constant [57 x i8] c"error: can't find the Finch runtime (runtime/finch_rt.c)\00"
@.str.247 = private unnamed_addr constant [1 x i8] c"\00"
@.str.248 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.249 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.250 = private unnamed_addr constant [1 x i8] c"\00"
@.str.251 = private unnamed_addr constant [7 x i8] c" -fPIC\00"
@.str.252 = private unnamed_addr constant [4 x i8] c" -g\00"
@.str.253 = private unnamed_addr constant [4 x i8] c"run\00"
@.str.254 = private unnamed_addr constant [2 x i8] c" \00"
@.str.255 = private unnamed_addr constant [2 x i8] c" \00"
@.str.256 = private unnamed_addr constant [7 x i8] c"rm -f \00"
@.str.257 = private unnamed_addr constant [3 x i8] c"fn\00"
@.str.258 = private unnamed_addr constant [7 x i8] c"return\00"
@.str.259 = private unnamed_addr constant [3 x i8] c"if\00"
@.str.260 = private unnamed_addr constant [5 x i8] c"else\00"
@.str.261 = private unnamed_addr constant [6 x i8] c"while\00"
@.str.262 = private unnamed_addr constant [4 x i8] c"for\00"
@.str.263 = private unnamed_addr constant [3 x i8] c"in\00"
@.str.264 = private unnamed_addr constant [6 x i8] c"break\00"
@.str.265 = private unnamed_addr constant [9 x i8] c"continue\00"
@.str.266 = private unnamed_addr constant [5 x i8] c"true\00"
@.str.267 = private unnamed_addr constant [6 x i8] c"false\00"
@.str.268 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.269 = private unnamed_addr constant [7 x i8] c"import\00"
@.str.270 = private unnamed_addr constant [5 x i8] c"link\00"
@.str.271 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.272 = private unnamed_addr constant [6 x i8] c"defer\00"
@.str.273 = private unnamed_addr constant [3 x i8] c"or\00"
@.str.274 = private unnamed_addr constant [4 x i8] c"try\00"
@.str.275 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.276 = private unnamed_addr constant [6 x i8] c"match\00"
@.str.277 = private unnamed_addr constant [7 x i8] c"export\00"
@.str.278 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.279 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00"
@.str.280 = private unnamed_addr constant [2 x i8] c":\00"
@.str.281 = private unnamed_addr constant [2 x i8] c":\00"
@.str.282 = private unnamed_addr constant [10 x i8] c": error: \00"
@.str.283 = private unnamed_addr constant [1 x i8] c"\00"
@.str.284 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.285 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.286 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.287 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.288 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.289 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.290 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.291 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.292 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.293 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.294 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\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 [29 x i8] c"used .line 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 [28 x i8] c"used .col 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 [27 x i8] c"used .nl on a null pointer\00"
@.str.306 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.307 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00"
@.str.308 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.309 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.310 = private unnamed_addr constant [3 x i8] c"->\00"
@.str.311 = private unnamed_addr constant [3 x i8] c"<<\00"
@.str.312 = private unnamed_addr constant [3 x i8] c">>\00"
@.str.313 = private unnamed_addr constant [3 x i8] c"<=\00"
@.str.314 = private unnamed_addr constant [3 x i8] c">=\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 [14 x i8] c"src/lexer.fch\00"
@.str.327 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.328 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.329 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.330 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.331 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.332 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.333 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.334 = private unnamed_addr constant [26 x i8] c"used .i 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 [26 x i8] c"used .i on a null pointer\00"
@.str.337 = private unnamed_addr constant [23 x i8] c"(){}[],.:+-*/%&|^~<>=!\00"
@.str.338 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.339 = private unnamed_addr constant [28 x i8] c"used .src 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 [14 x i8] c"src/lexer.fch\00"
@.str.342 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.343 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.344 = private unnamed_addr constant [26 x i8] c"used .i 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 [1 x i8] c"\00"
@.str.347 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.348 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00"
@.str.349 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.350 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00"
@.str.351 = private unnamed_addr constant [17 x i8] c"unknown escape \5C\00"
@.str.352 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.353 = private unnamed_addr constant [26 x i8] c"used .i 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 .src on a null pointer\00"
@.str.356 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.357 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.358 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.359 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.360 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.361 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.362 = private unnamed_addr constant [26 x i8] c"used .i 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 [28 x i8] c"used .src 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 [28 x i8] c"used .src on a null pointer\00"
@.str.367 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.368 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.369 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.370 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.371 = private unnamed_addr constant [29 x i8] c"used .line 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 [28 x i8] c"used .col 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 [26 x i8] c"used .i on a null pointer\00"
@.str.376 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.377 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.378 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.379 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.380 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.381 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.382 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.383 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.384 = private unnamed_addr constant [26 x i8] c"used .i 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 [28 x i8] c"used .src on a null pointer\00"
@.str.387 = private unnamed_addr constant [37 x i8] c"comment is never closed (missing */)\00"
@.str.388 = private unnamed_addr constant [1 x i8] c"\00"
@.str.389 = private unnamed_addr constant [1 x i8] c"\00"
@.str.390 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.391 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00"
@.str.392 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.393 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00"
@.str.394 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.395 = private unnamed_addr constant [27 x i8] c"used .nl on a null pointer\00"
@.str.396 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.397 = private unnamed_addr constant [27 x i8] c"used .nl on a null pointer\00"
@.str.398 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.399 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.400 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.401 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.402 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.403 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.404 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.405 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.406 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.407 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.408 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\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 [14 x i8] c"src/lexer.fch\00"
@.str.418 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.419 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.420 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.421 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.422 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.423 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.424 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.425 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.426 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.427 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.428 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.429 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\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 [26 x i8] c"used .i 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 [28 x i8] c"used .src 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 [28 x i8] c"used .src on a null pointer\00"
@.str.441 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.442 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.443 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\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 [6 x i8] c"float\00"
@.str.450 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.451 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.452 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.453 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.454 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.455 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.456 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.457 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.458 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\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 [14 x i8] c"src/lexer.fch\00"
@.str.468 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.469 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.470 = private unnamed_addr constant [2 x i8] c"_\00"
@.str.471 = private unnamed_addr constant [1 x i8] c"\00"
@.str.472 = private unnamed_addr constant [7 x i8] c"string\00"
@.str.473 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.474 = private unnamed_addr constant [35 x i8] c"string is never closed (missing \22)\00"
@.str.475 = private unnamed_addr constant [33 x i8] c"char is never closed (missing ')\00"
@.str.476 = private unnamed_addr constant [1 x i8] c"\00"
@.str.477 = private unnamed_addr constant [45 x i8] c"a char holds exactly one character, like 'a'\00"
@.str.478 = private unnamed_addr constant [1 x i8] c"\00"
@.str.479 = 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.480 = private unnamed_addr constant [23 x i8] c"unexpected character '\00"
@.str.481 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.482 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.483 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.484 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.485 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.486 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.487 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.488 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.489 = private unnamed_addr constant [4 x i8] c"eof\00"
@.str.490 = private unnamed_addr constant [1 x i8] c"\00"
@.str.491 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.492 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00"
@.str.493 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00"
@.str.494 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00"
@.str.495 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.496 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.497 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.498 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.499 = private unnamed_addr constant [6 x i8] c"named\00"
@.str.500 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.501 = private unnamed_addr constant [6 x i8] c"fixed\00"
@.str.502 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.503 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.504 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.505 = private unnamed_addr constant [6 x i8] c"fixed\00"
@.str.506 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00"
@.str.507 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00"
@.str.508 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.509 = private unnamed_addr constant [3 x i8] c"[]\00"
@.str.510 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00"
@.str.511 = private unnamed_addr constant [6 x i8] c"fixed\00"
@.str.512 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.513 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.514 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00"
@.str.515 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.516 = private unnamed_addr constant [5 x i8] c"map[\00"
@.str.517 = private unnamed_addr constant [12 x i8] c"src/ast.fch\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"ptr\00"
@.str.521 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.522 = private unnamed_addr constant [5 x i8] c"ptr[\00"
@.str.523 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00"
@.str.524 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.525 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.526 = private unnamed_addr constant [6 x i8] c"named\00"
@.str.527 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.528 = private unnamed_addr constant [2 x i8] c".\00"
@.str.529 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.530 = private unnamed_addr constant [8 x i8] c"nothing\00"
@.str.531 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.532 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00"
@.str.533 = private unnamed_addr constant [2 x i8] c":\00"
@.str.534 = private unnamed_addr constant [2 x i8] c":\00"
@.str.535 = private unnamed_addr constant [10 x i8] c": error: \00"
@.str.536 = private unnamed_addr constant [1 x i8] c"\00"
@.str.537 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.538 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.539 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.540 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00"
@.str.541 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.542 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.543 = private unnamed_addr constant [15 x i8] c"src/parser.fch\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 [26 x i8] c"used .i 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 [29 x i8] c"used .toks 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 [29 x i8] c"used .toks on a null pointer\00"
@.str.555 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.556 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00"
@.str.557 = private unnamed_addr constant [15 x i8] c"src/parser.fch\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 [26 x i8] c"used .i 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 [26 x i8] c"used .i 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 [6 x i8] c"ident\00"
@.str.573 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.574 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.575 = private unnamed_addr constant [4 x i8] c"eof\00"
@.str.576 = private unnamed_addr constant [12 x i8] c"end of file\00"
@.str.577 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.578 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.579 = private unnamed_addr constant [9 x i8] c"a number\00"
@.str.580 = private unnamed_addr constant [7 x i8] c"string\00"
@.str.581 = private unnamed_addr constant [9 x i8] c"a string\00"
@.str.582 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.583 = private unnamed_addr constant [7 x i8] c"a char\00"
@.str.584 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.585 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.586 = private unnamed_addr constant [10 x i8] c"expected \00"
@.str.587 = private unnamed_addr constant [9 x i8] c", found \00"
@.str.588 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.589 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00"
@.str.590 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.591 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00"
@.str.592 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.593 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.594 = private unnamed_addr constant [15 x i8] c"src/parser.fch\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 .file on a null pointer\00"
@.str.602 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.603 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.604 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.605 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.606 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.607 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.608 = private unnamed_addr constant [3 x i8] c"i8\00"
@.str.609 = private unnamed_addr constant [4 x i8] c"i16\00"
@.str.610 = private unnamed_addr constant [4 x i8] c"i32\00"
@.str.611 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.612 = private unnamed_addr constant [3 x i8] c"u8\00"
@.str.613 = private unnamed_addr constant [4 x i8] c"u16\00"
@.str.614 = private unnamed_addr constant [4 x i8] c"u32\00"
@.str.615 = private unnamed_addr constant [4 x i8] c"u64\00"
@.str.616 = private unnamed_addr constant [4 x i8] c"f32\00"
@.str.617 = private unnamed_addr constant [4 x i8] c"f64\00"
@.str.618 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.619 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.620 = private unnamed_addr constant [37 x i8] c"']' (an array type looks like []int)\00"
@.str.621 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.622 = private unnamed_addr constant [12 x i8] c"unexpected \00"
@.str.623 = private unnamed_addr constant [57 x i8] c" (expected a type like int, str, []int or a struct name)\00"
@.str.624 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.625 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.626 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.627 = private unnamed_addr constant [40 x i8] c"']' (a map type looks like map[str]int)\00"
@.str.628 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.629 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.630 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.631 = private unnamed_addr constant [4 x i8] c"']'\00"
@.str.632 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.633 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.634 = private unnamed_addr constant [4 x i8] c"f64\00"
@.str.635 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.636 = private unnamed_addr constant [6 x i8] c"named\00"
@.str.637 = private unnamed_addr constant [2 x i8] c".\00"
@.str.638 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.639 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.640 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.641 = private unnamed_addr constant [2 x i8] c",\00"
@.str.642 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.643 = private unnamed_addr constant [29 x i8] c"']' after the type arguments\00"
@.str.644 = private unnamed_addr constant [6 x i8] c"ident\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 [15 x i8] c"src/parser.fch\00"
@.str.648 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.649 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.650 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00"
@.str.651 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.652 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00"
@.str.653 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.654 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.655 = private unnamed_addr constant [2 x i8] c"]\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 [29 x i8] c"used .toks on a null pointer\00"
@.str.660 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.661 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.662 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.663 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00"
@.str.664 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.665 = private unnamed_addr constant [4 x i8] c"eof\00"
@.str.666 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.667 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00"
@.str.668 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.669 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.670 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.671 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.672 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.673 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.674 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.675 = private unnamed_addr constant [29 x i8] c"used .toks 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 [15 x i8] c"src/parser.fch\00"
@.str.679 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.680 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.681 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.682 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.683 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00"
@.str.684 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.685 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00"
@.str.686 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.687 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.688 = private unnamed_addr constant [2 x i8] c"]\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 [29 x i8] c"used .toks on a null pointer\00"
@.str.693 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.694 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.695 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.696 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00"
@.str.697 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.698 = private unnamed_addr constant [4 x i8] c"eof\00"
@.str.699 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.700 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00"
@.str.701 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.702 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.703 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.704 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.705 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.706 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.707 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00"
@.str.708 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.709 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.710 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.711 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.712 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.713 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.714 = private unnamed_addr constant [2 x i8] c".\00"
@.str.715 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.716 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.717 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.718 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00"
@.str.719 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.720 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.721 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.722 = private unnamed_addr constant [2 x i8] c"}\00"
@.str.723 = private unnamed_addr constant [4 x i8] c"eof\00"
@.str.724 = private unnamed_addr constant [12 x i8] c"unexpected \00"
@.str.725 = private unnamed_addr constant [38 x i8] c" (put each statement on its own line)\00"
@.str.726 = private unnamed_addr constant [4 x i8] c"eof\00"
@.str.727 = private unnamed_addr constant [7 x i8] c"import\00"
@.str.728 = private unnamed_addr constant [7 x i8] c"string\00"
@.str.729 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.730 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00"
@.str.731 = private unnamed_addr constant [2 x i8] c":\00"
@.str.732 = private unnamed_addr constant [2 x i8] c":\00"
@.str.733 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.734 = private unnamed_addr constant [52 x i8] c"expected a module name or a C header after 'import'\00"
@.str.735 = private unnamed_addr constant [5 x i8] c"link\00"
@.str.736 = private unnamed_addr constant [7 x i8] c"string\00"
@.str.737 = private unnamed_addr constant [43 x i8] c"a library name in quotes, like link \22glfw\22\00"
@.str.738 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.739 = private unnamed_addr constant [3 x i8] c".c\00"
@.str.740 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.741 = private unnamed_addr constant [3 x i8] c".o\00"
@.str.742 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.743 = private unnamed_addr constant [3 x i8] c".a\00"
@.str.744 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.745 = private unnamed_addr constant [4 x i8] c"lib\00"
@.str.746 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.747 = private unnamed_addr constant [4 x i8] c".so\00"
@.str.748 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.749 = private unnamed_addr constant [2 x i8] c"/\00"
@.str.750 = private unnamed_addr constant [66 x i8] c"write just the library's name: for libglfw.so that's link \22glfw\22\00"
@.str.751 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.752 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.753 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.754 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.755 = private unnamed_addr constant [7 x i8] c"'enum'\00"
@.str.756 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.757 = private unnamed_addr constant [13 x i8] c"an enum name\00"
@.str.758 = private unnamed_addr constant [2 x i8] c"{\00"
@.str.759 = private unnamed_addr constant [4 x i8] c"'{'\00"
@.str.760 = private unnamed_addr constant [2 x i8] c"}\00"
@.str.761 = private unnamed_addr constant [4 x i8] c"eof\00"
@.str.762 = private unnamed_addr constant [38 x i8] c"an enum is never closed (missing '}')\00"
@.str.763 = private unnamed_addr constant [8 x i8] c"variant\00"
@.str.764 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.765 = private unnamed_addr constant [25 x i8] c"a variant name, like Red\00"
@.str.766 = private unnamed_addr constant [2 x i8] c"=\00"
@.str.767 = private unnamed_addr constant [1 x i8] c"\00"
@.str.768 = private unnamed_addr constant [2 x i8] c"-\00"
@.str.769 = private unnamed_addr constant [2 x i8] c"-\00"
@.str.770 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.771 = private unnamed_addr constant [31 x i8] c"a whole number, like Ok = 200\00"
@.str.772 = private unnamed_addr constant [2 x i8] c",\00"
@.str.773 = private unnamed_addr constant [10 x i8] c"the enum \00"
@.str.774 = private unnamed_addr constant [17 x i8] c" has no variants\00"
@.str.775 = private unnamed_addr constant [6 x i8] c"match\00"
@.str.776 = private unnamed_addr constant [6 x i8] c"match\00"
@.str.777 = private unnamed_addr constant [8 x i8] c"'match'\00"
@.str.778 = private unnamed_addr constant [2 x i8] c"{\00"
@.str.779 = private unnamed_addr constant [4 x i8] c"'{'\00"
@.str.780 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.781 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00"
@.str.782 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.783 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00"
@.str.784 = private unnamed_addr constant [2 x i8] c"}\00"
@.str.785 = private unnamed_addr constant [4 x i8] c"eof\00"
@.str.786 = private unnamed_addr constant [38 x i8] c"a match is never closed (missing '}')\00"
@.str.787 = private unnamed_addr constant [4 x i8] c"arm\00"
@.str.788 = private unnamed_addr constant [9 x i8] c"patterns\00"
@.str.789 = private unnamed_addr constant [5 x i8] c"else\00"
@.str.790 = private unnamed_addr constant [2 x i8] c",\00"
@.str.791 = private unnamed_addr constant [3 x i8] c"->\00"
@.str.792 = private unnamed_addr constant [58 x i8] c"'->' after the value to match, like Red -> print(\22red\22)\00"
@.str.793 = private unnamed_addr constant [2 x i8] c"{\00"
@.str.794 = private unnamed_addr constant [2 x i8] c",\00"
@.str.795 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.796 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00"
@.str.797 = private unnamed_addr constant [31 x i8] c"a match needs at least one arm\00"
@.str.798 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.799 = private unnamed_addr constant [4 x i8] c"'['\00"
@.str.800 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.801 = private unnamed_addr constant [30 x i8] c"a type parameter name, like T\00"
@.str.802 = private unnamed_addr constant [2 x i8] c",\00"
@.str.803 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.804 = private unnamed_addr constant [30 x i8] c"']' after the type parameters\00"
@.str.805 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.806 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.807 = private unnamed_addr constant [9 x i8] c"'struct'\00"
@.str.808 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.809 = private unnamed_addr constant [14 x i8] c"a struct name\00"
@.str.810 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.811 = private unnamed_addr constant [2 x i8] c"{\00"
@.str.812 = private unnamed_addr constant [4 x i8] c"'{'\00"
@.str.813 = private unnamed_addr constant [2 x i8] c"}\00"
@.str.814 = private unnamed_addr constant [4 x i8] c"eof\00"
@.str.815 = private unnamed_addr constant [39 x i8] c"a struct is never closed (missing '}')\00"
@.str.816 = private unnamed_addr constant [6 x i8] c"field\00"
@.str.817 = private unnamed_addr constant [12 x i8] c"unexpected \00"
@.str.818 = private unnamed_addr constant [29 x i8] c" (a field looks like: int x)\00"
@.str.819 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.820 = private unnamed_addr constant [13 x i8] c"a field name\00"
@.str.821 = private unnamed_addr constant [2 x i8] c"=\00"
@.str.822 = private unnamed_addr constant [3 x i8] c"fn\00"
@.str.823 = private unnamed_addr constant [7 x i8] c"export\00"
@.str.824 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.825 = private unnamed_addr constant [69 x i8] c"functions start with 'fn', like: fn add(int a, int b) -> int { ... }\00"
@.str.826 = private unnamed_addr constant [3 x i8] c"fn\00"
@.str.827 = private unnamed_addr constant [27 x i8] c"'fn', 'struct' or 'import'\00"
@.str.828 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.829 = private unnamed_addr constant [16 x i8] c"a function name\00"
@.str.830 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.831 = private unnamed_addr constant [2 x i8] c".\00"
@.str.832 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.833 = private unnamed_addr constant [14 x i8] c"a method name\00"
@.str.834 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.835 = private unnamed_addr constant [4 x i8] c"'('\00"
@.str.836 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.837 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00"
@.str.838 = private unnamed_addr constant [2 x i8] c")\00"
@.str.839 = private unnamed_addr constant [6 x i8] c"param\00"
@.str.840 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.841 = private unnamed_addr constant [17 x i8] c"a parameter name\00"
@.str.842 = private unnamed_addr constant [2 x i8] c",\00"
@.str.843 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.844 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00"
@.str.845 = private unnamed_addr constant [2 x i8] c")\00"
@.str.846 = private unnamed_addr constant [4 x i8] c"')'\00"
@.str.847 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.848 = private unnamed_addr constant [3 x i8] c"->\00"
@.str.849 = private unnamed_addr constant [2 x i8] c"!\00"
@.str.850 = private unnamed_addr constant [2 x i8] c"!\00"
@.str.851 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.852 = private unnamed_addr constant [12 x i8] c"unexpected \00"
@.str.853 = private unnamed_addr constant [62 x i8] c" (after '->' comes a type, or ! for a function that can fail)\00"
@.str.854 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.855 = private unnamed_addr constant [6 x i8] c"block\00"
@.str.856 = private unnamed_addr constant [2 x i8] c"{\00"
@.str.857 = private unnamed_addr constant [4 x i8] c"'{'\00"
@.str.858 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.859 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00"
@.str.860 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.861 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00"
@.str.862 = private unnamed_addr constant [2 x i8] c"}\00"
@.str.863 = private unnamed_addr constant [4 x i8] c"eof\00"
@.str.864 = private unnamed_addr constant [36 x i8] c"a '{' is never closed (missing '}')\00"
@.str.865 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.866 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00"
@.str.867 = private unnamed_addr constant [3 x i8] c"if\00"
@.str.868 = private unnamed_addr constant [6 x i8] c"while\00"
@.str.869 = private unnamed_addr constant [6 x i8] c"while\00"
@.str.870 = private unnamed_addr constant [4 x i8] c"for\00"
@.str.871 = private unnamed_addr constant [4 x i8] c"for\00"
@.str.872 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.873 = private unnamed_addr constant [21 x i8] c"a loop variable name\00"
@.str.874 = private unnamed_addr constant [2 x i8] c",\00"
@.str.875 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.876 = private unnamed_addr constant [28 x i8] c"a second loop variable name\00"
@.str.877 = private unnamed_addr constant [3 x i8] c"in\00"
@.str.878 = private unnamed_addr constant [5 x i8] c"'in'\00"
@.str.879 = private unnamed_addr constant [3 x i8] c"..\00"
@.str.880 = private unnamed_addr constant [56 x i8] c"a range of numbers has one loop variable: for i in 0..n\00"
@.str.881 = private unnamed_addr constant [5 x i8] c"each\00"
@.str.882 = private unnamed_addr constant [6 x i8] c"match\00"
@.str.883 = private unnamed_addr constant [7 x i8] c"return\00"
@.str.884 = private unnamed_addr constant [7 x i8] c"return\00"
@.str.885 = private unnamed_addr constant [2 x i8] c"}\00"
@.str.886 = private unnamed_addr constant [6 x i8] c"break\00"
@.str.887 = private unnamed_addr constant [9 x i8] c"continue\00"
@.str.888 = private unnamed_addr constant [2 x i8] c"{\00"
@.str.889 = private unnamed_addr constant [6 x i8] c"defer\00"
@.str.890 = private unnamed_addr constant [6 x i8] c"defer\00"
@.str.891 = private unnamed_addr constant [6 x i8] c"defer\00"
@.str.892 = private unnamed_addr constant [34 x i8] c"defer inside defer is not allowed\00"
@.str.893 = private unnamed_addr constant [3 x i8] c"fn\00"
@.str.894 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.895 = private unnamed_addr constant [7 x i8] c"import\00"
@.str.896 = private unnamed_addr constant [5 x i8] c"link\00"
@.str.897 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.898 = private unnamed_addr constant [49 x i8] c"' can't be used here in the self-hosted compiler\00"
@.str.899 = private unnamed_addr constant [5 x i8] c"decl\00"
@.str.900 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.901 = private unnamed_addr constant [16 x i8] c"a variable name\00"
@.str.902 = private unnamed_addr constant [2 x i8] c"=\00"
@.str.903 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.904 = private unnamed_addr constant [3 x i8] c":=\00"
@.str.905 = private unnamed_addr constant [5 x i8] c"decl\00"
@.str.906 = private unnamed_addr constant [2 x i8] c"=\00"
@.str.907 = private unnamed_addr constant [3 x i8] c"+=\00"
@.str.908 = private unnamed_addr constant [3 x i8] c"-=\00"
@.str.909 = private unnamed_addr constant [3 x i8] c"*=\00"
@.str.910 = private unnamed_addr constant [3 x i8] c"/=\00"
@.str.911 = private unnamed_addr constant [3 x i8] c"%=\00"
@.str.912 = private unnamed_addr constant [4 x i8] c"var\00"
@.str.913 = private unnamed_addr constant [7 x i8] c"member\00"
@.str.914 = private unnamed_addr constant [6 x i8] c"index\00"
@.str.915 = private unnamed_addr constant [67 x i8] c"only a variable, a field, an element or p.value can be assigned to\00"
@.str.916 = private unnamed_addr constant [7 x i8] c"assign\00"
@.str.917 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.918 = private unnamed_addr constant [29 x i8] c"used .file on a null pointer\00"
@.str.919 = private unnamed_addr constant [5 x i8] c"call\00"
@.str.920 = private unnamed_addr constant [7 x i8] c"method\00"
@.str.921 = private unnamed_addr constant [4 x i8] c"try\00"
@.str.922 = private unnamed_addr constant [3 x i8] c"or\00"
@.str.923 = private unnamed_addr constant [38 x i8] c"this value is computed but never used\00"
@.str.924 = private unnamed_addr constant [5 x i8] c"expr\00"
@.str.925 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.926 = private unnamed_addr constant [29 x i8] c"used .file on a null pointer\00"
@.str.927 = private unnamed_addr constant [3 x i8] c"if\00"
@.str.928 = private unnamed_addr constant [3 x i8] c"if\00"
@.str.929 = private unnamed_addr constant [5 x i8] c"'if'\00"
@.str.930 = private unnamed_addr constant [5 x i8] c"else\00"
@.str.931 = private unnamed_addr constant [3 x i8] c"if\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 [2 x i8] c"<\00"
@.str.937 = private unnamed_addr constant [3 x i8] c"<=\00"
@.str.938 = private unnamed_addr constant [2 x i8] c">\00"
@.str.939 = private unnamed_addr constant [3 x i8] c">=\00"
@.str.940 = private unnamed_addr constant [2 x i8] c"+\00"
@.str.941 = private unnamed_addr constant [2 x i8] c"-\00"
@.str.942 = private unnamed_addr constant [2 x i8] c"|\00"
@.str.943 = private unnamed_addr constant [2 x i8] c"^\00"
@.str.944 = private unnamed_addr constant [2 x i8] c"*\00"
@.str.945 = private unnamed_addr constant [2 x i8] c"/\00"
@.str.946 = private unnamed_addr constant [2 x i8] c"%\00"
@.str.947 = private unnamed_addr constant [3 x i8] c"<<\00"
@.str.948 = private unnamed_addr constant [3 x i8] c">>\00"
@.str.949 = private unnamed_addr constant [2 x i8] c"&\00"
@.str.950 = private unnamed_addr constant [3 x i8] c"or\00"
@.str.951 = private unnamed_addr constant [3 x i8] c"or\00"
@.str.952 = private unnamed_addr constant [2 x i8] c"{\00"
@.str.953 = private unnamed_addr constant [7 x i8] c"binary\00"
@.str.954 = private unnamed_addr constant [4 x i8] c"try\00"
@.str.955 = private unnamed_addr constant [4 x i8] c"try\00"
@.str.956 = private unnamed_addr constant [2 x i8] c"-\00"
@.str.957 = private unnamed_addr constant [2 x i8] c"!\00"
@.str.958 = private unnamed_addr constant [2 x i8] c"~\00"
@.str.959 = private unnamed_addr constant [6 x i8] c"unary\00"
@.str.960 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.961 = private unnamed_addr constant [4 x i8] c"'('\00"
@.str.962 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.963 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00"
@.str.964 = private unnamed_addr constant [2 x i8] c")\00"
@.str.965 = private unnamed_addr constant [2 x i8] c")\00"
@.str.966 = private unnamed_addr constant [1 x i8] c"\00"
@.str.967 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.968 = private unnamed_addr constant [2 x i8] c":\00"
@.str.969 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.970 = private unnamed_addr constant [30 x i8] c"used .names on a null pointer\00"
@.str.971 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.972 = private unnamed_addr constant [29 x i8] c"used .kids on a null pointer\00"
@.str.973 = private unnamed_addr constant [2 x i8] c",\00"
@.str.974 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.975 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00"
@.str.976 = private unnamed_addr constant [2 x i8] c")\00"
@.str.977 = private unnamed_addr constant [4 x i8] c"')'\00"
@.str.978 = private unnamed_addr constant [2 x i8] c".\00"
@.str.979 = private unnamed_addr constant [7 x i8] c"member\00"
@.str.980 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.981 = private unnamed_addr constant [17 x i8] c"a name after '.'\00"
@.str.982 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.983 = private unnamed_addr constant [7 x i8] c"method\00"
@.str.984 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.985 = private unnamed_addr constant [6 x i8] c"index\00"
@.str.986 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.987 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00"
@.str.988 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.989 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00"
@.str.990 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.991 = private unnamed_addr constant [4 x i8] c"']'\00"
@.str.992 = private unnamed_addr constant [1 x i8] c"\00"
@.str.993 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.994 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.995 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.996 = private unnamed_addr constant [7 x i8] c"string\00"
@.str.997 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.998 = private unnamed_addr constant [5 x i8] c"true\00"
@.str.999 = private unnamed_addr constant [6 x i8] c"false\00"
@.str.1000 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.1001 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.1002 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.1003 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.1004 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.1005 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00"
@.str.1006 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.1007 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00"
@.str.1008 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1009 = private unnamed_addr constant [4 x i8] c"')'\00"
@.str.1010 = private unnamed_addr constant [6 x i8] c"match\00"
@.str.1011 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.1012 = private unnamed_addr constant [6 x i8] c"array\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 [2 x i8] c"]\00"
@.str.1017 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.1018 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.1019 = private unnamed_addr constant [2 x i8] c":\00"
@.str.1020 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.1021 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.1022 = private unnamed_addr constant [2 x i8] c":\00"
@.str.1023 = private unnamed_addr constant [42 x i8] c"':' (a map entry looks like \22key\22: value)\00"
@.str.1024 = private unnamed_addr constant [2 x i8] c",\00"
@.str.1025 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.1026 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00"
@.str.1027 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.1028 = private unnamed_addr constant [4 x i8] c"']'\00"
@.str.1029 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.1030 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.1031 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.1032 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00"
@.str.1033 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.1034 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.1035 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00"
@.str.1036 = private unnamed_addr constant [6 x i8] c"ident\00"
@.str.1037 = private unnamed_addr constant [6 x i8] c"targs\00"
@.str.1038 = private unnamed_addr constant [2 x i8] c",\00"
@.str.1039 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.1040 = private unnamed_addr constant [29 x i8] c"']' after the type arguments\00"
@.str.1041 = private unnamed_addr constant [5 x i8] c"call\00"
@.str.1042 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.1043 = private unnamed_addr constant [5 x i8] c"call\00"
@.str.1044 = private unnamed_addr constant [4 x i8] c"var\00"
@.str.1045 = private unnamed_addr constant [12 x i8] c"unexpected \00"
@.str.1046 = private unnamed_addr constant [20 x i8] c" (expected a value)\00"
@.str.1047 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1048 = private unnamed_addr constant [2 x i8] c"\5C\00"
@.str.1049 = private unnamed_addr constant [3 x i8] c"\5C\5C\00"
@.str.1050 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1051 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.1052 = private unnamed_addr constant [3 x i8] c"\5Cn\00"
@.str.1053 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1054 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1055 = private unnamed_addr constant [2 x i8] c" \00"
@.str.1056 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1057 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00"
@.str.1058 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1059 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00"
@.str.1060 = private unnamed_addr constant [4 x i8] c"@R\09\00"
@.str.1061 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1062 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.1063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1064 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1065 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1066 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1067 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1068 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1069 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1070 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1071 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1072 = private unnamed_addr constant [2 x i8] c" \00"
@.str.1073 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1074 = private unnamed_addr constant [2 x i8] c".\00"
@.str.1075 = private unnamed_addr constant [4 x i8] c"fn \00"
@.str.1076 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.1077 = private unnamed_addr constant [3 x i8] c", \00"
@.str.1078 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1079 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.1080 = private unnamed_addr constant [6 x i8] c" -> !\00"
@.str.1081 = private unnamed_addr constant [5 x i8] c" -> \00"
@.str.1082 = private unnamed_addr constant [2 x i8] c"!\00"
@.str.1083 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.1084 = private unnamed_addr constant [5 x i8] c" -> \00"
@.str.1085 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1086 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00"
@.str.1087 = private unnamed_addr constant [7 x i8] c"method\00"
@.str.1088 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1089 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.1090 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1091 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1092 = private unnamed_addr constant [10 x i8] c"```finch\0A\00"
@.str.1093 = private unnamed_addr constant [5 x i8] c"\0A```\00"
@.str.1094 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1095 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.1096 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1097 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1098 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00"
@.str.1099 = private unnamed_addr constant [4 x i8] c"@I\09\00"
@.str.1100 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1101 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.1102 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1103 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.1104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1105 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1107 = private unnamed_addr constant [2 x i8] c" \00"
@.str.1108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1109 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1110 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00"
@.str.1111 = private unnamed_addr constant [4 x i8] c"@F\09\00"
@.str.1112 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1113 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1114 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1115 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1116 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.1117 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1118 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1119 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1120 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1121 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1122 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1123 = private unnamed_addr constant [2 x i8] c"|\00"
@.str.1124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1125 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00"
@.str.1126 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1127 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.1128 = private unnamed_addr constant [12 x i8] c"src/gen.fch\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 [28 x i8] c"used .idx on a null pointer\00"
@.str.1132 = private unnamed_addr constant [4 x i8] c"@F\09\00"
@.str.1133 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1134 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1135 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1136 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1137 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.1138 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1139 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1140 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1141 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1142 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1143 = private unnamed_addr constant [4 x i8] c"fn \00"
@.str.1144 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.1145 = private unnamed_addr constant [3 x i8] c", \00"
@.str.1146 = private unnamed_addr constant [7 x i8] c"](...)\00"
@.str.1147 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1148 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1149 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.1150 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1151 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.1152 = private unnamed_addr constant [12 x i8] c"src/gen.fch\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 [28 x i8] c"used .idx on a null pointer\00"
@.str.1156 = private unnamed_addr constant [4 x i8] c"@S\09\00"
@.str.1157 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1158 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1159 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1160 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.1161 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1162 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1163 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1164 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1165 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00"
@.str.1166 = private unnamed_addr constant [5 x i8] c"@SF\09\00"
@.str.1167 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1168 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1169 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1170 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1171 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1172 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1173 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.1174 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1175 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.1176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1177 = private unnamed_addr constant [1 x i8] c"\00"
@.str.1178 = private unnamed_addr constant [2 x i8] c",\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"@E\09\00"
@.str.1182 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1183 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.1184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1185 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1186 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1187 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1188 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.1189 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1190 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1191 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1192 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1193 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1194 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00"
@.str.1195 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1196 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00"
@.str.1197 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1198 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00"
@.str.1199 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.1200 = private unnamed_addr constant [1 x i8] c"\00"
@.str.1201 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.1202 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.1203 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1204 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.1205 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1206 = private unnamed_addr constant [2 x i8] c":\00"
@.str.1207 = private unnamed_addr constant [2 x i8] c":\00"
@.str.1208 = private unnamed_addr constant [10 x i8] c": error: \00"
@.str.1209 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1210 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00"
@.str.1211 = private unnamed_addr constant [1 x i8] c"\00"
@.str.1212 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.1213 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.1214 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1215 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00"
@.str.1216 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1217 = private unnamed_addr constant [6 x i8] c"call \00"
@.str.1218 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1219 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00"
@.str.1220 = private unnamed_addr constant [3 x i8] c" \00"
@.str.1221 = private unnamed_addr constant [9 x i8] c", !dbg !\00"
@.str.1222 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1223 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00"
@.str.1224 = private unnamed_addr constant [3 x i8] c" \00"
@.str.1225 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1226 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00"
@.str.1227 = private unnamed_addr constant [3 x i8] c"%t\00"
@.str.1228 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1229 = private unnamed_addr constant [28 x i8] c"used .tmp 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 [28 x i8] c"used .lbl on a null pointer\00"
@.str.1232 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1233 = private unnamed_addr constant [28 x i8] c"used .lbl on a null pointer\00"
@.str.1234 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1235 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00"
@.str.1236 = private unnamed_addr constant [2 x i8] c":\00"
@.str.1237 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1238 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.1239 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1240 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.1241 = private unnamed_addr constant [11 x i8] c"br label %\00"
@.str.1242 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1243 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.1244 = private unnamed_addr constant [7 x i8] c"br i1 \00"
@.str.1245 = private unnamed_addr constant [10 x i8] c", label %\00"
@.str.1246 = private unnamed_addr constant [10 x i8] c", label %\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 .term on a null pointer\00"
@.str.1249 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1250 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00"
@.str.1251 = private unnamed_addr constant [3 x i8] c"%a\00"
@.str.1252 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1253 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00"
@.str.1254 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1255 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00"
@.str.1256 = private unnamed_addr constant [3 x i8] c" \00"
@.str.1257 = private unnamed_addr constant [11 x i8] c" = alloca \00"
@.str.1258 = private unnamed_addr constant [11 x i8] c", align 16\00"
@.str.1259 = private unnamed_addr constant [9 x i8] c" = load \00"
@.str.1260 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1261 = private unnamed_addr constant [7 x i8] c"store \00"
@.str.1262 = private unnamed_addr constant [2 x i8] c" \00"
@.str.1263 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1264 = private unnamed_addr constant [4 x i8] c" = \00"
@.str.1265 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.1266 = private unnamed_addr constant [3 x i8] c"i8\00"
@.str.1267 = private unnamed_addr constant [4 x i8] c"i16\00"
@.str.1268 = private unnamed_addr constant [4 x i8] c"i32\00"
@.str.1269 = private unnamed_addr constant [3 x i8] c"u8\00"
@.str.1270 = private unnamed_addr constant [4 x i8] c"u16\00"
@.str.1271 = private unnamed_addr constant [4 x i8] c"u32\00"
@.str.1272 = private unnamed_addr constant [4 x i8] c"u64\00"
@.str.1273 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.1274 = private unnamed_addr constant [4 x i8] c"f32\00"
@.str.1275 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.1276 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.1277 = private unnamed_addr constant [3 x i8] c"i8\00"
@.str.1278 = private unnamed_addr constant [3 x i8] c"u8\00"
@.str.1279 = private unnamed_addr constant [4 x i8] c"i16\00"
@.str.1280 = private unnamed_addr constant [4 x i8] c"u16\00"
@.str.1281 = private unnamed_addr constant [4 x i8] c"i32\00"
@.str.1282 = private unnamed_addr constant [4 x i8] c"u32\00"
@.str.1283 = private unnamed_addr constant [4 x i8] c"f32\00"
@.str.1284 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1285 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1286 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.1287 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1288 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.1289 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1290 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1291 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.1292 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1293 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1294 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00"
@.str.1295 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1296 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00"
@.str.1297 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1298 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1299 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00"
@.str.1300 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1301 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1302 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.1303 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1304 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.1305 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1306 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1307 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.1308 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1309 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.1310 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1311 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.1312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1313 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.1314 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1315 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.1316 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.1317 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.1318 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.1319 = 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.1320 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1321 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.1322 = private unnamed_addr constant [42 x i8] c"a map value can't have the type 'nothing'\00"
@.str.1323 = private unnamed_addr constant [6 x i8] c"fixed\00"
@.str.1324 = private unnamed_addr constant [6 x i8] c"fixed\00"
@.str.1325 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1326 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.1327 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1328 = private unnamed_addr constant [6 x i8] c"named\00"
@.str.1329 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1330 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00"
@.str.1331 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1332 = private unnamed_addr constant [30 x i8] c"used .targs 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 [31 x i8] c"used .tnames on a null pointer\00"
@.str.1335 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1336 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1337 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.1338 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.1339 = private unnamed_addr constant [37 x i8] c"' is not imported here (add: import \00"
@.str.1340 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1341 = private unnamed_addr constant [2 x i8] c"C\00"
@.str.1342 = private unnamed_addr constant [2 x i8] c"C\00"
@.str.1343 = private unnamed_addr constant [29 x i8] c"there is no C struct named '\00"
@.str.1344 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.1345 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.1346 = private unnamed_addr constant [2 x i8] c"C\00"
@.str.1347 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1348 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.1349 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.1350 = private unnamed_addr constant [37 x i8] c"' is not imported here (add: import \00"
@.str.1351 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1352 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.1353 = private unnamed_addr constant [2 x i8] c"C\00"
@.str.1354 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.1355 = private unnamed_addr constant [2 x i8] c"C\00"
@.str.1356 = private unnamed_addr constant [25 x i8] c"there is no type named '\00"
@.str.1357 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.1358 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.1359 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1360 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.1361 = private unnamed_addr constant [2 x i8] c".\00"
@.str.1362 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1363 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.1364 = private unnamed_addr constant [1 x i8] c"\00"
@.str.1365 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1366 = private unnamed_addr constant [2 x i8] c",\00"
@.str.1367 = private unnamed_addr constant [2 x i8] c".\00"
@.str.1368 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1369 = private unnamed_addr constant [2 x i8] c" \00"
@.str.1370 = private unnamed_addr constant [1 x i8] c"\00"
@.str.1371 = private unnamed_addr constant [5 x i8] c"main\00"
@.str.1372 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.1373 = private unnamed_addr constant [3 x i8] c"i1\00"
@.str.1374 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.1375 = private unnamed_addr constant [2 x i8] c"i\00"
@.str.1376 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.1377 = private unnamed_addr constant [7 x i8] c"double\00"
@.str.1378 = private unnamed_addr constant [4 x i8] c"f32\00"
@.str.1379 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.1380 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.1381 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.1382 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.1383 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.1384 = private unnamed_addr constant [38 x i8] c"{ ptr, i64, i64, i64, ptr, i64, i64 }\00"
@.str.1385 = private unnamed_addr constant [6 x i8] c"fixed\00"
@.str.1386 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.1387 = private unnamed_addr constant [4 x i8] c" x \00"
@.str.1388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1389 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.1390 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.1391 = private unnamed_addr constant [4 x i8] c"i32\00"
@.str.1392 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.1393 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.1394 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.1395 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.1396 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.1397 = private unnamed_addr constant [4 x i8] c"%S.\00"
@.str.1398 = private unnamed_addr constant [2 x i8] c".\00"
@.str.1399 = private unnamed_addr constant [3 x i8] c"i8\00"
@.str.1400 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.1401 = private unnamed_addr constant [7 x i8] c"{ i1, \00"
@.str.1402 = private unnamed_addr constant [22 x i8] c", { ptr, i64, i64 } }\00"
@.str.1403 = private unnamed_addr constant [2 x i8] c":\00"
@.str.1404 = private unnamed_addr constant [2 x i8] c":\00"
@.str.1405 = private unnamed_addr constant [2 x i8] c":\00"
@.str.1406 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.1407 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.1408 = private unnamed_addr constant [2 x i8] c"0\00"
@.str.1409 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.1410 = private unnamed_addr constant [6 x i8] c"false\00"
@.str.1411 = private unnamed_addr constant [4 x i8] c"0.0\00"
@.str.1412 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.1413 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.1414 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.1415 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00"
@.str.1416 = private unnamed_addr constant [30 x i8] c"ptrtoint (ptr getelementptr (\00"
@.str.1417 = private unnamed_addr constant [27 x i8] c", ptr null, i32 1) to i64)\00"
@.str.1418 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.1419 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.1420 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.1421 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.1422 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1423 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.1424 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1425 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.1426 = private unnamed_addr constant [5 x i8] c"arr_\00"
@.str.1427 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1428 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.1429 = private unnamed_addr constant [5 x i8] c"map_\00"
@.str.1430 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1431 = private unnamed_addr constant [2 x i8] c"_\00"
@.str.1432 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1433 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.1434 = private unnamed_addr constant [3 x i8] c"E_\00"
@.str.1435 = private unnamed_addr constant [2 x i8] c"_\00"
@.str.1436 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.1437 = private unnamed_addr constant [3 x i8] c"S_\00"
@.str.1438 = private unnamed_addr constant [2 x i8] c"_\00"
@.str.1439 = private unnamed_addr constant [17 x i8] c"0123456789ABCDEF\00"
@.str.1440 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1441 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1442 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1443 = private unnamed_addr constant [29 x i8] c"used .nstr on a null pointer\00"
@.str.1444 = private unnamed_addr constant [7 x i8] c"@.str.\00"
@.str.1445 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1446 = private unnamed_addr constant [29 x i8] c"used .nstr on a null pointer\00"
@.str.1447 = private unnamed_addr constant [2 x i8] c"\5C\00"
@.str.1448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1449 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00"
@.str.1450 = private unnamed_addr constant [35 x i8] c" = private unnamed_addr constant [\00"
@.str.1451 = private unnamed_addr constant [10 x i8] c" x i8] c\22\00"
@.str.1452 = private unnamed_addr constant [1 x i8] c"\00"
@.str.1453 = private unnamed_addr constant [5 x i8] c"\5C00\22\00"
@.str.1454 = private unnamed_addr constant [7 x i8] c"{ ptr \00"
@.str.1455 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.1456 = private unnamed_addr constant [10 x i8] c", i64 0 }\00"
@.str.1457 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.1458 = private unnamed_addr constant [6 x i8] c"panic\00"
@.str.1459 = private unnamed_addr constant [3 x i8] c"ok\00"
@.str.1460 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1461 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.1462 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1463 = private unnamed_addr constant [28 x i8] c"call void @finch_panic(ptr \00"
@.str.1464 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.1465 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1466 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1467 = private unnamed_addr constant [12 x i8] c"unreachable\00"
@.str.1468 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1469 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.1470 = private unnamed_addr constant [6 x i8] c"range\00"
@.str.1471 = private unnamed_addr constant [8 x i8] c"inrange\00"
@.str.1472 = private unnamed_addr constant [14 x i8] c"icmp uge i64 \00"
@.str.1473 = private unnamed_addr constant [3 x i8] c", \00"
@.str.1474 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1475 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.1476 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1477 = private unnamed_addr constant [34 x i8] c"call void @finch_panic_index(ptr \00"
@.str.1478 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.1479 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.1480 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.1481 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1482 = private unnamed_addr constant [12 x i8] c"unreachable\00"
@.str.1483 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1484 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.1485 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1486 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00"
@.str.1487 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1488 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00"
@.str.1489 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1490 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00"
@.str.1491 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1492 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.1493 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1494 = private unnamed_addr constant [33 x i8] c"used .dbgScope 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 [33 x i8] c"used .dbgScope on a null pointer\00"
@.str.1497 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1498 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00"
@.str.1499 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1500 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00"
@.str.1501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1502 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00"
@.str.1503 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1504 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.1505 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1506 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.1507 = private unnamed_addr constant [11 x i8] c" {\0Aentry:\0A\00"
@.str.1508 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1509 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00"
@.str.1510 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.1511 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.1512 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1513 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00"
@.str.1514 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.1515 = private unnamed_addr constant [4 x i8] c"\0A}\0A\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 .body 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 [32 x i8] c"used .allocas 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 [28 x i8] c"used .tmp 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 [29 x i8] c"used .term 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 [33 x i8] c"used .dbgScope on a null pointer\00"
@.str.1526 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.1527 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.1528 = private unnamed_addr constant [2 x i8] c"0\00"
@.str.1529 = private unnamed_addr constant [7 x i8] c"n.cond\00"
@.str.1530 = private unnamed_addr constant [7 x i8] c"n.body\00"
@.str.1531 = private unnamed_addr constant [6 x i8] c"n.end\00"
@.str.1532 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.1533 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00"
@.str.1534 = private unnamed_addr constant [3 x i8] c", \00"
@.str.1535 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.1536 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1537 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.1538 = private unnamed_addr constant [9 x i8] c"add i64 \00"
@.str.1539 = private unnamed_addr constant [4 x i8] c", 1\00"
@.str.1540 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1541 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1542 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1543 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.1544 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00"
@.str.1545 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1546 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1547 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.1548 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.1549 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.1550 = private unnamed_addr constant [11 x i8] c"call void \00"
@.str.1551 = private unnamed_addr constant [6 x i8] c"(ptr \00"
@.str.1552 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1553 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1554 = private unnamed_addr constant [13 x i8] c"@finch.copy.\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 .done 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 [29 x i8] c"used .done on a null pointer\00"
@.str.1559 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.1560 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1561 = private unnamed_addr constant [56 x i8] c"call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 \00"
@.str.1562 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1563 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.1564 = private unnamed_addr constant [5 x i8] c"%dst\00"
@.str.1565 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.1566 = private unnamed_addr constant [5 x i8] c"%src\00"
@.str.1567 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.1568 = private unnamed_addr constant [65 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1\00"
@.str.1569 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.1570 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1571 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.1572 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1573 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.1574 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1575 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.1576 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1577 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.1578 = private unnamed_addr constant [56 x i8] c"call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 \00"
@.str.1579 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1580 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1581 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1582 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.1583 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.1584 = private unnamed_addr constant [25 x i8] c", ptr %src, i32 0, i32 2\00"
@.str.1585 = private unnamed_addr constant [5 x i8] c"%src\00"
@.str.1586 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1587 = private unnamed_addr constant [5 x i8] c"%dst\00"
@.str.1588 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1589 = private unnamed_addr constant [11 x i8] c"entry.live\00"
@.str.1590 = private unnamed_addr constant [11 x i8] c"entry.next\00"
@.str.1591 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00"
@.str.1592 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.1593 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.1594 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1595 = private unnamed_addr constant [15 x i8] c", i32 0, i32 0\00"
@.str.1596 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.1597 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1598 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1599 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1600 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.1601 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1602 = private unnamed_addr constant [5 x i8] c"%src\00"
@.str.1603 = private unnamed_addr constant [5 x i8] c"%dst\00"
@.str.1604 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1605 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.1606 = private unnamed_addr constant [24 x i8] c", ptr %dst, i32 0, i32 \00"
@.str.1607 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1608 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.1609 = private unnamed_addr constant [24 x i8] c", ptr %src, i32 0, i32 \00"
@.str.1610 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1611 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1612 = private unnamed_addr constant [9 x i8] c"ret void\00"
@.str.1613 = private unnamed_addr constant [22 x i8] c"define internal void \00"
@.str.1614 = private unnamed_addr constant [21 x i8] c"(ptr %dst, ptr %src)\00"
@.str.1615 = private unnamed_addr constant [1 x i8] c"\00"
@.str.1616 = private unnamed_addr constant [3 x i8] c", \00"
@.str.1617 = private unnamed_addr constant [36 x i8] c" = call i32 (ptr, ...) @printf(ptr \00"
@.str.1618 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1619 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00"
@.str.1620 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.1621 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00"
@.str.1622 = private unnamed_addr constant [7 x i8] c", null\00"
@.str.1623 = private unnamed_addr constant [1 x i8] c"\00"
@.str.1624 = private unnamed_addr constant [11 x i8] c"select i1 \00"
@.str.1625 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1626 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1627 = private unnamed_addr constant [5 x i8] c"%lld\00"
@.str.1628 = private unnamed_addr constant [5 x i8] c"i64 \00"
@.str.1629 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.1630 = private unnamed_addr constant [5 x i8] c"%llu\00"
@.str.1631 = private unnamed_addr constant [5 x i8] c"i64 \00"
@.str.1632 = private unnamed_addr constant [4 x i8] c"u64\00"
@.str.1633 = private unnamed_addr constant [3 x i8] c"%g\00"
@.str.1634 = private unnamed_addr constant [8 x i8] c"double \00"
@.str.1635 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.1636 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.1637 = private unnamed_addr constant [9 x i8] c"sext i8 \00"
@.str.1638 = private unnamed_addr constant [8 x i8] c" to i32\00"
@.str.1639 = private unnamed_addr constant [5 x i8] c"'%c'\00"
@.str.1640 = private unnamed_addr constant [5 x i8] c"i32 \00"
@.str.1641 = private unnamed_addr constant [3 x i8] c"%c\00"
@.str.1642 = private unnamed_addr constant [5 x i8] c"i32 \00"
@.str.1643 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.1644 = private unnamed_addr constant [5 x i8] c"true\00"
@.str.1645 = private unnamed_addr constant [6 x i8] c"false\00"
@.str.1646 = private unnamed_addr constant [11 x i8] c"select i1 \00"
@.str.1647 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1648 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1649 = private unnamed_addr constant [3 x i8] c"%s\00"
@.str.1650 = private unnamed_addr constant [5 x i8] c"ptr \00"
@.str.1651 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.1652 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00"
@.str.1653 = private unnamed_addr constant [4 x i8] c", 1\00"
@.str.1654 = private unnamed_addr constant [11 x i8] c"trunc i64 \00"
@.str.1655 = private unnamed_addr constant [8 x i8] c" to i32\00"
@.str.1656 = private unnamed_addr constant [7 x i8] c"\22%.*s\22\00"
@.str.1657 = private unnamed_addr constant [5 x i8] c"i32 \00"
@.str.1658 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1659 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.1660 = private unnamed_addr constant [5 x i8] c"i32 \00"
@.str.1661 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1662 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.1663 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00"
@.str.1664 = private unnamed_addr constant [7 x i8] c", null\00"
@.str.1665 = private unnamed_addr constant [9 x i8] c"ptr.null\00"
@.str.1666 = private unnamed_addr constant [9 x i8] c"ptr.addr\00"
@.str.1667 = private unnamed_addr constant [9 x i8] c"ptr.done\00"
@.str.1668 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.1669 = private unnamed_addr constant [1 x i8] c"\00"
@.str.1670 = private unnamed_addr constant [7 x i8] c"0x%llx\00"
@.str.1671 = private unnamed_addr constant [5 x i8] c"i64 \00"
@.str.1672 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00"
@.str.1673 = private unnamed_addr constant [8 x i8] c" to i64\00"
@.str.1674 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.1675 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.1676 = private unnamed_addr constant [1 x i8] c"\00"
@.str.1677 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.1678 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.1679 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00"
@.str.1680 = private unnamed_addr constant [32 x i8] c"call void @finch_buf_print(ptr \00"
@.str.1681 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1682 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_add(ptr \00"
@.str.1683 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1684 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.1685 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1686 = private unnamed_addr constant [2 x i8] c"0\00"
@.str.1687 = private unnamed_addr constant [2 x i8] c"1\00"
@.str.1688 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_int(ptr \00"
@.str.1689 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.1690 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.1691 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1692 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_uint(ptr \00"
@.str.1693 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.1694 = private unnamed_addr constant [4 x i8] c"u64\00"
@.str.1695 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1696 = private unnamed_addr constant [32 x i8] c"call void @finch_buf_float(ptr \00"
@.str.1697 = private unnamed_addr constant [10 x i8] c", double \00"
@.str.1698 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.1699 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1700 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.1701 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_char(ptr \00"
@.str.1702 = private unnamed_addr constant [6 x i8] c", i8 \00"
@.str.1703 = private unnamed_addr constant [7 x i8] c", i32 \00"
@.str.1704 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1705 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.1706 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_bool(ptr \00"
@.str.1707 = private unnamed_addr constant [7 x i8] c", i32 \00"
@.str.1708 = private unnamed_addr constant [9 x i8] c"zext i1 \00"
@.str.1709 = private unnamed_addr constant [8 x i8] c" to i32\00"
@.str.1710 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1711 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.1712 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_str(ptr \00"
@.str.1713 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1714 = private unnamed_addr constant [7 x i8] c", i32 \00"
@.str.1715 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1716 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.1717 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.1718 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_ptr(ptr \00"
@.str.1719 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1720 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1721 = private unnamed_addr constant [11 x i8] c"call void \00"
@.str.1722 = private unnamed_addr constant [6 x i8] c"(ptr \00"
@.str.1723 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1724 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1725 = private unnamed_addr constant [15 x i8] c"@finch.format.\00"
@.str.1726 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1727 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00"
@.str.1728 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1729 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00"
@.str.1730 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.1731 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1732 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.1733 = private unnamed_addr constant [3 x i8] c"%a\00"
@.str.1734 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.1735 = private unnamed_addr constant [63 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1\00"
@.str.1736 = private unnamed_addr constant [5 x i8] c"%buf\00"
@.str.1737 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.1738 = private unnamed_addr constant [4 x i8] c"sep\00"
@.str.1739 = private unnamed_addr constant [5 x i8] c"item\00"
@.str.1740 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00"
@.str.1741 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1742 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.1743 = private unnamed_addr constant [5 x i8] c"%buf\00"
@.str.1744 = private unnamed_addr constant [3 x i8] c", \00"
@.str.1745 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.1746 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.1747 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.1748 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1749 = private unnamed_addr constant [5 x i8] c"%buf\00"
@.str.1750 = private unnamed_addr constant [5 x i8] c"%buf\00"
@.str.1751 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.1752 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.1753 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1754 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00"
@.str.1755 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1756 = private unnamed_addr constant [4 x i8] c"i32\00"
@.str.1757 = private unnamed_addr constant [3 x i8] c"%a\00"
@.str.1758 = private unnamed_addr constant [11 x i8] c"enum.other\00"
@.str.1759 = private unnamed_addr constant [10 x i8] c"enum.done\00"
@.str.1760 = private unnamed_addr constant [7 x i8] c"enum.v\00"
@.str.1761 = private unnamed_addr constant [5 x i8] c"i32 \00"
@.str.1762 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1763 = private unnamed_addr constant [10 x i8] c", label %\00"
@.str.1764 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1765 = private unnamed_addr constant [12 x i8] c"switch i32 \00"
@.str.1766 = private unnamed_addr constant [10 x i8] c", label %\00"
@.str.1767 = private unnamed_addr constant [4 x i8] c" [ \00"
@.str.1768 = private unnamed_addr constant [2 x i8] c" \00"
@.str.1769 = private unnamed_addr constant [3 x i8] c" ]\00"
@.str.1770 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1771 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.1772 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1773 = private unnamed_addr constant [5 x i8] c"%buf\00"
@.str.1774 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1775 = private unnamed_addr constant [5 x i8] c"%buf\00"
@.str.1776 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.1777 = private unnamed_addr constant [40 x i8] c"call void @finch_buf_int(ptr %buf, i64 \00"
@.str.1778 = private unnamed_addr constant [10 x i8] c"sext i32 \00"
@.str.1779 = private unnamed_addr constant [8 x i8] c" to i64\00"
@.str.1780 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1781 = private unnamed_addr constant [5 x i8] c"%buf\00"
@.str.1782 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1783 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.1784 = private unnamed_addr constant [3 x i8] c"i1\00"
@.str.1785 = private unnamed_addr constant [3 x i8] c"i1\00"
@.str.1786 = private unnamed_addr constant [5 x i8] c"true\00"
@.str.1787 = private unnamed_addr constant [5 x i8] c"%buf\00"
@.str.1788 = private unnamed_addr constant [2 x i8] c"{\00"
@.str.1789 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.1790 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.1791 = private unnamed_addr constant [23 x i8] c", ptr %a, i32 0, i32 2\00"
@.str.1792 = private unnamed_addr constant [3 x i8] c"%a\00"
@.str.1793 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1794 = private unnamed_addr constant [11 x i8] c"entry.live\00"
@.str.1795 = private unnamed_addr constant [11 x i8] c"entry.next\00"
@.str.1796 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00"
@.str.1797 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.1798 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.1799 = private unnamed_addr constant [4 x i8] c"sep\00"
@.str.1800 = private unnamed_addr constant [5 x i8] c"item\00"
@.str.1801 = private unnamed_addr constant [3 x i8] c"i1\00"
@.str.1802 = private unnamed_addr constant [5 x i8] c"%buf\00"
@.str.1803 = private unnamed_addr constant [3 x i8] c", \00"
@.str.1804 = private unnamed_addr constant [3 x i8] c"i1\00"
@.str.1805 = private unnamed_addr constant [6 x i8] c"false\00"
@.str.1806 = private unnamed_addr constant [5 x i8] c"%buf\00"
@.str.1807 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1808 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1809 = private unnamed_addr constant [5 x i8] c"%buf\00"
@.str.1810 = private unnamed_addr constant [3 x i8] c": \00"
@.str.1811 = private unnamed_addr constant [5 x i8] c"%buf\00"
@.str.1812 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1813 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1814 = private unnamed_addr constant [5 x i8] c"%buf\00"
@.str.1815 = private unnamed_addr constant [2 x i8] c"}\00"
@.str.1816 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1817 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.1818 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1819 = private unnamed_addr constant [5 x i8] c"%buf\00"
@.str.1820 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.1821 = private unnamed_addr constant [3 x i8] c", \00"
@.str.1822 = private unnamed_addr constant [1 x i8] c"\00"
@.str.1823 = private unnamed_addr constant [5 x i8] c"%buf\00"
@.str.1824 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1825 = private unnamed_addr constant [3 x i8] c": \00"
@.str.1826 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.1827 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00"
@.str.1828 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1829 = private unnamed_addr constant [5 x i8] c"%buf\00"
@.str.1830 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1831 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1832 = private unnamed_addr constant [5 x i8] c"%buf\00"
@.str.1833 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1834 = private unnamed_addr constant [9 x i8] c"ret void\00"
@.str.1835 = private unnamed_addr constant [22 x i8] c"define internal void \00"
@.str.1836 = private unnamed_addr constant [19 x i8] c"(ptr %buf, ptr %a)\00"
@.str.1837 = private unnamed_addr constant [7 x i8] c"trunc \00"
@.str.1838 = private unnamed_addr constant [2 x i8] c" \00"
@.str.1839 = private unnamed_addr constant [5 x i8] c" to \00"
@.str.1840 = private unnamed_addr constant [6 x i8] c"sext \00"
@.str.1841 = private unnamed_addr constant [2 x i8] c" \00"
@.str.1842 = private unnamed_addr constant [5 x i8] c" to \00"
@.str.1843 = private unnamed_addr constant [6 x i8] c"zext \00"
@.str.1844 = private unnamed_addr constant [2 x i8] c" \00"
@.str.1845 = private unnamed_addr constant [5 x i8] c" to \00"
@.str.1846 = private unnamed_addr constant [7 x i8] c"fpext \00"
@.str.1847 = private unnamed_addr constant [2 x i8] c" \00"
@.str.1848 = private unnamed_addr constant [5 x i8] c" to \00"
@.str.1849 = private unnamed_addr constant [9 x i8] c"fptrunc \00"
@.str.1850 = private unnamed_addr constant [2 x i8] c" \00"
@.str.1851 = private unnamed_addr constant [5 x i8] c" to \00"
@.str.1852 = private unnamed_addr constant [8 x i8] c"sitofp \00"
@.str.1853 = private unnamed_addr constant [2 x i8] c" \00"
@.str.1854 = private unnamed_addr constant [5 x i8] c" to \00"
@.str.1855 = private unnamed_addr constant [8 x i8] c"uitofp \00"
@.str.1856 = private unnamed_addr constant [2 x i8] c" \00"
@.str.1857 = private unnamed_addr constant [5 x i8] c" to \00"
@.str.1858 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.1859 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.1860 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.1861 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.1862 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.1863 = private unnamed_addr constant [12 x i8] c"the number \00"
@.str.1864 = private unnamed_addr constant [17 x i8] c" doesn't fit in \00"
@.str.1865 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.1866 = private unnamed_addr constant [3 x i8] c".0\00"
@.str.1867 = private unnamed_addr constant [4 x i8] c"f32\00"
@.str.1868 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.1869 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.1870 = private unnamed_addr constant [4 x i8] c"f32\00"
@.str.1871 = private unnamed_addr constant [10 x i8] c" must be \00"
@.str.1872 = private unnamed_addr constant [15 x i8] c", but this is \00"
@.str.1873 = private unnamed_addr constant [7 x i8] c" (use \00"
@.str.1874 = private unnamed_addr constant [17 x i8] c"(...) to convert\00"
@.str.1875 = private unnamed_addr constant [27 x i8] c", it cuts off the fraction\00"
@.str.1876 = private unnamed_addr constant [2 x i8] c")\00"
@.str.1877 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.1878 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.1879 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.1880 = private unnamed_addr constant [35 x i8] c" (turn it into text with str(...))\00"
@.str.1881 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1882 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.1883 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1884 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.1885 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1886 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.1887 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1888 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1889 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.1890 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1891 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1892 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1893 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00"
@.str.1894 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1895 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.1896 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1897 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1898 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1899 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00"
@.str.1900 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1901 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.1902 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1903 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1904 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1905 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.1906 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1907 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.1908 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1909 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1910 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.1911 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1912 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1913 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.1914 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1915 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1916 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.1917 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1918 = private unnamed_addr constant [29 x i8] c"used .sigs 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 [12 x i8] c"src/gen.fch\00"
@.str.1921 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.1922 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1923 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1924 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.1925 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1926 = private unnamed_addr constant [6 x i8] c"print\00"
@.str.1927 = private unnamed_addr constant [5 x i8] c"addr\00"
@.str.1928 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.1929 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.1930 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.1931 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.1932 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.1933 = private unnamed_addr constant [10 x i8] c"read_file\00"
@.str.1934 = private unnamed_addr constant [11 x i8] c"write_file\00"
@.str.1935 = private unnamed_addr constant [12 x i8] c"file_exists\00"
@.str.1936 = private unnamed_addr constant [6 x i8] c"shell\00"
@.str.1937 = private unnamed_addr constant [5 x i8] c"exit\00"
@.str.1938 = private unnamed_addr constant [6 x i8] c"input\00"
@.str.1939 = private unnamed_addr constant [4 x i8] c"new\00"
@.str.1940 = private unnamed_addr constant [5 x i8] c"free\00"
@.str.1941 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.1942 = private unnamed_addr constant [12 x i8] c"delete_file\00"
@.str.1943 = private unnamed_addr constant [3 x i8] c"i8\00"
@.str.1944 = private unnamed_addr constant [4 x i8] c"i16\00"
@.str.1945 = private unnamed_addr constant [4 x i8] c"i32\00"
@.str.1946 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.1947 = private unnamed_addr constant [3 x i8] c"u8\00"
@.str.1948 = private unnamed_addr constant [4 x i8] c"u16\00"
@.str.1949 = private unnamed_addr constant [4 x i8] c"u32\00"
@.str.1950 = private unnamed_addr constant [4 x i8] c"u64\00"
@.str.1951 = private unnamed_addr constant [4 x i8] c"f32\00"
@.str.1952 = private unnamed_addr constant [4 x i8] c"f64\00"
@.str.1953 = private unnamed_addr constant [6 x i8] c"error\00"
@.str.1954 = private unnamed_addr constant [4 x i8] c"err\00"
@.str.1955 = private unnamed_addr constant [19 x i8] c"a variable named '\00"
@.str.1956 = private unnamed_addr constant [22 x i8] c"' already exists here\00"
@.str.1957 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1958 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.1959 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.1960 = private unnamed_addr constant [36 x i8] c"' is already the name of a function\00"
@.str.1961 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.1962 = private unnamed_addr constant [39 x i8] c"' is a built-in name, pick another one\00"
@.str.1963 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1964 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.1965 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1966 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.1967 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1968 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1969 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00"
@.str.1970 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1971 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.1972 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1973 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1974 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00"
@.str.1975 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1976 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00"
@.str.1977 = private unnamed_addr constant [4 x i8] c"err\00"
@.str.1978 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1979 = private unnamed_addr constant [2 x i8] c"$\00"
@.str.1980 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1981 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.1982 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1983 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.1984 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1985 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1986 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.1987 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1988 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1989 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00"
@.str.1990 = private unnamed_addr constant [4 x i8] c"@V\09\00"
@.str.1991 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1992 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1993 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1994 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.1995 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.1996 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1997 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1998 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.1999 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2000 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.2001 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2002 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.2003 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.2004 = private unnamed_addr constant [10 x i8] c"```finch\0A\00"
@.str.2005 = private unnamed_addr constant [2 x i8] c" \00"
@.str.2006 = private unnamed_addr constant [5 x i8] c"\0A```\00"
@.str.2007 = private unnamed_addr constant [1 x i8] c"\00"
@.str.2008 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2009 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.2010 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2011 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.2012 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2013 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00"
@.str.2014 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2015 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.2016 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2017 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2018 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00"
@.str.2019 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2020 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00"
@.str.2021 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2022 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00"
@.str.2023 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2024 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2025 = private unnamed_addr constant [35 x i8] c"used .deferLimit 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 [32 x i8] c"used .inDefer 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 [32 x i8] c"used .inDefer 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 [32 x i8] c"used .deferOn on a null pointer\00"
@.str.2033 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2034 = private unnamed_addr constant [35 x i8] c"used .deferLimit 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 [29 x i8] c"used .term on a null pointer\00"
@.str.2039 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2040 = private unnamed_addr constant [31 x i8] c"used .scopes 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 [24 x i8] c"pop() on an empty array\00"
@.str.2045 = private unnamed_addr constant [4 x i8] c"var\00"
@.str.2046 = private unnamed_addr constant [7 x i8] c"member\00"
@.str.2047 = private unnamed_addr constant [6 x i8] c"index\00"
@.str.2048 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2049 = private unnamed_addr constant [1 x i8] c"\00"
@.str.2050 = private unnamed_addr constant [5 x i8] c"push\00"
@.str.2051 = private unnamed_addr constant [4 x i8] c"pop\00"
@.str.2052 = private unnamed_addr constant [7 x i8] c"insert\00"
@.str.2053 = private unnamed_addr constant [7 x i8] c"remove\00"
@.str.2054 = private unnamed_addr constant [6 x i8] c"clear\00"
@.str.2055 = private unnamed_addr constant [7 x i8] c"resize\00"
@.str.2056 = private unnamed_addr constant [5 x i8] c"sort\00"
@.str.2057 = private unnamed_addr constant [8 x i8] c"reverse\00"
@.str.2058 = private unnamed_addr constant [7 x i8] c"assign\00"
@.str.2059 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2060 = private unnamed_addr constant [7 x i8] c"method\00"
@.str.2061 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2062 = private unnamed_addr constant [27 x i8] c"used .mm 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 [5 x i8] c"call\00"
@.str.2065 = private unnamed_addr constant [5 x i8] c"addr\00"
@.str.2066 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2067 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2068 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.2069 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2070 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.2071 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2072 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2073 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2074 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2075 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.2076 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2077 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2078 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.2079 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2080 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2081 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2082 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2083 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2084 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2085 = private unnamed_addr constant [1 x i8] c"\00"
@.str.2086 = private unnamed_addr constant [13 x i8] c"the struct '\00"
@.str.2087 = private unnamed_addr constant [19 x i8] c"' is defined twice\00"
@.str.2088 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2089 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00"
@.str.2090 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2091 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2092 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2093 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2094 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2095 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2096 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2097 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.2098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2099 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.2100 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2101 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2102 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2103 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2104 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.2105 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2107 = private unnamed_addr constant [30 x i8] c"used .progs 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 [12 x i8] c"src/gen.fch\00"
@.str.2111 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\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 .module on a null pointer\00"
@.str.2114 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.2115 = private unnamed_addr constant [19 x i8] c"' is defined twice\00"
@.str.2116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2117 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2118 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2119 = private unnamed_addr constant [10 x i8] c"the enum \00"
@.str.2120 = private unnamed_addr constant [18 x i8] c" has the variant \00"
@.str.2121 = private unnamed_addr constant [7 x i8] c" twice\00"
@.str.2122 = private unnamed_addr constant [17 x i8] c"two variants of \00"
@.str.2123 = private unnamed_addr constant [18 x i8] c" have the number \00"
@.str.2124 = private unnamed_addr constant [21 x i8] c" (give each its own)\00"
@.str.2125 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2126 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00"
@.str.2127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2128 = private unnamed_addr constant [27 x i8] c"used .ci 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 [32 x i8] c"used .structs on a null pointer\00"
@.str.2131 = private unnamed_addr constant [2 x i8] c"C\00"
@.str.2132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2133 = private unnamed_addr constant [27 x i8] c"used .ci 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 [32 x i8] c"used .structs on a null pointer\00"
@.str.2137 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2138 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.2139 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2140 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.2141 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2142 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2143 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2144 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2145 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.2146 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2147 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2148 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.2149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2150 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2152 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2153 = private unnamed_addr constant [11 x i8] c"function '\00"
@.str.2154 = private unnamed_addr constant [19 x i8] c"' is defined twice\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 .module on a null pointer\00"
@.str.2157 = private unnamed_addr constant [1 x i8] c"\00"
@.str.2158 = private unnamed_addr constant [35 x i8] c"there is no generic struct named '\00"
@.str.2159 = private unnamed_addr constant [54 x i8] c"' here (a method goes in the same file as its struct)\00"
@.str.2160 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2161 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00"
@.str.2162 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2163 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2164 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2165 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2166 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2167 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2168 = private unnamed_addr constant [12 x i8] c"the method \00"
@.str.2169 = private unnamed_addr constant [2 x i8] c".\00"
@.str.2170 = private unnamed_addr constant [18 x i8] c" is defined twice\00"
@.str.2171 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2172 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2173 = private unnamed_addr constant [2 x i8] c"C\00"
@.str.2174 = private unnamed_addr constant [2 x i8] c"C\00"
@.str.2175 = private unnamed_addr constant [2 x i8] c"C\00"
@.str.2176 = private unnamed_addr constant [27 x i8] c"there is no struct named '\00"
@.str.2177 = 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.2178 = private unnamed_addr constant [12 x i8] c"the method \00"
@.str.2179 = private unnamed_addr constant [2 x i8] c".\00"
@.str.2180 = private unnamed_addr constant [18 x i8] c" is defined twice\00"
@.str.2181 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2182 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2183 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2184 = private unnamed_addr constant [12 x i8] c"the struct \00"
@.str.2185 = private unnamed_addr constant [29 x i8] c" already has a field named '\00"
@.str.2186 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.2187 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2188 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2189 = private unnamed_addr constant [11 x i8] c"function '\00"
@.str.2190 = private unnamed_addr constant [19 x i8] c"' is defined twice\00"
@.str.2191 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.2192 = private unnamed_addr constant [44 x i8] c"' is a built-in function, pick another name\00"
@.str.2193 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2194 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2195 = private unnamed_addr constant [8 x i8] c"@finch.\00"
@.str.2196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2197 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2198 = private unnamed_addr constant [2 x i8] c".\00"
@.str.2199 = private unnamed_addr constant [8 x i8] c"@finch.\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 .module on a null pointer\00"
@.str.2202 = private unnamed_addr constant [2 x i8] c".\00"
@.str.2203 = private unnamed_addr constant [2 x i8] c".\00"
@.str.2204 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2205 = private unnamed_addr constant [5 x i8] c"self\00"
@.str.2206 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2207 = private unnamed_addr constant [23 x i8] c"'self' is already the \00"
@.str.2208 = private unnamed_addr constant [25 x i8] c" the method is called on\00"
@.str.2209 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2210 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2211 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2212 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2213 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.2214 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2215 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.2216 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2217 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.2218 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2219 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2220 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.2221 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2222 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2223 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.2224 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2225 = private unnamed_addr constant [29 x i8] c"used .sigs 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 [12 x i8] c"src/gen.fch\00"
@.str.2228 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2229 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.2230 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2231 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2232 = private unnamed_addr constant [5 x i8] c"self\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 [29 x i8] c"used .sigs 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 [27 x i8] c"used .mm on a null pointer\00"
@.str.2239 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2240 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.2241 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2242 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2243 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00"
@.str.2244 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2245 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00"
@.str.2246 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2247 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2248 = private unnamed_addr constant [30 x i8] c"used .progs 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 [12 x i8] c"src/gen.fch\00"
@.str.2251 = private unnamed_addr constant [5 x i8] c"self\00"
@.str.2252 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2253 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2254 = private unnamed_addr constant [34 x i8] c"used .templates 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 [12 x i8] c"src/gen.fch\00"
@.str.2257 = private unnamed_addr constant [27 x i8] c"used .mm on a null pointer\00"
@.str.2258 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2259 = private unnamed_addr constant [29 x i8] c"used .sigs 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 [29 x i8] c"used .sigs on a null pointer\00"
@.str.2264 = private unnamed_addr constant [12 x i8] c"src/gen.fch\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 [29 x i8] c"used .sigs on a null pointer\00"
@.str.2268 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2269 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2270 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2271 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2272 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.2273 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2274 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2275 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.2276 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2277 = private unnamed_addr constant [12 x i8] c"src/gen.fch\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 .sigs 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 [12 x i8] c"src/gen.fch\00"
@.str.2282 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.2283 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2284 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2285 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2286 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00"
@.str.2287 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2288 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00"
@.str.2289 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2290 = private unnamed_addr constant [3 x i8] c", \00"
@.str.2291 = private unnamed_addr constant [1 x i8] c"\00"
@.str.2292 = private unnamed_addr constant [35 x i8] c"there is no generic struct named '\00"
@.str.2293 = private unnamed_addr constant [29 x i8] c"' (a struct written struct \00"
@.str.2294 = private unnamed_addr constant [35 x i8] c"[T] { ... } takes type arguments)\00"
@.str.2295 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2296 = private unnamed_addr constant [34 x i8] c"used .templates 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 [8 x i8] c" takes \00"
@.str.2299 = private unnamed_addr constant [25 x i8] c" type argument(s), like \00"
@.str.2300 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.2301 = private unnamed_addr constant [3 x i8] c", \00"
@.str.2302 = private unnamed_addr constant [12 x i8] c"], but got \00"
@.str.2303 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.2304 = private unnamed_addr constant [2 x i8] c"]\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 [32 x i8] c"used .structs on a null pointer\00"
@.str.2309 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.2310 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2311 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00"
@.str.2312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2313 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.2314 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.2315 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2316 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.2317 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2318 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2319 = private unnamed_addr constant [8 x i8] c"@finch.\00"
@.str.2320 = private unnamed_addr constant [2 x i8] c".\00"
@.str.2321 = private unnamed_addr constant [2 x i8] c".\00"
@.str.2322 = private unnamed_addr constant [8 x i8] c"@finch.\00"
@.str.2323 = private unnamed_addr constant [2 x i8] c".\00"
@.str.2324 = private unnamed_addr constant [2 x i8] c".\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 .tnames on a null pointer\00"
@.str.2327 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2328 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00"
@.str.2329 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2330 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2331 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2332 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00"
@.str.2333 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2334 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00"
@.str.2335 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2336 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00"
@.str.2337 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2338 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2339 = private unnamed_addr constant [18 x i8] c" (while building \00"
@.str.2340 = private unnamed_addr constant [2 x i8] c")\00"
@.str.2341 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2342 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00"
@.str.2343 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2344 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2345 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2346 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2347 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2348 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2349 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00"
@.str.2350 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2351 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00"
@.str.2352 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2353 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2354 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2355 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00"
@.str.2356 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2357 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.2358 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2359 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.2360 = private unnamed_addr constant [6 x i8] c"named\00"
@.str.2361 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2362 = private unnamed_addr constant [30 x i8] c"used .bound on a null pointer\00"
@.str.2363 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2365 = private unnamed_addr constant [30 x i8] c"used .types on a null pointer\00"
@.str.2366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2367 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2368 = private unnamed_addr constant [30 x i8] c"used .bound on a null pointer\00"
@.str.2369 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2370 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.2371 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.2372 = private unnamed_addr constant [6 x i8] c"fixed\00"
@.str.2373 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2374 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2375 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.2376 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.2377 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2378 = private unnamed_addr constant [12 x i8] c"src/gen.fch\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 [6 x i8] c"named\00"
@.str.2382 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.2383 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2384 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2385 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2386 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2387 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2389 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00"
@.str.2390 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2391 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2392 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.2393 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2394 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2395 = private unnamed_addr constant [8 x i8] c" takes \00"
@.str.2396 = private unnamed_addr constant [28 x i8] c" type argument(s), but got \00"
@.str.2397 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.2398 = private unnamed_addr constant [1 x i8] c"\00"
@.str.2399 = private unnamed_addr constant [1 x i8] c"\00"
@.str.2400 = private unnamed_addr constant [5 x i8] c"void\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"void\00"
@.str.2403 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.2404 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2405 = private unnamed_addr constant [30 x i8] c"this has no type to work out \00"
@.str.2406 = private unnamed_addr constant [3 x i8] c", \00"
@.str.2407 = private unnamed_addr constant [6 x i8] c" from\00"
@.str.2408 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2409 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2410 = private unnamed_addr constant [17 x i8] c"can't tell what \00"
@.str.2411 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2412 = private unnamed_addr constant [25 x i8] c" is here; write it out: \00"
@.str.2413 = private unnamed_addr constant [11 x i8] c"[int](...)\00"
@.str.2414 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.2415 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2416 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.2417 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2418 = private unnamed_addr constant [12 x i8] c"src/gen.fch\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 [11 x i8] c"argument '\00"
@.str.2422 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2423 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.2424 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2425 = private unnamed_addr constant [2 x i8] c" \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 .ci 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 [32 x i8] c"used .structs 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 [12 x i8] c"src/gen.fch\00"
@.str.2432 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2433 = private unnamed_addr constant [32 x i8] c"used .structs 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 [7 x i8] c"struct\00"
@.str.2436 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.2437 = private unnamed_addr constant [7 x i8] c" x i8]\00"
@.str.2438 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2439 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\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 [32 x i8] c"used .structs 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 [32 x i8] c"used .structs 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 [32 x i8] c"used .structs on a null pointer\00"
@.str.2449 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2450 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.2451 = private unnamed_addr constant [7 x i8] c" x i8]\00"
@.str.2452 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2453 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2454 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2455 = private unnamed_addr constant [50 x i8] c"has fields Finch can't see (unions or bit fields)\00"
@.str.2456 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2457 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2458 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2459 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2460 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2461 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2462 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2463 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2464 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2465 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2466 = private unnamed_addr constant [32 x i8] c"used .structs 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 [12 x i8] c"src/gen.fch\00"
@.str.2469 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00"
@.str.2470 = private unnamed_addr constant [6 x i8] c"%S.C.\00"
@.str.2471 = private unnamed_addr constant [11 x i8] c" = type { \00"
@.str.2472 = private unnamed_addr constant [3 x i8] c", \00"
@.str.2473 = private unnamed_addr constant [3 x i8] c" }\00"
@.str.2474 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2475 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2476 = private unnamed_addr constant [12 x i8] c"src/gen.fch\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 [12 x i8] c"src/gen.fch\00"
@.str.2480 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2481 = private unnamed_addr constant [32 x i8] c"used .structs 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 [12 x i8] c"src/gen.fch\00"
@.str.2484 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\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 .targs 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 [33 x i8] c"used .instNote on a null pointer\00"
@.str.2489 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2490 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2491 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2492 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2493 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00"
@.str.2494 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2495 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2496 = private unnamed_addr constant [12 x i8] c"src/gen.fch\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 [18 x i8] c" (while building \00"
@.str.2500 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2501 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2502 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2503 = private unnamed_addr constant [2 x i8] c")\00"
@.str.2504 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2505 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00"
@.str.2506 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2507 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00"
@.str.2508 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2509 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00"
@.str.2510 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2511 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00"
@.str.2512 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2513 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.2514 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2515 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\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 [32 x i8] c"used .structs 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 [12 x i8] c"src/gen.fch\00"
@.str.2522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2523 = private unnamed_addr constant [32 x i8] c"used .structs 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 [12 x i8] c"the struct \00"
@.str.2526 = private unnamed_addr constant [27 x i8] c" contains itself; use ptr[\00"
@.str.2527 = private unnamed_addr constant [8 x i8] c"] or []\00"
@.str.2528 = private unnamed_addr constant [16 x i8] c" for that field\00"
@.str.2529 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2530 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2531 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2532 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2533 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2534 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2535 = private unnamed_addr constant [32 x i8] c"used .structs 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 [31 x i8] c"used .module on a null pointer\00"
@.str.2539 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.2540 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2541 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2542 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2543 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2544 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2545 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2546 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2547 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\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 [32 x i8] c"used .structs on a null pointer\00"
@.str.2551 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2552 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2553 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2554 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2555 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2556 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2558 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2559 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2560 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2561 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00"
@.str.2562 = private unnamed_addr constant [4 x i8] c"%S.\00"
@.str.2563 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2564 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2565 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2566 = private unnamed_addr constant [2 x i8] c".\00"
@.str.2567 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2568 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2569 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2570 = private unnamed_addr constant [11 x i8] c" = type { \00"
@.str.2571 = private unnamed_addr constant [3 x i8] c", \00"
@.str.2572 = private unnamed_addr constant [3 x i8] c" }\00"
@.str.2573 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2574 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00"
@.str.2575 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2576 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00"
@.str.2577 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.2578 = private unnamed_addr constant [2 x i8] c"!\00"
@.str.2579 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2580 = private unnamed_addr constant [17 x i8] c"division by zero\00"
@.str.2581 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.2582 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.2583 = private unnamed_addr constant [3 x i8] c"i8\00"
@.str.2584 = private unnamed_addr constant [3 x i8] c"u8\00"
@.str.2585 = private unnamed_addr constant [4 x i8] c"i16\00"
@.str.2586 = private unnamed_addr constant [4 x i8] c"u16\00"
@.str.2587 = private unnamed_addr constant [4 x i8] c"i32\00"
@.str.2588 = private unnamed_addr constant [4 x i8] c"u32\00"
@.str.2589 = private unnamed_addr constant [4 x i8] c"f32\00"
@.str.2590 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.2591 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.2592 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.2593 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.2594 = private unnamed_addr constant [6 x i8] c"fixed\00"
@.str.2595 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2596 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.2597 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2598 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2599 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2600 = private unnamed_addr constant [43 x i8] c"!DIDerivedType(tag: DW_TAG_member, name: \22\00"
@.str.2601 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00"
@.str.2602 = private unnamed_addr constant [10 x i8] c", file: !\00"
@.str.2603 = private unnamed_addr constant [9 x i8] c", line: \00"
@.str.2604 = private unnamed_addr constant [13 x i8] c", baseType: \00"
@.str.2605 = private unnamed_addr constant [9 x i8] c", size: \00"
@.str.2606 = private unnamed_addr constant [11 x i8] c", offset: \00"
@.str.2607 = private unnamed_addr constant [2 x i8] c")\00"
@.str.2608 = private unnamed_addr constant [21 x i8] c"!DIBasicType(name: \22\00"
@.str.2609 = private unnamed_addr constant [10 x i8] c"\22, size: \00"
@.str.2610 = private unnamed_addr constant [13 x i8] c", encoding: \00"
@.str.2611 = private unnamed_addr constant [2 x i8] c")\00"
@.str.2612 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.2613 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.2614 = private unnamed_addr constant [3 x i8] c"T:\00"
@.str.2615 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2616 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00"
@.str.2617 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2618 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00"
@.str.2619 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2620 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2621 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00"
@.str.2622 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2623 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.2624 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.2625 = private unnamed_addr constant [15 x i8] c"DW_ATE_boolean\00"
@.str.2626 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.2627 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.2628 = private unnamed_addr constant [19 x i8] c"DW_ATE_signed_char\00"
@.str.2629 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.2630 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.2631 = private unnamed_addr constant [14 x i8] c"DW_ATE_signed\00"
@.str.2632 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.2633 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.2634 = private unnamed_addr constant [13 x i8] c"DW_ATE_float\00"
@.str.2635 = private unnamed_addr constant [4 x i8] c"f32\00"
@.str.2636 = private unnamed_addr constant [4 x i8] c"f32\00"
@.str.2637 = private unnamed_addr constant [13 x i8] c"DW_ATE_float\00"
@.str.2638 = private unnamed_addr constant [16 x i8] c"DW_ATE_unsigned\00"
@.str.2639 = private unnamed_addr constant [14 x i8] c"DW_ATE_signed\00"
@.str.2640 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.2641 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2642 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00"
@.str.2643 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2644 = private unnamed_addr constant [22 x i8] c"!DIEnumerator(name: \22\00"
@.str.2645 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2646 = private unnamed_addr constant [11 x i8] c"\22, value: \00"
@.str.2647 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2648 = private unnamed_addr constant [2 x i8] c")\00"
@.str.2649 = private unnamed_addr constant [55 x i8] c"!DICompositeType(tag: DW_TAG_enumeration_type, name: \22\00"
@.str.2650 = private unnamed_addr constant [11 x i8] c"\22, file: !\00"
@.str.2651 = private unnamed_addr constant [25 x i8] c", size: 32, elements: !{\00"
@.str.2652 = private unnamed_addr constant [3 x i8] c", \00"
@.str.2653 = private unnamed_addr constant [3 x i8] c"})\00"
@.str.2654 = private unnamed_addr constant [1 x i8] c"\00"
@.str.2655 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2656 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00"
@.str.2657 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.2658 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2659 = private unnamed_addr constant [52 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: \00"
@.str.2660 = private unnamed_addr constant [12 x i8] c", size: 64)\00"
@.str.2661 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2662 = private unnamed_addr constant [27 x i8] c"used .md 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 [6 x i8] c"fixed\00"
@.str.2665 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2666 = private unnamed_addr constant [20 x i8] c"!DISubrange(count: \00"
@.str.2667 = private unnamed_addr constant [2 x i8] c")\00"
@.str.2668 = private unnamed_addr constant [52 x i8] c"!DICompositeType(tag: DW_TAG_array_type, baseType: \00"
@.str.2669 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2670 = private unnamed_addr constant [9 x i8] c", size: \00"
@.str.2671 = private unnamed_addr constant [16 x i8] c", elements: !{!\00"
@.str.2672 = private unnamed_addr constant [3 x i8] c"})\00"
@.str.2673 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2674 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00"
@.str.2675 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2676 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.2677 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.2678 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.2679 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.2680 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2681 = private unnamed_addr constant [52 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: \00"
@.str.2682 = private unnamed_addr constant [12 x i8] c", size: 64)\00"
@.str.2683 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.2684 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.2685 = private unnamed_addr constant [4 x i8] c"len\00"
@.str.2686 = private unnamed_addr constant [4 x i8] c"cap\00"
@.str.2687 = private unnamed_addr constant [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00"
@.str.2688 = private unnamed_addr constant [11 x i8] c"\22, file: !\00"
@.str.2689 = private unnamed_addr constant [38 x i8] c", size: 192, align: 64, elements: !{!\00"
@.str.2690 = private unnamed_addr constant [4 x i8] c", !\00"
@.str.2691 = private unnamed_addr constant [4 x i8] c", !\00"
@.str.2692 = private unnamed_addr constant [3 x i8] c"})\00"
@.str.2693 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2694 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00"
@.str.2695 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2696 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.2697 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.2698 = private unnamed_addr constant [67 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64)\00"
@.str.2699 = private unnamed_addr constant [8 x i8] c"entries\00"
@.str.2700 = private unnamed_addr constant [4 x i8] c"len\00"
@.str.2701 = private unnamed_addr constant [5 x i8] c"used\00"
@.str.2702 = private unnamed_addr constant [4 x i8] c"cap\00"
@.str.2703 = private unnamed_addr constant [6 x i8] c"index\00"
@.str.2704 = private unnamed_addr constant [5 x i8] c"icap\00"
@.str.2705 = private unnamed_addr constant [5 x i8] c"adds\00"
@.str.2706 = private unnamed_addr constant [2 x i8] c"!\00"
@.str.2707 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2708 = private unnamed_addr constant [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00"
@.str.2709 = private unnamed_addr constant [11 x i8] c"\22, file: !\00"
@.str.2710 = private unnamed_addr constant [37 x i8] c", size: 448, align: 64, elements: !{\00"
@.str.2711 = private unnamed_addr constant [3 x i8] c", \00"
@.str.2712 = private unnamed_addr constant [3 x i8] c"})\00"
@.str.2713 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2714 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00"
@.str.2715 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2716 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.2717 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2718 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.2719 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2720 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2721 = private unnamed_addr constant [2 x i8] c"!\00"
@.str.2722 = private unnamed_addr constant [12 x i8] c"src/gen.fch\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 [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00"
@.str.2726 = private unnamed_addr constant [11 x i8] c"\22, file: !\00"
@.str.2727 = private unnamed_addr constant [9 x i8] c", size: \00"
@.str.2728 = private unnamed_addr constant [25 x i8] c", align: 8, elements: !{\00"
@.str.2729 = private unnamed_addr constant [3 x i8] c", \00"
@.str.2730 = private unnamed_addr constant [3 x i8] c"})\00"
@.str.2731 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2732 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00"
@.str.2733 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2734 = private unnamed_addr constant [21 x i8] c"!DIBasicType(name: \22\00"
@.str.2735 = private unnamed_addr constant [40 x i8] c"\22, size: 64, encoding: DW_ATE_unsigned)\00"
@.str.2736 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2737 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00"
@.str.2738 = private unnamed_addr constant [12 x i8] c"src/gen.fch\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 .mdcache on a null pointer\00"
@.str.2741 = private unnamed_addr constant [3 x i8] c"L:\00"
@.str.2742 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2743 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00"
@.str.2744 = private unnamed_addr constant [2 x i8] c":\00"
@.str.2745 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2746 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00"
@.str.2747 = private unnamed_addr constant [2 x i8] c":\00"
@.str.2748 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2749 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00"
@.str.2750 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2751 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00"
@.str.2752 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2753 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00"
@.str.2754 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2755 = private unnamed_addr constant [19 x i8] c"!DILocation(line: \00"
@.str.2756 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2757 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00"
@.str.2758 = private unnamed_addr constant [11 x i8] c", column: \00"
@.str.2759 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2760 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00"
@.str.2761 = private unnamed_addr constant [11 x i8] c", scope: !\00"
@.str.2762 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2763 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00"
@.str.2764 = private unnamed_addr constant [2 x i8] c")\00"
@.str.2765 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2766 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00"
@.str.2767 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2768 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2769 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.2770 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2771 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00"
@.str.2772 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2773 = private unnamed_addr constant [28 x i8] c"!DISubroutineType(types: !{\00"
@.str.2774 = private unnamed_addr constant [3 x i8] c", \00"
@.str.2775 = private unnamed_addr constant [3 x i8] c"})\00"
@.str.2776 = private unnamed_addr constant [31 x i8] c"distinct !DISubprogram(name: \22\00"
@.str.2777 = private unnamed_addr constant [18 x i8] c"\22, linkageName: \22\00"
@.str.2778 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2779 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00"
@.str.2780 = private unnamed_addr constant [10 x i8] c", file: !\00"
@.str.2781 = private unnamed_addr constant [9 x i8] c", line: \00"
@.str.2782 = private unnamed_addr constant [10 x i8] c", type: !\00"
@.str.2783 = private unnamed_addr constant [14 x i8] c", scopeLine: \00"
@.str.2784 = private unnamed_addr constant [88 x i8] c", flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagLocalToUnit, unit: !0)\00"
@.str.2785 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2786 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00"
@.str.2787 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2788 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00"
@.str.2789 = private unnamed_addr constant [1 x i8] c"\00"
@.str.2790 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2791 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00"
@.str.2792 = private unnamed_addr constant [8 x i8] c", arg: \00"
@.str.2793 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2794 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00"
@.str.2795 = private unnamed_addr constant [25 x i8] c"!DILocalVariable(name: \22\00"
@.str.2796 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00"
@.str.2797 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2798 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00"
@.str.2799 = private unnamed_addr constant [10 x i8] c", file: !\00"
@.str.2800 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2801 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00"
@.str.2802 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2803 = private unnamed_addr constant [9 x i8] c", line: \00"
@.str.2804 = private unnamed_addr constant [10 x i8] c", type: !\00"
@.str.2805 = private unnamed_addr constant [2 x i8] c")\00"
@.str.2806 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2807 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00"
@.str.2808 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2809 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00"
@.str.2810 = private unnamed_addr constant [42 x i8] c"call void @llvm.dbg.declare(metadata ptr \00"
@.str.2811 = private unnamed_addr constant [13 x i8] c", metadata !\00"
@.str.2812 = private unnamed_addr constant [28 x i8] c", metadata !DIExpression())\00"
@.str.2813 = private unnamed_addr constant [21 x i8] c"!llvm.dbg.cu = !{!0}\00"
@.str.2814 = private unnamed_addr constant [31 x i8] c"!llvm.module.flags = !{!1, !2}\00"
@.str.2815 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2816 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00"
@.str.2817 = private unnamed_addr constant [2 x i8] c"!\00"
@.str.2818 = private unnamed_addr constant [4 x i8] c" = \00"
@.str.2819 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2820 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00"
@.str.2821 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2822 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.2823 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.2824 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2825 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.2826 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2827 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2828 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2829 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2830 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2831 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2832 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.2833 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2834 = private unnamed_addr constant [28 x i8] c"used .cur 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 [31 x i8] c"used .tnames on a null pointer\00"
@.str.2837 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2838 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2839 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2840 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00"
@.str.2841 = private unnamed_addr constant [1 x i8] c"\00"
@.str.2842 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2843 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00"
@.str.2844 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2845 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2846 = private unnamed_addr constant [18 x i8] c" (while building \00"
@.str.2847 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2848 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2849 = private unnamed_addr constant [2 x i8] c")\00"
@.str.2850 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2851 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00"
@.str.2852 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2853 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.2854 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2855 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2856 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2857 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2858 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2859 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2860 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2861 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00"
@.str.2862 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2863 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00"
@.str.2864 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2865 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00"
@.str.2866 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2867 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.2868 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2869 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00"
@.str.2870 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2871 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00"
@.str.2872 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2873 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00"
@.str.2874 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2875 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00"
@.str.2876 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2877 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00"
@.str.2878 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2879 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00"
@.str.2880 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2881 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00"
@.str.2882 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2883 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00"
@.str.2884 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2885 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.2886 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2887 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2888 = private unnamed_addr constant [10 x i8] c"ptr %self\00"
@.str.2889 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.2890 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2891 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2892 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.2893 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2894 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2895 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2896 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2897 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2898 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.2899 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2900 = private unnamed_addr constant [5 x i8] c"self\00"
@.str.2901 = private unnamed_addr constant [6 x i8] c"%self\00"
@.str.2902 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2903 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00"
@.str.2904 = private unnamed_addr constant [5 x i8] c"self\00"
@.str.2905 = private unnamed_addr constant [6 x i8] c"%self\00"
@.str.2906 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2907 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2908 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2909 = private unnamed_addr constant [28 x i8] c"used .cur 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 [4 x i8] c" %p\00"
@.str.2912 = private unnamed_addr constant [3 x i8] c"%p\00"
@.str.2913 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2914 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2915 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2916 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2917 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00"
@.str.2918 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2919 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2920 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2921 = private unnamed_addr constant [31 x i8] c"used .dbgArg 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 [12 x i8] c"src/gen.fch\00"
@.str.2924 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2925 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2926 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2927 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00"
@.str.2928 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2929 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2930 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.2931 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2932 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2933 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.2934 = private unnamed_addr constant [11 x i8] c"function '\00"
@.str.2935 = private unnamed_addr constant [39 x i8] c"' can reach its end without returning \00"
@.str.2936 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2937 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2938 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2939 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2940 = private unnamed_addr constant [5 x i8] c"ret \00"
@.str.2941 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2942 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2943 = private unnamed_addr constant [54 x i8] c" { i1 true, i8 0, { ptr, i64, i64 } zeroinitializer }\00"
@.str.2944 = private unnamed_addr constant [9 x i8] c"ret void\00"
@.str.2945 = private unnamed_addr constant [1 x i8] c"\00"
@.str.2946 = private unnamed_addr constant [8 x i8] c" !dbg !\00"
@.str.2947 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2948 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00"
@.str.2949 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2950 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.2951 = private unnamed_addr constant [17 x i8] c"define internal \00"
@.str.2952 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2953 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2954 = private unnamed_addr constant [2 x i8] c" \00"
@.str.2955 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2956 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.2957 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.2958 = private unnamed_addr constant [3 x i8] c", \00"
@.str.2959 = private unnamed_addr constant [2 x i8] c")\00"
@.str.2960 = private unnamed_addr constant [11 x i8] c" {\0Aentry:\0A\00"
@.str.2961 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2962 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00"
@.str.2963 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.2964 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.2965 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2966 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00"
@.str.2967 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.2968 = private unnamed_addr constant [4 x i8] c"\0A}\0A\00"
@.str.2969 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2970 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.2971 = private unnamed_addr constant [67 x i8] c"this code can never run (it comes after return, break or continue)\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 .dbgLine 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 [31 x i8] c"used .dbgCol on a null pointer\00"
@.str.2976 = private unnamed_addr constant [6 x i8] c"block\00"
@.str.2977 = private unnamed_addr constant [5 x i8] c"decl\00"
@.str.2978 = private unnamed_addr constant [7 x i8] c"assign\00"
@.str.2979 = private unnamed_addr constant [5 x i8] c"expr\00"
@.str.2980 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2981 = private unnamed_addr constant [3 x i8] c"or\00"
@.str.2982 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2983 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2984 = private unnamed_addr constant [6 x i8] c"match\00"
@.str.2985 = private unnamed_addr constant [3 x i8] c"if\00"
@.str.2986 = private unnamed_addr constant [6 x i8] c"while\00"
@.str.2987 = private unnamed_addr constant [4 x i8] c"for\00"
@.str.2988 = private unnamed_addr constant [5 x i8] c"each\00"
@.str.2989 = private unnamed_addr constant [7 x i8] c"return\00"
@.str.2990 = private unnamed_addr constant [6 x i8] c"defer\00"
@.str.2991 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2992 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00"
@.str.2993 = private unnamed_addr constant [34 x i8] c"defer inside defer is not allowed\00"
@.str.2994 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2995 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.2996 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.2997 = private unnamed_addr constant [31 x i8] c"used .scopes 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 [12 x i8] c"src/gen.fch\00"
@.str.3001 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.3002 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3003 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3004 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00"
@.str.3005 = private unnamed_addr constant [6 x i8] c"break\00"
@.str.3006 = private unnamed_addr constant [9 x i8] c"continue\00"
@.str.3007 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3008 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00"
@.str.3009 = private unnamed_addr constant [28 x i8] c" can't be used inside defer\00"
@.str.3010 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3011 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00"
@.str.3012 = private unnamed_addr constant [32 x i8] c" can only be used inside a loop\00"
@.str.3013 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3014 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00"
@.str.3015 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3016 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00"
@.str.3017 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3018 = private unnamed_addr constant [6 x i8] c"break\00"
@.str.3019 = private unnamed_addr constant [19 x i8] c"unknown statement \00"
@.str.3020 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3021 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3022 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3023 = private unnamed_addr constant [47 x i8] c"this gives back nothing, so it can't be stored\00"
@.str.3024 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.3025 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3026 = private unnamed_addr constant [35 x i8] c"null needs a type, like: ptr[int] \00"
@.str.3027 = private unnamed_addr constant [8 x i8] c" = null\00"
@.str.3028 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.3029 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3030 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3031 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.3032 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.3033 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3034 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.3035 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3036 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3037 = private unnamed_addr constant [30 x i8] c"used .progs 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 [12 x i8] c"src/gen.fch\00"
@.str.3040 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3041 = private unnamed_addr constant [4 x i8] c"var\00"
@.str.3042 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00"
@.str.3043 = private unnamed_addr constant [19 x i8] c"' (create it with \00"
@.str.3044 = private unnamed_addr constant [9 x i8] c" := ...)\00"
@.str.3045 = private unnamed_addr constant [20 x i8] c"the loop variable '\00"
@.str.3046 = private unnamed_addr constant [19 x i8] c"' can't be changed\00"
@.str.3047 = private unnamed_addr constant [10 x i8] c"the value\00"
@.str.3048 = private unnamed_addr constant [4 x i8] c"var\00"
@.str.3049 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.3050 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.3051 = private unnamed_addr constant [2 x i8] c"=\00"
@.str.3052 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3053 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3054 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3055 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3056 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.3057 = private unnamed_addr constant [12 x i8] c"a condition\00"
@.str.3058 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3059 = private unnamed_addr constant [5 x i8] c"then\00"
@.str.3060 = private unnamed_addr constant [5 x i8] c"else\00"
@.str.3061 = private unnamed_addr constant [6 x i8] c"endif\00"
@.str.3062 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3064 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.3065 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3066 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3067 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.3068 = private unnamed_addr constant [11 x i8] c"while.cond\00"
@.str.3069 = private unnamed_addr constant [11 x i8] c"while.body\00"
@.str.3070 = private unnamed_addr constant [10 x i8] c"while.end\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"bool\00"
@.str.3073 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3074 = private unnamed_addr constant [5 x i8] c"true\00"
@.str.3075 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3076 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3077 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00"
@.str.3078 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3079 = private unnamed_addr constant [31 x i8] c"used .scopes 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 [12 x i8] c"src/gen.fch\00"
@.str.3082 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3083 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00"
@.str.3084 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3085 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00"
@.str.3086 = private unnamed_addr constant [6 x i8] c"break\00"
@.str.3087 = private unnamed_addr constant [6 x i8] c"while\00"
@.str.3088 = private unnamed_addr constant [4 x i8] c"for\00"
@.str.3089 = private unnamed_addr constant [5 x i8] c"each\00"
@.str.3090 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3091 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.3092 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3093 = private unnamed_addr constant [21 x i8] c"the start of a range\00"
@.str.3094 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3095 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.3096 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3097 = private unnamed_addr constant [19 x i8] c"the end of a range\00"
@.str.3098 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.3099 = private unnamed_addr constant [9 x i8] c"for.cond\00"
@.str.3100 = private unnamed_addr constant [9 x i8] c"for.body\00"
@.str.3101 = private unnamed_addr constant [9 x i8] c"for.step\00"
@.str.3102 = private unnamed_addr constant [8 x i8] c"for.end\00"
@.str.3103 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3104 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00"
@.str.3105 = private unnamed_addr constant [3 x i8] c", \00"
@.str.3106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3107 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00"
@.str.3108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3109 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.3110 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3111 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3112 = private unnamed_addr constant [30 x i8] c"used .loops 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 [24 x i8] c"pop() on an empty array\00"
@.str.3115 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3116 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3117 = private unnamed_addr constant [9 x i8] c"add i64 \00"
@.str.3118 = private unnamed_addr constant [4 x i8] c", 1\00"
@.str.3119 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3120 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3122 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3123 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3124 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3125 = private unnamed_addr constant [2 x i8] c"0\00"
@.str.3126 = private unnamed_addr constant [1 x i8] c"\00"
@.str.3127 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3128 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.3129 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.3130 = private unnamed_addr constant [15 x i8] c", i32 0, i32 6\00"
@.str.3131 = private unnamed_addr constant [9 x i8] c"map.cond\00"
@.str.3132 = private unnamed_addr constant [10 x i8] c"map.check\00"
@.str.3133 = private unnamed_addr constant [9 x i8] c"map.body\00"
@.str.3134 = private unnamed_addr constant [9 x i8] c"map.step\00"
@.str.3135 = private unnamed_addr constant [8 x i8] c"map.end\00"
@.str.3136 = private unnamed_addr constant [12 x i8] c"map.changed\00"
@.str.3137 = private unnamed_addr constant [9 x i8] c"map.same\00"
@.str.3138 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3139 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.3140 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.3141 = private unnamed_addr constant [15 x i8] c", i32 0, i32 6\00"
@.str.3142 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00"
@.str.3143 = private unnamed_addr constant [3 x i8] c", \00"
@.str.3144 = private unnamed_addr constant [34 x i8] c"call void @finch_map_changed(ptr \00"
@.str.3145 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3146 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.3147 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3148 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.3149 = private unnamed_addr constant [2 x i8] c")\00"
@.str.3150 = private unnamed_addr constant [12 x i8] c"unreachable\00"
@.str.3151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3152 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.3153 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3154 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3155 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.3156 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.3157 = private unnamed_addr constant [15 x i8] c", i32 0, i32 2\00"
@.str.3158 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00"
@.str.3159 = private unnamed_addr constant [3 x i8] c", \00"
@.str.3160 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3161 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00"
@.str.3162 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.3163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3164 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00"
@.str.3165 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3166 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.3167 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3168 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3169 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00"
@.str.3170 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3171 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00"
@.str.3172 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3173 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3174 = private unnamed_addr constant [9 x i8] c"add i64 \00"
@.str.3175 = private unnamed_addr constant [4 x i8] c", 1\00"
@.str.3176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3177 = private unnamed_addr constant [1 x i8] c"\00"
@.str.3178 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3179 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.3180 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.3181 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.3182 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3183 = private unnamed_addr constant [56 x i8] c"for ... in needs an array, a str or a map, but this is \00"
@.str.3184 = private unnamed_addr constant [37 x i8] c" (for a range of numbers write 0..n)\00"
@.str.3185 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.3186 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.3187 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3188 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3189 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3190 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3191 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3192 = private unnamed_addr constant [2 x i8] c"0\00"
@.str.3193 = private unnamed_addr constant [10 x i8] c"each.cond\00"
@.str.3194 = private unnamed_addr constant [10 x i8] c"each.body\00"
@.str.3195 = private unnamed_addr constant [10 x i8] c"each.step\00"
@.str.3196 = private unnamed_addr constant [9 x i8] c"each.end\00"
@.str.3197 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3198 = private unnamed_addr constant [47 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr \00"
@.str.3199 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00"
@.str.3200 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3201 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00"
@.str.3202 = private unnamed_addr constant [3 x i8] c", \00"
@.str.3203 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.3204 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.3205 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.3206 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.3207 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3208 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00"
@.str.3209 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3210 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.3211 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.3212 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3213 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3214 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00"
@.str.3215 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3216 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00"
@.str.3217 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3218 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3219 = private unnamed_addr constant [9 x i8] c"add i64 \00"
@.str.3220 = private unnamed_addr constant [4 x i8] c", 1\00"
@.str.3221 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3222 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00"
@.str.3223 = private unnamed_addr constant [34 x i8] c"return can't be used inside defer\00"
@.str.3224 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3225 = private unnamed_addr constant [5 x i8] c"call\00"
@.str.3226 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3227 = private unnamed_addr constant [6 x i8] c"error\00"
@.str.3228 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3229 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3230 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3231 = private unnamed_addr constant [2 x i8] c"!\00"
@.str.3232 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3233 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3234 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3235 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3236 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3237 = private unnamed_addr constant [2 x i8] c"!\00"
@.str.3238 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.3239 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3240 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3241 = private unnamed_addr constant [65 x i8] c"' can't fail, so it can't return an error (make it fallible: -> \00"
@.str.3242 = private unnamed_addr constant [2 x i8] c")\00"
@.str.3243 = private unnamed_addr constant [6 x i8] c"error\00"
@.str.3244 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3245 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.3246 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3247 = private unnamed_addr constant [18 x i8] c"the error message\00"
@.str.3248 = private unnamed_addr constant [5 x i8] c"ret \00"
@.str.3249 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3250 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3251 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3252 = private unnamed_addr constant [13 x i8] c"insertvalue \00"
@.str.3253 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3254 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3255 = private unnamed_addr constant [37 x i8] c" zeroinitializer, { ptr, i64, i64 } \00"
@.str.3256 = private unnamed_addr constant [4 x i8] c", 2\00"
@.str.3257 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3258 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.3259 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3260 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3261 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3262 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3263 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.3264 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3265 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3266 = private unnamed_addr constant [47 x i8] c"' doesn't return a value (it has no '-> type')\00"
@.str.3267 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3268 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3269 = private unnamed_addr constant [5 x i8] c"ret \00"
@.str.3270 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3271 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3272 = private unnamed_addr constant [54 x i8] c" { i1 true, i8 0, { ptr, i64, i64 } zeroinitializer }\00"
@.str.3273 = private unnamed_addr constant [9 x i8] c"ret void\00"
@.str.3274 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3275 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.3276 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.3277 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3278 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3279 = private unnamed_addr constant [15 x i8] c"' must return \00"
@.str.3280 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3281 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3282 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3283 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3284 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3285 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3286 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3287 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3288 = private unnamed_addr constant [19 x i8] c"the returned value\00"
@.str.3289 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3290 = private unnamed_addr constant [4 x i8] c"var\00"
@.str.3291 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3292 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3293 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3294 = private unnamed_addr constant [13 x i8] c"insertvalue \00"
@.str.3295 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3296 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3297 = private unnamed_addr constant [29 x i8] c" zeroinitializer, i1 true, 0\00"
@.str.3298 = private unnamed_addr constant [13 x i8] c"insertvalue \00"
@.str.3299 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3300 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3301 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3302 = private unnamed_addr constant [3 x i8] c", \00"
@.str.3303 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3304 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3305 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3306 = private unnamed_addr constant [4 x i8] c", 1\00"
@.str.3307 = private unnamed_addr constant [5 x i8] c"ret \00"
@.str.3308 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3309 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3310 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3311 = private unnamed_addr constant [5 x i8] c"ret \00"
@.str.3312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3313 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3314 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3315 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3316 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.3317 = private unnamed_addr constant [8 x i8] c"{ i64, \00"
@.str.3318 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3319 = private unnamed_addr constant [3 x i8] c", \00"
@.str.3320 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3321 = private unnamed_addr constant [3 x i8] c" }\00"
@.str.3322 = private unnamed_addr constant [30 x i8] c"ptrtoint (ptr getelementptr (\00"
@.str.3323 = private unnamed_addr constant [27 x i8] c", ptr null, i32 1) to i64)\00"
@.str.3324 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.3325 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.3326 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.3327 = private unnamed_addr constant [15 x i8] c", i32 0, i32 0\00"
@.str.3328 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.3329 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.3330 = private unnamed_addr constant [7 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 [14 x i8] c", i32 0, i32 \00"
@.str.3334 = private unnamed_addr constant [2 x i8] c"0\00"
@.str.3335 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3336 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.3337 = private unnamed_addr constant [2 x i8] c"1\00"
@.str.3338 = private unnamed_addr constant [5 x i8] c"ptr \00"
@.str.3339 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.3340 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.3341 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.3342 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3343 = private unnamed_addr constant [7 x i8] c", i32 \00"
@.str.3344 = private unnamed_addr constant [26 x i8] c"call i64 @finch_map_find(\00"
@.str.3345 = private unnamed_addr constant [2 x i8] c")\00"
@.str.3346 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.3347 = private unnamed_addr constant [4 x i8] c"i32\00"
@.str.3348 = private unnamed_addr constant [4 x i8] c"i32\00"
@.str.3349 = private unnamed_addr constant [2 x i8] c"0\00"
@.str.3350 = private unnamed_addr constant [26 x i8] c"call i64 @finch_map_slot(\00"
@.str.3351 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.3352 = private unnamed_addr constant [2 x i8] c")\00"
@.str.3353 = private unnamed_addr constant [8 x i8] c"map.new\00"
@.str.3354 = private unnamed_addr constant [9 x i8] c"map.have\00"
@.str.3355 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00"
@.str.3356 = private unnamed_addr constant [4 x i8] c"i32\00"
@.str.3357 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.3358 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3359 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3360 = private unnamed_addr constant [12 x i8] c"src/gen.fch\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 [12 x i8] c"src/gen.fch\00"
@.str.3364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3365 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3366 = private unnamed_addr constant [8 x i8] c"the key\00"
@.str.3367 = private unnamed_addr constant [45 x i8] c"this is a temporary map, it can't be changed\00"
@.str.3368 = private unnamed_addr constant [1 x i8] c"\00"
@.str.3369 = private unnamed_addr constant [12 x i8] c"map.missing\00"
@.str.3370 = private unnamed_addr constant [10 x i8] c"map.found\00"
@.str.3371 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00"
@.str.3372 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.3373 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.3374 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.3375 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00"
@.str.3376 = private unnamed_addr constant [34 x i8] c"call void @finch_map_missing(ptr \00"
@.str.3377 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3378 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.3379 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3380 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.3381 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.3382 = private unnamed_addr constant [2 x i8] c")\00"
@.str.3383 = private unnamed_addr constant [12 x i8] c"unreachable\00"
@.str.3384 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3385 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.3386 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.3387 = private unnamed_addr constant [53 x i8] c"an empty [:] needs a type, like: map[str]int m = [:]\00"
@.str.3388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3389 = private unnamed_addr constant [6 x i8] c"unary\00"
@.str.3390 = private unnamed_addr constant [2 x i8] c"-\00"
@.str.3391 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3392 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.3393 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.3394 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3395 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3396 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3397 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.3398 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3399 = private unnamed_addr constant [36 x i8] c"a map key needs a value with a type\00"
@.str.3400 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3401 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.3402 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3403 = private unnamed_addr constant [38 x i8] c"a map value needs a value with a type\00"
@.str.3404 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.3405 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00"
@.str.3406 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3407 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3408 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3409 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3410 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3411 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3412 = private unnamed_addr constant [22 x i8] c"every key of this map\00"
@.str.3413 = private unnamed_addr constant [12 x i8] c"src/gen.fch\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"every value of this map\00"
@.str.3416 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3417 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3418 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3419 = private unnamed_addr constant [4 x i8] c"has\00"
@.str.3420 = private unnamed_addr constant [4 x i8] c"get\00"
@.str.3421 = private unnamed_addr constant [7 x i8] c"remove\00"
@.str.3422 = private unnamed_addr constant [4 x i8] c"get\00"
@.str.3423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3424 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3425 = private unnamed_addr constant [8 x i8] c"the key\00"
@.str.3426 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00"
@.str.3427 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.3428 = private unnamed_addr constant [4 x i8] c"has\00"
@.str.3429 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.3430 = private unnamed_addr constant [7 x i8] c"remove\00"
@.str.3431 = private unnamed_addr constant [11 x i8] c"remove.hit\00"
@.str.3432 = private unnamed_addr constant [11 x i8] c"remove.end\00"
@.str.3433 = private unnamed_addr constant [36 x i8] c"call void @finch_map_remove_at(ptr \00"
@.str.3434 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.3435 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.3436 = private unnamed_addr constant [2 x i8] c")\00"
@.str.3437 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.3438 = private unnamed_addr constant [10 x i8] c"get.found\00"
@.str.3439 = private unnamed_addr constant [12 x i8] c"get.missing\00"
@.str.3440 = private unnamed_addr constant [9 x i8] c"get.fend\00"
@.str.3441 = private unnamed_addr constant [9 x i8] c"get.mend\00"
@.str.3442 = private unnamed_addr constant [8 x i8] c"get.end\00"
@.str.3443 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3444 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3445 = private unnamed_addr constant [12 x i8] c"the default\00"
@.str.3446 = private unnamed_addr constant [5 x i8] c"phi \00"
@.str.3447 = private unnamed_addr constant [4 x i8] c" [ \00"
@.str.3448 = private unnamed_addr constant [4 x i8] c", %\00"
@.str.3449 = private unnamed_addr constant [7 x i8] c" ], [ \00"
@.str.3450 = private unnamed_addr constant [4 x i8] c", %\00"
@.str.3451 = private unnamed_addr constant [3 x i8] c" ]\00"
@.str.3452 = private unnamed_addr constant [6 x i8] c"clear\00"
@.str.3453 = private unnamed_addr constant [32 x i8] c"call void @finch_map_clear(ptr \00"
@.str.3454 = private unnamed_addr constant [2 x i8] c")\00"
@.str.3455 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3456 = private unnamed_addr constant [5 x i8] c"keys\00"
@.str.3457 = private unnamed_addr constant [7 x i8] c"values\00"
@.str.3458 = private unnamed_addr constant [7 x i8] c"values\00"
@.str.3459 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.3460 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.3461 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00"
@.str.3462 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3463 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.3464 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.3465 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00"
@.str.3466 = private unnamed_addr constant [31 x i8] c"call void @finch_arr_make(ptr \00"
@.str.3467 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.3468 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.3469 = private unnamed_addr constant [2 x i8] c")\00"
@.str.3470 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.3471 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3472 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3473 = private unnamed_addr constant [2 x i8] c"0\00"
@.str.3474 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3475 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.3476 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.3477 = private unnamed_addr constant [15 x i8] c", i32 0, i32 2\00"
@.str.3478 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3479 = private unnamed_addr constant [11 x i8] c"entry.live\00"
@.str.3480 = private unnamed_addr constant [11 x i8] c"entry.next\00"
@.str.3481 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00"
@.str.3482 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3483 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.3484 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3485 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.3486 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.3487 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.3488 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.3489 = private unnamed_addr constant [9 x i8] c"add i64 \00"
@.str.3490 = private unnamed_addr constant [4 x i8] c", 1\00"
@.str.3491 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.3492 = private unnamed_addr constant [22 x i8] c"a map has no method '\00"
@.str.3493 = private unnamed_addr constant [50 x i8] c"' (it has: has, get, remove, clear, keys, values)\00"
@.str.3494 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.3495 = private unnamed_addr constant [4 x i8] c"var\00"
@.str.3496 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3497 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00"
@.str.3498 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3499 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.3500 = private unnamed_addr constant [23 x i8] c"' is not a variant of \00"
@.str.3501 = private unnamed_addr constant [11 x i8] c" (it has: \00"
@.str.3502 = private unnamed_addr constant [3 x i8] c", \00"
@.str.3503 = private unnamed_addr constant [2 x i8] c")\00"
@.str.3504 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3505 = private unnamed_addr constant [13 x i8] c"this pattern\00"
@.str.3506 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3507 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3508 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.3509 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3510 = private unnamed_addr constant [31 x i8] c"there is nothing to match here\00"
@.str.3511 = private unnamed_addr constant [10 x i8] c"match.end\00"
@.str.3512 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3513 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3514 = private unnamed_addr constant [73 x i8] c"this arm can never be used: 'else' already takes everything that is left\00"
@.str.3515 = private unnamed_addr constant [10 x i8] c"match.arm\00"
@.str.3516 = private unnamed_addr constant [11 x i8] c"match.next\00"
@.str.3517 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3519 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.3520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3521 = private unnamed_addr constant [50 x i8] c"this variant is already handled by an earlier arm\00"
@.str.3522 = private unnamed_addr constant [3 x i8] c"==\00"
@.str.3523 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3524 = private unnamed_addr constant [9 x i8] c"match.or\00"
@.str.3525 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3526 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3527 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3528 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.3529 = private unnamed_addr constant [53 x i8] c"an arm of a match that gives a value has to give one\00"
@.str.3530 = private unnamed_addr constant [58 x i8] c"this arm (the arms of a match have to give the same type)\00"
@.str.3531 = private unnamed_addr constant [11 x i8] c"match.from\00"
@.str.3532 = private unnamed_addr constant [6 x i8] c"block\00"
@.str.3533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3534 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.3535 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.3536 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3537 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00"
@.str.3538 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3539 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3540 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3541 = private unnamed_addr constant [27 x i8] c"this match doesn't handle \00"
@.str.3542 = private unnamed_addr constant [3 x i8] c", \00"
@.str.3543 = private unnamed_addr constant [30 x i8] c" (add them, or an 'else' arm)\00"
@.str.3544 = private unnamed_addr constant [12 x i8] c"a match on \00"
@.str.3545 = private unnamed_addr constant [55 x i8] c" needs an 'else' arm for everything that is not listed\00"
@.str.3546 = private unnamed_addr constant [5 x i8] c"true\00"
@.str.3547 = private unnamed_addr constant [36 x i8] c"no arm of this match fits the value\00"
@.str.3548 = private unnamed_addr constant [12 x i8] c"unreachable\00"
@.str.3549 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3550 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.3551 = private unnamed_addr constant [12 x i8] c"unreachable\00"
@.str.3552 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3553 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.3554 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3555 = private unnamed_addr constant [5 x i8] c"phi \00"
@.str.3556 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3557 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3558 = private unnamed_addr constant [3 x i8] c"[ \00"
@.str.3559 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3560 = private unnamed_addr constant [4 x i8] c", %\00"
@.str.3561 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3562 = private unnamed_addr constant [3 x i8] c" ]\00"
@.str.3563 = private unnamed_addr constant [3 x i8] c", \00"
@.str.3564 = private unnamed_addr constant [5 x i8] c"call\00"
@.str.3565 = private unnamed_addr constant [7 x i8] c"method\00"
@.str.3566 = 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.3567 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3568 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00"
@.str.3569 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3570 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00"
@.str.3571 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3572 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00"
@.str.3573 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3574 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00"
@.str.3575 = private unnamed_addr constant [1 x i8] c"\00"
@.str.3576 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3577 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00"
@.str.3578 = private unnamed_addr constant [1 x i8] c"\00"
@.str.3579 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3580 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00"
@.str.3581 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3582 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00"
@.str.3583 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3584 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00"
@.str.3585 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3586 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00"
@.str.3587 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3588 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00"
@.str.3589 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3590 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00"
@.str.3591 = private unnamed_addr constant [51 x i8] c"this call can't fail, so it needs no 'or' or 'try'\00"
@.str.3592 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3593 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00"
@.str.3594 = private unnamed_addr constant [31 x i8] c"try can't be used inside defer\00"
@.str.3595 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3596 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3597 = private unnamed_addr constant [2 x i8] c"!\00"
@.str.3598 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3599 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3600 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3601 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3602 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3603 = private unnamed_addr constant [2 x i8] c"!\00"
@.str.3604 = private unnamed_addr constant [30 x i8] c"try passes the error on, so '\00"
@.str.3605 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3606 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3607 = private unnamed_addr constant [32 x i8] c"' must be able to fail too (-> \00"
@.str.3608 = private unnamed_addr constant [56 x i8] c"); or handle it here: ... or <value> / ... or { ... }\00"
@.str.3609 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3610 = private unnamed_addr constant [11 x i8] c"try.failed\00"
@.str.3611 = private unnamed_addr constant [7 x i8] c"try.ok\00"
@.str.3612 = private unnamed_addr constant [5 x i8] c"ret \00"
@.str.3613 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3614 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3615 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3616 = private unnamed_addr constant [13 x i8] c"insertvalue \00"
@.str.3617 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3618 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00"
@.str.3619 = private unnamed_addr constant [37 x i8] c" zeroinitializer, { ptr, i64, i64 } \00"
@.str.3620 = private unnamed_addr constant [4 x i8] c", 2\00"
@.str.3621 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3622 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.3623 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3624 = private unnamed_addr constant [10 x i8] c"or.failed\00"
@.str.3625 = private unnamed_addr constant [6 x i8] c"or.ok\00"
@.str.3626 = private unnamed_addr constant [4 x i8] c"err\00"
@.str.3627 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.3628 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3629 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3630 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00"
@.str.3631 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3632 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3633 = 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 <value>)\00"
@.str.3634 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3635 = private unnamed_addr constant [7 x i8] c"or.end\00"
@.str.3636 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3637 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3638 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3639 = 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.3640 = private unnamed_addr constant [4 x i8] c"err\00"
@.str.3641 = private unnamed_addr constant [4 x i8] c"str\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 [21 x i8] c"the value after 'or'\00"
@.str.3645 = private unnamed_addr constant [8 x i8] c"or.bend\00"
@.str.3646 = private unnamed_addr constant [7 x i8] c"or.end\00"
@.str.3647 = private unnamed_addr constant [5 x i8] c"phi \00"
@.str.3648 = private unnamed_addr constant [4 x i8] c" [ \00"
@.str.3649 = private unnamed_addr constant [4 x i8] c", %\00"
@.str.3650 = private unnamed_addr constant [7 x i8] c" ], [ \00"
@.str.3651 = private unnamed_addr constant [4 x i8] c", %\00"
@.str.3652 = private unnamed_addr constant [3 x i8] c" ]\00"
@.str.3653 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.3654 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.3655 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.3656 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3657 = private unnamed_addr constant [3 x i8] c"0x\00"
@.str.3658 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3659 = private unnamed_addr constant [3 x i8] c"0X\00"
@.str.3660 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3661 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.3662 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3663 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.3664 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.3665 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.3666 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.3667 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.3668 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.3669 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3670 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.3671 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.3672 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.3673 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.3674 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.3675 = private unnamed_addr constant [4 x i8] c"var\00"
@.str.3676 = private unnamed_addr constant [7 x i8] c"member\00"
@.str.3677 = private unnamed_addr constant [6 x i8] c"index\00"
@.str.3678 = private unnamed_addr constant [6 x i8] c"match\00"
@.str.3679 = private unnamed_addr constant [4 x i8] c"try\00"
@.str.3680 = private unnamed_addr constant [3 x i8] c"or\00"
@.str.3681 = private unnamed_addr constant [6 x i8] c"unary\00"
@.str.3682 = private unnamed_addr constant [7 x i8] c"binary\00"
@.str.3683 = private unnamed_addr constant [5 x i8] c"call\00"
@.str.3684 = private unnamed_addr constant [7 x i8] c"method\00"
@.str.3685 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.3686 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3687 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.3688 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.3689 = private unnamed_addr constant [20 x i8] c"unknown expression \00"
@.str.3690 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3691 = private unnamed_addr constant [2 x i8] c"!\00"
@.str.3692 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.3693 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3694 = private unnamed_addr constant [20 x i8] c"the value after '!'\00"
@.str.3695 = private unnamed_addr constant [8 x i8] c"xor i1 \00"
@.str.3696 = private unnamed_addr constant [7 x i8] c", true\00"
@.str.3697 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.3698 = private unnamed_addr constant [2 x i8] c"~\00"
@.str.3699 = private unnamed_addr constant [46 x i8] c"'~' flips the bits of a whole number, not of \00"
@.str.3700 = private unnamed_addr constant [5 x i8] c"xor \00"
@.str.3701 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3702 = private unnamed_addr constant [5 x i8] c", -1\00"
@.str.3703 = private unnamed_addr constant [35 x i8] c" can't be negative (it's unsigned)\00"
@.str.3704 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3705 = private unnamed_addr constant [2 x i8] c"-\00"
@.str.3706 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3707 = private unnamed_addr constant [2 x i8] c"-\00"
@.str.3708 = private unnamed_addr constant [5 x i8] c"sub \00"
@.str.3709 = private unnamed_addr constant [5 x i8] c" 0, \00"
@.str.3710 = private unnamed_addr constant [6 x i8] c"fneg \00"
@.str.3711 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3712 = private unnamed_addr constant [27 x i8] c"can't put '-' in front of \00"
@.str.3713 = private unnamed_addr constant [12 x i8] c"can't use '\00"
@.str.3714 = private unnamed_addr constant [6 x i8] c"' on \00"
@.str.3715 = private unnamed_addr constant [6 x i8] c" and \00"
@.str.3716 = private unnamed_addr constant [2 x i8] c"+\00"
@.str.3717 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.3718 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.3719 = private unnamed_addr constant [49 x i8] c" (turn the other side into text first: str(...))\00"
@.str.3720 = private unnamed_addr constant [2 x i8] c"&\00"
@.str.3721 = private unnamed_addr constant [2 x i8] c"|\00"
@.str.3722 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.3723 = private unnamed_addr constant [2 x i8] c"&\00"
@.str.3724 = private unnamed_addr constant [27 x i8] c" (for true/false use '&&')\00"
@.str.3725 = private unnamed_addr constant [27 x i8] c" (for true/false use '||')\00"
@.str.3726 = private unnamed_addr constant [2 x i8] c"&\00"
@.str.3727 = private unnamed_addr constant [2 x i8] c"|\00"
@.str.3728 = private unnamed_addr constant [2 x i8] c"^\00"
@.str.3729 = private unnamed_addr constant [3 x i8] c"<<\00"
@.str.3730 = private unnamed_addr constant [3 x i8] c">>\00"
@.str.3731 = private unnamed_addr constant [44 x i8] c" (bit operators work on whole numbers only)\00"
@.str.3732 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.3733 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.3734 = private unnamed_addr constant [3 x i8] c"==\00"
@.str.3735 = private unnamed_addr constant [3 x i8] c"!=\00"
@.str.3736 = private unnamed_addr constant [32 x i8] c" (compare the parts one by one)\00"
@.str.3737 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3738 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3739 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3740 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3741 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3742 = private unnamed_addr constant [27 x i8] c"used .ty 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 [27 x i8] c"used .ty on a null pointer\00"
@.str.3745 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3746 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00"
@.str.3747 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3748 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00"
@.str.3749 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3750 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00"
@.str.3751 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3752 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3753 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3754 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3755 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3756 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00"
@.str.3757 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3758 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3759 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3760 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00"
@.str.3761 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3762 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00"
@.str.3763 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3764 = private unnamed_addr constant [28 x i8] c"used .lit 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 [26 x i8] c"used .v on a null pointer\00"
@.str.3767 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3768 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3769 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3770 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3771 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3772 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00"
@.str.3773 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3774 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3775 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3776 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00"
@.str.3777 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3778 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3779 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3780 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3781 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3782 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00"
@.str.3783 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3784 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3785 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3786 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3787 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3788 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3789 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3790 = private unnamed_addr constant [30 x i8] c"used .value 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 [27 x i8] c"used .ty on a null pointer\00"
@.str.3793 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3794 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3795 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3796 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00"
@.str.3797 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3798 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3799 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3800 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3801 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3802 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3803 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3804 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00"
@.str.3805 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3806 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3807 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3808 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3809 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3810 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00"
@.str.3811 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3812 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3813 = private unnamed_addr constant [1 x i8] c"\00"
@.str.3814 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3815 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00"
@.str.3816 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3817 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3818 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3819 = private unnamed_addr constant [27 x i8] c"used .ty 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 [30 x i8] c"used .value on a null pointer\00"
@.str.3822 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3823 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3824 = private unnamed_addr constant [1 x i8] c"\00"
@.str.3825 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3826 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00"
@.str.3827 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3828 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3829 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3830 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3831 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3832 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3833 = private unnamed_addr constant [4 x i8] c"f32\00"
@.str.3834 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3835 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00"
@.str.3836 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3837 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3838 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.3839 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.3840 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3841 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00"
@.str.3842 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3843 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3844 = private unnamed_addr constant [4 x i8] c"f32\00"
@.str.3845 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3846 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00"
@.str.3847 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3848 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00"
@.str.3849 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.3850 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.3851 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3852 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00"
@.str.3853 = private unnamed_addr constant [2 x i8] c"+\00"
@.str.3854 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.3855 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.3856 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.3857 = private unnamed_addr constant [33 x i8] c"call void @finch_str_concat(ptr \00"
@.str.3858 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.3859 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.3860 = private unnamed_addr constant [2 x i8] c")\00"
@.str.3861 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.3862 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.3863 = private unnamed_addr constant [2 x i8] c"+\00"
@.str.3864 = private unnamed_addr constant [2 x i8] c"-\00"
@.str.3865 = private unnamed_addr constant [2 x i8] c"*\00"
@.str.3866 = private unnamed_addr constant [2 x i8] c"/\00"
@.str.3867 = private unnamed_addr constant [2 x i8] c"%\00"
@.str.3868 = private unnamed_addr constant [2 x i8] c"&\00"
@.str.3869 = private unnamed_addr constant [2 x i8] c"|\00"
@.str.3870 = private unnamed_addr constant [2 x i8] c"^\00"
@.str.3871 = private unnamed_addr constant [3 x i8] c"<<\00"
@.str.3872 = private unnamed_addr constant [3 x i8] c">>\00"
@.str.3873 = private unnamed_addr constant [4 x i8] c"add\00"
@.str.3874 = private unnamed_addr constant [4 x i8] c"sub\00"
@.str.3875 = private unnamed_addr constant [4 x i8] c"mul\00"
@.str.3876 = private unnamed_addr constant [5 x i8] c"sdiv\00"
@.str.3877 = private unnamed_addr constant [5 x i8] c"srem\00"
@.str.3878 = private unnamed_addr constant [4 x i8] c"and\00"
@.str.3879 = private unnamed_addr constant [3 x i8] c"or\00"
@.str.3880 = private unnamed_addr constant [4 x i8] c"xor\00"
@.str.3881 = private unnamed_addr constant [4 x i8] c"shl\00"
@.str.3882 = private unnamed_addr constant [5 x i8] c"ashr\00"
@.str.3883 = private unnamed_addr constant [4 x i8] c"add\00"
@.str.3884 = private unnamed_addr constant [4 x i8] c"sub\00"
@.str.3885 = private unnamed_addr constant [4 x i8] c"mul\00"
@.str.3886 = private unnamed_addr constant [5 x i8] c"udiv\00"
@.str.3887 = private unnamed_addr constant [5 x i8] c"urem\00"
@.str.3888 = private unnamed_addr constant [4 x i8] c"and\00"
@.str.3889 = private unnamed_addr constant [3 x i8] c"or\00"
@.str.3890 = private unnamed_addr constant [4 x i8] c"xor\00"
@.str.3891 = private unnamed_addr constant [4 x i8] c"shl\00"
@.str.3892 = private unnamed_addr constant [5 x i8] c"lshr\00"
@.str.3893 = private unnamed_addr constant [2 x i8] c"/\00"
@.str.3894 = private unnamed_addr constant [2 x i8] c"%\00"
@.str.3895 = private unnamed_addr constant [2 x i8] c"0\00"
@.str.3896 = private unnamed_addr constant [17 x i8] c"division by zero\00"
@.str.3897 = private unnamed_addr constant [9 x i8] c"icmp eq \00"
@.str.3898 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3899 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.3900 = private unnamed_addr constant [17 x i8] c"division by zero\00"
@.str.3901 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3902 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3903 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3904 = private unnamed_addr constant [3 x i8] c", \00"
@.str.3905 = private unnamed_addr constant [2 x i8] c"+\00"
@.str.3906 = private unnamed_addr constant [2 x i8] c"-\00"
@.str.3907 = private unnamed_addr constant [2 x i8] c"*\00"
@.str.3908 = private unnamed_addr constant [2 x i8] c"/\00"
@.str.3909 = private unnamed_addr constant [2 x i8] c"%\00"
@.str.3910 = private unnamed_addr constant [5 x i8] c"fadd\00"
@.str.3911 = private unnamed_addr constant [5 x i8] c"fsub\00"
@.str.3912 = private unnamed_addr constant [5 x i8] c"fmul\00"
@.str.3913 = private unnamed_addr constant [5 x i8] c"fdiv\00"
@.str.3914 = private unnamed_addr constant [5 x i8] c"frem\00"
@.str.3915 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3916 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3917 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3918 = private unnamed_addr constant [3 x i8] c", \00"
@.str.3919 = private unnamed_addr constant [3 x i8] c"==\00"
@.str.3920 = private unnamed_addr constant [3 x i8] c"!=\00"
@.str.3921 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.3922 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.3923 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.3924 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.3925 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.3926 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.3927 = private unnamed_addr constant [60 x i8] c"a str is never null; to check for empty text use s.len == 0\00"
@.str.3928 = private unnamed_addr constant [3 x i8] c"eq\00"
@.str.3929 = private unnamed_addr constant [3 x i8] c"!=\00"
@.str.3930 = private unnamed_addr constant [3 x i8] c"ne\00"
@.str.3931 = private unnamed_addr constant [6 x i8] c"icmp \00"
@.str.3932 = private unnamed_addr constant [6 x i8] c" ptr \00"
@.str.3933 = private unnamed_addr constant [3 x i8] c", \00"
@.str.3934 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.3935 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.3936 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.3937 = private unnamed_addr constant [28 x i8] c"call i32 @finch_str_eq(ptr \00"
@.str.3938 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.3939 = private unnamed_addr constant [2 x i8] c")\00"
@.str.3940 = private unnamed_addr constant [3 x i8] c"ne\00"
@.str.3941 = private unnamed_addr constant [3 x i8] c"!=\00"
@.str.3942 = private unnamed_addr constant [3 x i8] c"eq\00"
@.str.3943 = private unnamed_addr constant [6 x i8] c"icmp \00"
@.str.3944 = private unnamed_addr constant [6 x i8] c" i32 \00"
@.str.3945 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.3946 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.3947 = private unnamed_addr constant [29 x i8] c"call i64 @finch_str_cmp(ptr \00"
@.str.3948 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.3949 = private unnamed_addr constant [2 x i8] c")\00"
@.str.3950 = private unnamed_addr constant [6 x i8] c"icmp \00"
@.str.3951 = private unnamed_addr constant [6 x i8] c" i64 \00"
@.str.3952 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.3953 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.3954 = private unnamed_addr constant [3 x i8] c"==\00"
@.str.3955 = private unnamed_addr constant [3 x i8] c"!=\00"
@.str.3956 = private unnamed_addr constant [2 x i8] c"<\00"
@.str.3957 = private unnamed_addr constant [3 x i8] c"<=\00"
@.str.3958 = private unnamed_addr constant [2 x i8] c">\00"
@.str.3959 = private unnamed_addr constant [3 x i8] c">=\00"
@.str.3960 = private unnamed_addr constant [4 x i8] c"oeq\00"
@.str.3961 = private unnamed_addr constant [4 x i8] c"une\00"
@.str.3962 = private unnamed_addr constant [4 x i8] c"olt\00"
@.str.3963 = private unnamed_addr constant [4 x i8] c"ole\00"
@.str.3964 = private unnamed_addr constant [4 x i8] c"ogt\00"
@.str.3965 = private unnamed_addr constant [4 x i8] c"oge\00"
@.str.3966 = private unnamed_addr constant [6 x i8] c"fcmp \00"
@.str.3967 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.3968 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3969 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3970 = private unnamed_addr constant [3 x i8] c", \00"
@.str.3971 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.3972 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.3973 = 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.3974 = private unnamed_addr constant [3 x i8] c"eq\00"
@.str.3975 = private unnamed_addr constant [3 x i8] c"!=\00"
@.str.3976 = private unnamed_addr constant [3 x i8] c"ne\00"
@.str.3977 = private unnamed_addr constant [6 x i8] c"icmp \00"
@.str.3978 = private unnamed_addr constant [6 x i8] c" i32 \00"
@.str.3979 = private unnamed_addr constant [3 x i8] c", \00"
@.str.3980 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.3981 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.3982 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.3983 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.3984 = private unnamed_addr constant [6 x i8] c"icmp \00"
@.str.3985 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3986 = private unnamed_addr constant [2 x i8] c" \00"
@.str.3987 = private unnamed_addr constant [3 x i8] c", \00"
@.str.3988 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.3989 = private unnamed_addr constant [3 x i8] c"==\00"
@.str.3990 = private unnamed_addr constant [3 x i8] c"!=\00"
@.str.3991 = private unnamed_addr constant [2 x i8] c"<\00"
@.str.3992 = private unnamed_addr constant [3 x i8] c"<=\00"
@.str.3993 = private unnamed_addr constant [2 x i8] c">\00"
@.str.3994 = private unnamed_addr constant [3 x i8] c">=\00"
@.str.3995 = private unnamed_addr constant [3 x i8] c"eq\00"
@.str.3996 = private unnamed_addr constant [3 x i8] c"ne\00"
@.str.3997 = private unnamed_addr constant [4 x i8] c"ult\00"
@.str.3998 = private unnamed_addr constant [4 x i8] c"ule\00"
@.str.3999 = private unnamed_addr constant [4 x i8] c"ugt\00"
@.str.4000 = private unnamed_addr constant [4 x i8] c"uge\00"
@.str.4001 = private unnamed_addr constant [3 x i8] c"eq\00"
@.str.4002 = private unnamed_addr constant [3 x i8] c"ne\00"
@.str.4003 = private unnamed_addr constant [4 x i8] c"slt\00"
@.str.4004 = private unnamed_addr constant [4 x i8] c"sle\00"
@.str.4005 = private unnamed_addr constant [4 x i8] c"sgt\00"
@.str.4006 = private unnamed_addr constant [4 x i8] c"sge\00"
@.str.4007 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4008 = private unnamed_addr constant [3 x i8] c"&&\00"
@.str.4009 = private unnamed_addr constant [3 x i8] c"||\00"
@.str.4010 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4011 = private unnamed_addr constant [11 x i8] c"logic.from\00"
@.str.4012 = private unnamed_addr constant [10 x i8] c"logic.rhs\00"
@.str.4013 = private unnamed_addr constant [10 x i8] c"logic.end\00"
@.str.4014 = private unnamed_addr constant [3 x i8] c"&&\00"
@.str.4015 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4016 = private unnamed_addr constant [11 x i8] c"logic.rend\00"
@.str.4017 = private unnamed_addr constant [5 x i8] c"true\00"
@.str.4018 = private unnamed_addr constant [3 x i8] c"&&\00"
@.str.4019 = private unnamed_addr constant [6 x i8] c"false\00"
@.str.4020 = private unnamed_addr constant [10 x i8] c"phi i1 [ \00"
@.str.4021 = private unnamed_addr constant [4 x i8] c", %\00"
@.str.4022 = private unnamed_addr constant [7 x i8] c" ], [ \00"
@.str.4023 = private unnamed_addr constant [4 x i8] c", %\00"
@.str.4024 = private unnamed_addr constant [3 x i8] c" ]\00"
@.str.4025 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.4026 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4027 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4028 = private unnamed_addr constant [3 x i8] c"==\00"
@.str.4029 = private unnamed_addr constant [3 x i8] c"!=\00"
@.str.4030 = private unnamed_addr constant [2 x i8] c"<\00"
@.str.4031 = private unnamed_addr constant [3 x i8] c"<=\00"
@.str.4032 = private unnamed_addr constant [2 x i8] c">\00"
@.str.4033 = private unnamed_addr constant [3 x i8] c">=\00"
@.str.4034 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.4035 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.4036 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4037 = private unnamed_addr constant [48 x i8] c"an empty [] needs a type, like: []int nums = []\00"
@.str.4038 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.4039 = private unnamed_addr constant [28 x i8] c"every element of this array\00"
@.str.4040 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.4041 = private unnamed_addr constant [9 x i8] c"mul i64 \00"
@.str.4042 = private unnamed_addr constant [3 x i8] c", \00"
@.str.4043 = private unnamed_addr constant [27 x i8] c"call ptr @finch_alloc(i64 \00"
@.str.4044 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4045 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.4046 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4047 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.4048 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4049 = private unnamed_addr constant [42 x i8] c"insertvalue { ptr, i64, i64 } undef, ptr \00"
@.str.4050 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.4051 = private unnamed_addr constant [31 x i8] c"insertvalue { ptr, i64, i64 } \00"
@.str.4052 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.4053 = private unnamed_addr constant [4 x i8] c", 1\00"
@.str.4054 = private unnamed_addr constant [31 x i8] c"insertvalue { ptr, i64, i64 } \00"
@.str.4055 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.4056 = private unnamed_addr constant [4 x i8] c", 2\00"
@.str.4057 = private unnamed_addr constant [4 x i8] c"var\00"
@.str.4058 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00"
@.str.4059 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.4060 = private unnamed_addr constant [61 x i8] c"this is a temporary value, it can't be changed or pointed to\00"
@.str.4061 = private unnamed_addr constant [4 x i8] c"var\00"
@.str.4062 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4063 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00"
@.str.4064 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4065 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00"
@.str.4066 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4067 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.4068 = private unnamed_addr constant [4 x i8] c"int\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 .ci 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 [27 x i8] c"used .ci on a null pointer\00"
@.str.4073 = private unnamed_addr constant [8 x i8] c"fprintf\00"
@.str.4074 = private unnamed_addr constant [6 x i8] c"stdin\00"
@.str.4075 = private unnamed_addr constant [7 x i8] c"stdout\00"
@.str.4076 = private unnamed_addr constant [7 x i8] c"stderr\00"
@.str.4077 = private unnamed_addr constant [2 x i8] c"2\00"
@.str.4078 = private unnamed_addr constant [6 x i8] c"stdin\00"
@.str.4079 = private unnamed_addr constant [2 x i8] c"0\00"
@.str.4080 = private unnamed_addr constant [7 x i8] c"stdout\00"
@.str.4081 = private unnamed_addr constant [2 x i8] c"1\00"
@.str.4082 = private unnamed_addr constant [32 x i8] c"call ptr @finch_std_stream(i32 \00"
@.str.4083 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4084 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4085 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4086 = private unnamed_addr constant [27 x i8] c"used .ci 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 .ci 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 [12 x i8] c"src/gen.fch\00"
@.str.4091 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00"
@.str.4092 = private unnamed_addr constant [3 x i8] c"g:\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 .cdone on a null pointer\00"
@.str.4095 = private unnamed_addr constant [3 x i8] c"g:\00"
@.str.4096 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4097 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00"
@.str.4098 = private unnamed_addr constant [2 x i8] c"@\00"
@.str.4099 = private unnamed_addr constant [20 x i8] c" = external global \00"
@.str.4100 = private unnamed_addr constant [2 x i8] c"@\00"
@.str.4101 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.4102 = private unnamed_addr constant [44 x i8] c"' is a module; use something from it, like \00"
@.str.4103 = private unnamed_addr constant [11 x i8] c".name(...)\00"
@.str.4104 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00"
@.str.4105 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.4106 = private unnamed_addr constant [10 x i8] c"```finch\0A\00"
@.str.4107 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4108 = private unnamed_addr constant [5 x i8] c"\0A```\00"
@.str.4109 = private unnamed_addr constant [7 x i8] c"member\00"
@.str.4110 = private unnamed_addr constant [6 x i8] c"index\00"
@.str.4111 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4112 = private unnamed_addr constant [2 x i8] c".\00"
@.str.4113 = private unnamed_addr constant [2 x i8] c"0\00"
@.str.4114 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4115 = private unnamed_addr constant [2 x i8] c".\00"
@.str.4116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4117 = private unnamed_addr constant [2 x i8] c"e\00"
@.str.4118 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4119 = private unnamed_addr constant [2 x i8] c"E\00"
@.str.4120 = private unnamed_addr constant [3 x i8] c".0\00"
@.str.4121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4122 = private unnamed_addr constant [3 x i8] c".0\00"
@.str.4123 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4124 = private unnamed_addr constant [4 x i8] c"var\00"
@.str.4125 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4126 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.4127 = private unnamed_addr constant [7 x i8] c"member\00"
@.str.4128 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4129 = private unnamed_addr constant [4 x i8] c"var\00"
@.str.4130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4131 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4133 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4134 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00"
@.str.4135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4136 = private unnamed_addr constant [10 x i8] c"the enum \00"
@.str.4137 = private unnamed_addr constant [18 x i8] c" has no variant '\00"
@.str.4138 = private unnamed_addr constant [12 x i8] c"' (it has: \00"
@.str.4139 = private unnamed_addr constant [3 x i8] c", \00"
@.str.4140 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4141 = private unnamed_addr constant [10 x i8] c"```finch\0A\00"
@.str.4142 = private unnamed_addr constant [2 x i8] c".\00"
@.str.4143 = private unnamed_addr constant [4 x i8] c" = \00"
@.str.4144 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4145 = private unnamed_addr constant [5 x i8] c"\0A```\00"
@.str.4146 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4147 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4148 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.4149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4150 = private unnamed_addr constant [38 x i8] c"a variant of an enum can't be changed\00"
@.str.4151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4152 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4153 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4154 = private unnamed_addr constant [58 x i8] c"this ptr has no type, so Finch doesn't know what's inside\00"
@.str.4155 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00"
@.str.4156 = private unnamed_addr constant [7 x i8] c", null\00"
@.str.4157 = private unnamed_addr constant [7 x i8] c"used .\00"
@.str.4158 = private unnamed_addr constant [19 x i8] c" on a null pointer\00"
@.str.4159 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4160 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.4161 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4162 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.4163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4164 = private unnamed_addr constant [6 x i8] c"value\00"
@.str.4165 = private unnamed_addr constant [6 x i8] c"value\00"
@.str.4166 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.4167 = private unnamed_addr constant [3 x i8] c"a \00"
@.str.4168 = private unnamed_addr constant [44 x i8] c" only has '.value' (the thing it points to)\00"
@.str.4169 = private unnamed_addr constant [6 x i8] c"fixed\00"
@.str.4170 = private unnamed_addr constant [2 x i8] c".\00"
@.str.4171 = private unnamed_addr constant [27 x i8] c" can't be changed directly\00"
@.str.4172 = private unnamed_addr constant [4 x i8] c"len\00"
@.str.4173 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.4174 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4175 = private unnamed_addr constant [35 x i8] c"an array has .len and .ptr, not '.\00"
@.str.4176 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.4177 = private unnamed_addr constant [49 x i8] c".ptr of a temporary value would point to nothing\00"
@.str.4178 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4179 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.4180 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4181 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4182 = private unnamed_addr constant [31 x i8] c".ptr can't be changed directly\00"
@.str.4183 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4184 = private unnamed_addr constant [2 x i8] c"%\00"
@.str.4185 = private unnamed_addr constant [54 x i8] c".ptr of a temporary value would point to freed memory\00"
@.str.4186 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4187 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.4188 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00"
@.str.4189 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.4190 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4191 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.4192 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4193 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.4194 = private unnamed_addr constant [4 x i8] c"len\00"
@.str.4195 = private unnamed_addr constant [38 x i8] c"an array, map or str has .len, not '.\00"
@.str.4196 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.4197 = private unnamed_addr constant [49 x i8] c".len can't be changed directly (use push or pop)\00"
@.str.4198 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.4199 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4200 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00"
@.str.4201 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.4202 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.4203 = private unnamed_addr constant [14 x i8] c"extractvalue \00"
@.str.4204 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4205 = private unnamed_addr constant [4 x i8] c", 1\00"
@.str.4206 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.4207 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.4208 = private unnamed_addr constant [22 x i8] c" has no fields (no '.\00"
@.str.4209 = private unnamed_addr constant [3 x i8] c"')\00"
@.str.4210 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4211 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.4212 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4213 = private unnamed_addr constant [12 x i8] c"the struct \00"
@.str.4214 = private unnamed_addr constant [16 x i8] c" has no field '\00"
@.str.4215 = private unnamed_addr constant [12 x i8] c"' (it has: \00"
@.str.4216 = private unnamed_addr constant [3 x i8] c", \00"
@.str.4217 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4218 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4219 = private unnamed_addr constant [10 x i8] c"```finch\0A\00"
@.str.4220 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4221 = private unnamed_addr constant [5 x i8] c"\0A```\00"
@.str.4222 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4223 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.4224 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4225 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00"
@.str.4226 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4227 = private unnamed_addr constant [14 x i8] c"extractvalue \00"
@.str.4228 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4229 = private unnamed_addr constant [3 x i8] c", \00"
@.str.4230 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4231 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4232 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.4233 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4234 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.4235 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4236 = private unnamed_addr constant [9 x i8] c"an index\00"
@.str.4237 = private unnamed_addr constant [6 x i8] c"fixed\00"
@.str.4238 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4239 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.4240 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4241 = private unnamed_addr constant [14 x i8] c", i64 0, i64 \00"
@.str.4242 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4243 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4244 = private unnamed_addr constant [58 x i8] c"this ptr has no type, so Finch doesn't know what's inside\00"
@.str.4245 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4246 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4247 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.4248 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4249 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.4250 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.4251 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4252 = private unnamed_addr constant [47 x i8] c"[ ] works on arrays, str and pointers, not on \00"
@.str.4253 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.4254 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.4255 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4256 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4257 = private unnamed_addr constant [45 x i8] c"this is a temporary str, it can't be changed\00"
@.str.4258 = private unnamed_addr constant [30 x i8] c"call void @finch_str_own(ptr \00"
@.str.4259 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4260 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4261 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00"
@.str.4262 = private unnamed_addr constant [4 x i8] c", 1\00"
@.str.4263 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00"
@.str.4264 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.4265 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.4266 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4267 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.4268 = private unnamed_addr constant [18 x i8] c"named arguments (\00"
@.str.4269 = private unnamed_addr constant [37 x i8] c": ...) are only for creating structs\00"
@.str.4270 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.4271 = private unnamed_addr constant [9 x i8] c"' takes \00"
@.str.4272 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00"
@.str.4273 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4274 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4275 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.4276 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.4277 = private unnamed_addr constant [4 x i8] c"f64\00"
@.str.4278 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.4279 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.4280 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.4281 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.4282 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.4283 = private unnamed_addr constant [3 x i8] c"i8\00"
@.str.4284 = private unnamed_addr constant [4 x i8] c"i16\00"
@.str.4285 = private unnamed_addr constant [4 x i8] c"i32\00"
@.str.4286 = private unnamed_addr constant [3 x i8] c"u8\00"
@.str.4287 = private unnamed_addr constant [4 x i8] c"u16\00"
@.str.4288 = private unnamed_addr constant [4 x i8] c"u32\00"
@.str.4289 = private unnamed_addr constant [4 x i8] c"u64\00"
@.str.4290 = private unnamed_addr constant [4 x i8] c"f32\00"
@.str.4291 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4292 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4293 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4294 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4295 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4296 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00"
@.str.4297 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4298 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4299 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00"
@.str.4300 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.4301 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.4302 = private unnamed_addr constant [2 x i8] c"0\00"
@.str.4303 = private unnamed_addr constant [33 x i8] c"call i32 @finch_str_try_int(ptr \00"
@.str.4304 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4305 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4306 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4307 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00"
@.str.4308 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.4309 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4310 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00"
@.str.4311 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4313 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00"
@.str.4314 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.4315 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.4316 = private unnamed_addr constant [7 x i8] c"double\00"
@.str.4317 = private unnamed_addr constant [7 x i8] c"double\00"
@.str.4318 = private unnamed_addr constant [4 x i8] c"0.0\00"
@.str.4319 = private unnamed_addr constant [35 x i8] c"call i32 @finch_str_try_float(ptr \00"
@.str.4320 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4321 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4322 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4323 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00"
@.str.4324 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.4325 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4326 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00"
@.str.4327 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4328 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4329 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00"
@.str.4330 = private unnamed_addr constant [7 x i8] c"double\00"
@.str.4331 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.4332 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4333 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4334 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.4335 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4336 = private unnamed_addr constant [32 x i8] c"call i64 @finch_str_to_int(ptr \00"
@.str.4337 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4338 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.4339 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4340 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.4341 = private unnamed_addr constant [37 x i8] c"call double @finch_str_to_float(ptr \00"
@.str.4342 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4343 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.4344 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4345 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.4346 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.4347 = private unnamed_addr constant [4 x i8] c"i32\00"
@.str.4348 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.4349 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.4350 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.4351 = private unnamed_addr constant [9 x i8] c"zext i1 \00"
@.str.4352 = private unnamed_addr constant [5 x i8] c" to \00"
@.str.4353 = private unnamed_addr constant [7 x i8] c"fptoui\00"
@.str.4354 = private unnamed_addr constant [7 x i8] c"fptosi\00"
@.str.4355 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4356 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4357 = private unnamed_addr constant [5 x i8] c" to \00"
@.str.4358 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.4359 = private unnamed_addr constant [9 x i8] c"icmp ne \00"
@.str.4360 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4361 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.4362 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4363 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4364 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.4365 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4366 = private unnamed_addr constant [14 x i8] c"inttoptr i64 \00"
@.str.4367 = private unnamed_addr constant [4 x i8] c"u64\00"
@.str.4368 = private unnamed_addr constant [8 x i8] c" to ptr\00"
@.str.4369 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4370 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00"
@.str.4371 = private unnamed_addr constant [5 x i8] c" to \00"
@.str.4372 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4373 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4374 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4375 = 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.4376 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4377 = private unnamed_addr constant [12 x i8] c"can't turn \00"
@.str.4378 = private unnamed_addr constant [7 x i8] c" into \00"
@.str.4379 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.4380 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4381 = private unnamed_addr constant [32 x i8] c"used .structs 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 [6 x i8] c"fixed\00"
@.str.4384 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4385 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4386 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4387 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.4388 = private unnamed_addr constant [4 x i8] c"f32\00"
@.str.4389 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.4390 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.4391 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4392 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.4393 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4394 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4395 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4396 = private unnamed_addr constant [6 x i8] c"fixed\00"
@.str.4397 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4398 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4399 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.4400 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4401 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.4402 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4403 = private unnamed_addr constant [7 x i8] c"double\00"
@.str.4404 = private unnamed_addr constant [7 x i8] c"expand\00"
@.str.4405 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.4406 = private unnamed_addr constant [4 x i8] c" x \00"
@.str.4407 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.4408 = private unnamed_addr constant [3 x i8] c"{ \00"
@.str.4409 = private unnamed_addr constant [3 x i8] c", \00"
@.str.4410 = private unnamed_addr constant [3 x i8] c" }\00"
@.str.4411 = private unnamed_addr constant [9 x i8] c"indirect\00"
@.str.4412 = private unnamed_addr constant [7 x i8] c"expand\00"
@.str.4413 = private unnamed_addr constant [5 x i8] c"i128\00"
@.str.4414 = private unnamed_addr constant [5 x i8] c"i128\00"
@.str.4415 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.4416 = private unnamed_addr constant [2 x i8] c"i\00"
@.str.4417 = private unnamed_addr constant [10 x i8] c"[2 x i64]\00"
@.str.4418 = private unnamed_addr constant [10 x i8] c"[2 x i64]\00"
@.str.4419 = private unnamed_addr constant [7 x i8] c"direct\00"
@.str.4420 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.4421 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4422 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.4423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4424 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4425 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00"
@.str.4426 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4427 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00"
@.str.4428 = private unnamed_addr constant [7 x i8] c"expand\00"
@.str.4429 = private unnamed_addr constant [2 x i8] c"i\00"
@.str.4430 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4431 = private unnamed_addr constant [9 x i8] c"indirect\00"
@.str.4432 = private unnamed_addr constant [7 x i8] c"memory\00"
@.str.4433 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4434 = private unnamed_addr constant [17 x i8] c"division by zero\00"
@.str.4435 = private unnamed_addr constant [7 x i8] c"memory\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 [12 x i8] c"src/gen.fch\00"
@.str.4439 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4440 = private unnamed_addr constant [7 x i8] c"expand\00"
@.str.4441 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4442 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4443 = private unnamed_addr constant [7 x i8] c"double\00"
@.str.4444 = private unnamed_addr constant [12 x i8] c"<2 x float>\00"
@.str.4445 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.4446 = private unnamed_addr constant [2 x i8] c"i\00"
@.str.4447 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4448 = private unnamed_addr constant [3 x i8] c"{ \00"
@.str.4449 = private unnamed_addr constant [3 x i8] c", \00"
@.str.4450 = private unnamed_addr constant [3 x i8] c" }\00"
@.str.4451 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.4452 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.4453 = private unnamed_addr constant [9 x i8] c"indirect\00"
@.str.4454 = private unnamed_addr constant [7 x i8] c"memory\00"
@.str.4455 = private unnamed_addr constant [7 x i8] c"memory\00"
@.str.4456 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.4457 = private unnamed_addr constant [7 x i8] c"expand\00"
@.str.4458 = private unnamed_addr constant [7 x i8] c"expand\00"
@.str.4459 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4460 = private unnamed_addr constant [2 x i8] c"i\00"
@.str.4461 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4462 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00"
@.str.4463 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4464 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00"
@.str.4465 = private unnamed_addr constant [7 x i8] c"memory\00"
@.str.4466 = private unnamed_addr constant [7 x i8] c"direct\00"
@.str.4467 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.4468 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4469 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.4470 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4471 = private unnamed_addr constant [17 x i8] c"the C function '\00"
@.str.4472 = private unnamed_addr constant [3 x i8] c"' \00"
@.str.4473 = private unnamed_addr constant [19 x i8] c" the Finch struct \00"
@.str.4474 = private unnamed_addr constant [21 x i8] c", which C can't take\00"
@.str.4475 = private unnamed_addr constant [17 x i8] c"the C function '\00"
@.str.4476 = private unnamed_addr constant [3 x i8] c"' \00"
@.str.4477 = private unnamed_addr constant [13 x i8] c" the struct \00"
@.str.4478 = private unnamed_addr constant [41 x i8] c" by value, which Finch can't do yet: it \00"
@.str.4479 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.4480 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.4481 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4482 = private unnamed_addr constant [60 x i8] c"methods can't be exported (export a plain fn that calls it)\00"
@.str.4483 = 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.4484 = private unnamed_addr constant [30 x i8] c"an export fn can't be generic\00"
@.str.4485 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4486 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4487 = private unnamed_addr constant [67 x i8] c"an export fn takes numbers, bool, char and pointers only (this is \00"
@.str.4488 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4489 = private unnamed_addr constant [51 x i8] c"; pass text as ptr[char] and make it a str inside)\00"
@.str.4490 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.4491 = private unnamed_addr constant [70 x i8] c"an export fn returns nothing, a number, bool, char or a pointer (not \00"
@.str.4492 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4493 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4494 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.4495 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.4496 = private unnamed_addr constant [39 x i8] c"' is exported twice (from two modules)\00"
@.str.4497 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4498 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.4499 = private unnamed_addr constant [14 x i8] c"i8 zeroext %e\00"
@.str.4500 = private unnamed_addr constant [4 x i8] c"i1 \00"
@.str.4501 = private unnamed_addr constant [14 x i8] c"icmp ne i8 %e\00"
@.str.4502 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.4503 = private unnamed_addr constant [4 x i8] c" %e\00"
@.str.4504 = private unnamed_addr constant [4 x i8] c" %e\00"
@.str.4505 = private unnamed_addr constant [6 x i8] c"call \00"
@.str.4506 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4507 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.4508 = private unnamed_addr constant [3 x i8] c", \00"
@.str.4509 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4510 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.4511 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4512 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.4513 = private unnamed_addr constant [9 x i8] c"ret void\00"
@.str.4514 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.4515 = private unnamed_addr constant [3 x i8] c"i8\00"
@.str.4516 = private unnamed_addr constant [9 x i8] c" zeroext\00"
@.str.4517 = private unnamed_addr constant [8 x i8] c"ret i8 \00"
@.str.4518 = private unnamed_addr constant [9 x i8] c"zext i1 \00"
@.str.4519 = private unnamed_addr constant [7 x i8] c" to i8\00"
@.str.4520 = private unnamed_addr constant [5 x i8] c"ret \00"
@.str.4521 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4522 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4523 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4524 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00"
@.str.4525 = private unnamed_addr constant [11 x i8] c" dllexport\00"
@.str.4526 = private unnamed_addr constant [7 x i8] c"define\00"
@.str.4527 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4528 = private unnamed_addr constant [3 x i8] c" @\00"
@.str.4529 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.4530 = private unnamed_addr constant [3 x i8] c", \00"
@.str.4531 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4532 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4533 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.4534 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4535 = private unnamed_addr constant [10 x i8] c"@finch.c.\00"
@.str.4536 = private unnamed_addr constant [2 x i8] c".\00"
@.str.4537 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4538 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00"
@.str.4539 = private unnamed_addr constant [3 x i8] c"t:\00"
@.str.4540 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4541 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00"
@.str.4542 = private unnamed_addr constant [3 x i8] c"t:\00"
@.str.4543 = private unnamed_addr constant [6 x i8] c"addr(\00"
@.str.4544 = 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.4545 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.4546 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.4547 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4548 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.4549 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4550 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.4551 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4552 = private unnamed_addr constant [6 x i8] c"addr(\00"
@.str.4553 = 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.4554 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.4555 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.4556 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4557 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.4558 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.4559 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4560 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.4561 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4562 = private unnamed_addr constant [6 x i8] c"addr(\00"
@.str.4563 = private unnamed_addr constant [39 x i8] c"): a function given to C can't return \00"
@.str.4564 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4565 = private unnamed_addr constant [10 x i8] c"ptr sret(\00"
@.str.4566 = private unnamed_addr constant [15 x i8] c") align 16 %c0\00"
@.str.4567 = private unnamed_addr constant [4 x i8] c"%c0\00"
@.str.4568 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4569 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4570 = private unnamed_addr constant [7 x i8] c"memory\00"
@.str.4571 = private unnamed_addr constant [11 x i8] c"ptr byval(\00"
@.str.4572 = private unnamed_addr constant [9 x i8] c") align \00"
@.str.4573 = private unnamed_addr constant [4 x i8] c" %c\00"
@.str.4574 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4575 = private unnamed_addr constant [3 x i8] c"%c\00"
@.str.4576 = private unnamed_addr constant [9 x i8] c"indirect\00"
@.str.4577 = private unnamed_addr constant [7 x i8] c"ptr %c\00"
@.str.4578 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4579 = private unnamed_addr constant [3 x i8] c"%c\00"
@.str.4580 = private unnamed_addr constant [7 x i8] c"expand\00"
@.str.4581 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00"
@.str.4582 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4583 = private unnamed_addr constant [4 x i8] c" %c\00"
@.str.4584 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4585 = private unnamed_addr constant [3 x i8] c"%c\00"
@.str.4586 = private unnamed_addr constant [32 x i8] c"getelementptr inbounds i8, ptr \00"
@.str.4587 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.4588 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4589 = private unnamed_addr constant [4 x i8] c" %c\00"
@.str.4590 = private unnamed_addr constant [4 x i8] c" %c\00"
@.str.4591 = private unnamed_addr constant [6 x i8] c"call \00"
@.str.4592 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4593 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.4594 = private unnamed_addr constant [3 x i8] c", \00"
@.str.4595 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4596 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4597 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.4598 = private unnamed_addr constant [9 x i8] c"ret void\00"
@.str.4599 = private unnamed_addr constant [9 x i8] c"ret void\00"
@.str.4600 = private unnamed_addr constant [7 x i8] c"expand\00"
@.str.4601 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00"
@.str.4602 = private unnamed_addr constant [5 x i8] c"ret \00"
@.str.4603 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4604 = private unnamed_addr constant [5 x i8] c"ret \00"
@.str.4605 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4606 = private unnamed_addr constant [16 x i8] c"define internal\00"
@.str.4607 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4608 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4609 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.4610 = private unnamed_addr constant [3 x i8] c", \00"
@.str.4611 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4612 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4613 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00"
@.str.4614 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4615 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4616 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4617 = private unnamed_addr constant [55 x i8] c"(...) turns a whole number into the enum, but this is \00"
@.str.4618 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.4619 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4620 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4621 = private unnamed_addr constant [38 x i8] c" is not the number of any variant of \00"
@.str.4622 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.4623 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4624 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00"
@.str.4625 = private unnamed_addr constant [3 x i8] c", \00"
@.str.4626 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4627 = private unnamed_addr constant [7 x i8] c"or i1 \00"
@.str.4628 = private unnamed_addr constant [3 x i8] c", \00"
@.str.4629 = private unnamed_addr constant [8 x i8] c"xor i1 \00"
@.str.4630 = private unnamed_addr constant [7 x i8] c", true\00"
@.str.4631 = private unnamed_addr constant [33 x i8] c"this number is not a variant of \00"
@.str.4632 = private unnamed_addr constant [11 x i8] c"trunc i64 \00"
@.str.4633 = private unnamed_addr constant [8 x i8] c" to i32\00"
@.str.4634 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.4635 = private unnamed_addr constant [9 x i8] c" zeroext\00"
@.str.4636 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.4637 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4638 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00"
@.str.4639 = private unnamed_addr constant [9 x i8] c" signext\00"
@.str.4640 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.4641 = private unnamed_addr constant [9 x i8] c" zeroext\00"
@.str.4642 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4643 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4644 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4645 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4646 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00"
@.str.4647 = private unnamed_addr constant [4 x i8] c"...\00"
@.str.4648 = private unnamed_addr constant [18 x i8] c"C function from `\00"
@.str.4649 = private unnamed_addr constant [8 x i8] c"`\0A```c\0A\00"
@.str.4650 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4651 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.4652 = private unnamed_addr constant [3 x i8] c", \00"
@.str.4653 = private unnamed_addr constant [6 x i8] c")\0A```\00"
@.str.4654 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4655 = private unnamed_addr constant [17 x i8] c"the C function '\00"
@.str.4656 = private unnamed_addr constant [36 x i8] c"' can't be used from Finch yet: it \00"
@.str.4657 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.4658 = private unnamed_addr constant [18 x i8] c"' takes at least \00"
@.str.4659 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00"
@.str.4660 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.4661 = private unnamed_addr constant [9 x i8] c"' takes \00"
@.str.4662 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00"
@.str.4663 = private unnamed_addr constant [8 x i8] c"returns\00"
@.str.4664 = private unnamed_addr constant [6 x i8] c"takes\00"
@.str.4665 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4666 = private unnamed_addr constant [10 x i8] c"ptr sret(\00"
@.str.4667 = private unnamed_addr constant [11 x i8] c") align 16\00"
@.str.4668 = private unnamed_addr constant [10 x i8] c"ptr sret(\00"
@.str.4669 = private unnamed_addr constant [12 x i8] c") align 16 \00"
@.str.4670 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4671 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4672 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4673 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4674 = private unnamed_addr constant [10 x i8] c"argument \00"
@.str.4675 = private unnamed_addr constant [5 x i8] c" of \00"
@.str.4676 = private unnamed_addr constant [7 x i8] c"memory\00"
@.str.4677 = private unnamed_addr constant [11 x i8] c"ptr byval(\00"
@.str.4678 = private unnamed_addr constant [9 x i8] c") align \00"
@.str.4679 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4680 = private unnamed_addr constant [9 x i8] c"indirect\00"
@.str.4681 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4682 = private unnamed_addr constant [5 x i8] c"ptr \00"
@.str.4683 = private unnamed_addr constant [7 x i8] c"expand\00"
@.str.4684 = private unnamed_addr constant [10 x i8] c"[32 x i8]\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"getelementptr inbounds i8, ptr \00"
@.str.4687 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.4688 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4689 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4690 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4691 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4692 = private unnamed_addr constant [5 x i8] c"ptr \00"
@.str.4693 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4694 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4695 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.4696 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4697 = private unnamed_addr constant [24 x i8] c"this gives back nothing\00"
@.str.4698 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.4699 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.4700 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4701 = private unnamed_addr constant [69 x i8] c"structs and arrays can't be passed to the '...' part of a C function\00"
@.str.4702 = private unnamed_addr constant [4 x i8] c"f32\00"
@.str.4703 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.4704 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.4705 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4706 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4707 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.4708 = private unnamed_addr constant [9 x i8] c"zext i1 \00"
@.str.4709 = private unnamed_addr constant [8 x i8] c" to i32\00"
@.str.4710 = private unnamed_addr constant [4 x i8] c"i32\00"
@.str.4711 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.4712 = private unnamed_addr constant [4 x i8] c"i32\00"
@.str.4713 = private unnamed_addr constant [4 x i8] c"i32\00"
@.str.4714 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4715 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4716 = private unnamed_addr constant [7 x i8] c"direct\00"
@.str.4717 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4718 = private unnamed_addr constant [6 x i8] c", ...\00"
@.str.4719 = private unnamed_addr constant [4 x i8] c"...\00"
@.str.4720 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4721 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00"
@.str.4722 = private unnamed_addr constant [3 x i8] c"f:\00"
@.str.4723 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4724 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00"
@.str.4725 = private unnamed_addr constant [3 x i8] c"f:\00"
@.str.4726 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4727 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00"
@.str.4728 = private unnamed_addr constant [8 x i8] c"declare\00"
@.str.4729 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4730 = private unnamed_addr constant [3 x i8] c" @\00"
@.str.4731 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.4732 = private unnamed_addr constant [3 x i8] c", \00"
@.str.4733 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4734 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4735 = private unnamed_addr constant [3 x i8] c" (\00"
@.str.4736 = private unnamed_addr constant [3 x i8] c", \00"
@.str.4737 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4738 = private unnamed_addr constant [5 x i8] c"call\00"
@.str.4739 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4740 = private unnamed_addr constant [3 x i8] c" @\00"
@.str.4741 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.4742 = private unnamed_addr constant [3 x i8] c", \00"
@.str.4743 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4744 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.4745 = private unnamed_addr constant [7 x i8] c"expand\00"
@.str.4746 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00"
@.str.4747 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4748 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4749 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00"
@.str.4750 = private unnamed_addr constant [33 x i8] c"call void @finch_str_from_c(ptr \00"
@.str.4751 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4752 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4753 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4754 = private unnamed_addr constant [7 x i8] c"printf\00"
@.str.4755 = private unnamed_addr constant [7 x i8] c"fflush\00"
@.str.4756 = private unnamed_addr constant [5 x i8] c"exit\00"
@.str.4757 = private unnamed_addr constant [5 x i8] c"free\00"
@.str.4758 = private unnamed_addr constant [6 x i8] c"qsort\00"
@.str.4759 = private unnamed_addr constant [7 x i8] c"printf\00"
@.str.4760 = private unnamed_addr constant [5 x i8] c"puts\00"
@.str.4761 = private unnamed_addr constant [8 x i8] c"putchar\00"
@.str.4762 = private unnamed_addr constant [6 x i8] c"scanf\00"
@.str.4763 = private unnamed_addr constant [6 x i8] c"fopen\00"
@.str.4764 = private unnamed_addr constant [8 x i8] c"getchar\00"
@.str.4765 = private unnamed_addr constant [5 x i8] c"sqrt\00"
@.str.4766 = private unnamed_addr constant [4 x i8] c"pow\00"
@.str.4767 = private unnamed_addr constant [4 x i8] c"sin\00"
@.str.4768 = private unnamed_addr constant [4 x i8] c"cos\00"
@.str.4769 = private unnamed_addr constant [6 x i8] c"floor\00"
@.str.4770 = private unnamed_addr constant [5 x i8] c"fabs\00"
@.str.4771 = private unnamed_addr constant [7 x i8] c"malloc\00"
@.str.4772 = private unnamed_addr constant [5 x i8] c"rand\00"
@.str.4773 = private unnamed_addr constant [6 x i8] c"srand\00"
@.str.4774 = private unnamed_addr constant [4 x i8] c"abs\00"
@.str.4775 = private unnamed_addr constant [5 x i8] c"atoi\00"
@.str.4776 = private unnamed_addr constant [7 x i8] c"strlen\00"
@.str.4777 = private unnamed_addr constant [7 x i8] c"strcpy\00"
@.str.4778 = private unnamed_addr constant [7 x i8] c"memcpy\00"
@.str.4779 = private unnamed_addr constant [5 x i8] c"time\00"
@.str.4780 = private unnamed_addr constant [6 x i8] c"sleep\00"
@.str.4781 = private unnamed_addr constant [7 x i8] c"usleep\00"
@.str.4782 = private unnamed_addr constant [8 x i8] c"stdio.h\00"
@.str.4783 = private unnamed_addr constant [8 x i8] c"stdio.h\00"
@.str.4784 = private unnamed_addr constant [8 x i8] c"stdio.h\00"
@.str.4785 = private unnamed_addr constant [8 x i8] c"stdio.h\00"
@.str.4786 = private unnamed_addr constant [8 x i8] c"stdio.h\00"
@.str.4787 = private unnamed_addr constant [8 x i8] c"stdio.h\00"
@.str.4788 = private unnamed_addr constant [7 x i8] c"math.h\00"
@.str.4789 = private unnamed_addr constant [7 x i8] c"math.h\00"
@.str.4790 = private unnamed_addr constant [7 x i8] c"math.h\00"
@.str.4791 = private unnamed_addr constant [7 x i8] c"math.h\00"
@.str.4792 = private unnamed_addr constant [7 x i8] c"math.h\00"
@.str.4793 = private unnamed_addr constant [7 x i8] c"math.h\00"
@.str.4794 = private unnamed_addr constant [9 x i8] c"stdlib.h\00"
@.str.4795 = private unnamed_addr constant [9 x i8] c"stdlib.h\00"
@.str.4796 = private unnamed_addr constant [9 x i8] c"stdlib.h\00"
@.str.4797 = private unnamed_addr constant [9 x i8] c"stdlib.h\00"
@.str.4798 = private unnamed_addr constant [9 x i8] c"stdlib.h\00"
@.str.4799 = private unnamed_addr constant [9 x i8] c"string.h\00"
@.str.4800 = private unnamed_addr constant [9 x i8] c"string.h\00"
@.str.4801 = private unnamed_addr constant [9 x i8] c"string.h\00"
@.str.4802 = private unnamed_addr constant [7 x i8] c"time.h\00"
@.str.4803 = private unnamed_addr constant [9 x i8] c"unistd.h\00"
@.str.4804 = private unnamed_addr constant [9 x i8] c"unistd.h\00"
@.str.4805 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4806 = private unnamed_addr constant [29 x i8] c" (it's from C: add import \22\00"
@.str.4807 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4808 = private unnamed_addr constant [15 x i8] c"\22 at the top)\00"
@.str.4809 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4810 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00"
@.str.4811 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4812 = private unnamed_addr constant [6 x i8] c"error\00"
@.str.4813 = 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.4814 = private unnamed_addr constant [6 x i8] c"print\00"
@.str.4815 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4816 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.4817 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4818 = private unnamed_addr constant [54 x i8] c"this gives back nothing, so there is nothing to print\00"
@.str.4819 = private unnamed_addr constant [2 x i8] c" \00"
@.str.4820 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4821 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.4822 = private unnamed_addr constant [1 x i8] c"\00"
@.str.4823 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.4824 = private unnamed_addr constant [5 x i8] c"addr\00"
@.str.4825 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4826 = private unnamed_addr constant [4 x i8] c"var\00"
@.str.4827 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4828 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.4829 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4830 = private unnamed_addr constant [4 x i8] c"var\00"
@.str.4831 = private unnamed_addr constant [7 x i8] c"member\00"
@.str.4832 = private unnamed_addr constant [6 x i8] c"index\00"
@.str.4833 = private unnamed_addr constant [64 x i8] c"addr(...) needs a variable, a field or an element, like addr(x)\00"
@.str.4834 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4835 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4836 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4837 = private unnamed_addr constant [35 x i8] c"call void @finch_str_from_int(ptr \00"
@.str.4838 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.4839 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.4840 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4841 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_uint(ptr \00"
@.str.4842 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.4843 = private unnamed_addr constant [4 x i8] c"u64\00"
@.str.4844 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4845 = private unnamed_addr constant [37 x i8] c"call void @finch_str_from_float(ptr \00"
@.str.4846 = private unnamed_addr constant [10 x i8] c", double \00"
@.str.4847 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.4848 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4849 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.4850 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_char(ptr \00"
@.str.4851 = private unnamed_addr constant [14 x i8] c", i8 signext \00"
@.str.4852 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4853 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.4854 = private unnamed_addr constant [9 x i8] c"zext i1 \00"
@.str.4855 = private unnamed_addr constant [8 x i8] c" to i32\00"
@.str.4856 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_bool(ptr \00"
@.str.4857 = private unnamed_addr constant [7 x i8] c", i32 \00"
@.str.4858 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4859 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.4860 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4861 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00"
@.str.4862 = private unnamed_addr constant [33 x i8] c"call void @finch_str_from_c(ptr \00"
@.str.4863 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4864 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4865 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.4866 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4867 = private unnamed_addr constant [3 x i8] c"u8\00"
@.str.4868 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4869 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.4870 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4871 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00"
@.str.4872 = private unnamed_addr constant [37 x i8] c"call void @finch_str_from_bytes(ptr \00"
@.str.4873 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4874 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4875 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.4876 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.4877 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.4878 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.4879 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.4880 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.4881 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4882 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00"
@.str.4883 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4884 = private unnamed_addr constant [12 x i8] c"can't turn \00"
@.str.4885 = private unnamed_addr constant [10 x i8] c" into str\00"
@.str.4886 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4887 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4888 = private unnamed_addr constant [10 x i8] c"read_file\00"
@.str.4889 = private unnamed_addr constant [12 x i8] c"file_exists\00"
@.str.4890 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4891 = private unnamed_addr constant [14 x i8] c"the file name\00"
@.str.4892 = private unnamed_addr constant [12 x i8] c"file_exists\00"
@.str.4893 = private unnamed_addr constant [33 x i8] c"call i32 @finch_file_exists(ptr \00"
@.str.4894 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4895 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00"
@.str.4896 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.4897 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.4898 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4899 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00"
@.str.4900 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4901 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4902 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00"
@.str.4903 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4904 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00"
@.str.4905 = private unnamed_addr constant [35 x i8] c"call i32 @finch_try_read_file(ptr \00"
@.str.4906 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4907 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4908 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4909 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00"
@.str.4910 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.4911 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4912 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00"
@.str.4913 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4914 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4915 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00"
@.str.4916 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4917 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4918 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4919 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.4920 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4921 = private unnamed_addr constant [32 x i8] c"call void @finch_read_file(ptr \00"
@.str.4922 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4923 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4924 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.4925 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4926 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4927 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.4928 = private unnamed_addr constant [11 x i8] c"write_file\00"
@.str.4929 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4930 = private unnamed_addr constant [14 x i8] c"the file name\00"
@.str.4931 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4932 = private unnamed_addr constant [9 x i8] c"the text\00"
@.str.4933 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4934 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00"
@.str.4935 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4936 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4937 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00"
@.str.4938 = private unnamed_addr constant [36 x i8] c"call i32 @finch_try_write_file(ptr \00"
@.str.4939 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4940 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4941 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4942 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00"
@.str.4943 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.4944 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4945 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00"
@.str.4946 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4947 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4948 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00"
@.str.4949 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.4950 = private unnamed_addr constant [32 x i8] c"call i32 @finch_write_file(ptr \00"
@.str.4951 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4952 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4953 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00"
@.str.4954 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.4955 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.4956 = private unnamed_addr constant [12 x i8] c"delete_file\00"
@.str.4957 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4958 = private unnamed_addr constant [14 x i8] c"the file name\00"
@.str.4959 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00"
@.str.4960 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4961 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4962 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4963 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00"
@.str.4964 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4965 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4966 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00"
@.str.4967 = private unnamed_addr constant [37 x i8] c"call i32 @finch_try_delete_file(ptr \00"
@.str.4968 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4969 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4970 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00"
@.str.4971 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.4972 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4973 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00"
@.str.4974 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.4975 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4976 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00"
@.str.4977 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.4978 = private unnamed_addr constant [33 x i8] c"call i32 @finch_delete_file(ptr \00"
@.str.4979 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4980 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00"
@.str.4981 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.4982 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.4983 = private unnamed_addr constant [6 x i8] c"shell\00"
@.str.4984 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4985 = private unnamed_addr constant [12 x i8] c"the command\00"
@.str.4986 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00"
@.str.4987 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.4988 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4989 = private unnamed_addr constant [27 x i8] c"call i64 @finch_shell(ptr \00"
@.str.4990 = private unnamed_addr constant [2 x i8] c")\00"
@.str.4991 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.4992 = private unnamed_addr constant [5 x i8] c"exit\00"
@.str.4993 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4994 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.4995 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.4996 = private unnamed_addr constant [14 x i8] c"the exit code\00"
@.str.4997 = private unnamed_addr constant [11 x i8] c"trunc i64 \00"
@.str.4998 = private unnamed_addr constant [8 x i8] c" to i32\00"
@.str.4999 = private unnamed_addr constant [27 x i8] c"call i32 @fflush(ptr null)\00"
@.str.5000 = private unnamed_addr constant [21 x i8] c"call void @exit(i32 \00"
@.str.5001 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5002 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.5003 = private unnamed_addr constant [6 x i8] c"input\00"
@.str.5004 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5005 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5006 = private unnamed_addr constant [13 x i8] c"the question\00"
@.str.5007 = private unnamed_addr constant [28 x i8] c"call void @finch_input(ptr \00"
@.str.5008 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5009 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5010 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.5011 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.5012 = private unnamed_addr constant [4 x i8] c"new\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"call ptr @finch_alloc(i64 \00"
@.str.5015 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5016 = private unnamed_addr constant [5 x i8] c"free\00"
@.str.5017 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5018 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.5019 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5020 = 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.5021 = private unnamed_addr constant [21 x i8] c"call void @free(ptr \00"
@.str.5022 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5023 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.5024 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5025 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.5026 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.5027 = private unnamed_addr constant [48 x i8] c"' is not generic, so it takes no type arguments\00"
@.str.5028 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5029 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5030 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5031 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.5032 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5033 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5034 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.5035 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5036 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.5037 = private unnamed_addr constant [43 x i8] c"' is generic, so say which type it holds: \00"
@.str.5038 = private unnamed_addr constant [11 x i8] c"[int](...)\00"
@.str.5039 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5040 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.5041 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5042 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.5043 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5044 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.5045 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5046 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5047 = private unnamed_addr constant [30 x i8] c"used .index 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 [30 x i8] c"used .progs on a null pointer\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 [17 x i8] c"```finch\0Astruct \00"
@.str.5053 = private unnamed_addr constant [4 x i8] c" { \00"
@.str.5054 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5055 = private unnamed_addr constant [7 x i8] c" }\0A```\00"
@.str.5056 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5057 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.5058 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5059 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5060 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.5061 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5062 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00"
@.str.5063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5064 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00"
@.str.5065 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5066 = private unnamed_addr constant [2 x i8] c"C\00"
@.str.5067 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.5068 = private unnamed_addr constant [32 x i8] c"' is a variable, not a function\00"
@.str.5069 = private unnamed_addr constant [29 x i8] c"there is no function named '\00"
@.str.5070 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.5071 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5072 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.5073 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5074 = private unnamed_addr constant [5 x i8] c"main\00"
@.str.5075 = private unnamed_addr constant [53 x i8] c"main can't be called, it is where the program starts\00"
@.str.5076 = private unnamed_addr constant [5 x i8] c"ptr \00"
@.str.5077 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5078 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5079 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5080 = private unnamed_addr constant [11 x i8] c"argument '\00"
@.str.5081 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5082 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.5083 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5084 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5085 = private unnamed_addr constant [2 x i8] c" \00"
@.str.5086 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5087 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00"
@.str.5088 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.5089 = private unnamed_addr constant [40 x i8] c"' can fail, so say what happens then: \00"
@.str.5090 = private unnamed_addr constant [20 x i8] c"(...) or <value>, \00"
@.str.5091 = private unnamed_addr constant [28 x i8] c"(...) or { ... }, or try \00"
@.str.5092 = private unnamed_addr constant [6 x i8] c"(...)\00"
@.str.5093 = private unnamed_addr constant [6 x i8] c"call \00"
@.str.5094 = private unnamed_addr constant [2 x i8] c" \00"
@.str.5095 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.5096 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5097 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5098 = private unnamed_addr constant [14 x i8] c"extractvalue \00"
@.str.5099 = private unnamed_addr constant [2 x i8] c" \00"
@.str.5100 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.5101 = private unnamed_addr constant [8 x i8] c"xor i1 \00"
@.str.5102 = private unnamed_addr constant [7 x i8] c", true\00"
@.str.5103 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5104 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00"
@.str.5105 = private unnamed_addr constant [14 x i8] c"extractvalue \00"
@.str.5106 = private unnamed_addr constant [2 x i8] c" \00"
@.str.5107 = private unnamed_addr constant [4 x i8] c", 2\00"
@.str.5108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5109 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00"
@.str.5110 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.5111 = private unnamed_addr constant [14 x i8] c"extractvalue \00"
@.str.5112 = private unnamed_addr constant [2 x i8] c" \00"
@.str.5113 = private unnamed_addr constant [4 x i8] c", 1\00"
@.str.5114 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.5115 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5116 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.5117 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5118 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5119 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.5120 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5122 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.5123 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5125 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5126 = 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.5127 = private unnamed_addr constant [6 x i8] c" has \00"
@.str.5128 = private unnamed_addr constant [18 x i8] c" fields, but got \00"
@.str.5129 = private unnamed_addr constant [24 x i8] c" values (or name them: \00"
@.str.5130 = private unnamed_addr constant [16 x i8] c"(field: value))\00"
@.str.5131 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5133 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5134 = private unnamed_addr constant [16 x i8] c" has no field '\00"
@.str.5135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5136 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.5137 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5138 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5139 = private unnamed_addr constant [12 x i8] c"the field '\00"
@.str.5140 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5141 = private unnamed_addr constant [17 x i8] c"' is given twice\00"
@.str.5142 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5143 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00"
@.str.5144 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5145 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5146 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5147 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5148 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5150 = private unnamed_addr constant [12 x i8] c"the field '\00"
@.str.5151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5152 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.5153 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5154 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5155 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.5156 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5157 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.5158 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5159 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00"
@.str.5160 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5161 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00"
@.str.5162 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5163 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00"
@.str.5164 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5165 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00"
@.str.5166 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5167 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.5168 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5169 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.5170 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5171 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5172 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5173 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5174 = private unnamed_addr constant [17 x i8] c"the default of '\00"
@.str.5175 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5176 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.5177 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5178 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00"
@.str.5179 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5180 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00"
@.str.5181 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5182 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00"
@.str.5183 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5184 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00"
@.str.5185 = private unnamed_addr constant [13 x i8] c"insertvalue \00"
@.str.5186 = private unnamed_addr constant [2 x i8] c" \00"
@.str.5187 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5188 = private unnamed_addr constant [2 x i8] c" \00"
@.str.5189 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5190 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5191 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5192 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00"
@.str.5193 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5195 = private unnamed_addr constant [4 x i8] c"var\00"
@.str.5196 = private unnamed_addr constant [39 x i8] c"there is no variable or module named '\00"
@.str.5197 = private unnamed_addr constant [33 x i8] c"' (to use a module, add import \00"
@.str.5198 = private unnamed_addr constant [14 x i8] c" at the top)\00"
@.str.5199 = private unnamed_addr constant [2 x i8] c".\00"
@.str.5200 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5201 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5202 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5203 = private unnamed_addr constant [2 x i8] c".\00"
@.str.5204 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5205 = private unnamed_addr constant [13 x i8] c"the module '\00"
@.str.5206 = private unnamed_addr constant [36 x i8] c"' has no function or struct named '\00"
@.str.5207 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.5208 = private unnamed_addr constant [5 x i8] c"push\00"
@.str.5209 = private unnamed_addr constant [4 x i8] c"pop\00"
@.str.5210 = private unnamed_addr constant [7 x i8] c"insert\00"
@.str.5211 = private unnamed_addr constant [7 x i8] c"remove\00"
@.str.5212 = private unnamed_addr constant [6 x i8] c"clear\00"
@.str.5213 = private unnamed_addr constant [7 x i8] c"resize\00"
@.str.5214 = private unnamed_addr constant [5 x i8] c"sort\00"
@.str.5215 = private unnamed_addr constant [8 x i8] c"reverse\00"
@.str.5216 = private unnamed_addr constant [6 x i8] c"array\00"
@.str.5217 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5218 = private unnamed_addr constant [64 x i8] c"() would change a temporary array; store it in a variable first\00"
@.str.5219 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.5220 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.5221 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.5222 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5223 = private unnamed_addr constant [62 x i8] c"() would change a temporary map; store it in a variable first\00"
@.str.5224 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5225 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.5226 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5227 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.5228 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.5229 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00"
@.str.5230 = private unnamed_addr constant [7 x i8] c", null\00"
@.str.5231 = private unnamed_addr constant [9 x i8] c"called .\00"
@.str.5232 = private unnamed_addr constant [21 x i8] c"() on a null pointer\00"
@.str.5233 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5234 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.5235 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.5236 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.5237 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.5238 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.5239 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5240 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.5241 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5242 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5243 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.5244 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5245 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5246 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00"
@.str.5247 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5248 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5249 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.5250 = private unnamed_addr constant [5 x i8] c"the \00"
@.str.5251 = private unnamed_addr constant [2 x i8] c" \00"
@.str.5252 = private unnamed_addr constant [35 x i8] c" has no methods; add one with fn \00"
@.str.5253 = private unnamed_addr constant [2 x i8] c".\00"
@.str.5254 = private unnamed_addr constant [14 x i8] c"(...) { ... }\00"
@.str.5255 = private unnamed_addr constant [5 x i8] c"the \00"
@.str.5256 = private unnamed_addr constant [2 x i8] c" \00"
@.str.5257 = private unnamed_addr constant [17 x i8] c" has no method '\00"
@.str.5258 = private unnamed_addr constant [12 x i8] c"' (it has: \00"
@.str.5259 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5260 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5261 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5262 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.5263 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5264 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.5265 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.5266 = private unnamed_addr constant [29 x i8] c"() would change a temporary \00"
@.str.5267 = private unnamed_addr constant [31 x i8] c"; store it in a variable first\00"
@.str.5268 = private unnamed_addr constant [20 x i8] c"the loop variable '\00"
@.str.5269 = private unnamed_addr constant [19 x i8] c"' can't be changed\00"
@.str.5270 = private unnamed_addr constant [2 x i8] c".\00"
@.str.5271 = private unnamed_addr constant [16 x i8] c" has no methods\00"
@.str.5272 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5273 = private unnamed_addr constant [47 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr \00"
@.str.5274 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00"
@.str.5275 = private unnamed_addr constant [5 x i8] c"push\00"
@.str.5276 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5277 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5278 = private unnamed_addr constant [12 x i8] c"the element\00"
@.str.5279 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5280 = private unnamed_addr constant [9 x i8] c"add i64 \00"
@.str.5281 = private unnamed_addr constant [4 x i8] c", 1\00"
@.str.5282 = private unnamed_addr constant [34 x i8] c"call void @finch_arr_reserve(ptr \00"
@.str.5283 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5284 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5285 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5286 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.5287 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.5288 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5289 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5290 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5291 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.5292 = private unnamed_addr constant [4 x i8] c"pop\00"
@.str.5293 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5294 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00"
@.str.5295 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.5296 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00"
@.str.5297 = private unnamed_addr constant [9 x i8] c"sub i64 \00"
@.str.5298 = private unnamed_addr constant [4 x i8] c", 1\00"
@.str.5299 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.5300 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \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 [4 x i8] c"i64\00"
@.str.5304 = private unnamed_addr constant [6 x i8] c"clear\00"
@.str.5305 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5306 = private unnamed_addr constant [2 x i8] c"0\00"
@.str.5307 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.5308 = private unnamed_addr constant [5 x i8] c"find\00"
@.str.5309 = private unnamed_addr constant [9 x i8] c"contains\00"
@.str.5310 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5311 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5312 = private unnamed_addr constant [22 x i8] c"the value to look for\00"
@.str.5313 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5314 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5315 = private unnamed_addr constant [3 x i8] c"-1\00"
@.str.5316 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5317 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.5318 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5319 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5320 = private unnamed_addr constant [2 x i8] c"0\00"
@.str.5321 = private unnamed_addr constant [10 x i8] c"find.cond\00"
@.str.5322 = private unnamed_addr constant [10 x i8] c"find.body\00"
@.str.5323 = private unnamed_addr constant [9 x i8] c"find.hit\00"
@.str.5324 = private unnamed_addr constant [10 x i8] c"find.next\00"
@.str.5325 = private unnamed_addr constant [9 x i8] c"find.end\00"
@.str.5326 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5327 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00"
@.str.5328 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5329 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.5330 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5331 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5332 = private unnamed_addr constant [3 x i8] c"==\00"
@.str.5333 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5334 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5335 = private unnamed_addr constant [9 x i8] c"add i64 \00"
@.str.5336 = private unnamed_addr constant [4 x i8] c", 1\00"
@.str.5337 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5338 = private unnamed_addr constant [5 x i8] c"find\00"
@.str.5339 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.5340 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00"
@.str.5341 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.5342 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.5343 = private unnamed_addr constant [5 x i8] c"join\00"
@.str.5344 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.5345 = private unnamed_addr constant [32 x i8] c"join() works on an array of str\00"
@.str.5346 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5347 = private unnamed_addr constant [14 x i8] c"the separator\00"
@.str.5348 = private unnamed_addr constant [31 x i8] c"call void @finch_str_join(ptr \00"
@.str.5349 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5350 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5351 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5352 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.5353 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.5354 = private unnamed_addr constant [7 x i8] c"insert\00"
@.str.5355 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5356 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.5357 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5358 = private unnamed_addr constant [13 x i8] c"the position\00"
@.str.5359 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5360 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5361 = private unnamed_addr constant [12 x i8] c"the element\00"
@.str.5362 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5363 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.5364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5365 = private unnamed_addr constant [37 x i8] c"call void @finch_arr_insert_gap(ptr \00"
@.str.5366 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5367 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5368 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5369 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5370 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5371 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.5372 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.5373 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5374 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5375 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.5376 = private unnamed_addr constant [7 x i8] c"remove\00"
@.str.5377 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5378 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.5379 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5380 = private unnamed_addr constant [13 x i8] c"the position\00"
@.str.5381 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5382 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.5383 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.5384 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5385 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5386 = private unnamed_addr constant [37 x i8] c"call void @finch_arr_remove_gap(ptr \00"
@.str.5387 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5388 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5389 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5390 = private unnamed_addr constant [7 x i8] c"resize\00"
@.str.5391 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5392 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.5393 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5394 = private unnamed_addr constant [15 x i8] c"the new length\00"
@.str.5395 = private unnamed_addr constant [33 x i8] c"call void @finch_arr_resize(ptr \00"
@.str.5396 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5397 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5398 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5399 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.5400 = private unnamed_addr constant [8 x i8] c"reverse\00"
@.str.5401 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5402 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.5403 = private unnamed_addr constant [10 x i8] c"sdiv i64 \00"
@.str.5404 = private unnamed_addr constant [4 x i8] c", 2\00"
@.str.5405 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.5406 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5407 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5408 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5409 = private unnamed_addr constant [9 x i8] c"sub i64 \00"
@.str.5410 = private unnamed_addr constant [9 x i8] c"sub i64 \00"
@.str.5411 = private unnamed_addr constant [4 x i8] c", 1\00"
@.str.5412 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5413 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5414 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.5415 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5416 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5417 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.5418 = private unnamed_addr constant [6 x i8] c"slice\00"
@.str.5419 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5420 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.5421 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5422 = private unnamed_addr constant [10 x i8] c"the start\00"
@.str.5423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5424 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.5425 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5426 = private unnamed_addr constant [8 x i8] c"the end\00"
@.str.5427 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5428 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00"
@.str.5429 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.5430 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00"
@.str.5431 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5432 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00"
@.str.5433 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5434 = private unnamed_addr constant [7 x i8] c"or i1 \00"
@.str.5435 = private unnamed_addr constant [7 x i8] c"or i1 \00"
@.str.5436 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5437 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5438 = private unnamed_addr constant [34 x i8] c"slice(start, end) is out of range\00"
@.str.5439 = private unnamed_addr constant [9 x i8] c"sub i64 \00"
@.str.5440 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5441 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.5442 = private unnamed_addr constant [31 x i8] c"call void @finch_arr_make(ptr \00"
@.str.5443 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5444 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5445 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5446 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.5447 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.5448 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.5449 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5450 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5451 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5452 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00"
@.str.5453 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5454 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5455 = private unnamed_addr constant [9 x i8] c"add i64 \00"
@.str.5456 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5457 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5458 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.5459 = private unnamed_addr constant [5 x i8] c"sort\00"
@.str.5460 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.5461 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.5462 = private unnamed_addr constant [48 x i8] c"sort() works on arrays of numbers, chars or str\00"
@.str.5463 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5464 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.5465 = private unnamed_addr constant [22 x i8] c"call void @qsort(ptr \00"
@.str.5466 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5467 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5468 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5469 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5470 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.5471 = private unnamed_addr constant [25 x i8] c"an array has no method '\00"
@.str.5472 = private unnamed_addr constant [97 x i8] c"' (it has: push, pop, insert, remove, clear, resize, find, contains, join, slice, reverse, sort)\00"
@.str.5473 = private unnamed_addr constant [12 x i8] c"@finch.cmp.\00"
@.str.5474 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5475 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00"
@.str.5476 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5477 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00"
@.str.5478 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5479 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.5480 = private unnamed_addr constant [40 x i8] c"call i64 @finch_str_cmp(ptr %x, ptr %y)\00"
@.str.5481 = private unnamed_addr constant [11 x i8] c"trunc i64 \00"
@.str.5482 = private unnamed_addr constant [8 x i8] c" to i32\00"
@.str.5483 = private unnamed_addr constant [3 x i8] c"%x\00"
@.str.5484 = private unnamed_addr constant [3 x i8] c"%y\00"
@.str.5485 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5486 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5487 = private unnamed_addr constant [10 x i8] c"fcmp olt \00"
@.str.5488 = private unnamed_addr constant [2 x i8] c" \00"
@.str.5489 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5490 = private unnamed_addr constant [10 x i8] c"fcmp ogt \00"
@.str.5491 = private unnamed_addr constant [2 x i8] c" \00"
@.str.5492 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5493 = private unnamed_addr constant [6 x i8] c"icmp \00"
@.str.5494 = private unnamed_addr constant [2 x i8] c"<\00"
@.str.5495 = private unnamed_addr constant [2 x i8] c" \00"
@.str.5496 = private unnamed_addr constant [2 x i8] c" \00"
@.str.5497 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5498 = private unnamed_addr constant [6 x i8] c"icmp \00"
@.str.5499 = private unnamed_addr constant [2 x i8] c">\00"
@.str.5500 = private unnamed_addr constant [2 x i8] c" \00"
@.str.5501 = private unnamed_addr constant [2 x i8] c" \00"
@.str.5502 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5503 = private unnamed_addr constant [9 x i8] c"sub i32 \00"
@.str.5504 = private unnamed_addr constant [9 x i8] c"zext i1 \00"
@.str.5505 = private unnamed_addr constant [8 x i8] c" to i32\00"
@.str.5506 = private unnamed_addr constant [3 x i8] c", \00"
@.str.5507 = private unnamed_addr constant [9 x i8] c"zext i1 \00"
@.str.5508 = private unnamed_addr constant [8 x i8] c" to i32\00"
@.str.5509 = private unnamed_addr constant [9 x i8] c"ret i32 \00"
@.str.5510 = private unnamed_addr constant [21 x i8] c"define internal i32 \00"
@.str.5511 = private unnamed_addr constant [17 x i8] c"(ptr %x, ptr %y)\00"
@.str.5512 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5513 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00"
@.str.5514 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5515 = private unnamed_addr constant [4 x i8] c"sub\00"
@.str.5516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5517 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.5518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5519 = private unnamed_addr constant [10 x i8] c"the start\00"
@.str.5520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5521 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.5522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5523 = private unnamed_addr constant [8 x i8] c"the end\00"
@.str.5524 = private unnamed_addr constant [30 x i8] c"call void @finch_str_sub(ptr \00"
@.str.5525 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5526 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5527 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5528 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5529 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5530 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5531 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.5532 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.5533 = private unnamed_addr constant [5 x i8] c"find\00"
@.str.5534 = private unnamed_addr constant [9 x i8] c"contains\00"
@.str.5535 = private unnamed_addr constant [12 x i8] c"starts_with\00"
@.str.5536 = private unnamed_addr constant [10 x i8] c"ends_with\00"
@.str.5537 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5538 = private unnamed_addr constant [21 x i8] c"the text to look for\00"
@.str.5539 = private unnamed_addr constant [5 x i8] c"find\00"
@.str.5540 = private unnamed_addr constant [30 x i8] c"call i64 @finch_str_find(ptr \00"
@.str.5541 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5542 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5543 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.5544 = private unnamed_addr constant [9 x i8] c"contains\00"
@.str.5545 = private unnamed_addr constant [30 x i8] c"call i64 @finch_str_find(ptr \00"
@.str.5546 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5547 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5548 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00"
@.str.5549 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.5550 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.5551 = private unnamed_addr constant [18 x i8] c"@finch_str_starts\00"
@.str.5552 = private unnamed_addr constant [10 x i8] c"ends_with\00"
@.str.5553 = private unnamed_addr constant [16 x i8] c"@finch_str_ends\00"
@.str.5554 = private unnamed_addr constant [10 x i8] c"call i32 \00"
@.str.5555 = private unnamed_addr constant [6 x i8] c"(ptr \00"
@.str.5556 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5557 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5558 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00"
@.str.5559 = private unnamed_addr constant [4 x i8] c", 0\00"
@.str.5560 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.5561 = private unnamed_addr constant [5 x i8] c"trim\00"
@.str.5562 = private unnamed_addr constant [6 x i8] c"upper\00"
@.str.5563 = private unnamed_addr constant [6 x i8] c"lower\00"
@.str.5564 = private unnamed_addr constant [22 x i8] c"call void @finch_str_\00"
@.str.5565 = private unnamed_addr constant [6 x i8] c"(ptr \00"
@.str.5566 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5567 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5568 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.5569 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.5570 = private unnamed_addr constant [8 x i8] c"replace\00"
@.str.5571 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5572 = private unnamed_addr constant [20 x i8] c"the text to replace\00"
@.str.5573 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5574 = private unnamed_addr constant [13 x i8] c"the new text\00"
@.str.5575 = private unnamed_addr constant [34 x i8] c"call void @finch_str_replace(ptr \00"
@.str.5576 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5577 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5578 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5579 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5580 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.5581 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.5582 = private unnamed_addr constant [6 x i8] c"split\00"
@.str.5583 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5584 = private unnamed_addr constant [14 x i8] c"the separator\00"
@.str.5585 = private unnamed_addr constant [32 x i8] c"call void @finch_str_split(ptr \00"
@.str.5586 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5587 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5588 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5589 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.5590 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.5591 = private unnamed_addr constant [7 x i8] c"repeat\00"
@.str.5592 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5593 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.5594 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5595 = private unnamed_addr constant [10 x i8] c"the count\00"
@.str.5596 = private unnamed_addr constant [33 x i8] c"call void @finch_str_repeat(ptr \00"
@.str.5597 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5598 = private unnamed_addr constant [7 x i8] c", i64 \00"
@.str.5599 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5600 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.5601 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.5602 = private unnamed_addr constant [6 x i8] c"bytes\00"
@.str.5603 = private unnamed_addr constant [37 x i8] c"call void @finch_bytes_from_str(ptr \00"
@.str.5604 = private unnamed_addr constant [7 x i8] c", ptr \00"
@.str.5605 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5606 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00"
@.str.5607 = private unnamed_addr constant [3 x i8] c"u8\00"
@.str.5608 = private unnamed_addr constant [22 x i8] c"a str has no method '\00"
@.str.5609 = 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.5610 = private unnamed_addr constant [55 x i8] c"declare void @finch_panic(ptr, i64, ptr) noreturn cold\00"
@.str.5611 = private unnamed_addr constant [66 x i8] c"declare void @finch_panic_index(ptr, i64, i64, i64) noreturn cold\00"
@.str.5612 = private unnamed_addr constant [30 x i8] c"declare ptr @finch_alloc(i64)\00"
@.str.5613 = private unnamed_addr constant [39 x i8] c"declare void @finch_str_copy(ptr, ptr)\00"
@.str.5614 = private unnamed_addr constant [33 x i8] c"declare void @finch_str_own(ptr)\00"
@.str.5615 = private unnamed_addr constant [46 x i8] c"declare void @finch_str_concat(ptr, ptr, ptr)\00"
@.str.5616 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_str_eq(ptr, ptr)\00"
@.str.5617 = private unnamed_addr constant [37 x i8] c"declare i64 @finch_str_cmp(ptr, ptr)\00"
@.str.5618 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_add(ptr, ptr, i64)\00"
@.str.5619 = private unnamed_addr constant [38 x i8] c"declare void @finch_buf_int(ptr, i64)\00"
@.str.5620 = private unnamed_addr constant [39 x i8] c"declare void @finch_buf_uint(ptr, i64)\00"
@.str.5621 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_float(ptr, double)\00"
@.str.5622 = private unnamed_addr constant [39 x i8] c"declare void @finch_buf_bool(ptr, i32)\00"
@.str.5623 = private unnamed_addr constant [38 x i8] c"declare void @finch_buf_ptr(ptr, ptr)\00"
@.str.5624 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_char(ptr, i8, i32)\00"
@.str.5625 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_str(ptr, ptr, i32)\00"
@.str.5626 = private unnamed_addr constant [35 x i8] c"declare void @finch_buf_print(ptr)\00"
@.str.5627 = private unnamed_addr constant [43 x i8] c"declare void @finch_str_from_int(ptr, i64)\00"
@.str.5628 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_from_uint(ptr, i64)\00"
@.str.5629 = private unnamed_addr constant [48 x i8] c"declare void @finch_str_from_float(ptr, double)\00"
@.str.5630 = private unnamed_addr constant [51 x i8] c"declare void @finch_str_from_char(ptr, i8 signext)\00"
@.str.5631 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_from_bool(ptr, i32)\00"
@.str.5632 = private unnamed_addr constant [45 x i8] c"declare i64 @finch_str_to_int(ptr, ptr, i64)\00"
@.str.5633 = private unnamed_addr constant [50 x i8] c"declare double @finch_str_to_float(ptr, ptr, i64)\00"
@.str.5634 = private unnamed_addr constant [58 x i8] c"declare void @finch_str_sub(ptr, ptr, i64, i64, ptr, i64)\00"
@.str.5635 = private unnamed_addr constant [38 x i8] c"declare i64 @finch_str_find(ptr, ptr)\00"
@.str.5636 = private unnamed_addr constant [40 x i8] c"declare i32 @finch_str_starts(ptr, ptr)\00"
@.str.5637 = private unnamed_addr constant [38 x i8] c"declare i32 @finch_str_ends(ptr, ptr)\00"
@.str.5638 = private unnamed_addr constant [39 x i8] c"declare void @finch_str_trim(ptr, ptr)\00"
@.str.5639 = private unnamed_addr constant [40 x i8] c"declare void @finch_str_upper(ptr, ptr)\00"
@.str.5640 = private unnamed_addr constant [40 x i8] c"declare void @finch_str_lower(ptr, ptr)\00"
@.str.5641 = private unnamed_addr constant [52 x i8] c"declare void @finch_str_replace(ptr, ptr, ptr, ptr)\00"
@.str.5642 = private unnamed_addr constant [45 x i8] c"declare void @finch_str_split(ptr, ptr, ptr)\00"
@.str.5643 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_join(ptr, ptr, ptr)\00"
@.str.5644 = private unnamed_addr constant [46 x i8] c"declare void @finch_str_repeat(ptr, ptr, i64)\00"
@.str.5645 = private unnamed_addr constant [45 x i8] c"declare void @finch_bytes_from_str(ptr, ptr)\00"
@.str.5646 = private unnamed_addr constant [53 x i8] c"declare i64 @finch_map_find(ptr, ptr, i64, i64, i32)\00"
@.str.5647 = private unnamed_addr constant [58 x i8] c"declare i64 @finch_map_slot(ptr, ptr, i64, i64, i32, ptr)\00"
@.str.5648 = private unnamed_addr constant [49 x i8] c"declare void @finch_map_remove_at(ptr, i64, i64)\00"
@.str.5649 = private unnamed_addr constant [35 x i8] c"declare void @finch_map_clear(ptr)\00"
@.str.5650 = private unnamed_addr constant [49 x i8] c"declare void @finch_map_clone_raw(ptr, ptr, i64)\00"
@.str.5651 = private unnamed_addr constant [61 x i8] c"declare void @finch_map_missing(ptr, i64, ptr) noreturn cold\00"
@.str.5652 = private unnamed_addr constant [56 x i8] c"declare void @finch_map_changed(ptr, i64) noreturn cold\00"
@.str.5653 = private unnamed_addr constant [47 x i8] c"declare void @finch_arr_reserve(ptr, i64, i64)\00"
@.str.5654 = private unnamed_addr constant [49 x i8] c"declare void @finch_arr_clone_raw(ptr, ptr, i64)\00"
@.str.5655 = private unnamed_addr constant [44 x i8] c"declare void @finch_arr_make(ptr, i64, i64)\00"
@.str.5656 = private unnamed_addr constant [46 x i8] c"declare void @finch_arr_resize(ptr, i64, i64)\00"
@.str.5657 = private unnamed_addr constant [60 x i8] c"declare void @finch_arr_insert_gap(ptr, i64, i64, ptr, i64)\00"
@.str.5658 = private unnamed_addr constant [50 x i8] c"declare void @finch_arr_remove_gap(ptr, i64, i64)\00"
@.str.5659 = private unnamed_addr constant [40 x i8] c"declare void @qsort(ptr, i64, i64, ptr)\00"
@.str.5660 = private unnamed_addr constant [40 x i8] c"declare void @finch_args(ptr, i32, ptr)\00"
@.str.5661 = private unnamed_addr constant [36 x i8] c"declare void @finch_input(ptr, ptr)\00"
@.str.5662 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_file_exists(ptr)\00"
@.str.5663 = private unnamed_addr constant [46 x i8] c"declare i32 @finch_str_try_int(ptr, ptr, ptr)\00"
@.str.5664 = private unnamed_addr constant [48 x i8] c"declare i32 @finch_str_try_float(ptr, ptr, ptr)\00"
@.str.5665 = private unnamed_addr constant [48 x i8] c"declare i32 @finch_try_read_file(ptr, ptr, ptr)\00"
@.str.5666 = private unnamed_addr constant [49 x i8] c"declare i32 @finch_try_write_file(ptr, ptr, ptr)\00"
@.str.5667 = private unnamed_addr constant [45 x i8] c"declare i32 @finch_try_delete_file(ptr, ptr)\00"
@.str.5668 = private unnamed_addr constant [38 x i8] c"declare void @finch_report_error(ptr)\00"
@.str.5669 = private unnamed_addr constant [50 x i8] c"declare void @finch_read_file(ptr, ptr, ptr, i64)\00"
@.str.5670 = private unnamed_addr constant [40 x i8] c"declare i32 @finch_write_file(ptr, ptr)\00"
@.str.5671 = private unnamed_addr constant [30 x i8] c"declare i64 @finch_shell(ptr)\00"
@.str.5672 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_delete_file(ptr)\00"
@.str.5673 = private unnamed_addr constant [30 x i8] c"declare i32 @printf(ptr, ...)\00"
@.str.5674 = private unnamed_addr constant [25 x i8] c"declare i32 @fflush(ptr)\00"
@.str.5675 = private unnamed_addr constant [41 x i8] c"declare void @finch_str_from_c(ptr, ptr)\00"
@.str.5676 = private unnamed_addr constant [34 x i8] c"declare void @finch_on_fatal(ptr)\00"
@.str.5677 = private unnamed_addr constant [35 x i8] c"declare ptr @finch_std_stream(i32)\00"
@.str.5678 = private unnamed_addr constant [45 x i8] c"declare void @finch_str_from_bytes(ptr, ptr)\00"
@.str.5679 = private unnamed_addr constant [33 x i8] c"declare void @exit(i32) noreturn\00"
@.str.5680 = private unnamed_addr constant [24 x i8] c"declare void @free(ptr)\00"
@.str.5681 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.5682 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.5683 = private unnamed_addr constant [53 x i8] c"; generated by the Finch compiler written in Finch\0A\0A\00"
@.str.5684 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5685 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00"
@.str.5686 = private unnamed_addr constant [18 x i8] c"target triple = \22\00"
@.str.5687 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5688 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00"
@.str.5689 = private unnamed_addr constant [4 x i8] c"\22\0A\0A\00"
@.str.5690 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5691 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00"
@.str.5692 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.5693 = private unnamed_addr constant [3 x i8] c"\0A\0A\00"
@.str.5694 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.5695 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5696 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00"
@.str.5697 = private unnamed_addr constant [63 x i8] c"declare void @llvm.dbg.declare(metadata, metadata, metadata)\0A\0A\00"
@.str.5698 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5699 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.5700 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.5701 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5702 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00"
@.str.5703 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.5704 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5705 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00"
@.str.5706 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5707 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00"
@.str.5708 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5709 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5710 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00"
@.str.5711 = private unnamed_addr constant [34 x i8] c"!{i32 7, !\22Dwarf Version\22, i32 4}\00"
@.str.5712 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5713 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00"
@.str.5714 = private unnamed_addr constant [39 x i8] c"!{i32 2, !\22Debug Info Version\22, i32 3}\00"
@.str.5715 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5716 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00"
@.str.5717 = private unnamed_addr constant [20 x i8] c"!DIFile(filename: \22\00"
@.str.5718 = private unnamed_addr constant [16 x i8] c"\22, directory: \22\00"
@.str.5719 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5720 = private unnamed_addr constant [28 x i8] c"used .cwd on a null pointer\00"
@.str.5721 = private unnamed_addr constant [3 x i8] c"\22)\00"
@.str.5722 = private unnamed_addr constant [53 x i8] c"distinct !DICompileUnit(language: DW_LANG_C, file: !\00"
@.str.5723 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5724 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00"
@.str.5725 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5726 = private unnamed_addr constant [85 x i8] c", producer: \22finch\22, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)\00"
@.str.5727 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5728 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00"
@.str.5729 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5730 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5731 = private unnamed_addr constant [5 x i8] c"main\00"
@.str.5732 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5733 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.5734 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5735 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.5736 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5737 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5738 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5739 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.5740 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5741 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5742 = 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.5743 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5744 = private unnamed_addr constant [65 x i8] c":1:1: error: there is no main function (add 'fn main() { ... }')\00"
@.str.5745 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5746 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.5747 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.5748 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5749 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.5750 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5751 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00"
@.str.5752 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5753 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00"
@.str.5754 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5755 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5756 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00"
@.str.5757 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.5758 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5759 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.5760 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5761 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5762 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00"
@.str.5763 = private unnamed_addr constant [11 x i8] c" dllexport\00"
@.str.5764 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5765 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.5766 = private unnamed_addr constant [7 x i8] c"define\00"
@.str.5767 = 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.5768 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5769 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00"
@.str.5770 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5771 = private unnamed_addr constant [6 x i8] c"call \00"
@.str.5772 = private unnamed_addr constant [2 x i8] c" \00"
@.str.5773 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.5774 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5775 = 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.5776 = private unnamed_addr constant [21 x i8] c"{ ptr, i64, i64 } %a\00"
@.str.5777 = private unnamed_addr constant [2 x i8] c")\00"
@.str.5778 = private unnamed_addr constant [13 x i8] c" ret i32 0\0A\00"
@.str.5779 = private unnamed_addr constant [6 x i8] c"%r = \00"
@.str.5780 = private unnamed_addr constant [3 x i8] c" \00"
@.str.5781 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.5782 = private unnamed_addr constant [1 x i8] c"\00"
@.str.5783 = private unnamed_addr constant [22 x i8] c" %ok = extractvalue \00"
@.str.5784 = 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.5785 = private unnamed_addr constant [21 x i8] c" %m = extractvalue \00"
@.str.5786 = 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.5787 = private unnamed_addr constant [63 x i8] c" call void @finch_report_error(ptr %mp)\0A ret i32 1\0Amain.ok:\0A\00"
@.str.5788 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.5789 = private unnamed_addr constant [21 x i8] c" %v = extractvalue \00"
@.str.5790 = private unnamed_addr constant [54 x i8] c" %r, 1\0A %code = trunc i64 %v to i32\0A ret i32 %code\0A\00"
@.str.5791 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.5792 = private unnamed_addr constant [6 x i8] c"%r = \00"
@.str.5793 = private unnamed_addr constant [47 x i8] c" %code = trunc i64 %r to i32\0A ret i32 %code\0A\00"
@.str.5794 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00"
@.str.5795 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.5796 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00"
@.str.5797 = private unnamed_addr constant [3 x i8] c" \00"
@.str.5798 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.5799 = private unnamed_addr constant [3 x i8] c"}\0A\00"
@.str.5800 = private unnamed_addr constant [6 x i8] c"print\00"
@.str.5801 = private unnamed_addr constant [17 x i8] c"print(a, b, ...)\00"
@.str.5802 = private unnamed_addr constant [79 x i8] c"Prints the values separated by spaces, then a new line. Works with every type.\00"
@.str.5803 = private unnamed_addr constant [6 x i8] c"input\00"
@.str.5804 = private unnamed_addr constant [32 x i8] c"input(str question = \22\22) -> str\00"
@.str.5805 = private unnamed_addr constant [78 x i8] c"Shows the question and reads one line typed by the user, without the newline.\00"
@.str.5806 = private unnamed_addr constant [10 x i8] c"read_file\00"
@.str.5807 = private unnamed_addr constant [27 x i8] c"read_file(str path) -> str\00"
@.str.5808 = 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.5809 = private unnamed_addr constant [11 x i8] c"write_file\00"
@.str.5810 = private unnamed_addr constant [39 x i8] c"write_file(str path, str text) -> bool\00"
@.str.5811 = 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.5812 = private unnamed_addr constant [12 x i8] c"file_exists\00"
@.str.5813 = private unnamed_addr constant [30 x i8] c"file_exists(str path) -> bool\00"
@.str.5814 = private unnamed_addr constant [30 x i8] c"Is there a file at this path?\00"
@.str.5815 = private unnamed_addr constant [12 x i8] c"delete_file\00"
@.str.5816 = private unnamed_addr constant [30 x i8] c"delete_file(str path) -> bool\00"
@.str.5817 = 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.5818 = private unnamed_addr constant [6 x i8] c"error\00"
@.str.5819 = private unnamed_addr constant [19 x i8] c"error(str message)\00"
@.str.5820 = 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.5821 = private unnamed_addr constant [6 x i8] c"shell\00"
@.str.5822 = private unnamed_addr constant [26 x i8] c"shell(str command) -> int\00"
@.str.5823 = private unnamed_addr constant [67 x i8] c"Runs a command in the system's shell and gives back its exit code.\00"
@.str.5824 = private unnamed_addr constant [5 x i8] c"exit\00"
@.str.5825 = private unnamed_addr constant [15 x i8] c"exit(int code)\00"
@.str.5826 = private unnamed_addr constant [49 x i8] c"Ends the program right away with this exit code.\00"
@.str.5827 = private unnamed_addr constant [5 x i8] c"addr\00"
@.str.5828 = private unnamed_addr constant [18 x i8] c"addr(x) -> ptr[T]\00"
@.str.5829 = private unnamed_addr constant [78 x i8] c"A pointer to a variable, field or element. addr(function) gives C a callback.\00"
@.str.5830 = private unnamed_addr constant [4 x i8] c"new\00"
@.str.5831 = private unnamed_addr constant [21 x i8] c"new(value) -> ptr[T]\00"
@.str.5832 = private unnamed_addr constant [67 x i8] c"Puts a copy of the value on the heap. Give it back with free(...).\00"
@.str.5833 = private unnamed_addr constant [5 x i8] c"free\00"
@.str.5834 = private unnamed_addr constant [12 x i8] c"free(ptr p)\00"
@.str.5835 = private unnamed_addr constant [74 x i8] c"Gives back memory from new(...) (or from C), freeing what the value owns.\00"
@.str.5836 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.5837 = private unnamed_addr constant [14 x i8] c"str(x) -> str\00"
@.str.5838 = private unnamed_addr constant [62 x i8] c"Turns a number, bool, char, []u8 or C char pointer into text.\00"
@.str.5839 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.5840 = private unnamed_addr constant [14 x i8] c"int(x) -> int\00"
@.str.5841 = 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.5842 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.5843 = private unnamed_addr constant [18 x i8] c"float(x) -> float\00"
@.str.5844 = 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.5845 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.5846 = private unnamed_addr constant [20 x i8] c"char(int n) -> char\00"
@.str.5847 = private unnamed_addr constant [30 x i8] c"The character with this code.\00"
@.str.5848 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.5849 = private unnamed_addr constant [20 x i8] c"bool(int n) -> bool\00"
@.str.5850 = private unnamed_addr constant [27 x i8] c"true for any number but 0.\00"
@.str.5851 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.5852 = private unnamed_addr constant [14 x i8] c"ptr(x) -> ptr\00"
@.str.5853 = 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.5854 = private unnamed_addr constant [4 x i8] c"len\00"
@.str.5855 = private unnamed_addr constant [12 x i8] c".len -> int\00"
@.str.5856 = private unnamed_addr constant [24 x i8] c"The number of elements.\00"
@.str.5857 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.5858 = private unnamed_addr constant [15 x i8] c".ptr -> ptr[T]\00"
@.str.5859 = private unnamed_addr constant [41 x i8] c"The address of the first element, for C.\00"
@.str.5860 = private unnamed_addr constant [5 x i8] c"push\00"
@.str.5861 = private unnamed_addr constant [10 x i8] c"push(T x)\00"
@.str.5862 = private unnamed_addr constant [19 x i8] c"Adds x at the end.\00"
@.str.5863 = private unnamed_addr constant [4 x i8] c"pop\00"
@.str.5864 = private unnamed_addr constant [11 x i8] c"pop() -> T\00"
@.str.5865 = private unnamed_addr constant [44 x i8] c"Removes the last element and gives it back.\00"
@.str.5866 = private unnamed_addr constant [7 x i8] c"insert\00"
@.str.5867 = private unnamed_addr constant [19 x i8] c"insert(int i, T x)\00"
@.str.5868 = private unnamed_addr constant [39 x i8] c"Puts x at position i, moving the rest.\00"
@.str.5869 = private unnamed_addr constant [7 x i8] c"remove\00"
@.str.5870 = private unnamed_addr constant [19 x i8] c"remove(int i) -> T\00"
@.str.5871 = private unnamed_addr constant [38 x i8] c"Removes position i and gives it back.\00"
@.str.5872 = private unnamed_addr constant [6 x i8] c"clear\00"
@.str.5873 = private unnamed_addr constant [8 x i8] c"clear()\00"
@.str.5874 = private unnamed_addr constant [20 x i8] c"Removes everything.\00"
@.str.5875 = private unnamed_addr constant [7 x i8] c"resize\00"
@.str.5876 = private unnamed_addr constant [14 x i8] c"resize(int n)\00"
@.str.5877 = private unnamed_addr constant [47 x i8] c"Makes the array n long; new elements are zero.\00"
@.str.5878 = private unnamed_addr constant [5 x i8] c"find\00"
@.str.5879 = private unnamed_addr constant [17 x i8] c"find(T x) -> int\00"
@.str.5880 = private unnamed_addr constant [23 x i8] c"The index of x, or -1.\00"
@.str.5881 = private unnamed_addr constant [9 x i8] c"contains\00"
@.str.5882 = private unnamed_addr constant [22 x i8] c"contains(T x) -> bool\00"
@.str.5883 = private unnamed_addr constant [19 x i8] c"Is x in the array?\00"
@.str.5884 = private unnamed_addr constant [5 x i8] c"sort\00"
@.str.5885 = private unnamed_addr constant [7 x i8] c"sort()\00"
@.str.5886 = private unnamed_addr constant [38 x i8] c"Sorts in place (numbers, chars, str).\00"
@.str.5887 = private unnamed_addr constant [8 x i8] c"reverse\00"
@.str.5888 = private unnamed_addr constant [10 x i8] c"reverse()\00"
@.str.5889 = private unnamed_addr constant [19 x i8] c"Reverses in place.\00"
@.str.5890 = private unnamed_addr constant [6 x i8] c"slice\00"
@.str.5891 = private unnamed_addr constant [33 x i8] c"slice(int start, int end) -> []T\00"
@.str.5892 = private unnamed_addr constant [46 x i8] c"A new array with the elements start to end-1.\00"
@.str.5893 = private unnamed_addr constant [5 x i8] c"join\00"
@.str.5894 = private unnamed_addr constant [21 x i8] c"join(str sep) -> str\00"
@.str.5895 = private unnamed_addr constant [48 x i8] c"For []str: one text with sep between the parts.\00"
@.str.5896 = private unnamed_addr constant [4 x i8] c"len\00"
@.str.5897 = private unnamed_addr constant [12 x i8] c".len -> int\00"
@.str.5898 = private unnamed_addr constant [21 x i8] c"The number of bytes.\00"
@.str.5899 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.5900 = private unnamed_addr constant [18 x i8] c".ptr -> ptr[char]\00"
@.str.5901 = private unnamed_addr constant [60 x i8] c"The address of the text, for C (valid while the str lives).\00"
@.str.5902 = private unnamed_addr constant [4 x i8] c"sub\00"
@.str.5903 = private unnamed_addr constant [31 x i8] c"sub(int start, int end) -> str\00"
@.str.5904 = private unnamed_addr constant [30 x i8] c"The part from start to end-1.\00"
@.str.5905 = private unnamed_addr constant [5 x i8] c"find\00"
@.str.5906 = private unnamed_addr constant [19 x i8] c"find(str t) -> int\00"
@.str.5907 = private unnamed_addr constant [23 x i8] c"Where t starts, or -1.\00"
@.str.5908 = private unnamed_addr constant [9 x i8] c"contains\00"
@.str.5909 = private unnamed_addr constant [24 x i8] c"contains(str t) -> bool\00"
@.str.5910 = private unnamed_addr constant [25 x i8] c"Does the text contain t?\00"
@.str.5911 = private unnamed_addr constant [12 x i8] c"starts_with\00"
@.str.5912 = private unnamed_addr constant [27 x i8] c"starts_with(str t) -> bool\00"
@.str.5913 = private unnamed_addr constant [28 x i8] c"Does the text start with t?\00"
@.str.5914 = private unnamed_addr constant [10 x i8] c"ends_with\00"
@.str.5915 = private unnamed_addr constant [25 x i8] c"ends_with(str t) -> bool\00"
@.str.5916 = private unnamed_addr constant [26 x i8] c"Does the text end with t?\00"
@.str.5917 = private unnamed_addr constant [6 x i8] c"split\00"
@.str.5918 = private unnamed_addr constant [24 x i8] c"split(str sep) -> []str\00"
@.str.5919 = private unnamed_addr constant [63 x i8] c"The parts between each sep; split(\22\22) gives single characters.\00"
@.str.5920 = private unnamed_addr constant [5 x i8] c"trim\00"
@.str.5921 = private unnamed_addr constant [14 x i8] c"trim() -> str\00"
@.str.5922 = private unnamed_addr constant [42 x i8] c"Without spaces and newlines at both ends.\00"
@.str.5923 = private unnamed_addr constant [6 x i8] c"upper\00"
@.str.5924 = private unnamed_addr constant [15 x i8] c"upper() -> str\00"
@.str.5925 = private unnamed_addr constant [25 x i8] c"With a-z changed to A-Z.\00"
@.str.5926 = private unnamed_addr constant [6 x i8] c"lower\00"
@.str.5927 = private unnamed_addr constant [15 x i8] c"lower() -> str\00"
@.str.5928 = private unnamed_addr constant [25 x i8] c"With A-Z changed to a-z.\00"
@.str.5929 = private unnamed_addr constant [8 x i8] c"replace\00"
@.str.5930 = private unnamed_addr constant [33 x i8] c"replace(str from, str to) -> str\00"
@.str.5931 = private unnamed_addr constant [27 x i8] c"Every from replaced by to.\00"
@.str.5932 = private unnamed_addr constant [7 x i8] c"repeat\00"
@.str.5933 = private unnamed_addr constant [21 x i8] c"repeat(int n) -> str\00"
@.str.5934 = private unnamed_addr constant [18 x i8] c"The text n times.\00"
@.str.5935 = private unnamed_addr constant [6 x i8] c"bytes\00"
@.str.5936 = private unnamed_addr constant [16 x i8] c"bytes() -> []u8\00"
@.str.5937 = private unnamed_addr constant [23 x i8] c"The bytes of the text.\00"
@.str.5938 = private unnamed_addr constant [4 x i8] c"len\00"
@.str.5939 = private unnamed_addr constant [12 x i8] c".len -> int\00"
@.str.5940 = private unnamed_addr constant [20 x i8] c"The number of keys.\00"
@.str.5941 = private unnamed_addr constant [4 x i8] c"has\00"
@.str.5942 = private unnamed_addr constant [19 x i8] c"has(K key) -> bool\00"
@.str.5943 = private unnamed_addr constant [23 x i8] c"Is the key in the map?\00"
@.str.5944 = private unnamed_addr constant [4 x i8] c"get\00"
@.str.5945 = private unnamed_addr constant [27 x i8] c"get(K key, V default) -> V\00"
@.str.5946 = private unnamed_addr constant [54 x i8] c"The value for key, or default if the key isn't there.\00"
@.str.5947 = private unnamed_addr constant [7 x i8] c"remove\00"
@.str.5948 = private unnamed_addr constant [22 x i8] c"remove(K key) -> bool\00"
@.str.5949 = private unnamed_addr constant [53 x i8] c"Removes the key and its value; true if it was there.\00"
@.str.5950 = private unnamed_addr constant [6 x i8] c"clear\00"
@.str.5951 = private unnamed_addr constant [8 x i8] c"clear()\00"
@.str.5952 = private unnamed_addr constant [20 x i8] c"Removes everything.\00"
@.str.5953 = private unnamed_addr constant [5 x i8] c"keys\00"
@.str.5954 = private unnamed_addr constant [14 x i8] c"keys() -> []K\00"
@.str.5955 = private unnamed_addr constant [40 x i8] c"The keys, in the order they were added.\00"
@.str.5956 = private unnamed_addr constant [7 x i8] c"values\00"
@.str.5957 = private unnamed_addr constant [16 x i8] c"values() -> []V\00"
@.str.5958 = private unnamed_addr constant [48 x i8] c"The values, in the order their keys were added.\00"
@.str.5959 = private unnamed_addr constant [3 x i8] c"fn\00"
@.str.5960 = private unnamed_addr constant [7 x i8] c"return\00"
@.str.5961 = private unnamed_addr constant [3 x i8] c"if\00"
@.str.5962 = private unnamed_addr constant [5 x i8] c"else\00"
@.str.5963 = private unnamed_addr constant [6 x i8] c"while\00"
@.str.5964 = private unnamed_addr constant [4 x i8] c"for\00"
@.str.5965 = private unnamed_addr constant [3 x i8] c"in\00"
@.str.5966 = private unnamed_addr constant [6 x i8] c"break\00"
@.str.5967 = private unnamed_addr constant [9 x i8] c"continue\00"
@.str.5968 = private unnamed_addr constant [5 x i8] c"true\00"
@.str.5969 = private unnamed_addr constant [6 x i8] c"false\00"
@.str.5970 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.5971 = private unnamed_addr constant [7 x i8] c"import\00"
@.str.5972 = private unnamed_addr constant [5 x i8] c"link\00"
@.str.5973 = private unnamed_addr constant [7 x i8] c"struct\00"
@.str.5974 = private unnamed_addr constant [5 x i8] c"enum\00"
@.str.5975 = private unnamed_addr constant [6 x i8] c"match\00"
@.str.5976 = private unnamed_addr constant [7 x i8] c"export\00"
@.str.5977 = private unnamed_addr constant [6 x i8] c"defer\00"
@.str.5978 = private unnamed_addr constant [3 x i8] c"or\00"
@.str.5979 = private unnamed_addr constant [4 x i8] c"try\00"
@.str.5980 = private unnamed_addr constant [5 x i8] c"self\00"
@.str.5981 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.5982 = private unnamed_addr constant [6 x i8] c"float\00"
@.str.5983 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.5984 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.5985 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.5986 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.5987 = private unnamed_addr constant [4 x i8] c"map\00"
@.str.5988 = private unnamed_addr constant [3 x i8] c"i8\00"
@.str.5989 = private unnamed_addr constant [4 x i8] c"i16\00"
@.str.5990 = private unnamed_addr constant [4 x i8] c"i32\00"
@.str.5991 = private unnamed_addr constant [4 x i8] c"i64\00"
@.str.5992 = private unnamed_addr constant [3 x i8] c"u8\00"
@.str.5993 = private unnamed_addr constant [4 x i8] c"u16\00"
@.str.5994 = private unnamed_addr constant [4 x i8] c"u32\00"
@.str.5995 = private unnamed_addr constant [4 x i8] c"u64\00"
@.str.5996 = private unnamed_addr constant [4 x i8] c"f32\00"
@.str.5997 = private unnamed_addr constant [4 x i8] c"f64\00"
@.str.5998 = private unnamed_addr constant [10 x i8] c"```finch\0A\00"
@.str.5999 = private unnamed_addr constant [6 x i8] c"\0A```\0A\00"
declare ptr @clang_getCString(i64, i64)
declare void @clang_disposeString(i64, i64)
@.str.6000 = private unnamed_addr constant [6 x i8] c"fixed\00"
@.str.6001 = private unnamed_addr constant [23 x i8] c"/tmp/finch_cc_dirs.txt\00"
@.str.6002 = private unnamed_addr constant [27 x i8] c" -E -v -x c /dev/null 2> '\00"
@.str.6003 = private unnamed_addr constant [14 x i8] c"' > /dev/null\00"
@.str.6004 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6005 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6006 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6007 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6008 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6009 = private unnamed_addr constant [35 x i8] c"#include <...> search starts here:\00"
@.str.6010 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6011 = private unnamed_addr constant [20 x i8] c"End of search list.\00"
@.str.6012 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6013 = private unnamed_addr constant [23 x i8] c" (framework directory)\00"
@.str.6014 = private unnamed_addr constant [12 x i8] c"-iframework\00"
@.str.6015 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6016 = private unnamed_addr constant [9 x i8] c"-isystem\00"
@.str.6017 = private unnamed_addr constant [8 x i8] c"rm -f '\00"
@.str.6018 = private unnamed_addr constant [2 x i8] c"'\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.6019 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6020 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00"
@.str.6021 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6022 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00"
@.str.6023 = 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.6024 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6025 = private unnamed_addr constant [2 x i8] c" \00"
@.str.6026 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6027 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00"
@.str.6028 = private unnamed_addr constant [13 x i8] c"anon_struct_\00"
@.str.6029 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6030 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00"
@.str.6031 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6032 = 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.6033 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6034 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6035 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6036 = 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.6037 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6038 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6039 = 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.6040 = 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.6041 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6042 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00"
@.str.6043 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6044 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6045 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6046 = 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.6047 = private unnamed_addr constant [15 x i8] c"has bit fields\00"
@.str.6048 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6049 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00"
@.str.6050 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6051 = private unnamed_addr constant [36 x i8] c"used .unsupported on a null pointer\00"
@.str.6052 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6053 = private unnamed_addr constant [28 x i8] c"used .imp on a null pointer\00"
@.str.6054 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6055 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00"
@.str.6056 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6057 = private unnamed_addr constant [34 x i8] c"used .hasHidden on a null pointer\00"
@.str.6058 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6059 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00"
@.str.6060 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6061 = private unnamed_addr constant [31 x i8] c"used .fields on a null pointer\00"
@.str.6062 = private unnamed_addr constant [3 x i8] c"i8\00"
@.str.6063 = private unnamed_addr constant [3 x i8] c"u8\00"
@.str.6064 = private unnamed_addr constant [4 x i8] c"i16\00"
@.str.6065 = private unnamed_addr constant [4 x i8] c"u16\00"
@.str.6066 = private unnamed_addr constant [4 x i8] c"i32\00"
@.str.6067 = private unnamed_addr constant [4 x i8] c"u32\00"
@.str.6068 = private unnamed_addr constant [4 x i8] c"int\00"
@.str.6069 = private unnamed_addr constant [4 x i8] c"u64\00"
@.str.6070 = private unnamed_addr constant [8 x i8] c"uses a \00"
@.str.6071 = private unnamed_addr constant [12 x i8] c"-bit number\00"
@.str.6072 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.6073 = private unnamed_addr constant [5 x i8] c"bool\00"
@.str.6074 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.6075 = private unnamed_addr constant [4 x i8] c"f32\00"
@.str.6076 = 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.6077 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.6078 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.6079 = private unnamed_addr constant [5 x i8] c"void\00"
@.str.6080 = private unnamed_addr constant [6 x i8] c"fixed\00"
@.str.6081 = private unnamed_addr constant [4 x i8] c"ptr\00"
@.str.6082 = private unnamed_addr constant [24 x i8] c"uses a C union by value\00"
@.str.6083 = private unnamed_addr constant [37 x i8] c"uses an incomplete C struct by value\00"
@.str.6084 = private unnamed_addr constant [6 x i8] c"named\00"
@.str.6085 = 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.6086 = private unnamed_addr constant [17 x i8] c"uses long double\00"
@.str.6087 = 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.6088 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6089 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6090 = private unnamed_addr constant [3 x i8] c"0x\00"
@.str.6091 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6092 = private unnamed_addr constant [3 x i8] c"0X\00"
@.str.6093 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6094 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6095 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6096 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6097 = private unnamed_addr constant [5 x i8] c"uUlL\00"
@.str.6098 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6099 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6100 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6101 = 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.6102 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6103 = 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.6104 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6105 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00"
declare void @clang_disposeTokens(ptr, ptr, i32)
@.str.6106 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6107 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.6108 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6109 = private unnamed_addr constant [2 x i8] c")\00"
@.str.6110 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6111 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6112 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00"
@.str.6113 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6114 = private unnamed_addr constant [2 x i8] c"-\00"
@.str.6115 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6116 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6117 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6118 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6119 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6120 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6121 = private unnamed_addr constant [2 x i8] c".\00"
@.str.6122 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6123 = private unnamed_addr constant [2 x i8] c"e\00"
@.str.6124 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6125 = private unnamed_addr constant [2 x i8] c"E\00"
@.str.6126 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6127 = private unnamed_addr constant [3 x i8] c"0x\00"
@.str.6128 = private unnamed_addr constant [5 x i8] c"fFlL\00"
@.str.6129 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6130 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6131 = 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.6132 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6133 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00"
@.str.6134 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6135 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6136 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6137 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00"
@.str.6138 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6139 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6140 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6141 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6142 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00"
@.str.6143 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6144 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6145 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6146 = 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.6147 = private unnamed_addr constant [63 x i8] c"is a static inline C function (it has no code to link against)\00"
@.str.6148 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6149 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6150 = private unnamed_addr constant [43 x i8] c"has no parameter list in its C declaration\00"
@.str.6151 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6152 = 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.6153 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6154 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6155 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6156 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6157 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6158 = 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.6159 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6160 = private unnamed_addr constant [2 x i8] c" \00"
@.str.6161 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6162 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00"
@.str.6163 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6164 = 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.6165 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6166 = 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.6167 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6168 = 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.6169 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6170 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6171 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6172 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6173 = private unnamed_addr constant [3 x i8] c"-x\00"
@.str.6174 = private unnamed_addr constant [2 x i8] c"c\00"
@.str.6175 = private unnamed_addr constant [11 x i8] c"-std=gnu11\00"
@.str.6176 = private unnamed_addr constant [10 x i8] c"--target=\00"
@.str.6177 = private unnamed_addr constant [20 x i8] c"-D_USE_MATH_DEFINES\00"
@.str.6178 = private unnamed_addr constant [3 x i8] c"-I\00"
@.str.6179 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6180 = private unnamed_addr constant [1 x i8] c"\00"
declare ptr @clang_createIndex(i32, i32)
@.str.6181 = private unnamed_addr constant [11 x i8] c"#include \22\00"
@.str.6182 = private unnamed_addr constant [3 x i8] c"\22\0A\00"
@.str.6183 = private unnamed_addr constant [15 x i8] c"finch_import.c\00"
@.str.6184 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6185 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6186 = private unnamed_addr constant [15 x i8] c"finch_import.c\00"
@.str.6187 = private unnamed_addr constant [1 x i8] c"\00"
declare i32 @clang_parseTranslationUnit2(ptr, ptr, ptr, i32, ptr, i32, i32, ptr)
@.str.6188 = private unnamed_addr constant [34 x i8] c": error: couldn't read C header '\00"
@.str.6189 = 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.6190 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6191 = private unnamed_addr constant [15 x i8] c"file not found\00"
@.str.6192 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6193 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6194 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00"
@.str.6195 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6196 = private unnamed_addr constant [35 x i8] c": error: can't find the C header '\00"
@.str.6197 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6198 = private unnamed_addr constant [35 x i8] c": error: can't find the C header '\00"
@.str.6199 = private unnamed_addr constant [11 x i8] c"', which '\00"
@.str.6200 = private unnamed_addr constant [61 x i8] c"' includes (is its library's development package installed?)\00"
@.str.6201 = private unnamed_addr constant [20 x i8] c": error: C header '\00"
@.str.6202 = 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.6203 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6204 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6205 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6206 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6207 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6208 = private unnamed_addr constant [22 x i8] c"/tmp/finch_triple.txt\00"
@.str.6209 = private unnamed_addr constant [23 x i8] c"clang -dumpmachine > '\00"
@.str.6210 = private unnamed_addr constant [15 x i8] c"' 2> /dev/null\00"
@.str.6211 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6212 = private unnamed_addr constant [8 x i8] c"rm -f '\00"
@.str.6213 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6214 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6215 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00"
@.str.6216 = private unnamed_addr constant [8 x i8] c"windows\00"
@.str.6217 = private unnamed_addr constant [19 x i8] c"x86_64-w64-mingw32\00"
@.str.6218 = private unnamed_addr constant [6 x i8] c"linux\00"
@.str.6219 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00"
@.str.6220 = private unnamed_addr constant [6 x i8] c"arm64\00"
@.str.6221 = private unnamed_addr constant [8 x i8] c"aarch64\00"
@.str.6222 = private unnamed_addr constant [12 x i8] c"linux-arm64\00"
@.str.6223 = private unnamed_addr constant [26 x i8] c"aarch64-unknown-linux-gnu\00"
@.str.6224 = private unnamed_addr constant [6 x i8] c"macos\00"
@.str.6225 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6226 = private unnamed_addr constant [8 x i8] c"aarch64\00"
@.str.6227 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6228 = private unnamed_addr constant [6 x i8] c"arm64\00"
@.str.6229 = private unnamed_addr constant [25 x i8] c"arm64-apple-macosx14.0.0\00"
@.str.6230 = private unnamed_addr constant [26 x i8] c"x86_64-apple-macosx14.0.0\00"
@.str.6231 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6232 = private unnamed_addr constant [8 x i8] c"windows\00"
@.str.6233 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6234 = private unnamed_addr constant [6 x i8] c"mingw\00"
@.str.6235 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6236 = private unnamed_addr constant [5 x i8] c"msvc\00"
@.str.6237 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6238 = private unnamed_addr constant [6 x i8] c"win32\00"
@.str.6239 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6240 = private unnamed_addr constant [5 x i8] c"msvc\00"
@.str.6241 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6242 = private unnamed_addr constant [6 x i8] c"apple\00"
@.str.6243 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6244 = private unnamed_addr constant [7 x i8] c"darwin\00"
@.str.6245 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6246 = private unnamed_addr constant [6 x i8] c"macos\00"
@.str.6247 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6248 = private unnamed_addr constant [8 x i8] c"aarch64\00"
@.str.6249 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6250 = private unnamed_addr constant [6 x i8] c"arm64\00"
@.str.6251 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6252 = private unnamed_addr constant [8 x i8] c"aarch64\00"
@.str.6253 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6254 = private unnamed_addr constant [6 x i8] c"arm64\00"
@.str.6255 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6256 = private unnamed_addr constant [6 x i8] c"apple\00"
@.str.6257 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00"
@.str.6258 = private unnamed_addr constant [7 x i8] c"darwin\00"
@.str.6259 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6260 = private unnamed_addr constant [5 x i8] c".exe\00"
@.str.6261 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00"
@.str.6262 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6263 = private unnamed_addr constant [23 x i8] c"x86_64-w64-mingw32-gcc\00"
@.str.6264 = private unnamed_addr constant [22 x i8] c"aarch64-linux-gnu-gcc\00"
@.str.6265 = private unnamed_addr constant [16 x i8] c"clang --target=\00"
@.str.6266 = private unnamed_addr constant [3 x i8] c"cc\00"
@.str.6267 = private unnamed_addr constant [6 x i8] c"wine \00"
@.str.6268 = private unnamed_addr constant [14 x i8] c"qemu-aarch64 \00"
@.str.6269 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00"
@.str.6270 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6271 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6272 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6273 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6274 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6275 = private unnamed_addr constant [5 x i8] c"'\5C''\00"
@.str.6276 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6277 = private unnamed_addr constant [15 x i8] c"XDG_CACHE_HOME\00"
@.str.6278 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6279 = private unnamed_addr constant [7 x i8] c"/finch\00"
@.str.6280 = private unnamed_addr constant [5 x i8] c"HOME\00"
@.str.6281 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6282 = private unnamed_addr constant [14 x i8] c"/.cache/finch\00"
@.str.6283 = private unnamed_addr constant [17 x i8] c"/tmp/finch-cache\00"
@.str.6284 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6285 = private unnamed_addr constant [11 x i8] c".framework\00"
@.str.6286 = private unnamed_addr constant [12 x i8] c"-framework \00"
@.str.6287 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6288 = private unnamed_addr constant [25 x i8] c"/tmp/finch_pkg_flags.txt\00"
@.str.6289 = private unnamed_addr constant [19 x i8] c"pkg-config --libs \00"
@.str.6290 = private unnamed_addr constant [5 x i8] c" > '\00"
@.str.6291 = private unnamed_addr constant [15 x i8] c"' 2> /dev/null\00"
@.str.6292 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6293 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6294 = private unnamed_addr constant [8 x i8] c"rm -f '\00"
@.str.6295 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6296 = private unnamed_addr constant [3 x i8] c"-l\00"
@.str.6297 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6298 = private unnamed_addr constant [2 x i8] c"/\00"
@.str.6299 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6300 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6301 = private unnamed_addr constant [2 x i8] c"/\00"
@.str.6302 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6303 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6304 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6305 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6306 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6307 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6308 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6309 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6310 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6311 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6312 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6313 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6314 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6315 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6316 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6317 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6318 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00"
@.str.6319 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00"
@.str.6320 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6321 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6322 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00"
@.str.6323 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00"
@.str.6324 = private unnamed_addr constant [3 x i8] c" \0A\00"
@.str.6325 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6326 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00"
@.str.6327 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00"
@.str.6328 = private unnamed_addr constant [4 x i8] c" \0A\0D\00"
@.str.6329 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6330 = private unnamed_addr constant [15 x i8] c"cannot find -l\00"
@.str.6331 = private unnamed_addr constant [15 x i8] c"cannot find -l\00"
@.str.6332 = private unnamed_addr constant [5 x i8] c": \0A\0D\00"
@.str.6333 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6334 = private unnamed_addr constant [25 x i8] c"library not found for -l\00"
@.str.6335 = private unnamed_addr constant [25 x i8] c"library not found for -l\00"
@.str.6336 = private unnamed_addr constant [5 x i8] c": \0A\0D\00"
@.str.6337 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6338 = private unnamed_addr constant [14 x i8] c"ld: library '\00"
@.str.6339 = private unnamed_addr constant [14 x i8] c"ld: library '\00"
@.str.6340 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6341 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6342 = private unnamed_addr constant [12 x i8] c"framework '\00"
@.str.6343 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6344 = private unnamed_addr constant [10 x i8] c"not found\00"
@.str.6345 = private unnamed_addr constant [12 x i8] c"framework '\00"
@.str.6346 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6347 = private unnamed_addr constant [11 x i8] c".framework\00"
@.str.6348 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6349 = private unnamed_addr constant [2 x i8] c"\22\00"
@.str.6350 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6351 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00"
@.str.6352 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6353 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6354 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00"
@.str.6355 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6356 = private unnamed_addr constant [2 x i8] c"_\00"
@.str.6357 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6358 = private unnamed_addr constant [22 x i8] c"error: linking failed\00"
@.str.6359 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6360 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.6361 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6362 = private unnamed_addr constant [21 x i8] c"error: the library '\00"
@.str.6363 = private unnamed_addr constant [63 x i8] c"' wasn't found. Is it installed? (on Nix: add it to shell.nix)\00"
@.str.6364 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6365 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.6366 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6367 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6368 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6369 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6370 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6371 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6372 = private unnamed_addr constant [3 x i8] c", \00"
@.str.6373 = private unnamed_addr constant [6 x i8] c" and \00"
@.str.6374 = private unnamed_addr constant [6 x i8] c" more\00"
@.str.6375 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6376 = private unnamed_addr constant [26 x i8] c"error: no code found for \00"
@.str.6377 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6378 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.6379 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6380 = private unnamed_addr constant [5 x i8] c"come\00"
@.str.6381 = private unnamed_addr constant [6 x i8] c"comes\00"
@.str.6382 = private unnamed_addr constant [8 x i8] c"error: \00"
@.str.6383 = private unnamed_addr constant [2 x i8] c" \00"
@.str.6384 = private unnamed_addr constant [8 x i8] c" from \22\00"
@.str.6385 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6386 = private unnamed_addr constant [32 x i8] c"\22, but its library isn't linked\00"
@.str.6387 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6388 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.6389 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6390 = private unnamed_addr constant [75 x i8] c" the header only says the functions exist; their code lives in a library.\00"
@.str.6391 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6392 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.6393 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6394 = private unnamed_addr constant [67 x i8] c" add this at the top of your file (with the library's real name):\00"
@.str.6395 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6396 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.6397 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6398 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6399 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6400 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.6401 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6402 = private unnamed_addr constant [13 x i8] c" link \22\00"
@.str.6403 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6404 = private unnamed_addr constant [2 x i8] c"\22\00"
@.str.6405 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6406 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.6407 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6408 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6409 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6410 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.6411 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6412 = private unnamed_addr constant [5 x i8] c"/rt-\00"
@.str.6413 = private unnamed_addr constant [4 x i8] c"2.5\00"
@.str.6414 = private unnamed_addr constant [3 x i8] c".o\00"
@.str.6415 = private unnamed_addr constant [10 x i8] c"mkdir -p \00"
@.str.6416 = private unnamed_addr constant [6 x i8] c".part\00"
declare i32 @getpid()
@.str.6417 = private unnamed_addr constant [7 x i8] c" -fPIC\00"
@.str.6418 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6419 = private unnamed_addr constant [5 x i8] c".log\00"
@.str.6420 = private unnamed_addr constant [5 x i8] c" -O2\00"
@.str.6421 = private unnamed_addr constant [5 x i8] c" -c \00"
@.str.6422 = private unnamed_addr constant [5 x i8] c" -o \00"
@.str.6423 = private unnamed_addr constant [4 x i8] c" > \00"
@.str.6424 = private unnamed_addr constant [6 x i8] c" 2>&1\00"
@.str.6425 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6426 = private unnamed_addr constant [7 x i8] c"rm -f \00"
@.str.6427 = private unnamed_addr constant [2 x i8] c" \00"
@.str.6428 = private unnamed_addr constant [47 x i8] c"error: couldn't build the Finch runtime with '\00"
@.str.6429 = private unnamed_addr constant [31 x i8] c"' (is a C compiler installed?)\00"
@.str.6430 = private unnamed_addr constant [7 x i8] c"rm -f \00"
@.str.6431 = private unnamed_addr constant [8 x i8] c" && mv \00"
@.str.6432 = private unnamed_addr constant [2 x i8] c" \00"
@.str.6433 = private unnamed_addr constant [12 x i8] c"FINCH_CLANG\00"
@.str.6434 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6435 = private unnamed_addr constant [6 x i8] c"clang\00"
@.str.6436 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00"
@.str.6437 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6438 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00"
@.str.6439 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6440 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6441 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.6442 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6443 = private unnamed_addr constant [4 x i8] c".ll\00"
@.str.6444 = private unnamed_addr constant [3 x i8] c".o\00"
@.str.6445 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6446 = private unnamed_addr constant [11 x i8] c" --target=\00"
@.str.6447 = private unnamed_addr constant [5 x i8] c".log\00"
@.str.6448 = private unnamed_addr constant [2 x i8] c" \00"
@.str.6449 = private unnamed_addr constant [8 x i8] c" -w -c \00"
@.str.6450 = private unnamed_addr constant [5 x i8] c" -o \00"
@.str.6451 = private unnamed_addr constant [4 x i8] c" > \00"
@.str.6452 = private unnamed_addr constant [6 x i8] c" 2>&1\00"
@.str.6453 = private unnamed_addr constant [7 x i8] c"rm -f \00"
@.str.6454 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6455 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6456 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.6457 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6458 = private unnamed_addr constant [47 x i8] c"error: clang couldn't compile the program's IR\00"
@.str.6459 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6460 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.6461 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6462 = private unnamed_addr constant [7 x i8] c"rm -f \00"
@.str.6463 = private unnamed_addr constant [2 x i8] c" \00"
@.str.6464 = private unnamed_addr constant [2 x i8] c" \00"
@.str.6465 = private unnamed_addr constant [2 x i8] c" \00"
@.str.6466 = private unnamed_addr constant [5 x i8] c" -o \00"
@.str.6467 = private unnamed_addr constant [5 x i8] c" -lm\00"
@.str.6468 = private unnamed_addr constant [13 x i8] c" -dynamiclib\00"
@.str.6469 = private unnamed_addr constant [9 x i8] c" -shared\00"
@.str.6470 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6471 = private unnamed_addr constant [3 x i8] c".c\00"
@.str.6472 = private unnamed_addr constant [2 x i8] c".\00"
@.str.6473 = private unnamed_addr constant [3 x i8] c".o\00"
@.str.6474 = private unnamed_addr constant [7 x i8] c" -fPIC\00"
@.str.6475 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6476 = private unnamed_addr constant [5 x i8] c" -O2\00"
@.str.6477 = private unnamed_addr constant [5 x i8] c" -c \00"
@.str.6478 = private unnamed_addr constant [5 x i8] c" -o \00"
@.str.6479 = private unnamed_addr constant [4 x i8] c" > \00"
@.str.6480 = private unnamed_addr constant [6 x i8] c" 2>&1\00"
@.str.6481 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6482 = private unnamed_addr constant [25 x i8] c"error: couldn't compile \00"
@.str.6483 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6484 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.6485 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6486 = private unnamed_addr constant [7 x i8] c"rm -f \00"
@.str.6487 = private unnamed_addr constant [2 x i8] c" \00"
@.str.6488 = private unnamed_addr constant [2 x i8] c" \00"
@.str.6489 = private unnamed_addr constant [2 x i8] c" \00"
@.str.6490 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6491 = private unnamed_addr constant [3 x i8] c".o\00"
@.str.6492 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00"
@.str.6493 = private unnamed_addr constant [3 x i8] c".a\00"
@.str.6494 = private unnamed_addr constant [2 x i8] c" \00"
@.str.6495 = private unnamed_addr constant [2 x i8] c" \00"
@.str.6496 = private unnamed_addr constant [4 x i8] c" > \00"
@.str.6497 = private unnamed_addr constant [6 x i8] c" 2>&1\00"
@.str.6498 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6499 = private unnamed_addr constant [7 x i8] c"rm -f \00"
@.str.6500 = private unnamed_addr constant [2 x i8] c" \00"
@.str.6501 = private unnamed_addr constant [7 x i8] c"rm -f \00"
@.str.6502 = private unnamed_addr constant [43 x i8] c"error: no C compiler found to link with ('\00"
@.str.6503 = private unnamed_addr constant [33 x i8] c"'; install one, or set FINCH_CC)\00"
@.str.6504 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6505 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.6506 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6507 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6508 = private unnamed_addr constant [5 x i8] c"%.*s\00"
@.str.6509 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6510 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6511 = private unnamed_addr constant [8 x i8] c"file://\00"
@.str.6512 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6513 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6514 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6515 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6516 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6517 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6518 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6519 = private unnamed_addr constant [17 x i8] c"0123456789ABCDEF\00"
@.str.6520 = private unnamed_addr constant [8 x i8] c"file://\00"
@.str.6521 = private unnamed_addr constant [6 x i8] c"/-_.~\00"
@.str.6522 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6523 = private unnamed_addr constant [2 x i8] c"%\00"
@.str.6524 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6525 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6526 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6527 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6528 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6529 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6530 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6531 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6532 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6533 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6534 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6535 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6536 = private unnamed_addr constant [1 x i8] c"\00"
declare i32 @getchar()
@.str.6537 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6538 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6539 = private unnamed_addr constant [2 x i8] c"\0D\00"
@.str.6540 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@stdin = external global ptr
declare i32 @feof(ptr)
@.str.6541 = private unnamed_addr constant [33 x i8] c"the editor closed the connection\00"
@.str.6542 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6543 = private unnamed_addr constant [16 x i8] c"Content-Length:\00"
@.str.6544 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6545 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6546 = private unnamed_addr constant [26 x i8] c"the message was cut short\00"
@.str.6547 = private unnamed_addr constant [17 x i8] c"Content-Length: \00"
@.str.6548 = private unnamed_addr constant [5 x i8] c"\0D\0A\0D\0A\00"
@.str.6549 = private unnamed_addr constant [1 x i8] c"\00"
@stdout = external global ptr
declare i64 @fwrite(ptr, i64, i64, ptr)
@.str.6550 = private unnamed_addr constant [8 x i8] c"jsonrpc\00"
@.str.6551 = private unnamed_addr constant [4 x i8] c"2.0\00"
@.str.6552 = private unnamed_addr constant [3 x i8] c"id\00"
@.str.6553 = private unnamed_addr constant [7 x i8] c"result\00"
@.str.6554 = private unnamed_addr constant [8 x i8] c"jsonrpc\00"
@.str.6555 = private unnamed_addr constant [4 x i8] c"2.0\00"
@.str.6556 = private unnamed_addr constant [7 x i8] c"method\00"
@.str.6557 = private unnamed_addr constant [7 x i8] c"params\00"
@.str.6558 = private unnamed_addr constant [5 x i8] c"line\00"
@.str.6559 = private unnamed_addr constant [10 x i8] c"character\00"
@.str.6560 = private unnamed_addr constant [6 x i8] c"start\00"
@.str.6561 = private unnamed_addr constant [4 x i8] c"end\00"
@.str.6562 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6563 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.6564 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6565 = private unnamed_addr constant [10 x i8] c": error: \00"
@.str.6566 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6567 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6568 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6569 = private unnamed_addr constant [2 x i8] c":\00"
@.str.6570 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6571 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6572 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6573 = private unnamed_addr constant [2 x i8] c":\00"
@.str.6574 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6575 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6576 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6577 = private unnamed_addr constant [2 x i8] c"@\00"
@.str.6578 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6579 = private unnamed_addr constant [3 x i8] c"@R\00"
@.str.6580 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6581 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6582 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6583 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6584 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6585 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6586 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6587 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6588 = private unnamed_addr constant [3 x i8] c"@V\00"
@.str.6589 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6590 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6591 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6592 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6593 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6594 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6595 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6596 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6597 = private unnamed_addr constant [3 x i8] c"@F\00"
@.str.6598 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6599 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6600 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6601 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6602 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6603 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6604 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6605 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6606 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6607 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6608 = private unnamed_addr constant [2 x i8] c"|\00"
@.str.6609 = private unnamed_addr constant [3 x i8] c"@S\00"
@.str.6610 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6611 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6612 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6613 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6614 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6615 = private unnamed_addr constant [4 x i8] c"@SF\00"
@.str.6616 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6617 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6618 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6619 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6620 = private unnamed_addr constant [3 x i8] c"@E\00"
@.str.6621 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6622 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6623 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6624 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6625 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6626 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6627 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6628 = private unnamed_addr constant [2 x i8] c",\00"
@.str.6629 = private unnamed_addr constant [3 x i8] c"@I\00"
@.str.6630 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6631 = private unnamed_addr constant [11 x i8] c"mkdir -p '\00"
@.str.6632 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6633 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6634 = private unnamed_addr constant [5 x i8] c"/doc\00"
@.str.6635 = private unnamed_addr constant [5 x i8] c".fch\00"
@.str.6636 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6637 = private unnamed_addr constant [13 x i8] c" --overlay '\00"
@.str.6638 = private unnamed_addr constant [2 x i8] c"=\00"
@.str.6639 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6640 = private unnamed_addr constant [9 x i8] c"/out.txt\00"
@.str.6641 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6642 = private unnamed_addr constant [10 x i8] c"' index '\00"
@.str.6643 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6644 = private unnamed_addr constant [5 x i8] c" > '\00"
@.str.6645 = private unnamed_addr constant [7 x i8] c"' 2>&1\00"
@.str.6646 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6647 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6648 = private unnamed_addr constant [6 x i8] c"range\00"
@.str.6649 = private unnamed_addr constant [9 x i8] c"severity\00"
@.str.6650 = private unnamed_addr constant [7 x i8] c"source\00"
@.str.6651 = private unnamed_addr constant [6 x i8] c"finch\00"
@.str.6652 = private unnamed_addr constant [8 x i8] c"message\00"
@.str.6653 = private unnamed_addr constant [4 x i8] c"uri\00"
@.str.6654 = private unnamed_addr constant [12 x i8] c"diagnostics\00"
@.str.6655 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00"
@.str.6656 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6657 = private unnamed_addr constant [5 x i8] c"kind\00"
@.str.6658 = private unnamed_addr constant [9 x i8] c"markdown\00"
@.str.6659 = private unnamed_addr constant [6 x i8] c"value\00"
@.str.6660 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6661 = private unnamed_addr constant [9 x i8] c"contents\00"
@.str.6662 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6663 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6664 = private unnamed_addr constant [4 x i8] c"uri\00"
@.str.6665 = private unnamed_addr constant [6 x i8] c"range\00"
@.str.6666 = private unnamed_addr constant [2 x i8] c".\00"
@.str.6667 = private unnamed_addr constant [5 x i8] c"name\00"
@.str.6668 = private unnamed_addr constant [5 x i8] c"kind\00"
@.str.6669 = private unnamed_addr constant [6 x i8] c"start\00"
@.str.6670 = private unnamed_addr constant [4 x i8] c"end\00"
@.str.6671 = private unnamed_addr constant [6 x i8] c"range\00"
@.str.6672 = private unnamed_addr constant [15 x i8] c"selectionRange\00"
@.str.6673 = private unnamed_addr constant [6 x i8] c"label\00"
@.str.6674 = private unnamed_addr constant [5 x i8] c"kind\00"
@.str.6675 = private unnamed_addr constant [7 x i8] c"detail\00"
@.str.6676 = private unnamed_addr constant [5 x i8] c"kind\00"
@.str.6677 = private unnamed_addr constant [9 x i8] c"markdown\00"
@.str.6678 = private unnamed_addr constant [6 x i8] c"value\00"
@.str.6679 = private unnamed_addr constant [14 x i8] c"documentation\00"
@.str.6680 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6681 = private unnamed_addr constant [2 x i8] c".\00"
@.str.6682 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6683 = private unnamed_addr constant [33 x i8] c"called .push() on a null pointer\00"
@.str.6684 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6685 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6686 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6687 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6688 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6689 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6690 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6691 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6692 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.6693 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6694 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6695 = private unnamed_addr constant [8 x i8] c"struct \00"
@.str.6696 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6697 = private unnamed_addr constant [6 x i8] c"enum \00"
@.str.6698 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6699 = private unnamed_addr constant [2 x i8] c".\00"
@.str.6700 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6701 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6702 = private unnamed_addr constant [3 x i8] c"[]\00"
@.str.6703 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6704 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.6705 = private unnamed_addr constant [5 x i8] c"char\00"
@.str.6706 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6707 = private unnamed_addr constant [5 x i8] c"ptr[\00"
@.str.6708 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6709 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.6710 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6711 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6712 = private unnamed_addr constant [3 x i8] c"[]\00"
@.str.6713 = private unnamed_addr constant [4 x i8] c"str\00"
@.str.6714 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6715 = private unnamed_addr constant [5 x i8] c"map[\00"
@.str.6716 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6717 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6718 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6719 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6720 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6721 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6722 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6723 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6724 = private unnamed_addr constant [8 x i8] c"struct \00"
@.str.6725 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6726 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6727 = private unnamed_addr constant [6 x i8] c"enum \00"
@.str.6728 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6729 = private unnamed_addr constant [7 x i8] c"module\00"
@.str.6730 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6731 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6732 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6733 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6734 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6735 = private unnamed_addr constant [13 x i8] c"isIncomplete\00"
@.str.6736 = private unnamed_addr constant [6 x i8] c"items\00"
@.str.6737 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6738 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6739 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6740 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6741 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6742 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6743 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6744 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6745 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6746 = private unnamed_addr constant [5 x i8] c"ptr[\00"
@.str.6747 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6748 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.6749 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6750 = private unnamed_addr constant [6 x i8] c"label\00"
@.str.6751 = private unnamed_addr constant [6 x i8] c"label\00"
@.str.6752 = private unnamed_addr constant [11 x i8] c"parameters\00"
@.str.6753 = private unnamed_addr constant [11 x i8] c"signatures\00"
@.str.6754 = private unnamed_addr constant [16 x i8] c"activeSignature\00"
@.str.6755 = private unnamed_addr constant [16 x i8] c"activeParameter\00"
@.str.6756 = private unnamed_addr constant [6 x i8] c"label\00"
@.str.6757 = private unnamed_addr constant [14 x i8] c"documentation\00"
@.str.6758 = private unnamed_addr constant [11 x i8] c"signatures\00"
@.str.6759 = private unnamed_addr constant [16 x i8] c"activeSignature\00"
@.str.6760 = private unnamed_addr constant [16 x i8] c"activeParameter\00"
@.str.6761 = private unnamed_addr constant [13 x i8] c"textDocument\00"
@.str.6762 = private unnamed_addr constant [5 x i8] c"text\00"
@.str.6763 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6764 = private unnamed_addr constant [13 x i8] c"textDocument\00"
@.str.6765 = private unnamed_addr constant [4 x i8] c"uri\00"
@.str.6766 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6767 = private unnamed_addr constant [7 x i8] c"method\00"
@.str.6768 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6769 = private unnamed_addr constant [7 x i8] c"params\00"
@.str.6770 = private unnamed_addr constant [3 x i8] c"id\00"
@.str.6771 = private unnamed_addr constant [11 x i8] c"initialize\00"
@.str.6772 = private unnamed_addr constant [17 x i8] c"textDocumentSync\00"
@.str.6773 = private unnamed_addr constant [14 x i8] c"hoverProvider\00"
@.str.6774 = private unnamed_addr constant [19 x i8] c"definitionProvider\00"
@.str.6775 = private unnamed_addr constant [23 x i8] c"documentSymbolProvider\00"
@.str.6776 = private unnamed_addr constant [2 x i8] c".\00"
@.str.6777 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00"
@.str.6778 = private unnamed_addr constant [19 x i8] c"completionProvider\00"
@.str.6779 = private unnamed_addr constant [2 x i8] c"(\00"
@.str.6780 = private unnamed_addr constant [2 x i8] c",\00"
@.str.6781 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00"
@.str.6782 = private unnamed_addr constant [22 x i8] c"signatureHelpProvider\00"
@.str.6783 = private unnamed_addr constant [13 x i8] c"capabilities\00"
@.str.6784 = private unnamed_addr constant [5 x i8] c"name\00"
@.str.6785 = private unnamed_addr constant [6 x i8] c"finch\00"
@.str.6786 = private unnamed_addr constant [11 x i8] c"serverInfo\00"
@.str.6787 = private unnamed_addr constant [9 x i8] c"shutdown\00"
@.str.6788 = private unnamed_addr constant [5 x i8] c"exit\00"
@.str.6789 = private unnamed_addr constant [21 x i8] c"textDocument/didOpen\00"
@.str.6790 = private unnamed_addr constant [23 x i8] c"textDocument/didChange\00"
@.str.6791 = private unnamed_addr constant [15 x i8] c"contentChanges\00"
@.str.6792 = private unnamed_addr constant [5 x i8] c"text\00"
@.str.6793 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6794 = private unnamed_addr constant [21 x i8] c"textDocument/didSave\00"
@.str.6795 = private unnamed_addr constant [22 x i8] c"textDocument/didClose\00"
@.str.6796 = private unnamed_addr constant [4 x i8] c"uri\00"
@.str.6797 = private unnamed_addr constant [12 x i8] c"diagnostics\00"
@.str.6798 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00"
@.str.6799 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00"
@.str.6800 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00"
@.str.6801 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00"
@.str.6802 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00"
@.str.6803 = private unnamed_addr constant [27 x i8] c"textDocument/signatureHelp\00"
@.str.6804 = private unnamed_addr constant [9 x i8] c"position\00"
@.str.6805 = private unnamed_addr constant [5 x i8] c"line\00"
@.str.6806 = private unnamed_addr constant [9 x i8] c"position\00"
@.str.6807 = private unnamed_addr constant [10 x i8] c"character\00"
@.str.6808 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6809 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6810 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00"
@.str.6811 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00"
@.str.6812 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00"
@.str.6813 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00"
@.str.6814 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00"
@.str.6815 = private unnamed_addr constant [16 x i8] c"/tmp/finch_lsp_\00"
@.str.6816 = private unnamed_addr constant [9 x i8] c"rm -rf '\00"
@.str.6817 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6818 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6819 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6820 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6821 = private unnamed_addr constant [2 x i8] c"\22\00"
@.str.6822 = private unnamed_addr constant [3 x i8] c"\5C\22\00"
@.str.6823 = private unnamed_addr constant [3 x i8] c"\5C\5C\00"
@.str.6824 = private unnamed_addr constant [3 x i8] c"\5Cn\00"
@.str.6825 = private unnamed_addr constant [3 x i8] c"\5Cr\00"
@.str.6826 = private unnamed_addr constant [3 x i8] c"\5Ct\00"
@.str.6827 = private unnamed_addr constant [5 x i8] c"\5Cu00\00"
@.str.6828 = private unnamed_addr constant [2 x i8] c"\22\00"
@.str.6829 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6830 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00"
@.str.6831 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6832 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6833 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6834 = private unnamed_addr constant [2 x i8] c",\00"
@.str.6835 = private unnamed_addr constant [2 x i8] c":\00"
@.str.6836 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.6837 = private unnamed_addr constant [3 x i8] c": \00"
@.str.6838 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6839 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6840 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.6841 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6842 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6843 = private unnamed_addr constant [5 x i8] c"true\00"
@.str.6844 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6845 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6846 = private unnamed_addr constant [6 x i8] c"false\00"
@.str.6847 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6848 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6849 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6850 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6851 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6852 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6853 = private unnamed_addr constant [3 x i8] c"[]\00"
@.str.6854 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6855 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6856 = private unnamed_addr constant [2 x i8] c"[\00"
@.str.6857 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6858 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6859 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6860 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6861 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6862 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6863 = private unnamed_addr constant [2 x i8] c"]\00"
@.str.6864 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6865 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6866 = private unnamed_addr constant [3 x i8] c"{}\00"
@.str.6867 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6868 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6869 = private unnamed_addr constant [2 x i8] c"{\00"
@.str.6870 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6871 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6872 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6873 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6874 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6875 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6876 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00"
@.str.6877 = private unnamed_addr constant [2 x i8] c"}\00"
@.str.6878 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6879 = private unnamed_addr constant [36 x i8] c"no arm of this match fits the value\00"
@.str.6880 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6881 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6882 = private unnamed_addr constant [1 x i8] c"\00"
@.str.6883 = private unnamed_addr constant [3 x i8] c" \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 [22 x i8] c"build/../std/json.fch\00"
@.str.6887 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6888 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6889 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6890 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6891 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6892 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6893 = private unnamed_addr constant [6 x i8] c"line \00"
@.str.6894 = private unnamed_addr constant [10 x i8] c", column \00"
@.str.6895 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6896 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6897 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6898 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6899 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6900 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6901 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6902 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6903 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6904 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6905 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6906 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6907 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6908 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6909 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6910 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6911 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6912 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6913 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6914 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6915 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6916 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6917 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6918 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6919 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6920 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6921 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6922 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6923 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6924 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6925 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6926 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6927 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6928 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6929 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6930 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6931 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6932 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6933 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6934 = private unnamed_addr constant [27 x i8] c"json: the text ends where \00"
@.str.6935 = private unnamed_addr constant [13 x i8] c" should be (\00"
@.str.6936 = private unnamed_addr constant [2 x i8] c")\00"
@.str.6937 = private unnamed_addr constant [14 x i8] c"json: found '\00"
@.str.6938 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6939 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6940 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6941 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6942 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6943 = private unnamed_addr constant [9 x i8] c"' where \00"
@.str.6944 = private unnamed_addr constant [13 x i8] c" should be (\00"
@.str.6945 = private unnamed_addr constant [2 x i8] c")\00"
@.str.6946 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6947 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6948 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6949 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6950 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6951 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6952 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6953 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6954 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6955 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6956 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6957 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6958 = private unnamed_addr constant [2 x i8] c"'\00"
@.str.6959 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6960 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6961 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6962 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6963 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6964 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6965 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6966 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6967 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6968 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6969 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6970 = private unnamed_addr constant [20 x i8] c"a hexadecimal digit\00"
@.str.6971 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6972 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6973 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6974 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6975 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6976 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6977 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6978 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6979 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6980 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6981 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6982 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6983 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6984 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6985 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6986 = private unnamed_addr constant [31 x i8] c"json: a text is never closed (\00"
@.str.6987 = private unnamed_addr constant [2 x i8] c")\00"
@.str.6988 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6989 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6990 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6991 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6992 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6993 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6994 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.6995 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6996 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6997 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.6998 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.6999 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7000 = private unnamed_addr constant [1 x i8] c"\00"
@.str.7001 = private unnamed_addr constant [56 x i8] c"json: a line break or control character inside a text (\00"
@.str.7002 = private unnamed_addr constant [2 x i8] c")\00"
@.str.7003 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7004 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7005 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7006 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.7007 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7008 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7009 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7010 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7011 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7012 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7013 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7014 = private unnamed_addr constant [2 x i8] c"\0A\00"
@.str.7015 = private unnamed_addr constant [2 x i8] c"\09\00"
@.str.7016 = private unnamed_addr constant [2 x i8] c"\0D\00"
@.str.7017 = private unnamed_addr constant [3 x i8] c"\5Cu\00"
@.str.7018 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7019 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7020 = private unnamed_addr constant [23 x i8] c"json: unknown escape \5C\00"
@.str.7021 = private unnamed_addr constant [13 x i8] c" in a text (\00"
@.str.7022 = private unnamed_addr constant [2 x i8] c")\00"
@.str.7023 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7024 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7025 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7026 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7027 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7028 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7029 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7030 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7031 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7032 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.7033 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7034 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.7035 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7036 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7037 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7038 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7039 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.7040 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7041 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7042 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7043 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7044 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.7045 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7046 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7047 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7048 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7049 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.7050 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7051 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7052 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7053 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7054 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.7055 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7056 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7057 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7058 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7059 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.7060 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7061 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7062 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7063 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7064 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.7065 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7066 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7067 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7068 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7069 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7070 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7071 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.7072 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7073 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7074 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7075 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7076 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7077 = private unnamed_addr constant [9 x i8] c"a number\00"
@.str.7078 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7079 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7080 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7081 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00"
@.str.7082 = private unnamed_addr constant [8 x i8] c"a value\00"
@.str.7083 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7084 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7085 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7086 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7087 = private unnamed_addr constant [16 x i8] c"a key in quotes\00"
@.str.7088 = private unnamed_addr constant [4 x i8] c"':'\00"
@.str.7089 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7090 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7091 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7092 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7093 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7094 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7095 = private unnamed_addr constant [11 x i8] c"',' or '}'\00"
@.str.7096 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7097 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7098 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7099 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7100 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7101 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7102 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00"
@.str.7103 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00"
@.str.7104 = private unnamed_addr constant [11 x i8] c"',' or ']'\00"
@.str.7105 = private unnamed_addr constant [5 x i8] c"true\00"
@.str.7106 = private unnamed_addr constant [6 x i8] c"false\00"
@.str.7107 = private unnamed_addr constant [5 x i8] c"null\00"
@.str.7108 = private unnamed_addr constant [8 x i8] c"a value\00"
@.str.7109 = private unnamed_addr constant [20 x i8] c"the end of the text\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_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 20, 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 26)
%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
%a12 = 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
%a22 = 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
%a34 = alloca { ptr, i64, i64 }, align 16
%a36 = alloca i64, align 16
%a40 = alloca { ptr, i64, i64 }, align 16
%a41 = alloca { ptr, i64, i64 }, align 16
%a45 = alloca { ptr, i64, i64 }, align 16
%a46 = 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
%t8 = add i64 %t7, 1
%t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1
%t10 = load i64, ptr %t9
call void @finch_str_sub(ptr %a4, ptr %a3, i64 %t8, i64 %t10, ptr @.str.4, i64 30)
%t11 = load { ptr, i64, i64 }, ptr %a4
store { ptr, i64, i64 } %t11, ptr %a12
%t13 = load { ptr, i64, i64 }, ptr %a1
%t14 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t13)
store { ptr, i64, i64 } %t14, ptr %a15
store { ptr, i64, i64 } { ptr @.str.5, i64 1, i64 0 }, ptr %a16
%t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16)
%t18 = icmp ne i32 %t17, 0
br label %logic.from13
logic.from13:
br i1 %t18, label %logic.rhs14, label %logic.end15
logic.rhs14:
%t19 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t19, ptr %a20
store { ptr, i64, i64 } { ptr @.str.7, i64 2, i64 0 }, ptr %a22
%t23 = call i32 @finch_str_starts(ptr %a20, ptr %a22)
%t24 = icmp ne i32 %t23, 0
%t25 = xor i1 %t24, true
br label %logic.rend16
logic.rend16:
br label %logic.end15
logic.end15:
%t26 = phi i1 [ false, %logic.from13 ], [ %t25, %logic.rend16 ]
br i1 %t26, label %then17, label %endif19
then17:
%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
store { ptr, i64, i64 } %t30, ptr %a12
br label %endif19
endif19:
%t31 = load { ptr, i64, i64 }, ptr %a12
store { ptr, i64, i64 } %t31, ptr %a32
store { ptr, i64, i64 } { ptr @.str.9, i64 1, i64 0 }, ptr %a34
%t35 = call i64 @finch_str_find(ptr %a32, ptr %a34)
store i64 %t35, ptr %a36
%t37 = load i64, ptr %a36
%t38 = icmp sgt i64 %t37, 0
br i1 %t38, label %then20, label %endif22
then20:
%t39 = load { ptr, i64, i64 }, ptr %a12
store { ptr, i64, i64 } %t39, ptr %a40
%t42 = load i64, ptr %a36
call void @finch_str_sub(ptr %a41, ptr %a40, i64 0, i64 %t42, ptr @.str.10, i64 36)
%t43 = load { ptr, i64, i64 }, ptr %a41
ret { ptr, i64, i64 } %t43
endif22:
%t44 = load { ptr, i64, i64 }, ptr %a12
store { ptr, i64, i64 } %t44, ptr %a45
call void @finch_str_copy(ptr %a46, ptr %a45)
%t47 = load { ptr, i64, i64 }, ptr %a46
ret { ptr, i64, i64 } %t47
}
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 53, 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 55, 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 55, 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 55)
%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 57)
%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
%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
%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
%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
%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
%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
%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
%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
%a78 = alloca { ptr, i64, i64 }, align 16
%a82 = alloca { ptr, i64, i64 }, align 16
%a83 = alloca { ptr, i64, i64 }, align 16
%a88 = alloca 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
%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
%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
%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
%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
%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
%a153 = 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
%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
%a166 = 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
%a179 = alloca { ptr, i64, i64 }, align 16
%a180 = alloca { ptr, i64, i64 }, align 16
%a181 = 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
%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
%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
%a220 = 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
%a236 = alloca { ptr, i64, i64 }, align 16
%a237 = alloca { ptr, i64, i64 }, align 16
%a238 = 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
%a248 = alloca { ptr, i64, i64 }, align 16
%a249 = alloca { ptr, i64, i64 }, align 16
%a250 = 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
%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
%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
%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
%a290 = alloca { ptr, i64, i64 }, align 16
%a291 = 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)
%t9 = load { ptr, i64, i64 }, ptr %a6
%t10 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t9, 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.19, i64 4, i64 0 }, 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 %a19
%t20 = load { ptr, i64, i64 }, ptr %a2
%t21 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t20)
store { ptr, i64, i64 } %t21, ptr %a23
store { ptr, i64, i64 } { ptr @.str.20, 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
store { ptr, i64, i64 } %t25, 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.21, i64 1, i64 0 }, ptr %a33
call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33)
%t34 = load { ptr, i64, i64 }, ptr %a31
%t35 = load ptr, ptr %a1
%t36 = icmp eq ptr %t35, null
br i1 %t36, label %panic37, label %ok38
panic37:
call void @finch_panic(ptr @.str.22, i64 65, ptr @.str.23)
unreachable
ok38:
%t37 = getelementptr inbounds %S.main.Loader, ptr %t35, i32 0, i32 3
%t38 = load { ptr, i64, i64 }, ptr %t37
store { ptr, i64, i64 } %t34, ptr %a40
store { ptr, i64, i64 } %t38, ptr %a41
call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41)
%t42 = load { ptr, i64, i64 }, ptr %a39
store { ptr, i64, i64 } %t42, ptr %a44
store { ptr, i64, i64 } { ptr @.str.24, i64 4, i64 0 }, 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 %a47
%t48 = call i32 @finch_file_exists(ptr %a47)
%t49 = icmp ne i32 %t48, 0
br i1 %t49, label %then39, label %endif41
then39:
%t50 = load { ptr, i64, i64 }, ptr %a2
%t51 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t50)
store { ptr, i64, i64 } %t51, ptr %a53
store { ptr, i64, i64 } { ptr @.str.25, i64 1, i64 0 }, ptr %a54
call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54)
%t55 = load { ptr, i64, i64 }, ptr %a52
%t56 = load { ptr, i64, i64 }, ptr %a3
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)
%t60 = load { ptr, i64, i64 }, ptr %a57
store { ptr, i64, i64 } %t60, ptr %a62
store { ptr, i64, i64 } { ptr @.str.26, i64 1, i64 0 }, ptr %a63
call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63)
%t64 = load { ptr, i64, i64 }, ptr %a61
%t65 = load ptr, ptr %a1
%t66 = icmp eq ptr %t65, null
br i1 %t66, label %panic42, label %ok43
panic42:
call void @finch_panic(ptr @.str.27, i64 66, ptr @.str.28)
unreachable
ok43:
%t67 = getelementptr inbounds %S.main.Loader, ptr %t65, i32 0, i32 3
%t68 = load { ptr, i64, i64 }, ptr %t67
store { ptr, i64, i64 } %t64, 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.29, i64 4, i64 0 }, ptr %a75
call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75)
%t76 = load { ptr, i64, i64 }, ptr %a73
ret { ptr, i64, i64 } %t76
endif41:
%t77 = load { ptr, i64, i64 }, ptr %a19
store { ptr, i64, i64 } %t77, ptr %a78
%t79 = call i32 @finch_file_exists(ptr %a78)
%t80 = icmp ne i32 %t79, 0
br i1 %t80, label %then44, label %endif46
then44:
%t81 = load { ptr, i64, i64 }, ptr %a19
store { ptr, i64, i64 } %t81, ptr %a82
call void @finch_str_copy(ptr %a83, ptr %a82)
%t84 = load { ptr, i64, i64 }, ptr %a83
ret { ptr, i64, i64 } %t84
endif46:
%t85 = load ptr, ptr %a1
%t86 = icmp eq ptr %t85, null
br i1 %t86, label %panic47, label %ok48
panic47:
call void @finch_panic(ptr @.str.30, i64 71, ptr @.str.31)
unreachable
ok48:
%t87 = getelementptr inbounds %S.main.Loader, ptr %t85, i32 0, i32 5
store i64 0, ptr %a88
br label %each.cond49
each.cond49:
%t89 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i32 0, i32 1
%t90 = load i64, ptr %t89
%t91 = load i64, ptr %a88
%t92 = icmp slt i64 %t91, %t90
br i1 %t92, label %each.body50, label %each.end52
each.body50:
%t93 = load ptr, ptr %t87
%t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i64 %t91
%t95 = load { ptr, i64, i64 }, ptr %t94
store { ptr, i64, i64 } %t95, ptr %a96
%t97 = load { ptr, i64, i64 }, ptr %a96
store { ptr, i64, i64 } %t97, ptr %a99
store { ptr, i64, i64 } { ptr @.str.32, i64 1, i64 0 }, ptr %a100
call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100)
%t101 = load { ptr, i64, i64 }, ptr %a98
%t102 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t101, 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.33, i64 1, i64 0 }, ptr %a109
call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109)
%t110 = load { ptr, i64, i64 }, ptr %a107
%t111 = load ptr, ptr %a1
%t112 = icmp eq ptr %t111, null
br i1 %t112, label %panic53, label %ok54
panic53:
call void @finch_panic(ptr @.str.34, i64 72, ptr @.str.35)
unreachable
ok54:
%t113 = getelementptr inbounds %S.main.Loader, ptr %t111, i32 0, i32 3
%t114 = load { ptr, i64, i64 }, ptr %t113
store { ptr, i64, i64 } %t110, 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.36, i64 4, i64 0 }, ptr %a121
call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121)
%t122 = load { ptr, i64, i64 }, ptr %a119
store { ptr, i64, i64 } %t122, ptr %a123
%t124 = call i32 @finch_file_exists(ptr %a123)
%t125 = icmp ne i32 %t124, 0
br i1 %t125, label %then55, label %endif57
then55:
%t126 = load { ptr, i64, i64 }, ptr %a96
store { ptr, i64, i64 } %t126, ptr %a128
store { ptr, i64, i64 } { ptr @.str.37, i64 1, i64 0 }, ptr %a129
call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129)
%t130 = load { ptr, i64, i64 }, ptr %a127
%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)
%t135 = load { ptr, i64, i64 }, ptr %a132
store { ptr, i64, i64 } %t135, ptr %a137
store { ptr, i64, i64 } { ptr @.str.38, i64 1, i64 0 }, ptr %a138
call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138)
%t139 = load { ptr, i64, i64 }, ptr %a136
%t140 = load ptr, ptr %a1
%t141 = icmp eq ptr %t140, null
br i1 %t141, label %panic58, label %ok59
panic58:
call void @finch_panic(ptr @.str.39, i64 73, ptr @.str.40)
unreachable
ok59:
%t142 = getelementptr inbounds %S.main.Loader, ptr %t140, i32 0, i32 3
%t143 = load { ptr, i64, i64 }, ptr %t142
store { ptr, i64, i64 } %t139, 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.41, i64 4, i64 0 }, ptr %a150
call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150)
%t151 = load { ptr, i64, i64 }, ptr %a148
ret { ptr, i64, i64 } %t151
endif57:
%t152 = load { ptr, i64, i64 }, ptr %a96
store { ptr, i64, i64 } %t152, ptr %a154
store { ptr, i64, i64 } { ptr @.str.42, i64 1, i64 0 }, ptr %a155
call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155)
%t156 = load { ptr, i64, i64 }, ptr %a153
%t157 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t156, ptr %a159
store { ptr, i64, i64 } %t157, ptr %a160
call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160)
%t161 = load { ptr, i64, i64 }, ptr %a158
store { ptr, i64, i64 } %t161, ptr %a163
store { ptr, i64, i64 } { ptr @.str.43, i64 4, i64 0 }, ptr %a164
call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164)
%t165 = load { ptr, i64, i64 }, ptr %a162
store { ptr, i64, i64 } %t165, ptr %a166
%t167 = call i32 @finch_file_exists(ptr %a166)
%t168 = icmp ne i32 %t167, 0
br i1 %t168, label %then60, label %endif62
then60:
%t169 = load { ptr, i64, i64 }, ptr %a96
store { ptr, i64, i64 } %t169, ptr %a171
store { ptr, i64, i64 } { ptr @.str.44, i64 1, i64 0 }, ptr %a172
call void @finch_str_concat(ptr %a170, ptr %a171, ptr %a172)
%t173 = load { ptr, i64, i64 }, ptr %a170
%t174 = load { ptr, i64, i64 }, ptr %a3
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)
%t178 = load { ptr, i64, i64 }, ptr %a175
store { ptr, i64, i64 } %t178, ptr %a180
store { ptr, i64, i64 } { ptr @.str.45, i64 4, i64 0 }, ptr %a181
call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181)
%t182 = load { ptr, i64, i64 }, ptr %a179
ret { ptr, i64, i64 } %t182
endif62:
br label %each.step51
each.step51:
%t183 = load i64, ptr %a88
%t184 = add i64 %t183, 1
store i64 %t184, ptr %a88
br label %each.cond49
each.end52:
%t185 = load ptr, ptr %a1
%t186 = icmp eq ptr %t185, null
br i1 %t186, label %panic63, label %ok64
panic63:
call void @finch_panic(ptr @.str.46, i64 79, ptr @.str.47)
unreachable
ok64:
%t187 = getelementptr inbounds %S.main.Loader, ptr %t185, i32 0, i32 4
%t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t187, i32 0, i32 1
%t189 = load i64, ptr %t188
%t190 = icmp sgt i64 %t189, 0
br i1 %t190, label %then65, label %endif67
then65:
%t191 = load ptr, ptr %a1
%t192 = icmp eq ptr %t191, null
br i1 %t192, label %panic68, label %ok69
panic68:
call void @finch_panic(ptr @.str.48, i64 80, ptr @.str.49)
unreachable
ok69:
%t193 = getelementptr inbounds %S.main.Loader, ptr %t191, i32 0, i32 4
%t194 = load { ptr, i64, i64 }, ptr %t193
store { ptr, i64, i64 } %t194, ptr %a196
store { ptr, i64, i64 } { ptr @.str.50, i64 1, i64 0 }, ptr %a197
call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197)
%t198 = load { ptr, i64, i64 }, ptr %a195
%t199 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t198, ptr %a201
store { ptr, i64, i64 } %t199, ptr %a202
call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202)
%t203 = load { ptr, i64, i64 }, ptr %a200
store { ptr, i64, i64 } %t203, ptr %a205
store { ptr, i64, i64 } { ptr @.str.51, i64 1, i64 0 }, ptr %a206
call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206)
%t207 = load { ptr, i64, i64 }, ptr %a204
%t208 = load ptr, ptr %a1
%t209 = icmp eq ptr %t208, null
br i1 %t209, label %panic70, label %ok71
panic70:
call void @finch_panic(ptr @.str.52, i64 80, ptr @.str.53)
unreachable
ok71:
%t210 = getelementptr inbounds %S.main.Loader, ptr %t208, i32 0, i32 3
%t211 = load { ptr, i64, i64 }, ptr %t210
store { ptr, i64, i64 } %t207, 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.54, i64 4, i64 0 }, ptr %a218
call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218)
%t219 = load { ptr, i64, i64 }, ptr %a216
store { ptr, i64, i64 } %t219, ptr %a220
%t221 = call i32 @finch_file_exists(ptr %a220)
%t222 = icmp ne i32 %t221, 0
br i1 %t222, label %then72, label %endif74
then72:
%t223 = load ptr, ptr %a1
%t224 = icmp eq ptr %t223, null
br i1 %t224, label %panic75, label %ok76
panic75:
call void @finch_panic(ptr @.str.55, i64 81, ptr @.str.56)
unreachable
ok76:
%t225 = getelementptr inbounds %S.main.Loader, ptr %t223, i32 0, i32 4
%t226 = load { ptr, i64, i64 }, ptr %t225
store { ptr, i64, i64 } %t226, ptr %a228
store { ptr, i64, i64 } { ptr @.str.57, i64 1, i64 0 }, ptr %a229
call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229)
%t230 = load { ptr, i64, i64 }, ptr %a227
%t231 = load { ptr, i64, i64 }, ptr %a3
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)
%t235 = load { ptr, i64, i64 }, ptr %a232
store { ptr, i64, i64 } %t235, ptr %a237
store { ptr, i64, i64 } { ptr @.str.58, i64 1, i64 0 }, ptr %a238
call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238)
%t239 = load { ptr, i64, i64 }, ptr %a236
%t240 = load ptr, ptr %a1
%t241 = icmp eq ptr %t240, null
br i1 %t241, label %panic77, label %ok78
panic77:
call void @finch_panic(ptr @.str.59, i64 81, ptr @.str.60)
unreachable
ok78:
%t242 = getelementptr inbounds %S.main.Loader, ptr %t240, i32 0, i32 3
%t243 = load { ptr, i64, i64 }, ptr %t242
store { ptr, i64, i64 } %t239, ptr %a245
store { ptr, i64, i64 } %t243, ptr %a246
call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246)
%t247 = load { ptr, i64, i64 }, ptr %a244
store { ptr, i64, i64 } %t247, ptr %a249
store { ptr, i64, i64 } { ptr @.str.61, i64 4, i64 0 }, ptr %a250
call void @finch_str_concat(ptr %a248, ptr %a249, ptr %a250)
%t251 = load { ptr, i64, i64 }, ptr %a248
ret { ptr, i64, i64 } %t251
endif74:
%t252 = load ptr, ptr %a1
%t253 = icmp eq ptr %t252, null
br i1 %t253, label %panic79, label %ok80
panic79:
call void @finch_panic(ptr @.str.62, i64 83, ptr @.str.63)
unreachable
ok80:
%t254 = getelementptr inbounds %S.main.Loader, ptr %t252, i32 0, i32 4
%t255 = load { ptr, i64, i64 }, ptr %t254
store { ptr, i64, i64 } %t255, ptr %a257
store { ptr, i64, i64 } { ptr @.str.64, i64 1, i64 0 }, ptr %a258
call void @finch_str_concat(ptr %a256, ptr %a257, ptr %a258)
%t259 = load { ptr, i64, i64 }, ptr %a256
%t260 = load { ptr, i64, i64 }, ptr %a3
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)
%t264 = load { ptr, i64, i64 }, ptr %a261
store { ptr, i64, i64 } %t264, ptr %a266
store { ptr, i64, i64 } { ptr @.str.65, i64 4, i64 0 }, 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 %a269
%t270 = call i32 @finch_file_exists(ptr %a269)
%t271 = icmp ne i32 %t270, 0
br i1 %t271, label %then81, label %endif83
then81:
%t272 = load ptr, ptr %a1
%t273 = icmp eq ptr %t272, null
br i1 %t273, label %panic84, label %ok85
panic84:
call void @finch_panic(ptr @.str.66, i64 84, ptr @.str.67)
unreachable
ok85:
%t274 = getelementptr inbounds %S.main.Loader, ptr %t272, i32 0, i32 4
%t275 = load { ptr, i64, i64 }, ptr %t274
store { ptr, i64, i64 } %t275, ptr %a277
store { ptr, i64, i64 } { ptr @.str.68, i64 1, i64 0 }, ptr %a278
call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278)
%t279 = load { ptr, i64, i64 }, ptr %a276
%t280 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t279, ptr %a282
store { ptr, i64, i64 } %t280, ptr %a283
call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283)
%t284 = load { ptr, i64, i64 }, ptr %a281
store { ptr, i64, i64 } %t284, ptr %a286
store { ptr, i64, i64 } { ptr @.str.69, i64 4, i64 0 }, ptr %a287
call void @finch_str_concat(ptr %a285, ptr %a286, ptr %a287)
%t288 = load { ptr, i64, i64 }, ptr %a285
ret { ptr, i64, i64 } %t288
endif83:
br label %endif67
endif67:
%t289 = load { ptr, i64, i64 }, ptr %a19
store { ptr, i64, i64 } %t289, ptr %a290
call void @finch_str_copy(ptr %a291, ptr %a290)
%t292 = load { ptr, i64, i64 }, ptr %a291
ret { ptr, i64, i64 } %t292
}
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.cond107
n.cond107:
%t6 = load i64, ptr %a5
%t7 = icmp slt i64 %t6, %t4
br i1 %t7, label %n.body108, label %n.end109
n.body108:
%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.cond107
n.end109:
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.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.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.cond115
n.end117:
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.cond112
n.cond112:
%t6 = load i64, ptr %a5
%t7 = icmp slt i64 %t6, %t4
br i1 %t7, label %n.body113, label %n.end114
n.body113:
%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.cond112
n.end114:
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.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
%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
%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
%a80 = alloca { ptr, i64, i64 }, align 16
%a86 = alloca i64, align 16
%a92 = alloca { ptr, i64, i64 }, align 16
%a93 = alloca { ptr, i64, i64 }, align 16
%a105 = alloca %S.ast.Program, 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
%a118 = alloca { ptr, i64, i64 }, align 16
%a119 = alloca { ptr, i64, i64 }, align 16
%a121 = alloca { ptr, i64, i64 }, align 16
%a127 = alloca %S.ast.Program, align 16
%a128 = alloca %S.ast.Program, align 16
%a134 = alloca i64, align 16
%a142 = alloca { ptr, i64, i64 }, align 16
%a148 = alloca i64, align 16
%a151 = alloca i64, align 16
%a156 = alloca { ptr, i64, i64 }, align 16
%a157 = alloca { ptr, i64, i64 }, align 16
%a169 = alloca { ptr, i64, i64 }, align 16
%a170 = 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 91, 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)
%t42 = load { ptr, i64, i64 }, ptr %a39
%t43 = load { ptr, i64, i64 }, ptr %a2
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)
%t47 = load { ptr, i64, i64 }, ptr %a44
store { ptr, i64, i64 } %t47, ptr %a49
store { ptr, i64, i64 } { ptr @.str.74, i64 1, i64 0 }, ptr %a50
call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50)
%t51 = load { ptr, i64, i64 }, ptr %a48
%t52 = extractvalue { ptr, i64, i64 } %t51, 1
%t53 = trunc i64 %t52 to i32
%t54 = extractvalue { ptr, i64, i64 } %t51, 0
%t55 = icmp eq ptr %t54, null
%t56 = select i1 %t55, ptr @.str.75, ptr %t54
%t57 = call i32 (ptr, ...) @printf(ptr @.str.76, i32 %t53, ptr %t56)
%t58 = call i32 (ptr, ...) @printf(ptr @.str.77)
br label %endif102
else101:
%t59 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.78, i64 19, 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.79, 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 = extractvalue { ptr, i64, i64 } %t67, 1
%t69 = trunc i64 %t68 to i32
%t70 = extractvalue { ptr, i64, i64 } %t67, 0
%t71 = icmp eq ptr %t70, null
%t72 = select i1 %t71, ptr @.str.80, ptr %t70
%t73 = call i32 (ptr, ...) @printf(ptr @.str.81, i32 %t69, ptr %t72)
%t74 = call i32 (ptr, ...) @printf(ptr @.str.82)
br label %endif102
endif102:
%t75 = trunc i64 1 to i32
%t76 = call i32 @fflush(ptr null)
call void @exit(i32 %t75)
br label %endif99
endif99:
%t77 = load ptr, ptr %a1
%t78 = load { ptr, i64, i64 }, ptr %a2
%t79 = call { ptr, i64, i64 } @finch.main.textOfFile(ptr %t77, { ptr, i64, i64 } %t78)
store { ptr, i64, i64 } %t79, ptr %a80
%t81 = load ptr, ptr %a1
%t82 = icmp eq ptr %t81, null
br i1 %t82, label %panic103, label %ok104
panic103:
call void @finch_panic(ptr @.str.83, i64 100, ptr @.str.84)
unreachable
ok104:
%t83 = getelementptr inbounds %S.main.Loader, ptr %t81, i32 0, i32 1
%t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i32 0, i32 1
%t85 = load i64, ptr %t84
store i64 %t85, ptr %a86
%t87 = load ptr, ptr %a1
%t88 = icmp eq ptr %t87, null
br i1 %t88, label %panic105, label %ok106
panic105:
call void @finch_panic(ptr @.str.85, i64 101, ptr @.str.86)
unreachable
ok106:
%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 { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t91, ptr %a92
call void @finch_str_copy(ptr %a93, ptr %a92)
%t94 = load { ptr, i64, i64 }, ptr %a93
%t95 = load i64, ptr %t90
%t96 = add i64 %t95, 1
call void @finch_arr_reserve(ptr %t89, i64 %t96, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t97 = load ptr, ptr %t89
%t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %t97, i64 %t95
store { ptr, i64, i64 } %t94, ptr %t98
store i64 %t96, ptr %t90
%t99 = load { ptr, i64, i64 }, ptr %a80
%t100 = load { ptr, i64, i64 }, ptr %a2
%t101 = call { ptr, i64, i64 } @finch.lexer.lex({ ptr, i64, i64 } %t99, { ptr, i64, i64 } %t100)
%t102 = load i64, ptr %a86
%t103 = load { ptr, i64, i64 }, ptr %a2
%t104 = call %S.ast.Program @finch.parser.parse({ ptr, i64, i64 } %t101, i64 %t102, { ptr, i64, i64 } %t103)
store %S.ast.Program %t104, ptr %a105
%t106 = load { ptr, i64, i64 }, ptr %a3
%t107 = getelementptr inbounds %S.ast.Program, ptr %a105, i32 0, i32 0
store { ptr, i64, i64 } %t106, ptr %a108
call void @finch_str_copy(ptr %a109, ptr %a108)
%t110 = load { ptr, i64, i64 }, ptr %a109
store { ptr, i64, i64 } %t110, ptr %t107
%t111 = load { ptr, i64, i64 }, ptr %a2
%t112 = getelementptr inbounds %S.ast.Program, ptr %a105, i32 0, i32 1
store { ptr, i64, i64 } %t111, ptr %a113
call void @finch_str_copy(ptr %a114, ptr %a113)
%t115 = load { ptr, i64, i64 }, ptr %a114
store { ptr, i64, i64 } %t115, ptr %t112
%t116 = getelementptr inbounds %S.ast.Program, ptr %a105, i32 0, i32 2
%t117 = load { ptr, i64, i64 }, ptr %t116
store { ptr, i64, i64 } %t117, ptr %a118
call void @finch.copy.arr_str(ptr %a119, ptr %a118)
%t120 = load { ptr, i64, i64 }, ptr %a119
store { ptr, i64, i64 } %t120, ptr %a121
%t122 = load ptr, ptr %a1
%t123 = icmp eq ptr %t122, null
br i1 %t123, label %panic110, label %ok111
panic110:
call void @finch_panic(ptr @.str.87, i64 106, ptr @.str.88)
unreachable
ok111:
%t124 = getelementptr inbounds %S.main.Loader, ptr %t122, i32 0, i32 0
%t125 = getelementptr inbounds { ptr, i64, i64 }, ptr %t124, i32 0, i32 1
%t126 = load %S.ast.Program, ptr %a105
store %S.ast.Program %t126, ptr %a127
call void @finch.copy.S_ast_Program(ptr %a128, ptr %a127)
%t129 = load %S.ast.Program, 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 (%S.ast.Program, ptr null, i32 1) to i64))
%t132 = load ptr, ptr %t124
%t133 = getelementptr inbounds %S.ast.Program, ptr %t132, i64 %t130
store %S.ast.Program %t129, ptr %t133
store i64 %t131, ptr %t125
store i64 0, ptr %a134
br label %each.cond118
each.cond118:
%t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %a121, 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.body119, label %each.end121
each.body119:
%t139 = load ptr, ptr %a121
%t140 = getelementptr inbounds { ptr, i64, i64 }, ptr %t139, i64 %t137
%t141 = load { ptr, i64, i64 }, ptr %t140
store { ptr, i64, i64 } %t141, ptr %a142
%t143 = load ptr, ptr %a1
%t144 = icmp eq ptr %t143, null
br i1 %t144, label %panic122, label %ok123
panic122:
call void @finch_panic(ptr @.str.89, i64 108, ptr @.str.90)
unreachable
ok123:
%t145 = getelementptr inbounds %S.main.Loader, ptr %t143, i32 0, i32 2
%t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i32 0, i32 1
%t147 = load { ptr, i64, i64 }, ptr %a142
store i64 -1, ptr %a148
%t149 = load i64, ptr %t146
%t150 = load ptr, ptr %t145
store i64 0, ptr %a151
br label %find.cond124
find.cond124:
%t152 = load i64, ptr %a151
%t153 = icmp slt i64 %t152, %t149
br i1 %t153, label %find.body125, label %find.end128
find.body125:
%t154 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i64 %t152
%t155 = load { ptr, i64, i64 }, ptr %t154
store { ptr, i64, i64 } %t155, ptr %a156
store { ptr, i64, i64 } %t147, ptr %a157
%t158 = call i32 @finch_str_eq(ptr %a156, ptr %a157)
%t159 = icmp ne i32 %t158, 0
br i1 %t159, label %find.hit126, label %find.next127
find.hit126:
store i64 %t152, ptr %a148
br label %find.end128
find.next127:
%t160 = add i64 %t152, 1
store i64 %t160, ptr %a151
br label %find.cond124
find.end128:
%t161 = load i64, ptr %a148
%t162 = icmp sge i64 %t161, 0
%t163 = xor i1 %t162, true
br i1 %t163, label %then129, label %endif131
then129:
%t164 = load ptr, ptr %a1
%t165 = icmp eq ptr %t164, null
br i1 %t165, label %panic132, label %ok133
panic132:
call void @finch_panic(ptr @.str.91, i64 109, ptr @.str.92)
unreachable
ok133:
%t166 = getelementptr inbounds %S.main.Loader, ptr %t164, i32 0, i32 2
%t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %t166, i32 0, i32 1
%t168 = load { ptr, i64, i64 }, ptr %a142
store { ptr, i64, i64 } %t168, ptr %a169
call void @finch_str_copy(ptr %a170, ptr %a169)
%t171 = load { ptr, i64, i64 }, ptr %a170
%t172 = load i64, ptr %t167
%t173 = add i64 %t172, 1
call void @finch_arr_reserve(ptr %t166, i64 %t173, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t174 = load ptr, ptr %t166
%t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %t174, i64 %t172
store { ptr, i64, i64 } %t171, ptr %t175
store i64 %t173, ptr %t167
%t176 = load ptr, ptr %a1
%t177 = load ptr, ptr %a1
%t178 = load { ptr, i64, i64 }, ptr %a2
%t179 = load { ptr, i64, i64 }, ptr %a142
%t180 = call { ptr, i64, i64 } @finch.main.findModule(ptr %t177, { ptr, i64, i64 } %t178, { ptr, i64, i64 } %t179)
%t181 = load { ptr, i64, i64 }, ptr %a142
call void @finch.main.load(ptr %t176, { ptr, i64, i64 } %t180, { ptr, i64, i64 } %t181)
br label %endif131
endif131:
br label %each.step120
each.step120:
%t182 = load i64, ptr %a134
%t183 = add i64 %t182, 1
store i64 %t183, ptr %a134
br label %each.cond118
each.end121:
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 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 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
%a179 = 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
%a190 = alloca { ptr, i64, i64 }, align 16
%a191 = alloca { ptr, i64, i64 }, align 16
%a195 = alloca { ptr, i64, i64 }, align 16
%a196 = alloca { ptr, i64, i64 }, align 16
%a214 = alloca { ptr, i64, i64 }, align 16
%a215 = 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
%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
%a264 = alloca { ptr, i64, i64 }, align 16
%a265 = alloca { ptr, i64, i64 }, align 16
%a274 = alloca { ptr, i64, i64 }, align 16
%a275 = 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
%a305 = alloca { ptr, i64, i64 }, align 16
%a306 = alloca { ptr, i64, i64 }, align 16
%a319 = alloca { ptr, i64, i64 }, align 16
%a320 = alloca { ptr, i64, i64 }, align 16
%a329 = alloca { ptr, i64, i64 }, align 16
%a330 = alloca { ptr, i64, i64 }, align 16
%a334 = alloca { ptr, i64, i64 }, align 16
%a335 = alloca { ptr, i64, i64 }, align 16
%a352 = alloca { ptr, i64, i64 }, align 16
%a353 = alloca { ptr, i64, i64 }, align 16
%a358 = alloca { ptr, i64, i64 }, align 16
%a359 = alloca { ptr, i64, i64 }, align 16
%a364 = alloca { ptr, i64, i64 }, align 16
%a365 = alloca { ptr, i64, i64 }, align 16
%a375 = alloca %S.platform.Target, align 16
%a377 = alloca { ptr, i64, i64 }, align 16
%a378 = 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
%a389 = alloca { ptr, i64, i64 }, align 16
%a390 = alloca { ptr, i64, i64 }, align 16
%a391 = 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
%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
%a416 = alloca { ptr, i64, i64 }, align 16
%a417 = alloca { ptr, i64, i64 }, align 16
%a418 = 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
%a429 = alloca { ptr, i64, i64 }, align 16
%a430 = alloca { ptr, i64, i64 }, align 16
%a431 = alloca { ptr, i64, i64 }, align 16
%a433 = alloca %S.main.Loader, align 16
%a448 = alloca { ptr, i64, i64 }, align 16
%a449 = alloca { ptr, i64, i64 }, align 16
%a450 = 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
%a470 = alloca { ptr, i64, i64 }, align 16
%a471 = alloca { ptr, i64, i64 }, align 16
%a472 = alloca { ptr, i64, i64 }, align 16
%a483 = alloca { ptr, i64, i64 }, align 16
%a484 = alloca i64, align 16
%a492 = 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
%a502 = alloca { ptr, i64, i64 }, align 16
%a508 = alloca { ptr, i64, i64 }, align 16
%a509 = alloca { ptr, i64, i64 }, align 16
%a515 = alloca { ptr, i64, i64 }, align 16
%a516 = alloca { ptr, i64, i64 }, align 16
%a520 = alloca { ptr, i64, i64 }, align 16
%a521 = 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
%a535 = alloca i64, align 16
%a543 = alloca { ptr, i64, i64 }, align 16
%a550 = alloca { ptr, i64, i64 }, align 16
%a551 = 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
%a566 = 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
%a573 = alloca i64, align 16
%a581 = alloca %S.ast.Program, align 16
%a585 = alloca { ptr, i64, i64 }, align 16
%a588 = alloca i64, align 16
%a591 = alloca i64, align 16
%a596 = alloca { ptr, i64, i64 }, align 16
%a597 = alloca { ptr, i64, i64 }, align 16
%a606 = alloca { ptr, i64, i64 }, align 16
%a607 = alloca { ptr, i64, i64 }, align 16
%a616 = alloca i64, align 16
%a628 = alloca i64, align 16
%a631 = alloca i64, align 16
%a636 = alloca { ptr, i64, i64 }, align 16
%a637 = alloca { ptr, i64, i64 }, align 16
%a653 = alloca { ptr, i64, i64 }, align 16
%a654 = alloca { ptr, i64, i64 }, align 16
%a669 = alloca { ptr, i64, i64 }, align 16
%a670 = alloca { ptr, i64, i64 }, align 16
%a681 = alloca { ptr, i64, i64 }, align 16
%a682 = alloca { ptr, i64, i64 }, align 16
%a692 = alloca i64, align 16
%a700 = alloca { ptr, i64, i64 }, align 16
%a702 = alloca { ptr, i64, i64 }, align 16
%a703 = alloca { ptr, i64, i64 }, align 16
%a704 = 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
%a715 = alloca { ptr, i64, i64 }, align 16
%a716 = alloca { ptr, i64, i64 }, align 16
%a717 = 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
%a728 = alloca { ptr, i64, i64 }, align 16
%a729 = alloca { ptr, i64, i64 }, align 16
%a730 = alloca { ptr, i64, i64 }, align 16
%a738 = alloca { ptr, i64, i64 }, align 16
%a739 = alloca { ptr, i64, i64 }, align 16
%a749 = alloca { ptr, i64, i64 }, align 16
%a754 = alloca { ptr, i64, i64 }, align 16
%a755 = alloca { ptr, i64, i64 }, align 16
%a769 = alloca { ptr, i64, i64 }, align 16
%a778 = alloca %S.cimport.CImports, align 16
%a787 = alloca { ptr, i64, i64 }, align 16
%a788 = alloca { ptr, i64, i64 }, align 16
%a798 = alloca { ptr, i64, i64 }, align 16
%a800 = alloca { ptr, i64, i64 }, align 16
%a801 = alloca { ptr, i64, i64 }, align 16
%a805 = alloca %S.platform.Target, align 16
%a806 = alloca %S.platform.Target, align 16
%a810 = alloca { ptr, i64, i64 }, align 16
%a812 = alloca { ptr, i64, i64 }, align 16
%a813 = alloca { ptr, i64, i64 }, align 16
%a817 = alloca { ptr, i64, i64 }, align 16
%a818 = 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
%a839 = alloca { ptr, i64, i64 }, align 16
%a850 = 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
%a866 = alloca { ptr, i64, i64 }, align 16
%a867 = alloca { ptr, i64, i64 }, align 16
%a868 = alloca { ptr, i64, i64 }, align 16
%a871 = 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
%a891 = alloca { ptr, i64, i64 }, align 16
%a896 = alloca { ptr, i64, i64 }, align 16
%a907 = 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
%a916 = alloca { ptr, i64, i64 }, align 16
%a917 = alloca { ptr, i64, i64 }, align 16
%a921 = alloca { ptr, i64, i64 }, align 16
%a922 = alloca { ptr, i64, i64 }, align 16
%a926 = alloca { ptr, i64, i64 }, align 16
%a927 = alloca { ptr, i64, i64 }, align 16
%a931 = alloca { ptr, i64, i64 }, align 16
%a932 = alloca { ptr, i64, i64 }, align 16
%a936 = alloca { ptr, i64, i64 }, align 16
%a937 = alloca { ptr, i64, i64 }, align 16
%a943 = alloca { ptr, i64, i64 }, align 16
%a944 = alloca { ptr, i64, i64 }, align 16
%a952 = alloca { ptr, i64, i64 }, align 16
%a953 = alloca { ptr, i64, i64 }, align 16
%a956 = alloca { ptr, i64, i64 }, align 16
%a957 = alloca i64, align 16
%a965 = alloca { ptr, i64, i64 }, align 16
%a979 = alloca { ptr, i64, i64 }, align 16
%a980 = alloca { ptr, i64, i64 }, align 16
%a981 = 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
%a988 = alloca { ptr, i64, i64 }, align 16
%a989 = alloca { ptr, i64, i64 }, align 16
%a991 = alloca { ptr, i64, i64 }, align 16
%a992 = alloca { ptr, i64, i64 }, align 16
%a993 = alloca { ptr, i64, i64 }, align 16
%a995 = alloca { ptr, i64, i64 }, align 16
%a996 = alloca { ptr, i64, i64 }, align 16
%a998 = alloca i64, align 16
%a1001 = alloca { ptr, i64, i64 }, align 16
%a1002 = alloca { ptr, i64, i64 }, align 16
%a1003 = alloca { ptr, i64, i64 }, align 16
%a1005 = alloca { ptr, i64, i64 }, align 16
%a1006 = 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, 2
br label %logic.from134
logic.from134:
br i1 %t4, label %logic.rhs135, label %logic.end136
logic.rhs135:
%t5 = load { ptr, i64, i64 }, ptr %a1
%t6 = extractvalue { ptr, i64, i64 } %t5, 1
%t7 = icmp uge i64 1, %t6
br i1 %t7, label %range137, label %inrange138
range137:
call void @finch_panic_index(ptr @.str.145, i64 133, i64 1, i64 %t6)
unreachable
inrange138:
%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.146, 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.from139
logic.from139:
br i1 %t14, label %logic.end141, label %logic.rhs140
logic.rhs140:
%t15 = load { ptr, i64, i64 }, ptr %a1
%t16 = extractvalue { ptr, i64, i64 } %t15, 1
%t17 = icmp uge i64 1, %t16
br i1 %t17, label %range142, label %inrange143
range142:
call void @finch_panic_index(ptr @.str.147, i64 133, i64 1, i64 %t16)
unreachable
inrange143:
%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.148, 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.rend144
logic.rend144:
br label %logic.end141
logic.end141:
%t25 = phi i1 [ true, %logic.from139 ], [ %t24, %logic.rend144 ]
br label %logic.rend145
logic.rend145:
br label %logic.end136
logic.end136:
%t26 = phi i1 [ false, %logic.from134 ], [ %t25, %logic.rend145 ]
br i1 %t26, label %then146, label %endif148
then146:
%t27 = extractvalue { ptr, i64, i64 } { ptr @.str.149, i64 46, i64 0 }, 1
%t28 = trunc i64 %t27 to i32
%t29 = extractvalue { ptr, i64, i64 } { ptr @.str.149, i64 46, i64 0 }, 0
%t30 = icmp eq ptr %t29, null
%t31 = select i1 %t30, ptr @.str.150, ptr %t29
%t32 = call i32 (ptr, ...) @printf(ptr @.str.151, i32 %t28, ptr %t31)
%t33 = call i32 (ptr, ...) @printf(ptr @.str.152)
ret i64 0
endif148:
%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.from149
logic.from149:
br i1 %t36, label %logic.rhs150, label %logic.end151
logic.rhs150:
%t37 = load { ptr, i64, i64 }, ptr %a1
%t38 = extractvalue { ptr, i64, i64 } %t37, 1
%t39 = icmp uge i64 1, %t38
br i1 %t39, label %range152, label %inrange153
range152:
call void @finch_panic_index(ptr @.str.153, i64 137, i64 1, i64 %t38)
unreachable
inrange153:
%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.154, 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.rend154
logic.rend154:
br label %logic.end151
logic.end151:
%t47 = phi i1 [ false, %logic.from149 ], [ %t46, %logic.rend154 ]
br i1 %t47, label %then155, label %endif157
then155:
%t48 = load { ptr, i64, i64 }, ptr %a1
%t49 = extractvalue { ptr, i64, i64 } %t48, 1
%t50 = icmp uge i64 0, %t49
br i1 %t50, label %range158, label %inrange159
range158:
call void @finch_panic_index(ptr @.str.155, i64 138, i64 0, i64 %t49)
unreachable
inrange159:
%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
endif157:
%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 %then160, label %endif162
then160:
call void @finch.main.usage()
br label %endif162
endif162:
%t58 = load { ptr, i64, i64 }, ptr %a1
%t59 = extractvalue { ptr, i64, i64 } %t58, 1
%t60 = icmp uge i64 1, %t59
br i1 %t60, label %range163, label %inrange164
range163:
call void @finch_panic_index(ptr @.str.156, i64 143, i64 1, i64 %t59)
unreachable
inrange164:
%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 %range165, label %inrange166
range165:
call void @finch_panic_index(ptr @.str.157, i64 144, i64 2, i64 %t69)
unreachable
inrange166:
%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.158, 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.from167
logic.from167:
br i1 %t82, label %logic.rhs168, label %logic.end169
logic.rhs168:
%t83 = load { ptr, i64, i64 }, ptr %a67
store { ptr, i64, i64 } %t83, ptr %a84
store { ptr, i64, i64 } { ptr @.str.159, 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.rend170
logic.rend170:
br label %logic.end169
logic.end169:
%t88 = phi i1 [ false, %logic.from167 ], [ %t87, %logic.rend170 ]
br label %logic.from171
logic.from171:
br i1 %t88, label %logic.rhs172, label %logic.end173
logic.rhs172:
%t89 = load { ptr, i64, i64 }, ptr %a67
store { ptr, i64, i64 } %t89, ptr %a90
store { ptr, i64, i64 } { ptr @.str.160, 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.rend174
logic.rend174:
br label %logic.end173
logic.end173:
%t94 = phi i1 [ false, %logic.from171 ], [ %t93, %logic.rend174 ]
br label %logic.from175
logic.from175:
br i1 %t94, label %logic.rhs176, label %logic.end177
logic.rhs176:
%t95 = load { ptr, i64, i64 }, ptr %a67
store { ptr, i64, i64 } %t95, ptr %a96
store { ptr, i64, i64 } { ptr @.str.161, 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.rend178
logic.rend178:
br label %logic.end177
logic.end177:
%t100 = phi i1 [ false, %logic.from175 ], [ %t99, %logic.rend178 ]
br i1 %t100, label %then179, label %endif181
then179:
call void @finch.main.usage()
br label %endif181
endif181:
%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.162, i64 0, i64 0 }, ptr %a107
store { ptr, i64, i64 } { ptr @.str.163, 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.cond182
while.cond182:
%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.body183, label %while.end184
while.body183:
%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 %range185, label %inrange186
range185:
call void @finch_panic_index(ptr @.str.164, i64 161, i64 %t119, i64 %t121)
unreachable
inrange186:
%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.165, 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.from187
logic.from187:
br i1 %t134, label %logic.rhs188, label %logic.end189
logic.rhs188:
%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.rend190
logic.rend190:
br label %logic.end189
logic.end189:
%t138 = phi i1 [ false, %logic.from187 ], [ %t137, %logic.rend190 ]
br i1 %t138, label %then191, label %else192
then191:
%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 %endif193
else192:
%t148 = load { ptr, i64, i64 }, ptr %a129
store { ptr, i64, i64 } %t148, ptr %a149
store { ptr, i64, i64 } { ptr @.str.166, 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.from194
logic.from194:
br i1 %t152, label %logic.rhs195, label %logic.end196
logic.rhs195:
%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.rend197
logic.rend197:
br label %logic.end196
logic.end196:
%t158 = phi i1 [ false, %logic.from194 ], [ %t157, %logic.rend197 ]
br label %logic.from198
logic.from198:
br i1 %t158, label %logic.rhs199, label %logic.end200
logic.rhs199:
%t159 = load { ptr, i64, i64 }, ptr %a67
store { ptr, i64, i64 } %t159, ptr %a160
store { ptr, i64, i64 } { ptr @.str.167, 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.rend201
logic.rend201:
br label %logic.end200
logic.end200:
%t164 = phi i1 [ false, %logic.from198 ], [ %t163, %logic.rend201 ]
br i1 %t164, label %then202, label %else203
then202:
%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 %range205, label %inrange206
range205:
call void @finch_panic_index(ptr @.str.168, i64 165, i64 %t166, i64 %t168)
unreachable
inrange206:
%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
store { ptr, i64, i64 } %t175, ptr %a103
store i1 true, ptr %a104
%t176 = load i64, ptr %a114
%t177 = add i64 %t176, 1
store i64 %t177, ptr %a114
br label %endif204
else203:
%t178 = load { ptr, i64, i64 }, ptr %a129
store { ptr, i64, i64 } %t178, ptr %a179
store { ptr, i64, i64 } { ptr @.str.169, i64 8, i64 0 }, ptr %a180
%t181 = call i32 @finch_str_eq(ptr %a179, ptr %a180)
%t182 = icmp ne i32 %t181, 0
br label %logic.from207
logic.from207:
br i1 %t182, label %logic.rhs208, label %logic.end209
logic.rhs208:
%t183 = load { ptr, i64, i64 }, ptr %a67
store { ptr, i64, i64 } %t183, ptr %a184
store { ptr, i64, i64 } { ptr @.str.170, i64 5, i64 0 }, ptr %a185
%t186 = call i32 @finch_str_eq(ptr %a184, ptr %a185)
%t187 = icmp ne i32 %t186, 0
br label %logic.rend210
logic.rend210:
br label %logic.end209
logic.end209:
%t188 = phi i1 [ false, %logic.from207 ], [ %t187, %logic.rend210 ]
br i1 %t188, label %then211, label %else212
then211:
store i1 true, ptr %a105
br label %endif213
else212:
%t189 = load { ptr, i64, i64 }, ptr %a129
store { ptr, i64, i64 } %t189, ptr %a190
store { ptr, i64, i64 } { ptr @.str.171, 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 %then214, label %else215
then214:
store { ptr, i64, i64 } { ptr @.str.172, i64 3, i64 0 }, ptr %a108
br label %endif216
else215:
%t194 = load { ptr, i64, i64 }, ptr %a129
store { ptr, i64, i64 } %t194, ptr %a195
store { ptr, i64, i64 } { ptr @.str.173, i64 2, i64 0 }, ptr %a196
%t197 = call i32 @finch_str_eq(ptr %a195, ptr %a196)
%t198 = icmp ne i32 %t197, 0
br label %logic.from217
logic.from217:
br i1 %t198, label %logic.rhs218, label %logic.end219
logic.rhs218:
%t199 = load i64, ptr %a114
%t200 = add i64 %t199, 1
%t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1
%t202 = load i64, ptr %t201
%t203 = icmp slt i64 %t200, %t202
br label %logic.rend220
logic.rend220:
br label %logic.end219
logic.end219:
%t204 = phi i1 [ false, %logic.from217 ], [ %t203, %logic.rend220 ]
br i1 %t204, label %then221, label %else222
then221:
%t205 = getelementptr inbounds { ptr, i64, i64 }, ptr %a109, i32 0, i32 1
%t206 = load i64, ptr %a114
%t207 = add i64 %t206, 1
%t208 = load { ptr, i64, i64 }, ptr %a1
%t209 = extractvalue { ptr, i64, i64 } %t208, 1
%t210 = icmp uge i64 %t207, %t209
br i1 %t210, label %range224, label %inrange225
range224:
call void @finch_panic_index(ptr @.str.174, i64 173, i64 %t207, i64 %t209)
unreachable
inrange225:
%t211 = extractvalue { ptr, i64, i64 } %t208, 0
%t212 = getelementptr inbounds { ptr, i64, i64 }, ptr %t211, i64 %t207
%t213 = load { ptr, i64, i64 }, ptr %t212
store { ptr, i64, i64 } %t213, ptr %a214
call void @finch_str_copy(ptr %a215, ptr %a214)
%t216 = load { ptr, i64, i64 }, ptr %a215
%t217 = load i64, ptr %t205
%t218 = add i64 %t217, 1
call void @finch_arr_reserve(ptr %a109, i64 %t218, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t219 = load ptr, ptr %a109
%t220 = getelementptr inbounds { ptr, i64, i64 }, ptr %t219, i64 %t217
store { ptr, i64, i64 } %t216, ptr %t220
store i64 %t218, ptr %t205
%t221 = load i64, ptr %a114
%t222 = add i64 %t221, 1
store i64 %t222, ptr %a114
br label %endif223
else222:
%t223 = load { ptr, i64, i64 }, ptr %a129
store { ptr, i64, i64 } %t223, ptr %a224
store { ptr, i64, i64 } { ptr @.str.176, i64 2, i64 0 }, ptr %a226
%t227 = call i32 @finch_str_starts(ptr %a224, ptr %a226)
%t228 = icmp ne i32 %t227, 0
br label %logic.from226
logic.from226:
br i1 %t228, label %logic.rhs227, label %logic.end228
logic.rhs227:
%t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1
%t230 = load i64, ptr %t229
%t231 = icmp sgt i64 %t230, 2
br label %logic.rend229
logic.rend229:
br label %logic.end228
logic.end228:
%t232 = phi i1 [ false, %logic.from226 ], [ %t231, %logic.rend229 ]
br i1 %t232, label %then230, label %else231
then230:
%t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %a109, i32 0, i32 1
%t234 = load { ptr, i64, i64 }, ptr %a129
store { ptr, i64, i64 } %t234, ptr %a235
%t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1
%t238 = load i64, ptr %t237
call void @finch_str_sub(ptr %a236, ptr %a235, i64 2, i64 %t238, ptr @.str.177, i64 176)
%t239 = load { ptr, i64, i64 }, ptr %a236
%t240 = load i64, ptr %t233
%t241 = add i64 %t240, 1
call void @finch_arr_reserve(ptr %a109, i64 %t241, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t242 = load ptr, ptr %a109
%t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i64 %t240
store { ptr, i64, i64 } %t239, ptr %t243
store i64 %t241, ptr %t233
br label %endif232
else231:
%t244 = load { ptr, i64, i64 }, ptr %a129
store { ptr, i64, i64 } %t244, ptr %a245
store { ptr, i64, i64 } { ptr @.str.178, i64 2, i64 0 }, ptr %a246
%t247 = call i32 @finch_str_eq(ptr %a245, ptr %a246)
%t248 = icmp ne i32 %t247, 0
br label %logic.from233
logic.from233:
br i1 %t248, label %logic.rhs234, label %logic.end235
logic.rhs234:
%t249 = load i64, ptr %a114
%t250 = add i64 %t249, 1
%t251 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1
%t252 = load i64, ptr %t251
%t253 = icmp slt i64 %t250, %t252
br label %logic.rend236
logic.rend236:
br label %logic.end235
logic.end235:
%t254 = phi i1 [ false, %logic.from233 ], [ %t253, %logic.rend236 ]
br i1 %t254, label %then237, label %else238
then237:
%t255 = getelementptr inbounds { ptr, i64, i64 }, ptr %a110, i32 0, i32 1
%t256 = load i64, ptr %a114
%t257 = add i64 %t256, 1
%t258 = load { ptr, i64, i64 }, ptr %a1
%t259 = extractvalue { ptr, i64, i64 } %t258, 1
%t260 = icmp uge i64 %t257, %t259
br i1 %t260, label %range240, label %inrange241
range240:
call void @finch_panic_index(ptr @.str.179, i64 178, i64 %t257, i64 %t259)
unreachable
inrange241:
%t261 = extractvalue { ptr, i64, i64 } %t258, 0
%t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t261, i64 %t257
%t263 = load { ptr, i64, i64 }, ptr %t262
store { ptr, i64, i64 } %t263, ptr %a264
call void @finch_str_copy(ptr %a265, ptr %a264)
%t266 = load { ptr, i64, i64 }, ptr %a265
%t267 = load i64, ptr %t255
%t268 = add i64 %t267, 1
call void @finch_arr_reserve(ptr %a110, i64 %t268, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t269 = load ptr, ptr %a110
%t270 = getelementptr inbounds { ptr, i64, i64 }, ptr %t269, i64 %t267
store { ptr, i64, i64 } %t266, ptr %t270
store i64 %t268, ptr %t255
%t271 = load i64, ptr %a114
%t272 = add i64 %t271, 1
store i64 %t272, ptr %a114
br label %endif239
else238:
%t273 = load { ptr, i64, i64 }, ptr %a129
store { ptr, i64, i64 } %t273, ptr %a274
store { ptr, i64, i64 } { ptr @.str.180, i64 9, i64 0 }, ptr %a275
%t276 = call i32 @finch_str_eq(ptr %a274, ptr %a275)
%t277 = icmp ne i32 %t276, 0
br label %logic.from242
logic.from242:
br i1 %t277, label %logic.rhs243, label %logic.end244
logic.rhs243:
%t278 = load i64, ptr %a114
%t279 = add i64 %t278, 1
%t280 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1
%t281 = load i64, ptr %t280
%t282 = icmp slt i64 %t279, %t281
br label %logic.rend245
logic.rend245:
br label %logic.end244
logic.end244:
%t283 = phi i1 [ false, %logic.from242 ], [ %t282, %logic.rend245 ]
br i1 %t283, label %then246, label %else247
then246:
%t284 = load i64, ptr %a114
%t285 = add i64 %t284, 1
%t286 = load { ptr, i64, i64 }, ptr %a1
%t287 = extractvalue { ptr, i64, i64 } %t286, 1
%t288 = icmp uge i64 %t285, %t287
br i1 %t288, label %range249, label %inrange250
range249:
call void @finch_panic_index(ptr @.str.181, i64 181, i64 %t285, i64 %t287)
unreachable
inrange250:
%t289 = extractvalue { ptr, i64, i64 } %t286, 0
%t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t289, i64 %t285
%t291 = load { ptr, i64, i64 }, ptr %t290
store { ptr, i64, i64 } %t291, ptr %a292
store { ptr, i64, i64 } { ptr @.str.183, i64 1, i64 0 }, ptr %a294
call void @finch_str_split(ptr %a295, ptr %a292, ptr %a294)
%t296 = load { ptr, i64, i64 }, ptr %a295
store { ptr, i64, i64 } %t296, ptr %a297
%t298 = getelementptr inbounds { ptr, i64, i64 }, ptr %a111, i32 0, i32 1
%t299 = load { ptr, i64, i64 }, ptr %a297
%t300 = extractvalue { ptr, i64, i64 } %t299, 1
%t301 = icmp uge i64 0, %t300
br i1 %t301, label %range251, label %inrange252
range251:
call void @finch_panic_index(ptr @.str.184, i64 182, i64 0, i64 %t300)
unreachable
inrange252:
%t302 = extractvalue { ptr, i64, i64 } %t299, 0
%t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t302, i64 0
%t304 = load { ptr, i64, i64 }, ptr %t303
store { ptr, i64, i64 } %t304, ptr %a305
call void @finch_str_copy(ptr %a306, ptr %a305)
%t307 = load { ptr, i64, i64 }, ptr %a306
%t308 = load i64, ptr %t298
%t309 = add i64 %t308, 1
call void @finch_arr_reserve(ptr %a111, i64 %t309, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t310 = load ptr, ptr %a111
%t311 = getelementptr inbounds { ptr, i64, i64 }, ptr %t310, i64 %t308
store { ptr, i64, i64 } %t307, ptr %t311
store i64 %t309, ptr %t298
%t312 = getelementptr inbounds { ptr, i64, i64 }, ptr %a112, i32 0, i32 1
%t313 = load { ptr, i64, i64 }, ptr %a297
%t314 = extractvalue { ptr, i64, i64 } %t313, 1
%t315 = icmp uge i64 1, %t314
br i1 %t315, label %range253, label %inrange254
range253:
call void @finch_panic_index(ptr @.str.185, i64 183, i64 1, i64 %t314)
unreachable
inrange254:
%t316 = extractvalue { ptr, i64, i64 } %t313, 0
%t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t316, i64 1
%t318 = load { ptr, i64, i64 }, ptr %t317
store { ptr, i64, i64 } %t318, ptr %a319
call void @finch_str_copy(ptr %a320, ptr %a319)
%t321 = load { ptr, i64, i64 }, ptr %a320
%t322 = load i64, ptr %t312
%t323 = add i64 %t322, 1
call void @finch_arr_reserve(ptr %a112, i64 %t323, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t324 = load ptr, ptr %a112
%t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %t324, i64 %t322
store { ptr, i64, i64 } %t321, ptr %t325
store i64 %t323, ptr %t312
%t326 = load i64, ptr %a114
%t327 = add i64 %t326, 1
store i64 %t327, ptr %a114
br label %endif248
else247:
%t328 = load { ptr, i64, i64 }, ptr %a129
store { ptr, i64, i64 } %t328, ptr %a329
store { ptr, i64, i64 } { ptr @.str.186, i64 2, i64 0 }, ptr %a330
%t331 = call i32 @finch_str_eq(ptr %a329, ptr %a330)
%t332 = icmp ne i32 %t331, 0
br i1 %t332, label %then255, label %else256
then255:
store i1 true, ptr %a106
br label %endif257
else256:
%t333 = load { ptr, i64, i64 }, ptr %a129
store { ptr, i64, i64 } %t333, ptr %a334
store { ptr, i64, i64 } { ptr @.str.187, i64 8, i64 0 }, ptr %a335
%t336 = call i32 @finch_str_eq(ptr %a334, ptr %a335)
%t337 = icmp ne i32 %t336, 0
br label %logic.from258
logic.from258:
br i1 %t337, label %logic.rhs259, label %logic.end260
logic.rhs259:
%t338 = load i64, ptr %a114
%t339 = add i64 %t338, 1
%t340 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1
%t341 = load i64, ptr %t340
%t342 = icmp slt i64 %t339, %t341
br label %logic.rend261
logic.rend261:
br label %logic.end260
logic.end260:
%t343 = phi i1 [ false, %logic.from258 ], [ %t342, %logic.rend261 ]
br i1 %t343, label %then262, label %else263
then262:
%t344 = load i64, ptr %a114
%t345 = add i64 %t344, 1
%t346 = load { ptr, i64, i64 }, ptr %a1
%t347 = extractvalue { ptr, i64, i64 } %t346, 1
%t348 = icmp uge i64 %t345, %t347
br i1 %t348, label %range265, label %inrange266
range265:
call void @finch_panic_index(ptr @.str.188, i64 188, i64 %t345, i64 %t347)
unreachable
inrange266:
%t349 = extractvalue { ptr, i64, i64 } %t346, 0
%t350 = getelementptr inbounds { ptr, i64, i64 }, ptr %t349, i64 %t345
%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
store { ptr, i64, i64 } %t354, ptr %a107
%t355 = load i64, ptr %a114
%t356 = add i64 %t355, 1
store i64 %t356, ptr %a114
br label %endif264
else263:
%t357 = load { ptr, i64, i64 }, ptr %a67
store { ptr, i64, i64 } %t357, ptr %a358
store { ptr, i64, i64 } { ptr @.str.189, i64 3, i64 0 }, ptr %a359
%t360 = call i32 @finch_str_eq(ptr %a358, ptr %a359)
%t361 = icmp ne i32 %t360, 0
br i1 %t361, label %then267, label %else268
then267:
%t362 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1
%t363 = load { ptr, i64, i64 }, ptr %a129
store { ptr, i64, i64 } %t363, ptr %a364
call void @finch_str_copy(ptr %a365, ptr %a364)
%t366 = load { ptr, i64, i64 }, ptr %a365
%t367 = load i64, ptr %t362
%t368 = add i64 %t367, 1
call void @finch_arr_reserve(ptr %a113, i64 %t368, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t369 = load ptr, ptr %a113
%t370 = getelementptr inbounds { ptr, i64, i64 }, ptr %t369, i64 %t367
store { ptr, i64, i64 } %t366, ptr %t370
store i64 %t368, ptr %t362
br label %endif269
else268:
call void @finch.main.usage()
br label %endif269
endif269:
br label %endif264
endif264:
br label %endif257
endif257:
br label %endif248
endif248:
br label %endif239
endif239:
br label %endif232
endif232:
br label %endif223
endif223:
br label %endif216
endif216:
br label %endif213
endif213:
br label %endif204
endif204:
br label %endif193
endif193:
%t371 = load i64, ptr %a114
%t372 = add i64 %t371, 1
store i64 %t372, ptr %a114
br label %while.cond182
while.end184:
%t373 = load { ptr, i64, i64 }, ptr %a107
%t374 = call %S.platform.Target @finch.platform.select({ ptr, i64, i64 } %t373)
store %S.platform.Target %t374, ptr %a375
%t376 = load { ptr, i64, i64 }, ptr %a67
store { ptr, i64, i64 } %t376, ptr %a377
store { ptr, i64, i64 } { ptr @.str.190, i64 3, i64 0 }, ptr %a378
%t379 = call i32 @finch_str_eq(ptr %a377, ptr %a378)
%t380 = icmp ne i32 %t379, 0
br i1 %t380, label %then270, label %else271
then270:
%t381 = load { ptr, i64, i64 }, ptr %a77
%t382 = call { ptr, i64, i64 } @finch.main.stem({ ptr, i64, i64 } %t381)
store { ptr, i64, i64 } { ptr @.str.191, i64 15, i64 0 }, ptr %a384
store { ptr, i64, i64 } %t382, ptr %a385
call void @finch_str_concat(ptr %a383, ptr %a384, ptr %a385)
%t386 = load { ptr, i64, i64 }, ptr %a383
%t387 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 6
%t388 = load { ptr, i64, i64 }, ptr %t387
store { ptr, i64, i64 } %t386, 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 %a103
br label %endif272
else271:
%t393 = load i1, ptr %a105
br label %logic.from273
logic.from273:
br i1 %t393, label %logic.rhs274, label %logic.end275
logic.rhs274:
%t394 = load i1, ptr %a104
%t395 = xor i1 %t394, true
br label %logic.rend276
logic.rend276:
br label %logic.end275
logic.end275:
%t396 = phi i1 [ false, %logic.from273 ], [ %t395, %logic.rend276 ]
br i1 %t396, label %then277, label %else278
then277:
%t397 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 1
%t398 = load i1, ptr %t397
br i1 %t398, label %then280, label %else281
then280:
%t399 = load { ptr, i64, i64 }, ptr %a103
store { ptr, i64, i64 } %t399, ptr %a401
store { ptr, i64, i64 } { ptr @.str.192, i64 4, i64 0 }, ptr %a402
call void @finch_str_concat(ptr %a400, ptr %a401, ptr %a402)
%t403 = load { ptr, i64, i64 }, ptr %a400
store { ptr, i64, i64 } %t403, ptr %a103
br label %endif282
else281:
%t404 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 3
%t405 = load i1, ptr %t404
br i1 %t405, label %then283, label %else284
then283:
%t406 = load { ptr, i64, i64 }, ptr %a103
store { ptr, i64, i64 } { ptr @.str.193, i64 3, 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.194, i64 6, i64 0 }, ptr %a413
call void @finch_str_concat(ptr %a411, ptr %a412, ptr %a413)
%t414 = load { ptr, i64, i64 }, ptr %a411
store { ptr, i64, i64 } %t414, ptr %a103
br label %endif285
else284:
%t415 = load { ptr, i64, i64 }, ptr %a103
store { ptr, i64, i64 } { ptr @.str.195, i64 3, i64 0 }, ptr %a417
store { ptr, i64, i64 } %t415, ptr %a418
call void @finch_str_concat(ptr %a416, ptr %a417, ptr %a418)
%t419 = load { ptr, i64, i64 }, ptr %a416
store { ptr, i64, i64 } %t419, ptr %a421
store { ptr, i64, i64 } { ptr @.str.196, i64 3, i64 0 }, ptr %a422
call void @finch_str_concat(ptr %a420, ptr %a421, ptr %a422)
%t423 = load { ptr, i64, i64 }, ptr %a420
store { ptr, i64, i64 } %t423, ptr %a103
br label %endif285
endif285:
br label %endif282
endif282:
br label %endif279
else278:
%t424 = load i1, ptr %a104
%t425 = xor i1 %t424, true
br i1 %t425, label %then286, label %endif288
then286:
%t426 = load { ptr, i64, i64 }, ptr %a103
%t427 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 6
%t428 = load { ptr, i64, i64 }, ptr %t427
store { ptr, i64, i64 } %t426, ptr %a430
store { ptr, i64, i64 } %t428, ptr %a431
call void @finch_str_concat(ptr %a429, ptr %a430, ptr %a431)
%t432 = load { ptr, i64, i64 }, ptr %a429
store { ptr, i64, i64 } %t432, ptr %a103
br label %endif288
endif288:
br label %endif279
endif279:
br label %endif272
endif272:
store %S.main.Loader zeroinitializer, ptr %a433
%t434 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 3
store { ptr, i64, i64 } { ptr @.str.197, i64 5, i64 0 }, ptr %t434
%t435 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 1
%t436 = load i1, ptr %t435
br i1 %t436, label %then289, label %else290
then289:
%t437 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 3
store { ptr, i64, i64 } { ptr @.str.198, i64 7, i64 0 }, ptr %t437
br label %endif291
else290:
%t438 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 3
%t439 = load i1, ptr %t438
br i1 %t439, label %then292, label %endif294
then292:
%t440 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 3
store { ptr, i64, i64 } { ptr @.str.199, i64 5, i64 0 }, ptr %t440
br label %endif294
endif294:
br label %endif291
endif291:
%t441 = load { ptr, i64, i64 }, ptr %a1
%t442 = extractvalue { ptr, i64, i64 } %t441, 1
%t443 = icmp uge i64 0, %t442
br i1 %t443, label %range295, label %inrange296
range295:
call void @finch_panic_index(ptr @.str.200, i64 219, i64 0, i64 %t442)
unreachable
inrange296:
%t444 = extractvalue { ptr, i64, i64 } %t441, 0
%t445 = getelementptr inbounds { ptr, i64, i64 }, ptr %t444, i64 0
%t446 = load { ptr, i64, i64 }, ptr %t445
%t447 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t446)
store { ptr, i64, i64 } %t447, ptr %a449
store { ptr, i64, i64 } { ptr @.str.201, i64 7, i64 0 }, ptr %a450
call void @finch_str_concat(ptr %a448, ptr %a449, ptr %a450)
%t451 = load { ptr, i64, i64 }, ptr %a448
%t452 = load { ptr, i64, i64 }, ptr %a1
%t453 = extractvalue { ptr, i64, i64 } %t452, 1
%t454 = icmp uge i64 0, %t453
br i1 %t454, label %range297, label %inrange298
range297:
call void @finch_panic_index(ptr @.str.202, i64 219, i64 0, i64 %t453)
unreachable
inrange298:
%t455 = extractvalue { ptr, i64, i64 } %t452, 0
%t456 = getelementptr inbounds { ptr, i64, i64 }, ptr %t455, i64 0
%t457 = load { ptr, i64, i64 }, ptr %t456
%t458 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t457)
store { ptr, i64, i64 } %t458, ptr %a460
store { ptr, i64, i64 } { ptr @.str.203, i64 4, i64 0 }, ptr %a461
call void @finch_str_concat(ptr %a459, ptr %a460, ptr %a461)
%t462 = load { ptr, i64, i64 }, ptr %a459
%t463 = load { ptr, i64, i64 }, ptr %a1
%t464 = extractvalue { ptr, i64, i64 } %t463, 1
%t465 = icmp uge i64 0, %t464
br i1 %t465, label %range299, label %inrange300
range299:
call void @finch_panic_index(ptr @.str.204, i64 219, i64 0, i64 %t464)
unreachable
inrange300:
%t466 = extractvalue { ptr, i64, i64 } %t463, 0
%t467 = getelementptr inbounds { ptr, i64, i64 }, ptr %t466, i64 0
%t468 = load { ptr, i64, i64 }, ptr %t467
%t469 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t468)
store { ptr, i64, i64 } %t469, ptr %a471
store { ptr, i64, i64 } { ptr @.str.205, i64 19, i64 0 }, ptr %a472
call void @finch_str_concat(ptr %a470, ptr %a471, ptr %a472)
%t473 = load { ptr, i64, i64 }, ptr %a470
%t474 = mul i64 4, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)
%t475 = call ptr @finch_alloc(i64 %t474)
%t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i64 0
store { ptr, i64, i64 } %t451, ptr %t476
%t477 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i64 1
store { ptr, i64, i64 } %t462, ptr %t477
%t478 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i64 2
store { ptr, i64, i64 } %t473, ptr %t478
%t479 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i64 3
store { ptr, i64, i64 } { ptr @.str.206, i64 3, i64 0 }, ptr %t479
%t480 = insertvalue { ptr, i64, i64 } undef, ptr %t475, 0
%t481 = insertvalue { ptr, i64, i64 } %t480, i64 4, 1
%t482 = insertvalue { ptr, i64, i64 } %t481, i64 4, 2
store { ptr, i64, i64 } %t482, ptr %a483
store i64 0, ptr %a484
br label %each.cond301
each.cond301:
%t485 = getelementptr inbounds { ptr, i64, i64 }, ptr %a483, i32 0, i32 1
%t486 = load i64, ptr %t485
%t487 = load i64, ptr %a484
%t488 = icmp slt i64 %t487, %t486
br i1 %t488, label %each.body302, label %each.end304
each.body302:
%t489 = load ptr, ptr %a483
%t490 = getelementptr inbounds { ptr, i64, i64 }, ptr %t489, i64 %t487
%t491 = load { ptr, i64, i64 }, ptr %t490
store { ptr, i64, i64 } %t491, ptr %a492
%t493 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 4
%t494 = getelementptr inbounds { ptr, i64, i64 }, ptr %t493, i32 0, i32 1
%t495 = load i64, ptr %t494
%t496 = icmp eq i64 %t495, 0
br label %logic.from305
logic.from305:
br i1 %t496, label %logic.rhs306, label %logic.end307
logic.rhs306:
%t497 = load { ptr, i64, i64 }, ptr %a492
store { ptr, i64, i64 } %t497, ptr %a499
store { ptr, i64, i64 } { ptr @.str.207, i64 9, i64 0 }, ptr %a500
call void @finch_str_concat(ptr %a498, ptr %a499, ptr %a500)
%t501 = load { ptr, i64, i64 }, ptr %a498
store { ptr, i64, i64 } %t501, ptr %a502
%t503 = call i32 @finch_file_exists(ptr %a502)
%t504 = icmp ne i32 %t503, 0
br label %logic.rend308
logic.rend308:
br label %logic.end307
logic.end307:
%t505 = phi i1 [ false, %logic.from305 ], [ %t504, %logic.rend308 ]
br i1 %t505, label %then309, label %endif311
then309:
%t506 = load { ptr, i64, i64 }, ptr %a492
%t507 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 4
store { ptr, i64, i64 } %t506, ptr %a508
call void @finch_str_copy(ptr %a509, ptr %a508)
%t510 = load { ptr, i64, i64 }, ptr %a509
store { ptr, i64, i64 } %t510, ptr %t507
br label %endif311
endif311:
br label %each.step303
each.step303:
%t511 = load i64, ptr %a484
%t512 = add i64 %t511, 1
store i64 %t512, ptr %a484
br label %each.cond301
each.end304:
%t513 = load { ptr, i64, i64 }, ptr %a111
%t514 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 6
store { ptr, i64, i64 } %t513, ptr %a515
call void @finch.copy.arr_str(ptr %a516, ptr %a515)
%t517 = load { ptr, i64, i64 }, ptr %a516
store { ptr, i64, i64 } %t517, ptr %t514
%t518 = load { ptr, i64, i64 }, ptr %a112
%t519 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 7
store { ptr, i64, i64 } %t518, ptr %a520
call void @finch.copy.arr_str(ptr %a521, ptr %a520)
%t522 = load { ptr, i64, i64 }, ptr %a521
store { ptr, i64, i64 } %t522, ptr %t519
%t523 = extractvalue { ptr, i64, i64 } { ptr @.str.208, i64 10, i64 0 }, 0
%t524 = icmp eq ptr %t523, null
%t525 = select i1 %t524, ptr @.str.209, ptr %t523
%t526 = call ptr @getenv(ptr %t525)
store { ptr, i64, i64 } zeroinitializer, ptr %a527
call void @finch_str_from_c(ptr %a527, ptr %t526)
%t528 = load { ptr, i64, i64 }, ptr %a527
store { ptr, i64, i64 } %t528, ptr %a529
store { ptr, i64, i64 } { ptr @.str.211, i64 1, i64 0 }, ptr %a531
call void @finch_str_split(ptr %a532, ptr %a529, ptr %a531)
%t533 = load { ptr, i64, i64 }, ptr %a532
store { ptr, i64, i64 } %t533, ptr %a534
store i64 0, ptr %a535
br label %each.cond312
each.cond312:
%t536 = getelementptr inbounds { ptr, i64, i64 }, ptr %a534, i32 0, i32 1
%t537 = load i64, ptr %t536
%t538 = load i64, ptr %a535
%t539 = icmp slt i64 %t538, %t537
br i1 %t539, label %each.body313, label %each.end315
each.body313:
%t540 = load ptr, ptr %a534
%t541 = getelementptr inbounds { ptr, i64, i64 }, ptr %t540, i64 %t538
%t542 = load { ptr, i64, i64 }, ptr %t541
store { ptr, i64, i64 } %t542, ptr %a543
%t544 = getelementptr inbounds { ptr, i64, i64 }, ptr %a543, i32 0, i32 1
%t545 = load i64, ptr %t544
%t546 = icmp sgt i64 %t545, 0
br i1 %t546, label %then316, label %endif318
then316:
%t547 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 5
%t548 = getelementptr inbounds { ptr, i64, i64 }, ptr %t547, i32 0, i32 1
%t549 = load { ptr, i64, i64 }, ptr %a543
store { ptr, i64, i64 } %t549, ptr %a550
call void @finch_str_copy(ptr %a551, ptr %a550)
%t552 = load { ptr, i64, i64 }, ptr %a551
%t553 = load i64, ptr %t548
%t554 = add i64 %t553, 1
call void @finch_arr_reserve(ptr %t547, i64 %t554, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t555 = load ptr, ptr %t547
%t556 = getelementptr inbounds { ptr, i64, i64 }, ptr %t555, i64 %t553
store { ptr, i64, i64 } %t552, ptr %t556
store i64 %t554, ptr %t548
br label %endif318
endif318:
br label %each.step314
each.step314:
%t557 = load i64, ptr %a535
%t558 = add i64 %t557, 1
store i64 %t558, ptr %a535
br label %each.cond312
each.end315:
%t559 = load { ptr, i64, i64 }, ptr %a77
call void @finch.main.load(ptr %a433, { ptr, i64, i64 } %t559, { ptr, i64, i64 } { ptr @.str.212, i64 0, i64 0 })
store { ptr, i64, i64 } zeroinitializer, ptr %a560
store { ptr, i64, i64 } zeroinitializer, ptr %a561
%t562 = load { ptr, i64, i64 }, ptr %a110
store { ptr, i64, i64 } %t562, ptr %a563
call void @finch.copy.arr_str(ptr %a564, ptr %a563)
%t565 = load { ptr, i64, i64 }, ptr %a564
store { ptr, i64, i64 } %t565, ptr %a566
%t567 = load { ptr, i64, i64 }, ptr %a109
store { ptr, i64, i64 } %t567, ptr %a568
call void @finch.copy.arr_str(ptr %a569, ptr %a568)
%t570 = load { ptr, i64, i64 }, ptr %a569
store { ptr, i64, i64 } %t570, ptr %a571
%t572 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 0
store i64 0, ptr %a573
br label %each.cond319
each.cond319:
%t574 = getelementptr inbounds { ptr, i64, i64 }, ptr %t572, i32 0, i32 1
%t575 = load i64, ptr %t574
%t576 = load i64, ptr %a573
%t577 = icmp slt i64 %t576, %t575
br i1 %t577, label %each.body320, label %each.end322
each.body320:
%t578 = load ptr, ptr %t572
%t579 = getelementptr inbounds %S.ast.Program, ptr %t578, i64 %t576
%t580 = load %S.ast.Program, ptr %t579
store %S.ast.Program %t580, ptr %a581
%t582 = getelementptr inbounds %S.ast.Program, ptr %a581, i32 0, i32 1
%t583 = load { ptr, i64, i64 }, ptr %t582
%t584 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t583)
store { ptr, i64, i64 } %t584, ptr %a585
%t586 = getelementptr inbounds { ptr, i64, i64 }, ptr %a566, i32 0, i32 1
%t587 = load { ptr, i64, i64 }, ptr %a585
store i64 -1, ptr %a588
%t589 = load i64, ptr %t586
%t590 = load ptr, ptr %a566
store i64 0, ptr %a591
br label %find.cond323
find.cond323:
%t592 = load i64, ptr %a591
%t593 = icmp slt i64 %t592, %t589
br i1 %t593, label %find.body324, label %find.end327
find.body324:
%t594 = getelementptr inbounds { ptr, i64, i64 }, ptr %t590, i64 %t592
%t595 = load { ptr, i64, i64 }, ptr %t594
store { ptr, i64, i64 } %t595, ptr %a596
store { ptr, i64, i64 } %t587, ptr %a597
%t598 = call i32 @finch_str_eq(ptr %a596, ptr %a597)
%t599 = icmp ne i32 %t598, 0
br i1 %t599, label %find.hit325, label %find.next326
find.hit325:
store i64 %t592, ptr %a588
br label %find.end327
find.next326:
%t600 = add i64 %t592, 1
store i64 %t600, ptr %a591
br label %find.cond323
find.end327:
%t601 = load i64, ptr %a588
%t602 = icmp sge i64 %t601, 0
%t603 = xor i1 %t602, true
br i1 %t603, label %then328, label %endif330
then328:
%t604 = getelementptr inbounds { ptr, i64, i64 }, ptr %a566, i32 0, i32 1
%t605 = load { ptr, i64, i64 }, ptr %a585
store { ptr, i64, i64 } %t605, ptr %a606
call void @finch_str_copy(ptr %a607, ptr %a606)
%t608 = load { ptr, i64, i64 }, ptr %a607
%t609 = load i64, ptr %t604
%t610 = add i64 %t609, 1
call void @finch_arr_reserve(ptr %a566, i64 %t610, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t611 = load ptr, ptr %a566
%t612 = getelementptr inbounds { ptr, i64, i64 }, ptr %t611, i64 %t609
store { ptr, i64, i64 } %t608, ptr %t612
store i64 %t610, ptr %t604
br label %endif330
endif330:
%t613 = getelementptr inbounds %S.ast.Program, ptr %a581, i32 0, i32 3
%t614 = getelementptr inbounds { ptr, i64, i64 }, ptr %t613, i32 0, i32 1
%t615 = load i64, ptr %t614
store i64 0, ptr %a616
br label %for.cond331
for.cond331:
%t617 = load i64, ptr %a616
%t618 = icmp slt i64 %t617, %t615
br i1 %t618, label %for.body332, label %for.end334
for.body332:
%t619 = getelementptr inbounds { ptr, i64, i64 }, ptr %a561, i32 0, i32 1
%t620 = getelementptr inbounds %S.ast.Program, ptr %a581, i32 0, i32 3
%t621 = load i64, ptr %a616
%t622 = load { ptr, i64, i64 }, ptr %t620
%t623 = extractvalue { ptr, i64, i64 } %t622, 1
%t624 = icmp uge i64 %t621, %t623
br i1 %t624, label %range335, label %inrange336
range335:
call void @finch_panic_index(ptr @.str.213, i64 244, i64 %t621, i64 %t623)
unreachable
inrange336:
%t625 = extractvalue { ptr, i64, i64 } %t622, 0
%t626 = getelementptr inbounds { ptr, i64, i64 }, ptr %t625, i64 %t621
%t627 = load { ptr, i64, i64 }, ptr %t626
store i64 -1, ptr %a628
%t629 = load i64, ptr %t619
%t630 = load ptr, ptr %a561
store i64 0, ptr %a631
br label %find.cond337
find.cond337:
%t632 = load i64, ptr %a631
%t633 = icmp slt i64 %t632, %t629
br i1 %t633, label %find.body338, label %find.end341
find.body338:
%t634 = getelementptr inbounds { ptr, i64, i64 }, ptr %t630, i64 %t632
%t635 = load { ptr, i64, i64 }, ptr %t634
store { ptr, i64, i64 } %t635, ptr %a636
store { ptr, i64, i64 } %t627, ptr %a637
%t638 = call i32 @finch_str_eq(ptr %a636, ptr %a637)
%t639 = icmp ne i32 %t638, 0
br i1 %t639, label %find.hit339, label %find.next340
find.hit339:
store i64 %t632, ptr %a628
br label %find.end341
find.next340:
%t640 = add i64 %t632, 1
store i64 %t640, ptr %a631
br label %find.cond337
find.end341:
%t641 = load i64, ptr %a628
%t642 = icmp sge i64 %t641, 0
%t643 = xor i1 %t642, true
br i1 %t643, label %then342, label %endif344
then342:
%t644 = getelementptr inbounds { ptr, i64, i64 }, ptr %a561, i32 0, i32 1
%t645 = getelementptr inbounds %S.ast.Program, ptr %a581, i32 0, i32 3
%t646 = load i64, ptr %a616
%t647 = load { ptr, i64, i64 }, ptr %t645
%t648 = extractvalue { ptr, i64, i64 } %t647, 1
%t649 = icmp uge i64 %t646, %t648
br i1 %t649, label %range345, label %inrange346
range345:
call void @finch_panic_index(ptr @.str.214, i64 245, i64 %t646, i64 %t648)
unreachable
inrange346:
%t650 = extractvalue { ptr, i64, i64 } %t647, 0
%t651 = getelementptr inbounds { ptr, i64, i64 }, ptr %t650, i64 %t646
%t652 = load { ptr, i64, i64 }, ptr %t651
store { ptr, i64, i64 } %t652, ptr %a653
call void @finch_str_copy(ptr %a654, ptr %a653)
%t655 = load { ptr, i64, i64 }, ptr %a654
%t656 = load i64, ptr %t644
%t657 = add i64 %t656, 1
call void @finch_arr_reserve(ptr %a561, i64 %t657, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t658 = load ptr, ptr %a561
%t659 = getelementptr inbounds { ptr, i64, i64 }, ptr %t658, i64 %t656
store { ptr, i64, i64 } %t655, ptr %t659
store i64 %t657, ptr %t644
%t660 = getelementptr inbounds { ptr, i64, i64 }, ptr %a560, i32 0, i32 1
%t661 = getelementptr inbounds %S.ast.Program, ptr %a581, i32 0, i32 3
%t662 = load i64, ptr %a616
%t663 = load { ptr, i64, i64 }, ptr %t661
%t664 = extractvalue { ptr, i64, i64 } %t663, 1
%t665 = icmp uge i64 %t662, %t664
br i1 %t665, label %range347, label %inrange348
range347:
call void @finch_panic_index(ptr @.str.215, i64 246, i64 %t662, i64 %t664)
unreachable
inrange348:
%t666 = extractvalue { ptr, i64, i64 } %t663, 0
%t667 = getelementptr inbounds { ptr, i64, i64 }, ptr %t666, i64 %t662
%t668 = load { ptr, i64, i64 }, ptr %t667
store { ptr, i64, i64 } %t668, ptr %a669
call void @finch_str_copy(ptr %a670, ptr %a669)
%t671 = load { ptr, i64, i64 }, ptr %a670
%t672 = insertvalue %S.cimport.Header zeroinitializer, { ptr, i64, i64 } %t671, 0
%t673 = getelementptr inbounds %S.ast.Program, ptr %a581, i32 0, i32 4
%t674 = load i64, ptr %a616
%t675 = load { ptr, i64, i64 }, ptr %t673
%t676 = extractvalue { ptr, i64, i64 } %t675, 1
%t677 = icmp uge i64 %t674, %t676
br i1 %t677, label %range349, label %inrange350
range349:
call void @finch_panic_index(ptr @.str.216, i64 246, i64 %t674, i64 %t676)
unreachable
inrange350:
%t678 = extractvalue { ptr, i64, i64 } %t675, 0
%t679 = getelementptr inbounds { ptr, i64, i64 }, ptr %t678, i64 %t674
%t680 = load { ptr, i64, i64 }, ptr %t679
store { ptr, i64, i64 } %t680, ptr %a681
call void @finch_str_copy(ptr %a682, ptr %a681)
%t683 = load { ptr, i64, i64 }, ptr %a682
%t684 = insertvalue %S.cimport.Header %t672, { ptr, i64, i64 } %t683, 1
%t685 = load i64, ptr %t660
%t686 = add i64 %t685, 1
call void @finch_arr_reserve(ptr %a560, i64 %t686, i64 ptrtoint (ptr getelementptr (%S.cimport.Header, ptr null, i32 1) to i64))
%t687 = load ptr, ptr %a560
%t688 = getelementptr inbounds %S.cimport.Header, ptr %t687, i64 %t685
store %S.cimport.Header %t684, ptr %t688
store i64 %t686, ptr %t660
br label %endif344
endif344:
br label %for.step333
for.step333:
%t689 = load i64, ptr %a616
%t690 = add i64 %t689, 1
store i64 %t690, ptr %a616
br label %for.cond331
for.end334:
%t691 = getelementptr inbounds %S.ast.Program, ptr %a581, i32 0, i32 5
store i64 0, ptr %a692
br label %each.cond351
each.cond351:
%t693 = getelementptr inbounds { ptr, i64, i64 }, ptr %t691, i32 0, i32 1
%t694 = load i64, ptr %t693
%t695 = load i64, ptr %a692
%t696 = icmp slt i64 %t695, %t694
br i1 %t696, label %each.body352, label %each.end354
each.body352:
%t697 = load ptr, ptr %t691
%t698 = getelementptr inbounds { ptr, i64, i64 }, ptr %t697, i64 %t695
%t699 = load { ptr, i64, i64 }, ptr %t698
store { ptr, i64, i64 } %t699, ptr %a700
%t701 = load { ptr, i64, i64 }, ptr %a700
store { ptr, i64, i64 } %t701, ptr %a702
store { ptr, i64, i64 } { ptr @.str.218, i64 2, i64 0 }, ptr %a704
%t705 = call i32 @finch_str_ends(ptr %a702, ptr %a704)
%t706 = icmp ne i32 %t705, 0
br label %logic.from355
logic.from355:
br i1 %t706, label %logic.end357, label %logic.rhs356
logic.rhs356:
%t707 = load { ptr, i64, i64 }, ptr %a700
store { ptr, i64, i64 } %t707, ptr %a708
store { ptr, i64, i64 } { ptr @.str.220, i64 2, i64 0 }, ptr %a710
%t711 = call i32 @finch_str_ends(ptr %a708, ptr %a710)
%t712 = icmp ne i32 %t711, 0
br label %logic.rend358
logic.rend358:
br label %logic.end357
logic.end357:
%t713 = phi i1 [ true, %logic.from355 ], [ %t712, %logic.rend358 ]
br label %logic.from359
logic.from359:
br i1 %t713, label %logic.end361, label %logic.rhs360
logic.rhs360:
%t714 = load { ptr, i64, i64 }, ptr %a700
store { ptr, i64, i64 } %t714, ptr %a715
store { ptr, i64, i64 } { ptr @.str.222, i64 2, i64 0 }, ptr %a717
%t718 = call i32 @finch_str_ends(ptr %a715, ptr %a717)
%t719 = icmp ne i32 %t718, 0
br label %logic.rend362
logic.rend362:
br label %logic.end361
logic.end361:
%t720 = phi i1 [ true, %logic.from359 ], [ %t719, %logic.rend362 ]
br i1 %t720, label %then363, label %else364
then363:
%t721 = getelementptr inbounds { ptr, i64, i64 }, ptr %a571, i32 0, i32 1
%t722 = load { ptr, i64, i64 }, ptr %a585
store { ptr, i64, i64 } %t722, ptr %a724
store { ptr, i64, i64 } { ptr @.str.223, i64 1, i64 0 }, ptr %a725
call void @finch_str_concat(ptr %a723, ptr %a724, ptr %a725)
%t726 = load { ptr, i64, i64 }, ptr %a723
%t727 = load { ptr, i64, i64 }, ptr %a700
store { ptr, i64, i64 } %t726, 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
%t732 = load i64, ptr %t721
%t733 = add i64 %t732, 1
call void @finch_arr_reserve(ptr %a571, i64 %t733, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t734 = load ptr, ptr %a571
%t735 = getelementptr inbounds { ptr, i64, i64 }, ptr %t734, i64 %t732
store { ptr, i64, i64 } %t731, ptr %t735
store i64 %t733, ptr %t721
br label %endif365
else364:
%t736 = getelementptr inbounds { ptr, i64, i64 }, ptr %a571, i32 0, i32 1
%t737 = load { ptr, i64, i64 }, ptr %a700
store { ptr, i64, i64 } %t737, ptr %a738
call void @finch_str_copy(ptr %a739, ptr %a738)
%t740 = load { ptr, i64, i64 }, ptr %a739
%t741 = load i64, ptr %t736
%t742 = add i64 %t741, 1
call void @finch_arr_reserve(ptr %a571, i64 %t742, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t743 = load ptr, ptr %a571
%t744 = getelementptr inbounds { ptr, i64, i64 }, ptr %t743, i64 %t741
store { ptr, i64, i64 } %t740, ptr %t744
store i64 %t742, ptr %t736
br label %endif365
endif365:
br label %each.step353
each.step353:
%t745 = load i64, ptr %a692
%t746 = add i64 %t745, 1
store i64 %t746, ptr %a692
br label %each.cond351
each.end354:
br label %each.step321
each.step321:
%t747 = load i64, ptr %a573
%t748 = add i64 %t747, 1
store i64 %t748, ptr %a573
br label %each.cond319
each.end322:
store { ptr, i64, i64 } { ptr @.str.224, i64 0, i64 0 }, ptr %a749
%t750 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 5
%t751 = load i1, ptr %t750
br i1 %t751, label %then366, label %endif368
then366:
%t752 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 0
%t753 = load { ptr, i64, i64 }, ptr %t752
store { ptr, i64, i64 } %t753, ptr %a754
call void @finch_str_copy(ptr %a755, ptr %a754)
%t756 = load { ptr, i64, i64 }, ptr %a755
store { ptr, i64, i64 } %t756, ptr %a749
br label %endif368
endif368:
%t757 = load { ptr, i64, i64 }, ptr %a560
%t758 = load { ptr, i64, i64 }, ptr %a566
%t759 = load { ptr, i64, i64 }, ptr %a749
%t760 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 1
%t761 = load i1, ptr %t760
%t762 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 7
%t763 = load { ptr, i64, i64 }, ptr %t762
%t764 = call { i1, %S.cimport.CImports, { ptr, i64, i64 } } @finch.cimport.importHeaders({ ptr, i64, i64 } %t757, { ptr, i64, i64 } %t758, { ptr, i64, i64 } %t759, i1 %t761, { ptr, i64, i64 } %t763)
%t765 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t764, 0
%t766 = xor i1 %t765, true
%t767 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t764, 2
%t768 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t764, 1
br i1 %t766, label %or.failed369, label %or.ok370
or.failed369:
store { ptr, i64, i64 } %t767, ptr %a769
%t770 = load { ptr, i64, i64 }, ptr %a769
%t771 = extractvalue { ptr, i64, i64 } %t770, 1
%t772 = trunc i64 %t771 to i32
%t773 = extractvalue { ptr, i64, i64 } %t770, 0
%t774 = icmp eq ptr %t773, null
%t775 = select i1 %t774, ptr @.str.225, ptr %t773
%t776 = call i32 (ptr, ...) @printf(ptr @.str.226, i32 %t772, ptr %t775)
%t777 = call i32 (ptr, ...) @printf(ptr @.str.227)
ret i64 1
or.ok370:
store %S.cimport.CImports %t768, ptr %a778
%t779 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 0
%t780 = load { ptr, i64, i64 }, ptr %t779
%t781 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 1
%t782 = load { ptr, i64, i64 }, ptr %t781
%t783 = load %S.cimport.CImports, ptr %a778
%t784 = load i1, ptr %a105
%t785 = insertvalue %S.gen.Options zeroinitializer, i1 %t784, 0
%t786 = load { ptr, i64, i64 }, ptr %a67
store { ptr, i64, i64 } %t786, ptr %a787
store { ptr, i64, i64 } { ptr @.str.228, i64 5, i64 0 }, ptr %a788
%t789 = call i32 @finch_str_eq(ptr %a787, ptr %a788)
%t790 = icmp ne i32 %t789, 0
%t791 = insertvalue %S.gen.Options %t785, i1 %t790, 1
%t792 = load i1, ptr %a106
%t793 = insertvalue %S.gen.Options %t791, i1 %t792, 2
%t794 = extractvalue { ptr, i64, i64 } { ptr @.str.229, i64 3, i64 0 }, 0
%t795 = icmp eq ptr %t794, null
%t796 = select i1 %t795, ptr @.str.230, ptr %t794
%t797 = call ptr @getenv(ptr %t796)
store { ptr, i64, i64 } zeroinitializer, ptr %a798
call void @finch_str_from_c(ptr %a798, ptr %t797)
%t799 = load { ptr, i64, i64 }, ptr %a798
store { ptr, i64, i64 } %t799, ptr %a800
call void @finch_str_copy(ptr %a801, ptr %a800)
%t802 = load { ptr, i64, i64 }, ptr %a801
%t803 = insertvalue %S.gen.Options %t793, { ptr, i64, i64 } %t802, 3
%t804 = load %S.platform.Target, ptr %a375
store %S.platform.Target %t804, ptr %a805
call void @finch.copy.S_platform_Target(ptr %a806, ptr %a805)
%t807 = load %S.platform.Target, ptr %a806
%t808 = insertvalue %S.gen.Options %t803, %S.platform.Target %t807, 4
%t809 = call { ptr, i64, i64 } @finch.gen.generate({ ptr, i64, i64 } %t780, { ptr, i64, i64 } %t782, %S.cimport.CImports %t783, %S.gen.Options %t808)
store { ptr, i64, i64 } %t809, ptr %a810
%t811 = load { ptr, i64, i64 }, ptr %a67
store { ptr, i64, i64 } %t811, ptr %a812
store { ptr, i64, i64 } { ptr @.str.231, i64 2, i64 0 }, ptr %a813
%t814 = call i32 @finch_str_eq(ptr %a812, ptr %a813)
%t815 = icmp ne i32 %t814, 0
br label %logic.from371
logic.from371:
br i1 %t815, label %logic.end373, label %logic.rhs372
logic.rhs372:
%t816 = load { ptr, i64, i64 }, ptr %a67
store { ptr, i64, i64 } %t816, ptr %a817
store { ptr, i64, i64 } { ptr @.str.232, i64 5, i64 0 }, ptr %a818
%t819 = call i32 @finch_str_eq(ptr %a817, ptr %a818)
%t820 = icmp ne i32 %t819, 0
br label %logic.rend374
logic.rend374:
br label %logic.end373
logic.end373:
%t821 = phi i1 [ true, %logic.from371 ], [ %t820, %logic.rend374 ]
br i1 %t821, label %then375, label %endif377
then375:
%t822 = load { ptr, i64, i64 }, ptr %a810
%t823 = extractvalue { ptr, i64, i64 } %t822, 1
%t824 = trunc i64 %t823 to i32
%t825 = extractvalue { ptr, i64, i64 } %t822, 0
%t826 = icmp eq ptr %t825, null
%t827 = select i1 %t826, ptr @.str.233, ptr %t825
%t828 = call i32 (ptr, ...) @printf(ptr @.str.234, i32 %t824, ptr %t827)
%t829 = call i32 (ptr, ...) @printf(ptr @.str.235)
ret i64 0
endif377:
%t830 = extractvalue { ptr, i64, i64 } { ptr @.str.236, i64 8, i64 0 }, 0
%t831 = icmp eq ptr %t830, null
%t832 = select i1 %t831, ptr @.str.237, ptr %t830
%t833 = call ptr @getenv(ptr %t832)
store { ptr, i64, i64 } zeroinitializer, ptr %a834
call void @finch_str_from_c(ptr %a834, ptr %t833)
%t835 = load { ptr, i64, i64 }, ptr %a834
store { ptr, i64, i64 } %t835, ptr %a836
call void @finch_str_copy(ptr %a837, ptr %a836)
%t838 = load { ptr, i64, i64 }, ptr %a837
store { ptr, i64, i64 } %t838, ptr %a839
%t840 = getelementptr inbounds { ptr, i64, i64 }, ptr %a839, i32 0, i32 1
%t841 = load i64, ptr %t840
%t842 = icmp eq i64 %t841, 0
br i1 %t842, label %then378, label %endif380
then378:
%t843 = load { ptr, i64, i64 }, ptr %a1
%t844 = extractvalue { ptr, i64, i64 } %t843, 1
%t845 = icmp uge i64 0, %t844
br i1 %t845, label %range381, label %inrange382
range381:
call void @finch_panic_index(ptr @.str.238, i64 274, i64 0, i64 %t844)
unreachable
inrange382:
%t846 = extractvalue { ptr, i64, i64 } %t843, 0
%t847 = getelementptr inbounds { ptr, i64, i64 }, ptr %t846, i64 0
%t848 = load { ptr, i64, i64 }, ptr %t847
%t849 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t848)
store { ptr, i64, i64 } %t849, ptr %a851
store { ptr, i64, i64 } { ptr @.str.239, i64 22, i64 0 }, ptr %a852
call void @finch_str_concat(ptr %a850, ptr %a851, ptr %a852)
%t853 = load { ptr, i64, i64 }, ptr %a850
store { ptr, i64, i64 } %t853, ptr %a839
br label %endif380
endif380:
%t854 = load { ptr, i64, i64 }, ptr %a839
store { ptr, i64, i64 } %t854, ptr %a855
%t856 = call i32 @finch_file_exists(ptr %a855)
%t857 = icmp ne i32 %t856, 0
%t858 = xor i1 %t857, true
br i1 %t858, label %then383, label %endif385
then383:
%t859 = load { ptr, i64, i64 }, ptr %a1
%t860 = extractvalue { ptr, i64, i64 } %t859, 1
%t861 = icmp uge i64 0, %t860
br i1 %t861, label %range386, label %inrange387
range386:
call void @finch_panic_index(ptr @.str.240, i64 277, i64 0, i64 %t860)
unreachable
inrange387:
%t862 = extractvalue { ptr, i64, i64 } %t859, 0
%t863 = getelementptr inbounds { ptr, i64, i64 }, ptr %t862, i64 0
%t864 = load { ptr, i64, i64 }, ptr %t863
%t865 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t864)
store { ptr, i64, i64 } %t865, ptr %a867
store { ptr, i64, i64 } { ptr @.str.241, i64 19, i64 0 }, ptr %a868
call void @finch_str_concat(ptr %a866, ptr %a867, ptr %a868)
%t869 = load { ptr, i64, i64 }, ptr %a866
store { ptr, i64, i64 } %t869, ptr %a839
br label %endif385
endif385:
%t870 = load { ptr, i64, i64 }, ptr %a839
store { ptr, i64, i64 } %t870, ptr %a871
%t872 = call i32 @finch_file_exists(ptr %a871)
%t873 = icmp ne i32 %t872, 0
%t874 = xor i1 %t873, true
br i1 %t874, label %then388, label %endif390
then388:
%t875 = load { ptr, i64, i64 }, ptr %a1
%t876 = extractvalue { ptr, i64, i64 } %t875, 1
%t877 = icmp uge i64 0, %t876
br i1 %t877, label %range391, label %inrange392
range391:
call void @finch_panic_index(ptr @.str.242, i64 280, i64 0, i64 %t876)
unreachable
inrange392:
%t878 = extractvalue { ptr, i64, i64 } %t875, 0
%t879 = getelementptr inbounds { ptr, i64, i64 }, ptr %t878, i64 0
%t880 = load { ptr, i64, i64 }, ptr %t879
%t881 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t880)
store { ptr, i64, i64 } %t881, ptr %a883
store { ptr, i64, i64 } { ptr @.str.243, i64 34, i64 0 }, ptr %a884
call void @finch_str_concat(ptr %a882, ptr %a883, ptr %a884)
%t885 = load { ptr, i64, i64 }, ptr %a882
store { ptr, i64, i64 } %t885, ptr %a839
br label %endif390
endif390:
%t886 = load { ptr, i64, i64 }, ptr %a839
store { ptr, i64, i64 } %t886, ptr %a887
%t888 = call i32 @finch_file_exists(ptr %a887)
%t889 = icmp ne i32 %t888, 0
%t890 = xor i1 %t889, true
br label %logic.from393
logic.from393:
br i1 %t890, label %logic.rhs394, label %logic.end395
logic.rhs394:
store { ptr, i64, i64 } { ptr @.str.244, i64 18, i64 0 }, ptr %a891
%t892 = call i32 @finch_file_exists(ptr %a891)
%t893 = icmp ne i32 %t892, 0
br label %logic.rend396
logic.rend396:
br label %logic.end395
logic.end395:
%t894 = phi i1 [ false, %logic.from393 ], [ %t893, %logic.rend396 ]
br i1 %t894, label %then397, label %endif399
then397:
store { ptr, i64, i64 } { ptr @.str.245, i64 18, i64 0 }, ptr %a839
br label %endif399
endif399:
%t895 = load { ptr, i64, i64 }, ptr %a839
store { ptr, i64, i64 } %t895, ptr %a896
%t897 = call i32 @finch_file_exists(ptr %a896)
%t898 = icmp ne i32 %t897, 0
%t899 = xor i1 %t898, true
br i1 %t899, label %then400, label %endif402
then400:
%t900 = extractvalue { ptr, i64, i64 } { ptr @.str.246, i64 56, i64 0 }, 1
%t901 = trunc i64 %t900 to i32
%t902 = extractvalue { ptr, i64, i64 } { ptr @.str.246, i64 56, i64 0 }, 0
%t903 = icmp eq ptr %t902, null
%t904 = select i1 %t903, ptr @.str.247, ptr %t902
%t905 = call i32 (ptr, ...) @printf(ptr @.str.248, i32 %t901, ptr %t904)
%t906 = call i32 (ptr, ...) @printf(ptr @.str.249)
ret i64 1
endif402:
store { ptr, i64, i64 } { ptr @.str.250, i64 0, i64 0 }, ptr %a907
%t908 = load i1, ptr %a105
br i1 %t908, label %then403, label %endif405
then403:
store { ptr, i64, i64 } { ptr @.str.251, i64 6, i64 0 }, ptr %a907
br label %endif405
endif405:
%t909 = load i1, ptr %a106
br i1 %t909, label %then406, label %endif408
then406:
%t910 = load { ptr, i64, i64 }, ptr %a907
store { ptr, i64, i64 } %t910, ptr %a912
store { ptr, i64, i64 } { ptr @.str.252, i64 3, i64 0 }, ptr %a913
call void @finch_str_concat(ptr %a911, ptr %a912, ptr %a913)
%t914 = load { ptr, i64, i64 }, ptr %a911
store { ptr, i64, i64 } %t914, ptr %a907
br label %endif408
endif408:
%t915 = load { ptr, i64, i64 }, ptr %a103
store { ptr, i64, i64 } %t915, ptr %a916
call void @finch_str_copy(ptr %a917, ptr %a916)
%t918 = load { ptr, i64, i64 }, ptr %a917
%t919 = insertvalue %S.linker.Build zeroinitializer, { ptr, i64, i64 } %t918, 0
%t920 = load { ptr, i64, i64 }, ptr %a810
store { ptr, i64, i64 } %t920, ptr %a921
call void @finch_str_copy(ptr %a922, ptr %a921)
%t923 = load { ptr, i64, i64 }, ptr %a922
%t924 = insertvalue %S.linker.Build %t919, { ptr, i64, i64 } %t923, 1
%t925 = load { ptr, i64, i64 }, ptr %a839
store { ptr, i64, i64 } %t925, ptr %a926
call void @finch_str_copy(ptr %a927, ptr %a926)
%t928 = load { ptr, i64, i64 }, ptr %a927
%t929 = insertvalue %S.linker.Build %t924, { ptr, i64, i64 } %t928, 2
%t930 = load { ptr, i64, i64 }, ptr %a108
store { ptr, i64, i64 } %t930, ptr %a931
call void @finch_str_copy(ptr %a932, ptr %a931)
%t933 = load { ptr, i64, i64 }, ptr %a932
%t934 = insertvalue %S.linker.Build %t929, { ptr, i64, i64 } %t933, 3
%t935 = load { ptr, i64, i64 }, ptr %a907
store { ptr, i64, i64 } %t935, ptr %a936
call void @finch_str_copy(ptr %a937, ptr %a936)
%t938 = load { ptr, i64, i64 }, ptr %a937
%t939 = insertvalue %S.linker.Build %t934, { ptr, i64, i64 } %t938, 4
%t940 = load i1, ptr %a105
%t941 = insertvalue %S.linker.Build %t939, i1 %t940, 5
%t942 = load { ptr, i64, i64 }, ptr %a571
store { ptr, i64, i64 } %t942, ptr %a943
call void @finch.copy.arr_str(ptr %a944, ptr %a943)
%t945 = load { ptr, i64, i64 }, ptr %a944
%t946 = insertvalue %S.linker.Build %t941, { ptr, i64, i64 } %t945, 6
%t947 = load %S.platform.Target, ptr %a375
%t948 = load %S.cimport.CImports, ptr %a778
%t949 = call i64 @finch.linker.build(%S.linker.Build %t946, %S.platform.Target %t947, %S.cimport.CImports %t948)
%t950 = icmp ne i64 %t949, 0
br i1 %t950, label %then409, label %endif411
then409:
ret i64 1
endif411:
%t951 = load { ptr, i64, i64 }, ptr %a67
store { ptr, i64, i64 } %t951, ptr %a952
store { ptr, i64, i64 } { ptr @.str.253, i64 3, i64 0 }, ptr %a953
%t954 = call i32 @finch_str_eq(ptr %a952, ptr %a953)
%t955 = icmp ne i32 %t954, 0
br i1 %t955, label %then412, label %endif414
then412:
store { ptr, i64, i64 } zeroinitializer, ptr %a956
store i64 0, ptr %a957
br label %each.cond415
each.cond415:
%t958 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1
%t959 = load i64, ptr %t958
%t960 = load i64, ptr %a957
%t961 = icmp slt i64 %t960, %t959
br i1 %t961, label %each.body416, label %each.end418
each.body416:
%t962 = load ptr, ptr %a113
%t963 = getelementptr inbounds { ptr, i64, i64 }, ptr %t962, i64 %t960
%t964 = load { ptr, i64, i64 }, ptr %t963
store { ptr, i64, i64 } %t964, ptr %a965
%t966 = getelementptr inbounds { ptr, i64, i64 }, ptr %a956, i32 0, i32 1
%t967 = load { ptr, i64, i64 }, ptr %a965
%t968 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t967)
%t969 = load i64, ptr %t966
%t970 = add i64 %t969, 1
call void @finch_arr_reserve(ptr %a956, i64 %t970, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t971 = load ptr, ptr %a956
%t972 = getelementptr inbounds { ptr, i64, i64 }, ptr %t971, i64 %t969
store { ptr, i64, i64 } %t968, ptr %t972
store i64 %t970, ptr %t966
br label %each.step417
each.step417:
%t973 = load i64, ptr %a957
%t974 = add i64 %t973, 1
store i64 %t974, ptr %a957
br label %each.cond415
each.end418:
%t975 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 8
%t976 = load { ptr, i64, i64 }, ptr %t975
%t977 = load { ptr, i64, i64 }, ptr %a103
%t978 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t977)
store { ptr, i64, i64 } %t976, ptr %a980
store { ptr, i64, i64 } %t978, ptr %a981
call void @finch_str_concat(ptr %a979, ptr %a980, ptr %a981)
%t982 = load { ptr, i64, i64 }, ptr %a979
store { ptr, i64, i64 } %t982, ptr %a984
store { ptr, i64, i64 } { ptr @.str.254, i64 1, i64 0 }, ptr %a985
call void @finch_str_concat(ptr %a983, ptr %a984, ptr %a985)
%t986 = load { ptr, i64, i64 }, ptr %a983
%t987 = getelementptr inbounds { ptr, i64, i64 }, ptr %a956, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.255, i64 1, i64 0 }, ptr %a988
call void @finch_str_join(ptr %a989, ptr %a956, ptr %a988)
%t990 = load { ptr, i64, i64 }, ptr %a989
store { ptr, i64, i64 } %t986, ptr %a992
store { ptr, i64, i64 } %t990, ptr %a993
call void @finch_str_concat(ptr %a991, ptr %a992, ptr %a993)
%t994 = load { ptr, i64, i64 }, ptr %a991
store { ptr, i64, i64 } %t994, ptr %a996
call void @finch_str_copy(ptr %a995, ptr %a996)
%t997 = call i64 @finch_shell(ptr %a995)
store i64 %t997, ptr %a998
%t999 = load { ptr, i64, i64 }, ptr %a103
%t1000 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t999)
store { ptr, i64, i64 } { ptr @.str.256, i64 6, i64 0 }, ptr %a1002
store { ptr, i64, i64 } %t1000, ptr %a1003
call void @finch_str_concat(ptr %a1001, ptr %a1002, ptr %a1003)
%t1004 = load { ptr, i64, i64 }, ptr %a1001
store { ptr, i64, i64 } %t1004, ptr %a1006
call void @finch_str_copy(ptr %a1005, ptr %a1006)
%t1007 = call i64 @finch_shell(ptr %a1005)
%t1008 = load i64, ptr %a998
ret i64 %t1008
endif414:
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.from419
logic.from419:
br i1 %t3, label %logic.rhs420, label %logic.end421
logic.rhs420:
%t4 = load i8, ptr %a1
%t5 = icmp ule i8 %t4, 122
br label %logic.rend422
logic.rend422:
br label %logic.end421
logic.end421:
%t6 = phi i1 [ false, %logic.from419 ], [ %t5, %logic.rend422 ]
br label %logic.from423
logic.from423:
br i1 %t6, label %logic.end425, label %logic.rhs424
logic.rhs424:
%t7 = load i8, ptr %a1
%t8 = icmp uge i8 %t7, 65
br label %logic.from426
logic.from426:
br i1 %t8, label %logic.rhs427, label %logic.end428
logic.rhs427:
%t9 = load i8, ptr %a1
%t10 = icmp ule i8 %t9, 90
br label %logic.rend429
logic.rend429:
br label %logic.end428
logic.end428:
%t11 = phi i1 [ false, %logic.from426 ], [ %t10, %logic.rend429 ]
br label %logic.rend430
logic.rend430:
br label %logic.end425
logic.end425:
%t12 = phi i1 [ true, %logic.from423 ], [ %t11, %logic.rend430 ]
br label %logic.from431
logic.from431:
br i1 %t12, label %logic.end433, label %logic.rhs432
logic.rhs432:
%t13 = load i8, ptr %a1
%t14 = icmp eq i8 %t13, 95
br label %logic.rend434
logic.rend434:
br label %logic.end433
logic.end433:
%t15 = phi i1 [ true, %logic.from431 ], [ %t14, %logic.rend434 ]
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.from435
logic.from435:
br i1 %t3, label %logic.rhs436, label %logic.end437
logic.rhs436:
%t4 = load i8, ptr %a1
%t5 = icmp ule i8 %t4, 57
br label %logic.rend438
logic.rend438:
br label %logic.end437
logic.end437:
%t6 = phi i1 [ false, %logic.from435 ], [ %t5, %logic.rend438 ]
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.from439
logic.from439:
br i1 %t3, label %logic.end441, label %logic.rhs440
logic.rhs440:
%t4 = load i8, ptr %a1
%t5 = icmp uge i8 %t4, 97
br label %logic.from442
logic.from442:
br i1 %t5, label %logic.rhs443, label %logic.end444
logic.rhs443:
%t6 = load i8, ptr %a1
%t7 = icmp ule i8 %t6, 102
br label %logic.rend445
logic.rend445:
br label %logic.end444
logic.end444:
%t8 = phi i1 [ false, %logic.from442 ], [ %t7, %logic.rend445 ]
br label %logic.rend446
logic.rend446:
br label %logic.end441
logic.end441:
%t9 = phi i1 [ true, %logic.from439 ], [ %t8, %logic.rend446 ]
br label %logic.from447
logic.from447:
br i1 %t9, label %logic.end449, label %logic.rhs448
logic.rhs448:
%t10 = load i8, ptr %a1
%t11 = icmp uge i8 %t10, 65
br label %logic.from450
logic.from450:
br i1 %t11, label %logic.rhs451, label %logic.end452
logic.rhs451:
%t12 = load i8, ptr %a1
%t13 = icmp ule i8 %t12, 70
br label %logic.rend453
logic.rend453:
br label %logic.end452
logic.end452:
%t14 = phi i1 [ false, %logic.from450 ], [ %t13, %logic.rend453 ]
br label %logic.rend454
logic.rend454:
br label %logic.end449
logic.end449:
%t15 = phi i1 [ true, %logic.from447 ], [ %t14, %logic.rend454 ]
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.257, i64 2, i64 0 }, ptr %t4
%t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1
store { ptr, i64, i64 } { ptr @.str.258, i64 6, i64 0 }, ptr %t5
%t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2
store { ptr, i64, i64 } { ptr @.str.259, i64 2, i64 0 }, ptr %t6
%t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3
store { ptr, i64, i64 } { ptr @.str.260, i64 4, i64 0 }, ptr %t7
%t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4
store { ptr, i64, i64 } { ptr @.str.261, i64 5, i64 0 }, ptr %t8
%t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5
store { ptr, i64, i64 } { ptr @.str.262, i64 3, i64 0 }, ptr %t9
%t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6
store { ptr, i64, i64 } { ptr @.str.263, i64 2, i64 0 }, ptr %t10
%t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7
store { ptr, i64, i64 } { ptr @.str.264, i64 5, i64 0 }, ptr %t11
%t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8
store { ptr, i64, i64 } { ptr @.str.265, i64 8, i64 0 }, ptr %t12
%t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9
store { ptr, i64, i64 } { ptr @.str.266, i64 4, i64 0 }, ptr %t13
%t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10
store { ptr, i64, i64 } { ptr @.str.267, i64 5, i64 0 }, ptr %t14
%t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11
store { ptr, i64, i64 } { ptr @.str.268, i64 4, i64 0 }, ptr %t15
%t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12
store { ptr, i64, i64 } { ptr @.str.269, i64 6, i64 0 }, ptr %t16
%t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13
store { ptr, i64, i64 } { ptr @.str.270, i64 4, i64 0 }, ptr %t17
%t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14
store { ptr, i64, i64 } { ptr @.str.271, i64 6, i64 0 }, ptr %t18
%t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15
store { ptr, i64, i64 } { ptr @.str.272, i64 5, i64 0 }, ptr %t19
%t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16
store { ptr, i64, i64 } { ptr @.str.273, i64 2, i64 0 }, ptr %t20
%t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17
store { ptr, i64, i64 } { ptr @.str.274, i64 3, i64 0 }, ptr %t21
%t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18
store { ptr, i64, i64 } { ptr @.str.275, i64 4, i64 0 }, ptr %t22
%t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19
store { ptr, i64, i64 } { ptr @.str.276, i64 5, i64 0 }, ptr %t23
%t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20
store { ptr, i64, i64 } { ptr @.str.277, 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.cond455
find.cond455:
%t35 = load i64, ptr %a34
%t36 = icmp slt i64 %t35, %t32
br i1 %t36, label %find.body456, label %find.end459
find.body456:
%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.hit457, label %find.next458
find.hit457:
store i64 %t35, ptr %a31
br label %find.end459
find.next458:
%t43 = add i64 %t35, 1
store i64 %t43, ptr %a34
br label %find.cond455
find.end459:
%t44 = load i64, ptr %a31
%t45 = icmp sge i64 %t44, 0
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
%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
%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
%a36 = 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 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 %panic460, label %ok461
panic460:
call void @finch_panic(ptr @.str.278, i64 41, ptr @.str.279)
unreachable
ok461:
%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.280, 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)
%t19 = load { ptr, i64, i64 }, ptr %a16
store { ptr, i64, i64 } %t19, ptr %a21
store { ptr, i64, i64 } { ptr @.str.281, i64 1, i64 0 }, ptr %a22
call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22)
%t23 = load { ptr, i64, i64 }, ptr %a20
%t24 = load i64, ptr %a3
call void @finch_str_from_int(ptr %a25, i64 %t24)
%t26 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } %t23, 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.282, i64 9, i64 0 }, ptr %a33
call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33)
%t34 = load { ptr, i64, i64 }, ptr %a31
%t35 = load { ptr, i64, i64 }, ptr %a4
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)
%t39 = load { ptr, i64, i64 }, ptr %a36
%t40 = extractvalue { ptr, i64, i64 } %t39, 1
%t41 = trunc i64 %t40 to i32
%t42 = extractvalue { ptr, i64, i64 } %t39, 0
%t43 = icmp eq ptr %t42, null
%t44 = select i1 %t43, ptr @.str.283, ptr %t42
%t45 = call i32 (ptr, ...) @printf(ptr @.str.284, i32 %t41, ptr %t44)
%t46 = call i32 (ptr, ...) @printf(ptr @.str.285)
%t47 = trunc i64 1 to i32
%t48 = call i32 @fflush(ptr null)
call void @exit(i32 %t47)
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 %panic462, label %ok463
panic462:
call void @finch_panic(ptr @.str.286, i64 46, ptr @.str.287)
unreachable
ok463:
%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 %panic464, label %ok465
panic464:
call void @finch_panic(ptr @.str.288, i64 46, ptr @.str.289)
unreachable
ok465:
%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 %then466, label %endif468
then466:
%t15 = load ptr, ptr %a1
%t16 = icmp eq ptr %t15, null
br i1 %t16, label %panic469, label %ok470
panic469:
call void @finch_panic(ptr @.str.290, i64 47, ptr @.str.291)
unreachable
ok470:
%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 %panic471, label %ok472
panic471:
call void @finch_panic(ptr @.str.292, i64 47, ptr @.str.293)
unreachable
ok472:
%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 %range473, label %inrange474
range473:
call void @finch_panic_index(ptr @.str.294, i64 47, i64 %t23, i64 %t25)
unreachable
inrange474:
%t27 = extractvalue { ptr, i64, i64 } %t24, 0
%t28 = getelementptr inbounds i8, ptr %t27, i64 %t23
%t29 = load i8, ptr %t28
ret i8 %t29
endif468:
%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 %panic475, label %ok476
panic475:
call void @finch_panic(ptr @.str.295, i64 53, ptr @.str.296)
unreachable
ok476:
%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 %panic477, label %ok478
panic477:
call void @finch_panic(ptr @.str.297, i64 53, ptr @.str.298)
unreachable
ok478:
%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 %range479, label %inrange480
range479:
call void @finch_panic_index(ptr @.str.299, i64 53, i64 %t8, i64 %t10)
unreachable
inrange480:
%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 %then481, label %else482
then481:
%t18 = load ptr, ptr %a1
%t19 = icmp eq ptr %t18, null
br i1 %t19, label %panic484, label %ok485
panic484:
call void @finch_panic(ptr @.str.300, i64 55, ptr @.str.301)
unreachable
ok485:
%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 %panic486, label %ok487
panic486:
call void @finch_panic(ptr @.str.302, i64 56, ptr @.str.303)
unreachable
ok487:
%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 %panic488, label %ok489
panic488:
call void @finch_panic(ptr @.str.304, i64 57, ptr @.str.305)
unreachable
ok489:
%t28 = getelementptr inbounds %S.lexer.Lexer, ptr %t26, i32 0, i32 5
store i1 true, ptr %t28
br label %endif483
else482:
%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 %then490, label %endif492
then490:
%t33 = load ptr, ptr %a1
%t34 = icmp eq ptr %t33, null
br i1 %t34, label %panic493, label %ok494
panic493:
call void @finch_panic(ptr @.str.306, i64 59, ptr @.str.307)
unreachable
ok494:
%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 %endif492
endif492:
br label %endif483
endif483:
%t38 = load ptr, ptr %a1
%t39 = icmp eq ptr %t38, null
br i1 %t39, label %panic495, label %ok496
panic495:
call void @finch_panic(ptr @.str.308, i64 61, ptr @.str.309)
unreachable
ok496:
%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
%a96 = alloca { ptr, i64, i64 }, align 16
%a97 = 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.310, i64 2, i64 0 }, ptr %t4
%t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1
store { ptr, i64, i64 } { ptr @.str.311, i64 2, i64 0 }, ptr %t5
%t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2
store { ptr, i64, i64 } { ptr @.str.312, i64 2, i64 0 }, ptr %t6
%t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3
store { ptr, i64, i64 } { ptr @.str.313, i64 2, i64 0 }, ptr %t7
%t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4
store { ptr, i64, i64 } { ptr @.str.314, i64 2, i64 0 }, ptr %t8
%t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5
store { ptr, i64, i64 } { ptr @.str.315, i64 2, i64 0 }, ptr %t9
%t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6
store { ptr, i64, i64 } { ptr @.str.316, i64 2, i64 0 }, ptr %t10
%t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7
store { ptr, i64, i64 } { ptr @.str.317, i64 2, i64 0 }, ptr %t11
%t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8
store { ptr, i64, i64 } { ptr @.str.318, i64 2, i64 0 }, ptr %t12
%t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9
store { ptr, i64, i64 } { ptr @.str.319, i64 2, i64 0 }, ptr %t13
%t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10
store { ptr, i64, i64 } { ptr @.str.320, i64 2, i64 0 }, ptr %t14
%t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11
store { ptr, i64, i64 } { ptr @.str.321, i64 2, i64 0 }, ptr %t15
%t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12
store { ptr, i64, i64 } { ptr @.str.322, i64 2, i64 0 }, ptr %t16
%t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13
store { ptr, i64, i64 } { ptr @.str.323, i64 2, i64 0 }, ptr %t17
%t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14
store { ptr, i64, i64 } { ptr @.str.324, i64 2, i64 0 }, ptr %t18
%t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15
store { ptr, i64, i64 } { ptr @.str.325, 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 %panic497, label %ok498
panic497:
call void @finch_panic(ptr @.str.326, i64 67, ptr @.str.327)
unreachable
ok498:
%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 %panic499, label %ok500
panic499:
call void @finch_panic(ptr @.str.328, i64 67, ptr @.str.329)
unreachable
ok500:
%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 %then501, label %endif503
then501:
%t35 = load ptr, ptr %a1
%t36 = icmp eq ptr %t35, null
br i1 %t36, label %panic504, label %ok505
panic504:
call void @finch_panic(ptr @.str.330, i64 68, ptr @.str.331)
unreachable
ok505:
%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 %panic506, label %ok507
panic506:
call void @finch_panic(ptr @.str.333, i64 68, ptr @.str.334)
unreachable
ok507:
%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 %panic508, label %ok509
panic508:
call void @finch_panic(ptr @.str.335, i64 68, ptr @.str.336)
unreachable
ok509:
%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.332, 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.cond510
find.cond510:
%t58 = load i64, ptr %a57
%t59 = icmp slt i64 %t58, %t55
br i1 %t59, label %find.body511, label %find.end514
find.body511:
%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.hit512, label %find.next513
find.hit512:
store i64 %t58, ptr %a54
br label %find.end514
find.next513:
%t66 = add i64 %t58, 1
store i64 %t66, ptr %a57
br label %find.cond510
find.end514:
%t67 = load i64, ptr %a54
%t68 = icmp sge i64 %t67, 0
br i1 %t68, label %then515, label %endif517
then515:
%t69 = load { ptr, i64, i64 }, ptr %a51
ret { ptr, i64, i64 } %t69
endif517:
br label %endif503
endif503:
store { ptr, i64, i64 } { ptr @.str.337, i64 22, i64 0 }, ptr %a70
%t71 = load ptr, ptr %a1
%t72 = icmp eq ptr %t71, null
br i1 %t72, label %panic518, label %ok519
panic518:
call void @finch_panic(ptr @.str.338, i64 74, ptr @.str.339)
unreachable
ok519:
%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 %panic520, label %ok521
panic520:
call void @finch_panic(ptr @.str.341, i64 74, ptr @.str.342)
unreachable
ok521:
%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 %panic522, label %ok523
panic522:
call void @finch_panic(ptr @.str.343, i64 74, ptr @.str.344)
unreachable
ok523:
%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.340, 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 %then524, label %endif526
then524:
%t95 = load { ptr, i64, i64 }, ptr %a87
store { ptr, i64, i64 } %t95, ptr %a96
call void @finch_str_copy(ptr %a97, ptr %a96)
%t98 = load { ptr, i64, i64 }, ptr %a97
ret { ptr, i64, i64 } %t98
endif526:
ret { ptr, i64, i64 } { ptr @.str.346, 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
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 %then527, label %endif529
then527:
ret i8 10
endif529:
%t5 = load i8, ptr %a2
%t6 = icmp eq i8 %t5, 116
br i1 %t6, label %then530, label %endif532
then530:
ret i8 9
endif532:
%t7 = load i8, ptr %a2
%t8 = icmp eq i8 %t7, 114
br i1 %t8, label %then533, label %endif535
then533:
ret i8 13
endif535:
%t9 = load i8, ptr %a2
%t10 = icmp eq i8 %t9, 48
br i1 %t10, label %then536, label %endif538
then536:
%t11 = trunc i64 0 to i8
ret i8 %t11
endif538:
%t12 = load i8, ptr %a2
%t13 = icmp eq i8 %t12, 92
br label %logic.from539
logic.from539:
br i1 %t13, label %logic.end541, label %logic.rhs540
logic.rhs540:
%t14 = load i8, ptr %a2
%t15 = icmp eq i8 %t14, 34
br label %logic.rend542
logic.rend542:
br label %logic.end541
logic.end541:
%t16 = phi i1 [ true, %logic.from539 ], [ %t15, %logic.rend542 ]
br label %logic.from543
logic.from543:
br i1 %t16, label %logic.end545, label %logic.rhs544
logic.rhs544:
%t17 = load i8, ptr %a2
%t18 = icmp eq i8 %t17, 39
br label %logic.rend546
logic.rend546:
br label %logic.end545
logic.end545:
%t19 = phi i1 [ true, %logic.from543 ], [ %t18, %logic.rend546 ]
br i1 %t19, label %then547, label %endif549
then547:
%t20 = load i8, ptr %a2
ret i8 %t20
endif549:
%t21 = load ptr, ptr %a1
%t22 = load ptr, ptr %a1
%t23 = icmp eq ptr %t22, null
br i1 %t23, label %panic550, label %ok551
panic550:
call void @finch_panic(ptr @.str.347, i64 97, ptr @.str.348)
unreachable
ok551:
%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 %panic552, label %ok553
panic552:
call void @finch_panic(ptr @.str.349, i64 97, ptr @.str.350)
unreachable
ok553:
%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.351, i64 16, i64 0 }, ptr %a35
store { ptr, i64, i64 } %t33, ptr %a36
call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36)
%t37 = load { ptr, i64, i64 }, ptr %a34
call void @finch.lexer.fail(ptr %t21, i64 %t25, i64 %t30, { ptr, i64, i64 } %t37)
%t38 = load i8, ptr %a2
ret i8 %t38
}
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.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.cond860
n.cond860:
%t6 = load i64, ptr %a5
%t7 = icmp slt i64 %t6, %t4
br i1 %t7, label %n.body861, label %n.end862
n.body861:
%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.cond860
n.end862:
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
%a241 = alloca { ptr, i64, i64 }, align 16
%a242 = alloca { ptr, i64, i64 }, align 16
%a395 = alloca { ptr, i64, i64 }, align 16
%a396 = 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
%a406 = alloca { ptr, i64, i64 }, align 16
%a415 = alloca i8, align 16
%a421 = alloca { ptr, i64, i64 }, align 16
%a448 = alloca i8, align 16
%a454 = alloca i8, align 16
%a461 = alloca { ptr, i64, i64 }, align 16
%a469 = alloca { ptr, i64, i64 }, align 16
%a470 = alloca { ptr, i64, i64 }, align 16
%a487 = alloca { ptr, i64, i64 }, align 16
%a491 = alloca i64, align 16
%a504 = alloca { ptr, i64, i64 }, align 16
%a517 = alloca { ptr, i64, i64 }, align 16
%a518 = 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
%a539 = alloca { ptr, i64, i64 }, align 16
%a540 = alloca { ptr, i64, i64 }, align 16
%a541 = alloca { ptr, i64, i64 }, align 16
%a545 = alloca i64, align 16
%a553 = alloca { ptr, i64, i64 }, align 16
%a554 = alloca { ptr, i64, i64 }, align 16
%a558 = alloca { ptr, i64, i64 }, align 16
%a559 = alloca { ptr, i64, i64 }, align 16
%a563 = alloca %S.lexer.Token, align 16
%a564 = alloca %S.lexer.Token, align 16
%a589 = alloca { ptr, i64, i64 }, align 16
%a590 = 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
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.cond554
while.cond554:
%t20 = load ptr, ptr %a18
%t21 = icmp eq ptr %t20, null
br i1 %t21, label %panic557, label %ok558
panic557:
call void @finch_panic(ptr @.str.352, i64 105, ptr @.str.353)
unreachable
ok558:
%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 %panic559, label %ok560
panic559:
call void @finch_panic(ptr @.str.354, i64 105, ptr @.str.355)
unreachable
ok560:
%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.body555, label %while.end556
while.body555:
%t30 = load ptr, ptr %a18
%t31 = icmp eq ptr %t30, null
br i1 %t31, label %panic561, label %ok562
panic561:
call void @finch_panic(ptr @.str.356, i64 106, ptr @.str.357)
unreachable
ok562:
%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 %panic563, label %ok564
panic563:
call void @finch_panic(ptr @.str.358, i64 106, ptr @.str.359)
unreachable
ok564:
%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 %range565, label %inrange566
range565:
call void @finch_panic_index(ptr @.str.360, i64 106, i64 %t36, i64 %t38)
unreachable
inrange566:
%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.from567
logic.from567:
br i1 %t45, label %logic.end569, label %logic.rhs568
logic.rhs568:
%t46 = load i8, ptr %a43
%t47 = icmp eq i8 %t46, 9
br label %logic.rend570
logic.rend570:
br label %logic.end569
logic.end569:
%t48 = phi i1 [ true, %logic.from567 ], [ %t47, %logic.rend570 ]
br label %logic.from571
logic.from571:
br i1 %t48, label %logic.end573, label %logic.rhs572
logic.rhs572:
%t49 = load i8, ptr %a43
%t50 = icmp eq i8 %t49, 10
br label %logic.rend574
logic.rend574:
br label %logic.end573
logic.end573:
%t51 = phi i1 [ true, %logic.from571 ], [ %t50, %logic.rend574 ]
br label %logic.from575
logic.from575:
br i1 %t51, label %logic.end577, label %logic.rhs576
logic.rhs576:
%t52 = load i8, ptr %a43
%t53 = icmp eq i8 %t52, 13
br label %logic.rend578
logic.rend578:
br label %logic.end577
logic.end577:
%t54 = phi i1 [ true, %logic.from575 ], [ %t53, %logic.rend578 ]
br i1 %t54, label %then579, label %endif581
then579:
%t55 = load ptr, ptr %a18
call void @finch.lexer.advance(ptr %t55)
br label %while.cond554
endif581:
%t56 = load i8, ptr %a43
%t57 = icmp eq i8 %t56, 47
br label %logic.from582
logic.from582:
br i1 %t57, label %logic.rhs583, label %logic.end584
logic.rhs583:
%t58 = load ptr, ptr %a18
%t59 = call i8 @finch.lexer.peek(ptr %t58, i64 1)
%t60 = icmp eq i8 %t59, 47
br label %logic.rend585
logic.rend585:
br label %logic.end584
logic.end584:
%t61 = phi i1 [ false, %logic.from582 ], [ %t60, %logic.rend585 ]
br i1 %t61, label %then586, label %endif588
then586:
br label %while.cond589
while.cond589:
%t62 = load ptr, ptr %a18
%t63 = icmp eq ptr %t62, null
br i1 %t63, label %panic592, label %ok593
panic592:
call void @finch_panic(ptr @.str.361, i64 112, ptr @.str.362)
unreachable
ok593:
%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 %panic594, label %ok595
panic594:
call void @finch_panic(ptr @.str.363, i64 112, ptr @.str.364)
unreachable
ok595:
%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.from596
logic.from596:
br i1 %t71, label %logic.rhs597, label %logic.end598
logic.rhs597:
%t72 = load ptr, ptr %a18
%t73 = icmp eq ptr %t72, null
br i1 %t73, label %panic599, label %ok600
panic599:
call void @finch_panic(ptr @.str.365, i64 112, ptr @.str.366)
unreachable
ok600:
%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 %panic601, label %ok602
panic601:
call void @finch_panic(ptr @.str.367, i64 112, ptr @.str.368)
unreachable
ok602:
%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 %range603, label %inrange604
range603:
call void @finch_panic_index(ptr @.str.369, i64 112, i64 %t78, i64 %t80)
unreachable
inrange604:
%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.rend605
logic.rend605:
br label %logic.end598
logic.end598:
%t86 = phi i1 [ false, %logic.from596 ], [ %t85, %logic.rend605 ]
br i1 %t86, label %while.body590, label %while.end591
while.body590:
%t87 = load ptr, ptr %a18
call void @finch.lexer.advance(ptr %t87)
br label %while.cond589
while.end591:
br label %while.cond554
endif588:
%t88 = load i8, ptr %a43
%t89 = icmp eq i8 %t88, 47
br label %logic.from606
logic.from606:
br i1 %t89, label %logic.rhs607, label %logic.end608
logic.rhs607:
%t90 = load ptr, ptr %a18
%t91 = call i8 @finch.lexer.peek(ptr %t90, i64 1)
%t92 = icmp eq i8 %t91, 42
br label %logic.rend609
logic.rend609:
br label %logic.end608
logic.end608:
%t93 = phi i1 [ false, %logic.from606 ], [ %t92, %logic.rend609 ]
br i1 %t93, label %then610, label %endif612
then610:
%t94 = load ptr, ptr %a18
%t95 = icmp eq ptr %t94, null
br i1 %t95, label %panic613, label %ok614
panic613:
call void @finch_panic(ptr @.str.370, i64 118, ptr @.str.371)
unreachable
ok614:
%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 %panic615, label %ok616
panic615:
call void @finch_panic(ptr @.str.372, i64 119, ptr @.str.373)
unreachable
ok616:
%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.cond617
while.cond617:
%t106 = load ptr, ptr %a18
%t107 = icmp eq ptr %t106, null
br i1 %t107, label %panic620, label %ok621
panic620:
call void @finch_panic(ptr @.str.374, i64 122, ptr @.str.375)
unreachable
ok621:
%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 %panic622, label %ok623
panic622:
call void @finch_panic(ptr @.str.376, i64 122, ptr @.str.377)
unreachable
ok623:
%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.from624
logic.from624:
br i1 %t115, label %logic.rhs625, label %logic.end626
logic.rhs625:
%t116 = load ptr, ptr %a18
%t117 = icmp eq ptr %t116, null
br i1 %t117, label %panic627, label %ok628
panic627:
call void @finch_panic(ptr @.str.378, i64 122, ptr @.str.379)
unreachable
ok628:
%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 %panic629, label %ok630
panic629:
call void @finch_panic(ptr @.str.380, i64 122, ptr @.str.381)
unreachable
ok630:
%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 %range631, label %inrange632
range631:
call void @finch_panic_index(ptr @.str.382, i64 122, i64 %t122, i64 %t124)
unreachable
inrange632:
%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.from633
logic.from633:
br i1 %t129, label %logic.rhs634, label %logic.end635
logic.rhs634:
%t130 = load ptr, ptr %a18
%t131 = call i8 @finch.lexer.peek(ptr %t130, i64 1)
%t132 = icmp eq i8 %t131, 47
br label %logic.rend636
logic.rend636:
br label %logic.end635
logic.end635:
%t133 = phi i1 [ false, %logic.from633 ], [ %t132, %logic.rend636 ]
%t134 = xor i1 %t133, true
br label %logic.rend637
logic.rend637:
br label %logic.end626
logic.end626:
%t135 = phi i1 [ false, %logic.from624 ], [ %t134, %logic.rend637 ]
br i1 %t135, label %while.body618, label %while.end619
while.body618:
%t136 = load ptr, ptr %a18
call void @finch.lexer.advance(ptr %t136)
br label %while.cond617
while.end619:
%t137 = load ptr, ptr %a18
%t138 = icmp eq ptr %t137, null
br i1 %t138, label %panic638, label %ok639
panic638:
call void @finch_panic(ptr @.str.383, i64 125, ptr @.str.384)
unreachable
ok639:
%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 %panic640, label %ok641
panic640:
call void @finch_panic(ptr @.str.385, i64 125, ptr @.str.386)
unreachable
ok641:
%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 %then642, label %endif644
then642:
%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.387, i64 36, i64 0 })
br label %endif644
endif644:
%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.cond554
endif612:
%t152 = insertvalue %S.lexer.Token zeroinitializer, { ptr, i64, i64 } { ptr @.str.388, i64 0, i64 0 }, 0
%t153 = insertvalue %S.lexer.Token %t152, { ptr, i64, i64 } { ptr @.str.389, i64 0, i64 0 }, 1
%t154 = load ptr, ptr %a18
%t155 = icmp eq ptr %t154, null
br i1 %t155, label %panic645, label %ok646
panic645:
call void @finch_panic(ptr @.str.390, i64 133, ptr @.str.391)
unreachable
ok646:
%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 %panic647, label %ok648
panic647:
call void @finch_panic(ptr @.str.392, i64 133, ptr @.str.393)
unreachable
ok648:
%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 %panic649, label %ok650
panic649:
call void @finch_panic(ptr @.str.394, i64 133, ptr @.str.395)
unreachable
ok650:
%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 %panic651, label %ok652
panic651:
call void @finch_panic(ptr @.str.396, i64 134, ptr @.str.397)
unreachable
ok652:
%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 %panic653, label %ok654
panic653:
call void @finch_panic(ptr @.str.398, i64 135, ptr @.str.399)
unreachable
ok654:
%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 %then655, label %else656
then655:
br label %while.cond658
while.cond658:
%t180 = load ptr, ptr %a18
%t181 = icmp eq ptr %t180, null
br i1 %t181, label %panic661, label %ok662
panic661:
call void @finch_panic(ptr @.str.400, i64 137, ptr @.str.401)
unreachable
ok662:
%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 %panic663, label %ok664
panic663:
call void @finch_panic(ptr @.str.402, i64 137, ptr @.str.403)
unreachable
ok664:
%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.from665
logic.from665:
br i1 %t189, label %logic.rhs666, label %logic.end667
logic.rhs666:
%t190 = load ptr, ptr %a18
%t191 = icmp eq ptr %t190, null
br i1 %t191, label %panic668, label %ok669
panic668:
call void @finch_panic(ptr @.str.404, i64 137, ptr @.str.405)
unreachable
ok669:
%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 %panic670, label %ok671
panic670:
call void @finch_panic(ptr @.str.406, i64 137, ptr @.str.407)
unreachable
ok671:
%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 %range672, label %inrange673
range672:
call void @finch_panic_index(ptr @.str.408, i64 137, i64 %t196, i64 %t198)
unreachable
inrange673:
%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.from674
logic.from674:
br i1 %t203, label %logic.end676, label %logic.rhs675
logic.rhs675:
%t204 = load ptr, ptr %a18
%t205 = icmp eq ptr %t204, null
br i1 %t205, label %panic677, label %ok678
panic677:
call void @finch_panic(ptr @.str.409, i64 137, ptr @.str.410)
unreachable
ok678:
%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 %panic679, label %ok680
panic679:
call void @finch_panic(ptr @.str.411, i64 137, ptr @.str.412)
unreachable
ok680:
%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 %range681, label %inrange682
range681:
call void @finch_panic_index(ptr @.str.413, i64 137, i64 %t210, i64 %t212)
unreachable
inrange682:
%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.rend683
logic.rend683:
br label %logic.end676
logic.end676:
%t218 = phi i1 [ true, %logic.from674 ], [ %t217, %logic.rend683 ]
br label %logic.rend684
logic.rend684:
br label %logic.end667
logic.end667:
%t219 = phi i1 [ false, %logic.from665 ], [ %t218, %logic.rend684 ]
br i1 %t219, label %while.body659, label %while.end660
while.body659:
%t220 = load ptr, ptr %a18
call void @finch.lexer.advance(ptr %t220)
br label %while.cond658
while.end660:
%t221 = load ptr, ptr %a18
%t222 = icmp eq ptr %t221, null
br i1 %t222, label %panic685, label %ok686
panic685:
call void @finch_panic(ptr @.str.414, i64 140, ptr @.str.415)
unreachable
ok686:
%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 %panic687, label %ok688
panic687:
call void @finch_panic(ptr @.str.417, i64 140, ptr @.str.418)
unreachable
ok688:
%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.416, i64 140)
%t232 = load { ptr, i64, i64 }, ptr %a226
%t233 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1
store { ptr, i64, i64 } %t232, ptr %t233
%t234 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.419, i64 5, i64 0 }, ptr %t234
%t235 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1
%t236 = load { ptr, i64, i64 }, ptr %t235
%t237 = call i1 @finch.lexer.isKeyword({ ptr, i64, i64 } %t236)
br i1 %t237, label %then689, label %endif691
then689:
%t238 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1
%t239 = load { ptr, i64, i64 }, ptr %t238
%t240 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0
store { ptr, i64, i64 } %t239, ptr %a241
call void @finch_str_copy(ptr %a242, ptr %a241)
%t243 = load { ptr, i64, i64 }, ptr %a242
store { ptr, i64, i64 } %t243, ptr %t240
br label %endif691
endif691:
br label %endif657
else656:
%t244 = load i8, ptr %a43
%t245 = call i1 @finch.lexer.isDigit(i8 %t244)
br i1 %t245, label %then692, label %else693
then692:
%t246 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.420, i64 3, i64 0 }, ptr %t246
%t247 = load i8, ptr %a43
%t248 = icmp eq i8 %t247, 48
br label %logic.from695
logic.from695:
br i1 %t248, label %logic.rhs696, label %logic.end697
logic.rhs696:
%t249 = load ptr, ptr %a18
%t250 = call i8 @finch.lexer.peek(ptr %t249, i64 1)
%t251 = icmp eq i8 %t250, 120
br label %logic.from698
logic.from698:
br i1 %t251, label %logic.end700, label %logic.rhs699
logic.rhs699:
%t252 = load ptr, ptr %a18
%t253 = call i8 @finch.lexer.peek(ptr %t252, i64 1)
%t254 = icmp eq i8 %t253, 88
br label %logic.rend701
logic.rend701:
br label %logic.end700
logic.end700:
%t255 = phi i1 [ true, %logic.from698 ], [ %t254, %logic.rend701 ]
br label %logic.rend702
logic.rend702:
br label %logic.end697
logic.end697:
%t256 = phi i1 [ false, %logic.from695 ], [ %t255, %logic.rend702 ]
br i1 %t256, label %then703, label %else704
then703:
%t257 = load ptr, ptr %a18
call void @finch.lexer.advance(ptr %t257)
%t258 = load ptr, ptr %a18
call void @finch.lexer.advance(ptr %t258)
br label %while.cond706
while.cond706:
%t259 = load ptr, ptr %a18
%t260 = icmp eq ptr %t259, null
br i1 %t260, label %panic709, label %ok710
panic709:
call void @finch_panic(ptr @.str.421, i64 150, ptr @.str.422)
unreachable
ok710:
%t261 = getelementptr inbounds %S.lexer.Lexer, ptr %t259, i32 0, i32 2
%t262 = load i64, ptr %t261
%t263 = load ptr, ptr %a18
%t264 = icmp eq ptr %t263, null
br i1 %t264, label %panic711, label %ok712
panic711:
call void @finch_panic(ptr @.str.423, i64 150, ptr @.str.424)
unreachable
ok712:
%t265 = getelementptr inbounds %S.lexer.Lexer, ptr %t263, i32 0, i32 0
%t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i32 0, i32 1
%t267 = load i64, ptr %t266
%t268 = icmp slt i64 %t262, %t267
br label %logic.from713
logic.from713:
br i1 %t268, label %logic.rhs714, label %logic.end715
logic.rhs714:
%t269 = load ptr, ptr %a18
%t270 = icmp eq ptr %t269, null
br i1 %t270, label %panic716, label %ok717
panic716:
call void @finch_panic(ptr @.str.425, i64 150, ptr @.str.426)
unreachable
ok717:
%t271 = getelementptr inbounds %S.lexer.Lexer, ptr %t269, i32 0, i32 0
%t272 = load ptr, ptr %a18
%t273 = icmp eq ptr %t272, null
br i1 %t273, label %panic718, label %ok719
panic718:
call void @finch_panic(ptr @.str.427, i64 150, ptr @.str.428)
unreachable
ok719:
%t274 = getelementptr inbounds %S.lexer.Lexer, ptr %t272, i32 0, i32 2
%t275 = load i64, ptr %t274
%t276 = load { ptr, i64, i64 }, ptr %t271
%t277 = extractvalue { ptr, i64, i64 } %t276, 1
%t278 = icmp uge i64 %t275, %t277
br i1 %t278, label %range720, label %inrange721
range720:
call void @finch_panic_index(ptr @.str.429, i64 150, i64 %t275, i64 %t277)
unreachable
inrange721:
%t279 = extractvalue { ptr, i64, i64 } %t276, 0
%t280 = getelementptr inbounds i8, ptr %t279, i64 %t275
%t281 = load i8, ptr %t280
%t282 = call i1 @finch.lexer.isHex(i8 %t281)
br label %logic.from722
logic.from722:
br i1 %t282, label %logic.end724, label %logic.rhs723
logic.rhs723:
%t283 = load ptr, ptr %a18
%t284 = icmp eq ptr %t283, null
br i1 %t284, label %panic725, label %ok726
panic725:
call void @finch_panic(ptr @.str.430, i64 150, ptr @.str.431)
unreachable
ok726:
%t285 = getelementptr inbounds %S.lexer.Lexer, ptr %t283, i32 0, i32 0
%t286 = load ptr, ptr %a18
%t287 = icmp eq ptr %t286, null
br i1 %t287, label %panic727, label %ok728
panic727:
call void @finch_panic(ptr @.str.432, i64 150, ptr @.str.433)
unreachable
ok728:
%t288 = getelementptr inbounds %S.lexer.Lexer, ptr %t286, i32 0, i32 2
%t289 = load i64, ptr %t288
%t290 = load { ptr, i64, i64 }, ptr %t285
%t291 = extractvalue { ptr, i64, i64 } %t290, 1
%t292 = icmp uge i64 %t289, %t291
br i1 %t292, label %range729, label %inrange730
range729:
call void @finch_panic_index(ptr @.str.434, i64 150, i64 %t289, i64 %t291)
unreachable
inrange730:
%t293 = extractvalue { ptr, i64, i64 } %t290, 0
%t294 = getelementptr inbounds i8, ptr %t293, i64 %t289
%t295 = load i8, ptr %t294
%t296 = icmp eq i8 %t295, 95
br label %logic.rend731
logic.rend731:
br label %logic.end724
logic.end724:
%t297 = phi i1 [ true, %logic.from722 ], [ %t296, %logic.rend731 ]
br label %logic.rend732
logic.rend732:
br label %logic.end715
logic.end715:
%t298 = phi i1 [ false, %logic.from713 ], [ %t297, %logic.rend732 ]
br i1 %t298, label %while.body707, label %while.end708
while.body707:
%t299 = load ptr, ptr %a18
call void @finch.lexer.advance(ptr %t299)
br label %while.cond706
while.end708:
br label %endif705
else704:
br label %while.cond733
while.cond733:
%t300 = load ptr, ptr %a18
%t301 = icmp eq ptr %t300, null
br i1 %t301, label %panic736, label %ok737
panic736:
call void @finch_panic(ptr @.str.435, i64 154, ptr @.str.436)
unreachable
ok737:
%t302 = getelementptr inbounds %S.lexer.Lexer, ptr %t300, i32 0, i32 2
%t303 = load i64, ptr %t302
%t304 = load ptr, ptr %a18
%t305 = icmp eq ptr %t304, null
br i1 %t305, label %panic738, label %ok739
panic738:
call void @finch_panic(ptr @.str.437, i64 154, ptr @.str.438)
unreachable
ok739:
%t306 = getelementptr inbounds %S.lexer.Lexer, ptr %t304, i32 0, i32 0
%t307 = getelementptr inbounds { ptr, i64, i64 }, ptr %t306, i32 0, i32 1
%t308 = load i64, ptr %t307
%t309 = icmp slt i64 %t303, %t308
br label %logic.from740
logic.from740:
br i1 %t309, label %logic.rhs741, label %logic.end742
logic.rhs741:
%t310 = load ptr, ptr %a18
%t311 = icmp eq ptr %t310, null
br i1 %t311, label %panic743, label %ok744
panic743:
call void @finch_panic(ptr @.str.439, i64 154, ptr @.str.440)
unreachable
ok744:
%t312 = getelementptr inbounds %S.lexer.Lexer, ptr %t310, i32 0, i32 0
%t313 = load ptr, ptr %a18
%t314 = icmp eq ptr %t313, null
br i1 %t314, label %panic745, label %ok746
panic745:
call void @finch_panic(ptr @.str.441, i64 154, ptr @.str.442)
unreachable
ok746:
%t315 = getelementptr inbounds %S.lexer.Lexer, ptr %t313, i32 0, i32 2
%t316 = load i64, ptr %t315
%t317 = load { ptr, i64, i64 }, ptr %t312
%t318 = extractvalue { ptr, i64, i64 } %t317, 1
%t319 = icmp uge i64 %t316, %t318
br i1 %t319, label %range747, label %inrange748
range747:
call void @finch_panic_index(ptr @.str.443, i64 154, i64 %t316, i64 %t318)
unreachable
inrange748:
%t320 = extractvalue { ptr, i64, i64 } %t317, 0
%t321 = getelementptr inbounds i8, ptr %t320, i64 %t316
%t322 = load i8, ptr %t321
%t323 = call i1 @finch.lexer.isDigit(i8 %t322)
br label %logic.from749
logic.from749:
br i1 %t323, label %logic.end751, label %logic.rhs750
logic.rhs750:
%t324 = load ptr, ptr %a18
%t325 = icmp eq ptr %t324, null
br i1 %t325, label %panic752, label %ok753
panic752:
call void @finch_panic(ptr @.str.444, i64 154, ptr @.str.445)
unreachable
ok753:
%t326 = getelementptr inbounds %S.lexer.Lexer, ptr %t324, i32 0, i32 0
%t327 = load ptr, ptr %a18
%t328 = icmp eq ptr %t327, null
br i1 %t328, label %panic754, label %ok755
panic754:
call void @finch_panic(ptr @.str.446, i64 154, ptr @.str.447)
unreachable
ok755:
%t329 = getelementptr inbounds %S.lexer.Lexer, ptr %t327, i32 0, i32 2
%t330 = load i64, ptr %t329
%t331 = load { ptr, i64, i64 }, ptr %t326
%t332 = extractvalue { ptr, i64, i64 } %t331, 1
%t333 = icmp uge i64 %t330, %t332
br i1 %t333, label %range756, label %inrange757
range756:
call void @finch_panic_index(ptr @.str.448, i64 154, i64 %t330, i64 %t332)
unreachable
inrange757:
%t334 = extractvalue { ptr, i64, i64 } %t331, 0
%t335 = getelementptr inbounds i8, ptr %t334, i64 %t330
%t336 = load i8, ptr %t335
%t337 = icmp eq i8 %t336, 95
br label %logic.rend758
logic.rend758:
br label %logic.end751
logic.end751:
%t338 = phi i1 [ true, %logic.from749 ], [ %t337, %logic.rend758 ]
br label %logic.rend759
logic.rend759:
br label %logic.end742
logic.end742:
%t339 = phi i1 [ false, %logic.from740 ], [ %t338, %logic.rend759 ]
br i1 %t339, label %while.body734, label %while.end735
while.body734:
%t340 = load ptr, ptr %a18
call void @finch.lexer.advance(ptr %t340)
br label %while.cond733
while.end735:
%t341 = load ptr, ptr %a18
%t342 = call i8 @finch.lexer.peek(ptr %t341, i64 0)
%t343 = icmp eq i8 %t342, 46
br label %logic.from760
logic.from760:
br i1 %t343, label %logic.rhs761, label %logic.end762
logic.rhs761:
%t344 = load ptr, ptr %a18
%t345 = call i8 @finch.lexer.peek(ptr %t344, i64 1)
%t346 = call i1 @finch.lexer.isDigit(i8 %t345)
br label %logic.rend763
logic.rend763:
br label %logic.end762
logic.end762:
%t347 = phi i1 [ false, %logic.from760 ], [ %t346, %logic.rend763 ]
br i1 %t347, label %then764, label %endif766
then764:
%t348 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.449, i64 5, i64 0 }, ptr %t348
%t349 = load ptr, ptr %a18
call void @finch.lexer.advance(ptr %t349)
br label %while.cond767
while.cond767:
%t350 = load ptr, ptr %a18
%t351 = icmp eq ptr %t350, null
br i1 %t351, label %panic770, label %ok771
panic770:
call void @finch_panic(ptr @.str.450, i64 160, ptr @.str.451)
unreachable
ok771:
%t352 = getelementptr inbounds %S.lexer.Lexer, ptr %t350, i32 0, i32 2
%t353 = load i64, ptr %t352
%t354 = load ptr, ptr %a18
%t355 = icmp eq ptr %t354, null
br i1 %t355, label %panic772, label %ok773
panic772:
call void @finch_panic(ptr @.str.452, i64 160, ptr @.str.453)
unreachable
ok773:
%t356 = getelementptr inbounds %S.lexer.Lexer, ptr %t354, i32 0, i32 0
%t357 = getelementptr inbounds { ptr, i64, i64 }, ptr %t356, i32 0, i32 1
%t358 = load i64, ptr %t357
%t359 = icmp slt i64 %t353, %t358
br label %logic.from774
logic.from774:
br i1 %t359, label %logic.rhs775, label %logic.end776
logic.rhs775:
%t360 = load ptr, ptr %a18
%t361 = icmp eq ptr %t360, null
br i1 %t361, label %panic777, label %ok778
panic777:
call void @finch_panic(ptr @.str.454, i64 160, ptr @.str.455)
unreachable
ok778:
%t362 = getelementptr inbounds %S.lexer.Lexer, ptr %t360, i32 0, i32 0
%t363 = load ptr, ptr %a18
%t364 = icmp eq ptr %t363, null
br i1 %t364, label %panic779, label %ok780
panic779:
call void @finch_panic(ptr @.str.456, i64 160, ptr @.str.457)
unreachable
ok780:
%t365 = getelementptr inbounds %S.lexer.Lexer, ptr %t363, i32 0, i32 2
%t366 = load i64, ptr %t365
%t367 = load { ptr, i64, i64 }, ptr %t362
%t368 = extractvalue { ptr, i64, i64 } %t367, 1
%t369 = icmp uge i64 %t366, %t368
br i1 %t369, label %range781, label %inrange782
range781:
call void @finch_panic_index(ptr @.str.458, i64 160, i64 %t366, i64 %t368)
unreachable
inrange782:
%t370 = extractvalue { ptr, i64, i64 } %t367, 0
%t371 = getelementptr inbounds i8, ptr %t370, i64 %t366
%t372 = load i8, ptr %t371
%t373 = call i1 @finch.lexer.isDigit(i8 %t372)
br label %logic.from783
logic.from783:
br i1 %t373, label %logic.end785, label %logic.rhs784
logic.rhs784:
%t374 = load ptr, ptr %a18
%t375 = icmp eq ptr %t374, null
br i1 %t375, label %panic786, label %ok787
panic786:
call void @finch_panic(ptr @.str.459, i64 160, ptr @.str.460)
unreachable
ok787:
%t376 = getelementptr inbounds %S.lexer.Lexer, ptr %t374, i32 0, i32 0
%t377 = load ptr, ptr %a18
%t378 = icmp eq ptr %t377, null
br i1 %t378, label %panic788, label %ok789
panic788:
call void @finch_panic(ptr @.str.461, i64 160, ptr @.str.462)
unreachable
ok789:
%t379 = getelementptr inbounds %S.lexer.Lexer, ptr %t377, i32 0, i32 2
%t380 = load i64, ptr %t379
%t381 = load { ptr, i64, i64 }, ptr %t376
%t382 = extractvalue { ptr, i64, i64 } %t381, 1
%t383 = icmp uge i64 %t380, %t382
br i1 %t383, label %range790, label %inrange791
range790:
call void @finch_panic_index(ptr @.str.463, i64 160, i64 %t380, i64 %t382)
unreachable
inrange791:
%t384 = extractvalue { ptr, i64, i64 } %t381, 0
%t385 = getelementptr inbounds i8, ptr %t384, i64 %t380
%t386 = load i8, ptr %t385
%t387 = icmp eq i8 %t386, 95
br label %logic.rend792
logic.rend792:
br label %logic.end785
logic.end785:
%t388 = phi i1 [ true, %logic.from783 ], [ %t387, %logic.rend792 ]
br label %logic.rend793
logic.rend793:
br label %logic.end776
logic.end776:
%t389 = phi i1 [ false, %logic.from774 ], [ %t388, %logic.rend793 ]
br i1 %t389, label %while.body768, label %while.end769
while.body768:
%t390 = load ptr, ptr %a18
call void @finch.lexer.advance(ptr %t390)
br label %while.cond767
while.end769:
br label %endif766
endif766:
br label %endif705
endif705:
%t391 = load ptr, ptr %a18
%t392 = icmp eq ptr %t391, null
br i1 %t392, label %panic794, label %ok795
panic794:
call void @finch_panic(ptr @.str.464, i64 165, ptr @.str.465)
unreachable
ok795:
%t393 = getelementptr inbounds %S.lexer.Lexer, ptr %t391, i32 0, i32 0
%t394 = load { ptr, i64, i64 }, ptr %t393
store { ptr, i64, i64 } %t394, ptr %a395
%t397 = load i64, ptr %a177
%t398 = load ptr, ptr %a18
%t399 = icmp eq ptr %t398, null
br i1 %t399, label %panic796, label %ok797
panic796:
call void @finch_panic(ptr @.str.467, i64 165, ptr @.str.468)
unreachable
ok797:
%t400 = getelementptr inbounds %S.lexer.Lexer, ptr %t398, i32 0, i32 2
%t401 = load i64, ptr %t400
call void @finch_str_sub(ptr %a396, ptr %a395, i64 %t397, i64 %t401, ptr @.str.466, i64 165)
%t402 = load { ptr, i64, i64 }, ptr %a396
store { ptr, i64, i64 } %t402, ptr %a403
store { ptr, i64, i64 } { ptr @.str.470, i64 1, i64 0 }, ptr %a405
store { ptr, i64, i64 } { ptr @.str.471, i64 0, i64 0 }, ptr %a406
call void @finch_str_replace(ptr %a404, ptr %a403, ptr %a405, ptr %a406)
%t407 = load { ptr, i64, i64 }, ptr %a404
%t408 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1
store { ptr, i64, i64 } %t407, ptr %t408
br label %endif694
else693:
%t409 = load i8, ptr %a43
%t410 = icmp eq i8 %t409, 34
br label %logic.from798
logic.from798:
br i1 %t410, label %logic.end800, label %logic.rhs799
logic.rhs799:
%t411 = load i8, ptr %a43
%t412 = icmp eq i8 %t411, 39
br label %logic.rend801
logic.rend801:
br label %logic.end800
logic.end800:
%t413 = phi i1 [ true, %logic.from798 ], [ %t412, %logic.rend801 ]
br i1 %t413, label %then802, label %else803
then802:
%t414 = load i8, ptr %a43
store i8 %t414, ptr %a415
%t416 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.472, i64 6, i64 0 }, ptr %t416
%t417 = load i8, ptr %a415
%t418 = icmp eq i8 %t417, 39
br i1 %t418, label %then805, label %endif807
then805:
%t419 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.473, i64 4, i64 0 }, ptr %t419
br label %endif807
endif807:
%t420 = load ptr, ptr %a18
call void @finch.lexer.advance(ptr %t420)
store { ptr, i64, i64 } zeroinitializer, ptr %a421
br label %while.cond808
while.cond808:
%t422 = load ptr, ptr %a18
%t423 = call i8 @finch.lexer.peek(ptr %t422, i64 0)
%t424 = load i8, ptr %a415
%t425 = icmp ne i8 %t423, %t424
br i1 %t425, label %while.body809, label %while.end810
while.body809:
%t426 = load ptr, ptr %a18
%t427 = call i8 @finch.lexer.peek(ptr %t426, i64 0)
%t428 = trunc i64 0 to i8
%t429 = icmp eq i8 %t427, %t428
br label %logic.from811
logic.from811:
br i1 %t429, label %logic.end813, label %logic.rhs812
logic.rhs812:
%t430 = load ptr, ptr %a18
%t431 = call i8 @finch.lexer.peek(ptr %t430, i64 0)
%t432 = icmp eq i8 %t431, 10
br label %logic.rend814
logic.rend814:
br label %logic.end813
logic.end813:
%t433 = phi i1 [ true, %logic.from811 ], [ %t432, %logic.rend814 ]
br i1 %t433, label %then815, label %endif817
then815:
%t434 = load i8, ptr %a415
%t435 = icmp eq i8 %t434, 34
br i1 %t435, label %then818, label %endif820
then818:
%t436 = load ptr, ptr %a18
%t437 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2
%t438 = load i64, ptr %t437
%t439 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3
%t440 = load i64, ptr %t439
call void @finch.lexer.fail(ptr %t436, i64 %t438, i64 %t440, { ptr, i64, i64 } { ptr @.str.474, i64 34, i64 0 })
br label %endif820
endif820:
%t441 = load ptr, ptr %a18
%t442 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2
%t443 = load i64, ptr %t442
%t444 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3
%t445 = load i64, ptr %t444
call void @finch.lexer.fail(ptr %t441, i64 %t443, i64 %t445, { ptr, i64, i64 } { ptr @.str.475, i64 32, i64 0 })
br label %endif817
endif817:
%t446 = load ptr, ptr %a18
%t447 = call i8 @finch.lexer.peek(ptr %t446, i64 0)
store i8 %t447, ptr %a448
%t449 = load ptr, ptr %a18
call void @finch.lexer.advance(ptr %t449)
%t450 = load i8, ptr %a448
%t451 = icmp eq i8 %t450, 92
br i1 %t451, label %then821, label %endif823
then821:
%t452 = load ptr, ptr %a18
%t453 = call i8 @finch.lexer.peek(ptr %t452, i64 0)
store i8 %t453, ptr %a454
%t455 = load ptr, ptr %a18
call void @finch.lexer.advance(ptr %t455)
%t456 = load ptr, ptr %a18
%t457 = load i8, ptr %a454
%t458 = call i8 @finch.lexer.escape(ptr %t456, i8 %t457)
store i8 %t458, ptr %a448
br label %endif823
endif823:
%t459 = getelementptr inbounds { ptr, i64, i64 }, ptr %a421, i32 0, i32 1
%t460 = load i8, ptr %a448
call void @finch_str_from_char(ptr %a461, i8 signext %t460)
%t462 = load { ptr, i64, i64 }, ptr %a461
%t463 = load i64, ptr %t459
%t464 = add i64 %t463, 1
call void @finch_arr_reserve(ptr %a421, i64 %t464, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t465 = load ptr, ptr %a421
%t466 = getelementptr inbounds { ptr, i64, i64 }, ptr %t465, i64 %t463
store { ptr, i64, i64 } %t462, ptr %t466
store i64 %t464, ptr %t459
br label %while.cond808
while.end810:
%t467 = load ptr, ptr %a18
call void @finch.lexer.advance(ptr %t467)
%t468 = getelementptr inbounds { ptr, i64, i64 }, ptr %a421, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.476, i64 0, i64 0 }, ptr %a469
call void @finch_str_join(ptr %a470, ptr %a421, ptr %a469)
%t471 = load { ptr, i64, i64 }, ptr %a470
%t472 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1
store { ptr, i64, i64 } %t471, ptr %t472
%t473 = load i8, ptr %a415
%t474 = icmp eq i8 %t473, 39
br label %logic.from824
logic.from824:
br i1 %t474, label %logic.rhs825, label %logic.end826
logic.rhs825:
%t475 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1
%t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i32 0, i32 1
%t477 = load i64, ptr %t476
%t478 = icmp ne i64 %t477, 1
br label %logic.rend827
logic.rend827:
br label %logic.end826
logic.end826:
%t479 = phi i1 [ false, %logic.from824 ], [ %t478, %logic.rend827 ]
br i1 %t479, label %then828, label %endif830
then828:
%t480 = load ptr, ptr %a18
%t481 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2
%t482 = load i64, ptr %t481
%t483 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3
%t484 = load i64, ptr %t483
call void @finch.lexer.fail(ptr %t480, i64 %t482, i64 %t484, { ptr, i64, i64 } { ptr @.str.477, i64 44, i64 0 })
br label %endif830
endif830:
br label %endif804
else803:
%t485 = load ptr, ptr %a18
%t486 = call { ptr, i64, i64 } @finch.lexer.operator(ptr %t485)
store { ptr, i64, i64 } %t486, ptr %a487
%t488 = getelementptr inbounds { ptr, i64, i64 }, ptr %a487, i32 0, i32 1
%t489 = load i64, ptr %t488
%t490 = icmp eq i64 %t489, 0
br i1 %t490, label %then831, label %endif833
then831:
store i64 1, ptr %a491
%t492 = load i8, ptr %a43
%t493 = zext i8 %t492 to i64
%t494 = and i64 %t493, 224
%t495 = icmp eq i64 %t494, 192
br i1 %t495, label %then834, label %else835
then834:
store i64 2, ptr %a491
br label %endif836
else835:
%t496 = load i8, ptr %a43
%t497 = zext i8 %t496 to i64
%t498 = and i64 %t497, 240
%t499 = icmp eq i64 %t498, 224
br i1 %t499, label %then837, label %else838
then837:
store i64 3, ptr %a491
br label %endif839
else838:
%t500 = load i8, ptr %a43
%t501 = zext i8 %t500 to i64
%t502 = and i64 %t501, 248
%t503 = icmp eq i64 %t502, 240
br i1 %t503, label %then840, label %endif842
then840:
store i64 4, ptr %a491
br label %endif842
endif842:
br label %endif839
endif839:
br label %endif836
endif836:
store { ptr, i64, i64 } { ptr @.str.478, i64 0, i64 0 }, ptr %a504
%t505 = load i8, ptr %a43
%t506 = zext i8 %t505 to i64
%t507 = icmp sge i64 %t506, 128
br i1 %t507, label %then843, label %endif845
then843:
store { ptr, i64, i64 } { ptr @.str.479, i64 74, i64 0 }, ptr %a504
br label %endif845
endif845:
%t508 = load ptr, ptr %a18
%t509 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2
%t510 = load i64, ptr %t509
%t511 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3
%t512 = load i64, ptr %t511
%t513 = load ptr, ptr %a18
%t514 = icmp eq ptr %t513, null
br i1 %t514, label %panic846, label %ok847
panic846:
call void @finch_panic(ptr @.str.481, i64 211, ptr @.str.482)
unreachable
ok847:
%t515 = getelementptr inbounds %S.lexer.Lexer, ptr %t513, i32 0, i32 0
%t516 = load { ptr, i64, i64 }, ptr %t515
store { ptr, i64, i64 } %t516, ptr %a517
%t519 = load ptr, ptr %a18
%t520 = icmp eq ptr %t519, null
br i1 %t520, label %panic848, label %ok849
panic848:
call void @finch_panic(ptr @.str.484, i64 211, ptr @.str.485)
unreachable
ok849:
%t521 = getelementptr inbounds %S.lexer.Lexer, ptr %t519, i32 0, i32 2
%t522 = load i64, ptr %t521
%t523 = load ptr, ptr %a18
%t524 = icmp eq ptr %t523, null
br i1 %t524, label %panic850, label %ok851
panic850:
call void @finch_panic(ptr @.str.486, i64 211, ptr @.str.487)
unreachable
ok851:
%t525 = getelementptr inbounds %S.lexer.Lexer, ptr %t523, i32 0, i32 2
%t526 = load i64, ptr %t525
%t527 = load i64, ptr %a491
%t528 = add i64 %t526, %t527
call void @finch_str_sub(ptr %a518, ptr %a517, i64 %t522, i64 %t528, ptr @.str.483, i64 211)
%t529 = load { ptr, i64, i64 }, ptr %a518
store { ptr, i64, i64 } { ptr @.str.480, i64 22, i64 0 }, ptr %a531
store { ptr, i64, i64 } %t529, ptr %a532
call void @finch_str_concat(ptr %a530, ptr %a531, ptr %a532)
%t533 = load { ptr, i64, i64 }, ptr %a530
store { ptr, i64, i64 } %t533, ptr %a535
store { ptr, i64, i64 } { ptr @.str.488, i64 1, i64 0 }, ptr %a536
call void @finch_str_concat(ptr %a534, ptr %a535, ptr %a536)
%t537 = load { ptr, i64, i64 }, ptr %a534
%t538 = load { ptr, i64, i64 }, ptr %a504
store { ptr, i64, i64 } %t537, ptr %a540
store { ptr, i64, i64 } %t538, ptr %a541
call void @finch_str_concat(ptr %a539, ptr %a540, ptr %a541)
%t542 = load { ptr, i64, i64 }, ptr %a539
call void @finch.lexer.fail(ptr %t508, i64 %t510, i64 %t512, { ptr, i64, i64 } %t542)
br label %endif833
endif833:
%t543 = getelementptr inbounds { ptr, i64, i64 }, ptr %a487, i32 0, i32 1
%t544 = load i64, ptr %t543
store i64 0, ptr %a545
br label %for.cond852
for.cond852:
%t546 = load i64, ptr %a545
%t547 = icmp slt i64 %t546, %t544
br i1 %t547, label %for.body853, label %for.end855
for.body853:
%t548 = load ptr, ptr %a18
call void @finch.lexer.advance(ptr %t548)
br label %for.step854
for.step854:
%t549 = load i64, ptr %a545
%t550 = add i64 %t549, 1
store i64 %t550, ptr %a545
br label %for.cond852
for.end855:
%t551 = load { ptr, i64, i64 }, ptr %a487
%t552 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0
store { ptr, i64, i64 } %t551, ptr %a553
call void @finch_str_copy(ptr %a554, ptr %a553)
%t555 = load { ptr, i64, i64 }, ptr %a554
store { ptr, i64, i64 } %t555, ptr %t552
%t556 = load { ptr, i64, i64 }, ptr %a487
%t557 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1
store { ptr, i64, i64 } %t556, ptr %a558
call void @finch_str_copy(ptr %a559, ptr %a558)
%t560 = load { ptr, i64, i64 }, ptr %a559
store { ptr, i64, i64 } %t560, ptr %t557
br label %endif804
endif804:
br label %endif694
endif694:
br label %endif657
endif657:
%t561 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1
%t562 = load %S.lexer.Token, ptr %a169
store %S.lexer.Token %t562, ptr %a563
call void @finch.copy.S_lexer_Token(ptr %a564, ptr %a563)
%t565 = load %S.lexer.Token, ptr %a564
%t566 = load i64, ptr %t561
%t567 = add i64 %t566, 1
call void @finch_arr_reserve(ptr %a19, i64 %t567, i64 ptrtoint (ptr getelementptr (%S.lexer.Token, ptr null, i32 1) to i64))
%t568 = load ptr, ptr %a19
%t569 = getelementptr inbounds %S.lexer.Token, ptr %t568, i64 %t566
store %S.lexer.Token %t565, ptr %t569
store i64 %t567, ptr %t561
br label %while.cond554
while.end556:
%t570 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1
%t571 = insertvalue %S.lexer.Token zeroinitializer, { ptr, i64, i64 } { ptr @.str.489, i64 3, i64 0 }, 0
%t572 = insertvalue %S.lexer.Token %t571, { ptr, i64, i64 } { ptr @.str.490, i64 0, i64 0 }, 1
%t573 = load ptr, ptr %a18
%t574 = icmp eq ptr %t573, null
br i1 %t574, label %panic856, label %ok857
panic856:
call void @finch_panic(ptr @.str.491, i64 221, ptr @.str.492)
unreachable
ok857:
%t575 = getelementptr inbounds %S.lexer.Lexer, ptr %t573, i32 0, i32 3
%t576 = load i64, ptr %t575
%t577 = insertvalue %S.lexer.Token %t572, i64 %t576, 2
%t578 = load ptr, ptr %a18
%t579 = icmp eq ptr %t578, null
br i1 %t579, label %panic858, label %ok859
panic858:
call void @finch_panic(ptr @.str.493, i64 221, ptr @.str.494)
unreachable
ok859:
%t580 = getelementptr inbounds %S.lexer.Lexer, ptr %t578, i32 0, i32 4
%t581 = load i64, ptr %t580
%t582 = insertvalue %S.lexer.Token %t577, i64 %t581, 3
%t583 = insertvalue %S.lexer.Token %t582, i1 true, 4
%t584 = load i64, ptr %t570
%t585 = add i64 %t584, 1
call void @finch_arr_reserve(ptr %a19, i64 %t585, i64 ptrtoint (ptr getelementptr (%S.lexer.Token, ptr null, i32 1) to i64))
%t586 = load ptr, ptr %a19
%t587 = getelementptr inbounds %S.lexer.Token, ptr %t586, i64 %t584
store %S.lexer.Token %t583, ptr %t587
store i64 %t585, ptr %t570
%t588 = load { ptr, i64, i64 }, ptr %a19
store { ptr, i64, i64 } %t588, ptr %a589
call void @finch.copy.arr_S_lexer_Token(ptr %a590, ptr %a589)
%t591 = load { ptr, i64, i64 }, ptr %a590
ret { ptr, i64, i64 } %t591
}
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
%a15 = alloca %S.ast.Type, align 16
%a16 = alloca %S.ast.Type, align 16
store %S.ast.Type %p0, ptr %a1
%t2 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.495, 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
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
ret %S.ast.Type %t17
}
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
%a26 = alloca %S.ast.Type, align 16
%a27 = 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.496, 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
store %S.ast.Type %t25, ptr %a26
call void @finch.copy.S_ast_Type(ptr %a27, ptr %a26)
%t28 = load %S.ast.Type, ptr %a27
ret %S.ast.Type %t28
}
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
%a15 = alloca %S.ast.Type, align 16
%a16 = alloca %S.ast.Type, align 16
store %S.ast.Type %p0, ptr %a1
%t2 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.497, 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
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
ret %S.ast.Type %t17
}
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 %then863, label %endif865
then863:
ret i1 false
endif865:
%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.498, 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.from866
logic.from866:
br i1 %t16, label %logic.end868, label %logic.rhs867
logic.rhs867:
%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.499, 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.rend869
logic.rend869:
br label %logic.end868
logic.end868:
%t23 = phi i1 [ true, %logic.from866 ], [ %t22, %logic.rend869 ]
br label %logic.from870
logic.from870:
br i1 %t23, label %logic.end872, label %logic.rhs871
logic.rhs871:
%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.500, 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.rend873
logic.rend873:
br label %logic.end872
logic.end872:
%t30 = phi i1 [ true, %logic.from870 ], [ %t29, %logic.rend873 ]
br i1 %t30, label %then874, label %endif876
then874:
%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.from877
logic.from877:
br i1 %t38, label %logic.rhs878, label %logic.end879
logic.rhs878:
%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.rend880
logic.rend880:
br label %logic.end879
logic.end879:
%t47 = phi i1 [ false, %logic.from877 ], [ %t46, %logic.rend880 ]
ret i1 %t47
endif876:
%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.501, 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.from881
logic.from881:
br i1 %t53, label %logic.rhs882, label %logic.end883
logic.rhs882:
%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.rend884
logic.rend884:
br label %logic.end883
logic.end883:
%t59 = phi i1 [ false, %logic.from881 ], [ %t58, %logic.rend884 ]
br i1 %t59, label %then885, label %endif887
then885:
ret i1 false
endif887:
%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.502, 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.from888
logic.from888:
br i1 %t65, label %logic.end890, label %logic.rhs889
logic.rhs889:
%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.503, 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.rend891
logic.rend891:
br label %logic.end890
logic.end890:
%t72 = phi i1 [ true, %logic.from888 ], [ %t71, %logic.rend891 ]
br label %logic.from892
logic.from892:
br i1 %t72, label %logic.end894, label %logic.rhs893
logic.rhs893:
%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.504, 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.rend895
logic.rend895:
br label %logic.end894
logic.end894:
%t79 = phi i1 [ true, %logic.from892 ], [ %t78, %logic.rend895 ]
br label %logic.from896
logic.from896:
br i1 %t79, label %logic.end898, label %logic.rhs897
logic.rhs897:
%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.505, 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.rend899
logic.rend899:
br label %logic.end898
logic.end898:
%t86 = phi i1 [ true, %logic.from896 ], [ %t85, %logic.rend899 ]
br i1 %t86, label %then900, label %endif902
then900:
%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 %then903, label %endif905
then903:
ret i1 false
endif905:
%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.cond906
for.cond906:
%t98 = load i64, ptr %a97
%t99 = icmp slt i64 %t98, %t96
br i1 %t99, label %for.body907, label %for.end909
for.body907:
%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 %range910, label %inrange911
range910:
call void @finch_panic_index(ptr @.str.506, i64 54, i64 %t101, i64 %t103)
unreachable
inrange911:
%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 %range912, label %inrange913
range912:
call void @finch_panic_index(ptr @.str.507, i64 54, i64 %t109, i64 %t111)
unreachable
inrange913:
%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 %then914, label %endif916
then914:
ret i1 false
endif916:
br label %for.step908
for.step908:
%t118 = load i64, ptr %a97
%t119 = add i64 %t118, 1
store i64 %t119, ptr %a97
br label %for.cond906
for.end909:
ret i1 true
endif902:
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
%a22 = alloca { ptr, i64, i64 }, align 16
%a23 = 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
%a34 = alloca { ptr, i64, i64 }, align 16
%a35 = alloca { ptr, i64, i64 }, align 16
%a36 = 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
%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
%a68 = alloca { ptr, i64, i64 }, align 16
%a69 = alloca { ptr, i64, i64 }, align 16
%a70 = 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
%a86 = alloca { ptr, i64, i64 }, align 16
%a87 = 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
%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
%a125 = alloca { ptr, i64, i64 }, align 16
%a126 = 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
%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
%a159 = alloca { ptr, i64, i64 }, align 16
%a160 = 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.508, 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 %then917, label %endif919
then917:
%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 %range920, label %inrange921
range920:
call void @finch_panic_index(ptr @.str.510, i64 65, i64 0, i64 %t10)
unreachable
inrange921:
%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.509, 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
ret { ptr, i64, i64 } %t19
endif919:
%t20 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0
%t21 = load { ptr, i64, i64 }, ptr %t20
store { ptr, i64, i64 } %t21, ptr %a22
store { ptr, i64, i64 } { ptr @.str.511, i64 5, i64 0 }, ptr %a23
%t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23)
%t25 = icmp ne i32 %t24, 0
br i1 %t25, label %then922, label %endif924
then922:
%t26 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 4
%t27 = load i64, ptr %t26
call void @finch_str_from_int(ptr %a28, i64 %t27)
%t29 = load { ptr, i64, i64 }, ptr %a28
store { ptr, i64, i64 } { ptr @.str.512, i64 1, i64 0 }, ptr %a31
store { ptr, i64, i64 } %t29, ptr %a32
call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32)
%t33 = load { ptr, i64, i64 }, ptr %a30
store { ptr, i64, i64 } %t33, ptr %a35
store { ptr, i64, i64 } { ptr @.str.513, i64 1, i64 0 }, ptr %a36
call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36)
%t37 = load { ptr, i64, i64 }, ptr %a34
%t38 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1
%t39 = load { ptr, i64, i64 }, ptr %t38
%t40 = extractvalue { ptr, i64, i64 } %t39, 1
%t41 = icmp uge i64 0, %t40
br i1 %t41, label %range925, label %inrange926
range925:
call void @finch_panic_index(ptr @.str.514, i64 68, i64 0, i64 %t40)
unreachable
inrange926:
%t42 = extractvalue { ptr, i64, i64 } %t39, 0
%t43 = getelementptr inbounds %S.ast.Type, ptr %t42, i64 0
%t44 = load %S.ast.Type, ptr %t43
%t45 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t44)
store { ptr, i64, i64 } %t37, 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
ret { ptr, i64, i64 } %t49
endif924:
%t50 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0
%t51 = load { ptr, i64, i64 }, ptr %t50
store { ptr, i64, i64 } %t51, ptr %a52
store { ptr, i64, i64 } { ptr @.str.515, i64 3, i64 0 }, ptr %a53
%t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53)
%t55 = icmp ne i32 %t54, 0
br i1 %t55, label %then927, label %endif929
then927:
%t56 = getelementptr inbounds %S.ast.Type, ptr %a1, 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 %range930, label %inrange931
range930:
call void @finch_panic_index(ptr @.str.517, i64 71, i64 0, i64 %t58)
unreachable
inrange931:
%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.ast.show(%S.ast.Type %t62)
store { ptr, i64, i64 } { ptr @.str.516, i64 4, 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.518, i64 1, i64 0 }, ptr %a70
call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70)
%t71 = load { ptr, i64, i64 }, ptr %a68
%t72 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1
%t73 = load { ptr, i64, i64 }, ptr %t72
%t74 = extractvalue { ptr, i64, i64 } %t73, 1
%t75 = icmp uge i64 1, %t74
br i1 %t75, label %range932, label %inrange933
range932:
call void @finch_panic_index(ptr @.str.519, i64 71, i64 1, i64 %t74)
unreachable
inrange933:
%t76 = extractvalue { ptr, i64, i64 } %t73, 0
%t77 = getelementptr inbounds %S.ast.Type, ptr %t76, i64 1
%t78 = load %S.ast.Type, ptr %t77
%t79 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t78)
store { ptr, i64, i64 } %t71, ptr %a81
store { ptr, i64, i64 } %t79, ptr %a82
call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82)
%t83 = load { ptr, i64, i64 }, ptr %a80
ret { ptr, i64, i64 } %t83
endif929:
%t84 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0
%t85 = load { ptr, i64, i64 }, ptr %t84
store { ptr, i64, i64 } %t85, ptr %a86
store { ptr, i64, i64 } { ptr @.str.520, 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 %then934, label %endif936
then934:
%t90 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1
%t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t90, i32 0, i32 1
%t92 = load i64, ptr %t91
%t93 = icmp eq i64 %t92, 0
br i1 %t93, label %then937, label %endif939
then937:
ret { ptr, i64, i64 } { ptr @.str.521, i64 3, i64 0 }
endif939:
%t94 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1
%t95 = load { ptr, i64, i64 }, ptr %t94
%t96 = extractvalue { ptr, i64, i64 } %t95, 1
%t97 = icmp uge i64 0, %t96
br i1 %t97, label %range940, label %inrange941
range940:
call void @finch_panic_index(ptr @.str.523, i64 77, i64 0, i64 %t96)
unreachable
inrange941:
%t98 = extractvalue { ptr, i64, i64 } %t95, 0
%t99 = getelementptr inbounds %S.ast.Type, ptr %t98, i64 0
%t100 = load %S.ast.Type, ptr %t99
%t101 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t100)
store { ptr, i64, i64 } { ptr @.str.522, i64 4, 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.524, i64 1, i64 0 }, ptr %a108
call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108)
%t109 = load { ptr, i64, i64 }, ptr %a106
ret { ptr, i64, i64 } %t109
endif936:
%t110 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0
%t111 = load { ptr, i64, i64 }, ptr %t110
store { ptr, i64, i64 } %t111, ptr %a112
store { ptr, i64, i64 } { ptr @.str.525, i64 6, i64 0 }, ptr %a113
%t114 = call i32 @finch_str_eq(ptr %a112, ptr %a113)
%t115 = icmp ne i32 %t114, 0
br label %logic.from942
logic.from942:
br i1 %t115, label %logic.end944, label %logic.rhs943
logic.rhs943:
%t116 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0
%t117 = load { ptr, i64, i64 }, ptr %t116
store { ptr, i64, i64 } %t117, ptr %a118
store { ptr, i64, i64 } { ptr @.str.526, i64 5, i64 0 }, ptr %a119
%t120 = call i32 @finch_str_eq(ptr %a118, ptr %a119)
%t121 = icmp ne i32 %t120, 0
br label %logic.rend945
logic.rend945:
br label %logic.end944
logic.end944:
%t122 = phi i1 [ true, %logic.from942 ], [ %t121, %logic.rend945 ]
br label %logic.from946
logic.from946:
br i1 %t122, label %logic.end948, label %logic.rhs947
logic.rhs947:
%t123 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0
%t124 = load { ptr, i64, i64 }, ptr %t123
store { ptr, i64, i64 } %t124, ptr %a125
store { ptr, i64, i64 } { ptr @.str.527, i64 4, i64 0 }, ptr %a126
%t127 = call i32 @finch_str_eq(ptr %a125, ptr %a126)
%t128 = icmp ne i32 %t127, 0
br label %logic.rend949
logic.rend949:
br label %logic.end948
logic.end948:
%t129 = phi i1 [ true, %logic.from946 ], [ %t128, %logic.rend949 ]
br i1 %t129, label %then950, label %endif952
then950:
%t130 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3
%t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t130, i32 0, i32 1
%t132 = load i64, ptr %t131
%t133 = icmp sgt i64 %t132, 0
br i1 %t133, label %then953, label %endif955
then953:
%t134 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3
%t135 = load { ptr, i64, i64 }, ptr %t134
store { ptr, i64, i64 } %t135, ptr %a137
store { ptr, i64, i64 } { ptr @.str.528, i64 1, i64 0 }, ptr %a138
call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138)
%t139 = load { ptr, i64, i64 }, ptr %a136
%t140 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2
%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)
%t145 = load { ptr, i64, i64 }, ptr %a142
ret { ptr, i64, i64 } %t145
endif955:
%t146 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 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
ret { ptr, i64, i64 } %t150
endif952:
%t151 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0
%t152 = load { ptr, i64, i64 }, ptr %t151
store { ptr, i64, i64 } %t152, ptr %a153
store { ptr, i64, i64 } { ptr @.str.529, 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 %then956, label %endif958
then956:
ret { ptr, i64, i64 } { ptr @.str.530, i64 7, i64 0 }
endif958:
%t157 = getelementptr inbounds %S.ast.Type, ptr %a1, 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
ret { ptr, i64, i64 } %t161
}
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
%a20 = alloca { ptr, i64, i64 }, align 16
%a21 = alloca { ptr, i64, i64 }, align 16
%a22 = 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
%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
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 %panic959, label %ok960
panic959:
call void @finch_panic(ptr @.str.531, i64 14, ptr @.str.532)
unreachable
ok960:
%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.533, 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)
%t19 = load { ptr, i64, i64 }, ptr %a16
store { ptr, i64, i64 } %t19, ptr %a21
store { ptr, i64, i64 } { ptr @.str.534, i64 1, i64 0 }, ptr %a22
call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22)
%t23 = load { ptr, i64, i64 }, ptr %a20
%t24 = getelementptr inbounds %S.lexer.Token, ptr %a2, i32 0, i32 3
%t25 = load i64, ptr %t24
call void @finch_str_from_int(ptr %a26, i64 %t25)
%t27 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t23, 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.535, i64 9, i64 0 }, ptr %a34
call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34)
%t35 = load { ptr, i64, i64 }, ptr %a32
%t36 = load { ptr, i64, i64 }, ptr %a3
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)
%t40 = load { ptr, i64, i64 }, ptr %a37
%t41 = extractvalue { ptr, i64, i64 } %t40, 1
%t42 = trunc i64 %t41 to i32
%t43 = extractvalue { ptr, i64, i64 } %t40, 0
%t44 = icmp eq ptr %t43, null
%t45 = select i1 %t44, ptr @.str.536, ptr %t43
%t46 = call i32 (ptr, ...) @printf(ptr @.str.537, i32 %t42, ptr %t45)
%t47 = call i32 (ptr, ...) @printf(ptr @.str.538)
%t48 = trunc i64 1 to i32
%t49 = call i32 @fflush(ptr null)
call void @exit(i32 %t48)
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 %panic961, label %ok962
panic961:
call void @finch_panic(ptr @.str.539, i64 19, ptr @.str.540)
unreachable
ok962:
%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 %panic963, label %ok964
panic963:
call void @finch_panic(ptr @.str.541, i64 19, ptr @.str.542)
unreachable
ok964:
%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 %range965, label %inrange966
range965:
call void @finch_panic_index(ptr @.str.543, i64 19, i64 %t8, i64 %t10)
unreachable
inrange966:
%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 %panic967, label %ok968
panic967:
call void @finch_panic(ptr @.str.544, i64 23, ptr @.str.545)
unreachable
ok968:
%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 %panic969, label %ok970
panic969:
call void @finch_panic(ptr @.str.546, i64 23, ptr @.str.547)
unreachable
ok970:
%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 %range971, label %inrange972
range971:
call void @finch_panic_index(ptr @.str.548, i64 23, i64 %t8, i64 %t10)
unreachable
inrange972:
%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 %panic973, label %ok974
panic973:
call void @finch_panic(ptr @.str.549, i64 27, ptr @.str.550)
unreachable
ok974:
%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 %panic975, label %ok976
panic975:
call void @finch_panic(ptr @.str.551, i64 28, ptr @.str.552)
unreachable
ok976:
%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 %then977, label %endif979
then977:
%t17 = load ptr, ptr %a1
%t18 = icmp eq ptr %t17, null
br i1 %t18, label %panic980, label %ok981
panic980:
call void @finch_panic(ptr @.str.553, i64 29, ptr @.str.554)
unreachable
ok981:
%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 %endif979
endif979:
%t23 = load ptr, ptr %a1
%t24 = icmp eq ptr %t23, null
br i1 %t24, label %panic982, label %ok983
panic982:
call void @finch_panic(ptr @.str.555, i64 31, ptr @.str.556)
unreachable
ok983:
%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 %range984, label %inrange985
range984:
call void @finch_panic_index(ptr @.str.557, i64 31, i64 %t26, i64 %t28)
unreachable
inrange985:
%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 %panic986, label %ok987
panic986:
call void @finch_panic(ptr @.str.558, i64 35, ptr @.str.559)
unreachable
ok987:
%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 %panic988, label %ok989
panic988:
call void @finch_panic(ptr @.str.560, i64 35, ptr @.str.561)
unreachable
ok989:
%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 %range990, label %inrange991
range990:
call void @finch_panic_index(ptr @.str.562, i64 35, i64 %t9, i64 %t11)
unreachable
inrange991:
%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
%a25 = alloca %S.lexer.Token, align 16
%a26 = 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 %panic992, label %ok993
panic992:
call void @finch_panic(ptr @.str.563, i64 39, ptr @.str.564)
unreachable
ok993:
%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 %panic994, label %ok995
panic994:
call void @finch_panic(ptr @.str.565, i64 39, ptr @.str.566)
unreachable
ok995:
%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 %range996, label %inrange997
range996:
call void @finch_panic_index(ptr @.str.567, i64 39, i64 %t8, i64 %t10)
unreachable
inrange997:
%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 %panic998, label %ok999
panic998:
call void @finch_panic(ptr @.str.568, i64 40, ptr @.str.569)
unreachable
ok999:
%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
store %S.lexer.Token %t24, ptr %a25
call void @finch.copy.S_lexer_Token(ptr %a26, ptr %a25)
%t27 = load %S.lexer.Token, ptr %a26
ret %S.lexer.Token %t27
}
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 %then1000, label %endif1002
then1000:
%t6 = load ptr, ptr %a1
%t7 = icmp eq ptr %t6, null
br i1 %t7, label %panic1003, label %ok1004
panic1003:
call void @finch_panic(ptr @.str.570, i64 46, ptr @.str.571)
unreachable
ok1004:
%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
endif1002:
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
%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
%a32 = alloca { ptr, i64, i64 }, align 16
%a33 = 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
%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
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.572, 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 %then1005, label %endif1007
then1005:
%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.573, 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.574, i64 1, i64 0 }, ptr %a16
call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16)
%t17 = load { ptr, i64, i64 }, ptr %a14
ret { ptr, i64, i64 } %t17
endif1007:
%t18 = getelementptr inbounds %S.lexer.Token, 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.575, i64 3, i64 0 }, ptr %a21
%t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21)
%t23 = icmp ne i32 %t22, 0
br i1 %t23, label %then1008, label %endif1010
then1008:
ret { ptr, i64, i64 } { ptr @.str.576, i64 11, i64 0 }
endif1010:
%t24 = getelementptr inbounds %S.lexer.Token, 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.577, 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.from1011
logic.from1011:
br i1 %t29, label %logic.end1013, label %logic.rhs1012
logic.rhs1012:
%t30 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0
%t31 = load { ptr, i64, i64 }, ptr %t30
store { ptr, i64, i64 } %t31, ptr %a32
store { ptr, i64, i64 } { ptr @.str.578, i64 5, i64 0 }, ptr %a33
%t34 = call i32 @finch_str_eq(ptr %a32, ptr %a33)
%t35 = icmp ne i32 %t34, 0
br label %logic.rend1014
logic.rend1014:
br label %logic.end1013
logic.end1013:
%t36 = phi i1 [ true, %logic.from1011 ], [ %t35, %logic.rend1014 ]
br i1 %t36, label %then1015, label %endif1017
then1015:
ret { ptr, i64, i64 } { ptr @.str.579, i64 8, i64 0 }
endif1017:
%t37 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0
%t38 = load { ptr, i64, i64 }, ptr %t37
store { ptr, i64, i64 } %t38, ptr %a39
store { ptr, i64, i64 } { ptr @.str.580, i64 6, i64 0 }, ptr %a40
%t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40)
%t42 = icmp ne i32 %t41, 0
br i1 %t42, label %then1018, label %endif1020
then1018:
ret { ptr, i64, i64 } { ptr @.str.581, i64 8, i64 0 }
endif1020:
%t43 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0
%t44 = load { ptr, i64, i64 }, ptr %t43
store { ptr, i64, i64 } %t44, ptr %a45
store { ptr, i64, i64 } { ptr @.str.582, i64 4, i64 0 }, ptr %a46
%t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46)
%t48 = icmp ne i32 %t47, 0
br i1 %t48, label %then1021, label %endif1023
then1021:
ret { ptr, i64, i64 } { ptr @.str.583, i64 6, i64 0 }
endif1023:
%t49 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0
%t50 = load { ptr, i64, i64 }, ptr %t49
store { ptr, i64, i64 } { ptr @.str.584, i64 1, 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.585, i64 1, i64 0 }, ptr %a57
call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57)
%t58 = load { ptr, i64, i64 }, ptr %a55
ret { ptr, i64, i64 } %t58
}
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
%a23 = alloca { ptr, i64, i64 }, align 16
%a24 = alloca { ptr, i64, i64 }, align 16
%a25 = 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 %then1024, label %endif1026
then1024:
%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.586, 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.587, i64 8, i64 0 }, ptr %a18
call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18)
%t19 = load { ptr, i64, i64 }, ptr %a16
%t20 = load ptr, ptr %a1
%t21 = call %S.lexer.Token @finch.parser.cur(ptr %t20)
%t22 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t21)
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)
%t26 = load { ptr, i64, i64 }, ptr %a23
call void @finch.parser.fail(ptr %t8, %S.lexer.Token %t10, { ptr, i64, i64 } %t26)
br label %endif1026
endif1026:
%t27 = load ptr, ptr %a1
%t28 = call %S.lexer.Token @finch.parser.next(ptr %t27)
ret %S.lexer.Token %t28
}
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 %panic1027, label %ok1028
panic1027:
call void @finch_panic(ptr @.str.588, i64 79, ptr @.str.589)
unreachable
ok1028:
%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.from1029
logic.from1029:
br i1 %t6, label %logic.end1031, label %logic.rhs1030
logic.rhs1030:
%t7 = load ptr, ptr %a1
%t8 = icmp eq ptr %t7, null
br i1 %t8, label %panic1032, label %ok1033
panic1032:
call void @finch_panic(ptr @.str.590, i64 79, ptr @.str.591)
unreachable
ok1033:
%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 %panic1034, label %ok1035
panic1034:
call void @finch_panic(ptr @.str.592, i64 79, ptr @.str.593)
unreachable
ok1035:
%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 %range1036, label %inrange1037
range1036:
call void @finch_panic_index(ptr @.str.594, i64 79, i64 %t13, i64 %t15)
unreachable
inrange1037:
%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.rend1038
logic.rend1038:
br label %logic.end1031
logic.end1031:
%t22 = phi i1 [ true, %logic.from1029 ], [ %t21, %logic.rend1038 ]
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 %panic1039, label %ok1040
panic1039:
call void @finch_panic(ptr @.str.595, i64 83, ptr @.str.596)
unreachable
ok1040:
%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 %panic1041, label %ok1042
panic1041:
call void @finch_panic(ptr @.str.597, i64 83, ptr @.str.598)
unreachable
ok1042:
%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 %range1043, label %inrange1044
range1043:
call void @finch_panic_index(ptr @.str.599, i64 83, i64 %t9, i64 %t11)
unreachable
inrange1044:
%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 %panic1045, label %ok1046
panic1045:
call void @finch_panic(ptr @.str.600, i64 84, ptr @.str.601)
unreachable
ok1046:
%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
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.602, i64 3, i64 0 }, ptr %t4
%t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1
store { ptr, i64, i64 } { ptr @.str.603, i64 5, i64 0 }, ptr %t5
%t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2
store { ptr, i64, i64 } { ptr @.str.604, i64 4, i64 0 }, ptr %t6
%t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3
store { ptr, i64, i64 } { ptr @.str.605, i64 4, i64 0 }, ptr %t7
%t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4
store { ptr, i64, i64 } { ptr @.str.606, i64 3, i64 0 }, ptr %t8
%t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5
store { ptr, i64, i64 } { ptr @.str.607, i64 3, i64 0 }, ptr %t9
%t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6
store { ptr, i64, i64 } { ptr @.str.608, i64 2, i64 0 }, ptr %t10
%t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7
store { ptr, i64, i64 } { ptr @.str.609, i64 3, i64 0 }, ptr %t11
%t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8
store { ptr, i64, i64 } { ptr @.str.610, i64 3, i64 0 }, ptr %t12
%t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9
store { ptr, i64, i64 } { ptr @.str.611, i64 3, i64 0 }, ptr %t13
%t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10
store { ptr, i64, i64 } { ptr @.str.612, i64 2, i64 0 }, ptr %t14
%t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11
store { ptr, i64, i64 } { ptr @.str.613, i64 3, i64 0 }, ptr %t15
%t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12
store { ptr, i64, i64 } { ptr @.str.614, i64 3, i64 0 }, ptr %t16
%t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13
store { ptr, i64, i64 } { ptr @.str.615, i64 3, i64 0 }, ptr %t17
%t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14
store { ptr, i64, i64 } { ptr @.str.616, i64 3, i64 0 }, ptr %t18
%t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15
store { ptr, i64, i64 } { ptr @.str.617, 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.cond1047
find.cond1047:
%t30 = load i64, ptr %a29
%t31 = icmp slt i64 %t30, %t27
br i1 %t31, label %find.body1048, label %find.end1051
find.body1048:
%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.hit1049, label %find.next1050
find.hit1049:
store i64 %t30, ptr %a26
br label %find.end1051
find.next1050:
%t38 = add i64 %t30, 1
store i64 %t38, ptr %a29
br label %find.cond1047
find.end1051:
%t39 = load i64, ptr %a26
%t40 = icmp sge i64 %t39, 0
ret i1 %t40
}
define internal %S.ast.Type @finch.parser.parseType(ptr %p0) {
entry:
%a1 = alloca ptr, 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
%a29 = alloca { ptr, i64, i64 }, align 16
%a30 = 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
%a45 = alloca %S.ast.Type, align 16
%a55 = alloca { ptr, i64, i64 }, align 16
%a56 = alloca { ptr, i64, i64 }, align 16
%a65 = alloca %S.ast.Type, 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
%a85 = alloca { ptr, i64, i64 }, align 16
%a86 = alloca { ptr, i64, i64 }, align 16
%a89 = alloca %S.ast.Type, align 16
%a94 = alloca { ptr, i64, i64 }, align 16
%a95 = 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
%a122 = alloca { ptr, i64, i64 }, align 16
%a123 = alloca { ptr, i64, i64 }, align 16
%a143 = alloca %S.ast.Type, align 16
%a144 = alloca %S.ast.Type, 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.618, i64 1, i64 0 })
br i1 %t3, label %then1052, label %endif1054
then1052:
%t4 = load ptr, ptr %a1
%t5 = call %S.lexer.Token @finch.parser.expect(ptr %t4, { ptr, i64, i64 } { ptr @.str.619, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.620, i64 36, i64 0 })
%t6 = load ptr, ptr %a1
%t7 = call %S.ast.Type @finch.parser.parseType(ptr %t6)
%t8 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t7)
ret %S.ast.Type %t8
endif1054:
%t9 = load ptr, ptr %a1
%t10 = call i1 @finch.parser.at(ptr %t9, { ptr, i64, i64 } { ptr @.str.621, i64 5, i64 0 })
%t11 = xor i1 %t10, true
br i1 %t11, label %then1055, label %endif1057
then1055:
%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 { ptr, i64, i64 } { ptr @.str.622, i64 11, i64 0 }, ptr %a19
store { ptr, i64, i64 } %t17, ptr %a20
call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20)
%t21 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t21, ptr %a23
store { ptr, i64, i64 } { ptr @.str.623, i64 56, i64 0 }, ptr %a24
call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24)
%t25 = load { ptr, i64, i64 }, ptr %a22
call void @finch.parser.fail(ptr %t12, %S.lexer.Token %t14, { ptr, i64, i64 } %t25)
br label %endif1057
endif1057:
%t26 = load ptr, ptr %a1
%t27 = call %S.lexer.Token @finch.parser.next(ptr %t26)
%t28 = extractvalue %S.lexer.Token %t27, 1
store { ptr, i64, i64 } %t28, ptr %a29
call void @finch_str_copy(ptr %a30, ptr %a29)
%t31 = load { ptr, i64, i64 }, ptr %a30
store { ptr, i64, i64 } %t31, ptr %a32
%t33 = load { ptr, i64, i64 }, ptr %a32
store { ptr, i64, i64 } %t33, ptr %a34
store { ptr, i64, i64 } { ptr @.str.624, 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.from1058
logic.from1058:
br i1 %t37, label %logic.rhs1059, label %logic.end1060
logic.rhs1059:
%t38 = load ptr, ptr %a1
%t39 = call i1 @finch.parser.at(ptr %t38, { ptr, i64, i64 } { ptr @.str.625, i64 1, i64 0 })
br label %logic.rend1061
logic.rend1061:
br label %logic.end1060
logic.end1060:
%t40 = phi i1 [ false, %logic.from1058 ], [ %t39, %logic.rend1061 ]
br i1 %t40, label %then1062, label %endif1064
then1062:
%t41 = load ptr, ptr %a1
%t42 = call %S.lexer.Token @finch.parser.next(ptr %t41)
%t43 = load ptr, ptr %a1
%t44 = call %S.ast.Type @finch.parser.parseType(ptr %t43)
store %S.ast.Type %t44, ptr %a45
%t46 = load ptr, ptr %a1
%t47 = call %S.lexer.Token @finch.parser.expect(ptr %t46, { ptr, i64, i64 } { ptr @.str.626, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.627, i64 39, i64 0 })
%t48 = load %S.ast.Type, ptr %a45
%t49 = load ptr, ptr %a1
%t50 = call %S.ast.Type @finch.parser.parseType(ptr %t49)
%t51 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t48, %S.ast.Type %t50)
ret %S.ast.Type %t51
endif1064:
%t52 = load { ptr, i64, i64 }, ptr %a32
%t53 = call i1 @finch.parser.isTypeName({ ptr, i64, i64 } %t52)
br i1 %t53, label %then1065, label %endif1067
then1065:
%t54 = load { ptr, i64, i64 }, ptr %a32
store { ptr, i64, i64 } %t54, ptr %a55
store { ptr, i64, i64 } { ptr @.str.628, i64 3, i64 0 }, ptr %a56
%t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56)
%t58 = icmp ne i32 %t57, 0
br label %logic.from1068
logic.from1068:
br i1 %t58, label %logic.rhs1069, label %logic.end1070
logic.rhs1069:
%t59 = load ptr, ptr %a1
%t60 = call i1 @finch.parser.accept(ptr %t59, { ptr, i64, i64 } { ptr @.str.629, i64 1, i64 0 })
br label %logic.rend1071
logic.rend1071:
br label %logic.end1070
logic.end1070:
%t61 = phi i1 [ false, %logic.from1068 ], [ %t60, %logic.rend1071 ]
br i1 %t61, label %then1072, label %endif1074
then1072:
%t62 = load ptr, ptr %a1
%t63 = call %S.ast.Type @finch.parser.parseType(ptr %t62)
%t64 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t63)
store %S.ast.Type %t64, ptr %a65
%t66 = load ptr, ptr %a1
%t67 = call %S.lexer.Token @finch.parser.expect(ptr %t66, { ptr, i64, i64 } { ptr @.str.630, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.631, i64 3, i64 0 })
%t68 = load %S.ast.Type, ptr %a65
ret %S.ast.Type %t68
endif1074:
%t69 = load { ptr, i64, i64 }, ptr %a32
store { ptr, i64, i64 } %t69, ptr %a70
store { ptr, i64, i64 } { ptr @.str.632, i64 3, i64 0 }, ptr %a71
%t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71)
%t73 = icmp ne i32 %t72, 0
br i1 %t73, label %then1075, label %endif1077
then1075:
%t74 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.633, i64 3, i64 0 })
ret %S.ast.Type %t74
endif1077:
%t75 = load { ptr, i64, i64 }, ptr %a32
store { ptr, i64, i64 } %t75, ptr %a76
store { ptr, i64, i64 } { ptr @.str.634, i64 3, i64 0 }, ptr %a77
%t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77)
%t79 = icmp ne i32 %t78, 0
br i1 %t79, label %then1078, label %endif1080
then1078:
%t80 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.635, i64 5, i64 0 })
ret %S.ast.Type %t80
endif1080:
%t81 = load { ptr, i64, i64 }, ptr %a32
%t82 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %t81)
ret %S.ast.Type %t82
endif1067:
%t83 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.636, i64 5, i64 0 }, 0
%t84 = load { ptr, i64, i64 }, ptr %a32
store { ptr, i64, i64 } %t84, ptr %a85
call void @finch_str_copy(ptr %a86, ptr %a85)
%t87 = load { ptr, i64, i64 }, ptr %a86
%t88 = insertvalue %S.ast.Type %t83, { ptr, i64, i64 } %t87, 2
store %S.ast.Type %t88, ptr %a89
%t90 = load ptr, ptr %a1
%t91 = call i1 @finch.parser.at(ptr %t90, { ptr, i64, i64 } { ptr @.str.637, i64 1, i64 0 })
br label %logic.from1081
logic.from1081:
br i1 %t91, label %logic.rhs1082, label %logic.end1083
logic.rhs1082:
%t92 = load ptr, ptr %a1
%t93 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t92, i64 1)
store { ptr, i64, i64 } %t93, ptr %a94
store { ptr, i64, i64 } { ptr @.str.638, i64 5, i64 0 }, ptr %a95
%t96 = call i32 @finch_str_eq(ptr %a94, ptr %a95)
%t97 = icmp ne i32 %t96, 0
br label %logic.rend1084
logic.rend1084:
br label %logic.end1083
logic.end1083:
%t98 = phi i1 [ false, %logic.from1081 ], [ %t97, %logic.rend1084 ]
br i1 %t98, label %then1085, label %endif1087
then1085:
%t99 = load ptr, ptr %a1
%t100 = call %S.lexer.Token @finch.parser.next(ptr %t99)
%t101 = load { ptr, i64, i64 }, ptr %a32
%t102 = getelementptr inbounds %S.ast.Type, ptr %a89, i32 0, i32 3
store { ptr, i64, i64 } %t101, ptr %a103
call void @finch_str_copy(ptr %a104, ptr %a103)
%t105 = load { ptr, i64, i64 }, ptr %a104
store { ptr, i64, i64 } %t105, ptr %t102
%t106 = load ptr, ptr %a1
%t107 = call %S.lexer.Token @finch.parser.next(ptr %t106)
%t108 = extractvalue %S.lexer.Token %t107, 1
store { ptr, i64, i64 } %t108, ptr %a109
call void @finch_str_copy(ptr %a110, ptr %a109)
%t111 = load { ptr, i64, i64 }, ptr %a110
%t112 = getelementptr inbounds %S.ast.Type, ptr %a89, i32 0, i32 2
store { ptr, i64, i64 } %t111, ptr %t112
br label %endif1087
endif1087:
%t113 = load ptr, ptr %a1
%t114 = call i1 @finch.parser.at(ptr %t113, { ptr, i64, i64 } { ptr @.str.639, i64 1, i64 0 })
br label %logic.from1088
logic.from1088:
br i1 %t114, label %logic.rhs1089, label %logic.end1090
logic.rhs1089:
%t115 = load ptr, ptr %a1
%t116 = call %S.lexer.Token @finch.parser.cur(ptr %t115)
%t117 = extractvalue %S.lexer.Token %t116, 4
%t118 = xor i1 %t117, true
br label %logic.rend1091
logic.rend1091:
br label %logic.end1090
logic.end1090:
%t119 = phi i1 [ false, %logic.from1088 ], [ %t118, %logic.rend1091 ]
br label %logic.from1092
logic.from1092:
br i1 %t119, label %logic.rhs1093, label %logic.end1094
logic.rhs1093:
%t120 = load ptr, ptr %a1
%t121 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t120, i64 1)
store { ptr, i64, i64 } %t121, ptr %a122
store { ptr, i64, i64 } { ptr @.str.640, i64 1, i64 0 }, ptr %a123
%t124 = call i32 @finch_str_eq(ptr %a122, ptr %a123)
%t125 = icmp eq i32 %t124, 0
br label %logic.rend1095
logic.rend1095:
br label %logic.end1094
logic.end1094:
%t126 = phi i1 [ false, %logic.from1092 ], [ %t125, %logic.rend1095 ]
br i1 %t126, label %then1096, label %endif1098
then1096:
%t127 = load ptr, ptr %a1
%t128 = call %S.lexer.Token @finch.parser.next(ptr %t127)
br label %while.cond1099
while.cond1099:
br label %while.body1100
while.body1100:
%t129 = getelementptr inbounds %S.ast.Type, ptr %a89, i32 0, i32 1
%t130 = getelementptr inbounds { ptr, i64, i64 }, ptr %t129, i32 0, i32 1
%t131 = load ptr, ptr %a1
%t132 = call %S.ast.Type @finch.parser.parseType(ptr %t131)
%t133 = load i64, ptr %t130
%t134 = add i64 %t133, 1
call void @finch_arr_reserve(ptr %t129, i64 %t134, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64))
%t135 = load ptr, ptr %t129
%t136 = getelementptr inbounds %S.ast.Type, ptr %t135, i64 %t133
store %S.ast.Type %t132, ptr %t136
store i64 %t134, ptr %t130
%t137 = load ptr, ptr %a1
%t138 = call i1 @finch.parser.accept(ptr %t137, { ptr, i64, i64 } { ptr @.str.641, i64 1, i64 0 })
%t139 = xor i1 %t138, true
br i1 %t139, label %then1102, label %endif1104
then1102:
br label %while.end1101
endif1104:
br label %while.cond1099
while.end1101:
%t140 = load ptr, ptr %a1
%t141 = call %S.lexer.Token @finch.parser.expect(ptr %t140, { ptr, i64, i64 } { ptr @.str.642, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.643, i64 28, i64 0 })
br label %endif1098
endif1098:
%t142 = load %S.ast.Type, ptr %a89
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
ret %S.ast.Type %t145
}
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
%a14 = alloca { ptr, i64, i64 }, align 16
%a15 = alloca { ptr, i64, i64 }, align 16
%a19 = alloca i64, align 16
%a25 = alloca i64, align 16
%a44 = alloca { ptr, i64, i64 }, align 16
%a45 = 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
%a84 = alloca { ptr, i64, i64 }, align 16
%a85 = alloca { ptr, i64, i64 }, align 16
%a104 = alloca { ptr, i64, i64 }, align 16
%a105 = 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.644, i64 5, i64 0 })
%t4 = xor i1 %t3, true
br label %logic.from1105
logic.from1105:
br i1 %t4, label %logic.end1107, label %logic.rhs1106
logic.rhs1106:
%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.645, i64 1, i64 0 }, ptr %a8
%t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8)
%t10 = icmp eq i32 %t9, 0
br label %logic.rend1108
logic.rend1108:
br label %logic.end1107
logic.end1107:
%t11 = phi i1 [ true, %logic.from1105 ], [ %t10, %logic.rend1108 ]
br label %logic.from1109
logic.from1109:
br i1 %t11, label %logic.end1111, label %logic.rhs1110
logic.rhs1110:
%t12 = load ptr, ptr %a1
%t13 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t12, i64 2)
store { ptr, i64, i64 } %t13, ptr %a14
store { ptr, i64, i64 } { ptr @.str.646, i64 1, i64 0 }, ptr %a15
%t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15)
%t17 = icmp ne i32 %t16, 0
br label %logic.rend1112
logic.rend1112:
br label %logic.end1111
logic.end1111:
%t18 = phi i1 [ true, %logic.from1109 ], [ %t17, %logic.rend1112 ]
br i1 %t18, label %then1113, label %endif1115
then1113:
ret i1 false
endif1115:
store i64 0, ptr %a19
%t20 = load ptr, ptr %a1
%t21 = icmp eq ptr %t20, null
br i1 %t21, label %panic1116, label %ok1117
panic1116:
call void @finch_panic(ptr @.str.647, i64 148, ptr @.str.648)
unreachable
ok1117:
%t22 = getelementptr inbounds %S.parser.Parser, ptr %t20, i32 0, i32 1
%t23 = load i64, ptr %t22
%t24 = add i64 %t23, 1
store i64 %t24, ptr %a25
br label %while.cond1118
while.cond1118:
%t26 = load i64, ptr %a25
%t27 = load ptr, ptr %a1
%t28 = icmp eq ptr %t27, null
br i1 %t28, label %panic1121, label %ok1122
panic1121:
call void @finch_panic(ptr @.str.649, i64 149, ptr @.str.650)
unreachable
ok1122:
%t29 = getelementptr inbounds %S.parser.Parser, ptr %t27, i32 0, i32 0
%t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1
%t31 = load i64, ptr %t30
%t32 = icmp slt i64 %t26, %t31
br i1 %t32, label %while.body1119, label %while.end1120
while.body1119:
%t33 = load ptr, ptr %a1
%t34 = icmp eq ptr %t33, null
br i1 %t34, label %panic1123, label %ok1124
panic1123:
call void @finch_panic(ptr @.str.651, i64 150, ptr @.str.652)
unreachable
ok1124:
%t35 = getelementptr inbounds %S.parser.Parser, ptr %t33, i32 0, i32 0
%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 %range1125, label %inrange1126
range1125:
call void @finch_panic_index(ptr @.str.653, i64 150, i64 %t36, i64 %t38)
unreachable
inrange1126:
%t40 = extractvalue { ptr, i64, i64 } %t37, 0
%t41 = getelementptr inbounds %S.lexer.Token, ptr %t40, i64 %t36
%t42 = getelementptr inbounds %S.lexer.Token, ptr %t41, i32 0, i32 0
%t43 = load { ptr, i64, i64 }, ptr %t42
store { ptr, i64, i64 } %t43, ptr %a44
call void @finch_str_copy(ptr %a45, ptr %a44)
%t46 = load { ptr, i64, i64 }, ptr %a45
store { ptr, i64, i64 } %t46, ptr %a47
%t48 = load { ptr, i64, i64 }, ptr %a47
store { ptr, i64, i64 } %t48, ptr %a49
store { ptr, i64, i64 } { ptr @.str.654, i64 1, i64 0 }, ptr %a50
%t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50)
%t52 = icmp ne i32 %t51, 0
br i1 %t52, label %then1127, label %else1128
then1127:
%t53 = load i64, ptr %a19
%t54 = add i64 %t53, 1
store i64 %t54, ptr %a19
br label %endif1129
else1128:
%t55 = load { ptr, i64, i64 }, ptr %a47
store { ptr, i64, i64 } %t55, ptr %a56
store { ptr, i64, i64 } { ptr @.str.655, i64 1, i64 0 }, ptr %a57
%t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57)
%t59 = icmp ne i32 %t58, 0
br i1 %t59, label %then1130, label %else1131
then1130:
%t60 = load i64, ptr %a19
%t61 = sub i64 %t60, 1
store i64 %t61, ptr %a19
%t62 = load i64, ptr %a19
%t63 = icmp eq i64 %t62, 0
br i1 %t63, label %then1133, label %endif1135
then1133:
%t64 = load i64, ptr %a25
%t65 = add i64 %t64, 1
%t66 = load ptr, ptr %a1
%t67 = icmp eq ptr %t66, null
br i1 %t67, label %panic1136, label %ok1137
panic1136:
call void @finch_panic(ptr @.str.656, i64 156, ptr @.str.657)
unreachable
ok1137:
%t68 = getelementptr inbounds %S.parser.Parser, 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.from1138
logic.from1138:
br i1 %t71, label %logic.rhs1139, label %logic.end1140
logic.rhs1139:
%t72 = load ptr, ptr %a1
%t73 = icmp eq ptr %t72, null
br i1 %t73, label %panic1141, label %ok1142
panic1141:
call void @finch_panic(ptr @.str.658, i64 156, ptr @.str.659)
unreachable
ok1142:
%t74 = getelementptr inbounds %S.parser.Parser, ptr %t72, i32 0, i32 0
%t75 = load i64, ptr %a25
%t76 = add i64 %t75, 1
%t77 = load { ptr, i64, i64 }, ptr %t74
%t78 = extractvalue { ptr, i64, i64 } %t77, 1
%t79 = icmp uge i64 %t76, %t78
br i1 %t79, label %range1143, label %inrange1144
range1143:
call void @finch_panic_index(ptr @.str.660, i64 156, i64 %t76, i64 %t78)
unreachable
inrange1144:
%t80 = extractvalue { ptr, i64, i64 } %t77, 0
%t81 = getelementptr inbounds %S.lexer.Token, ptr %t80, i64 %t76
%t82 = getelementptr inbounds %S.lexer.Token, ptr %t81, i32 0, i32 0
%t83 = load { ptr, i64, i64 }, ptr %t82
store { ptr, i64, i64 } %t83, ptr %a84
store { ptr, i64, i64 } { ptr @.str.661, i64 5, i64 0 }, ptr %a85
%t86 = call i32 @finch_str_eq(ptr %a84, ptr %a85)
%t87 = icmp ne i32 %t86, 0
br label %logic.rend1145
logic.rend1145:
br label %logic.end1140
logic.end1140:
%t88 = phi i1 [ false, %logic.from1138 ], [ %t87, %logic.rend1145 ]
br label %logic.from1146
logic.from1146:
br i1 %t88, label %logic.rhs1147, label %logic.end1148
logic.rhs1147:
%t89 = load ptr, ptr %a1
%t90 = icmp eq ptr %t89, null
br i1 %t90, label %panic1149, label %ok1150
panic1149:
call void @finch_panic(ptr @.str.662, i64 156, ptr @.str.663)
unreachable
ok1150:
%t91 = getelementptr inbounds %S.parser.Parser, ptr %t89, i32 0, i32 0
%t92 = load i64, ptr %a25
%t93 = add i64 %t92, 1
%t94 = load { ptr, i64, i64 }, ptr %t91
%t95 = extractvalue { ptr, i64, i64 } %t94, 1
%t96 = icmp uge i64 %t93, %t95
br i1 %t96, label %range1151, label %inrange1152
range1151:
call void @finch_panic_index(ptr @.str.664, i64 156, i64 %t93, i64 %t95)
unreachable
inrange1152:
%t97 = extractvalue { ptr, i64, i64 } %t94, 0
%t98 = getelementptr inbounds %S.lexer.Token, ptr %t97, i64 %t93
%t99 = getelementptr inbounds %S.lexer.Token, ptr %t98, i32 0, i32 4
%t100 = load i1, ptr %t99
%t101 = xor i1 %t100, true
br label %logic.rend1153
logic.rend1153:
br label %logic.end1148
logic.end1148:
%t102 = phi i1 [ false, %logic.from1146 ], [ %t101, %logic.rend1153 ]
ret i1 %t102
endif1135:
br label %endif1132
else1131:
%t103 = load { ptr, i64, i64 }, ptr %a47
store { ptr, i64, i64 } %t103, ptr %a104
store { ptr, i64, i64 } { ptr @.str.665, i64 3, i64 0 }, ptr %a105
%t106 = call i32 @finch_str_eq(ptr %a104, ptr %a105)
%t107 = icmp ne i32 %t106, 0
br label %logic.from1154
logic.from1154:
br i1 %t107, label %logic.end1156, label %logic.rhs1155
logic.rhs1155:
%t108 = load ptr, ptr %a1
%t109 = icmp eq ptr %t108, null
br i1 %t109, label %panic1157, label %ok1158
panic1157:
call void @finch_panic(ptr @.str.666, i64 158, ptr @.str.667)
unreachable
ok1158:
%t110 = getelementptr inbounds %S.parser.Parser, ptr %t108, i32 0, i32 0
%t111 = load i64, ptr %a25
%t112 = load { ptr, i64, i64 }, ptr %t110
%t113 = extractvalue { ptr, i64, i64 } %t112, 1
%t114 = icmp uge i64 %t111, %t113
br i1 %t114, label %range1159, label %inrange1160
range1159:
call void @finch_panic_index(ptr @.str.668, i64 158, i64 %t111, i64 %t113)
unreachable
inrange1160:
%t115 = extractvalue { ptr, i64, i64 } %t112, 0
%t116 = getelementptr inbounds %S.lexer.Token, ptr %t115, i64 %t111
%t117 = getelementptr inbounds %S.lexer.Token, ptr %t116, i32 0, i32 4
%t118 = load i1, ptr %t117
br label %logic.from1161
logic.from1161:
br i1 %t118, label %logic.rhs1162, label %logic.end1163
logic.rhs1162:
%t119 = load i64, ptr %a19
%t120 = icmp eq i64 %t119, 0
br label %logic.rend1164
logic.rend1164:
br label %logic.end1163
logic.end1163:
%t121 = phi i1 [ false, %logic.from1161 ], [ %t120, %logic.rend1164 ]
br label %logic.rend1165
logic.rend1165:
br label %logic.end1156
logic.end1156:
%t122 = phi i1 [ true, %logic.from1154 ], [ %t121, %logic.rend1165 ]
br i1 %t122, label %then1166, label %endif1168
then1166:
ret i1 false
endif1168:
br label %endif1132
endif1132:
br label %endif1129
endif1129:
%t123 = load i64, ptr %a25
%t124 = add i64 %t123, 1
store i64 %t124, ptr %a25
br label %while.cond1118
while.end1120:
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 %panic1169, label %ok1170
panic1169:
call void @finch_panic(ptr @.str.669, i64 168, ptr @.str.670)
unreachable
ok1170:
%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 %panic1171, label %ok1172
panic1171:
call void @finch_panic(ptr @.str.671, i64 170, ptr @.str.672)
unreachable
ok1172:
%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
%a26 = alloca { ptr, i64, i64 }, align 16
%a27 = alloca { ptr, i64, i64 }, align 16
%a31 = alloca i64, align 16
%a37 = alloca i64, align 16
%a56 = alloca { ptr, i64, i64 }, align 16
%a57 = 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
%a68 = alloca { ptr, i64, i64 }, align 16
%a69 = alloca { ptr, i64, i64 }, align 16
%a96 = alloca { ptr, i64, i64 }, align 16
%a97 = alloca { ptr, i64, i64 }, align 16
%a116 = alloca { ptr, i64, i64 }, align 16
%a117 = 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.673, i64 1, i64 0 }, ptr %a5
%t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5)
%t7 = icmp eq i32 %t6, 0
br label %logic.from1173
logic.from1173:
br i1 %t7, label %logic.end1175, label %logic.rhs1174
logic.rhs1174:
%t8 = load ptr, ptr %a1
%t9 = icmp eq ptr %t8, null
br i1 %t9, label %panic1176, label %ok1177
panic1176:
call void @finch_panic(ptr @.str.674, i64 176, ptr @.str.675)
unreachable
ok1177:
%t10 = getelementptr inbounds %S.parser.Parser, ptr %t8, i32 0, i32 0
%t11 = load ptr, ptr %a1
%t12 = icmp eq ptr %t11, null
br i1 %t12, label %panic1178, label %ok1179
panic1178:
call void @finch_panic(ptr @.str.676, i64 176, ptr @.str.677)
unreachable
ok1179:
%t13 = getelementptr inbounds %S.parser.Parser, ptr %t11, i32 0, i32 1
%t14 = load i64, ptr %t13
%t15 = add i64 %t14, 1
%t16 = load { ptr, i64, i64 }, ptr %t10
%t17 = extractvalue { ptr, i64, i64 } %t16, 1
%t18 = icmp uge i64 %t15, %t17
br i1 %t18, label %range1180, label %inrange1181
range1180:
call void @finch_panic_index(ptr @.str.678, i64 176, i64 %t15, i64 %t17)
unreachable
inrange1181:
%t19 = extractvalue { ptr, i64, i64 } %t16, 0
%t20 = getelementptr inbounds %S.lexer.Token, ptr %t19, i64 %t15
%t21 = getelementptr inbounds %S.lexer.Token, ptr %t20, i32 0, i32 4
%t22 = load i1, ptr %t21
br label %logic.rend1182
logic.rend1182:
br label %logic.end1175
logic.end1175:
%t23 = phi i1 [ true, %logic.from1173 ], [ %t22, %logic.rend1182 ]
br label %logic.from1183
logic.from1183:
br i1 %t23, label %logic.end1185, label %logic.rhs1184
logic.rhs1184:
%t24 = load ptr, ptr %a1
%t25 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t24, i64 2)
store { ptr, i64, i64 } %t25, ptr %a26
store { ptr, i64, i64 } { ptr @.str.679, i64 1, i64 0 }, ptr %a27
%t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27)
%t29 = icmp ne i32 %t28, 0
br label %logic.rend1186
logic.rend1186:
br label %logic.end1185
logic.end1185:
%t30 = phi i1 [ true, %logic.from1183 ], [ %t29, %logic.rend1186 ]
br i1 %t30, label %then1187, label %endif1189
then1187:
ret i1 false
endif1189:
store i64 0, ptr %a31
%t32 = load ptr, ptr %a1
%t33 = icmp eq ptr %t32, null
br i1 %t33, label %panic1190, label %ok1191
panic1190:
call void @finch_panic(ptr @.str.680, i64 180, ptr @.str.681)
unreachable
ok1191:
%t34 = getelementptr inbounds %S.parser.Parser, ptr %t32, i32 0, i32 1
%t35 = load i64, ptr %t34
%t36 = add i64 %t35, 1
store i64 %t36, ptr %a37
br label %while.cond1192
while.cond1192:
%t38 = load i64, ptr %a37
%t39 = load ptr, ptr %a1
%t40 = icmp eq ptr %t39, null
br i1 %t40, label %panic1195, label %ok1196
panic1195:
call void @finch_panic(ptr @.str.682, i64 181, ptr @.str.683)
unreachable
ok1196:
%t41 = getelementptr inbounds %S.parser.Parser, ptr %t39, i32 0, i32 0
%t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i32 0, i32 1
%t43 = load i64, ptr %t42
%t44 = icmp slt i64 %t38, %t43
br i1 %t44, label %while.body1193, label %while.end1194
while.body1193:
%t45 = load ptr, ptr %a1
%t46 = icmp eq ptr %t45, null
br i1 %t46, label %panic1197, label %ok1198
panic1197:
call void @finch_panic(ptr @.str.684, i64 182, ptr @.str.685)
unreachable
ok1198:
%t47 = getelementptr inbounds %S.parser.Parser, ptr %t45, i32 0, i32 0
%t48 = load i64, ptr %a37
%t49 = load { ptr, i64, i64 }, ptr %t47
%t50 = extractvalue { ptr, i64, i64 } %t49, 1
%t51 = icmp uge i64 %t48, %t50
br i1 %t51, label %range1199, label %inrange1200
range1199:
call void @finch_panic_index(ptr @.str.686, i64 182, i64 %t48, i64 %t50)
unreachable
inrange1200:
%t52 = extractvalue { ptr, i64, i64 } %t49, 0
%t53 = getelementptr inbounds %S.lexer.Token, ptr %t52, i64 %t48
%t54 = getelementptr inbounds %S.lexer.Token, ptr %t53, i32 0, i32 0
%t55 = load { ptr, i64, i64 }, ptr %t54
store { ptr, i64, i64 } %t55, ptr %a56
call void @finch_str_copy(ptr %a57, ptr %a56)
%t58 = load { ptr, i64, i64 }, ptr %a57
store { ptr, i64, i64 } %t58, ptr %a59
%t60 = load { ptr, i64, i64 }, ptr %a59
store { ptr, i64, i64 } %t60, ptr %a61
store { ptr, i64, i64 } { ptr @.str.687, i64 1, i64 0 }, ptr %a62
%t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62)
%t64 = icmp ne i32 %t63, 0
br i1 %t64, label %then1201, label %else1202
then1201:
%t65 = load i64, ptr %a31
%t66 = add i64 %t65, 1
store i64 %t66, ptr %a31
br label %endif1203
else1202:
%t67 = load { ptr, i64, i64 }, ptr %a59
store { ptr, i64, i64 } %t67, ptr %a68
store { ptr, i64, i64 } { ptr @.str.688, i64 1, i64 0 }, ptr %a69
%t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69)
%t71 = icmp ne i32 %t70, 0
br i1 %t71, label %then1204, label %else1205
then1204:
%t72 = load i64, ptr %a31
%t73 = sub i64 %t72, 1
store i64 %t73, ptr %a31
%t74 = load i64, ptr %a31
%t75 = icmp eq i64 %t74, 0
br i1 %t75, label %then1207, label %endif1209
then1207:
%t76 = load i64, ptr %a37
%t77 = add i64 %t76, 1
%t78 = load ptr, ptr %a1
%t79 = icmp eq ptr %t78, null
br i1 %t79, label %panic1210, label %ok1211
panic1210:
call void @finch_panic(ptr @.str.689, i64 188, ptr @.str.690)
unreachable
ok1211:
%t80 = getelementptr inbounds %S.parser.Parser, ptr %t78, i32 0, i32 0
%t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %t80, i32 0, i32 1
%t82 = load i64, ptr %t81
%t83 = icmp slt i64 %t77, %t82
br label %logic.from1212
logic.from1212:
br i1 %t83, label %logic.rhs1213, label %logic.end1214
logic.rhs1213:
%t84 = load ptr, ptr %a1
%t85 = icmp eq ptr %t84, null
br i1 %t85, label %panic1215, label %ok1216
panic1215:
call void @finch_panic(ptr @.str.691, i64 188, ptr @.str.692)
unreachable
ok1216:
%t86 = getelementptr inbounds %S.parser.Parser, ptr %t84, i32 0, i32 0
%t87 = load i64, ptr %a37
%t88 = add i64 %t87, 1
%t89 = load { ptr, i64, i64 }, ptr %t86
%t90 = extractvalue { ptr, i64, i64 } %t89, 1
%t91 = icmp uge i64 %t88, %t90
br i1 %t91, label %range1217, label %inrange1218
range1217:
call void @finch_panic_index(ptr @.str.693, i64 188, i64 %t88, i64 %t90)
unreachable
inrange1218:
%t92 = extractvalue { ptr, i64, i64 } %t89, 0
%t93 = getelementptr inbounds %S.lexer.Token, ptr %t92, i64 %t88
%t94 = getelementptr inbounds %S.lexer.Token, ptr %t93, i32 0, i32 0
%t95 = load { ptr, i64, i64 }, ptr %t94
store { ptr, i64, i64 } %t95, ptr %a96
store { ptr, i64, i64 } { ptr @.str.694, i64 1, i64 0 }, ptr %a97
%t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97)
%t99 = icmp ne i32 %t98, 0
br label %logic.rend1219
logic.rend1219:
br label %logic.end1214
logic.end1214:
%t100 = phi i1 [ false, %logic.from1212 ], [ %t99, %logic.rend1219 ]
br label %logic.from1220
logic.from1220:
br i1 %t100, label %logic.rhs1221, label %logic.end1222
logic.rhs1221:
%t101 = load ptr, ptr %a1
%t102 = icmp eq ptr %t101, null
br i1 %t102, label %panic1223, label %ok1224
panic1223:
call void @finch_panic(ptr @.str.695, i64 188, ptr @.str.696)
unreachable
ok1224:
%t103 = getelementptr inbounds %S.parser.Parser, ptr %t101, i32 0, i32 0
%t104 = load i64, ptr %a37
%t105 = add i64 %t104, 1
%t106 = load { ptr, i64, i64 }, ptr %t103
%t107 = extractvalue { ptr, i64, i64 } %t106, 1
%t108 = icmp uge i64 %t105, %t107
br i1 %t108, label %range1225, label %inrange1226
range1225:
call void @finch_panic_index(ptr @.str.697, i64 188, i64 %t105, i64 %t107)
unreachable
inrange1226:
%t109 = extractvalue { ptr, i64, i64 } %t106, 0
%t110 = getelementptr inbounds %S.lexer.Token, ptr %t109, i64 %t105
%t111 = getelementptr inbounds %S.lexer.Token, ptr %t110, i32 0, i32 4
%t112 = load i1, ptr %t111
%t113 = xor i1 %t112, true
br label %logic.rend1227
logic.rend1227:
br label %logic.end1222
logic.end1222:
%t114 = phi i1 [ false, %logic.from1220 ], [ %t113, %logic.rend1227 ]
ret i1 %t114
endif1209:
br label %endif1206
else1205:
%t115 = load { ptr, i64, i64 }, ptr %a59
store { ptr, i64, i64 } %t115, ptr %a116
store { ptr, i64, i64 } { ptr @.str.698, i64 3, i64 0 }, ptr %a117
%t118 = call i32 @finch_str_eq(ptr %a116, ptr %a117)
%t119 = icmp ne i32 %t118, 0
br label %logic.from1228
logic.from1228:
br i1 %t119, label %logic.end1230, label %logic.rhs1229
logic.rhs1229:
%t120 = load ptr, ptr %a1
%t121 = icmp eq ptr %t120, null
br i1 %t121, label %panic1231, label %ok1232
panic1231:
call void @finch_panic(ptr @.str.699, i64 190, ptr @.str.700)
unreachable
ok1232:
%t122 = getelementptr inbounds %S.parser.Parser, ptr %t120, i32 0, i32 0
%t123 = load i64, ptr %a37
%t124 = load { ptr, i64, i64 }, ptr %t122
%t125 = extractvalue { ptr, i64, i64 } %t124, 1
%t126 = icmp uge i64 %t123, %t125
br i1 %t126, label %range1233, label %inrange1234
range1233:
call void @finch_panic_index(ptr @.str.701, i64 190, i64 %t123, i64 %t125)
unreachable
inrange1234:
%t127 = extractvalue { ptr, i64, i64 } %t124, 0
%t128 = getelementptr inbounds %S.lexer.Token, ptr %t127, i64 %t123
%t129 = getelementptr inbounds %S.lexer.Token, ptr %t128, i32 0, i32 4
%t130 = load i1, ptr %t129
br label %logic.rend1235
logic.rend1235:
br label %logic.end1230
logic.end1230:
%t131 = phi i1 [ true, %logic.from1228 ], [ %t130, %logic.rend1235 ]
br i1 %t131, label %then1236, label %endif1238
then1236:
ret i1 false
endif1238:
br label %endif1206
endif1206:
br label %endif1203
endif1203:
%t132 = load i64, ptr %a37
%t133 = add i64 %t132, 1
store i64 %t133, ptr %a37
br label %while.cond1192
while.end1194:
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
%a17 = alloca { ptr, i64, i64 }, align 16
%a19 = alloca { ptr, i64, i64 }, align 16
%a20 = 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
%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
%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
%a74 = alloca { ptr, i64, i64 }, align 16
%a80 = alloca { ptr, i64, i64 }, align 16
%a81 = 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 %then1239, label %endif1241
then1239:
ret i1 true
endif1241:
%t4 = load ptr, ptr %a1
%t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.702, i64 1, i64 0 })
br i1 %t5, label %then1242, label %endif1244
then1242:
%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.703, i64 1, i64 0 }, ptr %a9
%t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9)
%t11 = icmp ne i32 %t10, 0
ret i1 %t11
endif1244:
%t12 = load ptr, ptr %a1
%t13 = call i1 @finch.parser.at(ptr %t12, { ptr, i64, i64 } { ptr @.str.704, i64 5, i64 0 })
%t14 = xor i1 %t13, true
br i1 %t14, label %then1245, label %endif1247
then1245:
ret i1 false
endif1247:
%t15 = load ptr, ptr %a1
%t16 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t15, i64 1)
store { ptr, i64, i64 } %t16, ptr %a17
%t18 = load { ptr, i64, i64 }, ptr %a17
store { ptr, i64, i64 } %t18, ptr %a19
store { ptr, i64, i64 } { ptr @.str.705, i64 5, i64 0 }, ptr %a20
%t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20)
%t22 = icmp ne i32 %t21, 0
br i1 %t22, label %then1248, label %endif1250
then1248:
%t23 = load ptr, ptr %a1
%t24 = icmp eq ptr %t23, null
br i1 %t24, label %panic1251, label %ok1252
panic1251:
call void @finch_panic(ptr @.str.706, i64 210, ptr @.str.707)
unreachable
ok1252:
%t25 = getelementptr inbounds %S.parser.Parser, ptr %t23, i32 0, i32 0
%t26 = load ptr, ptr %a1
%t27 = icmp eq ptr %t26, null
br i1 %t27, label %panic1253, label %ok1254
panic1253:
call void @finch_panic(ptr @.str.708, i64 210, ptr @.str.709)
unreachable
ok1254:
%t28 = getelementptr inbounds %S.parser.Parser, ptr %t26, i32 0, i32 1
%t29 = load i64, ptr %t28
%t30 = add i64 %t29, 1
%t31 = load { ptr, i64, i64 }, ptr %t25
%t32 = extractvalue { ptr, i64, i64 } %t31, 1
%t33 = icmp uge i64 %t30, %t32
br i1 %t33, label %range1255, label %inrange1256
range1255:
call void @finch_panic_index(ptr @.str.710, i64 210, i64 %t30, i64 %t32)
unreachable
inrange1256:
%t34 = extractvalue { ptr, i64, i64 } %t31, 0
%t35 = getelementptr inbounds %S.lexer.Token, ptr %t34, i64 %t30
%t36 = getelementptr inbounds %S.lexer.Token, ptr %t35, i32 0, i32 4
%t37 = load i1, ptr %t36
%t38 = xor i1 %t37, true
ret i1 %t38
endif1250:
%t39 = load ptr, ptr %a1
%t40 = call %S.lexer.Token @finch.parser.cur(ptr %t39)
%t41 = extractvalue %S.lexer.Token %t40, 1
store { ptr, i64, i64 } %t41, ptr %a42
call void @finch_str_copy(ptr %a43, ptr %a42)
%t44 = load { ptr, i64, i64 }, ptr %a43
store { ptr, i64, i64 } %t44, ptr %a45
store { ptr, i64, i64 } { ptr @.str.711, 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.from1257
logic.from1257:
br i1 %t48, label %logic.end1259, label %logic.rhs1258
logic.rhs1258:
%t49 = load ptr, ptr %a1
%t50 = call %S.lexer.Token @finch.parser.cur(ptr %t49)
%t51 = extractvalue %S.lexer.Token %t50, 1
store { ptr, i64, i64 } %t51, ptr %a52
call void @finch_str_copy(ptr %a53, ptr %a52)
%t54 = load { ptr, i64, i64 }, ptr %a53
store { ptr, i64, i64 } %t54, ptr %a55
store { ptr, i64, i64 } { ptr @.str.712, i64 3, i64 0 }, ptr %a56
%t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56)
%t58 = icmp ne i32 %t57, 0
br label %logic.rend1260
logic.rend1260:
br label %logic.end1259
logic.end1259:
%t59 = phi i1 [ true, %logic.from1257 ], [ %t58, %logic.rend1260 ]
br label %logic.from1261
logic.from1261:
br i1 %t59, label %logic.rhs1262, label %logic.end1263
logic.rhs1262:
%t60 = load { ptr, i64, i64 }, ptr %a17
store { ptr, i64, i64 } %t60, ptr %a61
store { ptr, i64, i64 } { ptr @.str.713, 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.rend1264
logic.rend1264:
br label %logic.end1263
logic.end1263:
%t65 = phi i1 [ false, %logic.from1261 ], [ %t64, %logic.rend1264 ]
br i1 %t65, label %then1265, label %endif1267
then1265:
ret i1 true
endif1267:
%t66 = load { ptr, i64, i64 }, ptr %a17
store { ptr, i64, i64 } %t66, ptr %a67
store { ptr, i64, i64 } { ptr @.str.714, i64 1, i64 0 }, ptr %a68
%t69 = call i32 @finch_str_eq(ptr %a67, ptr %a68)
%t70 = icmp ne i32 %t69, 0
br label %logic.from1268
logic.from1268:
br i1 %t70, label %logic.rhs1269, label %logic.end1270
logic.rhs1269:
%t71 = load ptr, ptr %a1
%t72 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t71, i64 2)
store { ptr, i64, i64 } %t72, ptr %a73
store { ptr, i64, i64 } { ptr @.str.715, i64 5, i64 0 }, ptr %a74
%t75 = call i32 @finch_str_eq(ptr %a73, ptr %a74)
%t76 = icmp ne i32 %t75, 0
br label %logic.rend1271
logic.rend1271:
br label %logic.end1270
logic.end1270:
%t77 = phi i1 [ false, %logic.from1268 ], [ %t76, %logic.rend1271 ]
br label %logic.from1272
logic.from1272:
br i1 %t77, label %logic.rhs1273, label %logic.end1274
logic.rhs1273:
%t78 = load ptr, ptr %a1
%t79 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t78, i64 3)
store { ptr, i64, i64 } %t79, ptr %a80
store { ptr, i64, i64 } { ptr @.str.716, i64 5, i64 0 }, ptr %a81
%t82 = call i32 @finch_str_eq(ptr %a80, ptr %a81)
%t83 = icmp ne i32 %t82, 0
br label %logic.rend1275
logic.rend1275:
br label %logic.end1274
logic.end1274:
%t84 = phi i1 [ false, %logic.from1272 ], [ %t83, %logic.rend1275 ]
br label %logic.from1276
logic.from1276:
br i1 %t84, label %logic.rhs1277, label %logic.end1278
logic.rhs1277:
%t85 = load ptr, ptr %a1
%t86 = icmp eq ptr %t85, null
br i1 %t86, label %panic1279, label %ok1280
panic1279:
call void @finch_panic(ptr @.str.717, i64 215, ptr @.str.718)
unreachable
ok1280:
%t87 = getelementptr inbounds %S.parser.Parser, ptr %t85, i32 0, i32 0
%t88 = load ptr, ptr %a1
%t89 = icmp eq ptr %t88, null
br i1 %t89, label %panic1281, label %ok1282
panic1281:
call void @finch_panic(ptr @.str.719, i64 215, ptr @.str.720)
unreachable
ok1282:
%t90 = getelementptr inbounds %S.parser.Parser, ptr %t88, i32 0, i32 1
%t91 = load i64, ptr %t90
%t92 = add i64 %t91, 3
%t93 = load { ptr, i64, i64 }, ptr %t87
%t94 = extractvalue { ptr, i64, i64 } %t93, 1
%t95 = icmp uge i64 %t92, %t94
br i1 %t95, label %range1283, label %inrange1284
range1283:
call void @finch_panic_index(ptr @.str.721, i64 215, i64 %t92, i64 %t94)
unreachable
inrange1284:
%t96 = extractvalue { ptr, i64, i64 } %t93, 0
%t97 = getelementptr inbounds %S.lexer.Token, ptr %t96, i64 %t92
%t98 = getelementptr inbounds %S.lexer.Token, ptr %t97, i32 0, i32 4
%t99 = load i1, ptr %t98
%t100 = xor i1 %t99, true
br label %logic.rend1285
logic.rend1285:
br label %logic.end1278
logic.end1278:
%t101 = phi i1 [ false, %logic.from1276 ], [ %t100, %logic.rend1285 ]
ret i1 %t101
}
define internal void @finch.parser.endOfStatement(ptr %p0) {
entry:
%a1 = alloca ptr, 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
store ptr %p0, ptr %a1
%t2 = load ptr, ptr %a1
%t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.722, i64 1, i64 0 })
br label %logic.from1286
logic.from1286:
br i1 %t3, label %logic.end1288, label %logic.rhs1287
logic.rhs1287:
%t4 = load ptr, ptr %a1
%t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.723, i64 3, i64 0 })
br label %logic.rend1289
logic.rend1289:
br label %logic.end1288
logic.end1288:
%t6 = phi i1 [ true, %logic.from1286 ], [ %t5, %logic.rend1289 ]
br label %logic.from1290
logic.from1290:
br i1 %t6, label %logic.end1292, label %logic.rhs1291
logic.rhs1291:
%t7 = load ptr, ptr %a1
%t8 = call %S.lexer.Token @finch.parser.cur(ptr %t7)
%t9 = extractvalue %S.lexer.Token %t8, 4
br label %logic.rend1293
logic.rend1293:
br label %logic.end1292
logic.end1292:
%t10 = phi i1 [ true, %logic.from1290 ], [ %t9, %logic.rend1293 ]
br i1 %t10, label %then1294, label %endif1296
then1294:
ret void
endif1296:
%t11 = load ptr, ptr %a1
%t12 = load ptr, ptr %a1
%t13 = call %S.lexer.Token @finch.parser.cur(ptr %t12)
%t14 = load ptr, ptr %a1
%t15 = call %S.lexer.Token @finch.parser.cur(ptr %t14)
%t16 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t15)
store { ptr, i64, i64 } { ptr @.str.724, i64 11, 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.725, i64 37, i64 0 }, ptr %a23
call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23)
%t24 = load { ptr, i64, i64 }, ptr %a21
call void @finch.parser.fail(ptr %t11, %S.lexer.Token %t13, { ptr, i64, i64 } %t24)
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
%a31 = 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
%a39 = alloca { ptr, i64, i64 }, align 16
%a40 = alloca { ptr, i64, i64 }, align 16
%a41 = alloca { ptr, i64, i64 }, align 16
%a52 = alloca { ptr, i64, i64 }, align 16
%a53 = alloca { ptr, i64, i64 }, align 16
%a69 = alloca { ptr, i64, i64 }, align 16
%a70 = alloca { ptr, i64, i64 }, align 16
%a80 = alloca %S.lexer.Token, align 16
%a84 = alloca { ptr, i64, i64 }, align 16
%a85 = 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
%a95 = 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
%a108 = alloca i1, 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
%a125 = alloca { ptr, i64, i64 }, align 16
%a126 = alloca { ptr, i64, i64 }, align 16
%a127 = alloca { ptr, i64, i64 }, align 16
%a137 = alloca { ptr, i64, i64 }, align 16
%a138 = alloca { ptr, i64, i64 }, align 16
%a173 = alloca %S.ast.Program, align 16
%a174 = alloca %S.ast.Program, align 16
store ptr %p0, ptr %a1
store %S.ast.Program zeroinitializer, ptr %a2
br label %while.cond1297
while.cond1297:
%t3 = load ptr, ptr %a1
%t4 = call i1 @finch.parser.at(ptr %t3, { ptr, i64, i64 } { ptr @.str.726, i64 3, i64 0 })
%t5 = xor i1 %t4, true
br i1 %t5, label %while.body1298, label %while.end1299
while.body1298:
%t6 = load ptr, ptr %a1
%t7 = call i1 @finch.parser.at(ptr %t6, { ptr, i64, i64 } { ptr @.str.727, i64 6, i64 0 })
br i1 %t7, label %then1300, label %else1301
then1300:
%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.728, i64 6, i64 0 })
br i1 %t12, label %then1303, label %else1304
then1303:
%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 %panic1306, label %ok1307
panic1306:
call void @finch_panic(ptr @.str.729, i64 233, ptr @.str.730)
unreachable
ok1307:
%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.731, 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)
%t30 = load { ptr, i64, i64 }, ptr %a27
store { ptr, i64, i64 } %t30, ptr %a32
store { ptr, i64, i64 } { ptr @.str.732, i64 1, i64 0 }, ptr %a33
call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33)
%t34 = load { ptr, i64, i64 }, ptr %a31
%t35 = getelementptr inbounds %S.lexer.Token, ptr %a10, i32 0, i32 3
%t36 = load i64, ptr %t35
call void @finch_str_from_int(ptr %a37, i64 %t36)
%t38 = load { ptr, i64, i64 }, ptr %a37
store { ptr, i64, i64 } %t34, ptr %a40
store { ptr, i64, i64 } %t38, ptr %a41
call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41)
%t42 = load { ptr, i64, i64 }, ptr %a39
%t43 = load i64, ptr %t14
%t44 = add i64 %t43, 1
call void @finch_arr_reserve(ptr %t13, i64 %t44, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t45 = load ptr, ptr %t13
%t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i64 %t43
store { ptr, i64, i64 } %t42, ptr %t46
store i64 %t44, ptr %t14
%t47 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 3
%t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i32 0, i32 1
%t49 = load ptr, ptr %a1
%t50 = call %S.lexer.Token @finch.parser.next(ptr %t49)
%t51 = extractvalue %S.lexer.Token %t50, 1
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 i64, ptr %t48
%t56 = add i64 %t55, 1
call void @finch_arr_reserve(ptr %t47, i64 %t56, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t57 = load ptr, ptr %t47
%t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i64 %t55
store { ptr, i64, i64 } %t54, ptr %t58
store i64 %t56, ptr %t48
br label %endif1305
else1304:
%t59 = load ptr, ptr %a1
%t60 = call i1 @finch.parser.at(ptr %t59, { ptr, i64, i64 } { ptr @.str.733, i64 5, i64 0 })
%t61 = xor i1 %t60, true
br i1 %t61, label %then1308, label %endif1310
then1308:
%t62 = load ptr, ptr %a1
%t63 = load %S.lexer.Token, ptr %a10
call void @finch.parser.fail(ptr %t62, %S.lexer.Token %t63, { ptr, i64, i64 } { ptr @.str.734, i64 51, i64 0 })
br label %endif1310
endif1310:
%t64 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 2
%t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i32 0, i32 1
%t66 = load ptr, ptr %a1
%t67 = call %S.lexer.Token @finch.parser.next(ptr %t66)
%t68 = extractvalue %S.lexer.Token %t67, 1
store { ptr, i64, i64 } %t68, ptr %a69
call void @finch_str_copy(ptr %a70, ptr %a69)
%t71 = load { ptr, i64, i64 }, ptr %a70
%t72 = load i64, ptr %t65
%t73 = add i64 %t72, 1
call void @finch_arr_reserve(ptr %t64, i64 %t73, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t74 = load ptr, ptr %t64
%t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i64 %t72
store { ptr, i64, i64 } %t71, ptr %t75
store i64 %t73, ptr %t65
br label %endif1305
endif1305:
br label %endif1302
else1301:
%t76 = load ptr, ptr %a1
%t77 = call i1 @finch.parser.at(ptr %t76, { ptr, i64, i64 } { ptr @.str.735, i64 4, i64 0 })
br i1 %t77, label %then1311, label %else1312
then1311:
%t78 = load ptr, ptr %a1
%t79 = call %S.lexer.Token @finch.parser.next(ptr %t78)
store %S.lexer.Token %t79, ptr %a80
%t81 = load ptr, ptr %a1
%t82 = call %S.lexer.Token @finch.parser.expect(ptr %t81, { ptr, i64, i64 } { ptr @.str.736, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.737, i64 42, i64 0 })
%t83 = extractvalue %S.lexer.Token %t82, 1
store { ptr, i64, i64 } %t83, ptr %a84
call void @finch_str_copy(ptr %a85, ptr %a84)
%t86 = load { ptr, i64, i64 }, ptr %a85
store { ptr, i64, i64 } %t86, ptr %a87
%t88 = load { ptr, i64, i64 }, ptr %a87
store { ptr, i64, i64 } %t88, ptr %a89
store { ptr, i64, i64 } { ptr @.str.739, i64 2, i64 0 }, ptr %a91
%t92 = call i32 @finch_str_ends(ptr %a89, ptr %a91)
%t93 = icmp ne i32 %t92, 0
br label %logic.from1314
logic.from1314:
br i1 %t93, label %logic.end1316, label %logic.rhs1315
logic.rhs1315:
%t94 = load { ptr, i64, i64 }, ptr %a87
store { ptr, i64, i64 } %t94, ptr %a95
store { ptr, i64, i64 } { ptr @.str.741, i64 2, i64 0 }, ptr %a97
%t98 = call i32 @finch_str_ends(ptr %a95, ptr %a97)
%t99 = icmp ne i32 %t98, 0
br label %logic.rend1317
logic.rend1317:
br label %logic.end1316
logic.end1316:
%t100 = phi i1 [ true, %logic.from1314 ], [ %t99, %logic.rend1317 ]
br label %logic.from1318
logic.from1318:
br i1 %t100, label %logic.end1320, label %logic.rhs1319
logic.rhs1319:
%t101 = load { ptr, i64, i64 }, ptr %a87
store { ptr, i64, i64 } %t101, ptr %a102
store { ptr, i64, i64 } { ptr @.str.743, i64 2, i64 0 }, ptr %a104
%t105 = call i32 @finch_str_ends(ptr %a102, ptr %a104)
%t106 = icmp ne i32 %t105, 0
br label %logic.rend1321
logic.rend1321:
br label %logic.end1320
logic.end1320:
%t107 = phi i1 [ true, %logic.from1318 ], [ %t106, %logic.rend1321 ]
store i1 %t107, ptr %a108
%t109 = load i1, ptr %a108
%t110 = xor i1 %t109, true
br label %logic.from1322
logic.from1322:
br i1 %t110, label %logic.rhs1323, label %logic.end1324
logic.rhs1323:
%t111 = load { ptr, i64, i64 }, ptr %a87
store { ptr, i64, i64 } %t111, ptr %a112
store { ptr, i64, i64 } { ptr @.str.745, i64 3, i64 0 }, ptr %a114
%t115 = call i32 @finch_str_starts(ptr %a112, ptr %a114)
%t116 = icmp ne i32 %t115, 0
br label %logic.from1325
logic.from1325:
br i1 %t116, label %logic.end1327, label %logic.rhs1326
logic.rhs1326:
%t117 = load { ptr, i64, i64 }, ptr %a87
store { ptr, i64, i64 } %t117, ptr %a118
store { ptr, i64, i64 } { ptr @.str.747, i64 3, i64 0 }, ptr %a120
%t121 = call i64 @finch_str_find(ptr %a118, ptr %a120)
%t122 = icmp sge i64 %t121, 0
br label %logic.rend1328
logic.rend1328:
br label %logic.end1327
logic.end1327:
%t123 = phi i1 [ true, %logic.from1325 ], [ %t122, %logic.rend1328 ]
br label %logic.from1329
logic.from1329:
br i1 %t123, label %logic.end1331, label %logic.rhs1330
logic.rhs1330:
%t124 = load { ptr, i64, i64 }, ptr %a87
store { ptr, i64, i64 } %t124, ptr %a125
store { ptr, i64, i64 } { ptr @.str.749, i64 1, i64 0 }, ptr %a127
%t128 = call i64 @finch_str_find(ptr %a125, ptr %a127)
%t129 = icmp sge i64 %t128, 0
br label %logic.rend1332
logic.rend1332:
br label %logic.end1331
logic.end1331:
%t130 = phi i1 [ true, %logic.from1329 ], [ %t129, %logic.rend1332 ]
br label %logic.rend1333
logic.rend1333:
br label %logic.end1324
logic.end1324:
%t131 = phi i1 [ false, %logic.from1322 ], [ %t130, %logic.rend1333 ]
br i1 %t131, label %then1334, label %endif1336
then1334:
%t132 = load ptr, ptr %a1
%t133 = load %S.lexer.Token, ptr %a80
call void @finch.parser.fail(ptr %t132, %S.lexer.Token %t133, { ptr, i64, i64 } { ptr @.str.750, i64 65, i64 0 })
br label %endif1336
endif1336:
%t134 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 5
%t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1
%t136 = load { ptr, i64, i64 }, ptr %a87
store { ptr, i64, i64 } %t136, ptr %a137
call void @finch_str_copy(ptr %a138, ptr %a137)
%t139 = load { ptr, i64, i64 }, 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 ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t142 = load ptr, ptr %t134
%t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t142, i64 %t140
store { ptr, i64, i64 } %t139, ptr %t143
store i64 %t141, ptr %t135
br label %endif1313
else1312:
%t144 = load ptr, ptr %a1
%t145 = call i1 @finch.parser.at(ptr %t144, { ptr, i64, i64 } { ptr @.str.751, i64 6, i64 0 })
br i1 %t145, label %then1337, label %else1338
then1337:
%t146 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 6
%t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i32 0, i32 1
%t148 = load ptr, ptr %a1
%t149 = call %S.ast.Node @finch.parser.parseStruct(ptr %t148)
%t150 = load i64, ptr %t147
%t151 = add i64 %t150, 1
call void @finch_arr_reserve(ptr %t146, i64 %t151, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t152 = load ptr, ptr %t146
%t153 = getelementptr inbounds %S.ast.Node, ptr %t152, i64 %t150
store %S.ast.Node %t149, ptr %t153
store i64 %t151, ptr %t147
br label %endif1339
else1338:
%t154 = load ptr, ptr %a1
%t155 = call i1 @finch.parser.at(ptr %t154, { ptr, i64, i64 } { ptr @.str.752, i64 4, i64 0 })
br i1 %t155, label %then1340, label %else1341
then1340:
%t156 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 7
%t157 = getelementptr inbounds { ptr, i64, i64 }, ptr %t156, i32 0, i32 1
%t158 = load ptr, ptr %a1
%t159 = call %S.ast.Node @finch.parser.parseEnum(ptr %t158)
%t160 = load i64, ptr %t157
%t161 = add i64 %t160, 1
call void @finch_arr_reserve(ptr %t156, i64 %t161, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t162 = load ptr, ptr %t156
%t163 = getelementptr inbounds %S.ast.Node, ptr %t162, i64 %t160
store %S.ast.Node %t159, ptr %t163
store i64 %t161, ptr %t157
br label %endif1342
else1341:
%t164 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 8
%t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %t164, i32 0, i32 1
%t166 = load ptr, ptr %a1
%t167 = call %S.ast.Node @finch.parser.parseFn(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 (%S.ast.Node, ptr null, i32 1) to i64))
%t170 = load ptr, ptr %t164
%t171 = getelementptr inbounds %S.ast.Node, ptr %t170, i64 %t168
store %S.ast.Node %t167, ptr %t171
store i64 %t169, ptr %t165
br label %endif1342
endif1342:
br label %endif1339
endif1339:
br label %endif1313
endif1313:
br label %endif1302
endif1302:
br label %while.cond1297
while.end1299:
%t172 = load %S.ast.Program, ptr %a2
store %S.ast.Program %t172, ptr %a173
call void @finch.copy.S_ast_Program(ptr %a174, ptr %a173)
%t175 = load %S.ast.Program, ptr %a174
ret %S.ast.Program %t175
}
define internal %S.ast.Node @finch.parser.parseEnum(ptr %p0) {
entry:
%a1 = alloca ptr, align 16
%a4 = alloca %S.ast.Node, align 16
%a10 = alloca { ptr, i64, i64 }, align 16
%a11 = alloca { ptr, i64, i64 }, align 16
%a26 = alloca %S.ast.Node, align 16
%a30 = alloca { ptr, i64, i64 }, align 16
%a31 = 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
%a46 = alloca { ptr, i64, i64 }, align 16
%a47 = alloca { ptr, i64, i64 }, align 16
%a48 = alloca { ptr, i64, i64 }, align 16
%a54 = alloca %S.ast.Node, align 16
%a55 = alloca %S.ast.Node, 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
%a85 = alloca %S.ast.Node, align 16
%a86 = alloca %S.ast.Node, 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.753, 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.754, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.755, i64 6, i64 0 })
%t7 = load ptr, ptr %a1
%t8 = call %S.lexer.Token @finch.parser.expect(ptr %t7, { ptr, i64, i64 } { ptr @.str.756, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.757, i64 12, 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
%t13 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1
store { ptr, i64, i64 } %t12, ptr %t13
%t14 = load ptr, ptr %a1
%t15 = call %S.lexer.Token @finch.parser.expect(ptr %t14, { ptr, i64, i64 } { ptr @.str.758, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.759, i64 3, i64 0 })
br label %while.cond1343
while.cond1343:
%t16 = load ptr, ptr %a1
%t17 = call i1 @finch.parser.at(ptr %t16, { ptr, i64, i64 } { ptr @.str.760, i64 1, i64 0 })
%t18 = xor i1 %t17, true
br i1 %t18, label %while.body1344, label %while.end1345
while.body1344:
%t19 = load ptr, ptr %a1
%t20 = call i1 @finch.parser.at(ptr %t19, { ptr, i64, i64 } { ptr @.str.761, i64 3, i64 0 })
br i1 %t20, label %then1346, label %endif1348
then1346:
%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.762, i64 37, i64 0 })
br label %endif1348
endif1348:
%t24 = load ptr, ptr %a1
%t25 = call %S.ast.Node @finch.parser.node(ptr %t24, { ptr, i64, i64 } { ptr @.str.763, i64 7, i64 0 })
store %S.ast.Node %t25, ptr %a26
%t27 = load ptr, ptr %a1
%t28 = call %S.lexer.Token @finch.parser.expect(ptr %t27, { ptr, i64, i64 } { ptr @.str.764, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.765, i64 24, 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
%t33 = getelementptr inbounds %S.ast.Node, ptr %a26, i32 0, i32 1
store { ptr, i64, i64 } %t32, ptr %t33
%t34 = load ptr, ptr %a1
%t35 = call i1 @finch.parser.accept(ptr %t34, { ptr, i64, i64 } { ptr @.str.766, i64 1, i64 0 })
br i1 %t35, label %then1349, label %endif1351
then1349:
store { ptr, i64, i64 } { ptr @.str.767, i64 0, i64 0 }, ptr %a36
%t37 = load ptr, ptr %a1
%t38 = call i1 @finch.parser.accept(ptr %t37, { ptr, i64, i64 } { ptr @.str.768, i64 1, i64 0 })
br i1 %t38, label %then1352, label %endif1354
then1352:
store { ptr, i64, i64 } { ptr @.str.769, i64 1, i64 0 }, ptr %a36
br label %endif1354
endif1354:
%t39 = load { ptr, i64, i64 }, ptr %a36
%t40 = load ptr, ptr %a1
%t41 = call %S.lexer.Token @finch.parser.expect(ptr %t40, { ptr, i64, i64 } { ptr @.str.770, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.771, i64 30, i64 0 })
%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 { ptr, i64, i64 } %t39, 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
%t50 = getelementptr inbounds %S.ast.Node, ptr %a26, i32 0, i32 4
store { ptr, i64, i64 } %t49, ptr %t50
br label %endif1351
endif1351:
%t51 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9
%t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t51, i32 0, i32 1
%t53 = load %S.ast.Node, ptr %a26
store %S.ast.Node %t53, ptr %a54
call void @finch.copy.S_ast_Node(ptr %a55, ptr %a54)
%t56 = load %S.ast.Node, ptr %a55
%t57 = load i64, ptr %t52
%t58 = add i64 %t57, 1
call void @finch_arr_reserve(ptr %t51, i64 %t58, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t59 = load ptr, ptr %t51
%t60 = getelementptr inbounds %S.ast.Node, ptr %t59, i64 %t57
store %S.ast.Node %t56, ptr %t60
store i64 %t58, ptr %t52
%t61 = load ptr, ptr %a1
%t62 = call i1 @finch.parser.accept(ptr %t61, { ptr, i64, i64 } { ptr @.str.772, i64 1, i64 0 })
%t63 = xor i1 %t62, true
br i1 %t63, label %then1355, label %endif1357
then1355:
%t64 = load ptr, ptr %a1
call void @finch.parser.endOfStatement(ptr %t64)
br label %endif1357
endif1357:
br label %while.cond1343
while.end1345:
%t65 = load ptr, ptr %a1
%t66 = call %S.lexer.Token @finch.parser.next(ptr %t65)
%t67 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9
%t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i32 0, i32 1
%t69 = load i64, ptr %t68
%t70 = icmp eq i64 %t69, 0
br i1 %t70, label %then1358, label %endif1360
then1358:
%t71 = load ptr, ptr %a1
%t72 = load ptr, ptr %a1
%t73 = call %S.lexer.Token @finch.parser.cur(ptr %t72)
%t74 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1
%t75 = load { ptr, i64, i64 }, ptr %t74
store { ptr, i64, i64 } { ptr @.str.773, 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.774, i64 16, i64 0 }, ptr %a82
call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82)
%t83 = load { ptr, i64, i64 }, ptr %a80
call void @finch.parser.fail(ptr %t71, %S.lexer.Token %t73, { ptr, i64, i64 } %t83)
br label %endif1360
endif1360:
%t84 = load %S.ast.Node, ptr %a4
store %S.ast.Node %t84, ptr %a85
call void @finch.copy.S_ast_Node(ptr %a86, ptr %a85)
%t87 = load %S.ast.Node, ptr %a86
ret %S.ast.Node %t87
}
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
%a24 = alloca i64, align 16
%a38 = alloca %S.ast.Node, align 16
%a41 = alloca %S.ast.Node, align 16
%a59 = alloca %S.ast.Node, align 16
%a60 = alloca %S.ast.Node, align 16
%a101 = alloca %S.ast.Node, align 16
%a102 = alloca %S.ast.Node, align 16
%a126 = alloca %S.ast.Node, align 16
%a127 = alloca %S.ast.Node, 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.775, 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.776, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.777, i64 7, i64 0 })
%t10 = getelementptr inbounds %S.ast.Node, ptr %a5, 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.parseExpr(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 ptr, ptr %a1
%t19 = call %S.lexer.Token @finch.parser.expect(ptr %t18, { ptr, i64, i64 } { ptr @.str.778, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.779, i64 3, i64 0 })
%t20 = load ptr, ptr %a1
%t21 = icmp eq ptr %t20, null
br i1 %t21, label %panic1361, label %ok1362
panic1361:
call void @finch_panic(ptr @.str.780, i64 300, ptr @.str.781)
unreachable
ok1362:
%t22 = getelementptr inbounds %S.parser.Parser, ptr %t20, i32 0, i32 2
%t23 = load i64, ptr %t22
store i64 %t23, ptr %a24
%t25 = load ptr, ptr %a1
%t26 = icmp eq ptr %t25, null
br i1 %t26, label %panic1363, label %ok1364
panic1363:
call void @finch_panic(ptr @.str.782, i64 301, ptr @.str.783)
unreachable
ok1364:
%t27 = getelementptr inbounds %S.parser.Parser, ptr %t25, i32 0, i32 2
store i64 0, ptr %t27
br label %while.cond1365
while.cond1365:
%t28 = load ptr, ptr %a1
%t29 = call i1 @finch.parser.at(ptr %t28, { ptr, i64, i64 } { ptr @.str.784, i64 1, i64 0 })
%t30 = xor i1 %t29, true
br i1 %t30, label %while.body1366, label %while.end1367
while.body1366:
%t31 = load ptr, ptr %a1
%t32 = call i1 @finch.parser.at(ptr %t31, { ptr, i64, i64 } { ptr @.str.785, i64 3, i64 0 })
br i1 %t32, label %then1368, label %endif1370
then1368:
%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.786, i64 37, i64 0 })
br label %endif1370
endif1370:
%t36 = load ptr, ptr %a1
%t37 = call %S.ast.Node @finch.parser.node(ptr %t36, { ptr, i64, i64 } { ptr @.str.787, i64 3, i64 0 })
store %S.ast.Node %t37, ptr %a38
%t39 = load ptr, ptr %a1
%t40 = call %S.ast.Node @finch.parser.node(ptr %t39, { ptr, i64, i64 } { ptr @.str.788, i64 8, i64 0 })
store %S.ast.Node %t40, ptr %a41
%t42 = load ptr, ptr %a1
%t43 = call i1 @finch.parser.accept(ptr %t42, { ptr, i64, i64 } { ptr @.str.789, i64 4, i64 0 })
br i1 %t43, label %then1371, label %else1372
then1371:
%t44 = getelementptr inbounds %S.ast.Node, ptr %a38, i32 0, i32 6
store i1 true, ptr %t44
br label %endif1373
else1372:
br label %while.cond1374
while.cond1374:
br label %while.body1375
while.body1375:
%t45 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9
%t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i32 0, i32 1
%t47 = load ptr, ptr %a1
%t48 = call %S.ast.Node @finch.parser.parseExpr(ptr %t47)
%t49 = load i64, ptr %t46
%t50 = add i64 %t49, 1
call void @finch_arr_reserve(ptr %t45, i64 %t50, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t51 = load ptr, ptr %t45
%t52 = getelementptr inbounds %S.ast.Node, ptr %t51, i64 %t49
store %S.ast.Node %t48, ptr %t52
store i64 %t50, ptr %t46
%t53 = load ptr, ptr %a1
%t54 = call i1 @finch.parser.accept(ptr %t53, { ptr, i64, i64 } { ptr @.str.790, i64 1, i64 0 })
%t55 = xor i1 %t54, true
br i1 %t55, label %then1377, label %endif1379
then1377:
br label %while.end1376
endif1379:
br label %while.cond1374
while.end1376:
br label %endif1373
endif1373:
%t56 = getelementptr inbounds %S.ast.Node, ptr %a38, i32 0, i32 9
%t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %t56, i32 0, i32 1
%t58 = load %S.ast.Node, ptr %a41
store %S.ast.Node %t58, ptr %a59
call void @finch.copy.S_ast_Node(ptr %a60, ptr %a59)
%t61 = load %S.ast.Node, ptr %a60
%t62 = load i64, ptr %t57
%t63 = add i64 %t62, 1
call void @finch_arr_reserve(ptr %t56, i64 %t63, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t64 = load ptr, ptr %t56
%t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 %t62
store %S.ast.Node %t61, ptr %t65
store i64 %t63, ptr %t57
%t66 = load ptr, ptr %a1
%t67 = call %S.lexer.Token @finch.parser.expect(ptr %t66, { ptr, i64, i64 } { ptr @.str.791, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.792, i64 57, i64 0 })
%t68 = load ptr, ptr %a1
%t69 = call i1 @finch.parser.at(ptr %t68, { ptr, i64, i64 } { ptr @.str.793, i64 1, i64 0 })
br label %logic.from1380
logic.from1380:
br i1 %t69, label %logic.rhs1381, label %logic.end1382
logic.rhs1381:
%t70 = load i1, ptr %a2
%t71 = xor i1 %t70, true
br label %logic.rend1383
logic.rend1383:
br label %logic.end1382
logic.end1382:
%t72 = phi i1 [ false, %logic.from1380 ], [ %t71, %logic.rend1383 ]
br i1 %t72, label %then1384, label %else1385
then1384:
%t73 = getelementptr inbounds %S.ast.Node, ptr %a38, i32 0, i32 9
%t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1
%t75 = load ptr, ptr %a1
%t76 = call %S.ast.Node @finch.parser.parseBlock(ptr %t75)
%t77 = load i64, ptr %t74
%t78 = add i64 %t77, 1
call void @finch_arr_reserve(ptr %t73, i64 %t78, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t79 = load ptr, ptr %t73
%t80 = getelementptr inbounds %S.ast.Node, ptr %t79, i64 %t77
store %S.ast.Node %t76, ptr %t80
store i64 %t78, ptr %t74
br label %endif1386
else1385:
%t81 = load i1, ptr %a2
br i1 %t81, label %then1387, label %else1388
then1387:
%t82 = getelementptr inbounds %S.ast.Node, ptr %a38, i32 0, i32 9
%t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i32 0, i32 1
%t84 = load ptr, ptr %a1
%t85 = call %S.ast.Node @finch.parser.parseExpr(ptr %t84)
%t86 = load i64, ptr %t83
%t87 = add i64 %t86, 1
call void @finch_arr_reserve(ptr %t82, i64 %t87, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t88 = load ptr, ptr %t82
%t89 = getelementptr inbounds %S.ast.Node, ptr %t88, i64 %t86
store %S.ast.Node %t85, ptr %t89
store i64 %t87, ptr %t83
br label %endif1389
else1388:
%t90 = getelementptr inbounds %S.ast.Node, ptr %a38, i32 0, i32 9
%t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t90, i32 0, i32 1
%t92 = load ptr, ptr %a1
%t93 = call %S.ast.Node @finch.parser.parseStatement(ptr %t92)
%t94 = load i64, ptr %t91
%t95 = add i64 %t94, 1
call void @finch_arr_reserve(ptr %t90, i64 %t95, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t96 = load ptr, ptr %t90
%t97 = getelementptr inbounds %S.ast.Node, ptr %t96, i64 %t94
store %S.ast.Node %t93, ptr %t97
store i64 %t95, ptr %t91
br label %endif1389
endif1389:
br label %endif1386
endif1386:
%t98 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9
%t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1
%t100 = load %S.ast.Node, ptr %a38
store %S.ast.Node %t100, ptr %a101
call void @finch.copy.S_ast_Node(ptr %a102, ptr %a101)
%t103 = load %S.ast.Node, ptr %a102
%t104 = load i64, ptr %t99
%t105 = add i64 %t104, 1
call void @finch_arr_reserve(ptr %t98, i64 %t105, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t106 = load ptr, ptr %t98
%t107 = getelementptr inbounds %S.ast.Node, ptr %t106, i64 %t104
store %S.ast.Node %t103, ptr %t107
store i64 %t105, ptr %t99
%t108 = load ptr, ptr %a1
%t109 = call i1 @finch.parser.accept(ptr %t108, { ptr, i64, i64 } { ptr @.str.794, i64 1, i64 0 })
%t110 = xor i1 %t109, true
br i1 %t110, label %then1390, label %endif1392
then1390:
%t111 = load ptr, ptr %a1
call void @finch.parser.endOfStatement(ptr %t111)
br label %endif1392
endif1392:
br label %while.cond1365
while.end1367:
%t112 = load i64, ptr %a24
%t113 = load ptr, ptr %a1
%t114 = icmp eq ptr %t113, null
br i1 %t114, label %panic1393, label %ok1394
panic1393:
call void @finch_panic(ptr @.str.795, i64 332, ptr @.str.796)
unreachable
ok1394:
%t115 = getelementptr inbounds %S.parser.Parser, ptr %t113, i32 0, i32 2
store i64 %t112, ptr %t115
%t116 = load ptr, ptr %a1
%t117 = call %S.lexer.Token @finch.parser.next(ptr %t116)
%t118 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9
%t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %t118, i32 0, i32 1
%t120 = load i64, ptr %t119
%t121 = icmp eq i64 %t120, 1
br i1 %t121, label %then1395, label %endif1397
then1395:
%t122 = load ptr, ptr %a1
%t123 = load ptr, ptr %a1
%t124 = call %S.lexer.Token @finch.parser.cur(ptr %t123)
call void @finch.parser.fail(ptr %t122, %S.lexer.Token %t124, { ptr, i64, i64 } { ptr @.str.797, i64 30, i64 0 })
br label %endif1397
endif1397:
%t125 = load %S.ast.Node, ptr %a5
store %S.ast.Node %t125, ptr %a126
call void @finch.copy.S_ast_Node(ptr %a127, ptr %a126)
%t128 = load %S.ast.Node, ptr %a127
ret %S.ast.Node %t128
}
define internal { ptr, i64, i64 } @finch.parser.parseTParams(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
%a22 = alloca { ptr, i64, i64 }, align 16
%a23 = alloca { ptr, i64, i64 }, 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.798, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.799, i64 3, i64 0 })
br label %while.cond1398
while.cond1398:
br label %while.body1399
while.body1399:
%t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1
%t6 = load ptr, ptr %a1
%t7 = call %S.lexer.Token @finch.parser.expect(ptr %t6, { ptr, i64, i64 } { ptr @.str.800, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.801, i64 29, i64 0 })
%t8 = extractvalue %S.lexer.Token %t7, 1
store { ptr, i64, i64 } %t8, ptr %a9
call void @finch_str_copy(ptr %a10, ptr %a9)
%t11 = load { ptr, i64, i64 }, ptr %a10
%t12 = load i64, ptr %t5
%t13 = add i64 %t12, 1
call void @finch_arr_reserve(ptr %a2, i64 %t13, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t14 = load ptr, ptr %a2
%t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i64 %t12
store { ptr, i64, i64 } %t11, ptr %t15
store i64 %t13, ptr %t5
%t16 = load ptr, ptr %a1
%t17 = call i1 @finch.parser.accept(ptr %t16, { ptr, i64, i64 } { ptr @.str.802, i64 1, i64 0 })
%t18 = xor i1 %t17, true
br i1 %t18, label %then1401, label %endif1403
then1401:
br label %while.end1400
endif1403:
br label %while.cond1398
while.end1400:
%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 29, i64 0 })
%t21 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t21, ptr %a22
call void @finch.copy.arr_str(ptr %a23, ptr %a22)
%t24 = load { ptr, i64, i64 }, ptr %a23
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
%a10 = alloca { ptr, i64, i64 }, align 16
%a11 = alloca { ptr, i64, i64 }, align 16
%a31 = alloca %S.ast.Node, 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
%a55 = alloca { ptr, i64, i64 }, align 16
%a56 = alloca { ptr, i64, i64 }, align 16
%a72 = alloca %S.ast.Node, align 16
%a73 = alloca %S.ast.Node, align 16
%a83 = alloca %S.ast.Node, align 16
%a84 = alloca %S.ast.Node, 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.805, 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.806, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.807, i64 8, i64 0 })
%t7 = load ptr, ptr %a1
%t8 = call %S.lexer.Token @finch.parser.expect(ptr %t7, { ptr, i64, i64 } { ptr @.str.808, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.809, i64 13, 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
%t13 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1
store { ptr, i64, i64 } %t12, ptr %t13
%t14 = load ptr, ptr %a1
%t15 = call i1 @finch.parser.at(ptr %t14, { ptr, i64, i64 } { ptr @.str.810, i64 1, i64 0 })
br i1 %t15, label %then1404, label %endif1406
then1404:
%t16 = load ptr, ptr %a1
%t17 = call { ptr, i64, i64 } @finch.parser.parseTParams(ptr %t16)
%t18 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 3
store { ptr, i64, i64 } %t17, ptr %t18
br label %endif1406
endif1406:
%t19 = load ptr, ptr %a1
%t20 = call %S.lexer.Token @finch.parser.expect(ptr %t19, { ptr, i64, i64 } { ptr @.str.811, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.812, i64 3, i64 0 })
br label %while.cond1407
while.cond1407:
%t21 = load ptr, ptr %a1
%t22 = call i1 @finch.parser.at(ptr %t21, { ptr, i64, i64 } { ptr @.str.813, i64 1, i64 0 })
%t23 = xor i1 %t22, true
br i1 %t23, label %while.body1408, label %while.end1409
while.body1408:
%t24 = load ptr, ptr %a1
%t25 = call i1 @finch.parser.at(ptr %t24, { ptr, i64, i64 } { ptr @.str.814, i64 3, i64 0 })
br i1 %t25, label %then1410, label %endif1412
then1410:
%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.815, i64 38, i64 0 })
br label %endif1412
endif1412:
%t29 = load ptr, ptr %a1
%t30 = call %S.ast.Node @finch.parser.node(ptr %t29, { ptr, i64, i64 } { ptr @.str.816, i64 5, i64 0 })
store %S.ast.Node %t30, ptr %a31
%t32 = load ptr, ptr %a1
%t33 = call i1 @finch.parser.atDeclaration(ptr %t32)
%t34 = xor i1 %t33, true
br i1 %t34, label %then1413, label %endif1415
then1413:
%t35 = load ptr, ptr %a1
%t36 = load ptr, ptr %a1
%t37 = call %S.lexer.Token @finch.parser.cur(ptr %t36)
%t38 = load ptr, ptr %a1
%t39 = call %S.lexer.Token @finch.parser.cur(ptr %t38)
%t40 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t39)
store { ptr, i64, i64 } { ptr @.str.817, i64 11, i64 0 }, ptr %a42
store { ptr, i64, i64 } %t40, ptr %a43
call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43)
%t44 = load { ptr, i64, i64 }, ptr %a41
store { ptr, i64, i64 } %t44, ptr %a46
store { ptr, i64, i64 } { ptr @.str.818, i64 28, i64 0 }, ptr %a47
call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47)
%t48 = load { ptr, i64, i64 }, ptr %a45
call void @finch.parser.fail(ptr %t35, %S.lexer.Token %t37, { ptr, i64, i64 } %t48)
br label %endif1415
endif1415:
%t49 = load ptr, ptr %a1
%t50 = call %S.ast.Type @finch.parser.parseType(ptr %t49)
%t51 = getelementptr inbounds %S.ast.Node, ptr %a31, i32 0, i32 5
store %S.ast.Type %t50, ptr %t51
%t52 = load ptr, ptr %a1
%t53 = call %S.lexer.Token @finch.parser.expect(ptr %t52, { ptr, i64, i64 } { ptr @.str.819, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.820, i64 12, i64 0 })
%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
%t58 = getelementptr inbounds %S.ast.Node, ptr %a31, i32 0, i32 1
store { ptr, i64, i64 } %t57, ptr %t58
%t59 = load ptr, ptr %a1
%t60 = call i1 @finch.parser.accept(ptr %t59, { ptr, i64, i64 } { ptr @.str.821, i64 1, i64 0 })
br i1 %t60, label %then1416, label %endif1418
then1416:
%t61 = getelementptr inbounds %S.ast.Node, ptr %a31, i32 0, i32 9
%t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t61, i32 0, i32 1
%t63 = load ptr, ptr %a1
%t64 = call %S.ast.Node @finch.parser.parseExpr(ptr %t63)
%t65 = load i64, ptr %t62
%t66 = add i64 %t65, 1
call void @finch_arr_reserve(ptr %t61, i64 %t66, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t67 = load ptr, ptr %t61
%t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 %t65
store %S.ast.Node %t64, ptr %t68
store i64 %t66, ptr %t62
br label %endif1418
endif1418:
%t69 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9
%t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i32 0, i32 1
%t71 = load %S.ast.Node, ptr %a31
store %S.ast.Node %t71, ptr %a72
call void @finch.copy.S_ast_Node(ptr %a73, ptr %a72)
%t74 = load %S.ast.Node, ptr %a73
%t75 = load i64, ptr %t70
%t76 = add i64 %t75, 1
call void @finch_arr_reserve(ptr %t69, i64 %t76, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t77 = load ptr, ptr %t69
%t78 = getelementptr inbounds %S.ast.Node, ptr %t77, i64 %t75
store %S.ast.Node %t74, ptr %t78
store i64 %t76, ptr %t70
%t79 = load ptr, ptr %a1
call void @finch.parser.endOfStatement(ptr %t79)
br label %while.cond1407
while.end1409:
%t80 = load ptr, ptr %a1
%t81 = call %S.lexer.Token @finch.parser.next(ptr %t80)
%t82 = load %S.ast.Node, ptr %a4
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
ret %S.ast.Node %t85
}
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
%a26 = alloca { ptr, i64, i64 }, align 16
%a27 = 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
%a62 = alloca %S.ast.Node, align 16
%a69 = alloca { ptr, i64, i64 }, align 16
%a70 = alloca { ptr, i64, i64 }, align 16
%a76 = alloca %S.ast.Node, align 16
%a77 = alloca %S.ast.Node, align 16
%a112 = alloca { ptr, i64, i64 }, align 16
%a113 = 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
%a153 = alloca %S.ast.Node, align 16
%a154 = alloca %S.ast.Node, 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.822, 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.823, 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.824, i64 5, i64 0 })
br label %logic.from1419
logic.from1419:
br i1 %t9, label %logic.rhs1420, label %logic.end1421
logic.rhs1420:
%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
%t16 = call i1 @finch.parser.isTypeName({ ptr, i64, i64 } %t15)
br label %logic.rend1422
logic.rend1422:
br label %logic.end1421
logic.end1421:
%t17 = phi i1 [ false, %logic.from1419 ], [ %t16, %logic.rend1422 ]
br i1 %t17, label %then1423, label %endif1425
then1423:
%t18 = load ptr, ptr %a1
%t19 = load ptr, ptr %a1
%t20 = call %S.lexer.Token @finch.parser.cur(ptr %t19)
call void @finch.parser.fail(ptr %t18, %S.lexer.Token %t20, { ptr, i64, i64 } { ptr @.str.825, i64 68, i64 0 })
br label %endif1425
endif1425:
%t21 = load ptr, ptr %a1
%t22 = call %S.lexer.Token @finch.parser.expect(ptr %t21, { ptr, i64, i64 } { ptr @.str.826, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.827, i64 26, i64 0 })
%t23 = load ptr, ptr %a1
%t24 = call %S.lexer.Token @finch.parser.expect(ptr %t23, { ptr, i64, i64 } { ptr @.str.828, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.829, i64 15, i64 0 })
%t25 = extractvalue %S.lexer.Token %t24, 1
store { ptr, i64, i64 } %t25, ptr %a26
call void @finch_str_copy(ptr %a27, ptr %a26)
%t28 = load { ptr, i64, i64 }, ptr %a27
%t29 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1
store { ptr, i64, i64 } %t28, ptr %t29
%t30 = load ptr, ptr %a1
%t31 = call i1 @finch.parser.at(ptr %t30, { ptr, i64, i64 } { ptr @.str.830, i64 1, i64 0 })
br i1 %t31, label %then1426, label %endif1428
then1426:
%t32 = load ptr, ptr %a1
%t33 = call { ptr, i64, i64 } @finch.parser.parseTParams(ptr %t32)
%t34 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 3
store { ptr, i64, i64 } %t33, ptr %t34
br label %endif1428
endif1428:
%t35 = load ptr, ptr %a1
%t36 = call i1 @finch.parser.accept(ptr %t35, { ptr, i64, i64 } { ptr @.str.831, i64 1, i64 0 })
br i1 %t36, label %then1429, label %endif1431
then1429:
%t37 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1
%t38 = load { ptr, i64, i64 }, ptr %t37
%t39 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 2
store { ptr, i64, i64 } %t38, ptr %a40
call void @finch_str_copy(ptr %a41, ptr %a40)
%t42 = load { ptr, i64, i64 }, ptr %a41
store { ptr, i64, i64 } %t42, ptr %t39
%t43 = load ptr, ptr %a1
%t44 = call %S.lexer.Token @finch.parser.expect(ptr %t43, { ptr, i64, i64 } { ptr @.str.832, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.833, i64 13, i64 0 })
%t45 = extractvalue %S.lexer.Token %t44, 1
store { ptr, i64, i64 } %t45, ptr %a46
call void @finch_str_copy(ptr %a47, ptr %a46)
%t48 = load { ptr, i64, i64 }, ptr %a47
%t49 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1
store { ptr, i64, i64 } %t48, ptr %t49
br label %endif1431
endif1431:
%t50 = load ptr, ptr %a1
%t51 = call %S.lexer.Token @finch.parser.expect(ptr %t50, { ptr, i64, i64 } { ptr @.str.834, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.835, i64 3, i64 0 })
%t52 = load ptr, ptr %a1
%t53 = icmp eq ptr %t52, null
br i1 %t53, label %panic1432, label %ok1433
panic1432:
call void @finch_panic(ptr @.str.836, i64 398, ptr @.str.837)
unreachable
ok1433:
%t54 = getelementptr inbounds %S.parser.Parser, ptr %t52, i32 0, i32 2
%t55 = load i64, ptr %t54
%t56 = add i64 %t55, 1
store i64 %t56, ptr %t54
%t57 = load ptr, ptr %a1
%t58 = call i1 @finch.parser.at(ptr %t57, { ptr, i64, i64 } { ptr @.str.838, i64 1, i64 0 })
%t59 = xor i1 %t58, true
br i1 %t59, label %then1434, label %endif1436
then1434:
br label %while.cond1437
while.cond1437:
br label %while.body1438
while.body1438:
%t60 = load ptr, ptr %a1
%t61 = call %S.ast.Node @finch.parser.node(ptr %t60, { ptr, i64, i64 } { ptr @.str.839, i64 5, i64 0 })
store %S.ast.Node %t61, ptr %a62
%t63 = load ptr, ptr %a1
%t64 = call %S.ast.Type @finch.parser.parseType(ptr %t63)
%t65 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 5
store %S.ast.Type %t64, ptr %t65
%t66 = load ptr, ptr %a1
%t67 = call %S.lexer.Token @finch.parser.expect(ptr %t66, { ptr, i64, i64 } { ptr @.str.840, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.841, i64 16, i64 0 })
%t68 = extractvalue %S.lexer.Token %t67, 1
store { ptr, i64, i64 } %t68, ptr %a69
call void @finch_str_copy(ptr %a70, ptr %a69)
%t71 = load { ptr, i64, i64 }, ptr %a70
%t72 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 1
store { ptr, i64, i64 } %t71, ptr %t72
%t73 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9
%t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1
%t75 = load %S.ast.Node, ptr %a62
store %S.ast.Node %t75, ptr %a76
call void @finch.copy.S_ast_Node(ptr %a77, ptr %a76)
%t78 = load %S.ast.Node, ptr %a77
%t79 = load i64, ptr %t74
%t80 = add i64 %t79, 1
call void @finch_arr_reserve(ptr %t73, i64 %t80, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t81 = load ptr, ptr %t73
%t82 = getelementptr inbounds %S.ast.Node, ptr %t81, i64 %t79
store %S.ast.Node %t78, ptr %t82
store i64 %t80, ptr %t74
%t83 = load ptr, ptr %a1
%t84 = call i1 @finch.parser.accept(ptr %t83, { ptr, i64, i64 } { ptr @.str.842, i64 1, i64 0 })
%t85 = xor i1 %t84, true
br i1 %t85, label %then1440, label %endif1442
then1440:
br label %while.end1439
endif1442:
br label %while.cond1437
while.end1439:
br label %endif1436
endif1436:
%t86 = load ptr, ptr %a1
%t87 = icmp eq ptr %t86, null
br i1 %t87, label %panic1443, label %ok1444
panic1443:
call void @finch_panic(ptr @.str.843, i64 410, ptr @.str.844)
unreachable
ok1444:
%t88 = getelementptr inbounds %S.parser.Parser, ptr %t86, i32 0, i32 2
%t89 = load i64, ptr %t88
%t90 = sub i64 %t89, 1
store i64 %t90, ptr %t88
%t91 = load ptr, ptr %a1
%t92 = call %S.lexer.Token @finch.parser.expect(ptr %t91, { ptr, i64, i64 } { ptr @.str.845, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.846, i64 3, i64 0 })
%t93 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.847, i64 4, i64 0 })
%t94 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5
store %S.ast.Type %t93, ptr %t94
%t95 = load ptr, ptr %a1
%t96 = call i1 @finch.parser.accept(ptr %t95, { ptr, i64, i64 } { ptr @.str.848, i64 2, i64 0 })
br i1 %t96, label %then1445, label %endif1447
then1445:
%t97 = load ptr, ptr %a1
%t98 = call i1 @finch.parser.at(ptr %t97, { ptr, i64, i64 } { ptr @.str.849, i64 1, i64 0 })
%t99 = xor i1 %t98, true
br i1 %t99, label %then1448, label %endif1450
then1448:
%t100 = load ptr, ptr %a1
%t101 = call %S.ast.Type @finch.parser.parseType(ptr %t100)
%t102 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5
store %S.ast.Type %t101, ptr %t102
br label %endif1450
endif1450:
%t103 = load ptr, ptr %a1
%t104 = call i1 @finch.parser.accept(ptr %t103, { ptr, i64, i64 } { ptr @.str.850, i64 1, i64 0 })
%t105 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 7
store i1 %t104, ptr %t105
%t106 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 7
%t107 = load i1, ptr %t106
%t108 = xor i1 %t107, true
br label %logic.from1451
logic.from1451:
br i1 %t108, label %logic.rhs1452, label %logic.end1453
logic.rhs1452:
%t109 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5
%t110 = getelementptr inbounds %S.ast.Type, ptr %t109, i32 0, i32 0
%t111 = load { ptr, i64, i64 }, ptr %t110
store { ptr, i64, i64 } %t111, ptr %a112
store { ptr, i64, i64 } { ptr @.str.851, i64 4, i64 0 }, ptr %a113
%t114 = call i32 @finch_str_eq(ptr %a112, ptr %a113)
%t115 = icmp ne i32 %t114, 0
br label %logic.rend1454
logic.rend1454:
br label %logic.end1453
logic.end1453:
%t116 = phi i1 [ false, %logic.from1451 ], [ %t115, %logic.rend1454 ]
br i1 %t116, label %then1455, label %endif1457
then1455:
%t117 = load ptr, ptr %a1
%t118 = load ptr, ptr %a1
%t119 = call %S.lexer.Token @finch.parser.cur(ptr %t118)
%t120 = load ptr, ptr %a1
%t121 = call %S.lexer.Token @finch.parser.cur(ptr %t120)
%t122 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t121)
store { ptr, i64, i64 } { ptr @.str.852, i64 11, i64 0 }, 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
store { ptr, i64, i64 } %t126, ptr %a128
store { ptr, i64, i64 } { ptr @.str.853, i64 61, i64 0 }, ptr %a129
call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129)
%t130 = load { ptr, i64, i64 }, ptr %a127
call void @finch.parser.fail(ptr %t117, %S.lexer.Token %t119, { ptr, i64, i64 } %t130)
br label %endif1457
endif1457:
br label %endif1447
endif1447:
%t131 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9
%t132 = getelementptr inbounds { ptr, i64, i64 }, ptr %t131, i32 0, i32 1
%t133 = load ptr, ptr %a1
%t134 = call %S.ast.Node @finch.parser.parseBlock(ptr %t133)
%t135 = load i64, ptr %t132
%t136 = add i64 %t135, 1
call void @finch_arr_reserve(ptr %t131, i64 %t136, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t137 = load ptr, ptr %t131
%t138 = getelementptr inbounds %S.ast.Node, ptr %t137, i64 %t135
store %S.ast.Node %t134, ptr %t138
store i64 %t136, ptr %t132
%t139 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9
%t140 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9
%t141 = getelementptr inbounds { ptr, i64, i64 }, ptr %t140, i32 0, i32 1
%t142 = load i64, ptr %t141
%t143 = sub i64 %t142, 1
%t144 = load { ptr, i64, i64 }, ptr %t139
%t145 = extractvalue { ptr, i64, i64 } %t144, 1
%t146 = icmp uge i64 %t143, %t145
br i1 %t146, label %range1458, label %inrange1459
range1458:
call void @finch_panic_index(ptr @.str.854, i64 423, i64 %t143, i64 %t145)
unreachable
inrange1459:
%t147 = extractvalue { ptr, i64, i64 } %t144, 0
%t148 = getelementptr inbounds %S.ast.Node, ptr %t147, i64 %t143
%t149 = getelementptr inbounds %S.ast.Node, ptr %t148, i32 0, i32 14
%t150 = load i64, ptr %t149
%t151 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 14
store i64 %t150, ptr %t151
%t152 = load %S.ast.Node, ptr %a4
store %S.ast.Node %t152, ptr %a153
call void @finch.copy.S_ast_Node(ptr %a154, ptr %a153)
%t155 = load %S.ast.Node, ptr %a154
ret %S.ast.Node %t155
}
define internal %S.ast.Node @finch.parser.parseBlock(ptr %p0) {
entry:
%a1 = alloca ptr, align 16
%a4 = alloca %S.ast.Node, align 16
%a11 = alloca i64, align 16
%a43 = alloca %S.ast.Node, align 16
%a44 = alloca %S.ast.Node, 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.855, 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.856, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.857, i64 3, i64 0 })
%t7 = load ptr, ptr %a1
%t8 = icmp eq ptr %t7, null
br i1 %t8, label %panic1460, label %ok1461
panic1460:
call void @finch_panic(ptr @.str.858, i64 432, ptr @.str.859)
unreachable
ok1461:
%t9 = getelementptr inbounds %S.parser.Parser, ptr %t7, i32 0, i32 2
%t10 = load i64, ptr %t9
store i64 %t10, ptr %a11
%t12 = load ptr, ptr %a1
%t13 = icmp eq ptr %t12, null
br i1 %t13, label %panic1462, label %ok1463
panic1462:
call void @finch_panic(ptr @.str.860, i64 433, ptr @.str.861)
unreachable
ok1463:
%t14 = getelementptr inbounds %S.parser.Parser, ptr %t12, i32 0, i32 2
store i64 0, ptr %t14
br label %while.cond1464
while.cond1464:
%t15 = load ptr, ptr %a1
%t16 = call i1 @finch.parser.at(ptr %t15, { ptr, i64, i64 } { ptr @.str.862, i64 1, i64 0 })
%t17 = xor i1 %t16, true
br i1 %t17, label %while.body1465, label %while.end1466
while.body1465:
%t18 = load ptr, ptr %a1
%t19 = call i1 @finch.parser.at(ptr %t18, { ptr, i64, i64 } { ptr @.str.863, i64 3, i64 0 })
br i1 %t19, label %then1467, label %endif1469
then1467:
%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.864, i64 35, i64 0 })
br label %endif1469
endif1469:
%t23 = getelementptr inbounds %S.ast.Node, ptr %a4, 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.parseStatement(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 = load ptr, ptr %a1
call void @finch.parser.endOfStatement(ptr %t31)
br label %while.cond1464
while.end1466:
%t32 = load i64, ptr %a11
%t33 = load ptr, ptr %a1
%t34 = icmp eq ptr %t33, null
br i1 %t34, label %panic1470, label %ok1471
panic1470:
call void @finch_panic(ptr @.str.865, i64 441, ptr @.str.866)
unreachable
ok1471:
%t35 = getelementptr inbounds %S.parser.Parser, ptr %t33, i32 0, i32 2
store i64 %t32, ptr %t35
%t36 = load ptr, ptr %a1
%t37 = call %S.lexer.Token @finch.parser.cur(ptr %t36)
%t38 = extractvalue %S.lexer.Token %t37, 2
%t39 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 14
store i64 %t38, ptr %t39
%t40 = load ptr, ptr %a1
%t41 = call %S.lexer.Token @finch.parser.next(ptr %t40)
%t42 = load %S.ast.Node, ptr %a4
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
ret %S.ast.Node %t45
}
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
%a40 = alloca { ptr, i64, i64 }, align 16
%a41 = alloca { ptr, i64, i64 }, align 16
%a46 = alloca %S.ast.Node, align 16
%a52 = alloca { ptr, i64, i64 }, align 16
%a53 = alloca { ptr, i64, i64 }, align 16
%a61 = alloca { ptr, i64, i64 }, align 16
%a62 = 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
%a116 = alloca %S.ast.Node, 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
%a150 = alloca %S.ast.Node, 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
%a168 = alloca %S.ast.Node, 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
%a198 = alloca { ptr, i64, i64 }, align 16
%a203 = alloca { ptr, i64, i64 }, align 16
%a204 = 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
%a224 = alloca %S.ast.Node, align 16
%a232 = alloca { ptr, i64, i64 }, align 16
%a233 = alloca { ptr, i64, i64 }, align 16
%a251 = alloca { ptr, i64, i64 }, align 16
%a252 = alloca { ptr, i64, i64 }, align 16
%a258 = alloca %S.ast.Node, align 16
%a262 = alloca { ptr, i64, i64 }, align 16
%a263 = alloca { ptr, i64, i64 }, align 16
%a279 = alloca %S.lexer.Token, align 16
%a282 = alloca %S.ast.Node, align 16
%a294 = alloca { ptr, i64, i64 }, align 16
%a298 = alloca i64, align 16
%a301 = alloca i64, align 16
%a306 = alloca { ptr, i64, i64 }, align 16
%a307 = alloca { ptr, i64, i64 }, align 16
%a318 = alloca { ptr, i64, i64 }, align 16
%a319 = alloca { ptr, i64, i64 }, align 16
%a324 = alloca { ptr, i64, i64 }, align 16
%a325 = alloca { ptr, i64, i64 }, align 16
%a331 = alloca { ptr, i64, i64 }, align 16
%a332 = alloca { ptr, i64, i64 }, align 16
%a350 = alloca %S.ast.Node, align 16
%a354 = alloca { ptr, i64, i64 }, align 16
%a355 = alloca { ptr, i64, i64 }, align 16
%a361 = alloca %S.ast.Node, align 16
%a362 = alloca %S.ast.Node, align 16
%a379 = alloca { ptr, i64, i64 }, align 16
%a380 = alloca { ptr, i64, i64 }, align 16
%a385 = alloca { ptr, i64, i64 }, align 16
%a386 = alloca { ptr, i64, i64 }, align 16
%a392 = alloca { ptr, i64, i64 }, align 16
%a393 = alloca { ptr, i64, i64 }, align 16
%a399 = alloca { ptr, i64, i64 }, align 16
%a400 = alloca { ptr, i64, i64 }, align 16
%a418 = alloca %S.ast.Node, align 16
%a422 = alloca %S.ast.Node, align 16
%a423 = alloca %S.ast.Node, align 16
%a430 = alloca %S.ast.Node, align 16
%a431 = 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.867, 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 %then1472, label %endif1474
then1472:
%t10 = load ptr, ptr %a1
%t11 = call %S.ast.Node @finch.parser.parseIf(ptr %t10)
ret %S.ast.Node %t11
endif1474:
%t12 = load { ptr, i64, i64 }, ptr %a4
store { ptr, i64, i64 } %t12, ptr %a13
store { ptr, i64, i64 } { ptr @.str.868, 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 %then1475, label %endif1477
then1475:
%t17 = load ptr, ptr %a1
%t18 = call %S.ast.Node @finch.parser.node(ptr %t17, { ptr, i64, i64 } { ptr @.str.869, 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)
%t22 = getelementptr inbounds %S.ast.Node, ptr %a19, i32 0, i32 9
%t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1
%t24 = load ptr, ptr %a1
%t25 = call %S.ast.Node @finch.parser.parseExpr(ptr %t24)
%t26 = load i64, ptr %t23
%t27 = add i64 %t26, 1
call void @finch_arr_reserve(ptr %t22, i64 %t27, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t28 = load ptr, ptr %t22
%t29 = getelementptr inbounds %S.ast.Node, ptr %t28, i64 %t26
store %S.ast.Node %t25, ptr %t29
store i64 %t27, ptr %t23
%t30 = getelementptr inbounds %S.ast.Node, ptr %a19, i32 0, i32 9
%t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i32 0, i32 1
%t32 = load ptr, ptr %a1
%t33 = call %S.ast.Node @finch.parser.parseBlock(ptr %t32)
%t34 = load i64, ptr %t31
%t35 = add i64 %t34, 1
call void @finch_arr_reserve(ptr %t30, i64 %t35, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t36 = load ptr, ptr %t30
%t37 = getelementptr inbounds %S.ast.Node, ptr %t36, i64 %t34
store %S.ast.Node %t33, ptr %t37
store i64 %t35, ptr %t31
%t38 = load %S.ast.Node, ptr %a19
ret %S.ast.Node %t38
endif1477:
%t39 = load { ptr, i64, i64 }, ptr %a4
store { ptr, i64, i64 } %t39, ptr %a40
store { ptr, i64, i64 } { ptr @.str.870, i64 3, i64 0 }, ptr %a41
%t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41)
%t43 = icmp ne i32 %t42, 0
br i1 %t43, label %then1478, label %endif1480
then1478:
%t44 = load ptr, ptr %a1
%t45 = call %S.ast.Node @finch.parser.node(ptr %t44, { ptr, i64, i64 } { ptr @.str.871, i64 3, i64 0 })
store %S.ast.Node %t45, ptr %a46
%t47 = load ptr, ptr %a1
%t48 = call %S.lexer.Token @finch.parser.next(ptr %t47)
%t49 = load ptr, ptr %a1
%t50 = call %S.lexer.Token @finch.parser.expect(ptr %t49, { ptr, i64, i64 } { ptr @.str.872, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.873, i64 20, i64 0 })
%t51 = extractvalue %S.lexer.Token %t50, 1
store { ptr, i64, i64 } %t51, ptr %a52
call void @finch_str_copy(ptr %a53, ptr %a52)
%t54 = load { ptr, i64, i64 }, ptr %a53
%t55 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 1
store { ptr, i64, i64 } %t54, ptr %t55
%t56 = load ptr, ptr %a1
%t57 = call i1 @finch.parser.accept(ptr %t56, { ptr, i64, i64 } { ptr @.str.874, i64 1, i64 0 })
br i1 %t57, label %then1481, label %endif1483
then1481:
%t58 = load ptr, ptr %a1
%t59 = call %S.lexer.Token @finch.parser.expect(ptr %t58, { ptr, i64, i64 } { ptr @.str.875, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.876, i64 27, i64 0 })
%t60 = extractvalue %S.lexer.Token %t59, 1
store { ptr, i64, i64 } %t60, ptr %a61
call void @finch_str_copy(ptr %a62, ptr %a61)
%t63 = load { ptr, i64, i64 }, ptr %a62
%t64 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 4
store { ptr, i64, i64 } %t63, ptr %t64
br label %endif1483
endif1483:
%t65 = load ptr, ptr %a1
%t66 = call %S.lexer.Token @finch.parser.expect(ptr %t65, { ptr, i64, i64 } { ptr @.str.877, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.878, i64 4, i64 0 })
%t67 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 9
%t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i32 0, i32 1
%t69 = load ptr, ptr %a1
%t70 = call %S.ast.Node @finch.parser.parseExpr(ptr %t69)
%t71 = load i64, ptr %t68
%t72 = add i64 %t71, 1
call void @finch_arr_reserve(ptr %t67, i64 %t72, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t73 = load ptr, ptr %t67
%t74 = getelementptr inbounds %S.ast.Node, ptr %t73, i64 %t71
store %S.ast.Node %t70, ptr %t74
store i64 %t72, ptr %t68
%t75 = load ptr, ptr %a1
%t76 = call i1 @finch.parser.accept(ptr %t75, { ptr, i64, i64 } { ptr @.str.879, i64 2, i64 0 })
br i1 %t76, label %then1484, label %else1485
then1484:
%t77 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 4
%t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1
%t79 = load i64, ptr %t78
%t80 = icmp sgt i64 %t79, 0
br i1 %t80, label %then1487, label %endif1489
then1487:
%t81 = load ptr, ptr %a1
%t82 = load ptr, ptr %a1
%t83 = call %S.lexer.Token @finch.parser.cur(ptr %t82)
call void @finch.parser.fail(ptr %t81, %S.lexer.Token %t83, { ptr, i64, i64 } { ptr @.str.880, i64 55, i64 0 })
br label %endif1489
endif1489:
%t84 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 9
%t85 = getelementptr inbounds { ptr, i64, i64 }, ptr %t84, i32 0, i32 1
%t86 = load ptr, ptr %a1
%t87 = call %S.ast.Node @finch.parser.parseExpr(ptr %t86)
%t88 = load i64, ptr %t85
%t89 = add i64 %t88, 1
call void @finch_arr_reserve(ptr %t84, i64 %t89, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t90 = load ptr, ptr %t84
%t91 = getelementptr inbounds %S.ast.Node, ptr %t90, i64 %t88
store %S.ast.Node %t87, ptr %t91
store i64 %t89, ptr %t85
br label %endif1486
else1485:
%t92 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.881, i64 4, i64 0 }, ptr %t92
br label %endif1486
endif1486:
%t93 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 9
%t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i32 0, i32 1
%t95 = load ptr, ptr %a1
%t96 = call %S.ast.Node @finch.parser.parseBlock(ptr %t95)
%t97 = load i64, ptr %t94
%t98 = add i64 %t97, 1
call void @finch_arr_reserve(ptr %t93, i64 %t98, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t99 = load ptr, ptr %t93
%t100 = getelementptr inbounds %S.ast.Node, ptr %t99, i64 %t97
store %S.ast.Node %t96, ptr %t100
store i64 %t98, ptr %t94
%t101 = load %S.ast.Node, ptr %a46
ret %S.ast.Node %t101
endif1480:
%t102 = load { ptr, i64, i64 }, ptr %a4
store { ptr, i64, i64 } %t102, ptr %a103
store { ptr, i64, i64 } { ptr @.str.882, i64 5, i64 0 }, ptr %a104
%t105 = call i32 @finch_str_eq(ptr %a103, ptr %a104)
%t106 = icmp ne i32 %t105, 0
br i1 %t106, label %then1490, label %endif1492
then1490:
%t107 = load ptr, ptr %a1
%t108 = call %S.ast.Node @finch.parser.parseMatch(ptr %t107, i1 false)
ret %S.ast.Node %t108
endif1492:
%t109 = load { ptr, i64, i64 }, ptr %a4
store { ptr, i64, i64 } %t109, ptr %a110
store { ptr, i64, i64 } { ptr @.str.883, i64 6, i64 0 }, ptr %a111
%t112 = call i32 @finch_str_eq(ptr %a110, ptr %a111)
%t113 = icmp ne i32 %t112, 0
br i1 %t113, label %then1493, label %endif1495
then1493:
%t114 = load ptr, ptr %a1
%t115 = call %S.ast.Node @finch.parser.node(ptr %t114, { ptr, i64, i64 } { ptr @.str.884, i64 6, i64 0 })
store %S.ast.Node %t115, ptr %a116
%t117 = load ptr, ptr %a1
%t118 = call %S.lexer.Token @finch.parser.next(ptr %t117)
%t119 = load ptr, ptr %a1
%t120 = call i1 @finch.parser.at(ptr %t119, { ptr, i64, i64 } { ptr @.str.885, i64 1, i64 0 })
%t121 = xor i1 %t120, true
br label %logic.from1496
logic.from1496:
br i1 %t121, label %logic.rhs1497, label %logic.end1498
logic.rhs1497:
%t122 = load ptr, ptr %a1
%t123 = call %S.lexer.Token @finch.parser.cur(ptr %t122)
%t124 = extractvalue %S.lexer.Token %t123, 4
%t125 = xor i1 %t124, true
br label %logic.rend1499
logic.rend1499:
br label %logic.end1498
logic.end1498:
%t126 = phi i1 [ false, %logic.from1496 ], [ %t125, %logic.rend1499 ]
br i1 %t126, label %then1500, label %endif1502
then1500:
%t127 = getelementptr inbounds %S.ast.Node, ptr %a116, i32 0, i32 9
%t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t127, i32 0, i32 1
%t129 = load ptr, ptr %a1
%t130 = call %S.ast.Node @finch.parser.parseExpr(ptr %t129)
%t131 = load i64, ptr %t128
%t132 = add i64 %t131, 1
call void @finch_arr_reserve(ptr %t127, i64 %t132, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t133 = load ptr, ptr %t127
%t134 = getelementptr inbounds %S.ast.Node, ptr %t133, i64 %t131
store %S.ast.Node %t130, ptr %t134
store i64 %t132, ptr %t128
br label %endif1502
endif1502:
%t135 = load %S.ast.Node, ptr %a116
ret %S.ast.Node %t135
endif1495:
%t136 = load { ptr, i64, i64 }, ptr %a4
store { ptr, i64, i64 } %t136, ptr %a137
store { ptr, i64, i64 } { ptr @.str.886, i64 5, i64 0 }, ptr %a138
%t139 = call i32 @finch_str_eq(ptr %a137, ptr %a138)
%t140 = icmp ne i32 %t139, 0
br label %logic.from1503
logic.from1503:
br i1 %t140, label %logic.end1505, label %logic.rhs1504
logic.rhs1504:
%t141 = load { ptr, i64, i64 }, ptr %a4
store { ptr, i64, i64 } %t141, ptr %a142
store { ptr, i64, i64 } { ptr @.str.887, i64 8, i64 0 }, ptr %a143
%t144 = call i32 @finch_str_eq(ptr %a142, ptr %a143)
%t145 = icmp ne i32 %t144, 0
br label %logic.rend1506
logic.rend1506:
br label %logic.end1505
logic.end1505:
%t146 = phi i1 [ true, %logic.from1503 ], [ %t145, %logic.rend1506 ]
br i1 %t146, label %then1507, label %endif1509
then1507:
%t147 = load ptr, ptr %a1
%t148 = load { ptr, i64, i64 }, ptr %a4
%t149 = call %S.ast.Node @finch.parser.node(ptr %t147, { ptr, i64, i64 } %t148)
store %S.ast.Node %t149, ptr %a150
%t151 = load ptr, ptr %a1
%t152 = call %S.lexer.Token @finch.parser.next(ptr %t151)
%t153 = load %S.ast.Node, ptr %a150
ret %S.ast.Node %t153
endif1509:
%t154 = load { ptr, i64, i64 }, ptr %a4
store { ptr, i64, i64 } %t154, ptr %a155
store { ptr, i64, i64 } { ptr @.str.888, i64 1, i64 0 }, ptr %a156
%t157 = call i32 @finch_str_eq(ptr %a155, ptr %a156)
%t158 = icmp ne i32 %t157, 0
br i1 %t158, label %then1510, label %endif1512
then1510:
%t159 = load ptr, ptr %a1
%t160 = call %S.ast.Node @finch.parser.parseBlock(ptr %t159)
ret %S.ast.Node %t160
endif1512:
%t161 = load { ptr, i64, i64 }, ptr %a4
store { ptr, i64, i64 } %t161, ptr %a162
store { ptr, i64, i64 } { ptr @.str.889, i64 5, i64 0 }, ptr %a163
%t164 = call i32 @finch_str_eq(ptr %a162, ptr %a163)
%t165 = icmp ne i32 %t164, 0
br i1 %t165, label %then1513, label %endif1515
then1513:
%t166 = load ptr, ptr %a1
%t167 = call %S.ast.Node @finch.parser.node(ptr %t166, { ptr, i64, i64 } { ptr @.str.890, i64 5, i64 0 })
store %S.ast.Node %t167, ptr %a168
%t169 = load ptr, ptr %a1
%t170 = call %S.lexer.Token @finch.parser.next(ptr %t169)
%t171 = load ptr, ptr %a1
%t172 = call i1 @finch.parser.at(ptr %t171, { ptr, i64, i64 } { ptr @.str.891, i64 5, i64 0 })
br i1 %t172, label %then1516, label %endif1518
then1516:
%t173 = load ptr, ptr %a1
%t174 = load ptr, ptr %a1
%t175 = call %S.lexer.Token @finch.parser.cur(ptr %t174)
call void @finch.parser.fail(ptr %t173, %S.lexer.Token %t175, { ptr, i64, i64 } { ptr @.str.892, i64 33, i64 0 })
br label %endif1518
endif1518:
%t176 = getelementptr inbounds %S.ast.Node, ptr %a168, i32 0, i32 9
%t177 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i32 0, i32 1
%t178 = load ptr, ptr %a1
%t179 = call %S.ast.Node @finch.parser.parseStatement(ptr %t178)
%t180 = load i64, ptr %t177
%t181 = add i64 %t180, 1
call void @finch_arr_reserve(ptr %t176, i64 %t181, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t182 = load ptr, ptr %t176
%t183 = getelementptr inbounds %S.ast.Node, ptr %t182, i64 %t180
store %S.ast.Node %t179, ptr %t183
store i64 %t181, ptr %t177
%t184 = load %S.ast.Node, ptr %a168
ret %S.ast.Node %t184
endif1515:
%t185 = load { ptr, i64, i64 }, ptr %a4
store { ptr, i64, i64 } %t185, ptr %a186
store { ptr, i64, i64 } { ptr @.str.893, i64 2, i64 0 }, ptr %a187
%t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187)
%t189 = icmp ne i32 %t188, 0
br label %logic.from1519
logic.from1519:
br i1 %t189, label %logic.end1521, label %logic.rhs1520
logic.rhs1520:
%t190 = load { ptr, i64, i64 }, ptr %a4
store { ptr, i64, i64 } %t190, ptr %a191
store { ptr, i64, i64 } { ptr @.str.894, i64 6, i64 0 }, ptr %a192
%t193 = call i32 @finch_str_eq(ptr %a191, ptr %a192)
%t194 = icmp ne i32 %t193, 0
br label %logic.rend1522
logic.rend1522:
br label %logic.end1521
logic.end1521:
%t195 = phi i1 [ true, %logic.from1519 ], [ %t194, %logic.rend1522 ]
br label %logic.from1523
logic.from1523:
br i1 %t195, label %logic.end1525, label %logic.rhs1524
logic.rhs1524:
%t196 = load { ptr, i64, i64 }, ptr %a4
store { ptr, i64, i64 } %t196, ptr %a197
store { ptr, i64, i64 } { ptr @.str.895, i64 6, i64 0 }, ptr %a198
%t199 = call i32 @finch_str_eq(ptr %a197, ptr %a198)
%t200 = icmp ne i32 %t199, 0
br label %logic.rend1526
logic.rend1526:
br label %logic.end1525
logic.end1525:
%t201 = phi i1 [ true, %logic.from1523 ], [ %t200, %logic.rend1526 ]
br label %logic.from1527
logic.from1527:
br i1 %t201, label %logic.end1529, label %logic.rhs1528
logic.rhs1528:
%t202 = load { ptr, i64, i64 }, ptr %a4
store { ptr, i64, i64 } %t202, ptr %a203
store { ptr, i64, i64 } { ptr @.str.896, i64 4, i64 0 }, ptr %a204
%t205 = call i32 @finch_str_eq(ptr %a203, ptr %a204)
%t206 = icmp ne i32 %t205, 0
br label %logic.rend1530
logic.rend1530:
br label %logic.end1529
logic.end1529:
%t207 = phi i1 [ true, %logic.from1527 ], [ %t206, %logic.rend1530 ]
br i1 %t207, label %then1531, label %endif1533
then1531:
%t208 = load ptr, ptr %a1
%t209 = load ptr, ptr %a1
%t210 = call %S.lexer.Token @finch.parser.cur(ptr %t209)
%t211 = load { ptr, i64, i64 }, ptr %a4
store { ptr, i64, i64 } { ptr @.str.897, i64 1, 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.898, i64 48, i64 0 }, ptr %a218
call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218)
%t219 = load { ptr, i64, i64 }, ptr %a216
call void @finch.parser.fail(ptr %t208, %S.lexer.Token %t210, { ptr, i64, i64 } %t219)
br label %endif1533
endif1533:
%t220 = load ptr, ptr %a1
%t221 = call i1 @finch.parser.atDeclaration(ptr %t220)
br i1 %t221, label %then1534, label %endif1536
then1534:
%t222 = load ptr, ptr %a1
%t223 = call %S.ast.Node @finch.parser.node(ptr %t222, { ptr, i64, i64 } { ptr @.str.899, i64 4, i64 0 })
store %S.ast.Node %t223, ptr %a224
%t225 = getelementptr inbounds %S.ast.Node, ptr %a224, i32 0, i32 6
store i1 true, ptr %t225
%t226 = load ptr, ptr %a1
%t227 = call %S.ast.Type @finch.parser.parseType(ptr %t226)
%t228 = getelementptr inbounds %S.ast.Node, ptr %a224, i32 0, i32 5
store %S.ast.Type %t227, ptr %t228
%t229 = load ptr, ptr %a1
%t230 = call %S.lexer.Token @finch.parser.expect(ptr %t229, { ptr, i64, i64 } { ptr @.str.900, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.901, i64 15, i64 0 })
%t231 = extractvalue %S.lexer.Token %t230, 1
store { ptr, i64, i64 } %t231, ptr %a232
call void @finch_str_copy(ptr %a233, ptr %a232)
%t234 = load { ptr, i64, i64 }, ptr %a233
%t235 = getelementptr inbounds %S.ast.Node, ptr %a224, i32 0, i32 1
store { ptr, i64, i64 } %t234, ptr %t235
%t236 = load ptr, ptr %a1
%t237 = call i1 @finch.parser.accept(ptr %t236, { ptr, i64, i64 } { ptr @.str.902, i64 1, i64 0 })
br i1 %t237, label %then1537, label %endif1539
then1537:
%t238 = getelementptr inbounds %S.ast.Node, ptr %a224, i32 0, i32 9
%t239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t238, i32 0, i32 1
%t240 = load ptr, ptr %a1
%t241 = call %S.ast.Node @finch.parser.parseExpr(ptr %t240)
%t242 = load i64, ptr %t239
%t243 = add i64 %t242, 1
call void @finch_arr_reserve(ptr %t238, i64 %t243, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t244 = load ptr, ptr %t238
%t245 = getelementptr inbounds %S.ast.Node, ptr %t244, i64 %t242
store %S.ast.Node %t241, ptr %t245
store i64 %t243, ptr %t239
br label %endif1539
endif1539:
%t246 = load %S.ast.Node, ptr %a224
ret %S.ast.Node %t246
endif1536:
%t247 = load ptr, ptr %a1
%t248 = call i1 @finch.parser.at(ptr %t247, { ptr, i64, i64 } { ptr @.str.903, i64 5, i64 0 })
br label %logic.from1540
logic.from1540:
br i1 %t248, label %logic.rhs1541, label %logic.end1542
logic.rhs1541:
%t249 = load ptr, ptr %a1
%t250 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t249, i64 1)
store { ptr, i64, i64 } %t250, ptr %a251
store { ptr, i64, i64 } { ptr @.str.904, i64 2, i64 0 }, ptr %a252
%t253 = call i32 @finch_str_eq(ptr %a251, ptr %a252)
%t254 = icmp ne i32 %t253, 0
br label %logic.rend1543
logic.rend1543:
br label %logic.end1542
logic.end1542:
%t255 = phi i1 [ false, %logic.from1540 ], [ %t254, %logic.rend1543 ]
br i1 %t255, label %then1544, label %endif1546
then1544:
%t256 = load ptr, ptr %a1
%t257 = call %S.ast.Node @finch.parser.node(ptr %t256, { ptr, i64, i64 } { ptr @.str.905, i64 4, i64 0 })
store %S.ast.Node %t257, ptr %a258
%t259 = load ptr, ptr %a1
%t260 = call %S.lexer.Token @finch.parser.next(ptr %t259)
%t261 = extractvalue %S.lexer.Token %t260, 1
store { ptr, i64, i64 } %t261, ptr %a262
call void @finch_str_copy(ptr %a263, ptr %a262)
%t264 = load { ptr, i64, i64 }, ptr %a263
%t265 = getelementptr inbounds %S.ast.Node, ptr %a258, i32 0, i32 1
store { ptr, i64, i64 } %t264, ptr %t265
%t266 = load ptr, ptr %a1
%t267 = call %S.lexer.Token @finch.parser.next(ptr %t266)
%t268 = getelementptr inbounds %S.ast.Node, ptr %a258, i32 0, i32 9
%t269 = getelementptr inbounds { ptr, i64, i64 }, ptr %t268, i32 0, i32 1
%t270 = load ptr, ptr %a1
%t271 = call %S.ast.Node @finch.parser.parseExpr(ptr %t270)
%t272 = load i64, ptr %t269
%t273 = add i64 %t272, 1
call void @finch_arr_reserve(ptr %t268, i64 %t273, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t274 = load ptr, ptr %t268
%t275 = getelementptr inbounds %S.ast.Node, ptr %t274, i64 %t272
store %S.ast.Node %t271, ptr %t275
store i64 %t273, ptr %t269
%t276 = load %S.ast.Node, ptr %a258
ret %S.ast.Node %t276
endif1546:
%t277 = load ptr, ptr %a1
%t278 = call %S.lexer.Token @finch.parser.cur(ptr %t277)
store %S.lexer.Token %t278, ptr %a279
%t280 = load ptr, ptr %a1
%t281 = call %S.ast.Node @finch.parser.parseExpr(ptr %t280)
store %S.ast.Node %t281, ptr %a282
%t283 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)
%t284 = call ptr @finch_alloc(i64 %t283)
%t285 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i64 0
store { ptr, i64, i64 } { ptr @.str.906, i64 1, i64 0 }, ptr %t285
%t286 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i64 1
store { ptr, i64, i64 } { ptr @.str.907, i64 2, i64 0 }, ptr %t286
%t287 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i64 2
store { ptr, i64, i64 } { ptr @.str.908, i64 2, i64 0 }, ptr %t287
%t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i64 3
store { ptr, i64, i64 } { ptr @.str.909, i64 2, i64 0 }, ptr %t288
%t289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i64 4
store { ptr, i64, i64 } { ptr @.str.910, i64 2, i64 0 }, ptr %t289
%t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i64 5
store { ptr, i64, i64 } { ptr @.str.911, i64 2, i64 0 }, ptr %t290
%t291 = insertvalue { ptr, i64, i64 } undef, ptr %t284, 0
%t292 = insertvalue { ptr, i64, i64 } %t291, i64 6, 1
%t293 = insertvalue { ptr, i64, i64 } %t292, i64 6, 2
store { ptr, i64, i64 } %t293, ptr %a294
%t295 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1
%t296 = load ptr, ptr %a1
%t297 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t296)
store i64 -1, ptr %a298
%t299 = load i64, ptr %t295
%t300 = load ptr, ptr %a294
store i64 0, ptr %a301
br label %find.cond1547
find.cond1547:
%t302 = load i64, ptr %a301
%t303 = icmp slt i64 %t302, %t299
br i1 %t303, label %find.body1548, label %find.end1551
find.body1548:
%t304 = getelementptr inbounds { ptr, i64, i64 }, ptr %t300, i64 %t302
%t305 = load { ptr, i64, i64 }, ptr %t304
store { ptr, i64, i64 } %t305, ptr %a306
store { ptr, i64, i64 } %t297, ptr %a307
%t308 = call i32 @finch_str_eq(ptr %a306, ptr %a307)
%t309 = icmp ne i32 %t308, 0
br i1 %t309, label %find.hit1549, label %find.next1550
find.hit1549:
store i64 %t302, ptr %a298
br label %find.end1551
find.next1550:
%t310 = add i64 %t302, 1
store i64 %t310, ptr %a301
br label %find.cond1547
find.end1551:
%t311 = load i64, ptr %a298
%t312 = icmp sge i64 %t311, 0
br label %logic.from1552
logic.from1552:
br i1 %t312, label %logic.rhs1553, label %logic.end1554
logic.rhs1553:
%t313 = load ptr, ptr %a1
%t314 = call i1 @finch.parser.sameLine(ptr %t313)
br label %logic.rend1555
logic.rend1555:
br label %logic.end1554
logic.end1554:
%t315 = phi i1 [ false, %logic.from1552 ], [ %t314, %logic.rend1555 ]
br i1 %t315, label %then1556, label %endif1558
then1556:
%t316 = getelementptr inbounds %S.ast.Node, ptr %a282, i32 0, i32 0
%t317 = load { ptr, i64, i64 }, ptr %t316
store { ptr, i64, i64 } %t317, ptr %a318
store { ptr, i64, i64 } { ptr @.str.912, i64 3, i64 0 }, ptr %a319
%t320 = call i32 @finch_str_eq(ptr %a318, ptr %a319)
%t321 = icmp eq i32 %t320, 0
br label %logic.from1559
logic.from1559:
br i1 %t321, label %logic.rhs1560, label %logic.end1561
logic.rhs1560:
%t322 = getelementptr inbounds %S.ast.Node, ptr %a282, i32 0, i32 0
%t323 = load { ptr, i64, i64 }, ptr %t322
store { ptr, i64, i64 } %t323, ptr %a324
store { ptr, i64, i64 } { ptr @.str.913, i64 6, i64 0 }, ptr %a325
%t326 = call i32 @finch_str_eq(ptr %a324, ptr %a325)
%t327 = icmp eq i32 %t326, 0
br label %logic.rend1562
logic.rend1562:
br label %logic.end1561
logic.end1561:
%t328 = phi i1 [ false, %logic.from1559 ], [ %t327, %logic.rend1562 ]
br label %logic.from1563
logic.from1563:
br i1 %t328, label %logic.rhs1564, label %logic.end1565
logic.rhs1564:
%t329 = getelementptr inbounds %S.ast.Node, ptr %a282, i32 0, i32 0
%t330 = load { ptr, i64, i64 }, ptr %t329
store { ptr, i64, i64 } %t330, ptr %a331
store { ptr, i64, i64 } { ptr @.str.914, i64 5, i64 0 }, ptr %a332
%t333 = call i32 @finch_str_eq(ptr %a331, ptr %a332)
%t334 = icmp eq i32 %t333, 0
br label %logic.rend1566
logic.rend1566:
br label %logic.end1565
logic.end1565:
%t335 = phi i1 [ false, %logic.from1563 ], [ %t334, %logic.rend1566 ]
br i1 %t335, label %then1567, label %endif1569
then1567:
%t336 = load ptr, ptr %a1
%t337 = load %S.lexer.Token, ptr %a279
call void @finch.parser.fail(ptr %t336, %S.lexer.Token %t337, { ptr, i64, i64 } { ptr @.str.915, i64 66, i64 0 })
br label %endif1569
endif1569:
%t338 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.916, i64 6, i64 0 }, 0
%t339 = getelementptr inbounds %S.lexer.Token, ptr %a279, i32 0, i32 2
%t340 = load i64, ptr %t339
%t341 = insertvalue %S.ast.Node %t338, i64 %t340, 11
%t342 = getelementptr inbounds %S.lexer.Token, ptr %a279, i32 0, i32 3
%t343 = load i64, ptr %t342
%t344 = insertvalue %S.ast.Node %t341, i64 %t343, 12
%t345 = load ptr, ptr %a1
%t346 = icmp eq ptr %t345, null
br i1 %t346, label %panic1570, label %ok1571
panic1570:
call void @finch_panic(ptr @.str.917, i64 536, ptr @.str.918)
unreachable
ok1571:
%t347 = getelementptr inbounds %S.parser.Parser, ptr %t345, i32 0, i32 3
%t348 = load i64, ptr %t347
%t349 = insertvalue %S.ast.Node %t344, i64 %t348, 13
store %S.ast.Node %t349, ptr %a350
%t351 = load ptr, ptr %a1
%t352 = call %S.lexer.Token @finch.parser.next(ptr %t351)
%t353 = extractvalue %S.lexer.Token %t352, 0
store { ptr, i64, i64 } %t353, ptr %a354
call void @finch_str_copy(ptr %a355, ptr %a354)
%t356 = load { ptr, i64, i64 }, ptr %a355
%t357 = getelementptr inbounds %S.ast.Node, ptr %a350, i32 0, i32 1
store { ptr, i64, i64 } %t356, ptr %t357
%t358 = getelementptr inbounds %S.ast.Node, ptr %a350, i32 0, i32 9
%t359 = getelementptr inbounds { ptr, i64, i64 }, ptr %t358, i32 0, i32 1
%t360 = load %S.ast.Node, ptr %a282
store %S.ast.Node %t360, ptr %a361
call void @finch.copy.S_ast_Node(ptr %a362, ptr %a361)
%t363 = load %S.ast.Node, 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.Node, ptr null, i32 1) to i64))
%t366 = load ptr, ptr %t358
%t367 = getelementptr inbounds %S.ast.Node, ptr %t366, i64 %t364
store %S.ast.Node %t363, ptr %t367
store i64 %t365, ptr %t359
%t368 = getelementptr inbounds %S.ast.Node, ptr %a350, i32 0, i32 9
%t369 = getelementptr inbounds { ptr, i64, i64 }, ptr %t368, i32 0, i32 1
%t370 = load ptr, ptr %a1
%t371 = call %S.ast.Node @finch.parser.parseExpr(ptr %t370)
%t372 = load i64, ptr %t369
%t373 = add i64 %t372, 1
call void @finch_arr_reserve(ptr %t368, i64 %t373, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t374 = load ptr, ptr %t368
%t375 = getelementptr inbounds %S.ast.Node, ptr %t374, i64 %t372
store %S.ast.Node %t371, ptr %t375
store i64 %t373, ptr %t369
%t376 = load %S.ast.Node, ptr %a350
ret %S.ast.Node %t376
endif1558:
%t377 = getelementptr inbounds %S.ast.Node, ptr %a282, i32 0, i32 0
%t378 = load { ptr, i64, i64 }, ptr %t377
store { ptr, i64, i64 } %t378, ptr %a379
store { ptr, i64, i64 } { ptr @.str.919, i64 4, i64 0 }, ptr %a380
%t381 = call i32 @finch_str_eq(ptr %a379, ptr %a380)
%t382 = icmp eq i32 %t381, 0
br label %logic.from1572
logic.from1572:
br i1 %t382, label %logic.rhs1573, label %logic.end1574
logic.rhs1573:
%t383 = getelementptr inbounds %S.ast.Node, ptr %a282, i32 0, i32 0
%t384 = load { ptr, i64, i64 }, ptr %t383
store { ptr, i64, i64 } %t384, ptr %a385
store { ptr, i64, i64 } { ptr @.str.920, i64 6, i64 0 }, ptr %a386
%t387 = call i32 @finch_str_eq(ptr %a385, ptr %a386)
%t388 = icmp eq i32 %t387, 0
br label %logic.rend1575
logic.rend1575:
br label %logic.end1574
logic.end1574:
%t389 = phi i1 [ false, %logic.from1572 ], [ %t388, %logic.rend1575 ]
br label %logic.from1576
logic.from1576:
br i1 %t389, label %logic.rhs1577, label %logic.end1578
logic.rhs1577:
%t390 = getelementptr inbounds %S.ast.Node, ptr %a282, i32 0, i32 0
%t391 = load { ptr, i64, i64 }, ptr %t390
store { ptr, i64, i64 } %t391, ptr %a392
store { ptr, i64, i64 } { ptr @.str.921, i64 3, i64 0 }, ptr %a393
%t394 = call i32 @finch_str_eq(ptr %a392, ptr %a393)
%t395 = icmp eq i32 %t394, 0
br label %logic.rend1579
logic.rend1579:
br label %logic.end1578
logic.end1578:
%t396 = phi i1 [ false, %logic.from1576 ], [ %t395, %logic.rend1579 ]
br label %logic.from1580
logic.from1580:
br i1 %t396, label %logic.rhs1581, label %logic.end1582
logic.rhs1581:
%t397 = getelementptr inbounds %S.ast.Node, ptr %a282, i32 0, i32 0
%t398 = load { ptr, i64, i64 }, ptr %t397
store { ptr, i64, i64 } %t398, ptr %a399
store { ptr, i64, i64 } { ptr @.str.922, i64 2, i64 0 }, ptr %a400
%t401 = call i32 @finch_str_eq(ptr %a399, ptr %a400)
%t402 = icmp eq i32 %t401, 0
br label %logic.rend1583
logic.rend1583:
br label %logic.end1582
logic.end1582:
%t403 = phi i1 [ false, %logic.from1580 ], [ %t402, %logic.rend1583 ]
br i1 %t403, label %then1584, label %endif1586
then1584:
%t404 = load ptr, ptr %a1
%t405 = load %S.lexer.Token, ptr %a279
call void @finch.parser.fail(ptr %t404, %S.lexer.Token %t405, { ptr, i64, i64 } { ptr @.str.923, i64 37, i64 0 })
br label %endif1586
endif1586:
%t406 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.924, i64 4, i64 0 }, 0
%t407 = getelementptr inbounds %S.lexer.Token, ptr %a279, i32 0, i32 2
%t408 = load i64, ptr %t407
%t409 = insertvalue %S.ast.Node %t406, i64 %t408, 11
%t410 = getelementptr inbounds %S.lexer.Token, ptr %a279, i32 0, i32 3
%t411 = load i64, ptr %t410
%t412 = insertvalue %S.ast.Node %t409, i64 %t411, 12
%t413 = load ptr, ptr %a1
%t414 = icmp eq ptr %t413, null
br i1 %t414, label %panic1587, label %ok1588
panic1587:
call void @finch_panic(ptr @.str.925, i64 545, ptr @.str.926)
unreachable
ok1588:
%t415 = getelementptr inbounds %S.parser.Parser, ptr %t413, i32 0, i32 3
%t416 = load i64, ptr %t415
%t417 = insertvalue %S.ast.Node %t412, i64 %t416, 13
store %S.ast.Node %t417, ptr %a418
%t419 = getelementptr inbounds %S.ast.Node, ptr %a418, i32 0, i32 9
%t420 = getelementptr inbounds { ptr, i64, i64 }, ptr %t419, i32 0, i32 1
%t421 = load %S.ast.Node, ptr %a282
store %S.ast.Node %t421, ptr %a422
call void @finch.copy.S_ast_Node(ptr %a423, ptr %a422)
%t424 = load %S.ast.Node, ptr %a423
%t425 = load i64, ptr %t420
%t426 = add i64 %t425, 1
call void @finch_arr_reserve(ptr %t419, i64 %t426, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t427 = load ptr, ptr %t419
%t428 = getelementptr inbounds %S.ast.Node, ptr %t427, i64 %t425
store %S.ast.Node %t424, ptr %t428
store i64 %t426, ptr %t420
%t429 = load %S.ast.Node, ptr %a418
store %S.ast.Node %t429, ptr %a430
call void @finch.copy.S_ast_Node(ptr %a431, ptr %a430)
%t432 = load %S.ast.Node, ptr %a431
ret %S.ast.Node %t432
}
define internal %S.ast.Node @finch.parser.parseIf(ptr %p0) {
entry:
%a1 = alloca ptr, align 16
%a4 = alloca %S.ast.Node, align 16
%a44 = alloca %S.ast.Node, align 16
%a45 = alloca %S.ast.Node, 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.927, 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.928, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.929, i64 4, i64 0 })
%t7 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9
%t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i32 0, i32 1
%t9 = load ptr, ptr %a1
%t10 = call %S.ast.Node @finch.parser.parseExpr(ptr %t9)
%t11 = load i64, ptr %t8
%t12 = add i64 %t11, 1
call void @finch_arr_reserve(ptr %t7, i64 %t12, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t13 = load ptr, ptr %t7
%t14 = getelementptr inbounds %S.ast.Node, ptr %t13, i64 %t11
store %S.ast.Node %t10, ptr %t14
store i64 %t12, ptr %t8
%t15 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9
%t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i32 0, i32 1
%t17 = load ptr, ptr %a1
%t18 = call %S.ast.Node @finch.parser.parseBlock(ptr %t17)
%t19 = load i64, ptr %t16
%t20 = add i64 %t19, 1
call void @finch_arr_reserve(ptr %t15, i64 %t20, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t21 = load ptr, ptr %t15
%t22 = getelementptr inbounds %S.ast.Node, ptr %t21, i64 %t19
store %S.ast.Node %t18, ptr %t22
store i64 %t20, ptr %t16
%t23 = load ptr, ptr %a1
%t24 = call i1 @finch.parser.accept(ptr %t23, { ptr, i64, i64 } { ptr @.str.930, i64 4, i64 0 })
br i1 %t24, label %then1589, label %endif1591
then1589:
%t25 = load ptr, ptr %a1
%t26 = call i1 @finch.parser.at(ptr %t25, { ptr, i64, i64 } { ptr @.str.931, i64 2, i64 0 })
br i1 %t26, label %then1592, label %else1593
then1592:
%t27 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9
%t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t27, i32 0, i32 1
%t29 = load ptr, ptr %a1
%t30 = call %S.ast.Node @finch.parser.parseIf(ptr %t29)
%t31 = load i64, ptr %t28
%t32 = add i64 %t31, 1
call void @finch_arr_reserve(ptr %t27, i64 %t32, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t33 = load ptr, ptr %t27
%t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 %t31
store %S.ast.Node %t30, ptr %t34
store i64 %t32, ptr %t28
br label %endif1594
else1593:
%t35 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9
%t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i32 0, i32 1
%t37 = load ptr, ptr %a1
%t38 = call %S.ast.Node @finch.parser.parseBlock(ptr %t37)
%t39 = load i64, ptr %t36
%t40 = add i64 %t39, 1
call void @finch_arr_reserve(ptr %t35, i64 %t40, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t41 = load ptr, ptr %t35
%t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 %t39
store %S.ast.Node %t38, ptr %t42
store i64 %t40, ptr %t36
br label %endif1594
endif1594:
br label %endif1591
endif1591:
%t43 = load %S.ast.Node, ptr %a4
store %S.ast.Node %t43, ptr %a44
call void @finch.copy.S_ast_Node(ptr %a45, ptr %a44)
%t46 = load %S.ast.Node, ptr %a45
ret %S.ast.Node %t46
}
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.932, 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 %then1595, label %endif1597
then1595:
ret i64 1
endif1597:
%t7 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t7, ptr %a8
store { ptr, i64, i64 } { ptr @.str.933, 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 %then1598, label %endif1600
then1598:
ret i64 2
endif1600:
%t12 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t12, ptr %a13
store { ptr, i64, i64 } { ptr @.str.934, 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.from1601
logic.from1601:
br i1 %t16, label %logic.end1603, label %logic.rhs1602
logic.rhs1602:
%t17 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t17, ptr %a18
store { ptr, i64, i64 } { ptr @.str.935, 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.rend1604
logic.rend1604:
br label %logic.end1603
logic.end1603:
%t22 = phi i1 [ true, %logic.from1601 ], [ %t21, %logic.rend1604 ]
br label %logic.from1605
logic.from1605:
br i1 %t22, label %logic.end1607, label %logic.rhs1606
logic.rhs1606:
%t23 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t23, ptr %a24
store { ptr, i64, i64 } { ptr @.str.936, 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.rend1608
logic.rend1608:
br label %logic.end1607
logic.end1607:
%t28 = phi i1 [ true, %logic.from1605 ], [ %t27, %logic.rend1608 ]
br label %logic.from1609
logic.from1609:
br i1 %t28, label %logic.end1611, label %logic.rhs1610
logic.rhs1610:
%t29 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t29, ptr %a30
store { ptr, i64, i64 } { ptr @.str.937, 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.rend1612
logic.rend1612:
br label %logic.end1611
logic.end1611:
%t34 = phi i1 [ true, %logic.from1609 ], [ %t33, %logic.rend1612 ]
br label %logic.from1613
logic.from1613:
br i1 %t34, label %logic.end1615, label %logic.rhs1614
logic.rhs1614:
%t35 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t35, ptr %a36
store { ptr, i64, i64 } { ptr @.str.938, 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.rend1616
logic.rend1616:
br label %logic.end1615
logic.end1615:
%t40 = phi i1 [ true, %logic.from1613 ], [ %t39, %logic.rend1616 ]
br label %logic.from1617
logic.from1617:
br i1 %t40, label %logic.end1619, label %logic.rhs1618
logic.rhs1618:
%t41 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t41, ptr %a42
store { ptr, i64, i64 } { ptr @.str.939, 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.rend1620
logic.rend1620:
br label %logic.end1619
logic.end1619:
%t46 = phi i1 [ true, %logic.from1617 ], [ %t45, %logic.rend1620 ]
br i1 %t46, label %then1621, label %endif1623
then1621:
ret i64 3
endif1623:
%t47 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t47, ptr %a48
store { ptr, i64, i64 } { ptr @.str.940, 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.from1624
logic.from1624:
br i1 %t51, label %logic.end1626, label %logic.rhs1625
logic.rhs1625:
%t52 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t52, ptr %a53
store { ptr, i64, i64 } { ptr @.str.941, 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.rend1627
logic.rend1627:
br label %logic.end1626
logic.end1626:
%t57 = phi i1 [ true, %logic.from1624 ], [ %t56, %logic.rend1627 ]
br label %logic.from1628
logic.from1628:
br i1 %t57, label %logic.end1630, label %logic.rhs1629
logic.rhs1629:
%t58 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t58, ptr %a59
store { ptr, i64, i64 } { ptr @.str.942, 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.rend1631
logic.rend1631:
br label %logic.end1630
logic.end1630:
%t63 = phi i1 [ true, %logic.from1628 ], [ %t62, %logic.rend1631 ]
br label %logic.from1632
logic.from1632:
br i1 %t63, label %logic.end1634, label %logic.rhs1633
logic.rhs1633:
%t64 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t64, ptr %a65
store { ptr, i64, i64 } { ptr @.str.943, 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.rend1635
logic.rend1635:
br label %logic.end1634
logic.end1634:
%t69 = phi i1 [ true, %logic.from1632 ], [ %t68, %logic.rend1635 ]
br i1 %t69, label %then1636, label %endif1638
then1636:
ret i64 4
endif1638:
%t70 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t70, ptr %a71
store { ptr, i64, i64 } { ptr @.str.944, 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.from1639
logic.from1639:
br i1 %t74, label %logic.end1641, label %logic.rhs1640
logic.rhs1640:
%t75 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t75, ptr %a76
store { ptr, i64, i64 } { ptr @.str.945, 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.rend1642
logic.rend1642:
br label %logic.end1641
logic.end1641:
%t80 = phi i1 [ true, %logic.from1639 ], [ %t79, %logic.rend1642 ]
br label %logic.from1643
logic.from1643:
br i1 %t80, label %logic.end1645, label %logic.rhs1644
logic.rhs1644:
%t81 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t81, ptr %a82
store { ptr, i64, i64 } { ptr @.str.946, 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.rend1646
logic.rend1646:
br label %logic.end1645
logic.end1645:
%t86 = phi i1 [ true, %logic.from1643 ], [ %t85, %logic.rend1646 ]
br label %logic.from1647
logic.from1647:
br i1 %t86, label %logic.end1649, label %logic.rhs1648
logic.rhs1648:
%t87 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t87, ptr %a88
store { ptr, i64, i64 } { ptr @.str.947, 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.rend1650
logic.rend1650:
br label %logic.end1649
logic.end1649:
%t92 = phi i1 [ true, %logic.from1647 ], [ %t91, %logic.rend1650 ]
br label %logic.from1651
logic.from1651:
br i1 %t92, label %logic.end1653, label %logic.rhs1652
logic.rhs1652:
%t93 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t93, ptr %a94
store { ptr, i64, i64 } { ptr @.str.948, 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.rend1654
logic.rend1654:
br label %logic.end1653
logic.end1653:
%t98 = phi i1 [ true, %logic.from1651 ], [ %t97, %logic.rend1654 ]
br label %logic.from1655
logic.from1655:
br i1 %t98, label %logic.end1657, label %logic.rhs1656
logic.rhs1656:
%t99 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t99, ptr %a100
store { ptr, i64, i64 } { ptr @.str.949, 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.rend1658
logic.rend1658:
br label %logic.end1657
logic.end1657:
%t104 = phi i1 [ true, %logic.from1655 ], [ %t103, %logic.rend1658 ]
br i1 %t104, label %then1659, label %endif1661
then1659:
ret i64 5
endif1661:
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
%a13 = alloca %S.ast.Node, align 16
%a14 = alloca %S.ast.Node, align 16
%a18 = alloca %S.ast.Node, align 16
%a24 = alloca %S.ast.Node, align 16
%a25 = alloca %S.ast.Node, align 16
%a51 = alloca %S.ast.Node, align 16
%a52 = 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.from1662
logic.from1662:
br i1 %t7, label %logic.end1664, label %logic.rhs1663
logic.rhs1663:
%t8 = load ptr, ptr %a1
%t9 = call i1 @finch.parser.at(ptr %t8, { ptr, i64, i64 } { ptr @.str.950, i64 2, i64 0 })
%t10 = xor i1 %t9, true
br label %logic.rend1665
logic.rend1665:
br label %logic.end1664
logic.end1664:
%t11 = phi i1 [ true, %logic.from1662 ], [ %t10, %logic.rend1665 ]
br i1 %t11, label %then1666, label %endif1668
then1666:
%t12 = load %S.ast.Node, ptr %a4
store %S.ast.Node %t12, ptr %a13
call void @finch.copy.S_ast_Node(ptr %a14, ptr %a13)
%t15 = load %S.ast.Node, ptr %a14
ret %S.ast.Node %t15
endif1668:
%t16 = load ptr, ptr %a1
%t17 = call %S.ast.Node @finch.parser.node(ptr %t16, { ptr, i64, i64 } { ptr @.str.951, i64 2, i64 0 })
store %S.ast.Node %t17, ptr %a18
%t19 = load ptr, ptr %a1
%t20 = call %S.lexer.Token @finch.parser.next(ptr %t19)
%t21 = getelementptr inbounds %S.ast.Node, ptr %a18, i32 0, i32 9
%t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1
%t23 = load %S.ast.Node, ptr %a4
store %S.ast.Node %t23, ptr %a24
call void @finch.copy.S_ast_Node(ptr %a25, ptr %a24)
%t26 = load %S.ast.Node, ptr %a25
%t27 = load i64, ptr %t22
%t28 = add i64 %t27, 1
call void @finch_arr_reserve(ptr %t21, i64 %t28, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t29 = load ptr, ptr %t21
%t30 = getelementptr inbounds %S.ast.Node, ptr %t29, i64 %t27
store %S.ast.Node %t26, ptr %t30
store i64 %t28, ptr %t22
%t31 = load ptr, ptr %a1
%t32 = call i1 @finch.parser.at(ptr %t31, { ptr, i64, i64 } { ptr @.str.952, i64 1, i64 0 })
br i1 %t32, label %then1669, label %else1670
then1669:
%t33 = getelementptr inbounds %S.ast.Node, ptr %a18, i32 0, i32 6
store i1 true, ptr %t33
%t34 = getelementptr inbounds %S.ast.Node, ptr %a18, i32 0, i32 9
%t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i32 0, i32 1
%t36 = load ptr, ptr %a1
%t37 = call %S.ast.Node @finch.parser.parseBlock(ptr %t36)
%t38 = load i64, ptr %t35
%t39 = add i64 %t38, 1
call void @finch_arr_reserve(ptr %t34, i64 %t39, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t40 = load ptr, ptr %t34
%t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t38
store %S.ast.Node %t37, ptr %t41
store i64 %t39, ptr %t35
br label %endif1671
else1670:
%t42 = getelementptr inbounds %S.ast.Node, ptr %a18, i32 0, i32 9
%t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1
%t44 = load ptr, ptr %a1
%t45 = call %S.ast.Node @finch.parser.parseExpr(ptr %t44)
%t46 = load i64, ptr %t43
%t47 = add i64 %t46, 1
call void @finch_arr_reserve(ptr %t42, i64 %t47, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t48 = load ptr, ptr %t42
%t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i64 %t46
store %S.ast.Node %t45, ptr %t49
store i64 %t47, ptr %t43
br label %endif1671
endif1671:
%t50 = load %S.ast.Node, ptr %a18
store %S.ast.Node %t50, ptr %a51
call void @finch.copy.S_ast_Node(ptr %a52, ptr %a51)
%t53 = load %S.ast.Node, ptr %a52
ret %S.ast.Node %t53
}
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
%a22 = alloca %S.ast.Node, align 16
%a26 = alloca { ptr, i64, i64 }, align 16
%a27 = alloca { ptr, i64, i64 }, align 16
%a33 = alloca %S.ast.Node, align 16
%a34 = alloca %S.ast.Node, align 16
%a51 = alloca %S.ast.Node, align 16
%a52 = alloca %S.ast.Node, align 16
%a55 = alloca %S.ast.Node, align 16
%a56 = 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 %then1672, label %endif1674
then1672:
%t5 = load ptr, ptr %a1
%t6 = call %S.ast.Node @finch.parser.parseUnary(ptr %t5)
ret %S.ast.Node %t6
endif1674:
%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.cond1675
while.cond1675:
%t12 = load ptr, ptr %a1
%t13 = call i1 @finch.parser.sameLine(ptr %t12)
br label %logic.from1678
logic.from1678:
br i1 %t13, label %logic.rhs1679, label %logic.end1680
logic.rhs1679:
%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)
%t17 = load i64, ptr %a2
%t18 = icmp eq i64 %t16, %t17
br label %logic.rend1681
logic.rend1681:
br label %logic.end1680
logic.end1680:
%t19 = phi i1 [ false, %logic.from1678 ], [ %t18, %logic.rend1681 ]
br i1 %t19, label %while.body1676, label %while.end1677
while.body1676:
%t20 = load ptr, ptr %a1
%t21 = call %S.ast.Node @finch.parser.node(ptr %t20, { ptr, i64, i64 } { ptr @.str.953, i64 6, i64 0 })
store %S.ast.Node %t21, ptr %a22
%t23 = load ptr, ptr %a1
%t24 = call %S.lexer.Token @finch.parser.next(ptr %t23)
%t25 = extractvalue %S.lexer.Token %t24, 0
store { ptr, i64, i64 } %t25, ptr %a26
call void @finch_str_copy(ptr %a27, ptr %a26)
%t28 = load { ptr, i64, i64 }, ptr %a27
%t29 = getelementptr inbounds %S.ast.Node, ptr %a22, i32 0, i32 1
store { ptr, i64, i64 } %t28, ptr %t29
%t30 = getelementptr inbounds %S.ast.Node, ptr %a22, i32 0, i32 9
%t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i32 0, i32 1
%t32 = load %S.ast.Node, ptr %a11
store %S.ast.Node %t32, ptr %a33
call void @finch.copy.S_ast_Node(ptr %a34, ptr %a33)
%t35 = load %S.ast.Node, ptr %a34
%t36 = load i64, ptr %t31
%t37 = add i64 %t36, 1
call void @finch_arr_reserve(ptr %t30, i64 %t37, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t38 = load ptr, ptr %t30
%t39 = getelementptr inbounds %S.ast.Node, ptr %t38, i64 %t36
store %S.ast.Node %t35, ptr %t39
store i64 %t37, ptr %t31
%t40 = getelementptr inbounds %S.ast.Node, ptr %a22, i32 0, i32 9
%t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1
%t42 = load ptr, ptr %a1
%t43 = load i64, ptr %a2
%t44 = add i64 %t43, 1
%t45 = call %S.ast.Node @finch.parser.parseBinary(ptr %t42, i64 %t44)
%t46 = load i64, ptr %t41
%t47 = add i64 %t46, 1
call void @finch_arr_reserve(ptr %t40, i64 %t47, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t48 = load ptr, ptr %t40
%t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i64 %t46
store %S.ast.Node %t45, ptr %t49
store i64 %t47, ptr %t41
%t50 = load %S.ast.Node, ptr %a22
store %S.ast.Node %t50, ptr %a51
call void @finch.copy.S_ast_Node(ptr %a52, ptr %a51)
%t53 = load %S.ast.Node, ptr %a52
store %S.ast.Node %t53, ptr %a11
br label %while.cond1675
while.end1677:
%t54 = load %S.ast.Node, ptr %a11
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
ret %S.ast.Node %t57
}
define internal %S.ast.Node @finch.parser.parseUnary(ptr %p0) {
entry:
%a1 = alloca ptr, align 16
%a6 = alloca %S.ast.Node, align 16
%a28 = alloca %S.ast.Node, align 16
%a32 = alloca { ptr, i64, i64 }, align 16
%a33 = 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.954, i64 3, i64 0 })
br i1 %t3, label %then1682, label %endif1684
then1682:
%t4 = load ptr, ptr %a1
%t5 = call %S.ast.Node @finch.parser.node(ptr %t4, { ptr, i64, i64 } { ptr @.str.955, 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)
%t9 = getelementptr inbounds %S.ast.Node, ptr %a6, i32 0, i32 9
%t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1
%t11 = load ptr, ptr %a1
%t12 = call %S.ast.Node @finch.parser.parsePostfix(ptr %t11)
%t13 = load i64, ptr %t10
%t14 = add i64 %t13, 1
call void @finch_arr_reserve(ptr %t9, i64 %t14, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t15 = load ptr, ptr %t9
%t16 = getelementptr inbounds %S.ast.Node, ptr %t15, i64 %t13
store %S.ast.Node %t12, ptr %t16
store i64 %t14, ptr %t10
%t17 = load %S.ast.Node, ptr %a6
ret %S.ast.Node %t17
endif1684:
%t18 = load ptr, ptr %a1
%t19 = call i1 @finch.parser.at(ptr %t18, { ptr, i64, i64 } { ptr @.str.956, i64 1, i64 0 })
br label %logic.from1685
logic.from1685:
br i1 %t19, label %logic.end1687, label %logic.rhs1686
logic.rhs1686:
%t20 = load ptr, ptr %a1
%t21 = call i1 @finch.parser.at(ptr %t20, { ptr, i64, i64 } { ptr @.str.957, i64 1, i64 0 })
br label %logic.rend1688
logic.rend1688:
br label %logic.end1687
logic.end1687:
%t22 = phi i1 [ true, %logic.from1685 ], [ %t21, %logic.rend1688 ]
br label %logic.from1689
logic.from1689:
br i1 %t22, label %logic.end1691, label %logic.rhs1690
logic.rhs1690:
%t23 = load ptr, ptr %a1
%t24 = call i1 @finch.parser.at(ptr %t23, { ptr, i64, i64 } { ptr @.str.958, i64 1, i64 0 })
br label %logic.rend1692
logic.rend1692:
br label %logic.end1691
logic.end1691:
%t25 = phi i1 [ true, %logic.from1689 ], [ %t24, %logic.rend1692 ]
br i1 %t25, label %then1693, label %endif1695
then1693:
%t26 = load ptr, ptr %a1
%t27 = call %S.ast.Node @finch.parser.node(ptr %t26, { ptr, i64, i64 } { ptr @.str.959, i64 5, i64 0 })
store %S.ast.Node %t27, ptr %a28
%t29 = load ptr, ptr %a1
%t30 = call %S.lexer.Token @finch.parser.next(ptr %t29)
%t31 = extractvalue %S.lexer.Token %t30, 0
store { ptr, i64, i64 } %t31, ptr %a32
call void @finch_str_copy(ptr %a33, ptr %a32)
%t34 = load { ptr, i64, i64 }, ptr %a33
%t35 = getelementptr inbounds %S.ast.Node, ptr %a28, i32 0, i32 1
store { ptr, i64, i64 } %t34, ptr %t35
%t36 = getelementptr inbounds %S.ast.Node, ptr %a28, 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.parseUnary(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
%t44 = load %S.ast.Node, ptr %a28
ret %S.ast.Node %t44
endif1695:
%t45 = load ptr, ptr %a1
%t46 = call %S.ast.Node @finch.parser.parsePostfix(ptr %t45)
ret %S.ast.Node %t46
}
define internal void @finch.parser.parseArgs(ptr %p0, ptr %p1) {
entry:
%a1 = alloca ptr, align 16
%a2 = alloca ptr, align 16
%a16 = alloca { ptr, i64, i64 }, align 16
%a21 = alloca { ptr, i64, i64 }, align 16
%a22 = alloca { ptr, i64, i64 }, align 16
%a29 = alloca { ptr, i64, i64 }, align 16
%a30 = 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 %p1, ptr %a2
%t3 = load ptr, ptr %a1
%t4 = call %S.lexer.Token @finch.parser.expect(ptr %t3, { ptr, i64, i64 } { ptr @.str.960, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.961, i64 3, i64 0 })
%t5 = load ptr, ptr %a1
%t6 = icmp eq ptr %t5, null
br i1 %t6, label %panic1696, label %ok1697
panic1696:
call void @finch_panic(ptr @.str.962, i64 638, ptr @.str.963)
unreachable
ok1697:
%t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 2
%t8 = load i64, ptr %t7
%t9 = add i64 %t8, 1
store i64 %t9, ptr %t7
%t10 = load ptr, ptr %a1
%t11 = call i1 @finch.parser.at(ptr %t10, { ptr, i64, i64 } { ptr @.str.964, i64 1, i64 0 })
%t12 = xor i1 %t11, true
br i1 %t12, label %then1698, label %endif1700
then1698:
br label %while.cond1701
while.cond1701:
%t13 = load ptr, ptr %a1
%t14 = call i1 @finch.parser.at(ptr %t13, { ptr, i64, i64 } { ptr @.str.965, i64 1, i64 0 })
%t15 = xor i1 %t14, true
br i1 %t15, label %while.body1702, label %while.end1703
while.body1702:
store { ptr, i64, i64 } { ptr @.str.966, i64 0, i64 0 }, ptr %a16
%t17 = load ptr, ptr %a1
%t18 = call i1 @finch.parser.at(ptr %t17, { ptr, i64, i64 } { ptr @.str.967, i64 5, i64 0 })
br label %logic.from1704
logic.from1704:
br i1 %t18, label %logic.rhs1705, label %logic.end1706
logic.rhs1705:
%t19 = load ptr, ptr %a1
%t20 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t19, i64 1)
store { ptr, i64, i64 } %t20, ptr %a21
store { ptr, i64, i64 } { ptr @.str.968, i64 1, i64 0 }, ptr %a22
%t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22)
%t24 = icmp ne i32 %t23, 0
br label %logic.rend1707
logic.rend1707:
br label %logic.end1706
logic.end1706:
%t25 = phi i1 [ false, %logic.from1704 ], [ %t24, %logic.rend1707 ]
br i1 %t25, label %then1708, label %endif1710
then1708:
%t26 = load ptr, ptr %a1
%t27 = call %S.lexer.Token @finch.parser.next(ptr %t26)
%t28 = extractvalue %S.lexer.Token %t27, 1
store { ptr, i64, i64 } %t28, ptr %a29
call void @finch_str_copy(ptr %a30, ptr %a29)
%t31 = load { ptr, i64, i64 }, ptr %a30
store { ptr, i64, i64 } %t31, ptr %a16
%t32 = load ptr, ptr %a1
%t33 = call %S.lexer.Token @finch.parser.next(ptr %t32)
br label %endif1710
endif1710:
%t34 = load ptr, ptr %a2
%t35 = icmp eq ptr %t34, null
br i1 %t35, label %panic1711, label %ok1712
panic1711:
call void @finch_panic(ptr @.str.969, i64 646, ptr @.str.970)
unreachable
ok1712:
%t36 = getelementptr inbounds %S.ast.Node, ptr %t34, i32 0, i32 10
%t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i32 0, i32 1
%t38 = load { ptr, i64, i64 }, ptr %a16
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 = load ptr, ptr %a2
%t47 = icmp eq ptr %t46, null
br i1 %t47, label %panic1713, label %ok1714
panic1713:
call void @finch_panic(ptr @.str.971, i64 647, ptr @.str.972)
unreachable
ok1714:
%t48 = getelementptr inbounds %S.ast.Node, ptr %t46, 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.973, i64 1, i64 0 })
%t58 = xor i1 %t57, true
br i1 %t58, label %then1715, label %endif1717
then1715:
br label %while.end1703
endif1717:
br label %while.cond1701
while.end1703:
br label %endif1700
endif1700:
%t59 = load ptr, ptr %a1
%t60 = icmp eq ptr %t59, null
br i1 %t60, label %panic1718, label %ok1719
panic1718:
call void @finch_panic(ptr @.str.974, i64 653, ptr @.str.975)
unreachable
ok1719:
%t61 = getelementptr inbounds %S.parser.Parser, ptr %t59, i32 0, i32 2
%t62 = load i64, ptr %t61
%t63 = sub i64 %t62, 1
store i64 %t63, ptr %t61
%t64 = load ptr, ptr %a1
%t65 = call %S.lexer.Token @finch.parser.expect(ptr %t64, { ptr, i64, i64 } { ptr @.str.976, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.977, i64 3, i64 0 })
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
%a17 = alloca { ptr, i64, i64 }, align 16
%a18 = alloca { ptr, i64, i64 }, align 16
%a24 = alloca %S.ast.Node, align 16
%a25 = alloca %S.ast.Node, align 16
%a41 = alloca %S.ast.Node, align 16
%a42 = alloca %S.ast.Node, align 16
%a48 = alloca %S.ast.Node, align 16
%a59 = alloca %S.ast.Node, align 16
%a60 = alloca %S.ast.Node, align 16
%a82 = alloca %S.ast.Node, align 16
%a83 = alloca %S.ast.Node, align 16
%a86 = alloca %S.ast.Node, align 16
%a87 = alloca %S.ast.Node, align 16
%a90 = alloca %S.ast.Node, align 16
%a91 = 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.cond1720
while.cond1720:
%t5 = load ptr, ptr %a1
%t6 = call i1 @finch.parser.sameLine(ptr %t5)
br i1 %t6, label %while.body1721, label %while.end1722
while.body1721:
%t7 = load ptr, ptr %a1
%t8 = call i1 @finch.parser.at(ptr %t7, { ptr, i64, i64 } { ptr @.str.978, i64 1, i64 0 })
br i1 %t8, label %then1723, label %else1724
then1723:
%t9 = load ptr, ptr %a1
%t10 = call %S.ast.Node @finch.parser.node(ptr %t9, { ptr, i64, i64 } { ptr @.str.979, 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)
%t14 = load ptr, ptr %a1
%t15 = call %S.lexer.Token @finch.parser.expect(ptr %t14, { ptr, i64, i64 } { ptr @.str.980, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.981, i64 16, i64 0 })
%t16 = extractvalue %S.lexer.Token %t15, 1
store { ptr, i64, i64 } %t16, ptr %a17
call void @finch_str_copy(ptr %a18, ptr %a17)
%t19 = load { ptr, i64, i64 }, ptr %a18
%t20 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 1
store { ptr, i64, i64 } %t19, ptr %t20
%t21 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 9
%t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1
%t23 = load %S.ast.Node, ptr %a4
store %S.ast.Node %t23, ptr %a24
call void @finch.copy.S_ast_Node(ptr %a25, ptr %a24)
%t26 = load %S.ast.Node, ptr %a25
%t27 = load i64, ptr %t22
%t28 = add i64 %t27, 1
call void @finch_arr_reserve(ptr %t21, i64 %t28, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t29 = load ptr, ptr %t21
%t30 = getelementptr inbounds %S.ast.Node, ptr %t29, i64 %t27
store %S.ast.Node %t26, ptr %t30
store i64 %t28, ptr %t22
%t31 = load ptr, ptr %a1
%t32 = call i1 @finch.parser.at(ptr %t31, { ptr, i64, i64 } { ptr @.str.982, i64 1, i64 0 })
br label %logic.from1726
logic.from1726:
br i1 %t32, label %logic.rhs1727, label %logic.end1728
logic.rhs1727:
%t33 = load ptr, ptr %a1
%t34 = call %S.lexer.Token @finch.parser.cur(ptr %t33)
%t35 = extractvalue %S.lexer.Token %t34, 4
%t36 = xor i1 %t35, true
br label %logic.rend1729
logic.rend1729:
br label %logic.end1728
logic.end1728:
%t37 = phi i1 [ false, %logic.from1726 ], [ %t36, %logic.rend1729 ]
br i1 %t37, label %then1730, label %endif1732
then1730:
%t38 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.983, i64 6, i64 0 }, ptr %t38
%t39 = load ptr, ptr %a1
call void @finch.parser.parseArgs(ptr %t39, ptr %a11)
br label %endif1732
endif1732:
%t40 = load %S.ast.Node, ptr %a11
store %S.ast.Node %t40, ptr %a41
call void @finch.copy.S_ast_Node(ptr %a42, ptr %a41)
%t43 = load %S.ast.Node, ptr %a42
store %S.ast.Node %t43, ptr %a4
br label %endif1725
else1724:
%t44 = load ptr, ptr %a1
%t45 = call i1 @finch.parser.at(ptr %t44, { ptr, i64, i64 } { ptr @.str.984, i64 1, i64 0 })
br i1 %t45, label %then1733, label %else1734
then1733:
%t46 = load ptr, ptr %a1
%t47 = call %S.ast.Node @finch.parser.node(ptr %t46, { ptr, i64, i64 } { ptr @.str.985, i64 5, i64 0 })
store %S.ast.Node %t47, ptr %a48
%t49 = load ptr, ptr %a1
%t50 = call %S.lexer.Token @finch.parser.next(ptr %t49)
%t51 = load ptr, ptr %a1
%t52 = icmp eq ptr %t51, null
br i1 %t52, label %panic1736, label %ok1737
panic1736:
call void @finch_panic(ptr @.str.986, i64 673, ptr @.str.987)
unreachable
ok1737:
%t53 = getelementptr inbounds %S.parser.Parser, ptr %t51, i32 0, i32 2
%t54 = load i64, ptr %t53
%t55 = add i64 %t54, 1
store i64 %t55, ptr %t53
%t56 = getelementptr inbounds %S.ast.Node, ptr %a48, i32 0, i32 9
%t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %t56, i32 0, i32 1
%t58 = load %S.ast.Node, ptr %a4
store %S.ast.Node %t58, ptr %a59
call void @finch.copy.S_ast_Node(ptr %a60, ptr %a59)
%t61 = load %S.ast.Node, ptr %a60
%t62 = load i64, ptr %t57
%t63 = add i64 %t62, 1
call void @finch_arr_reserve(ptr %t56, i64 %t63, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t64 = load ptr, ptr %t56
%t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 %t62
store %S.ast.Node %t61, ptr %t65
store i64 %t63, ptr %t57
%t66 = getelementptr inbounds %S.ast.Node, ptr %a48, i32 0, i32 9
%t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t66, i32 0, i32 1
%t68 = load ptr, ptr %a1
%t69 = call %S.ast.Node @finch.parser.parseExpr(ptr %t68)
%t70 = load i64, ptr %t67
%t71 = add i64 %t70, 1
call void @finch_arr_reserve(ptr %t66, i64 %t71, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t72 = load ptr, ptr %t66
%t73 = getelementptr inbounds %S.ast.Node, ptr %t72, i64 %t70
store %S.ast.Node %t69, ptr %t73
store i64 %t71, ptr %t67
%t74 = load ptr, ptr %a1
%t75 = icmp eq ptr %t74, null
br i1 %t75, label %panic1738, label %ok1739
panic1738:
call void @finch_panic(ptr @.str.988, i64 676, ptr @.str.989)
unreachable
ok1739:
%t76 = getelementptr inbounds %S.parser.Parser, ptr %t74, i32 0, i32 2
%t77 = load i64, ptr %t76
%t78 = sub i64 %t77, 1
store i64 %t78, ptr %t76
%t79 = load ptr, ptr %a1
%t80 = call %S.lexer.Token @finch.parser.expect(ptr %t79, { ptr, i64, i64 } { ptr @.str.990, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.991, i64 3, i64 0 })
%t81 = load %S.ast.Node, ptr %a48
store %S.ast.Node %t81, ptr %a82
call void @finch.copy.S_ast_Node(ptr %a83, ptr %a82)
%t84 = load %S.ast.Node, ptr %a83
store %S.ast.Node %t84, ptr %a4
br label %endif1735
else1734:
%t85 = load %S.ast.Node, ptr %a4
store %S.ast.Node %t85, ptr %a86
call void @finch.copy.S_ast_Node(ptr %a87, ptr %a86)
%t88 = load %S.ast.Node, ptr %a87
ret %S.ast.Node %t88
endif1735:
br label %endif1725
endif1725:
br label %while.cond1720
while.end1722:
%t89 = load %S.ast.Node, ptr %a4
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
ret %S.ast.Node %t92
}
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
%a35 = alloca { ptr, i64, i64 }, align 16
%a36 = alloca { ptr, i64, i64 }, align 16
%a41 = alloca { ptr, i64, i64 }, align 16
%a42 = alloca { ptr, i64, i64 }, align 16
%a45 = 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
%a59 = alloca { ptr, i64, i64 }, align 16
%a60 = alloca { ptr, i64, i64 }, align 16
%a63 = alloca %S.ast.Node, align 16
%a64 = alloca %S.ast.Node, align 16
%a67 = alloca { ptr, i64, i64 }, align 16
%a68 = alloca { ptr, i64, i64 }, align 16
%a72 = alloca { ptr, i64, i64 }, align 16
%a73 = alloca { ptr, i64, i64 }, align 16
%a82 = alloca { ptr, i64, i64 }, align 16
%a83 = alloca { ptr, i64, i64 }, align 16
%a86 = 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
%a98 = alloca %S.ast.Node, align 16
%a99 = alloca %S.ast.Node, align 16
%a102 = alloca { ptr, i64, i64 }, align 16
%a103 = alloca { ptr, i64, i64 }, align 16
%a115 = alloca %S.ast.Node, 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
%a148 = alloca { ptr, i64, i64 }, align 16
%a149 = alloca { ptr, i64, i64 }, align 16
%a177 = alloca { ptr, i64, i64 }, align 16
%a178 = alloca { ptr, i64, i64 }, align 16
%a202 = alloca %S.ast.Node, align 16
%a203 = alloca %S.ast.Node, align 16
%a206 = alloca { ptr, i64, i64 }, align 16
%a207 = alloca { ptr, i64, i64 }, align 16
%a215 = alloca { ptr, i64, i64 }, align 16
%a216 = alloca { ptr, i64, i64 }, align 16
%a235 = alloca { ptr, i64, i64 }, align 16
%a236 = alloca { ptr, i64, i64 }, align 16
%a264 = alloca %S.ast.Node, align 16
%a265 = alloca %S.ast.Node, align 16
%a277 = alloca %S.ast.Node, align 16
%a278 = alloca %S.ast.Node, align 16
%a282 = alloca %S.ast.Node, align 16
%a283 = alloca %S.ast.Node, 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
%a298 = alloca %S.ast.Node, align 16
%a299 = alloca %S.ast.Node, 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.992, 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.993, 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.from1740
logic.from1740:
br i1 %t18, label %logic.end1742, label %logic.rhs1741
logic.rhs1741:
%t19 = load { ptr, i64, i64 }, ptr %a13
store { ptr, i64, i64 } %t19, ptr %a20
store { ptr, i64, i64 } { ptr @.str.994, 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.rend1743
logic.rend1743:
br label %logic.end1742
logic.end1742:
%t24 = phi i1 [ true, %logic.from1740 ], [ %t23, %logic.rend1743 ]
br label %logic.from1744
logic.from1744:
br i1 %t24, label %logic.end1746, label %logic.rhs1745
logic.rhs1745:
%t25 = load { ptr, i64, i64 }, ptr %a13
store { ptr, i64, i64 } %t25, ptr %a26
store { ptr, i64, i64 } { ptr @.str.995, 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.rend1747
logic.rend1747:
br label %logic.end1746
logic.end1746:
%t30 = phi i1 [ true, %logic.from1744 ], [ %t29, %logic.rend1747 ]
br i1 %t30, label %then1748, label %endif1750
then1748:
%t31 = load ptr, ptr %a1
%t32 = call %S.lexer.Token @finch.parser.next(ptr %t31)
%t33 = load { ptr, i64, i64 }, ptr %a13
%t34 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0
store { ptr, i64, i64 } %t33, ptr %a35
call void @finch_str_copy(ptr %a36, ptr %a35)
%t37 = load { ptr, i64, i64 }, ptr %a36
store { ptr, i64, i64 } %t37, ptr %t34
%t38 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1
%t39 = load { ptr, i64, i64 }, ptr %t38
%t40 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4
store { ptr, i64, i64 } %t39, ptr %a41
call void @finch_str_copy(ptr %a42, ptr %a41)
%t43 = load { ptr, i64, i64 }, ptr %a42
store { ptr, i64, i64 } %t43, ptr %t40
%t44 = load %S.ast.Node, ptr %a7
store %S.ast.Node %t44, ptr %a45
call void @finch.copy.S_ast_Node(ptr %a46, ptr %a45)
%t47 = load %S.ast.Node, ptr %a46
ret %S.ast.Node %t47
endif1750:
%t48 = load { ptr, i64, i64 }, ptr %a13
store { ptr, i64, i64 } %t48, ptr %a49
store { ptr, i64, i64 } { ptr @.str.996, i64 6, i64 0 }, ptr %a50
%t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50)
%t52 = icmp ne i32 %t51, 0
br i1 %t52, label %then1751, label %endif1753
then1751:
%t53 = load ptr, ptr %a1
%t54 = call %S.lexer.Token @finch.parser.next(ptr %t53)
%t55 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.997, i64 3, i64 0 }, ptr %t55
%t56 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1
%t57 = load { ptr, i64, i64 }, ptr %t56
%t58 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4
store { ptr, i64, i64 } %t57, ptr %a59
call void @finch_str_copy(ptr %a60, ptr %a59)
%t61 = load { ptr, i64, i64 }, ptr %a60
store { ptr, i64, i64 } %t61, ptr %t58
%t62 = load %S.ast.Node, ptr %a7
store %S.ast.Node %t62, ptr %a63
call void @finch.copy.S_ast_Node(ptr %a64, ptr %a63)
%t65 = load %S.ast.Node, ptr %a64
ret %S.ast.Node %t65
endif1753:
%t66 = load { ptr, i64, i64 }, ptr %a13
store { ptr, i64, i64 } %t66, ptr %a67
store { ptr, i64, i64 } { ptr @.str.998, i64 4, i64 0 }, ptr %a68
%t69 = call i32 @finch_str_eq(ptr %a67, ptr %a68)
%t70 = icmp ne i32 %t69, 0
br label %logic.from1754
logic.from1754:
br i1 %t70, label %logic.end1756, label %logic.rhs1755
logic.rhs1755:
%t71 = load { ptr, i64, i64 }, ptr %a13
store { ptr, i64, i64 } %t71, ptr %a72
store { ptr, i64, i64 } { ptr @.str.999, i64 5, i64 0 }, ptr %a73
%t74 = call i32 @finch_str_eq(ptr %a72, ptr %a73)
%t75 = icmp ne i32 %t74, 0
br label %logic.rend1757
logic.rend1757:
br label %logic.end1756
logic.end1756:
%t76 = phi i1 [ true, %logic.from1754 ], [ %t75, %logic.rend1757 ]
br i1 %t76, label %then1758, label %endif1760
then1758:
%t77 = load ptr, ptr %a1
%t78 = call %S.lexer.Token @finch.parser.next(ptr %t77)
%t79 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.1000, i64 4, i64 0 }, ptr %t79
%t80 = load { ptr, i64, i64 }, ptr %a13
%t81 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4
store { ptr, i64, i64 } %t80, ptr %a82
call void @finch_str_copy(ptr %a83, ptr %a82)
%t84 = load { ptr, i64, i64 }, ptr %a83
store { ptr, i64, i64 } %t84, ptr %t81
%t85 = load %S.ast.Node, ptr %a7
store %S.ast.Node %t85, ptr %a86
call void @finch.copy.S_ast_Node(ptr %a87, ptr %a86)
%t88 = load %S.ast.Node, ptr %a87
ret %S.ast.Node %t88
endif1760:
%t89 = load { ptr, i64, i64 }, ptr %a13
store { ptr, i64, i64 } %t89, ptr %a90
store { ptr, i64, i64 } { ptr @.str.1001, i64 4, i64 0 }, ptr %a91
%t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91)
%t93 = icmp ne i32 %t92, 0
br i1 %t93, label %then1761, label %endif1763
then1761:
%t94 = load ptr, ptr %a1
%t95 = call %S.lexer.Token @finch.parser.next(ptr %t94)
%t96 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.1002, i64 4, i64 0 }, ptr %t96
%t97 = load %S.ast.Node, ptr %a7
store %S.ast.Node %t97, ptr %a98
call void @finch.copy.S_ast_Node(ptr %a99, ptr %a98)
%t100 = load %S.ast.Node, ptr %a99
ret %S.ast.Node %t100
endif1763:
%t101 = load { ptr, i64, i64 }, ptr %a13
store { ptr, i64, i64 } %t101, ptr %a102
store { ptr, i64, i64 } { ptr @.str.1003, i64 1, i64 0 }, ptr %a103
%t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103)
%t105 = icmp ne i32 %t104, 0
br i1 %t105, label %then1764, label %endif1766
then1764:
%t106 = load ptr, ptr %a1
%t107 = call %S.lexer.Token @finch.parser.next(ptr %t106)
%t108 = load ptr, ptr %a1
%t109 = icmp eq ptr %t108, null
br i1 %t109, label %panic1767, label %ok1768
panic1767:
call void @finch_panic(ptr @.str.1004, i64 715, ptr @.str.1005)
unreachable
ok1768:
%t110 = getelementptr inbounds %S.parser.Parser, ptr %t108, i32 0, i32 2
%t111 = load i64, ptr %t110
%t112 = add i64 %t111, 1
store i64 %t112, ptr %t110
%t113 = load ptr, ptr %a1
%t114 = call %S.ast.Node @finch.parser.parseExpr(ptr %t113)
store %S.ast.Node %t114, ptr %a115
%t116 = load ptr, ptr %a1
%t117 = icmp eq ptr %t116, null
br i1 %t117, label %panic1769, label %ok1770
panic1769:
call void @finch_panic(ptr @.str.1006, i64 717, ptr @.str.1007)
unreachable
ok1770:
%t118 = getelementptr inbounds %S.parser.Parser, ptr %t116, i32 0, i32 2
%t119 = load i64, ptr %t118
%t120 = sub i64 %t119, 1
store i64 %t120, ptr %t118
%t121 = load ptr, ptr %a1
%t122 = call %S.lexer.Token @finch.parser.expect(ptr %t121, { ptr, i64, i64 } { ptr @.str.1008, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1009, i64 3, i64 0 })
%t123 = load %S.ast.Node, ptr %a115
ret %S.ast.Node %t123
endif1766:
%t124 = load { ptr, i64, i64 }, ptr %a13
store { ptr, i64, i64 } %t124, ptr %a125
store { ptr, i64, i64 } { ptr @.str.1010, i64 5, i64 0 }, ptr %a126
%t127 = call i32 @finch_str_eq(ptr %a125, ptr %a126)
%t128 = icmp ne i32 %t127, 0
br i1 %t128, label %then1771, label %endif1773
then1771:
%t129 = load ptr, ptr %a1
%t130 = call %S.ast.Node @finch.parser.parseMatch(ptr %t129, i1 true)
ret %S.ast.Node %t130
endif1773:
%t131 = load { ptr, i64, i64 }, ptr %a13
store { ptr, i64, i64 } %t131, ptr %a132
store { ptr, i64, i64 } { ptr @.str.1011, i64 1, i64 0 }, ptr %a133
%t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133)
%t135 = icmp ne i32 %t134, 0
br i1 %t135, label %then1774, label %endif1776
then1774:
%t136 = load ptr, ptr %a1
%t137 = call %S.lexer.Token @finch.parser.next(ptr %t136)
%t138 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.1012, i64 5, i64 0 }, ptr %t138
%t139 = load ptr, ptr %a1
%t140 = icmp eq ptr %t139, null
br i1 %t140, label %panic1777, label %ok1778
panic1777:
call void @finch_panic(ptr @.str.1013, i64 727, ptr @.str.1014)
unreachable
ok1778:
%t141 = getelementptr inbounds %S.parser.Parser, ptr %t139, i32 0, i32 2
%t142 = load i64, ptr %t141
%t143 = add i64 %t142, 1
store i64 %t143, ptr %t141
%t144 = load ptr, ptr %a1
%t145 = call i1 @finch.parser.at(ptr %t144, { ptr, i64, i64 } { ptr @.str.1015, i64 1, i64 0 })
br label %logic.from1779
logic.from1779:
br i1 %t145, label %logic.rhs1780, label %logic.end1781
logic.rhs1780:
%t146 = load ptr, ptr %a1
%t147 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t146, i64 1)
store { ptr, i64, i64 } %t147, ptr %a148
store { ptr, i64, i64 } { ptr @.str.1016, i64 1, i64 0 }, ptr %a149
%t150 = call i32 @finch_str_eq(ptr %a148, ptr %a149)
%t151 = icmp ne i32 %t150, 0
br label %logic.rend1782
logic.rend1782:
br label %logic.end1781
logic.end1781:
%t152 = phi i1 [ false, %logic.from1779 ], [ %t151, %logic.rend1782 ]
br i1 %t152, label %then1783, label %endif1785
then1783:
%t153 = load ptr, ptr %a1
%t154 = call %S.lexer.Token @finch.parser.next(ptr %t153)
%t155 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.1017, i64 3, i64 0 }, ptr %t155
br label %endif1785
endif1785:
br label %while.cond1786
while.cond1786:
%t156 = load ptr, ptr %a1
%t157 = call i1 @finch.parser.at(ptr %t156, { ptr, i64, i64 } { ptr @.str.1018, i64 1, i64 0 })
%t158 = xor i1 %t157, true
br i1 %t158, label %while.body1787, label %while.end1788
while.body1787:
%t159 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9
%t160 = getelementptr inbounds { ptr, i64, i64 }, ptr %t159, i32 0, i32 1
%t161 = load ptr, ptr %a1
%t162 = call %S.ast.Node @finch.parser.parseExpr(ptr %t161)
%t163 = load i64, ptr %t160
%t164 = add i64 %t163, 1
call void @finch_arr_reserve(ptr %t159, i64 %t164, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t165 = load ptr, ptr %t159
%t166 = getelementptr inbounds %S.ast.Node, ptr %t165, i64 %t163
store %S.ast.Node %t162, ptr %t166
store i64 %t164, ptr %t160
%t167 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9
%t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1
%t169 = load i64, ptr %t168
%t170 = icmp eq i64 %t169, 1
br label %logic.from1789
logic.from1789:
br i1 %t170, label %logic.rhs1790, label %logic.end1791
logic.rhs1790:
%t171 = load ptr, ptr %a1
%t172 = call i1 @finch.parser.at(ptr %t171, { ptr, i64, i64 } { ptr @.str.1019, i64 1, i64 0 })
br label %logic.rend1792
logic.rend1792:
br label %logic.end1791
logic.end1791:
%t173 = phi i1 [ false, %logic.from1789 ], [ %t172, %logic.rend1792 ]
br i1 %t173, label %then1793, label %endif1795
then1793:
%t174 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.1020, i64 3, i64 0 }, ptr %t174
br label %endif1795
endif1795:
%t175 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0
%t176 = load { ptr, i64, i64 }, ptr %t175
store { ptr, i64, i64 } %t176, ptr %a177
store { ptr, i64, i64 } { ptr @.str.1021, 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 %then1796, label %endif1798
then1796:
%t181 = load ptr, ptr %a1
%t182 = call %S.lexer.Token @finch.parser.expect(ptr %t181, { ptr, i64, i64 } { ptr @.str.1022, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1023, i64 41, i64 0 })
%t183 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9
%t184 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i32 0, i32 1
%t185 = load ptr, ptr %a1
%t186 = call %S.ast.Node @finch.parser.parseExpr(ptr %t185)
%t187 = load i64, ptr %t184
%t188 = add i64 %t187, 1
call void @finch_arr_reserve(ptr %t183, i64 %t188, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t189 = load ptr, ptr %t183
%t190 = getelementptr inbounds %S.ast.Node, ptr %t189, i64 %t187
store %S.ast.Node %t186, ptr %t190
store i64 %t188, ptr %t184
br label %endif1798
endif1798:
%t191 = load ptr, ptr %a1
%t192 = call i1 @finch.parser.accept(ptr %t191, { ptr, i64, i64 } { ptr @.str.1024, i64 1, i64 0 })
%t193 = xor i1 %t192, true
br i1 %t193, label %then1799, label %endif1801
then1799:
br label %while.end1788
endif1801:
br label %while.cond1786
while.end1788:
%t194 = load ptr, ptr %a1
%t195 = icmp eq ptr %t194, null
br i1 %t195, label %panic1802, label %ok1803
panic1802:
call void @finch_panic(ptr @.str.1025, i64 745, ptr @.str.1026)
unreachable
ok1803:
%t196 = getelementptr inbounds %S.parser.Parser, ptr %t194, i32 0, i32 2
%t197 = load i64, ptr %t196
%t198 = sub i64 %t197, 1
store i64 %t198, ptr %t196
%t199 = load ptr, ptr %a1
%t200 = call %S.lexer.Token @finch.parser.expect(ptr %t199, { ptr, i64, i64 } { ptr @.str.1027, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1028, i64 3, i64 0 })
%t201 = load %S.ast.Node, ptr %a7
store %S.ast.Node %t201, ptr %a202
call void @finch.copy.S_ast_Node(ptr %a203, ptr %a202)
%t204 = load %S.ast.Node, ptr %a203
ret %S.ast.Node %t204
endif1776:
%t205 = load { ptr, i64, i64 }, ptr %a13
store { ptr, i64, i64 } %t205, ptr %a206
store { ptr, i64, i64 } { ptr @.str.1029, i64 5, i64 0 }, ptr %a207
%t208 = call i32 @finch_str_eq(ptr %a206, ptr %a207)
%t209 = icmp ne i32 %t208, 0
br i1 %t209, label %then1804, label %endif1806
then1804:
%t210 = load ptr, ptr %a1
%t211 = call %S.lexer.Token @finch.parser.next(ptr %t210)
%t212 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1
%t213 = load { ptr, i64, i64 }, ptr %t212
%t214 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 1
store { ptr, i64, i64 } %t213, ptr %a215
call void @finch_str_copy(ptr %a216, ptr %a215)
%t217 = load { ptr, i64, i64 }, ptr %a216
store { ptr, i64, i64 } %t217, ptr %t214
%t218 = load ptr, ptr %a1
%t219 = call i1 @finch.parser.at(ptr %t218, { ptr, i64, i64 } { ptr @.str.1030, i64 1, i64 0 })
br label %logic.from1807
logic.from1807:
br i1 %t219, label %logic.rhs1808, label %logic.end1809
logic.rhs1808:
%t220 = load ptr, ptr %a1
%t221 = icmp eq ptr %t220, null
br i1 %t221, label %panic1810, label %ok1811
panic1810:
call void @finch_panic(ptr @.str.1031, i64 752, ptr @.str.1032)
unreachable
ok1811:
%t222 = getelementptr inbounds %S.parser.Parser, ptr %t220, i32 0, i32 0
%t223 = load ptr, ptr %a1
%t224 = icmp eq ptr %t223, null
br i1 %t224, label %panic1812, label %ok1813
panic1812:
call void @finch_panic(ptr @.str.1033, i64 752, ptr @.str.1034)
unreachable
ok1813:
%t225 = getelementptr inbounds %S.parser.Parser, ptr %t223, i32 0, i32 1
%t226 = load i64, ptr %t225
%t227 = sub i64 %t226, 1
%t228 = load { ptr, i64, i64 }, ptr %t222
%t229 = extractvalue { ptr, i64, i64 } %t228, 1
%t230 = icmp uge i64 %t227, %t229
br i1 %t230, label %range1814, label %inrange1815
range1814:
call void @finch_panic_index(ptr @.str.1035, i64 752, i64 %t227, i64 %t229)
unreachable
inrange1815:
%t231 = extractvalue { ptr, i64, i64 } %t228, 0
%t232 = getelementptr inbounds %S.lexer.Token, ptr %t231, i64 %t227
%t233 = getelementptr inbounds %S.lexer.Token, ptr %t232, i32 0, i32 0
%t234 = load { ptr, i64, i64 }, ptr %t233
store { ptr, i64, i64 } %t234, ptr %a235
store { ptr, i64, i64 } { ptr @.str.1036, i64 5, i64 0 }, ptr %a236
%t237 = call i32 @finch_str_eq(ptr %a235, ptr %a236)
%t238 = icmp ne i32 %t237, 0
br label %logic.rend1816
logic.rend1816:
br label %logic.end1809
logic.end1809:
%t239 = phi i1 [ false, %logic.from1807 ], [ %t238, %logic.rend1816 ]
br label %logic.from1817
logic.from1817:
br i1 %t239, label %logic.rhs1818, label %logic.end1819
logic.rhs1818:
%t240 = load ptr, ptr %a1
%t241 = call i1 @finch.parser.genericCallAheadFrom(ptr %t240)
br label %logic.rend1820
logic.rend1820:
br label %logic.end1819
logic.end1819:
%t242 = phi i1 [ false, %logic.from1817 ], [ %t241, %logic.rend1820 ]
br i1 %t242, label %then1821, label %endif1823
then1821:
%t243 = load ptr, ptr %a1
%t244 = call %S.lexer.Token @finch.parser.next(ptr %t243)
%t245 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1037, i64 5, i64 0 }, 0
%t246 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 5
store %S.ast.Type %t245, ptr %t246
br label %while.cond1824
while.cond1824:
br label %while.body1825
while.body1825:
%t247 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 5
%t248 = getelementptr inbounds %S.ast.Type, ptr %t247, i32 0, i32 1
%t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i32 0, i32 1
%t250 = load ptr, ptr %a1
%t251 = call %S.ast.Type @finch.parser.parseType(ptr %t250)
%t252 = load i64, ptr %t249
%t253 = add i64 %t252, 1
call void @finch_arr_reserve(ptr %t248, i64 %t253, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64))
%t254 = load ptr, ptr %t248
%t255 = getelementptr inbounds %S.ast.Type, ptr %t254, i64 %t252
store %S.ast.Type %t251, ptr %t255
store i64 %t253, ptr %t249
%t256 = load ptr, ptr %a1
%t257 = call i1 @finch.parser.accept(ptr %t256, { ptr, i64, i64 } { ptr @.str.1038, i64 1, i64 0 })
%t258 = xor i1 %t257, true
br i1 %t258, label %then1827, label %endif1829
then1827:
br label %while.end1826
endif1829:
br label %while.cond1824
while.end1826:
%t259 = load ptr, ptr %a1
%t260 = call %S.lexer.Token @finch.parser.expect(ptr %t259, { ptr, i64, i64 } { ptr @.str.1039, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1040, i64 28, i64 0 })
%t261 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.1041, i64 4, i64 0 }, ptr %t261
%t262 = load ptr, ptr %a1
call void @finch.parser.parseArgs(ptr %t262, ptr %a7)
%t263 = load %S.ast.Node, ptr %a7
store %S.ast.Node %t263, ptr %a264
call void @finch.copy.S_ast_Node(ptr %a265, ptr %a264)
%t266 = load %S.ast.Node, ptr %a265
ret %S.ast.Node %t266
endif1823:
%t267 = load ptr, ptr %a1
%t268 = call i1 @finch.parser.at(ptr %t267, { ptr, i64, i64 } { ptr @.str.1042, i64 1, i64 0 })
br label %logic.from1830
logic.from1830:
br i1 %t268, label %logic.rhs1831, label %logic.end1832
logic.rhs1831:
%t269 = load ptr, ptr %a1
%t270 = call %S.lexer.Token @finch.parser.cur(ptr %t269)
%t271 = extractvalue %S.lexer.Token %t270, 4
%t272 = xor i1 %t271, true
br label %logic.rend1833
logic.rend1833:
br label %logic.end1832
logic.end1832:
%t273 = phi i1 [ false, %logic.from1830 ], [ %t272, %logic.rend1833 ]
br i1 %t273, label %then1834, label %endif1836
then1834:
%t274 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.1043, i64 4, i64 0 }, ptr %t274
%t275 = load ptr, ptr %a1
call void @finch.parser.parseArgs(ptr %t275, ptr %a7)
%t276 = load %S.ast.Node, ptr %a7
store %S.ast.Node %t276, ptr %a277
call void @finch.copy.S_ast_Node(ptr %a278, ptr %a277)
%t279 = load %S.ast.Node, ptr %a278
ret %S.ast.Node %t279
endif1836:
%t280 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.1044, i64 3, i64 0 }, ptr %t280
%t281 = load %S.ast.Node, ptr %a7
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
ret %S.ast.Node %t284
endif1806:
%t285 = load ptr, ptr %a1
%t286 = load %S.lexer.Token, ptr %a4
%t287 = load %S.lexer.Token, ptr %a4
%t288 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t287)
store { ptr, i64, i64 } { ptr @.str.1045, i64 11, i64 0 }, ptr %a290
store { ptr, i64, i64 } %t288, ptr %a291
call void @finch_str_concat(ptr %a289, ptr %a290, ptr %a291)
%t292 = load { ptr, i64, i64 }, ptr %a289
store { ptr, i64, i64 } %t292, ptr %a294
store { ptr, i64, i64 } { ptr @.str.1046, i64 19, i64 0 }, ptr %a295
call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295)
%t296 = load { ptr, i64, i64 }, ptr %a293
call void @finch.parser.fail(ptr %t285, %S.lexer.Token %t286, { ptr, i64, i64 } %t296)
%t297 = load %S.ast.Node, ptr %a7
store %S.ast.Node %t297, ptr %a298
call void @finch.copy.S_ast_Node(ptr %a299, ptr %a298)
%t300 = load %S.ast.Node, ptr %a299
ret %S.ast.Node %t300
}
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)
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
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.1048, i64 1, i64 0 }, ptr %a5
store { ptr, i64, i64 } { ptr @.str.1049, 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.1051, i64 1, i64 0 }, ptr %a10
store { ptr, i64, i64 } { ptr @.str.1052, 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 } %t12, ptr %a13
store { ptr, i64, i64 } { ptr @.str.1054, i64 1, i64 0 }, ptr %a15
store { ptr, i64, i64 } { ptr @.str.1055, i64 1, i64 0 }, ptr %a16
call void @finch_str_replace(ptr %a14, ptr %a13, ptr %a15, ptr %a16)
%t17 = load { ptr, i64, i64 }, ptr %a14
ret { ptr, i64, i64 } %t17
}
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
%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
%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
%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
%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
%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
%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
%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
%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
%a104 = alloca { ptr, i64, i64 }, align 16
%a105 = alloca { ptr, i64, i64 }, align 16
%a106 = 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 %panic1837, label %ok1838
panic1837:
call void @finch_panic(ptr @.str.1056, i64 195, ptr @.str.1057)
unreachable
ok1838:
%t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 26
%t12 = load i1, ptr %t11
%t13 = xor i1 %t12, true
br i1 %t13, label %then1839, label %endif1841
then1839:
ret void
endif1841:
%t14 = load ptr, ptr %a1
%t15 = icmp eq ptr %t14, null
br i1 %t15, label %panic1842, label %ok1843
panic1842:
call void @finch_panic(ptr @.str.1058, i64 198, ptr @.str.1059)
unreachable
ok1843:
%t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 27
%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 %panic1844, label %ok1845
panic1844:
call void @finch_panic(ptr @.str.1061, i64 198, ptr @.str.1062)
unreachable
ok1845:
%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 %range1846, label %inrange1847
range1846:
call void @finch_panic_index(ptr @.str.1063, i64 198, i64 %t22, i64 %t24)
unreachable
inrange1847:
%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.1060, 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.1064, i64 1, 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.ast.Node, ptr %a2, i32 0, i32 11
%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 } %t36, ptr %a42
store { ptr, i64, i64 } %t40, ptr %a43
call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43)
%t44 = load { ptr, i64, i64 }, ptr %a41
store { ptr, i64, i64 } %t44, ptr %a46
store { ptr, i64, i64 } { ptr @.str.1065, i64 1, i64 0 }, ptr %a47
call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47)
%t48 = load { ptr, i64, i64 }, ptr %a45
%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)
%t55 = load { ptr, i64, i64 }, ptr %a52
store { ptr, i64, i64 } %t55, ptr %a57
store { ptr, i64, i64 } { ptr @.str.1066, i64 1, i64 0 }, ptr %a58
call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58)
%t59 = load { ptr, i64, i64 }, ptr %a56
%t60 = load i64, ptr %a4
call void @finch_str_from_int(ptr %a61, i64 %t60)
%t62 = load { ptr, i64, i64 }, ptr %a61
store { ptr, i64, i64 } %t59, 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.1067, i64 1, 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 %a6
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)
%t75 = load { ptr, i64, i64 }, ptr %a72
store { ptr, i64, i64 } %t75, ptr %a77
store { ptr, i64, i64 } { ptr @.str.1068, i64 1, i64 0 }, ptr %a78
call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78)
%t79 = load { ptr, i64, i64 }, ptr %a76
%t80 = load i64, ptr %a7
call void @finch_str_from_int(ptr %a81, i64 %t80)
%t82 = load { ptr, i64, i64 }, ptr %a81
store { ptr, i64, i64 } %t79, ptr %a84
store { ptr, i64, i64 } %t82, ptr %a85
call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85)
%t86 = load { ptr, i64, i64 }, ptr %a83
store { ptr, i64, i64 } %t86, ptr %a88
store { ptr, i64, i64 } { ptr @.str.1069, i64 1, i64 0 }, ptr %a89
call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89)
%t90 = load { ptr, i64, i64 }, ptr %a87
%t91 = load i64, ptr %a8
call void @finch_str_from_int(ptr %a92, i64 %t91)
%t93 = load { ptr, i64, i64 }, ptr %a92
store { ptr, i64, i64 } %t90, ptr %a95
store { ptr, i64, i64 } %t93, ptr %a96
call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96)
%t97 = load { ptr, i64, i64 }, ptr %a94
store { ptr, i64, i64 } %t97, ptr %a99
store { ptr, i64, i64 } { ptr @.str.1070, i64 1, i64 0 }, ptr %a100
call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100)
%t101 = load { ptr, i64, i64 }, ptr %a98
%t102 = load { ptr, i64, i64 }, ptr %a5
%t103 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t102)
store { ptr, i64, i64 } %t101, ptr %a105
store { ptr, i64, i64 } %t103, ptr %a106
call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106)
%t107 = load { ptr, i64, i64 }, ptr %a104
%t108 = load i64, ptr %t17
%t109 = add i64 %t108, 1
call void @finch_arr_reserve(ptr %t16, i64 %t109, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t110 = load ptr, ptr %t16
%t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i64 %t108
store { ptr, i64, i64 } %t107, ptr %t111
store i64 %t109, 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
%a31 = alloca { ptr, i64, i64 }, align 16
%a32 = alloca { ptr, i64, i64 }, align 16
%a33 = 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
%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
%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
%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
%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
%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
%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
%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
%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
%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
%a136 = 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.cond1848
for.cond1848:
%t7 = load i64, ptr %a6
%t8 = icmp slt i64 %t7, %t5
br i1 %t8, label %for.body1849, label %for.end1851
for.body1849:
%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 %range1852, label %inrange1853
range1852:
call void @finch_panic_index(ptr @.str.1071, i64 205, i64 %t11, i64 %t13)
unreachable
inrange1853:
%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.1072, 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.gen.FnSig, ptr %a1, i32 0, i32 14
%t24 = load i64, ptr %a6
%t25 = load { ptr, i64, i64 }, ptr %t23
%t26 = extractvalue { ptr, i64, i64 } %t25, 1
%t27 = icmp uge i64 %t24, %t26
br i1 %t27, label %range1854, label %inrange1855
range1854:
call void @finch_panic_index(ptr @.str.1073, i64 205, i64 %t24, i64 %t26)
unreachable
inrange1855:
%t28 = extractvalue { ptr, i64, i64 } %t25, 0
%t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t24
%t30 = load { ptr, i64, i64 }, ptr %t29
store { ptr, i64, i64 } %t22, 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 %t9
%t36 = add i64 %t35, 1
call void @finch_arr_reserve(ptr %a2, i64 %t36, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t37 = load ptr, ptr %a2
%t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 %t35
store { ptr, i64, i64 } %t34, ptr %t38
store i64 %t36, ptr %t9
br label %for.step1850
for.step1850:
%t39 = load i64, ptr %a6
%t40 = add i64 %t39, 1
store i64 %t40, ptr %a6
br label %for.cond1848
for.end1851:
%t41 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 1
%t42 = load { ptr, i64, i64 }, ptr %t41
store { ptr, i64, i64 } %t42, ptr %a43
call void @finch_str_copy(ptr %a44, ptr %a43)
%t45 = load { ptr, i64, i64 }, ptr %a44
store { ptr, i64, i64 } %t45, ptr %a46
%t47 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 2
%t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i32 0, i32 1
%t49 = load i64, ptr %t48
%t50 = icmp sgt i64 %t49, 0
br i1 %t50, label %then1856, label %endif1858
then1856:
%t51 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 2
%t52 = load { ptr, i64, i64 }, ptr %t51
store { ptr, i64, i64 } %t52, ptr %a54
store { ptr, i64, i64 } { ptr @.str.1074, i64 1, i64 0 }, ptr %a55
call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55)
%t56 = load { ptr, i64, i64 }, ptr %a53
%t57 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 1
%t58 = load { ptr, i64, i64 }, ptr %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)
%t62 = load { ptr, i64, i64 }, ptr %a59
store { ptr, i64, i64 } %t62, ptr %a46
br label %endif1858
endif1858:
%t63 = load { ptr, i64, i64 }, ptr %a46
store { ptr, i64, i64 } { ptr @.str.1075, i64 3, 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.1076, i64 1, i64 0 }, ptr %a70
call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70)
%t71 = load { ptr, i64, i64 }, ptr %a68
%t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.1077, i64 2, i64 0 }, ptr %a73
call void @finch_str_join(ptr %a74, ptr %a2, ptr %a73)
%t75 = load { ptr, i64, i64 }, ptr %a74
store { ptr, i64, i64 } %t71, 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.1078, i64 1, 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 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 9
%t86 = load i1, ptr %t85
br i1 %t86, label %then1859, label %else1860
then1859:
%t87 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12
%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.1079, i64 4, i64 0 }, ptr %a91
%t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91)
%t93 = icmp ne i32 %t92, 0
br i1 %t93, label %then1862, label %else1863
then1862:
%t94 = load { ptr, i64, i64 }, ptr %a84
store { ptr, i64, i64 } %t94, ptr %a96
store { ptr, i64, i64 } { ptr @.str.1080, i64 5, i64 0 }, ptr %a97
call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97)
%t98 = load { ptr, i64, i64 }, ptr %a95
store { ptr, i64, i64 } %t98, ptr %a84
br label %endif1864
else1863:
%t99 = load { ptr, i64, i64 }, ptr %a84
store { ptr, i64, i64 } %t99, ptr %a101
store { ptr, i64, i64 } { ptr @.str.1081, i64 4, i64 0 }, ptr %a102
call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102)
%t103 = load { ptr, i64, i64 }, ptr %a100
%t104 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12
%t105 = load %S.ast.Type, ptr %t104
%t106 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %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)
%t110 = load { ptr, i64, i64 }, ptr %a107
store { ptr, i64, i64 } %t110, ptr %a112
store { ptr, i64, i64 } { ptr @.str.1082, i64 1, i64 0 }, ptr %a113
call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113)
%t114 = load { ptr, i64, i64 }, ptr %a111
store { ptr, i64, i64 } %t114, ptr %a84
br label %endif1864
endif1864:
br label %endif1861
else1860:
%t115 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12
%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.1083, i64 4, i64 0 }, ptr %a119
%t120 = call i32 @finch_str_eq(ptr %a118, ptr %a119)
%t121 = icmp eq i32 %t120, 0
br i1 %t121, label %then1865, label %endif1867
then1865:
%t122 = load { ptr, i64, i64 }, ptr %a84
store { ptr, i64, i64 } %t122, ptr %a124
store { ptr, i64, i64 } { ptr @.str.1084, i64 4, i64 0 }, ptr %a125
call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125)
%t126 = load { ptr, i64, i64 }, ptr %a123
%t127 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12
%t128 = load %S.ast.Type, ptr %t127
%t129 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t128)
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)
%t133 = load { ptr, i64, i64 }, ptr %a130
store { ptr, i64, i64 } %t133, ptr %a84
br label %endif1867
endif1867:
br label %endif1861
endif1861:
%t134 = load { ptr, i64, i64 }, ptr %a84
store { ptr, i64, i64 } %t134, ptr %a135
call void @finch_str_copy(ptr %a136, ptr %a135)
%t137 = load { ptr, i64, i64 }, ptr %a136
ret { ptr, i64, i64 } %t137
}
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
%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
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 %panic1868, label %ok1869
panic1868:
call void @finch_panic(ptr @.str.1085, i64 226, ptr @.str.1086)
unreachable
ok1869:
%t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 26
%t7 = load i1, ptr %t6
%t8 = xor i1 %t7, true
br i1 %t8, label %then1870, label %endif1872
then1870:
ret void
endif1872:
%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.1087, 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 %then1873, label %endif1875
then1873:
%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 %endif1875
endif1875:
%t21 = load ptr, ptr %a1
%t22 = icmp eq ptr %t21, null
br i1 %t22, label %panic1876, label %ok1877
panic1876:
call void @finch_panic(ptr @.str.1088, i64 233, ptr @.str.1089)
unreachable
ok1877:
%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 %range1878, label %inrange1879
range1878:
call void @finch_panic_index(ptr @.str.1090, i64 233, i64 %t25, i64 %t27)
unreachable
inrange1879:
%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 %range1880, label %inrange1881
range1880:
call void @finch_panic_index(ptr @.str.1091, i64 233, i64 %t33, i64 %t35)
unreachable
inrange1881:
%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.from1882
logic.from1882:
br i1 %t53, label %logic.rhs1883, label %logic.end1884
logic.rhs1883:
%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.rend1885
logic.rend1885:
br label %logic.end1884
logic.end1884:
%t58 = phi i1 [ false, %logic.from1882 ], [ %t57, %logic.rend1885 ]
br i1 %t58, label %then1886, label %endif1888
then1886:
%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
store { ptr, i64, i64 } %t63, ptr %a49
br label %endif1888
endif1888:
%t64 = load ptr, ptr %a1
%t65 = load %S.ast.Node, ptr %a2
%t66 = load i64, ptr %a11
%t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %a49, i32 0, i32 1
%t68 = load i64, ptr %t67
%t69 = load %S.gen.FnSig, ptr %a3
%t70 = call { ptr, i64, i64 } @finch.gen.sigText(%S.gen.FnSig %t69)
store { ptr, i64, i64 } { ptr @.str.1092, i64 9, i64 0 }, ptr %a72
store { ptr, i64, i64 } %t70, ptr %a73
call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73)
%t74 = load { ptr, i64, i64 }, ptr %a71
store { ptr, i64, i64 } %t74, ptr %a76
store { ptr, i64, i64 } { ptr @.str.1093, i64 4, i64 0 }, ptr %a77
call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77)
%t78 = load { ptr, i64, i64 }, ptr %a75
%t79 = load ptr, ptr %a1
%t80 = icmp eq ptr %t79, null
br i1 %t80, label %panic1889, label %ok1890
panic1889:
call void @finch_panic(ptr @.str.1094, i64 238, ptr @.str.1095)
unreachable
ok1890:
%t81 = getelementptr inbounds %S.gen.Gen, ptr %t79, i32 0, i32 1
%t82 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 13
%t83 = load i64, ptr %t82
%t84 = load { ptr, i64, i64 }, ptr %t81
%t85 = extractvalue { ptr, i64, i64 } %t84, 1
%t86 = icmp uge i64 %t83, %t85
br i1 %t86, label %range1891, label %inrange1892
range1891:
call void @finch_panic_index(ptr @.str.1096, i64 238, i64 %t83, i64 %t85)
unreachable
inrange1892:
%t87 = extractvalue { ptr, i64, i64 } %t84, 0
%t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 %t83
%t89 = load { ptr, i64, i64 }, ptr %t88
%t90 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 11
%t91 = load i64, ptr %t90
%t92 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 12
%t93 = load i64, ptr %t92
%t94 = add i64 %t93, 3
call void @finch.gen.noteRef(ptr %t64, %S.ast.Node %t65, i64 %t66, i64 %t68, { ptr, i64, i64 } %t78, { ptr, i64, i64 } %t89, i64 %t91, i64 %t94)
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.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.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.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
%a98 = alloca { ptr, i64, i64 }, align 16
%a99 = alloca { ptr, i64, i64 }, align 16
%a100 = 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
%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
%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
%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
%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
%a169 = 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
%a177 = alloca { ptr, i64, i64 }, align 16
%a178 = alloca { ptr, i64, i64 }, align 16
%a179 = 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
%a193 = alloca { ptr, i64, i64 }, align 16
%a194 = alloca { ptr, i64, i64 }, align 16
%a195 = 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
%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
%a225 = alloca i64, align 16
%a233 = alloca %S.gen.Template, align 16
%a234 = alloca %S.gen.Template, align 16
%a236 = alloca %S.gen.Template, align 16
%a258 = alloca %S.ast.Node, align 16
%a259 = alloca %S.ast.Node, align 16
%a261 = alloca %S.ast.Node, 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
%a278 = alloca { ptr, i64, i64 }, align 16
%a279 = alloca { ptr, i64, i64 }, align 16
%a280 = 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
%a292 = alloca { ptr, i64, i64 }, align 16
%a293 = alloca { ptr, i64, i64 }, align 16
%a294 = 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
%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
%a323 = alloca { ptr, i64, i64 }, align 16
%a324 = alloca { ptr, i64, i64 }, align 16
%a325 = 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
%a335 = alloca { ptr, i64, i64 }, align 16
%a336 = alloca { ptr, i64, i64 }, align 16
%a337 = 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
%a347 = 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
%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
%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
%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
%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
%a392 = alloca i64, align 16
%a400 = alloca %S.gen.StructDef, align 16
%a401 = alloca %S.gen.StructDef, align 16
%a403 = alloca %S.gen.StructDef, align 16
%a430 = alloca %S.ast.Node, align 16
%a431 = alloca %S.ast.Node, align 16
%a433 = alloca %S.ast.Node, 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
%a450 = alloca { ptr, i64, i64 }, align 16
%a451 = alloca { ptr, i64, i64 }, align 16
%a452 = 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
%a469 = alloca { ptr, i64, i64 }, align 16
%a470 = alloca { ptr, i64, i64 }, align 16
%a471 = 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
%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
%a485 = 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
%a493 = alloca { ptr, i64, i64 }, align 16
%a494 = alloca { ptr, i64, i64 }, align 16
%a495 = alloca { ptr, i64, i64 }, align 16
%a504 = alloca i64, align 16
%a513 = alloca { ptr, i64, i64 }, align 16
%a514 = alloca { ptr, i64, i64 }, align 16
%a515 = 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
%a527 = alloca { ptr, i64, i64 }, align 16
%a528 = alloca { ptr, i64, i64 }, align 16
%a529 = 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
%a543 = alloca { ptr, i64, i64 }, align 16
%a544 = alloca { ptr, i64, i64 }, align 16
%a545 = 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
%a573 = alloca i64, align 16
%a586 = alloca i64, align 16
%a594 = alloca %S.ast.Node, align 16
%a595 = alloca %S.ast.Node, align 16
%a597 = alloca %S.ast.Node, align 16
%a598 = alloca { ptr, i64, i64 }, align 16
%a599 = alloca { ptr, i64, i64 }, align 16
%a601 = alloca i64, align 16
%a609 = alloca %S.ast.Node, align 16
%a613 = alloca { ptr, i64, i64 }, align 16
%a614 = alloca { ptr, i64, i64 }, align 16
%a623 = alloca { ptr, i64, i64 }, align 16
%a624 = 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
%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
%a670 = alloca { ptr, i64, i64 }, align 16
%a671 = alloca { ptr, i64, i64 }, align 16
%a672 = 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
%a680 = 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
%a687 = alloca { ptr, i64, i64 }, align 16
%a688 = 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
%a698 = alloca { ptr, i64, i64 }, align 16
%a699 = alloca { ptr, i64, i64 }, align 16
%a700 = alloca { ptr, i64, i64 }, align 16
%a703 = alloca { ptr, i64, i64 }, align 16
%a704 = alloca { ptr, i64, i64 }, align 16
%a705 = 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.cond1893
each.cond1893:
%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.body1894, label %each.end1896
each.body1894:
%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 %panic1897, label %ok1898
panic1897:
call void @finch_panic(ptr @.str.1097, i64 244, ptr @.str.1098)
unreachable
ok1898:
%t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 27
%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.1099, 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.step1895
each.step1895:
%t25 = load i64, ptr %a3
%t26 = add i64 %t25, 1
store i64 %t26, ptr %a3
br label %each.cond1893
each.end1896:
%t27 = load ptr, ptr %a1
%t28 = icmp eq ptr %t27, null
br i1 %t28, label %panic1899, label %ok1900
panic1899:
call void @finch_panic(ptr @.str.1100, i64 246, ptr @.str.1101)
unreachable
ok1900:
%t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 14
store i64 0, ptr %a30
br label %each.cond1901
each.cond1901:
%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.body1902, label %each.end1904
each.body1902:
%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 %panic1905, label %ok1906
panic1905:
call void @finch_panic(ptr @.str.1102, i64 247, ptr @.str.1103)
unreachable
ok1906:
%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 %range1907, label %inrange1908
range1907:
call void @finch_panic_index(ptr @.str.1104, i64 247, i64 %t46, i64 %t48)
unreachable
inrange1908:
%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 %range1909, label %inrange1910
range1909:
call void @finch_panic_index(ptr @.str.1105, i64 247, i64 %t54, i64 %t56)
unreachable
inrange1910:
%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 %then1911, label %endif1913
then1911:
br label %each.step1903
endif1913:
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.cond1914
for.cond1914:
%t74 = load i64, ptr %a73
%t75 = icmp slt i64 %t74, %t72
br i1 %t75, label %for.body1915, label %for.end1917
for.body1915:
%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 %range1918, label %inrange1919
range1918:
call void @finch_panic_index(ptr @.str.1106, i64 253, i64 %t78, i64 %t80)
unreachable
inrange1919:
%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.1107, i64 1, i64 0 }, ptr %a88
call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88)
%t89 = load { ptr, i64, i64 }, ptr %a86
%t90 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 14
%t91 = load i64, ptr %a73
%t92 = load { ptr, i64, i64 }, ptr %t90
%t93 = extractvalue { ptr, i64, i64 } %t92, 1
%t94 = icmp uge i64 %t91, %t93
br i1 %t94, label %range1920, label %inrange1921
range1920:
call void @finch_panic_index(ptr @.str.1108, i64 253, i64 %t91, i64 %t93)
unreachable
inrange1921:
%t95 = extractvalue { ptr, i64, i64 } %t92, 0
%t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i64 %t91
%t97 = load { ptr, i64, i64 }, ptr %t96
store { ptr, i64, i64 } %t89, ptr %a99
store { ptr, i64, i64 } %t97, ptr %a100
call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100)
%t101 = load { ptr, i64, i64 }, ptr %a98
%t102 = load i64, ptr %t76
%t103 = add i64 %t102, 1
call void @finch_arr_reserve(ptr %a69, i64 %t103, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t104 = load ptr, ptr %a69
%t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i64 %t102
store { ptr, i64, i64 } %t101, ptr %t105
store i64 %t103, ptr %t76
br label %for.step1916
for.step1916:
%t106 = load i64, ptr %a73
%t107 = add i64 %t106, 1
store i64 %t107, ptr %a73
br label %for.cond1914
for.end1917:
%t108 = load ptr, ptr %a1
%t109 = icmp eq ptr %t108, null
br i1 %t109, label %panic1922, label %ok1923
panic1922:
call void @finch_panic(ptr @.str.1109, i64 255, ptr @.str.1110)
unreachable
ok1923:
%t110 = getelementptr inbounds %S.gen.Gen, ptr %t108, i32 0, i32 27
%t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i32 0, i32 1
%t112 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 0
%t113 = load { ptr, i64, i64 }, ptr %t112
store { ptr, i64, i64 } { ptr @.str.1111, i64 3, i64 0 }, ptr %a115
store { ptr, i64, i64 } %t113, ptr %a116
call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116)
%t117 = load { ptr, i64, i64 }, ptr %a114
store { ptr, i64, i64 } %t117, ptr %a119
store { ptr, i64, i64 } { ptr @.str.1112, i64 1, i64 0 }, ptr %a120
call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120)
%t121 = load { ptr, i64, i64 }, ptr %a118
%t122 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 1
%t123 = load { ptr, i64, i64 }, ptr %t122
store { ptr, i64, i64 } %t121, ptr %a125
store { ptr, i64, i64 } %t123, ptr %a126
call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126)
%t127 = load { ptr, i64, i64 }, ptr %a124
store { ptr, i64, i64 } %t127, ptr %a129
store { ptr, i64, i64 } { ptr @.str.1113, i64 1, i64 0 }, ptr %a130
call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130)
%t131 = load { ptr, i64, i64 }, ptr %a128
%t132 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 2
%t133 = load { ptr, i64, i64 }, ptr %t132
store { ptr, i64, i64 } %t131, 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
store { ptr, i64, i64 } %t137, ptr %a139
store { ptr, i64, i64 } { ptr @.str.1114, i64 1, i64 0 }, ptr %a140
call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140)
%t141 = load { ptr, i64, i64 }, ptr %a138
%t142 = load ptr, ptr %a1
%t143 = icmp eq ptr %t142, null
br i1 %t143, label %panic1924, label %ok1925
panic1924:
call void @finch_panic(ptr @.str.1115, i64 255, ptr @.str.1116)
unreachable
ok1925:
%t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 1
%t145 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 13
%t146 = load i64, ptr %t145
%t147 = load { ptr, i64, i64 }, ptr %t144
%t148 = extractvalue { ptr, i64, i64 } %t147, 1
%t149 = icmp uge i64 %t146, %t148
br i1 %t149, label %range1926, label %inrange1927
range1926:
call void @finch_panic_index(ptr @.str.1117, i64 255, i64 %t146, i64 %t148)
unreachable
inrange1927:
%t150 = extractvalue { ptr, i64, i64 } %t147, 0
%t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i64 %t146
%t152 = load { ptr, i64, i64 }, ptr %t151
store { ptr, i64, i64 } %t141, ptr %a154
store { ptr, i64, i64 } %t152, ptr %a155
call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155)
%t156 = load { ptr, i64, i64 }, ptr %a153
store { ptr, i64, i64 } %t156, ptr %a158
store { ptr, i64, i64 } { ptr @.str.1118, i64 1, i64 0 }, ptr %a159
call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159)
%t160 = load { ptr, i64, i64 }, ptr %a157
%t161 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 11
%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 } %t160, ptr %a166
store { ptr, i64, i64 } %t164, ptr %a167
call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167)
%t168 = load { ptr, i64, i64 }, ptr %a165
store { ptr, i64, i64 } %t168, ptr %a170
store { ptr, i64, i64 } { ptr @.str.1119, i64 1, i64 0 }, ptr %a171
call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171)
%t172 = load { ptr, i64, i64 }, ptr %a169
%t173 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 12
%t174 = load i64, ptr %t173
call void @finch_str_from_int(ptr %a175, i64 %t174)
%t176 = load { ptr, i64, i64 }, ptr %a175
store { ptr, i64, i64 } %t172, ptr %a178
store { ptr, i64, i64 } %t176, ptr %a179
call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179)
%t180 = load { ptr, i64, i64 }, ptr %a177
store { ptr, i64, i64 } %t180, ptr %a182
store { ptr, i64, i64 } { ptr @.str.1120, i64 1, i64 0 }, ptr %a183
call void @finch_str_concat(ptr %a181, ptr %a182, ptr %a183)
%t184 = load { ptr, i64, i64 }, ptr %a181
%t185 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 14
%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)
%t192 = load { ptr, i64, i64 }, ptr %a189
store { ptr, i64, i64 } %t192, ptr %a194
store { ptr, i64, i64 } { ptr @.str.1121, 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 %S.gen.FnSig, ptr %a41
%t198 = call { ptr, i64, i64 } @finch.gen.sigText(%S.gen.FnSig %t197)
%t199 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t198)
store { ptr, i64, i64 } %t196, ptr %a201
store { ptr, i64, i64 } %t199, ptr %a202
call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202)
%t203 = load { ptr, i64, i64 }, ptr %a200
store { ptr, i64, i64 } %t203, ptr %a205
store { ptr, i64, i64 } { ptr @.str.1122, i64 1, i64 0 }, ptr %a206
call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206)
%t207 = load { ptr, i64, i64 }, ptr %a204
%t208 = getelementptr inbounds { ptr, i64, i64 }, ptr %a69, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.1123, i64 1, i64 0 }, ptr %a209
call void @finch_str_join(ptr %a210, ptr %a69, ptr %a209)
%t211 = load { ptr, i64, i64 }, ptr %a210
store { ptr, i64, i64 } %t207, 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
%t216 = load i64, ptr %t111
%t217 = add i64 %t216, 1
call void @finch_arr_reserve(ptr %t110, i64 %t217, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t218 = load ptr, ptr %t110
%t219 = getelementptr inbounds { ptr, i64, i64 }, ptr %t218, i64 %t216
store { ptr, i64, i64 } %t215, ptr %t219
store i64 %t217, ptr %t111
br label %each.step1903
each.step1903:
%t220 = load i64, ptr %a30
%t221 = add i64 %t220, 1
store i64 %t221, ptr %a30
br label %each.cond1901
each.end1904:
%t222 = load ptr, ptr %a1
%t223 = icmp eq ptr %t222, null
br i1 %t223, label %panic1928, label %ok1929
panic1928:
call void @finch_panic(ptr @.str.1124, i64 257, ptr @.str.1125)
unreachable
ok1929:
%t224 = getelementptr inbounds %S.gen.Gen, ptr %t222, i32 0, i32 16
store i64 0, ptr %a225
br label %each.cond1930
each.cond1930:
%t226 = getelementptr inbounds { ptr, i64, i64 }, ptr %t224, i32 0, i32 1
%t227 = load i64, ptr %t226
%t228 = load i64, ptr %a225
%t229 = icmp slt i64 %t228, %t227
br i1 %t229, label %each.body1931, label %each.end1933
each.body1931:
%t230 = load ptr, ptr %t224
%t231 = getelementptr inbounds %S.gen.Template, ptr %t230, i64 %t228
%t232 = load %S.gen.Template, ptr %t231
store %S.gen.Template %t232, ptr %a233
call void @finch.copy.S_gen_Template(ptr %a234, ptr %a233)
%t235 = load %S.gen.Template, ptr %a234
store %S.gen.Template %t235, ptr %a236
%t237 = getelementptr inbounds %S.gen.Template, ptr %a236, i32 0, i32 6
%t238 = load i1, ptr %t237
br i1 %t238, label %then1934, label %endif1936
then1934:
br label %each.step1932
endif1936:
%t239 = load ptr, ptr %a1
%t240 = icmp eq ptr %t239, null
br i1 %t240, label %panic1937, label %ok1938
panic1937:
call void @finch_panic(ptr @.str.1126, i64 261, ptr @.str.1127)
unreachable
ok1938:
%t241 = getelementptr inbounds %S.gen.Gen, ptr %t239, i32 0, i32 0
%t242 = getelementptr inbounds %S.gen.Template, ptr %a236, i32 0, i32 4
%t243 = load i64, ptr %t242
%t244 = load { ptr, i64, i64 }, ptr %t241
%t245 = extractvalue { ptr, i64, i64 } %t244, 1
%t246 = icmp uge i64 %t243, %t245
br i1 %t246, label %range1939, label %inrange1940
range1939:
call void @finch_panic_index(ptr @.str.1128, i64 261, i64 %t243, i64 %t245)
unreachable
inrange1940:
%t247 = extractvalue { ptr, i64, i64 } %t244, 0
%t248 = getelementptr inbounds %S.ast.Program, ptr %t247, i64 %t243
%t249 = getelementptr inbounds %S.ast.Program, ptr %t248, i32 0, i32 8
%t250 = getelementptr inbounds %S.gen.Template, ptr %a236, i32 0, i32 5
%t251 = load i64, ptr %t250
%t252 = load { ptr, i64, i64 }, ptr %t249
%t253 = extractvalue { ptr, i64, i64 } %t252, 1
%t254 = icmp uge i64 %t251, %t253
br i1 %t254, label %range1941, label %inrange1942
range1941:
call void @finch_panic_index(ptr @.str.1129, i64 261, i64 %t251, i64 %t253)
unreachable
inrange1942:
%t255 = extractvalue { ptr, i64, i64 } %t252, 0
%t256 = getelementptr inbounds %S.ast.Node, ptr %t255, i64 %t251
%t257 = load %S.ast.Node, ptr %t256
store %S.ast.Node %t257, ptr %a258
call void @finch.copy.S_ast_Node(ptr %a259, ptr %a258)
%t260 = load %S.ast.Node, ptr %a259
store %S.ast.Node %t260, ptr %a261
%t262 = load ptr, ptr %a1
%t263 = icmp eq ptr %t262, null
br i1 %t263, label %panic1943, label %ok1944
panic1943:
call void @finch_panic(ptr @.str.1130, i64 262, ptr @.str.1131)
unreachable
ok1944:
%t264 = getelementptr inbounds %S.gen.Gen, ptr %t262, i32 0, i32 27
%t265 = getelementptr inbounds { ptr, i64, i64 }, ptr %t264, i32 0, i32 1
%t266 = getelementptr inbounds %S.gen.Template, ptr %a236, i32 0, i32 0
%t267 = load { ptr, i64, i64 }, ptr %t266
store { ptr, i64, i64 } { ptr @.str.1132, i64 3, i64 0 }, ptr %a269
store { ptr, i64, i64 } %t267, ptr %a270
call void @finch_str_concat(ptr %a268, ptr %a269, ptr %a270)
%t271 = load { ptr, i64, i64 }, ptr %a268
store { ptr, i64, i64 } %t271, ptr %a273
store { ptr, i64, i64 } { ptr @.str.1133, i64 1, i64 0 }, ptr %a274
call void @finch_str_concat(ptr %a272, ptr %a273, ptr %a274)
%t275 = load { ptr, i64, i64 }, ptr %a272
%t276 = getelementptr inbounds %S.gen.Template, ptr %a236, i32 0, i32 1
%t277 = load { ptr, i64, i64 }, ptr %t276
store { ptr, i64, i64 } %t275, ptr %a279
store { ptr, i64, i64 } %t277, ptr %a280
call void @finch_str_concat(ptr %a278, ptr %a279, ptr %a280)
%t281 = load { ptr, i64, i64 }, ptr %a278
store { ptr, i64, i64 } %t281, ptr %a283
store { ptr, i64, i64 } { ptr @.str.1134, i64 1, 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.gen.Template, ptr %a236, i32 0, i32 2
%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)
%t291 = load { ptr, i64, i64 }, ptr %a288
store { ptr, i64, i64 } %t291, ptr %a293
store { ptr, i64, i64 } { ptr @.str.1135, i64 1, i64 0 }, ptr %a294
call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294)
%t295 = load { ptr, i64, i64 }, ptr %a292
%t296 = load ptr, ptr %a1
%t297 = icmp eq ptr %t296, null
br i1 %t297, label %panic1945, label %ok1946
panic1945:
call void @finch_panic(ptr @.str.1136, i64 262, ptr @.str.1137)
unreachable
ok1946:
%t298 = getelementptr inbounds %S.gen.Gen, ptr %t296, i32 0, i32 1
%t299 = getelementptr inbounds %S.ast.Node, ptr %a261, i32 0, i32 13
%t300 = load i64, ptr %t299
%t301 = load { ptr, i64, i64 }, ptr %t298
%t302 = extractvalue { ptr, i64, i64 } %t301, 1
%t303 = icmp uge i64 %t300, %t302
br i1 %t303, label %range1947, label %inrange1948
range1947:
call void @finch_panic_index(ptr @.str.1138, i64 262, i64 %t300, i64 %t302)
unreachable
inrange1948:
%t304 = extractvalue { ptr, i64, i64 } %t301, 0
%t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %t304, i64 %t300
%t306 = load { ptr, i64, i64 }, ptr %t305
store { ptr, i64, i64 } %t295, 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.1139, i64 1, i64 0 }, ptr %a313
call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313)
%t314 = load { ptr, i64, i64 }, ptr %a311
%t315 = getelementptr inbounds %S.ast.Node, ptr %a261, i32 0, i32 11
%t316 = load i64, ptr %t315
call void @finch_str_from_int(ptr %a317, i64 %t316)
%t318 = load { ptr, i64, i64 }, ptr %a317
store { ptr, i64, i64 } %t314, ptr %a320
store { ptr, i64, i64 } %t318, ptr %a321
call void @finch_str_concat(ptr %a319, ptr %a320, ptr %a321)
%t322 = load { ptr, i64, i64 }, ptr %a319
store { ptr, i64, i64 } %t322, ptr %a324
store { ptr, i64, i64 } { ptr @.str.1140, i64 1, i64 0 }, ptr %a325
call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325)
%t326 = load { ptr, i64, i64 }, ptr %a323
%t327 = getelementptr inbounds %S.ast.Node, ptr %a261, i32 0, i32 12
%t328 = load i64, ptr %t327
call void @finch_str_from_int(ptr %a329, i64 %t328)
%t330 = load { ptr, i64, i64 }, ptr %a329
store { ptr, i64, i64 } %t326, ptr %a332
store { ptr, i64, i64 } %t330, ptr %a333
call void @finch_str_concat(ptr %a331, ptr %a332, ptr %a333)
%t334 = load { ptr, i64, i64 }, ptr %a331
store { ptr, i64, i64 } %t334, ptr %a336
store { ptr, i64, i64 } { ptr @.str.1141, i64 1, i64 0 }, ptr %a337
call void @finch_str_concat(ptr %a335, ptr %a336, ptr %a337)
%t338 = load { ptr, i64, i64 }, ptr %a335
%t339 = getelementptr inbounds %S.ast.Node, ptr %a261, i32 0, i32 14
%t340 = load i64, ptr %t339
call void @finch_str_from_int(ptr %a341, i64 %t340)
%t342 = load { ptr, i64, i64 }, ptr %a341
store { ptr, i64, i64 } %t338, 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.1142, i64 1, i64 0 }, ptr %a349
call void @finch_str_concat(ptr %a347, ptr %a348, ptr %a349)
%t350 = load { ptr, i64, i64 }, ptr %a347
%t351 = getelementptr inbounds %S.gen.Template, ptr %a236, i32 0, i32 1
%t352 = load { ptr, i64, i64 }, ptr %t351
store { ptr, i64, i64 } { ptr @.str.1143, i64 3, 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.1144, i64 1, i64 0 }, ptr %a359
call void @finch_str_concat(ptr %a357, ptr %a358, ptr %a359)
%t360 = load { ptr, i64, i64 }, ptr %a357
%t361 = getelementptr inbounds %S.gen.Template, ptr %a236, i32 0, i32 3
%t362 = getelementptr inbounds { ptr, i64, i64 }, ptr %t361, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.1145, i64 2, i64 0 }, ptr %a363
call void @finch_str_join(ptr %a364, ptr %t361, ptr %a363)
%t365 = load { ptr, i64, i64 }, ptr %a364
store { ptr, i64, i64 } %t360, 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.1146, i64 6, i64 0 }, ptr %a372
call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372)
%t373 = load { ptr, i64, i64 }, ptr %a370
%t374 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t373)
store { ptr, i64, i64 } %t350, ptr %a376
store { ptr, i64, i64 } %t374, ptr %a377
call void @finch_str_concat(ptr %a375, ptr %a376, ptr %a377)
%t378 = load { ptr, i64, i64 }, ptr %a375
store { ptr, i64, i64 } %t378, ptr %a380
store { ptr, i64, i64 } { ptr @.str.1147, i64 1, i64 0 }, ptr %a381
call void @finch_str_concat(ptr %a379, ptr %a380, ptr %a381)
%t382 = load { ptr, i64, i64 }, ptr %a379
%t383 = load i64, ptr %t265
%t384 = add i64 %t383, 1
call void @finch_arr_reserve(ptr %t264, i64 %t384, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t385 = load ptr, ptr %t264
%t386 = getelementptr inbounds { ptr, i64, i64 }, ptr %t385, i64 %t383
store { ptr, i64, i64 } %t382, ptr %t386
store i64 %t384, ptr %t265
br label %each.step1932
each.step1932:
%t387 = load i64, ptr %a225
%t388 = add i64 %t387, 1
store i64 %t388, ptr %a225
br label %each.cond1930
each.end1933:
%t389 = load ptr, ptr %a1
%t390 = icmp eq ptr %t389, null
br i1 %t390, label %panic1949, label %ok1950
panic1949:
call void @finch_panic(ptr @.str.1148, i64 264, ptr @.str.1149)
unreachable
ok1950:
%t391 = getelementptr inbounds %S.gen.Gen, ptr %t389, i32 0, i32 15
store i64 0, ptr %a392
br label %each.cond1951
each.cond1951:
%t393 = getelementptr inbounds { ptr, i64, i64 }, ptr %t391, i32 0, i32 1
%t394 = load i64, ptr %t393
%t395 = load i64, ptr %a392
%t396 = icmp slt i64 %t395, %t394
br i1 %t396, label %each.body1952, label %each.end1954
each.body1952:
%t397 = load ptr, ptr %t391
%t398 = getelementptr inbounds %S.gen.StructDef, ptr %t397, i64 %t395
%t399 = load %S.gen.StructDef, ptr %t398
store %S.gen.StructDef %t399, ptr %a400
call void @finch.copy.S_gen_StructDef(ptr %a401, ptr %a400)
%t402 = load %S.gen.StructDef, ptr %a401
store %S.gen.StructDef %t402, ptr %a403
%t404 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 2
%t405 = load i1, ptr %t404
br label %logic.from1955
logic.from1955:
br i1 %t405, label %logic.end1957, label %logic.rhs1956
logic.rhs1956:
%t406 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 5
%t407 = getelementptr inbounds { ptr, i64, i64 }, ptr %t406, i32 0, i32 1
%t408 = load i64, ptr %t407
%t409 = icmp sgt i64 %t408, 0
br label %logic.rend1958
logic.rend1958:
br label %logic.end1957
logic.end1957:
%t410 = phi i1 [ true, %logic.from1955 ], [ %t409, %logic.rend1958 ]
br i1 %t410, label %then1959, label %endif1961
then1959:
br label %each.step1953
endif1961:
%t411 = load ptr, ptr %a1
%t412 = icmp eq ptr %t411, null
br i1 %t412, label %panic1962, label %ok1963
panic1962:
call void @finch_panic(ptr @.str.1150, i64 268, ptr @.str.1151)
unreachable
ok1963:
%t413 = getelementptr inbounds %S.gen.Gen, ptr %t411, i32 0, i32 0
%t414 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 13
%t415 = load i64, ptr %t414
%t416 = load { ptr, i64, i64 }, ptr %t413
%t417 = extractvalue { ptr, i64, i64 } %t416, 1
%t418 = icmp uge i64 %t415, %t417
br i1 %t418, label %range1964, label %inrange1965
range1964:
call void @finch_panic_index(ptr @.str.1152, i64 268, i64 %t415, i64 %t417)
unreachable
inrange1965:
%t419 = extractvalue { ptr, i64, i64 } %t416, 0
%t420 = getelementptr inbounds %S.ast.Program, ptr %t419, i64 %t415
%t421 = getelementptr inbounds %S.ast.Program, ptr %t420, i32 0, i32 6
%t422 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 14
%t423 = load i64, ptr %t422
%t424 = load { ptr, i64, i64 }, ptr %t421
%t425 = extractvalue { ptr, i64, i64 } %t424, 1
%t426 = icmp uge i64 %t423, %t425
br i1 %t426, label %range1966, label %inrange1967
range1966:
call void @finch_panic_index(ptr @.str.1153, i64 268, i64 %t423, i64 %t425)
unreachable
inrange1967:
%t427 = extractvalue { ptr, i64, i64 } %t424, 0
%t428 = getelementptr inbounds %S.ast.Node, ptr %t427, i64 %t423
%t429 = load %S.ast.Node, ptr %t428
store %S.ast.Node %t429, ptr %a430
call void @finch.copy.S_ast_Node(ptr %a431, ptr %a430)
%t432 = load %S.ast.Node, ptr %a431
store %S.ast.Node %t432, ptr %a433
%t434 = load ptr, ptr %a1
%t435 = icmp eq ptr %t434, null
br i1 %t435, label %panic1968, label %ok1969
panic1968:
call void @finch_panic(ptr @.str.1154, i64 269, ptr @.str.1155)
unreachable
ok1969:
%t436 = getelementptr inbounds %S.gen.Gen, ptr %t434, i32 0, i32 27
%t437 = getelementptr inbounds { ptr, i64, i64 }, ptr %t436, i32 0, i32 1
%t438 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 0
%t439 = load { ptr, i64, i64 }, ptr %t438
store { ptr, i64, i64 } { ptr @.str.1156, 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.1157, i64 1, i64 0 }, ptr %a446
call void @finch_str_concat(ptr %a444, ptr %a445, ptr %a446)
%t447 = load { ptr, i64, i64 }, ptr %a444
%t448 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 1
%t449 = load { ptr, i64, i64 }, ptr %t448
store { ptr, i64, i64 } %t447, ptr %a451
store { ptr, i64, i64 } %t449, ptr %a452
call void @finch_str_concat(ptr %a450, ptr %a451, ptr %a452)
%t453 = load { ptr, i64, i64 }, ptr %a450
store { ptr, i64, i64 } %t453, ptr %a455
store { ptr, i64, i64 } { ptr @.str.1158, i64 1, i64 0 }, ptr %a456
call void @finch_str_concat(ptr %a454, ptr %a455, ptr %a456)
%t457 = load { ptr, i64, i64 }, ptr %a454
%t458 = load ptr, ptr %a1
%t459 = icmp eq ptr %t458, null
br i1 %t459, label %panic1970, label %ok1971
panic1970:
call void @finch_panic(ptr @.str.1159, i64 269, ptr @.str.1160)
unreachable
ok1971:
%t460 = getelementptr inbounds %S.gen.Gen, ptr %t458, i32 0, i32 1
%t461 = getelementptr inbounds %S.ast.Node, ptr %a433, i32 0, i32 13
%t462 = load i64, ptr %t461
%t463 = load { ptr, i64, i64 }, ptr %t460
%t464 = extractvalue { ptr, i64, i64 } %t463, 1
%t465 = icmp uge i64 %t462, %t464
br i1 %t465, label %range1972, label %inrange1973
range1972:
call void @finch_panic_index(ptr @.str.1161, i64 269, i64 %t462, i64 %t464)
unreachable
inrange1973:
%t466 = extractvalue { ptr, i64, i64 } %t463, 0
%t467 = getelementptr inbounds { ptr, i64, i64 }, ptr %t466, i64 %t462
%t468 = load { ptr, i64, i64 }, ptr %t467
store { ptr, i64, i64 } %t457, ptr %a470
store { ptr, i64, i64 } %t468, ptr %a471
call void @finch_str_concat(ptr %a469, ptr %a470, ptr %a471)
%t472 = load { ptr, i64, i64 }, ptr %a469
store { ptr, i64, i64 } %t472, ptr %a474
store { ptr, i64, i64 } { ptr @.str.1162, i64 1, i64 0 }, ptr %a475
call void @finch_str_concat(ptr %a473, ptr %a474, ptr %a475)
%t476 = load { ptr, i64, i64 }, ptr %a473
%t477 = getelementptr inbounds %S.ast.Node, ptr %a433, i32 0, i32 11
%t478 = load i64, ptr %t477
call void @finch_str_from_int(ptr %a479, i64 %t478)
%t480 = load { ptr, i64, i64 }, ptr %a479
store { ptr, i64, i64 } %t476, ptr %a482
store { ptr, i64, i64 } %t480, ptr %a483
call void @finch_str_concat(ptr %a481, ptr %a482, ptr %a483)
%t484 = load { ptr, i64, i64 }, ptr %a481
store { ptr, i64, i64 } %t484, ptr %a486
store { ptr, i64, i64 } { ptr @.str.1163, i64 1, i64 0 }, ptr %a487
call void @finch_str_concat(ptr %a485, ptr %a486, ptr %a487)
%t488 = load { ptr, i64, i64 }, ptr %a485
%t489 = getelementptr inbounds %S.ast.Node, ptr %a433, i32 0, i32 12
%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 } %t488, ptr %a494
store { ptr, i64, i64 } %t492, ptr %a495
call void @finch_str_concat(ptr %a493, ptr %a494, ptr %a495)
%t496 = load { ptr, i64, i64 }, ptr %a493
%t497 = load i64, ptr %t437
%t498 = add i64 %t497, 1
call void @finch_arr_reserve(ptr %t436, i64 %t498, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t499 = load ptr, ptr %t436
%t500 = getelementptr inbounds { ptr, i64, i64 }, ptr %t499, i64 %t497
store { ptr, i64, i64 } %t496, ptr %t500
store i64 %t498, ptr %t437
%t501 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 11
%t502 = getelementptr inbounds { ptr, i64, i64 }, ptr %t501, i32 0, i32 1
%t503 = load i64, ptr %t502
store i64 0, ptr %a504
br label %for.cond1974
for.cond1974:
%t505 = load i64, ptr %a504
%t506 = icmp slt i64 %t505, %t503
br i1 %t506, label %for.body1975, label %for.end1977
for.body1975:
%t507 = load ptr, ptr %a1
%t508 = icmp eq ptr %t507, null
br i1 %t508, label %panic1978, label %ok1979
panic1978:
call void @finch_panic(ptr @.str.1164, i64 271, ptr @.str.1165)
unreachable
ok1979:
%t509 = getelementptr inbounds %S.gen.Gen, ptr %t507, i32 0, i32 27
%t510 = getelementptr inbounds { ptr, i64, i64 }, ptr %t509, i32 0, i32 1
%t511 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 0
%t512 = load { ptr, i64, i64 }, ptr %t511
store { ptr, i64, i64 } { ptr @.str.1166, 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
store { ptr, i64, i64 } %t516, ptr %a518
store { ptr, i64, i64 } { ptr @.str.1167, i64 1, i64 0 }, ptr %a519
call void @finch_str_concat(ptr %a517, ptr %a518, ptr %a519)
%t520 = load { ptr, i64, i64 }, ptr %a517
%t521 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 1
%t522 = load { ptr, i64, i64 }, ptr %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)
%t526 = load { ptr, i64, i64 }, ptr %a523
store { ptr, i64, i64 } %t526, ptr %a528
store { ptr, i64, i64 } { ptr @.str.1168, i64 1, i64 0 }, ptr %a529
call void @finch_str_concat(ptr %a527, ptr %a528, ptr %a529)
%t530 = load { ptr, i64, i64 }, ptr %a527
%t531 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 11
%t532 = load i64, ptr %a504
%t533 = load { ptr, i64, i64 }, ptr %t531
%t534 = extractvalue { ptr, i64, i64 } %t533, 1
%t535 = icmp uge i64 %t532, %t534
br i1 %t535, label %range1980, label %inrange1981
range1980:
call void @finch_panic_index(ptr @.str.1169, i64 271, i64 %t532, i64 %t534)
unreachable
inrange1981:
%t536 = extractvalue { ptr, i64, i64 } %t533, 0
%t537 = getelementptr inbounds { ptr, i64, i64 }, ptr %t536, i64 %t532
%t538 = load { ptr, i64, i64 }, ptr %t537
store { ptr, i64, i64 } %t530, ptr %a540
store { ptr, i64, i64 } %t538, ptr %a541
call void @finch_str_concat(ptr %a539, ptr %a540, ptr %a541)
%t542 = load { ptr, i64, i64 }, ptr %a539
store { ptr, i64, i64 } %t542, ptr %a544
store { ptr, i64, i64 } { ptr @.str.1170, i64 1, i64 0 }, ptr %a545
call void @finch_str_concat(ptr %a543, ptr %a544, ptr %a545)
%t546 = load { ptr, i64, i64 }, ptr %a543
%t547 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 12
%t548 = load i64, ptr %a504
%t549 = load { ptr, i64, i64 }, ptr %t547
%t550 = extractvalue { ptr, i64, i64 } %t549, 1
%t551 = icmp uge i64 %t548, %t550
br i1 %t551, label %range1982, label %inrange1983
range1982:
call void @finch_panic_index(ptr @.str.1171, i64 271, i64 %t548, i64 %t550)
unreachable
inrange1983:
%t552 = extractvalue { ptr, i64, i64 } %t549, 0
%t553 = getelementptr inbounds %S.ast.Type, ptr %t552, i64 %t548
%t554 = load %S.ast.Type, ptr %t553
%t555 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t554)
store { ptr, i64, i64 } %t546, ptr %a557
store { ptr, i64, i64 } %t555, ptr %a558
call void @finch_str_concat(ptr %a556, ptr %a557, ptr %a558)
%t559 = load { ptr, i64, i64 }, ptr %a556
%t560 = load i64, ptr %t510
%t561 = add i64 %t560, 1
call void @finch_arr_reserve(ptr %t509, i64 %t561, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t562 = load ptr, ptr %t509
%t563 = getelementptr inbounds { ptr, i64, i64 }, ptr %t562, i64 %t560
store { ptr, i64, i64 } %t559, ptr %t563
store i64 %t561, ptr %t510
br label %for.step1976
for.step1976:
%t564 = load i64, ptr %a504
%t565 = add i64 %t564, 1
store i64 %t565, ptr %a504
br label %for.cond1974
for.end1977:
br label %each.step1953
each.step1953:
%t566 = load i64, ptr %a392
%t567 = add i64 %t566, 1
store i64 %t567, ptr %a392
br label %each.cond1951
each.end1954:
%t568 = load ptr, ptr %a1
%t569 = icmp eq ptr %t568, null
br i1 %t569, label %panic1984, label %ok1985
panic1984:
call void @finch_panic(ptr @.str.1172, i64 274, ptr @.str.1173)
unreachable
ok1985:
%t570 = getelementptr inbounds %S.gen.Gen, ptr %t568, i32 0, i32 0
%t571 = getelementptr inbounds { ptr, i64, i64 }, ptr %t570, i32 0, i32 1
%t572 = load i64, ptr %t571
store i64 0, ptr %a573
br label %for.cond1986
for.cond1986:
%t574 = load i64, ptr %a573
%t575 = icmp slt i64 %t574, %t572
br i1 %t575, label %for.body1987, label %for.end1989
for.body1987:
%t576 = load ptr, ptr %a1
%t577 = icmp eq ptr %t576, null
br i1 %t577, label %panic1990, label %ok1991
panic1990:
call void @finch_panic(ptr @.str.1174, i64 275, ptr @.str.1175)
unreachable
ok1991:
%t578 = getelementptr inbounds %S.gen.Gen, ptr %t576, i32 0, i32 0
%t579 = load i64, ptr %a573
%t580 = load { ptr, i64, i64 }, ptr %t578
%t581 = extractvalue { ptr, i64, i64 } %t580, 1
%t582 = icmp uge i64 %t579, %t581
br i1 %t582, label %range1992, label %inrange1993
range1992:
call void @finch_panic_index(ptr @.str.1176, i64 275, i64 %t579, i64 %t581)
unreachable
inrange1993:
%t583 = extractvalue { ptr, i64, i64 } %t580, 0
%t584 = getelementptr inbounds %S.ast.Program, ptr %t583, i64 %t579
%t585 = getelementptr inbounds %S.ast.Program, ptr %t584, i32 0, i32 7
store i64 0, ptr %a586
br label %each.cond1994
each.cond1994:
%t587 = getelementptr inbounds { ptr, i64, i64 }, ptr %t585, i32 0, i32 1
%t588 = load i64, ptr %t587
%t589 = load i64, ptr %a586
%t590 = icmp slt i64 %t589, %t588
br i1 %t590, label %each.body1995, label %each.end1997
each.body1995:
%t591 = load ptr, ptr %t585
%t592 = getelementptr inbounds %S.ast.Node, ptr %t591, i64 %t589
%t593 = load %S.ast.Node, ptr %t592
store %S.ast.Node %t593, ptr %a594
call void @finch.copy.S_ast_Node(ptr %a595, ptr %a594)
%t596 = load %S.ast.Node, ptr %a595
store %S.ast.Node %t596, ptr %a597
store { ptr, i64, i64 } { ptr @.str.1177, i64 0, i64 0 }, ptr %a598
store { ptr, i64, i64 } zeroinitializer, ptr %a599
%t600 = getelementptr inbounds %S.ast.Node, ptr %a597, i32 0, i32 9
store i64 0, ptr %a601
br label %each.cond1998
each.cond1998:
%t602 = getelementptr inbounds { ptr, i64, i64 }, ptr %t600, i32 0, i32 1
%t603 = load i64, ptr %t602
%t604 = load i64, ptr %a601
%t605 = icmp slt i64 %t604, %t603
br i1 %t605, label %each.body1999, label %each.end2001
each.body1999:
%t606 = load ptr, ptr %t600
%t607 = getelementptr inbounds %S.ast.Node, ptr %t606, i64 %t604
%t608 = load %S.ast.Node, ptr %t607
store %S.ast.Node %t608, ptr %a609
%t610 = getelementptr inbounds { ptr, i64, i64 }, ptr %a599, i32 0, i32 1
%t611 = getelementptr inbounds %S.ast.Node, ptr %a609, i32 0, i32 1
%t612 = load { ptr, i64, i64 }, ptr %t611
store { ptr, i64, i64 } %t612, ptr %a613
call void @finch_str_copy(ptr %a614, ptr %a613)
%t615 = load { ptr, i64, i64 }, ptr %a614
%t616 = load i64, ptr %t610
%t617 = add i64 %t616, 1
call void @finch_arr_reserve(ptr %a599, i64 %t617, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t618 = load ptr, ptr %a599
%t619 = getelementptr inbounds { ptr, i64, i64 }, ptr %t618, i64 %t616
store { ptr, i64, i64 } %t615, ptr %t619
store i64 %t617, ptr %t610
br label %each.step2000
each.step2000:
%t620 = load i64, ptr %a601
%t621 = add i64 %t620, 1
store i64 %t621, ptr %a601
br label %each.cond1998
each.end2001:
%t622 = getelementptr inbounds { ptr, i64, i64 }, ptr %a599, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.1178, i64 1, i64 0 }, ptr %a623
call void @finch_str_join(ptr %a624, ptr %a599, ptr %a623)
%t625 = load { ptr, i64, i64 }, ptr %a624
store { ptr, i64, i64 } %t625, ptr %a598
%t626 = load ptr, ptr %a1
%t627 = icmp eq ptr %t626, null
br i1 %t627, label %panic2002, label %ok2003
panic2002:
call void @finch_panic(ptr @.str.1179, i64 282, ptr @.str.1180)
unreachable
ok2003:
%t628 = getelementptr inbounds %S.gen.Gen, ptr %t626, i32 0, i32 27
%t629 = getelementptr inbounds { ptr, i64, i64 }, ptr %t628, i32 0, i32 1
%t630 = load ptr, ptr %a1
%t631 = icmp eq ptr %t630, null
br i1 %t631, label %panic2004, label %ok2005
panic2004:
call void @finch_panic(ptr @.str.1182, i64 282, ptr @.str.1183)
unreachable
ok2005:
%t632 = getelementptr inbounds %S.gen.Gen, ptr %t630, i32 0, i32 0
%t633 = load i64, ptr %a573
%t634 = load { ptr, i64, i64 }, ptr %t632
%t635 = extractvalue { ptr, i64, i64 } %t634, 1
%t636 = icmp uge i64 %t633, %t635
br i1 %t636, label %range2006, label %inrange2007
range2006:
call void @finch_panic_index(ptr @.str.1184, i64 282, i64 %t633, i64 %t635)
unreachable
inrange2007:
%t637 = extractvalue { ptr, i64, i64 } %t634, 0
%t638 = getelementptr inbounds %S.ast.Program, ptr %t637, i64 %t633
%t639 = getelementptr inbounds %S.ast.Program, ptr %t638, i32 0, i32 0
%t640 = load { ptr, i64, i64 }, ptr %t639
store { ptr, i64, i64 } { ptr @.str.1181, i64 3, i64 0 }, ptr %a642
store { ptr, i64, i64 } %t640, ptr %a643
call void @finch_str_concat(ptr %a641, ptr %a642, ptr %a643)
%t644 = load { ptr, i64, i64 }, ptr %a641
store { ptr, i64, i64 } %t644, ptr %a646
store { ptr, i64, i64 } { ptr @.str.1185, i64 1, i64 0 }, ptr %a647
call void @finch_str_concat(ptr %a645, ptr %a646, ptr %a647)
%t648 = load { ptr, i64, i64 }, ptr %a645
%t649 = getelementptr inbounds %S.ast.Node, ptr %a597, i32 0, i32 1
%t650 = load { ptr, i64, i64 }, ptr %t649
store { ptr, i64, i64 } %t648, 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.1186, i64 1, i64 0 }, ptr %a657
call void @finch_str_concat(ptr %a655, ptr %a656, ptr %a657)
%t658 = load { ptr, i64, i64 }, ptr %a655
%t659 = load ptr, ptr %a1
%t660 = icmp eq ptr %t659, null
br i1 %t660, label %panic2008, label %ok2009
panic2008:
call void @finch_panic(ptr @.str.1187, i64 282, ptr @.str.1188)
unreachable
ok2009:
%t661 = getelementptr inbounds %S.gen.Gen, ptr %t659, i32 0, i32 1
%t662 = getelementptr inbounds %S.ast.Node, ptr %a597, i32 0, i32 13
%t663 = load i64, ptr %t662
%t664 = load { ptr, i64, i64 }, ptr %t661
%t665 = extractvalue { ptr, i64, i64 } %t664, 1
%t666 = icmp uge i64 %t663, %t665
br i1 %t666, label %range2010, label %inrange2011
range2010:
call void @finch_panic_index(ptr @.str.1189, i64 282, i64 %t663, i64 %t665)
unreachable
inrange2011:
%t667 = extractvalue { ptr, i64, i64 } %t664, 0
%t668 = getelementptr inbounds { ptr, i64, i64 }, ptr %t667, i64 %t663
%t669 = load { ptr, i64, i64 }, ptr %t668
store { ptr, i64, i64 } %t658, ptr %a671
store { ptr, i64, i64 } %t669, ptr %a672
call void @finch_str_concat(ptr %a670, ptr %a671, ptr %a672)
%t673 = load { ptr, i64, i64 }, ptr %a670
store { ptr, i64, i64 } %t673, ptr %a675
store { ptr, i64, i64 } { ptr @.str.1190, i64 1, i64 0 }, ptr %a676
call void @finch_str_concat(ptr %a674, ptr %a675, ptr %a676)
%t677 = load { ptr, i64, i64 }, ptr %a674
%t678 = getelementptr inbounds %S.ast.Node, ptr %a597, i32 0, i32 11
%t679 = load i64, ptr %t678
call void @finch_str_from_int(ptr %a680, i64 %t679)
%t681 = load { ptr, i64, i64 }, ptr %a680
store { ptr, i64, i64 } %t677, ptr %a683
store { ptr, i64, i64 } %t681, ptr %a684
call void @finch_str_concat(ptr %a682, ptr %a683, ptr %a684)
%t685 = load { ptr, i64, i64 }, ptr %a682
store { ptr, i64, i64 } %t685, ptr %a687
store { ptr, i64, i64 } { ptr @.str.1191, i64 1, i64 0 }, ptr %a688
call void @finch_str_concat(ptr %a686, ptr %a687, ptr %a688)
%t689 = load { ptr, i64, i64 }, ptr %a686
%t690 = getelementptr inbounds %S.ast.Node, ptr %a597, i32 0, i32 12
%t691 = load i64, ptr %t690
call void @finch_str_from_int(ptr %a692, i64 %t691)
%t693 = load { ptr, i64, i64 }, ptr %a692
store { ptr, i64, i64 } %t689, ptr %a695
store { ptr, i64, i64 } %t693, ptr %a696
call void @finch_str_concat(ptr %a694, ptr %a695, ptr %a696)
%t697 = load { ptr, i64, i64 }, ptr %a694
store { ptr, i64, i64 } %t697, ptr %a699
store { ptr, i64, i64 } { ptr @.str.1192, i64 1, i64 0 }, ptr %a700
call void @finch_str_concat(ptr %a698, ptr %a699, ptr %a700)
%t701 = load { ptr, i64, i64 }, ptr %a698
%t702 = load { ptr, i64, i64 }, ptr %a598
store { ptr, i64, i64 } %t701, ptr %a704
store { ptr, i64, i64 } %t702, ptr %a705
call void @finch_str_concat(ptr %a703, ptr %a704, ptr %a705)
%t706 = load { ptr, i64, i64 }, ptr %a703
%t707 = load i64, ptr %t629
%t708 = add i64 %t707, 1
call void @finch_arr_reserve(ptr %t628, i64 %t708, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t709 = load ptr, ptr %t628
%t710 = getelementptr inbounds { ptr, i64, i64 }, ptr %t709, i64 %t707
store { ptr, i64, i64 } %t706, ptr %t710
store i64 %t708, ptr %t629
br label %each.step1996
each.step1996:
%t711 = load i64, ptr %a586
%t712 = add i64 %t711, 1
store i64 %t712, ptr %a586
br label %each.cond1994
each.end1997:
br label %for.step1988
for.step1988:
%t713 = load i64, ptr %a573
%t714 = add i64 %t713, 1
store i64 %t714, ptr %a573
br label %for.cond1986
for.end1989:
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
%a40 = alloca { ptr, i64, i64 }, align 16
%a41 = alloca { ptr, i64, i64 }, align 16
%a42 = 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
%a52 = 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
%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
%a69 = alloca { ptr, i64, i64 }, align 16
%a70 = alloca { ptr, i64, i64 }, align 16
%a71 = 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 %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 %panic2012, label %ok2013
panic2012:
call void @finch_panic(ptr @.str.1193, i64 288, ptr @.str.1194)
unreachable
ok2013:
%t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 26
%t7 = load i1, ptr %t6
br label %logic.from2014
logic.from2014:
br i1 %t7, label %logic.rhs2015, label %logic.end2016
logic.rhs2015:
%t8 = load ptr, ptr %a1
%t9 = icmp eq ptr %t8, null
br i1 %t9, label %panic2017, label %ok2018
panic2017:
call void @finch_panic(ptr @.str.1195, i64 288, ptr @.str.1196)
unreachable
ok2018:
%t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 27
%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.rend2019
logic.rend2019:
br label %logic.end2016
logic.end2016:
%t14 = phi i1 [ false, %logic.from2014 ], [ %t13, %logic.rend2019 ]
br i1 %t14, label %then2020, label %endif2022
then2020:
%t15 = load ptr, ptr %a1
%t16 = icmp eq ptr %t15, null
br i1 %t16, label %panic2023, label %ok2024
panic2023:
call void @finch_panic(ptr @.str.1197, i64 289, ptr @.str.1198)
unreachable
ok2024:
%t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 27
%t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.1199, 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.1200, ptr %t24
%t27 = call i32 (ptr, ...) @printf(ptr @.str.1201, i32 %t23, ptr %t26)
%t28 = call i32 (ptr, ...) @printf(ptr @.str.1202)
br label %endif2022
endif2022:
%t29 = load ptr, ptr %a1
%t30 = icmp eq ptr %t29, null
br i1 %t30, label %panic2025, label %ok2026
panic2025:
call void @finch_panic(ptr @.str.1203, i64 291, ptr @.str.1204)
unreachable
ok2026:
%t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 1
%t32 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13
%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 %range2027, label %inrange2028
range2027:
call void @finch_panic_index(ptr @.str.1205, i64 291, i64 %t33, i64 %t35)
unreachable
inrange2028:
%t37 = extractvalue { ptr, i64, i64 } %t34, 0
%t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 %t33
%t39 = load { ptr, i64, i64 }, ptr %t38
store { ptr, i64, i64 } %t39, ptr %a41
store { ptr, i64, i64 } { ptr @.str.1206, i64 1, i64 0 }, ptr %a42
call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42)
%t43 = load { ptr, i64, i64 }, ptr %a40
%t44 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11
%t45 = load i64, ptr %t44
call void @finch_str_from_int(ptr %a46, i64 %t45)
%t47 = load { ptr, i64, i64 }, ptr %a46
store { ptr, i64, i64 } %t43, 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.1207, i64 1, i64 0 }, ptr %a54
call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54)
%t55 = load { ptr, i64, i64 }, ptr %a52
%t56 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12
%t57 = load i64, ptr %t56
call void @finch_str_from_int(ptr %a58, i64 %t57)
%t59 = load { ptr, i64, i64 }, ptr %a58
store { ptr, i64, i64 } %t55, 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.1208, i64 9, i64 0 }, ptr %a66
call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66)
%t67 = load { ptr, i64, i64 }, ptr %a64
%t68 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t67, 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
%t73 = load ptr, ptr %a1
%t74 = icmp eq ptr %t73, null
br i1 %t74, label %panic2029, label %ok2030
panic2029:
call void @finch_panic(ptr @.str.1209, i64 291, ptr @.str.1210)
unreachable
ok2030:
%t75 = getelementptr inbounds %S.gen.Gen, ptr %t73, i32 0, i32 19
%t76 = load { ptr, i64, i64 }, ptr %t75
store { ptr, i64, i64 } %t72, 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
%t81 = extractvalue { ptr, i64, i64 } %t80, 1
%t82 = trunc i64 %t81 to i32
%t83 = extractvalue { ptr, i64, i64 } %t80, 0
%t84 = icmp eq ptr %t83, null
%t85 = select i1 %t84, ptr @.str.1211, ptr %t83
%t86 = call i32 (ptr, ...) @printf(ptr @.str.1212, i32 %t82, ptr %t85)
%t87 = call i32 (ptr, ...) @printf(ptr @.str.1213)
%t88 = trunc i64 1 to i32
%t89 = call i32 @fflush(ptr null)
call void @exit(i32 %t88)
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
%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
%a45 = 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
%t3 = load ptr, ptr %a1
%t4 = icmp eq ptr %t3, null
br i1 %t4, label %panic2031, label %ok2032
panic2031:
call void @finch_panic(ptr @.str.1214, i64 297, ptr @.str.1215)
unreachable
ok2032:
%t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 34
%t6 = load i64, ptr %t5
%t7 = icmp sge i64 %t6, 0
br label %logic.from2033
logic.from2033:
br i1 %t7, label %logic.rhs2034, label %logic.end2035
logic.rhs2034:
%t8 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t8, ptr %a9
store { ptr, i64, i64 } { ptr @.str.1217, 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.rend2036
logic.rend2036:
br label %logic.end2035
logic.end2035:
%t14 = phi i1 [ false, %logic.from2033 ], [ %t13, %logic.rend2036 ]
br i1 %t14, label %then2037, label %endif2039
then2037:
%t15 = load ptr, ptr %a1
%t16 = icmp eq ptr %t15, null
br i1 %t16, label %panic2040, label %ok2041
panic2040:
call void @finch_panic(ptr @.str.1218, i64 298, ptr @.str.1219)
unreachable
ok2041:
%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.1220, 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.1221, i64 8, 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, ptr %a1
%t29 = call i64 @finch.gen.dbgLocation(ptr %t28)
call void @finch_str_from_int(ptr %a30, i64 %t29)
%t31 = load { ptr, i64, i64 }, ptr %a30
store { ptr, i64, i64 } %t27, ptr %a33
store { ptr, i64, i64 } %t31, ptr %a34
call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34)
%t35 = load { ptr, i64, i64 }, ptr %a32
%t36 = load i64, ptr %t18
%t37 = add i64 %t36, 1
call void @finch_arr_reserve(ptr %t17, i64 %t37, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t38 = load ptr, ptr %t17
%t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i64 %t36
store { ptr, i64, i64 } %t35, ptr %t39
store i64 %t37, ptr %t18
ret void
endif2039:
%t40 = load ptr, ptr %a1
%t41 = icmp eq ptr %t40, null
br i1 %t41, label %panic2042, label %ok2043
panic2042:
call void @finch_panic(ptr @.str.1222, i64 301, ptr @.str.1223)
unreachable
ok2043:
%t42 = getelementptr inbounds %S.gen.Gen, ptr %t40, i32 0, i32 4
%t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1
%t44 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.1224, i64 2, 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
%t49 = load i64, ptr %t43
%t50 = add i64 %t49, 1
call void @finch_arr_reserve(ptr %t42, i64 %t50, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t51 = load ptr, ptr %t42
%t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t51, i64 %t49
store { ptr, i64, i64 } %t48, ptr %t52
store i64 %t50, ptr %t43
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
store ptr %p0, ptr %a1
%t2 = load ptr, ptr %a1
%t3 = icmp eq ptr %t2, null
br i1 %t3, label %panic2044, label %ok2045
panic2044:
call void @finch_panic(ptr @.str.1225, i64 305, ptr @.str.1226)
unreachable
ok2045:
%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 %panic2046, label %ok2047
panic2046:
call void @finch_panic(ptr @.str.1228, i64 306, ptr @.str.1229)
unreachable
ok2047:
%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.1227, i64 2, 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
ret { ptr, i64, i64 } %t16
}
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
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 %panic2048, label %ok2049
panic2048:
call void @finch_panic(ptr @.str.1230, i64 310, ptr @.str.1231)
unreachable
ok2049:
%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 %panic2050, label %ok2051
panic2050:
call void @finch_panic(ptr @.str.1232, i64 311, ptr @.str.1233)
unreachable
ok2051:
%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)
%t18 = load { ptr, i64, i64 }, ptr %a15
ret { ptr, i64, i64 } %t18
}
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 %panic2052, label %ok2053
panic2052:
call void @finch_panic(ptr @.str.1234, i64 315, ptr @.str.1235)
unreachable
ok2053:
%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.1236, 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 %panic2054, label %ok2055
panic2054:
call void @finch_panic(ptr @.str.1237, i64 316, ptr @.str.1238)
unreachable
ok2055:
%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
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 %panic2056, label %ok2057
panic2056:
call void @finch_panic(ptr @.str.1239, i64 320, ptr @.str.1240)
unreachable
ok2057:
%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 %then2058, label %endif2060
then2058:
%t8 = load ptr, ptr %a1
%t9 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.1241, 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)
%t14 = load ptr, ptr %a1
%t15 = icmp eq ptr %t14, null
br i1 %t15, label %panic2061, label %ok2062
panic2061:
call void @finch_panic(ptr @.str.1242, i64 322, ptr @.str.1243)
unreachable
ok2062:
%t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 9
store i1 true, ptr %t16
br label %endif2060
endif2060:
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
%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
%a25 = alloca { ptr, i64, i64 }, align 16
%a26 = alloca { ptr, i64, i64 }, align 16
%a27 = 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.1244, 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.1245, i64 9, i64 0 }, ptr %a13
call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13)
%t14 = load { ptr, i64, i64 }, ptr %a11
%t15 = load { ptr, i64, i64 }, ptr %a3
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
store { ptr, i64, i64 } %t19, ptr %a21
store { ptr, i64, i64 } { ptr @.str.1246, i64 9, i64 0 }, ptr %a22
call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22)
%t23 = load { ptr, i64, i64 }, ptr %a20
%t24 = load { ptr, i64, i64 }, ptr %a4
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)
%t28 = load { ptr, i64, i64 }, ptr %a25
call void @finch.gen.emit(ptr %t5, { ptr, i64, i64 } %t28)
%t29 = load ptr, ptr %a1
%t30 = icmp eq ptr %t29, null
br i1 %t30, label %panic2063, label %ok2064
panic2063:
call void @finch_panic(ptr @.str.1247, i64 328, ptr @.str.1248)
unreachable
ok2064:
%t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 9
store i1 true, ptr %t31
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
%a18 = 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
%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
%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
%t3 = load ptr, ptr %a1
%t4 = icmp eq ptr %t3, null
br i1 %t4, label %panic2065, label %ok2066
panic2065:
call void @finch_panic(ptr @.str.1249, i64 332, ptr @.str.1250)
unreachable
ok2066:
%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 %panic2067, label %ok2068
panic2067:
call void @finch_panic(ptr @.str.1252, i64 333, ptr @.str.1253)
unreachable
ok2068:
%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.1251, i64 2, 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 %a18
%t19 = load ptr, ptr %a1
%t20 = icmp eq ptr %t19, null
br i1 %t20, label %panic2069, label %ok2070
panic2069:
call void @finch_panic(ptr @.str.1254, i64 334, ptr @.str.1255)
unreachable
ok2070:
%t21 = getelementptr inbounds %S.gen.Gen, ptr %t19, i32 0, i32 5
%t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1
%t23 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } { ptr @.str.1256, i64 2, i64 0 }, ptr %a25
store { ptr, i64, i64 } %t23, ptr %a26
call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26)
%t27 = load { ptr, i64, i64 }, ptr %a24
store { ptr, i64, i64 } %t27, ptr %a29
store { ptr, i64, i64 } { ptr @.str.1257, i64 10, i64 0 }, ptr %a30
call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30)
%t31 = load { ptr, i64, i64 }, ptr %a28
%t32 = load { ptr, i64, i64 }, ptr %a2
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)
%t36 = load { ptr, i64, i64 }, ptr %a33
store { ptr, i64, i64 } %t36, ptr %a38
store { ptr, i64, i64 } { ptr @.str.1258, i64 10, i64 0 }, ptr %a39
call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39)
%t40 = load { ptr, i64, i64 }, ptr %a37
%t41 = load i64, ptr %t22
%t42 = add i64 %t41, 1
call void @finch_arr_reserve(ptr %t21, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t43 = load ptr, ptr %t21
%t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41
store { ptr, i64, i64 } %t40, ptr %t44
store i64 %t42, ptr %t22
%t45 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t45, ptr %a46
call void @finch_str_copy(ptr %a47, ptr %a46)
%t48 = load { ptr, i64, i64 }, ptr %a47
ret { ptr, i64, i64 } %t48
}
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
%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
%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
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.1259, 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)
%t17 = load { ptr, i64, i64 }, ptr %a14
store { ptr, i64, i64 } %t17, ptr %a19
store { ptr, i64, i64 } { ptr @.str.1260, i64 6, i64 0 }, ptr %a20
call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20)
%t21 = load { ptr, i64, i64 }, ptr %a18
%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
call void @finch.gen.emit(ptr %t7, { ptr, i64, i64 } %t26)
%t27 = load { ptr, i64, i64 }, ptr %a6
store { ptr, i64, i64 } %t27, ptr %a28
call void @finch_str_copy(ptr %a29, ptr %a28)
%t30 = load { ptr, i64, i64 }, ptr %a29
ret { ptr, i64, i64 } %t30
}
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
%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
%a25 = alloca { ptr, i64, i64 }, align 16
%a26 = alloca { ptr, i64, i64 }, align 16
%a27 = 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.1261, 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.1262, i64 1, i64 0 }, ptr %a13
call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13)
%t14 = load { ptr, i64, i64 }, ptr %a11
%t15 = load { ptr, i64, i64 }, ptr %a3
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
store { ptr, i64, i64 } %t19, ptr %a21
store { ptr, i64, i64 } { ptr @.str.1263, i64 6, i64 0 }, ptr %a22
call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22)
%t23 = load { ptr, i64, i64 }, ptr %a20
%t24 = load { ptr, i64, i64 }, ptr %a4
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)
%t28 = load { ptr, i64, i64 }, ptr %a25
call void @finch.gen.emit(ptr %t5, { ptr, i64, i64 } %t28)
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
%a19 = alloca { ptr, i64, i64 }, align 16
%a20 = 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 } %t8, ptr %a9
%t10 = load ptr, ptr %a1
%t11 = load ptr, ptr %a1
%t12 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1
%t13 = load %S.ast.Type, ptr %t12
%t14 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t11, %S.ast.Type %t13)
%t15 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0
%t16 = load { ptr, i64, i64 }, ptr %t15
%t17 = load { ptr, i64, i64 }, ptr %a9
call void @finch.gen.store(ptr %t10, { ptr, i64, i64 } %t14, { ptr, i64, i64 } %t16, { ptr, i64, i64 } %t17)
%t18 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t18, ptr %a19
call void @finch_str_copy(ptr %a20, ptr %a19)
%t21 = load { ptr, i64, i64 }, ptr %a20
ret { ptr, i64, i64 } %t21
}
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
%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 = 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.1264, 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)
%t16 = load { ptr, i64, i64 }, ptr %a13
call void @finch.gen.emit(ptr %t6, { ptr, i64, i64 } %t16)
%t17 = load { ptr, i64, i64 }, ptr %a5
store { ptr, i64, i64 } %t17, ptr %a18
call void @finch_str_copy(ptr %a19, ptr %a18)
%t20 = load { ptr, i64, i64 }, ptr %a19
ret { ptr, i64, i64 } %t20
}
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.cond2071
find.cond2071:
%t9 = load i64, ptr %a8
%t10 = icmp slt i64 %t9, %t6
br i1 %t10, label %find.body2072, label %find.end2075
find.body2072:
%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.hit2073, label %find.next2074
find.hit2073:
store i64 %t9, ptr %a5
br label %find.end2075
find.next2074:
%t17 = add i64 %t9, 1
store i64 %t17, ptr %a8
br label %find.cond2071
find.end2075:
%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.1265, 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.from2076
logic.from2076:
br i1 %t12, label %logic.end2078, label %logic.rhs2077
logic.rhs2077:
%t13 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t13, ptr %a14
store { ptr, i64, i64 } { ptr @.str.1266, 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.rend2079
logic.rend2079:
br label %logic.end2078
logic.end2078:
%t18 = phi i1 [ true, %logic.from2076 ], [ %t17, %logic.rend2079 ]
br label %logic.from2080
logic.from2080:
br i1 %t18, label %logic.end2082, label %logic.rhs2081
logic.rhs2081:
%t19 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t19, ptr %a20
store { ptr, i64, i64 } { ptr @.str.1267, 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.rend2083
logic.rend2083:
br label %logic.end2082
logic.end2082:
%t24 = phi i1 [ true, %logic.from2080 ], [ %t23, %logic.rend2083 ]
br label %logic.from2084
logic.from2084:
br i1 %t24, label %logic.end2086, label %logic.rhs2085
logic.rhs2085:
%t25 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t25, ptr %a26
store { ptr, i64, i64 } { ptr @.str.1268, 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.rend2087
logic.rend2087:
br label %logic.end2086
logic.end2086:
%t30 = phi i1 [ true, %logic.from2084 ], [ %t29, %logic.rend2087 ]
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.1269, 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.from2088
logic.from2088:
br i1 %t12, label %logic.end2090, label %logic.rhs2089
logic.rhs2089:
%t13 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t13, ptr %a14
store { ptr, i64, i64 } { ptr @.str.1270, 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.rend2091
logic.rend2091:
br label %logic.end2090
logic.end2090:
%t18 = phi i1 [ true, %logic.from2088 ], [ %t17, %logic.rend2091 ]
br label %logic.from2092
logic.from2092:
br i1 %t18, label %logic.end2094, label %logic.rhs2093
logic.rhs2093:
%t19 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t19, ptr %a20
store { ptr, i64, i64 } { ptr @.str.1271, 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.rend2095
logic.rend2095:
br label %logic.end2094
logic.end2094:
%t24 = phi i1 [ true, %logic.from2092 ], [ %t23, %logic.rend2095 ]
br label %logic.from2096
logic.from2096:
br i1 %t24, label %logic.end2098, label %logic.rhs2097
logic.rhs2097:
%t25 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t25, ptr %a26
store { ptr, i64, i64 } { ptr @.str.1272, 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.rend2099
logic.rend2099:
br label %logic.end2098
logic.end2098:
%t30 = phi i1 [ true, %logic.from2096 ], [ %t29, %logic.rend2099 ]
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.from2100
logic.from2100:
br i1 %t3, label %logic.end2102, label %logic.rhs2101
logic.rhs2101:
%t4 = load %S.ast.Type, ptr %a1
%t5 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t4)
br label %logic.rend2103
logic.rend2103:
br label %logic.end2102
logic.end2102:
%t6 = phi i1 [ true, %logic.from2100 ], [ %t5, %logic.rend2103 ]
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.1273, 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.from2104
logic.from2104:
br i1 %t7, label %logic.end2106, label %logic.rhs2105
logic.rhs2105:
%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.1274, 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.rend2107
logic.rend2107:
br label %logic.end2106
logic.end2106:
%t14 = phi i1 [ true, %logic.from2104 ], [ %t13, %logic.rend2107 ]
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.from2108
logic.from2108:
br i1 %t3, label %logic.end2110, label %logic.rhs2109
logic.rhs2109:
%t4 = load %S.ast.Type, ptr %a1
%t5 = call i1 @finch.gen.isFloat(%S.ast.Type %t4)
br label %logic.rend2111
logic.rend2111:
br label %logic.end2110
logic.end2110:
%t6 = phi i1 [ true, %logic.from2108 ], [ %t5, %logic.rend2111 ]
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.1275, 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 %then2112, label %endif2114
then2112:
ret i64 1
endif2114:
%t13 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t13, ptr %a14
store { ptr, i64, i64 } { ptr @.str.1276, 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.from2115
logic.from2115:
br i1 %t17, label %logic.end2117, label %logic.rhs2116
logic.rhs2116:
%t18 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t18, ptr %a19
store { ptr, i64, i64 } { ptr @.str.1277, 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.rend2118
logic.rend2118:
br label %logic.end2117
logic.end2117:
%t23 = phi i1 [ true, %logic.from2115 ], [ %t22, %logic.rend2118 ]
br label %logic.from2119
logic.from2119:
br i1 %t23, label %logic.end2121, label %logic.rhs2120
logic.rhs2120:
%t24 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t24, ptr %a25
store { ptr, i64, i64 } { ptr @.str.1278, 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.rend2122
logic.rend2122:
br label %logic.end2121
logic.end2121:
%t29 = phi i1 [ true, %logic.from2119 ], [ %t28, %logic.rend2122 ]
br i1 %t29, label %then2123, label %endif2125
then2123:
ret i64 8
endif2125:
%t30 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t30, ptr %a31
store { ptr, i64, i64 } { ptr @.str.1279, 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.from2126
logic.from2126:
br i1 %t34, label %logic.end2128, label %logic.rhs2127
logic.rhs2127:
%t35 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t35, ptr %a36
store { ptr, i64, i64 } { ptr @.str.1280, 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.rend2129
logic.rend2129:
br label %logic.end2128
logic.end2128:
%t40 = phi i1 [ true, %logic.from2126 ], [ %t39, %logic.rend2129 ]
br i1 %t40, label %then2130, label %endif2132
then2130:
ret i64 16
endif2132:
%t41 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t41, ptr %a42
store { ptr, i64, i64 } { ptr @.str.1281, 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.from2133
logic.from2133:
br i1 %t45, label %logic.end2135, label %logic.rhs2134
logic.rhs2134:
%t46 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t46, ptr %a47
store { ptr, i64, i64 } { ptr @.str.1282, 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.rend2136
logic.rend2136:
br label %logic.end2135
logic.end2135:
%t51 = phi i1 [ true, %logic.from2133 ], [ %t50, %logic.rend2136 ]
br label %logic.from2137
logic.from2137:
br i1 %t51, label %logic.end2139, label %logic.rhs2138
logic.rhs2138:
%t52 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t52, ptr %a53
store { ptr, i64, i64 } { ptr @.str.1283, 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.rend2140
logic.rend2140:
br label %logic.end2139
logic.end2139:
%t57 = phi i1 [ true, %logic.from2137 ], [ %t56, %logic.rend2140 ]
br i1 %t57, label %then2141, label %endif2143
then2141:
ret i64 32
endif2143:
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.from2144
logic.from2144:
br i1 %t5, label %logic.end2146, label %logic.rhs2145
logic.rhs2145:
%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.rend2147
logic.rend2147:
br label %logic.end2146
logic.end2146:
%t9 = phi i1 [ true, %logic.from2144 ], [ %t8, %logic.rend2147 ]
br i1 %t9, label %then2148, label %endif2150
then2148:
ret i1 false
endif2150:
%t10 = load %S.ast.Type, ptr %a1
%t11 = call i1 @finch.gen.isSigned(%S.ast.Type %t10)
br label %logic.from2151
logic.from2151:
br i1 %t11, label %logic.rhs2152, label %logic.end2153
logic.rhs2152:
%t12 = load %S.ast.Type, ptr %a2
%t13 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t12)
br label %logic.rend2154
logic.rend2154:
br label %logic.end2153
logic.end2153:
%t14 = phi i1 [ false, %logic.from2151 ], [ %t13, %logic.rend2154 ]
br i1 %t14, label %then2155, label %endif2157
then2155:
ret i1 false
endif2157:
%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 %then2158, label %endif2160
then2158:
ret i1 false
endif2160:
%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.1284, i64 427)
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 %then2161, label %endif2163
then2161:
%t16 = load %S.ast.Type, ptr %a3
%t17 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t16)
br i1 %t17, label %then2164, label %endif2166
then2164:
ret i1 false
endif2166:
%t18 = load i64, ptr %a13
%t19 = icmp eq i64 %t18, 64
br i1 %t19, label %then2167, label %endif2169
then2167:
ret i1 true
endif2169:
%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
endif2163:
%t26 = load i64, ptr %a13
%t27 = icmp eq i64 %t26, 64
br i1 %t27, label %then2170, label %endif2172
then2170:
ret i1 true
endif2172:
%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 %then2173, label %endif2175
then2173:
%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 %endif2175
endif2175:
%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 %panic2176, label %ok2177
panic2176:
call void @finch_panic(ptr @.str.1285, i64 449, ptr @.str.1286)
unreachable
ok2177:
%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.cond2178
for.cond2178:
%t10 = load i64, ptr %a9
%t11 = icmp slt i64 %t10, %t8
br i1 %t11, label %for.body2179, label %for.end2181
for.body2179:
%t12 = load ptr, ptr %a1
%t13 = icmp eq ptr %t12, null
br i1 %t13, label %panic2182, label %ok2183
panic2182:
call void @finch_panic(ptr @.str.1287, i64 450, ptr @.str.1288)
unreachable
ok2183:
%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 %range2184, label %inrange2185
range2184:
call void @finch_panic_index(ptr @.str.1289, i64 450, i64 %t15, i64 %t17)
unreachable
inrange2185:
%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.from2186
logic.from2186:
br i1 %t27, label %logic.rhs2187, label %logic.end2188
logic.rhs2187:
%t28 = load ptr, ptr %a1
%t29 = icmp eq ptr %t28, null
br i1 %t29, label %panic2189, label %ok2190
panic2189:
call void @finch_panic(ptr @.str.1290, i64 450, ptr @.str.1291)
unreachable
ok2190:
%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 %range2191, label %inrange2192
range2191:
call void @finch_panic_index(ptr @.str.1292, i64 450, i64 %t31, i64 %t33)
unreachable
inrange2192:
%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.rend2193
logic.rend2193:
br label %logic.end2188
logic.end2188:
%t44 = phi i1 [ false, %logic.from2186 ], [ %t43, %logic.rend2193 ]
br i1 %t44, label %then2194, label %endif2196
then2194:
%t45 = load i64, ptr %a9
ret i64 %t45
endif2196:
br label %for.step2180
for.step2180:
%t46 = load i64, ptr %a9
%t47 = add i64 %t46, 1
store i64 %t47, ptr %a9
br label %for.cond2178
for.end2181:
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 %panic2197, label %ok2198
panic2197:
call void @finch_panic(ptr @.str.1293, i64 458, ptr @.str.1294)
unreachable
ok2198:
%t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 20
%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.cond2199
for.cond2199:
%t10 = load i64, ptr %a9
%t11 = icmp slt i64 %t10, %t8
br i1 %t11, label %for.body2200, label %for.end2202
for.body2200:
%t12 = load ptr, ptr %a1
%t13 = icmp eq ptr %t12, null
br i1 %t13, label %panic2203, label %ok2204
panic2203:
call void @finch_panic(ptr @.str.1295, i64 459, ptr @.str.1296)
unreachable
ok2204:
%t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 20
%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 %range2205, label %inrange2206
range2205:
call void @finch_panic_index(ptr @.str.1297, i64 459, i64 %t15, i64 %t17)
unreachable
inrange2206:
%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.from2207
logic.from2207:
br i1 %t27, label %logic.rhs2208, label %logic.end2209
logic.rhs2208:
%t28 = load ptr, ptr %a1
%t29 = icmp eq ptr %t28, null
br i1 %t29, label %panic2210, label %ok2211
panic2210:
call void @finch_panic(ptr @.str.1298, i64 459, ptr @.str.1299)
unreachable
ok2211:
%t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 20
%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 %range2212, label %inrange2213
range2212:
call void @finch_panic_index(ptr @.str.1300, i64 459, i64 %t31, i64 %t33)
unreachable
inrange2213:
%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.rend2214
logic.rend2214:
br label %logic.end2209
logic.end2209:
%t44 = phi i1 [ false, %logic.from2207 ], [ %t43, %logic.rend2214 ]
br i1 %t44, label %then2215, label %endif2217
then2215:
%t45 = load i64, ptr %a9
ret i64 %t45
endif2217:
br label %for.step2201
for.step2201:
%t46 = load i64, ptr %a9
%t47 = add i64 %t46, 1
store i64 %t47, ptr %a9
br label %for.cond2199
for.end2202:
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 %panic2218, label %ok2219
panic2218:
call void @finch_panic(ptr @.str.1301, i64 467, ptr @.str.1302)
unreachable
ok2219:
%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.cond2220
for.cond2220:
%t9 = load i64, ptr %a8
%t10 = icmp slt i64 %t9, %t7
br i1 %t10, label %for.body2221, label %for.end2223
for.body2221:
%t11 = load ptr, ptr %a1
%t12 = icmp eq ptr %t11, null
br i1 %t12, label %panic2224, label %ok2225
panic2224:
call void @finch_panic(ptr @.str.1303, i64 468, ptr @.str.1304)
unreachable
ok2225:
%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 %range2226, label %inrange2227
range2226:
call void @finch_panic_index(ptr @.str.1305, i64 468, i64 %t14, i64 %t16)
unreachable
inrange2227:
%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 %then2228, label %endif2230
then2228:
%t27 = load i64, ptr %a8
ret i64 %t27
endif2230:
br label %for.step2222
for.step2222:
%t28 = load i64, ptr %a8
%t29 = add i64 %t28, 1
store i64 %t29, ptr %a8
br label %for.cond2220
for.end2223:
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 %panic2231, label %ok2232
panic2231:
call void @finch_panic(ptr @.str.1306, i64 476, ptr @.str.1307)
unreachable
ok2232:
%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 %panic2233, label %ok2234
panic2233:
call void @finch_panic(ptr @.str.1308, i64 476, ptr @.str.1309)
unreachable
ok2234:
%t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 13
%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 %range2235, label %inrange2236
range2235:
call void @finch_panic_index(ptr @.str.1310, i64 476, i64 %t11, i64 %t13)
unreachable
inrange2236:
%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.cond2237
find.cond2237:
%t24 = load i64, ptr %a23
%t25 = icmp slt i64 %t24, %t21
br i1 %t25, label %find.body2238, label %find.end2241
find.body2238:
%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.hit2239, label %find.next2240
find.hit2239:
store i64 %t24, ptr %a20
br label %find.end2241
find.next2240:
%t32 = add i64 %t24, 1
store i64 %t32, ptr %a23
br label %find.cond2237
find.end2241:
%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
%a23 = alloca { ptr, i64, i64 }, align 16
%a24 = alloca { ptr, i64, i64 }, align 16
%a37 = alloca %S.ast.Type, 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
%a57 = alloca { ptr, i64, i64 }, align 16
%a58 = alloca { ptr, i64, i64 }, align 16
%a64 = 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
%a87 = alloca %S.ast.Type, align 16
%a90 = alloca { ptr, i64, i64 }, align 16
%a91 = alloca { ptr, i64, i64 }, align 16
%a101 = alloca { ptr, i64, i64 }, align 16
%a102 = alloca { ptr, i64, i64 }, align 16
%a109 = alloca %S.ast.Type, align 16
%a129 = alloca { ptr, i64, i64 }, align 16
%a130 = alloca { ptr, i64, i64 }, align 16
%a138 = alloca %S.ast.Type, align 16
%a139 = alloca %S.ast.Type, align 16
%a154 = alloca { ptr, i64, i64 }, align 16
%a155 = alloca { ptr, i64, i64 }, align 16
%a159 = alloca %S.ast.Type, align 16
%a160 = alloca %S.ast.Type, align 16
%a177 = alloca i64, align 16
%a180 = alloca i64, align 16
%a185 = alloca { ptr, i64, i64 }, align 16
%a186 = alloca { ptr, i64, i64 }, align 16
%a202 = alloca i64, align 16
%a205 = alloca i64, align 16
%a210 = alloca { ptr, i64, i64 }, align 16
%a211 = alloca { ptr, i64, i64 }, align 16
%a222 = alloca %S.ast.Type, align 16
%a223 = alloca %S.ast.Type, align 16
%a229 = alloca { ptr, i64, i64 }, align 16
%a231 = alloca i64, align 16
%a239 = alloca %S.ast.Type, align 16
%a255 = alloca { ptr, i64, i64 }, align 16
%a256 = alloca { ptr, i64, i64 }, align 16
%a258 = 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
%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
%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
%a292 = alloca { ptr, i64, i64 }, align 16
%a293 = alloca { ptr, i64, i64 }, align 16
%a304 = alloca { ptr, i64, i64 }, align 16
%a305 = 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
%a328 = alloca { ptr, i64, i64 }, align 16
%a329 = alloca { ptr, i64, i64 }, align 16
%a337 = alloca { ptr, i64, i64 }, align 16
%a338 = alloca { ptr, i64, i64 }, align 16
%a340 = 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
%a364 = alloca { ptr, i64, i64 }, align 16
%a365 = alloca { ptr, i64, i64 }, align 16
%a366 = 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
%a374 = alloca { ptr, i64, i64 }, align 16
%a375 = alloca { ptr, i64, i64 }, align 16
%a386 = alloca { ptr, i64, i64 }, align 16
%a387 = alloca { ptr, i64, i64 }, align 16
%a391 = alloca { ptr, i64, i64 }, align 16
%a392 = 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
%a424 = alloca { ptr, i64, i64 }, align 16
%a425 = 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
%a434 = 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
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.1311, 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 %then2242, label %endif2244
then2242:
%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 %range2245, label %inrange2246
range2245:
call void @finch_panic_index(ptr @.str.1312, i64 481, i64 0, i64 %t13)
unreachable
inrange2246:
%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)
ret %S.ast.Type %t20
endif2244:
%t21 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0
%t22 = load { ptr, i64, i64 }, ptr %t21
store { ptr, i64, i64 } %t22, ptr %a23
store { ptr, i64, i64 } { ptr @.str.1313, 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 %then2247, label %endif2249
then2247:
%t27 = load ptr, ptr %a1
%t28 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t29 = load { ptr, i64, i64 }, ptr %t28
%t30 = extractvalue { ptr, i64, i64 } %t29, 1
%t31 = icmp uge i64 0, %t30
br i1 %t31, label %range2250, label %inrange2251
range2250:
call void @finch_panic_index(ptr @.str.1314, i64 484, i64 0, i64 %t30)
unreachable
inrange2251:
%t32 = extractvalue { ptr, i64, i64 } %t29, 0
%t33 = getelementptr inbounds %S.ast.Type, ptr %t32, i64 0
%t34 = load %S.ast.Type, ptr %t33
%t35 = load %S.ast.Node, ptr %a3
%t36 = call %S.ast.Type @finch.gen.resolve(ptr %t27, %S.ast.Type %t34, %S.ast.Node %t35)
store %S.ast.Type %t36, ptr %a37
%t38 = load %S.ast.Type, ptr %a37
%t39 = call i1 @finch.gen.isInt(%S.ast.Type %t38)
%t40 = xor i1 %t39, true
br label %logic.from2252
logic.from2252:
br i1 %t40, label %logic.rhs2253, label %logic.end2254
logic.rhs2253:
%t41 = getelementptr inbounds %S.ast.Type, ptr %a37, i32 0, i32 0
%t42 = load { ptr, i64, i64 }, ptr %t41
store { ptr, i64, i64 } %t42, ptr %a43
store { ptr, i64, i64 } { ptr @.str.1315, i64 4, i64 0 }, ptr %a44
%t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44)
%t46 = icmp eq i32 %t45, 0
br label %logic.rend2255
logic.rend2255:
br label %logic.end2254
logic.end2254:
%t47 = phi i1 [ false, %logic.from2252 ], [ %t46, %logic.rend2255 ]
br label %logic.from2256
logic.from2256:
br i1 %t47, label %logic.rhs2257, label %logic.end2258
logic.rhs2257:
%t48 = getelementptr inbounds %S.ast.Type, ptr %a37, i32 0, i32 0
%t49 = load { ptr, i64, i64 }, ptr %t48
store { ptr, i64, i64 } %t49, ptr %a50
store { ptr, i64, i64 } { ptr @.str.1316, i64 4, i64 0 }, ptr %a51
%t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51)
%t53 = icmp eq i32 %t52, 0
br label %logic.rend2259
logic.rend2259:
br label %logic.end2258
logic.end2258:
%t54 = phi i1 [ false, %logic.from2256 ], [ %t53, %logic.rend2259 ]
br label %logic.from2260
logic.from2260:
br i1 %t54, label %logic.rhs2261, label %logic.end2262
logic.rhs2261:
%t55 = getelementptr inbounds %S.ast.Type, ptr %a37, i32 0, i32 0
%t56 = load { ptr, i64, i64 }, ptr %t55
store { ptr, i64, i64 } %t56, ptr %a57
store { ptr, i64, i64 } { ptr @.str.1317, i64 3, i64 0 }, ptr %a58
%t59 = call i32 @finch_str_eq(ptr %a57, ptr %a58)
%t60 = icmp eq i32 %t59, 0
br label %logic.rend2263
logic.rend2263:
br label %logic.end2262
logic.end2262:
%t61 = phi i1 [ false, %logic.from2260 ], [ %t60, %logic.rend2263 ]
br label %logic.from2264
logic.from2264:
br i1 %t61, label %logic.rhs2265, label %logic.end2266
logic.rhs2265:
%t62 = getelementptr inbounds %S.ast.Type, ptr %a37, i32 0, i32 0
%t63 = load { ptr, i64, i64 }, ptr %t62
store { ptr, i64, i64 } %t63, ptr %a64
store { ptr, i64, i64 } { ptr @.str.1318, i64 4, i64 0 }, ptr %a65
%t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65)
%t67 = icmp eq i32 %t66, 0
br label %logic.rend2267
logic.rend2267:
br label %logic.end2266
logic.end2266:
%t68 = phi i1 [ false, %logic.from2264 ], [ %t67, %logic.rend2267 ]
br i1 %t68, label %then2268, label %endif2270
then2268:
%t69 = load ptr, ptr %a1
%t70 = load %S.ast.Node, ptr %a3
%t71 = load %S.ast.Type, ptr %a37
%t72 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t71)
store { ptr, i64, i64 } { ptr @.str.1319, i64 63, i64 0 }, ptr %a74
store { ptr, i64, i64 } %t72, ptr %a75
call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75)
%t76 = load { ptr, i64, i64 }, ptr %a73
call void @finch.gen.fail(ptr %t69, %S.ast.Node %t70, { ptr, i64, i64 } %t76)
br label %endif2270
endif2270:
%t77 = load ptr, ptr %a1
%t78 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t79 = load { ptr, i64, i64 }, ptr %t78
%t80 = extractvalue { ptr, i64, i64 } %t79, 1
%t81 = icmp uge i64 1, %t80
br i1 %t81, label %range2271, label %inrange2272
range2271:
call void @finch_panic_index(ptr @.str.1320, i64 488, i64 1, i64 %t80)
unreachable
inrange2272:
%t82 = extractvalue { ptr, i64, i64 } %t79, 0
%t83 = getelementptr inbounds %S.ast.Type, ptr %t82, i64 1
%t84 = load %S.ast.Type, ptr %t83
%t85 = load %S.ast.Node, ptr %a3
%t86 = call %S.ast.Type @finch.gen.resolve(ptr %t77, %S.ast.Type %t84, %S.ast.Node %t85)
store %S.ast.Type %t86, ptr %a87
%t88 = getelementptr inbounds %S.ast.Type, ptr %a87, i32 0, i32 0
%t89 = load { ptr, i64, i64 }, ptr %t88
store { ptr, i64, i64 } %t89, ptr %a90
store { ptr, i64, i64 } { ptr @.str.1321, i64 4, i64 0 }, ptr %a91
%t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91)
%t93 = icmp ne i32 %t92, 0
br i1 %t93, label %then2273, label %endif2275
then2273:
%t94 = load ptr, ptr %a1
%t95 = load %S.ast.Node, ptr %a3
call void @finch.gen.fail(ptr %t94, %S.ast.Node %t95, { ptr, i64, i64 } { ptr @.str.1322, i64 41, i64 0 })
br label %endif2275
endif2275:
%t96 = load %S.ast.Type, ptr %a37
%t97 = load %S.ast.Type, ptr %a87
%t98 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t96, %S.ast.Type %t97)
ret %S.ast.Type %t98
endif2249:
%t99 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0
%t100 = load { ptr, i64, i64 }, ptr %t99
store { ptr, i64, i64 } %t100, ptr %a101
store { ptr, i64, i64 } { ptr @.str.1323, i64 5, i64 0 }, ptr %a102
%t103 = call i32 @finch_str_eq(ptr %a101, ptr %a102)
%t104 = icmp ne i32 %t103, 0
br i1 %t104, label %then2276, label %endif2278
then2276:
%t105 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1324, i64 5, i64 0 }, 0
%t106 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4
%t107 = load i64, ptr %t106
%t108 = insertvalue %S.ast.Type %t105, i64 %t107, 4
store %S.ast.Type %t108, ptr %a109
%t110 = getelementptr inbounds %S.ast.Type, ptr %a109, i32 0, i32 1
%t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i32 0, i32 1
%t112 = load ptr, ptr %a1
%t113 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t114 = load { ptr, i64, i64 }, ptr %t113
%t115 = extractvalue { ptr, i64, i64 } %t114, 1
%t116 = icmp uge i64 0, %t115
br i1 %t116, label %range2279, label %inrange2280
range2279:
call void @finch_panic_index(ptr @.str.1325, i64 496, i64 0, i64 %t115)
unreachable
inrange2280:
%t117 = extractvalue { ptr, i64, i64 } %t114, 0
%t118 = getelementptr inbounds %S.ast.Type, ptr %t117, i64 0
%t119 = load %S.ast.Type, ptr %t118
%t120 = load %S.ast.Node, ptr %a3
%t121 = call %S.ast.Type @finch.gen.resolve(ptr %t112, %S.ast.Type %t119, %S.ast.Node %t120)
%t122 = load i64, ptr %t111
%t123 = add i64 %t122, 1
call void @finch_arr_reserve(ptr %t110, i64 %t123, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64))
%t124 = load ptr, ptr %t110
%t125 = getelementptr inbounds %S.ast.Type, ptr %t124, i64 %t122
store %S.ast.Type %t121, ptr %t125
store i64 %t123, ptr %t111
%t126 = load %S.ast.Type, ptr %a109
ret %S.ast.Type %t126
endif2278:
%t127 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0
%t128 = load { ptr, i64, i64 }, ptr %t127
store { ptr, i64, i64 } %t128, ptr %a129
store { ptr, i64, i64 } { ptr @.str.1326, i64 3, i64 0 }, ptr %a130
%t131 = call i32 @finch_str_eq(ptr %a129, ptr %a130)
%t132 = icmp ne i32 %t131, 0
br i1 %t132, label %then2281, label %endif2283
then2281:
%t133 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1
%t135 = load i64, ptr %t134
%t136 = icmp eq i64 %t135, 0
br i1 %t136, label %then2284, label %endif2286
then2284:
%t137 = load %S.ast.Type, ptr %a2
store %S.ast.Type %t137, ptr %a138
call void @finch.copy.S_ast_Type(ptr %a139, ptr %a138)
%t140 = load %S.ast.Type, ptr %a139
ret %S.ast.Type %t140
endif2286:
%t141 = load ptr, ptr %a1
%t142 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t143 = load { ptr, i64, i64 }, ptr %t142
%t144 = extractvalue { ptr, i64, i64 } %t143, 1
%t145 = icmp uge i64 0, %t144
br i1 %t145, label %range2287, label %inrange2288
range2287:
call void @finch_panic_index(ptr @.str.1327, i64 503, i64 0, i64 %t144)
unreachable
inrange2288:
%t146 = extractvalue { ptr, i64, i64 } %t143, 0
%t147 = getelementptr inbounds %S.ast.Type, ptr %t146, i64 0
%t148 = load %S.ast.Type, ptr %t147
%t149 = load %S.ast.Node, ptr %a3
%t150 = call %S.ast.Type @finch.gen.resolve(ptr %t141, %S.ast.Type %t148, %S.ast.Node %t149)
%t151 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t150)
ret %S.ast.Type %t151
endif2283:
%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.1328, i64 5, i64 0 }, ptr %a155
%t156 = call i32 @finch_str_eq(ptr %a154, ptr %a155)
%t157 = icmp eq i32 %t156, 0
br i1 %t157, label %then2289, label %endif2291
then2289:
%t158 = load %S.ast.Type, ptr %a2
store %S.ast.Type %t158, ptr %a159
call void @finch.copy.S_ast_Type(ptr %a160, ptr %a159)
%t161 = load %S.ast.Type, ptr %a160
ret %S.ast.Type %t161
endif2291:
%t162 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i32 0, i32 1
%t164 = load i64, ptr %t163
%t165 = icmp eq i64 %t164, 0
br label %logic.from2292
logic.from2292:
br i1 %t165, label %logic.rhs2293, label %logic.end2294
logic.rhs2293:
%t166 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%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.rend2295
logic.rend2295:
br label %logic.end2294
logic.end2294:
%t170 = phi i1 [ false, %logic.from2292 ], [ %t169, %logic.rend2295 ]
br label %logic.from2296
logic.from2296:
br i1 %t170, label %logic.rhs2297, label %logic.end2298
logic.rhs2297:
%t171 = load ptr, ptr %a1
%t172 = icmp eq ptr %t171, null
br i1 %t172, label %panic2299, label %ok2300
panic2299:
call void @finch_panic(ptr @.str.1329, i64 509, ptr @.str.1330)
unreachable
ok2300:
%t173 = getelementptr inbounds %S.gen.Gen, ptr %t171, i32 0, i32 17
%t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i32 0, i32 1
%t175 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t176 = load { ptr, i64, i64 }, ptr %t175
store i64 -1, ptr %a177
%t178 = load i64, ptr %t174
%t179 = load ptr, ptr %t173
store i64 0, ptr %a180
br label %find.cond2301
find.cond2301:
%t181 = load i64, ptr %a180
%t182 = icmp slt i64 %t181, %t178
br i1 %t182, label %find.body2302, label %find.end2305
find.body2302:
%t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i64 %t181
%t184 = load { ptr, i64, i64 }, ptr %t183
store { ptr, i64, i64 } %t184, ptr %a185
store { ptr, i64, i64 } %t176, ptr %a186
%t187 = call i32 @finch_str_eq(ptr %a185, ptr %a186)
%t188 = icmp ne i32 %t187, 0
br i1 %t188, label %find.hit2303, label %find.next2304
find.hit2303:
store i64 %t181, ptr %a177
br label %find.end2305
find.next2304:
%t189 = add i64 %t181, 1
store i64 %t189, ptr %a180
br label %find.cond2301
find.end2305:
%t190 = load i64, ptr %a177
%t191 = icmp sge i64 %t190, 0
br label %logic.rend2306
logic.rend2306:
br label %logic.end2298
logic.end2298:
%t192 = phi i1 [ false, %logic.from2296 ], [ %t191, %logic.rend2306 ]
br i1 %t192, label %then2307, label %endif2309
then2307:
%t193 = load ptr, ptr %a1
%t194 = icmp eq ptr %t193, null
br i1 %t194, label %panic2310, label %ok2311
panic2310:
call void @finch_panic(ptr @.str.1331, i64 510, ptr @.str.1332)
unreachable
ok2311:
%t195 = getelementptr inbounds %S.gen.Gen, ptr %t193, i32 0, i32 18
%t196 = load ptr, ptr %a1
%t197 = icmp eq ptr %t196, null
br i1 %t197, label %panic2312, label %ok2313
panic2312:
call void @finch_panic(ptr @.str.1333, i64 510, ptr @.str.1334)
unreachable
ok2313:
%t198 = getelementptr inbounds %S.gen.Gen, ptr %t196, i32 0, i32 17
%t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t198, i32 0, i32 1
%t200 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t201 = load { ptr, i64, i64 }, ptr %t200
store i64 -1, ptr %a202
%t203 = load i64, ptr %t199
%t204 = load ptr, ptr %t198
store i64 0, ptr %a205
br label %find.cond2314
find.cond2314:
%t206 = load i64, ptr %a205
%t207 = icmp slt i64 %t206, %t203
br i1 %t207, label %find.body2315, label %find.end2318
find.body2315:
%t208 = getelementptr inbounds { ptr, i64, i64 }, ptr %t204, i64 %t206
%t209 = load { ptr, i64, i64 }, ptr %t208
store { ptr, i64, i64 } %t209, ptr %a210
store { ptr, i64, i64 } %t201, ptr %a211
%t212 = call i32 @finch_str_eq(ptr %a210, ptr %a211)
%t213 = icmp ne i32 %t212, 0
br i1 %t213, label %find.hit2316, label %find.next2317
find.hit2316:
store i64 %t206, ptr %a202
br label %find.end2318
find.next2317:
%t214 = add i64 %t206, 1
store i64 %t214, ptr %a205
br label %find.cond2314
find.end2318:
%t215 = load i64, ptr %a202
%t216 = load { ptr, i64, i64 }, ptr %t195
%t217 = extractvalue { ptr, i64, i64 } %t216, 1
%t218 = icmp uge i64 %t215, %t217
br i1 %t218, label %range2319, label %inrange2320
range2319:
call void @finch_panic_index(ptr @.str.1335, i64 510, i64 %t215, i64 %t217)
unreachable
inrange2320:
%t219 = extractvalue { ptr, i64, i64 } %t216, 0
%t220 = getelementptr inbounds %S.ast.Type, ptr %t219, i64 %t215
%t221 = load %S.ast.Type, ptr %t220
store %S.ast.Type %t221, ptr %a222
call void @finch.copy.S_ast_Type(ptr %a223, ptr %a222)
%t224 = load %S.ast.Type, ptr %a223
ret %S.ast.Type %t224
endif2309:
%t225 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t226 = getelementptr inbounds { ptr, i64, i64 }, ptr %t225, i32 0, i32 1
%t227 = load i64, ptr %t226
%t228 = icmp sgt i64 %t227, 0
br i1 %t228, label %then2321, label %endif2323
then2321:
store { ptr, i64, i64 } zeroinitializer, ptr %a229
%t230 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
store i64 0, ptr %a231
br label %each.cond2324
each.cond2324:
%t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t230, i32 0, i32 1
%t233 = load i64, ptr %t232
%t234 = load i64, ptr %a231
%t235 = icmp slt i64 %t234, %t233
br i1 %t235, label %each.body2325, label %each.end2327
each.body2325:
%t236 = load ptr, ptr %t230
%t237 = getelementptr inbounds %S.ast.Type, ptr %t236, i64 %t234
%t238 = load %S.ast.Type, ptr %t237
store %S.ast.Type %t238, ptr %a239
%t240 = getelementptr inbounds { ptr, i64, i64 }, ptr %a229, i32 0, i32 1
%t241 = load ptr, ptr %a1
%t242 = load %S.ast.Type, ptr %a239
%t243 = load %S.ast.Node, ptr %a3
%t244 = call %S.ast.Type @finch.gen.resolve(ptr %t241, %S.ast.Type %t242, %S.ast.Node %t243)
%t245 = load i64, ptr %t240
%t246 = add i64 %t245, 1
call void @finch_arr_reserve(ptr %a229, i64 %t246, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64))
%t247 = load ptr, ptr %a229
%t248 = getelementptr inbounds %S.ast.Type, ptr %t247, i64 %t245
store %S.ast.Type %t244, ptr %t248
store i64 %t246, ptr %t240
br label %each.step2326
each.step2326:
%t249 = load i64, ptr %a231
%t250 = add i64 %t249, 1
store i64 %t250, ptr %a231
br label %each.cond2324
each.end2327:
%t251 = load ptr, ptr %a1
%t252 = icmp eq ptr %t251, null
br i1 %t252, label %panic2328, label %ok2329
panic2328:
call void @finch_panic(ptr @.str.1336, i64 518, ptr @.str.1337)
unreachable
ok2329:
%t253 = getelementptr inbounds %S.gen.Gen, ptr %t251, i32 0, i32 13
%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
store { ptr, i64, i64 } %t257, ptr %a258
%t259 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t260 = getelementptr inbounds { ptr, i64, i64 }, ptr %t259, i32 0, i32 1
%t261 = load i64, ptr %t260
%t262 = icmp sgt i64 %t261, 0
br i1 %t262, label %then2330, label %endif2332
then2330:
%t263 = load ptr, ptr %a1
%t264 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t265 = load { ptr, i64, i64 }, ptr %t264
%t266 = call i1 @finch.gen.imports(ptr %t263, { ptr, i64, i64 } %t265)
%t267 = xor i1 %t266, true
br i1 %t267, label %then2333, label %endif2335
then2333:
%t268 = load ptr, ptr %a1
%t269 = load %S.ast.Node, ptr %a3
%t270 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t271 = load { ptr, i64, i64 }, ptr %t270
store { ptr, i64, i64 } { ptr @.str.1338, i64 1, i64 0 }, ptr %a273
store { ptr, i64, i64 } %t271, ptr %a274
call void @finch_str_concat(ptr %a272, ptr %a273, ptr %a274)
%t275 = load { ptr, i64, i64 }, ptr %a272
store { ptr, i64, i64 } %t275, ptr %a277
store { ptr, i64, i64 } { ptr @.str.1339, i64 36, i64 0 }, ptr %a278
call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278)
%t279 = load { ptr, i64, i64 }, ptr %a276
%t280 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t281 = load { ptr, i64, i64 }, ptr %t280
store { ptr, i64, i64 } %t279, ptr %a283
store { ptr, i64, i64 } %t281, ptr %a284
call void @finch_str_concat(ptr %a282, ptr %a283, ptr %a284)
%t285 = load { ptr, i64, i64 }, ptr %a282
store { ptr, i64, i64 } %t285, ptr %a287
store { ptr, i64, i64 } { ptr @.str.1340, i64 1, i64 0 }, ptr %a288
call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288)
%t289 = load { ptr, i64, i64 }, ptr %a286
call void @finch.gen.fail(ptr %t268, %S.ast.Node %t269, { ptr, i64, i64 } %t289)
br label %endif2335
endif2335:
%t290 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t291 = load { ptr, i64, i64 }, ptr %t290
store { ptr, i64, i64 } %t291, ptr %a292
call void @finch_str_copy(ptr %a293, ptr %a292)
%t294 = load { ptr, i64, i64 }, ptr %a293
store { ptr, i64, i64 } %t294, ptr %a258
br label %endif2332
endif2332:
%t295 = load ptr, ptr %a1
%t296 = load { ptr, i64, i64 }, ptr %a258
%t297 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t298 = load { ptr, i64, i64 }, ptr %t297
%t299 = load { ptr, i64, i64 }, ptr %a229
%t300 = load %S.ast.Node, ptr %a3
%t301 = call %S.ast.Type @finch.gen.instStruct(ptr %t295, { ptr, i64, i64 } %t296, { ptr, i64, i64 } %t298, { ptr, i64, i64 } %t299, %S.ast.Node %t300)
ret %S.ast.Type %t301
endif2323:
%t302 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t303 = load { ptr, i64, i64 }, ptr %t302
store { ptr, i64, i64 } %t303, ptr %a304
store { ptr, i64, i64 } { ptr @.str.1341, i64 1, i64 0 }, ptr %a305
%t306 = call i32 @finch_str_eq(ptr %a304, ptr %a305)
%t307 = icmp ne i32 %t306, 0
br i1 %t307, label %then2336, label %endif2338
then2336:
%t308 = load ptr, ptr %a1
%t309 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t310 = load { ptr, i64, i64 }, ptr %t309
%t311 = call i64 @finch.gen.findStruct(ptr %t308, { ptr, i64, i64 } { ptr @.str.1342, i64 1, i64 0 }, { ptr, i64, i64 } %t310)
%t312 = icmp slt i64 %t311, 0
br i1 %t312, label %then2339, label %endif2341
then2339:
%t313 = load ptr, ptr %a1
%t314 = load %S.ast.Node, ptr %a3
%t315 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t316 = load { ptr, i64, i64 }, ptr %t315
store { ptr, i64, i64 } { ptr @.str.1343, i64 28, 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.1344, i64 1, i64 0 }, ptr %a323
call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323)
%t324 = load { ptr, i64, i64 }, ptr %a321
call void @finch.gen.fail(ptr %t313, %S.ast.Node %t314, { ptr, i64, i64 } %t324)
br label %endif2341
endif2341:
%t325 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1345, i64 6, i64 0 }, 0
%t326 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t327 = load { ptr, i64, i64 }, ptr %t326
store { ptr, i64, i64 } %t327, ptr %a328
call void @finch_str_copy(ptr %a329, ptr %a328)
%t330 = load { ptr, i64, i64 }, ptr %a329
%t331 = insertvalue %S.ast.Type %t325, { ptr, i64, i64 } %t330, 2
%t332 = insertvalue %S.ast.Type %t331, { ptr, i64, i64 } { ptr @.str.1346, i64 1, i64 0 }, 3
ret %S.ast.Type %t332
endif2338:
%t333 = load ptr, ptr %a1
%t334 = icmp eq ptr %t333, null
br i1 %t334, label %panic2342, label %ok2343
panic2342:
call void @finch_panic(ptr @.str.1347, i64 533, ptr @.str.1348)
unreachable
ok2343:
%t335 = getelementptr inbounds %S.gen.Gen, ptr %t333, i32 0, i32 13
%t336 = load { ptr, i64, i64 }, ptr %t335
store { ptr, i64, i64 } %t336, ptr %a337
call void @finch_str_copy(ptr %a338, ptr %a337)
%t339 = load { ptr, i64, i64 }, ptr %a338
store { ptr, i64, i64 } %t339, ptr %a340
%t341 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t342 = getelementptr inbounds { ptr, i64, i64 }, ptr %t341, i32 0, i32 1
%t343 = load i64, ptr %t342
%t344 = icmp sgt i64 %t343, 0
br i1 %t344, label %then2344, label %endif2346
then2344:
%t345 = load ptr, ptr %a1
%t346 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t347 = load { ptr, i64, i64 }, ptr %t346
%t348 = call i1 @finch.gen.imports(ptr %t345, { ptr, i64, i64 } %t347)
%t349 = xor i1 %t348, true
br i1 %t349, label %then2347, label %endif2349
then2347:
%t350 = load ptr, ptr %a1
%t351 = load %S.ast.Node, ptr %a3
%t352 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t353 = load { ptr, i64, i64 }, ptr %t352
store { ptr, i64, i64 } { ptr @.str.1349, i64 1, i64 0 }, ptr %a355
store { ptr, i64, i64 } %t353, ptr %a356
call void @finch_str_concat(ptr %a354, ptr %a355, ptr %a356)
%t357 = load { ptr, i64, i64 }, ptr %a354
store { ptr, i64, i64 } %t357, ptr %a359
store { ptr, i64, i64 } { ptr @.str.1350, i64 36, i64 0 }, ptr %a360
call void @finch_str_concat(ptr %a358, ptr %a359, ptr %a360)
%t361 = load { ptr, i64, i64 }, ptr %a358
%t362 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t363 = load { ptr, i64, i64 }, ptr %t362
store { ptr, i64, i64 } %t361, ptr %a365
store { ptr, i64, i64 } %t363, ptr %a366
call void @finch_str_concat(ptr %a364, ptr %a365, ptr %a366)
%t367 = load { ptr, i64, i64 }, ptr %a364
store { ptr, i64, i64 } %t367, ptr %a369
store { ptr, i64, i64 } { ptr @.str.1351, i64 1, i64 0 }, ptr %a370
call void @finch_str_concat(ptr %a368, ptr %a369, ptr %a370)
%t371 = load { ptr, i64, i64 }, ptr %a368
call void @finch.gen.fail(ptr %t350, %S.ast.Node %t351, { ptr, i64, i64 } %t371)
br label %endif2349
endif2349:
%t372 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t373 = load { ptr, i64, i64 }, ptr %t372
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 %a340
br label %endif2346
endif2346:
%t377 = load ptr, ptr %a1
%t378 = load { ptr, i64, i64 }, ptr %a340
%t379 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t380 = load { ptr, i64, i64 }, ptr %t379
%t381 = call i64 @finch.gen.findEnum(ptr %t377, { ptr, i64, i64 } %t378, { ptr, i64, i64 } %t380)
%t382 = icmp sge i64 %t381, 0
br i1 %t382, label %then2350, label %endif2352
then2350:
%t383 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1352, i64 4, i64 0 }, 0
%t384 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t385 = load { ptr, i64, i64 }, ptr %t384
store { ptr, i64, i64 } %t385, ptr %a386
call void @finch_str_copy(ptr %a387, ptr %a386)
%t388 = load { ptr, i64, i64 }, ptr %a387
%t389 = insertvalue %S.ast.Type %t383, { ptr, i64, i64 } %t388, 2
%t390 = load { ptr, i64, i64 }, ptr %a340
store { ptr, i64, i64 } %t390, ptr %a391
call void @finch_str_copy(ptr %a392, ptr %a391)
%t393 = load { ptr, i64, i64 }, ptr %a392
%t394 = insertvalue %S.ast.Type %t389, { ptr, i64, i64 } %t393, 3
ret %S.ast.Type %t394
endif2352:
%t395 = load ptr, ptr %a1
%t396 = load { ptr, i64, i64 }, ptr %a340
%t397 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t398 = load { ptr, i64, i64 }, ptr %t397
%t399 = call i64 @finch.gen.findStruct(ptr %t395, { ptr, i64, i64 } %t396, { ptr, i64, i64 } %t398)
%t400 = icmp slt i64 %t399, 0
br i1 %t400, label %then2353, label %endif2355
then2353:
%t401 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t402 = getelementptr inbounds { ptr, i64, i64 }, ptr %t401, i32 0, i32 1
%t403 = load i64, ptr %t402
%t404 = icmp eq i64 %t403, 0
br label %logic.from2356
logic.from2356:
br i1 %t404, label %logic.rhs2357, label %logic.end2358
logic.rhs2357:
%t405 = load ptr, ptr %a1
%t406 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t407 = load { ptr, i64, i64 }, ptr %t406
%t408 = call i64 @finch.gen.findStruct(ptr %t405, { ptr, i64, i64 } { ptr @.str.1353, i64 1, i64 0 }, { ptr, i64, i64 } %t407)
%t409 = icmp sge i64 %t408, 0
br label %logic.rend2359
logic.rend2359:
br label %logic.end2358
logic.end2358:
%t410 = phi i1 [ false, %logic.from2356 ], [ %t409, %logic.rend2359 ]
br i1 %t410, label %then2360, label %endif2362
then2360:
%t411 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1354, i64 6, i64 0 }, 0
%t412 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t413 = load { ptr, i64, i64 }, ptr %t412
store { ptr, i64, i64 } %t413, ptr %a414
call void @finch_str_copy(ptr %a415, ptr %a414)
%t416 = load { ptr, i64, i64 }, ptr %a415
%t417 = insertvalue %S.ast.Type %t411, { ptr, i64, i64 } %t416, 2
%t418 = insertvalue %S.ast.Type %t417, { ptr, i64, i64 } { ptr @.str.1355, i64 1, i64 0 }, 3
ret %S.ast.Type %t418
endif2362:
%t419 = load ptr, ptr %a1
%t420 = load %S.ast.Node, ptr %a3
%t421 = load %S.ast.Type, ptr %a2
%t422 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t421)
store { ptr, i64, i64 } { ptr @.str.1356, i64 24, i64 0 }, ptr %a424
store { ptr, i64, i64 } %t422, ptr %a425
call void @finch_str_concat(ptr %a423, ptr %a424, ptr %a425)
%t426 = load { ptr, i64, i64 }, ptr %a423
store { ptr, i64, i64 } %t426, ptr %a428
store { ptr, i64, i64 } { ptr @.str.1357, i64 1, i64 0 }, ptr %a429
call void @finch_str_concat(ptr %a427, ptr %a428, ptr %a429)
%t430 = load { ptr, i64, i64 }, ptr %a427
call void @finch.gen.fail(ptr %t419, %S.ast.Node %t420, { ptr, i64, i64 } %t430)
br label %endif2355
endif2355:
%t431 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1358, i64 6, i64 0 }, 0
%t432 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t433 = load { ptr, i64, i64 }, ptr %t432
store { ptr, i64, i64 } %t433, ptr %a434
call void @finch_str_copy(ptr %a435, ptr %a434)
%t436 = load { ptr, i64, i64 }, ptr %a435
%t437 = insertvalue %S.ast.Type %t431, { ptr, i64, i64 } %t436, 2
%t438 = load { ptr, i64, i64 }, ptr %a340
store { ptr, i64, i64 } %t438, ptr %a439
call void @finch_str_copy(ptr %a440, ptr %a439)
%t441 = load { ptr, i64, i64 }, ptr %a440
%t442 = insertvalue %S.ast.Type %t437, { ptr, i64, i64 } %t441, 3
ret %S.ast.Type %t442
}
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
%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
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.1360, i64 1, i64 0 }, ptr %a5
store { ptr, i64, i64 } { ptr @.str.1361, 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.1363, i64 1, i64 0 }, ptr %a10
store { ptr, i64, i64 } { ptr @.str.1364, 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 } %t12, ptr %a13
store { ptr, i64, i64 } { ptr @.str.1366, i64 1, i64 0 }, ptr %a15
store { ptr, i64, i64 } { ptr @.str.1367, i64 1, i64 0 }, ptr %a16
call void @finch_str_replace(ptr %a14, ptr %a13, ptr %a15, ptr %a16)
%t17 = load { ptr, i64, i64 }, ptr %a14
store { ptr, i64, i64 } %t17, ptr %a18
store { ptr, i64, i64 } { ptr @.str.1369, i64 1, i64 0 }, ptr %a20
store { ptr, i64, i64 } { ptr @.str.1370, i64 0, i64 0 }, ptr %a21
call void @finch_str_replace(ptr %a19, ptr %a18, ptr %a20, ptr %a21)
%t22 = load { ptr, i64, i64 }, ptr %a19
ret { ptr, i64, i64 } %t22
}
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 %then2363, label %endif2365
then2363:
ret { ptr, i64, i64 } { ptr @.str.1371, i64 4, i64 0 }
endif2365:
%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
%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
%a41 = alloca { ptr, i64, i64 }, align 16
%a42 = 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
%a57 = alloca { ptr, i64, i64 }, align 16
%a58 = 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
%a69 = alloca { ptr, i64, i64 }, align 16
%a70 = alloca { ptr, i64, i64 }, align 16
%a71 = 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
%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
%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
%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
%a125 = alloca { ptr, i64, i64 }, align 16
%a126 = alloca { ptr, i64, i64 }, align 16
%a127 = 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.1372, 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 %then2366, label %endif2368
then2366:
ret { ptr, i64, i64 } { ptr @.str.1373, i64 2, i64 0 }
endif2368:
%t14 = load %S.ast.Type, ptr %a2
%t15 = call i1 @finch.gen.isInt(%S.ast.Type %t14)
br label %logic.from2369
logic.from2369:
br i1 %t15, label %logic.end2371, label %logic.rhs2370
logic.rhs2370:
%t16 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t16, ptr %a17
store { ptr, i64, i64 } { ptr @.str.1374, 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.rend2372
logic.rend2372:
br label %logic.end2371
logic.end2371:
%t21 = phi i1 [ true, %logic.from2369 ], [ %t20, %logic.rend2372 ]
br i1 %t21, label %then2373, label %endif2375
then2373:
%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.1375, i64 1, i64 0 }, ptr %a27
store { ptr, i64, i64 } %t25, ptr %a28
call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28)
%t29 = load { ptr, i64, i64 }, ptr %a26
ret { ptr, i64, i64 } %t29
endif2375:
%t30 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t30, ptr %a31
store { ptr, i64, i64 } { ptr @.str.1376, i64 5, i64 0 }, ptr %a32
%t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32)
%t34 = icmp ne i32 %t33, 0
br i1 %t34, label %then2376, label %endif2378
then2376:
ret { ptr, i64, i64 } { ptr @.str.1377, i64 6, i64 0 }
endif2378:
%t35 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t35, ptr %a36
store { ptr, i64, i64 } { ptr @.str.1378, 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 %then2379, label %endif2381
then2379:
ret { ptr, i64, i64 } { ptr @.str.1379, i64 5, i64 0 }
endif2381:
%t40 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t40, ptr %a41
store { ptr, i64, i64 } { ptr @.str.1380, i64 3, i64 0 }, ptr %a42
%t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42)
%t44 = icmp ne i32 %t43, 0
br label %logic.from2382
logic.from2382:
br i1 %t44, label %logic.end2384, label %logic.rhs2383
logic.rhs2383:
%t45 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t45, ptr %a46
store { ptr, i64, i64 } { ptr @.str.1381, i64 5, i64 0 }, ptr %a47
%t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47)
%t49 = icmp ne i32 %t48, 0
br label %logic.rend2385
logic.rend2385:
br label %logic.end2384
logic.end2384:
%t50 = phi i1 [ true, %logic.from2382 ], [ %t49, %logic.rend2385 ]
br i1 %t50, label %then2386, label %endif2388
then2386:
ret { ptr, i64, i64 } { ptr @.str.1382, i64 17, i64 0 }
endif2388:
%t51 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t51, ptr %a52
store { ptr, i64, i64 } { ptr @.str.1383, i64 3, i64 0 }, ptr %a53
%t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53)
%t55 = icmp ne i32 %t54, 0
br i1 %t55, label %then2389, label %endif2391
then2389:
ret { ptr, i64, i64 } { ptr @.str.1384, i64 37, i64 0 }
endif2391:
%t56 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t56, ptr %a57
store { ptr, i64, i64 } { ptr @.str.1385, i64 5, i64 0 }, ptr %a58
%t59 = call i32 @finch_str_eq(ptr %a57, ptr %a58)
%t60 = icmp ne i32 %t59, 0
br i1 %t60, label %then2392, label %endif2394
then2392:
%t61 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4
%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.1386, i64 1, i64 0 }, ptr %a66
store { ptr, i64, i64 } %t64, ptr %a67
call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67)
%t68 = load { ptr, i64, i64 }, ptr %a65
store { ptr, i64, i64 } %t68, ptr %a70
store { ptr, i64, i64 } { ptr @.str.1387, i64 3, i64 0 }, ptr %a71
call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71)
%t72 = load { ptr, i64, i64 }, ptr %a69
%t73 = load ptr, ptr %a1
%t74 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t75 = load { ptr, i64, i64 }, ptr %t74
%t76 = extractvalue { ptr, i64, i64 } %t75, 1
%t77 = icmp uge i64 0, %t76
br i1 %t77, label %range2395, label %inrange2396
range2395:
call void @finch_panic_index(ptr @.str.1388, i64 586, i64 0, i64 %t76)
unreachable
inrange2396:
%t78 = extractvalue { ptr, i64, i64 } %t75, 0
%t79 = getelementptr inbounds %S.ast.Type, ptr %t78, i64 0
%t80 = load %S.ast.Type, ptr %t79
%t81 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t73, %S.ast.Type %t80)
store { ptr, i64, i64 } %t72, 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.1389, i64 1, i64 0 }, ptr %a88
call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88)
%t89 = load { ptr, i64, i64 }, ptr %a86
ret { ptr, i64, i64 } %t89
endif2394:
%t90 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t90, ptr %a91
store { ptr, i64, i64 } { ptr @.str.1390, 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 %then2397, label %endif2399
then2397:
ret { ptr, i64, i64 } { ptr @.str.1391, i64 3, i64 0 }
endif2399:
%t95 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t95, ptr %a96
store { ptr, i64, i64 } { ptr @.str.1392, i64 3, i64 0 }, ptr %a97
%t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97)
%t99 = icmp ne i32 %t98, 0
br label %logic.from2400
logic.from2400:
br i1 %t99, label %logic.end2402, label %logic.rhs2401
logic.rhs2401:
%t100 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t100, ptr %a101
store { ptr, i64, i64 } { ptr @.str.1393, i64 4, i64 0 }, ptr %a102
%t103 = call i32 @finch_str_eq(ptr %a101, ptr %a102)
%t104 = icmp ne i32 %t103, 0
br label %logic.rend2403
logic.rend2403:
br label %logic.end2402
logic.end2402:
%t105 = phi i1 [ true, %logic.from2400 ], [ %t104, %logic.rend2403 ]
br i1 %t105, label %then2404, label %endif2406
then2404:
ret { ptr, i64, i64 } { ptr @.str.1394, i64 3, i64 0 }
endif2406:
%t106 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t106, ptr %a107
store { ptr, i64, i64 } { ptr @.str.1395, i64 4, i64 0 }, ptr %a108
%t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108)
%t110 = icmp ne i32 %t109, 0
br i1 %t110, label %then2407, label %endif2409
then2407:
ret { ptr, i64, i64 } { ptr @.str.1396, i64 4, i64 0 }
endif2409:
%t111 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t112 = load { ptr, i64, i64 }, ptr %t111
%t113 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t112)
store { ptr, i64, i64 } { ptr @.str.1397, i64 3, i64 0 }, ptr %a115
store { ptr, i64, i64 } %t113, ptr %a116
call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116)
%t117 = load { ptr, i64, i64 }, ptr %a114
store { ptr, i64, i64 } %t117, ptr %a119
store { ptr, i64, i64 } { ptr @.str.1398, i64 1, i64 0 }, ptr %a120
call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120)
%t121 = load { ptr, i64, i64 }, ptr %a118
%t122 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t123 = load { ptr, i64, i64 }, ptr %t122
%t124 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t123)
store { ptr, i64, i64 } %t121, 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
ret { ptr, i64, i64 } %t128
}
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
%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
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 %then2410, label %endif2412
then2410:
%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
endif2412:
store { ptr, i64, i64 } { ptr @.str.1399, 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.1400, 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 %then2413, label %endif2415
then2413:
%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)
store { ptr, i64, i64 } %t21, ptr %a10
br label %endif2415
endif2415:
%t22 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } { ptr @.str.1401, i64 6, 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.1402, i64 21, i64 0 }, ptr %a29
call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29)
%t30 = load { ptr, i64, i64 }, ptr %a27
ret { ptr, i64, i64 } %t30
}
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
%a16 = alloca { ptr, i64, i64 }, align 16
%a17 = alloca { ptr, i64, i64 }, align 16
%a18 = 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
%a28 = alloca { ptr, i64, i64 }, align 16
%a29 = alloca { ptr, i64, i64 }, align 16
%a30 = 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
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.1403, 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)
%t15 = load { ptr, i64, i64 }, ptr %a12
store { ptr, i64, i64 } %t15, ptr %a17
store { ptr, i64, i64 } { ptr @.str.1404, i64 1, i64 0 }, ptr %a18
call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18)
%t19 = load { ptr, i64, i64 }, ptr %a16
%t20 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 12
%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 } %t19, ptr %a25
store { ptr, i64, i64 } %t23, ptr %a26
call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26)
%t27 = load { ptr, i64, i64 }, ptr %a24
store { ptr, i64, i64 } %t27, ptr %a29
store { ptr, i64, i64 } { ptr @.str.1405, i64 1, i64 0 }, ptr %a30
call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30)
%t31 = load { ptr, i64, i64 }, ptr %a28
%t32 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 13
%t33 = load i64, ptr %t32
call void @finch_str_from_int(ptr %a34, i64 %t33)
%t35 = load { ptr, i64, i64 }, ptr %a34
store { ptr, i64, i64 } %t31, 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
ret { ptr, i64, i64 } %t39
}
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.from2416
logic.from2416:
br i1 %t9, label %logic.end2418, label %logic.rhs2417
logic.rhs2417:
%t10 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t10, ptr %a11
store { ptr, i64, i64 } { ptr @.str.1406, 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.rend2419
logic.rend2419:
br label %logic.end2418
logic.end2418:
%t15 = phi i1 [ true, %logic.from2416 ], [ %t14, %logic.rend2419 ]
br label %logic.from2420
logic.from2420:
br i1 %t15, label %logic.end2422, label %logic.rhs2421
logic.rhs2421:
%t16 = load { ptr, i64, i64 }, ptr %a7
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.rend2423
logic.rend2423:
br label %logic.end2422
logic.end2422:
%t21 = phi i1 [ true, %logic.from2420 ], [ %t20, %logic.rend2423 ]
br i1 %t21, label %then2424, label %endif2426
then2424:
ret { ptr, i64, i64 } { ptr @.str.1408, i64 1, i64 0 }
endif2426:
%t22 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t22, ptr %a23
store { ptr, i64, i64 } { ptr @.str.1409, 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 %then2427, label %endif2429
then2427:
ret { ptr, i64, i64 } { ptr @.str.1410, i64 5, i64 0 }
endif2429:
%t27 = load %S.ast.Type, ptr %a1
%t28 = call i1 @finch.gen.isFloat(%S.ast.Type %t27)
br i1 %t28, label %then2430, label %endif2432
then2430:
ret { ptr, i64, i64 } { ptr @.str.1411, i64 3, i64 0 }
endif2432:
%t29 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t29, ptr %a30
store { ptr, i64, i64 } { ptr @.str.1412, 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.from2433
logic.from2433:
br i1 %t33, label %logic.end2435, label %logic.rhs2434
logic.rhs2434:
%t34 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t34, ptr %a35
store { ptr, i64, i64 } { ptr @.str.1413, 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.rend2436
logic.rend2436:
br label %logic.end2435
logic.end2435:
%t39 = phi i1 [ true, %logic.from2433 ], [ %t38, %logic.rend2436 ]
br i1 %t39, label %then2437, label %endif2439
then2437:
ret { ptr, i64, i64 } { ptr @.str.1414, i64 4, i64 0 }
endif2439:
ret { ptr, i64, i64 } { ptr @.str.1415, 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
%a10 = alloca { ptr, i64, i64 }, align 16
%a11 = alloca { ptr, i64, i64 }, align 16
%a12 = 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.1416, 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.1417, i64 26, i64 0 }, ptr %a12
call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12)
%t13 = load { ptr, i64, i64 }, ptr %a10
ret { ptr, i64, i64 } %t13
}
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.1418, 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.from2440
logic.from2440:
br i1 %t8, label %logic.end2442, label %logic.rhs2441
logic.rhs2441:
%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.1419, 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.rend2443
logic.rend2443:
br label %logic.end2442
logic.end2442:
%t15 = phi i1 [ true, %logic.from2440 ], [ %t14, %logic.rend2443 ]
br label %logic.from2444
logic.from2444:
br i1 %t15, label %logic.end2446, label %logic.rhs2445
logic.rhs2445:
%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.1420, 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.rend2447
logic.rend2447:
br label %logic.end2446
logic.end2446:
%t22 = phi i1 [ true, %logic.from2444 ], [ %t21, %logic.rend2447 ]
br i1 %t22, label %then2448, label %endif2450
then2448:
ret i1 true
endif2450:
%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.1421, 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 %then2451, label %endif2453
then2451:
%t29 = load ptr, ptr %a1
%t30 = icmp eq ptr %t29, null
br i1 %t30, label %panic2454, label %ok2455
panic2454:
call void @finch_panic(ptr @.str.1422, i64 644, ptr @.str.1423)
unreachable
ok2455:
%t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 15
%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 %range2456, label %inrange2457
range2456:
call void @finch_panic_index(ptr @.str.1424, i64 644, i64 %t37, i64 %t39)
unreachable
inrange2457:
%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
endif2453:
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
%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
%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
%a50 = alloca { ptr, i64, i64 }, align 16
%a51 = alloca { ptr, i64, i64 }, align 16
%a52 = 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
%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
%a73 = 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
%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
%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
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.1425, 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 %then2458, label %endif2460
then2458:
%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 %range2461, label %inrange2462
range2461:
call void @finch_panic_index(ptr @.str.1427, i64 651, i64 0, i64 %t10)
unreachable
inrange2462:
%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.1426, i64 4, 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
ret { ptr, i64, i64 } %t19
endif2460:
%t20 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0
%t21 = load { ptr, i64, i64 }, ptr %t20
store { ptr, i64, i64 } %t21, ptr %a22
store { ptr, i64, i64 } { ptr @.str.1428, i64 3, i64 0 }, ptr %a23
%t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23)
%t25 = icmp ne i32 %t24, 0
br i1 %t25, label %then2463, label %endif2465
then2463:
%t26 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1
%t27 = load { ptr, i64, i64 }, ptr %t26
%t28 = extractvalue { ptr, i64, i64 } %t27, 1
%t29 = icmp uge i64 0, %t28
br i1 %t29, label %range2466, label %inrange2467
range2466:
call void @finch_panic_index(ptr @.str.1430, i64 654, i64 0, i64 %t28)
unreachable
inrange2467:
%t30 = extractvalue { ptr, i64, i64 } %t27, 0
%t31 = getelementptr inbounds %S.ast.Type, ptr %t30, i64 0
%t32 = load %S.ast.Type, ptr %t31
%t33 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t32)
store { ptr, i64, i64 } { ptr @.str.1429, i64 4, i64 0 }, ptr %a35
store { ptr, i64, i64 } %t33, ptr %a36
call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36)
%t37 = load { ptr, i64, i64 }, ptr %a34
store { ptr, i64, i64 } %t37, ptr %a39
store { ptr, i64, i64 } { ptr @.str.1431, i64 1, i64 0 }, ptr %a40
call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40)
%t41 = load { ptr, i64, i64 }, ptr %a38
%t42 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1
%t43 = load { ptr, i64, i64 }, ptr %t42
%t44 = extractvalue { ptr, i64, i64 } %t43, 1
%t45 = icmp uge i64 1, %t44
br i1 %t45, label %range2468, label %inrange2469
range2468:
call void @finch_panic_index(ptr @.str.1432, i64 654, i64 1, i64 %t44)
unreachable
inrange2469:
%t46 = extractvalue { ptr, i64, i64 } %t43, 0
%t47 = getelementptr inbounds %S.ast.Type, ptr %t46, i64 1
%t48 = load %S.ast.Type, ptr %t47
%t49 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t48)
store { ptr, i64, i64 } %t41, ptr %a51
store { ptr, i64, i64 } %t49, ptr %a52
call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52)
%t53 = load { ptr, i64, i64 }, ptr %a50
ret { ptr, i64, i64 } %t53
endif2465:
%t54 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0
%t55 = load { ptr, i64, i64 }, ptr %t54
store { ptr, i64, i64 } %t55, ptr %a56
store { ptr, i64, i64 } { ptr @.str.1433, i64 4, i64 0 }, ptr %a57
%t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57)
%t59 = icmp ne i32 %t58, 0
br i1 %t59, label %then2470, label %endif2472
then2470:
%t60 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3
%t61 = load { ptr, i64, i64 }, ptr %t60
%t62 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t61)
store { ptr, i64, i64 } { ptr @.str.1434, i64 2, 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.1435, i64 1, i64 0 }, ptr %a69
call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69)
%t70 = load { ptr, i64, i64 }, ptr %a67
%t71 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2
%t72 = load { ptr, i64, i64 }, ptr %t71
store { ptr, i64, i64 } %t70, ptr %a74
store { ptr, i64, i64 } %t72, ptr %a75
call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75)
%t76 = load { ptr, i64, i64 }, ptr %a73
ret { ptr, i64, i64 } %t76
endif2472:
%t77 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0
%t78 = load { ptr, i64, i64 }, ptr %t77
store { ptr, i64, i64 } %t78, ptr %a79
store { ptr, i64, i64 } { ptr @.str.1436, i64 6, i64 0 }, ptr %a80
%t81 = call i32 @finch_str_eq(ptr %a79, ptr %a80)
%t82 = icmp ne i32 %t81, 0
br i1 %t82, label %then2473, label %endif2475
then2473:
%t83 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3
%t84 = load { ptr, i64, i64 }, ptr %t83
%t85 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t84)
store { ptr, i64, i64 } { ptr @.str.1437, i64 2, 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.1438, i64 1, i64 0 }, ptr %a92
call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92)
%t93 = load { ptr, i64, i64 }, ptr %a90
%t94 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2
%t95 = load { ptr, i64, i64 }, ptr %t94
%t96 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t95)
store { ptr, i64, i64 } %t93, 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
ret { ptr, i64, i64 } %t100
endif2475:
%t101 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0
%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
ret { ptr, i64, i64 } %t105
}
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
store i64 %p0, ptr %a1
store { ptr, i64, i64 } { ptr @.str.1439, 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 %range2476, label %inrange2477
range2476:
call void @finch_panic_index(ptr @.str.1440, i64 669, i64 %t4, i64 %t6)
unreachable
inrange2477:
%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 %range2478, label %inrange2479
range2478:
call void @finch_panic_index(ptr @.str.1441, i64 669, i64 %t14, i64 %t16)
unreachable
inrange2479:
%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)
%t26 = load { ptr, i64, i64 }, ptr %a23
ret { ptr, i64, i64 } %t26
}
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
%a18 = alloca { ptr, i64, i64 }, align 16
%a19 = alloca { ptr, i64, i64 }, align 16
%a20 = alloca i64, align 16
%a28 = alloca i8, align 16
%a31 = alloca i64, align 16
%a49 = 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
%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
%a86 = alloca { ptr, i64, i64 }, align 16
%a87 = alloca { ptr, i64, i64 }, align 16
%a88 = 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
%a98 = alloca { ptr, i64, i64 }, align 16
%a99 = alloca { ptr, i64, i64 }, align 16
%a100 = 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 %panic2480, label %ok2481
panic2480:
call void @finch_panic(ptr @.str.1442, i64 673, ptr @.str.1443)
unreachable
ok2481:
%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 %panic2482, label %ok2483
panic2482:
call void @finch_panic(ptr @.str.1445, i64 674, ptr @.str.1446)
unreachable
ok2483:
%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.1444, i64 6, 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 %a18
store { ptr, i64, i64 } zeroinitializer, ptr %a19
store i64 0, ptr %a20
br label %each.cond2484
each.cond2484:
%t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1
%t22 = load i64, ptr %t21
%t23 = load i64, ptr %a20
%t24 = icmp slt i64 %t23, %t22
br i1 %t24, label %each.body2485, label %each.end2487
each.body2485:
%t25 = load ptr, ptr %a2
%t26 = getelementptr inbounds i8, ptr %t25, i64 %t23
%t27 = load i8, ptr %t26
store i8 %t27, ptr %a28
%t29 = load i8, ptr %a28
%t30 = zext i8 %t29 to i64
store i64 %t30, ptr %a31
%t32 = load i64, ptr %a31
%t33 = icmp slt i64 %t32, 0
br i1 %t33, label %then2488, label %endif2490
then2488:
%t34 = load i64, ptr %a31
%t35 = add i64 %t34, 256
store i64 %t35, ptr %a31
br label %endif2490
endif2490:
%t36 = load i64, ptr %a31
%t37 = icmp sge i64 %t36, 32
br label %logic.from2491
logic.from2491:
br i1 %t37, label %logic.rhs2492, label %logic.end2493
logic.rhs2492:
%t38 = load i64, ptr %a31
%t39 = icmp slt i64 %t38, 127
br label %logic.rend2494
logic.rend2494:
br label %logic.end2493
logic.end2493:
%t40 = phi i1 [ false, %logic.from2491 ], [ %t39, %logic.rend2494 ]
br label %logic.from2495
logic.from2495:
br i1 %t40, label %logic.rhs2496, label %logic.end2497
logic.rhs2496:
%t41 = load i8, ptr %a28
%t42 = icmp ne i8 %t41, 34
br label %logic.rend2498
logic.rend2498:
br label %logic.end2497
logic.end2497:
%t43 = phi i1 [ false, %logic.from2495 ], [ %t42, %logic.rend2498 ]
br label %logic.from2499
logic.from2499:
br i1 %t43, label %logic.rhs2500, label %logic.end2501
logic.rhs2500:
%t44 = load i8, ptr %a28
%t45 = icmp ne i8 %t44, 92
br label %logic.rend2502
logic.rend2502:
br label %logic.end2501
logic.end2501:
%t46 = phi i1 [ false, %logic.from2499 ], [ %t45, %logic.rend2502 ]
br i1 %t46, label %then2503, label %else2504
then2503:
%t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1
%t48 = load i8, ptr %a28
call void @finch_str_from_char(ptr %a49, i8 signext %t48)
%t50 = load { ptr, i64, i64 }, ptr %a49
%t51 = load i64, ptr %t47
%t52 = add i64 %t51, 1
call void @finch_arr_reserve(ptr %a19, i64 %t52, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t53 = load ptr, ptr %a19
%t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i64 %t51
store { ptr, i64, i64 } %t50, ptr %t54
store i64 %t52, ptr %t47
br label %endif2505
else2504:
%t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1
%t56 = load i64, ptr %a31
%t57 = call { ptr, i64, i64 } @finch.gen.hex(i64 %t56)
store { ptr, i64, i64 } { ptr @.str.1447, i64 1, i64 0 }, ptr %a59
store { ptr, i64, i64 } %t57, ptr %a60
call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60)
%t61 = load { ptr, i64, i64 }, ptr %a58
%t62 = load i64, ptr %t55
%t63 = add i64 %t62, 1
call void @finch_arr_reserve(ptr %a19, i64 %t63, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t64 = load ptr, ptr %a19
%t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i64 %t62
store { ptr, i64, i64 } %t61, ptr %t65
store i64 %t63, ptr %t55
br label %endif2505
endif2505:
br label %each.step2486
each.step2486:
%t66 = load i64, ptr %a20
%t67 = add i64 %t66, 1
store i64 %t67, ptr %a20
br label %each.cond2484
each.end2487:
%t68 = load ptr, ptr %a1
%t69 = icmp eq ptr %t68, null
br i1 %t69, label %panic2506, label %ok2507
panic2506:
call void @finch_panic(ptr @.str.1448, i64 687, ptr @.str.1449)
unreachable
ok2507:
%t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 2
%t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1
%t72 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t72, ptr %a74
store { ptr, i64, i64 } { ptr @.str.1450, i64 34, i64 0 }, ptr %a75
call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75)
%t76 = load { ptr, i64, i64 }, ptr %a73
%t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1
%t78 = load i64, ptr %t77
%t79 = add i64 %t78, 1
call void @finch_str_from_int(ptr %a80, i64 %t79)
%t81 = load { ptr, i64, i64 }, ptr %a80
store { ptr, i64, i64 } %t76, 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.1451, i64 9, i64 0 }, ptr %a88
call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88)
%t89 = load { ptr, i64, i64 }, ptr %a86
%t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.1452, i64 0, i64 0 }, ptr %a91
call void @finch_str_join(ptr %a92, ptr %a19, ptr %a91)
%t93 = load { ptr, i64, i64 }, ptr %a92
store { ptr, i64, i64 } %t89, ptr %a95
store { ptr, i64, i64 } %t93, ptr %a96
call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96)
%t97 = load { ptr, i64, i64 }, ptr %a94
store { ptr, i64, i64 } %t97, ptr %a99
store { ptr, i64, i64 } { ptr @.str.1453, i64 4, i64 0 }, ptr %a100
call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100)
%t101 = load { ptr, i64, i64 }, ptr %a98
%t102 = load i64, ptr %t71
%t103 = add i64 %t102, 1
call void @finch_arr_reserve(ptr %t70, i64 %t103, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t104 = load ptr, ptr %t70
%t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i64 %t102
store { ptr, i64, i64 } %t101, ptr %t105
store i64 %t103, ptr %t71
%t106 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t106, ptr %a107
call void @finch_str_copy(ptr %a108, ptr %a107)
%t109 = load { ptr, i64, i64 }, ptr %a108
ret { ptr, i64, i64 } %t109
}
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
%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
%a24 = 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 { 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.1454, 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.1455, i64 6, i64 0 }, ptr %a14
call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14)
%t15 = load { ptr, i64, i64 }, ptr %a12
%t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1
%t17 = load i64, ptr %t16
call void @finch_str_from_int(ptr %a18, i64 %t17)
%t19 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t15, 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.1456, i64 9, i64 0 }, ptr %a26
call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26)
%t27 = load { ptr, i64, i64 }, ptr %a24
%t28 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t27, 0
%t29 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1457, i64 3, i64 0 })
%t30 = insertvalue %S.gen.Val %t28, %S.ast.Type %t29, 1
%t31 = insertvalue %S.gen.Val %t30, i1 true, 2
ret %S.gen.Val %t31
}
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
%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
%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
%a62 = alloca { ptr, i64, i64 }, align 16
%a63 = alloca { ptr, i64, i64 }, align 16
%a64 = 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.1458, 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.1459, 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 %panic2508, label %ok2509
panic2508:
call void @finch_panic(ptr @.str.1460, i64 703, ptr @.str.1461)
unreachable
ok2509:
%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 %range2510, label %inrange2511
range2510:
call void @finch_panic_index(ptr @.str.1462, i64 703, i64 %t22, i64 %t24)
unreachable
inrange2511:
%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.1463, 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.1464, i64 6, 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 %a4, 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)
%t52 = load { ptr, i64, i64 }, ptr %a49
store { ptr, i64, i64 } %t52, ptr %a54
store { ptr, i64, i64 } { ptr @.str.1465, i64 6, i64 0 }, ptr %a55
call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55)
%t56 = load { ptr, i64, i64 }, ptr %a53
%t57 = load { ptr, i64, i64 }, ptr %a34
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)
%t61 = load { ptr, i64, i64 }, ptr %a58
store { ptr, i64, i64 } %t61, ptr %a63
store { ptr, i64, i64 } { ptr @.str.1466, i64 1, i64 0 }, ptr %a64
call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64)
%t65 = load { ptr, i64, i64 }, ptr %a62
call void @finch.gen.emit(ptr %t35, { ptr, i64, i64 } %t65)
%t66 = load ptr, ptr %a1
call void @finch.gen.emit(ptr %t66, { ptr, i64, i64 } { ptr @.str.1467, i64 11, i64 0 })
%t67 = load ptr, ptr %a1
%t68 = icmp eq ptr %t67, null
br i1 %t68, label %panic2512, label %ok2513
panic2512:
call void @finch_panic(ptr @.str.1468, i64 707, ptr @.str.1469)
unreachable
ok2513:
%t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 9
store i1 true, ptr %t69
%t70 = load ptr, ptr %a1
%t71 = load { ptr, i64, i64 }, ptr %a10
call void @finch.gen.label(ptr %t70, { ptr, i64, i64 } %t71)
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
%a22 = alloca { ptr, i64, i64 }, align 16
%a23 = alloca { ptr, i64, i64 }, align 16
%a24 = alloca { ptr, i64, i64 }, align 16
%a27 = alloca { ptr, i64, i64 }, align 16
%a47 = 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
%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
%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
%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
%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
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.1470, 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.1471, 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.1472, 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.1473, i64 2, 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 %a3
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
%t26 = call { ptr, i64, i64 } @finch.gen.op(ptr %t11, { ptr, i64, i64 } %t25)
store { ptr, i64, i64 } %t26, ptr %a27
%t28 = load ptr, ptr %a1
%t29 = load { ptr, i64, i64 }, ptr %a27
%t30 = load { ptr, i64, i64 }, ptr %a7
%t31 = load { ptr, i64, i64 }, ptr %a10
call void @finch.gen.condBr(ptr %t28, { ptr, i64, i64 } %t29, { ptr, i64, i64 } %t30, { ptr, i64, i64 } %t31)
%t32 = load ptr, ptr %a1
%t33 = load { ptr, i64, i64 }, ptr %a7
call void @finch.gen.label(ptr %t32, { ptr, i64, i64 } %t33)
%t34 = load ptr, ptr %a1
%t35 = load ptr, ptr %a1
%t36 = icmp eq ptr %t35, null
br i1 %t36, label %panic2514, label %ok2515
panic2514:
call void @finch_panic(ptr @.str.1474, i64 717, ptr @.str.1475)
unreachable
ok2515:
%t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 1
%t38 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 13
%t39 = load i64, ptr %t38
%t40 = load { ptr, i64, i64 }, ptr %t37
%t41 = extractvalue { ptr, i64, i64 } %t40, 1
%t42 = icmp uge i64 %t39, %t41
br i1 %t42, label %range2516, label %inrange2517
range2516:
call void @finch_panic_index(ptr @.str.1476, i64 717, i64 %t39, i64 %t41)
unreachable
inrange2517:
%t43 = extractvalue { ptr, i64, i64 } %t40, 0
%t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t39
%t45 = load { ptr, i64, i64 }, ptr %t44
%t46 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t34, { ptr, i64, i64 } %t45)
store { ptr, i64, i64 } %t46, ptr %a47
%t48 = load ptr, ptr %a1
%t49 = load { ptr, i64, i64 }, ptr %a47
store { ptr, i64, i64 } { ptr @.str.1477, i64 33, i64 0 }, ptr %a51
store { ptr, i64, i64 } %t49, ptr %a52
call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52)
%t53 = load { ptr, i64, i64 }, ptr %a50
store { ptr, i64, i64 } %t53, ptr %a55
store { ptr, i64, i64 } { ptr @.str.1478, i64 6, i64 0 }, ptr %a56
call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56)
%t57 = load { ptr, i64, i64 }, ptr %a54
%t58 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 11
%t59 = load i64, ptr %t58
call void @finch_str_from_int(ptr %a60, i64 %t59)
%t61 = load { ptr, i64, i64 }, ptr %a60
store { ptr, i64, i64 } %t57, ptr %a63
store { ptr, i64, i64 } %t61, ptr %a64
call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64)
%t65 = load { ptr, i64, i64 }, ptr %a62
store { ptr, i64, i64 } %t65, ptr %a67
store { ptr, i64, i64 } { ptr @.str.1479, i64 6, i64 0 }, ptr %a68
call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68)
%t69 = load { ptr, i64, i64 }, ptr %a66
%t70 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t69, ptr %a72
store { ptr, i64, i64 } %t70, ptr %a73
call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73)
%t74 = load { ptr, i64, i64 }, ptr %a71
store { ptr, i64, i64 } %t74, ptr %a76
store { ptr, i64, i64 } { ptr @.str.1480, i64 6, i64 0 }, ptr %a77
call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77)
%t78 = load { ptr, i64, i64 }, ptr %a75
%t79 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t78, ptr %a81
store { ptr, i64, i64 } %t79, 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 %a85
store { ptr, i64, i64 } { ptr @.str.1481, i64 1, i64 0 }, ptr %a86
call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86)
%t87 = load { ptr, i64, i64 }, ptr %a84
call void @finch.gen.emit(ptr %t48, { ptr, i64, i64 } %t87)
%t88 = load ptr, ptr %a1
call void @finch.gen.emit(ptr %t88, { ptr, i64, i64 } { ptr @.str.1482, i64 11, i64 0 })
%t89 = load ptr, ptr %a1
%t90 = icmp eq ptr %t89, null
br i1 %t90, label %panic2518, label %ok2519
panic2518:
call void @finch_panic(ptr @.str.1483, i64 720, ptr @.str.1484)
unreachable
ok2519:
%t91 = getelementptr inbounds %S.gen.Gen, ptr %t89, i32 0, i32 9
store i1 true, ptr %t91
%t92 = load ptr, ptr %a1
%t93 = load { ptr, i64, i64 }, ptr %a10
call void @finch.gen.label(ptr %t92, { ptr, i64, i64 } %t93)
ret void
}
define internal void @finch.copy.S_gen_Saved(ptr %dst, ptr %src) {
entry:
%t1 = load %S.gen.Saved, ptr %src
store %S.gen.Saved %t1, ptr %dst
%t2 = getelementptr inbounds %S.gen.Saved, ptr %dst, i32 0, i32 0
%t3 = getelementptr inbounds %S.gen.Saved, ptr %src, i32 0, i32 0
call void @finch.copy.arr_str(ptr %t2, ptr %t3)
%t4 = getelementptr inbounds %S.gen.Saved, ptr %dst, i32 0, i32 1
%t5 = getelementptr inbounds %S.gen.Saved, ptr %src, i32 0, i32 1
call void @finch.copy.arr_str(ptr %t4, ptr %t5)
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
%a49 = alloca { ptr, i64, i64 }, align 16
%a50 = alloca { ptr, i64, i64 }, align 16
%a59 = alloca %S.gen.Saved, align 16
%a60 = alloca %S.gen.Saved, align 16
store ptr %p0, ptr %a1
%t2 = load ptr, ptr %a1
%t3 = icmp eq ptr %t2, null
br i1 %t3, label %panic2520, label %ok2521
panic2520:
call void @finch_panic(ptr @.str.1485, i64 735, ptr @.str.1486)
unreachable
ok2521:
%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 %panic2522, label %ok2523
panic2522:
call void @finch_panic(ptr @.str.1487, i64 735, ptr @.str.1488)
unreachable
ok2523:
%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 %panic2524, label %ok2525
panic2524:
call void @finch_panic(ptr @.str.1489, i64 735, ptr @.str.1490)
unreachable
ok2525:
%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 %panic2526, label %ok2527
panic2526:
call void @finch_panic(ptr @.str.1491, i64 735, ptr @.str.1492)
unreachable
ok2527:
%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 %panic2528, label %ok2529
panic2528:
call void @finch_panic(ptr @.str.1493, i64 735, ptr @.str.1494)
unreachable
ok2529:
%t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 34
%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 %panic2530, label %ok2531
panic2530:
call void @finch_panic(ptr @.str.1495, i64 736, ptr @.str.1496)
unreachable
ok2531:
%t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 34
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 %panic2532, label %ok2533
panic2532:
call void @finch_panic(ptr @.str.1497, i64 738, ptr @.str.1498)
unreachable
ok2533:
%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
store { ptr, i64, i64 } %t44, ptr %t41
%t45 = load { ptr, i64, i64 }, ptr %a37
%t46 = load ptr, ptr %a1
%t47 = icmp eq ptr %t46, null
br i1 %t47, label %panic2534, label %ok2535
panic2534:
call void @finch_panic(ptr @.str.1499, i64 739, ptr @.str.1500)
unreachable
ok2535:
%t48 = getelementptr inbounds %S.gen.Gen, ptr %t46, i32 0, i32 5
store { ptr, i64, i64 } %t45, ptr %a49
call void @finch.copy.arr_str(ptr %a50, ptr %a49)
%t51 = load { ptr, i64, i64 }, ptr %a50
store { ptr, i64, i64 } %t51, ptr %t48
%t52 = load ptr, ptr %a1
%t53 = icmp eq ptr %t52, null
br i1 %t53, label %panic2536, label %ok2537
panic2536:
call void @finch_panic(ptr @.str.1501, i64 740, ptr @.str.1502)
unreachable
ok2537:
%t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 6
store i64 0, ptr %t54
%t55 = load ptr, ptr %a1
%t56 = icmp eq ptr %t55, null
br i1 %t56, label %panic2538, label %ok2539
panic2538:
call void @finch_panic(ptr @.str.1503, i64 741, ptr @.str.1504)
unreachable
ok2539:
%t57 = getelementptr inbounds %S.gen.Gen, ptr %t55, i32 0, i32 9
store i1 false, ptr %t57
%t58 = load %S.gen.Saved, ptr %a33
store %S.gen.Saved %t58, ptr %a59
call void @finch.copy.S_gen_Saved(ptr %a60, ptr %a59)
%t61 = load %S.gen.Saved, ptr %a60
ret %S.gen.Saved %t61
}
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
%a24 = alloca { ptr, i64, i64 }, align 16
%a25 = alloca { ptr, i64, i64 }, align 16
%a26 = 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
%a39 = alloca { ptr, i64, i64 }, align 16
%a40 = alloca { ptr, i64, i64 }, align 16
%a41 = alloca { ptr, i64, i64 }, align 16
%a52 = alloca { ptr, i64, i64 }, align 16
%a53 = alloca { ptr, i64, i64 }, align 16
%a60 = alloca { ptr, i64, i64 }, align 16
%a61 = 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 %panic2540, label %ok2541
panic2540:
call void @finch_panic(ptr @.str.1505, i64 746, ptr @.str.1506)
unreachable
ok2541:
%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.1507, 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 %panic2542, label %ok2543
panic2542:
call void @finch_panic(ptr @.str.1508, i64 746, ptr @.str.1509)
unreachable
ok2543:
%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.1510, 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)
%t23 = load { ptr, i64, i64 }, ptr %a20
store { ptr, i64, i64 } %t23, ptr %a25
store { ptr, i64, i64 } { ptr @.str.1511, i64 1, 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, ptr %a1
%t29 = icmp eq ptr %t28, null
br i1 %t29, label %panic2544, label %ok2545
panic2544:
call void @finch_panic(ptr @.str.1512, i64 746, ptr @.str.1513)
unreachable
ok2545:
%t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 4
%t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.1514, i64 1, i64 0 }, ptr %a32
call void @finch_str_join(ptr %a33, ptr %t30, ptr %a32)
%t34 = load { ptr, i64, i64 }, ptr %a33
store { ptr, i64, i64 } %t27, 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.1515, i64 3, i64 0 }, ptr %a41
call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41)
%t42 = load { ptr, i64, i64 }, ptr %a39
%t43 = load i64, ptr %t7
%t44 = add i64 %t43, 1
call void @finch_arr_reserve(ptr %t6, i64 %t44, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t45 = load ptr, ptr %t6
%t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i64 %t43
store { ptr, i64, i64 } %t42, ptr %t46
store i64 %t44, ptr %t7
%t47 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 0
%t48 = load { ptr, i64, i64 }, ptr %t47
%t49 = load ptr, ptr %a1
%t50 = icmp eq ptr %t49, null
br i1 %t50, label %panic2546, label %ok2547
panic2546:
call void @finch_panic(ptr @.str.1516, i64 747, ptr @.str.1517)
unreachable
ok2547:
%t51 = getelementptr inbounds %S.gen.Gen, ptr %t49, i32 0, i32 4
store { ptr, i64, i64 } %t48, ptr %a52
call void @finch.copy.arr_str(ptr %a53, ptr %a52)
%t54 = load { ptr, i64, i64 }, ptr %a53
store { ptr, i64, i64 } %t54, ptr %t51
%t55 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 1
%t56 = load { ptr, i64, i64 }, ptr %t55
%t57 = load ptr, ptr %a1
%t58 = icmp eq ptr %t57, null
br i1 %t58, label %panic2548, label %ok2549
panic2548:
call void @finch_panic(ptr @.str.1518, i64 748, ptr @.str.1519)
unreachable
ok2549:
%t59 = getelementptr inbounds %S.gen.Gen, ptr %t57, i32 0, i32 5
store { ptr, i64, i64 } %t56, ptr %a60
call void @finch.copy.arr_str(ptr %a61, ptr %a60)
%t62 = load { ptr, i64, i64 }, ptr %a61
store { ptr, i64, i64 } %t62, ptr %t59
%t63 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 2
%t64 = load i64, ptr %t63
%t65 = load ptr, ptr %a1
%t66 = icmp eq ptr %t65, null
br i1 %t66, label %panic2550, label %ok2551
panic2550:
call void @finch_panic(ptr @.str.1520, i64 749, ptr @.str.1521)
unreachable
ok2551:
%t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 6
store i64 %t64, ptr %t67
%t68 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 3
%t69 = load i1, ptr %t68
%t70 = load ptr, ptr %a1
%t71 = icmp eq ptr %t70, null
br i1 %t71, label %panic2552, label %ok2553
panic2552:
call void @finch_panic(ptr @.str.1522, i64 750, ptr @.str.1523)
unreachable
ok2553:
%t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 9
store i1 %t69, ptr %t72
%t73 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 4
%t74 = load i64, ptr %t73
%t75 = load ptr, ptr %a1
%t76 = icmp eq ptr %t75, null
br i1 %t76, label %panic2554, label %ok2555
panic2554:
call void @finch_panic(ptr @.str.1524, i64 751, ptr @.str.1525)
unreachable
ok2555:
%t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 34
store i64 %t74, ptr %t77
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
%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
%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
%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
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.1526, 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.1527, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1528, 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.1529, 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.1530, 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.1531, 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.1532, 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.1533, 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.1534, i64 2, i64 0 }, ptr %a33
call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33)
%t34 = load { ptr, i64, i64 }, ptr %a31
%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)
%t39 = load { ptr, i64, i64 }, ptr %a36
%t40 = call { ptr, i64, i64 } @finch.gen.op(ptr %t25, { ptr, i64, i64 } %t39)
store { ptr, i64, i64 } %t40, ptr %a41
%t42 = load ptr, ptr %a1
%t43 = load { ptr, i64, i64 }, ptr %a41
%t44 = load { ptr, i64, i64 }, ptr %a13
%t45 = load { ptr, i64, i64 }, ptr %a16
call void @finch.gen.condBr(ptr %t42, { ptr, i64, i64 } %t43, { ptr, i64, i64 } %t44, { ptr, i64, i64 } %t45)
%t46 = load ptr, ptr %a1
%t47 = load { ptr, i64, i64 }, ptr %a13
call void @finch.gen.label(ptr %t46, { ptr, i64, i64 } %t47)
%t48 = load { ptr, i64, i64 }, ptr %a5
store { ptr, i64, i64 } %t48, ptr %a49
call void @finch_str_copy(ptr %a50, ptr %a49)
%t51 = load { ptr, i64, i64 }, ptr %a50
%t52 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t52, ptr %a53
call void @finch_str_copy(ptr %a54, ptr %a53)
%t55 = load { ptr, i64, i64 }, ptr %a54
%t56 = load { ptr, i64, i64 }, ptr %a16
store { ptr, i64, i64 } %t56, ptr %a57
call void @finch_str_copy(ptr %a58, ptr %a57)
%t59 = load { ptr, i64, i64 }, ptr %a58
%t60 = load { ptr, i64, i64 }, ptr %a24
store { ptr, i64, i64 } %t60, ptr %a61
call void @finch_str_copy(ptr %a62, ptr %a61)
%t63 = load { ptr, i64, i64 }, ptr %a62
%t64 = mul i64 4, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)
%t65 = call ptr @finch_alloc(i64 %t64)
%t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 0
store { ptr, i64, i64 } %t51, ptr %t66
%t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 1
store { ptr, i64, i64 } %t55, ptr %t67
%t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 2
store { ptr, i64, i64 } %t59, ptr %t68
%t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 3
store { ptr, i64, i64 } %t63, ptr %t69
%t70 = insertvalue { ptr, i64, i64 } undef, ptr %t65, 0
%t71 = insertvalue { ptr, i64, i64 } %t70, i64 4, 1
%t72 = insertvalue { ptr, i64, i64 } %t71, i64 4, 2
ret { ptr, i64, i64 } %t72
}
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
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 %range2556, label %inrange2557
range2556:
call void @finch_panic_index(ptr @.str.1536, i64 771, i64 0, i64 %t5)
unreachable
inrange2557:
%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.1535, 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.1538, 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.1539, i64 3, i64 0 }, ptr %a21
call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21)
%t22 = load { ptr, i64, i64 }, ptr %a19
%t23 = call { ptr, i64, i64 } @finch.gen.op(ptr %t13, { ptr, i64, i64 } %t22)
%t24 = load { ptr, i64, i64 }, ptr %a2
%t25 = extractvalue { ptr, i64, i64 } %t24, 1
%t26 = icmp uge i64 0, %t25
br i1 %t26, label %range2558, label %inrange2559
range2558:
call void @finch_panic_index(ptr @.str.1540, i64 772, i64 0, i64 %t25)
unreachable
inrange2559:
%t27 = extractvalue { ptr, i64, i64 } %t24, 0
%t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t27, i64 0
%t29 = load { ptr, i64, i64 }, ptr %t28
call void @finch.gen.store(ptr %t12, { ptr, i64, i64 } { ptr @.str.1537, i64 3, i64 0 }, { ptr, i64, i64 } %t23, { ptr, i64, i64 } %t29)
%t30 = load ptr, ptr %a1
%t31 = load { ptr, i64, i64 }, ptr %a2
%t32 = extractvalue { ptr, i64, i64 } %t31, 1
%t33 = icmp uge i64 1, %t32
br i1 %t33, label %range2560, label %inrange2561
range2560:
call void @finch_panic_index(ptr @.str.1541, i64 773, i64 1, i64 %t32)
unreachable
inrange2561:
%t34 = extractvalue { ptr, i64, i64 } %t31, 0
%t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i64 1
%t36 = load { ptr, i64, i64 }, ptr %t35
call void @finch.gen.br(ptr %t30, { ptr, i64, i64 } %t36)
%t37 = load ptr, ptr %a1
%t38 = load { ptr, i64, i64 }, ptr %a2
%t39 = extractvalue { ptr, i64, i64 } %t38, 1
%t40 = icmp uge i64 2, %t39
br i1 %t40, label %range2562, label %inrange2563
range2562:
call void @finch_panic_index(ptr @.str.1542, i64 774, i64 2, i64 %t39)
unreachable
inrange2563:
%t41 = extractvalue { ptr, i64, i64 } %t38, 0
%t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i64 2
%t43 = load { ptr, i64, i64 }, ptr %t42
call void @finch.gen.label(ptr %t37, { ptr, i64, i64 } %t43)
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
%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
%a32 = 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
%a45 = alloca { ptr, i64, i64 }, align 16
%a46 = 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
%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
%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
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.1543, 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 %then2564, label %else2565
then2564:
%t11 = load ptr, ptr %a1
%t12 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.1544, 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.1545, i64 6, 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 %a3
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 %a27
store { ptr, i64, i64 } { ptr @.str.1546, i64 1, i64 0 }, ptr %a28
call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28)
%t29 = load { ptr, i64, i64 }, ptr %a26
call void @finch.gen.emit(ptr %t11, { ptr, i64, i64 } %t29)
br label %endif2566
else2565:
%t30 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0
%t31 = load { ptr, i64, i64 }, ptr %t30
store { ptr, i64, i64 } %t31, ptr %a32
store { ptr, i64, i64 } { ptr @.str.1547, i64 5, i64 0 }, ptr %a33
%t34 = call i32 @finch_str_eq(ptr %a32, ptr %a33)
%t35 = icmp ne i32 %t34, 0
br label %logic.from2567
logic.from2567:
br i1 %t35, label %logic.end2569, label %logic.rhs2568
logic.rhs2568:
%t36 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0
%t37 = load { ptr, i64, i64 }, ptr %t36
store { ptr, i64, i64 } %t37, ptr %a38
store { ptr, i64, i64 } { ptr @.str.1548, i64 3, i64 0 }, ptr %a39
%t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39)
%t41 = icmp ne i32 %t40, 0
br label %logic.rend2570
logic.rend2570:
br label %logic.end2569
logic.end2569:
%t42 = phi i1 [ true, %logic.from2567 ], [ %t41, %logic.rend2570 ]
br label %logic.from2571
logic.from2571:
br i1 %t42, label %logic.end2573, label %logic.rhs2572
logic.rhs2572:
%t43 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0
%t44 = load { ptr, i64, i64 }, ptr %t43
store { ptr, i64, i64 } %t44, ptr %a45
store { ptr, i64, i64 } { ptr @.str.1549, 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.from2574
logic.from2574:
br i1 %t48, label %logic.rhs2575, label %logic.end2576
logic.rhs2575:
%t49 = load ptr, ptr %a1
%t50 = load %S.ast.Type, ptr %a4
%t51 = call i1 @finch.gen.owning(ptr %t49, %S.ast.Type %t50)
br label %logic.rend2577
logic.rend2577:
br label %logic.end2576
logic.end2576:
%t52 = phi i1 [ false, %logic.from2574 ], [ %t51, %logic.rend2577 ]
br label %logic.rend2578
logic.rend2578:
br label %logic.end2573
logic.end2573:
%t53 = phi i1 [ true, %logic.from2571 ], [ %t52, %logic.rend2578 ]
br i1 %t53, label %then2579, label %else2580
then2579:
%t54 = load ptr, ptr %a1
%t55 = load ptr, ptr %a1
%t56 = load %S.ast.Type, ptr %a4
%t57 = call { ptr, i64, i64 } @finch.gen.copyFn(ptr %t55, %S.ast.Type %t56)
store { ptr, i64, i64 } { ptr @.str.1550, i64 10, i64 0 }, ptr %a59
store { ptr, i64, i64 } %t57, ptr %a60
call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60)
%t61 = load { ptr, i64, i64 }, ptr %a58
store { ptr, i64, i64 } %t61, ptr %a63
store { ptr, i64, i64 } { ptr @.str.1551, 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 = load { ptr, i64, i64 }, ptr %a2
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)
%t70 = load { ptr, i64, i64 }, ptr %a67
store { ptr, i64, i64 } %t70, ptr %a72
store { ptr, i64, i64 } { ptr @.str.1552, i64 6, i64 0 }, ptr %a73
call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73)
%t74 = load { ptr, i64, i64 }, ptr %a71
%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)
%t79 = load { ptr, i64, i64 }, ptr %a76
store { ptr, i64, i64 } %t79, ptr %a81
store { ptr, i64, i64 } { ptr @.str.1553, i64 1, i64 0 }, ptr %a82
call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82)
%t83 = load { ptr, i64, i64 }, ptr %a80
call void @finch.gen.emit(ptr %t54, { ptr, i64, i64 } %t83)
br label %endif2581
else2580:
%t84 = load ptr, ptr %a1
%t85 = load ptr, ptr %a1
%t86 = load %S.ast.Type, ptr %a4
%t87 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t85, %S.ast.Type %t86)
%t88 = load ptr, ptr %a1
%t89 = load ptr, ptr %a1
%t90 = load %S.ast.Type, ptr %a4
%t91 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t89, %S.ast.Type %t90)
%t92 = load { ptr, i64, i64 }, ptr %a3
%t93 = call { ptr, i64, i64 } @finch.gen.load(ptr %t88, { ptr, i64, i64 } %t91, { ptr, i64, i64 } %t92)
%t94 = load { ptr, i64, i64 }, ptr %a2
call void @finch.gen.store(ptr %t84, { ptr, i64, i64 } %t87, { ptr, i64, i64 } %t93, { ptr, i64, i64 } %t94)
br label %endif2581
endif2581:
br label %endif2566
endif2566:
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
%a9 = alloca { ptr, i64, i64 }, align 16
%a17 = alloca { ptr, i64, i64 }, align 16
%a18 = alloca { ptr, i64, i64 }, align 16
%a25 = alloca { ptr, i64, i64 }, align 16
%a26 = alloca { ptr, i64, i64 }, align 16
%a34 = alloca %S.gen.Saved, align 16
%a37 = alloca { ptr, i64, i64 }, align 16
%a38 = alloca { ptr, i64, i64 }, align 16
%a48 = alloca %S.ast.Type, align 16
%a49 = alloca %S.ast.Type, align 16
%a51 = alloca %S.ast.Type, 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
%a69 = alloca { ptr, i64, i64 }, align 16
%a72 = alloca { ptr, i64, i64 }, align 16
%a77 = 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
%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
%a99 = alloca { ptr, i64, i64 }, align 16
%a100 = 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
%a111 = alloca { ptr, i64, i64 }, align 16
%a114 = 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
%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
%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
%a156 = alloca { ptr, i64, i64 }, align 16
%a157 = 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
%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
%a206 = alloca { ptr, i64, i64 }, align 16
%a210 = alloca { ptr, i64, i64 }, align 16
%a220 = alloca { ptr, i64, i64 }, align 16
%a230 = alloca { ptr, i64, i64 }, align 16
%a233 = alloca { ptr, i64, i64 }, align 16
%a236 = 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
%a248 = 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
%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
%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
%a329 = alloca %S.gen.StructDef, align 16
%a330 = alloca %S.gen.StructDef, align 16
%a332 = alloca %S.gen.StructDef, align 16
%a336 = alloca { ptr, i64, i64 }, align 16
%a345 = alloca 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
%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
%a383 = 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
%a390 = alloca { ptr, i64, i64 }, align 16
%a391 = alloca { ptr, i64, i64 }, align 16
%a392 = 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
%a409 = 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
%a436 = alloca { ptr, i64, i64 }, align 16
%a437 = 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.1554, i64 12, 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 %a9
%t10 = load ptr, ptr %a1
%t11 = icmp eq ptr %t10, null
br i1 %t11, label %panic2582, label %ok2583
panic2582:
call void @finch_panic(ptr @.str.1555, i64 789, ptr @.str.1556)
unreachable
ok2583:
%t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 21
%t13 = load { ptr, i64, i64 }, ptr %t12
%t14 = load { ptr, i64, i64 }, ptr %a9
%t15 = call i1 @finch.gen.has({ ptr, i64, i64 } %t13, { ptr, i64, i64 } %t14)
br i1 %t15, label %then2584, label %endif2586
then2584:
%t16 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t16, ptr %a17
call void @finch_str_copy(ptr %a18, ptr %a17)
%t19 = load { ptr, i64, i64 }, ptr %a18
ret { ptr, i64, i64 } %t19
endif2586:
%t20 = load ptr, ptr %a1
%t21 = icmp eq ptr %t20, null
br i1 %t21, label %panic2587, label %ok2588
panic2587:
call void @finch_panic(ptr @.str.1557, i64 792, ptr @.str.1558)
unreachable
ok2588:
%t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 21
%t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1
%t24 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t24, ptr %a25
call void @finch_str_copy(ptr %a26, ptr %a25)
%t27 = load { ptr, i64, i64 }, ptr %a26
%t28 = load i64, ptr %t23
%t29 = add i64 %t28, 1
call void @finch_arr_reserve(ptr %t22, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t30 = load ptr, ptr %t22
%t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28
store { ptr, i64, i64 } %t27, ptr %t31
store i64 %t29, ptr %t23
%t32 = load ptr, ptr %a1
%t33 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t32)
store %S.gen.Saved %t33, ptr %a34
%t35 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0
%t36 = load { ptr, i64, i64 }, ptr %t35
store { ptr, i64, i64 } %t36, ptr %a37
store { ptr, i64, i64 } { ptr @.str.1559, i64 5, i64 0 }, ptr %a38
%t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38)
%t40 = icmp ne i32 %t39, 0
br i1 %t40, label %then2589, label %else2590
then2589:
%t41 = getelementptr inbounds %S.ast.Type, ptr %a2, 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 %range2592, label %inrange2593
range2592:
call void @finch_panic_index(ptr @.str.1560, i64 795, i64 0, i64 %t43)
unreachable
inrange2593:
%t45 = extractvalue { ptr, i64, i64 } %t42, 0
%t46 = getelementptr inbounds %S.ast.Type, ptr %t45, i64 0
%t47 = load %S.ast.Type, ptr %t46
store %S.ast.Type %t47, ptr %a48
call void @finch.copy.S_ast_Type(ptr %a49, ptr %a48)
%t50 = load %S.ast.Type, ptr %a49
store %S.ast.Type %t50, ptr %a51
%t52 = load ptr, ptr %a1
%t53 = load ptr, ptr %a1
%t54 = load %S.ast.Type, ptr %a51
%t55 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t53, %S.ast.Type %t54)
store { ptr, i64, i64 } { ptr @.str.1561, i64 55, 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
store { ptr, i64, i64 } %t59, ptr %a61
store { ptr, i64, i64 } { ptr @.str.1562, i64 1, i64 0 }, ptr %a62
call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62)
%t63 = load { ptr, i64, i64 }, ptr %a60
call void @finch.gen.emit(ptr %t52, { ptr, i64, i64 } %t63)
%t64 = load ptr, ptr %a1
%t65 = load %S.ast.Type, ptr %a51
%t66 = call i1 @finch.gen.owning(ptr %t64, %S.ast.Type %t65)
br i1 %t66, label %then2594, label %endif2596
then2594:
%t67 = load ptr, ptr %a1
%t68 = call { ptr, i64, i64 } @finch.gen.load(ptr %t67, { ptr, i64, i64 } { ptr @.str.1563, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1564, i64 4, i64 0 })
store { ptr, i64, i64 } %t68, ptr %a69
%t70 = load ptr, ptr %a1
%t71 = call { ptr, i64, i64 } @finch.gen.load(ptr %t70, { ptr, i64, i64 } { ptr @.str.1565, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1566, i64 4, i64 0 })
store { ptr, i64, i64 } %t71, ptr %a72
%t73 = load ptr, ptr %a1
%t74 = load ptr, ptr %a1
%t75 = call { ptr, i64, i64 } @finch.gen.op(ptr %t74, { ptr, i64, i64 } { ptr @.str.1568, i64 64, i64 0 })
%t76 = call { ptr, i64, i64 } @finch.gen.load(ptr %t73, { ptr, i64, i64 } { ptr @.str.1567, i64 3, i64 0 }, { ptr, i64, i64 } %t75)
store { ptr, i64, i64 } %t76, ptr %a77
%t78 = load ptr, ptr %a1
%t79 = load { ptr, i64, i64 }, ptr %a77
%t80 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t78, { ptr, i64, i64 } %t79)
store { ptr, i64, i64 } %t80, ptr %a81
%t82 = load ptr, ptr %a1
%t83 = load ptr, ptr %a1
%t84 = load %S.ast.Type, ptr %a51
%t85 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t83, %S.ast.Type %t84)
store { ptr, i64, i64 } { ptr @.str.1569, i64 23, 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.1570, i64 6, i64 0 }, ptr %a92
call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92)
%t93 = load { ptr, i64, i64 }, ptr %a90
%t94 = load { ptr, i64, i64 }, ptr %a69
store { ptr, i64, i64 } %t93, ptr %a96
store { ptr, i64, i64 } %t94, ptr %a97
call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97)
%t98 = load { ptr, i64, i64 }, ptr %a95
store { ptr, i64, i64 } %t98, ptr %a100
store { ptr, i64, i64 } { ptr @.str.1571, i64 6, 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, i64, i64 }, ptr %a81
%t104 = extractvalue { ptr, i64, i64 } %t103, 1
%t105 = icmp uge i64 3, %t104
br i1 %t105, label %range2597, label %inrange2598
range2597:
call void @finch_panic_index(ptr @.str.1572, i64 802, i64 3, i64 %t104)
unreachable
inrange2598:
%t106 = extractvalue { ptr, i64, i64 } %t103, 0
%t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t106, i64 3
%t108 = load { ptr, i64, i64 }, ptr %t107
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)
%t112 = load { ptr, i64, i64 }, ptr %a109
%t113 = call { ptr, i64, i64 } @finch.gen.op(ptr %t82, { ptr, i64, i64 } %t112)
store { ptr, i64, i64 } %t113, ptr %a114
%t115 = load ptr, ptr %a1
%t116 = load ptr, ptr %a1
%t117 = load %S.ast.Type, ptr %a51
%t118 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t116, %S.ast.Type %t117)
store { ptr, i64, i64 } { ptr @.str.1573, i64 23, i64 0 }, ptr %a120
store { ptr, i64, i64 } %t118, ptr %a121
call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121)
%t122 = load { ptr, i64, i64 }, ptr %a119
store { ptr, i64, i64 } %t122, ptr %a124
store { ptr, i64, i64 } { ptr @.str.1574, i64 6, i64 0 }, ptr %a125
call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125)
%t126 = load { ptr, i64, i64 }, ptr %a123
%t127 = load { ptr, i64, i64 }, ptr %a72
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)
%t131 = load { ptr, i64, i64 }, ptr %a128
store { ptr, i64, i64 } %t131, ptr %a133
store { ptr, i64, i64 } { ptr @.str.1575, i64 6, i64 0 }, ptr %a134
call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134)
%t135 = load { ptr, i64, i64 }, ptr %a132
%t136 = load { ptr, i64, i64 }, ptr %a81
%t137 = extractvalue { ptr, i64, i64 } %t136, 1
%t138 = icmp uge i64 3, %t137
br i1 %t138, label %range2599, label %inrange2600
range2599:
call void @finch_panic_index(ptr @.str.1576, i64 803, i64 3, i64 %t137)
unreachable
inrange2600:
%t139 = extractvalue { ptr, i64, i64 } %t136, 0
%t140 = getelementptr inbounds { ptr, i64, i64 }, ptr %t139, i64 3
%t141 = load { ptr, i64, i64 }, ptr %t140
store { ptr, i64, i64 } %t135, ptr %a143
store { ptr, i64, i64 } %t141, ptr %a144
call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144)
%t145 = load { ptr, i64, i64 }, ptr %a142
%t146 = call { ptr, i64, i64 } @finch.gen.op(ptr %t115, { ptr, i64, i64 } %t145)
store { ptr, i64, i64 } %t146, ptr %a147
%t148 = load ptr, ptr %a1
%t149 = load { ptr, i64, i64 }, ptr %a114
%t150 = load { ptr, i64, i64 }, ptr %a147
%t151 = load %S.ast.Type, ptr %a51
call void @finch.gen.copyAt(ptr %t148, { ptr, i64, i64 } %t149, { ptr, i64, i64 } %t150, %S.ast.Type %t151)
%t152 = load ptr, ptr %a1
%t153 = load { ptr, i64, i64 }, ptr %a81
call void @finch.gen.loopEnd(ptr %t152, { ptr, i64, i64 } %t153)
br label %endif2596
endif2596:
br label %endif2591
else2590:
%t154 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0
%t155 = load { ptr, i64, i64 }, ptr %t154
store { ptr, i64, i64 } %t155, ptr %a156
store { ptr, i64, i64 } { ptr @.str.1577, i64 3, i64 0 }, ptr %a157
%t158 = call i32 @finch_str_eq(ptr %a156, ptr %a157)
%t159 = icmp ne i32 %t158, 0
br i1 %t159, label %then2601, label %else2602
then2601:
%t160 = load ptr, ptr %a1
%t161 = load ptr, ptr %a1
%t162 = load %S.ast.Type, ptr %a2
%t163 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t161, %S.ast.Type %t162)
store { ptr, i64, i64 } { ptr @.str.1578, i64 55, i64 0 }, ptr %a165
store { ptr, i64, i64 } %t163, ptr %a166
call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166)
%t167 = load { ptr, i64, i64 }, ptr %a164
store { ptr, i64, i64 } %t167, ptr %a169
store { ptr, i64, i64 } { ptr @.str.1579, i64 1, i64 0 }, ptr %a170
call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170)
%t171 = load { ptr, i64, i64 }, ptr %a168
call void @finch.gen.emit(ptr %t160, { ptr, i64, i64 } %t171)
%t172 = load ptr, ptr %a1
%t173 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t174 = load { ptr, i64, i64 }, ptr %t173
%t175 = extractvalue { ptr, i64, i64 } %t174, 1
%t176 = icmp uge i64 0, %t175
br i1 %t176, label %range2604, label %inrange2605
range2604:
call void @finch_panic_index(ptr @.str.1580, i64 809, i64 0, i64 %t175)
unreachable
inrange2605:
%t177 = extractvalue { ptr, i64, i64 } %t174, 0
%t178 = getelementptr inbounds %S.ast.Type, ptr %t177, i64 0
%t179 = load %S.ast.Type, ptr %t178
%t180 = call i1 @finch.gen.owning(ptr %t172, %S.ast.Type %t179)
br label %logic.from2606
logic.from2606:
br i1 %t180, label %logic.end2608, label %logic.rhs2607
logic.rhs2607:
%t181 = load ptr, ptr %a1
%t182 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t183 = load { ptr, i64, i64 }, ptr %t182
%t184 = extractvalue { ptr, i64, i64 } %t183, 1
%t185 = icmp uge i64 1, %t184
br i1 %t185, label %range2609, label %inrange2610
range2609:
call void @finch_panic_index(ptr @.str.1581, i64 809, i64 1, i64 %t184)
unreachable
inrange2610:
%t186 = extractvalue { ptr, i64, i64 } %t183, 0
%t187 = getelementptr inbounds %S.ast.Type, ptr %t186, i64 1
%t188 = load %S.ast.Type, ptr %t187
%t189 = call i1 @finch.gen.owning(ptr %t181, %S.ast.Type %t188)
br label %logic.rend2611
logic.rend2611:
br label %logic.end2608
logic.end2608:
%t190 = phi i1 [ true, %logic.from2606 ], [ %t189, %logic.rend2611 ]
br i1 %t190, label %then2612, label %endif2614
then2612:
%t191 = load ptr, ptr %a1
%t192 = load ptr, ptr %a1
%t193 = load ptr, ptr %a1
%t194 = load %S.ast.Type, ptr %a2
%t195 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t193, %S.ast.Type %t194)
store { ptr, i64, i64 } { ptr @.str.1583, i64 23, 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.1584, i64 24, i64 0 }, ptr %a202
call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202)
%t203 = load { ptr, i64, i64 }, ptr %a200
%t204 = call { ptr, i64, i64 } @finch.gen.op(ptr %t192, { ptr, i64, i64 } %t203)
%t205 = call { ptr, i64, i64 } @finch.gen.load(ptr %t191, { ptr, i64, i64 } { ptr @.str.1582, i64 3, i64 0 }, { ptr, i64, i64 } %t204)
store { ptr, i64, i64 } %t205, ptr %a206
%t207 = load ptr, ptr %a1
%t208 = load { ptr, i64, i64 }, ptr %a206
%t209 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t207, { ptr, i64, i64 } %t208)
store { ptr, i64, i64 } %t209, ptr %a210
%t211 = load ptr, ptr %a1
%t212 = load %S.ast.Type, ptr %a2
%t213 = load { ptr, i64, i64 }, ptr %a210
%t214 = extractvalue { ptr, i64, i64 } %t213, 1
%t215 = icmp uge i64 3, %t214
br i1 %t215, label %range2615, label %inrange2616
range2615:
call void @finch_panic_index(ptr @.str.1586, i64 813, i64 3, i64 %t214)
unreachable
inrange2616:
%t216 = extractvalue { ptr, i64, i64 } %t213, 0
%t217 = getelementptr inbounds { ptr, i64, i64 }, ptr %t216, i64 3
%t218 = load { ptr, i64, i64 }, ptr %t217
%t219 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t211, { ptr, i64, i64 } { ptr @.str.1585, i64 4, i64 0 }, %S.ast.Type %t212, { ptr, i64, i64 } %t218)
store { ptr, i64, i64 } %t219, ptr %a220
%t221 = load ptr, ptr %a1
%t222 = load %S.ast.Type, ptr %a2
%t223 = load { ptr, i64, i64 }, ptr %a210
%t224 = extractvalue { ptr, i64, i64 } %t223, 1
%t225 = icmp uge i64 3, %t224
br i1 %t225, label %range2617, label %inrange2618
range2617:
call void @finch_panic_index(ptr @.str.1588, i64 814, i64 3, i64 %t224)
unreachable
inrange2618:
%t226 = extractvalue { ptr, i64, i64 } %t223, 0
%t227 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 3
%t228 = load { ptr, i64, i64 }, ptr %t227
%t229 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t221, { ptr, i64, i64 } { ptr @.str.1587, i64 4, i64 0 }, %S.ast.Type %t222, { ptr, i64, i64 } %t228)
store { ptr, i64, i64 } %t229, ptr %a230
%t231 = load ptr, ptr %a1
%t232 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t231, { ptr, i64, i64 } { ptr @.str.1589, i64 10, i64 0 })
store { ptr, i64, i64 } %t232, ptr %a233
%t234 = load ptr, ptr %a1
%t235 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t234, { ptr, i64, i64 } { ptr @.str.1590, i64 10, i64 0 })
store { ptr, i64, i64 } %t235, ptr %a236
%t237 = load ptr, ptr %a1
%t238 = load ptr, ptr %a1
%t239 = load ptr, ptr %a1
%t240 = load ptr, ptr %a1
%t241 = load ptr, ptr %a1
%t242 = load %S.ast.Type, ptr %a2
%t243 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t241, %S.ast.Type %t242)
store { ptr, i64, i64 } { ptr @.str.1593, i64 23, i64 0 }, ptr %a245
store { ptr, i64, i64 } %t243, ptr %a246
call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246)
%t247 = load { ptr, i64, i64 }, ptr %a244
store { ptr, i64, i64 } %t247, ptr %a249
store { ptr, i64, i64 } { ptr @.str.1594, i64 6, i64 0 }, ptr %a250
call void @finch_str_concat(ptr %a248, ptr %a249, ptr %a250)
%t251 = load { ptr, i64, i64 }, ptr %a248
%t252 = load { ptr, i64, i64 }, ptr %a220
store { ptr, i64, i64 } %t251, 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.1595, i64 14, i64 0 }, ptr %a259
call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259)
%t260 = load { ptr, i64, i64 }, ptr %a257
%t261 = call { ptr, i64, i64 } @finch.gen.op(ptr %t240, { ptr, i64, i64 } %t260)
%t262 = call { ptr, i64, i64 } @finch.gen.load(ptr %t239, { ptr, i64, i64 } { ptr @.str.1592, i64 3, i64 0 }, { ptr, i64, i64 } %t261)
store { ptr, i64, i64 } { ptr @.str.1591, i64 12, 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.1596, i64 3, i64 0 }, ptr %a269
call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269)
%t270 = load { ptr, i64, i64 }, ptr %a267
%t271 = call { ptr, i64, i64 } @finch.gen.op(ptr %t238, { ptr, i64, i64 } %t270)
%t272 = load { ptr, i64, i64 }, ptr %a233
%t273 = load { ptr, i64, i64 }, ptr %a236
call void @finch.gen.condBr(ptr %t237, { ptr, i64, i64 } %t271, { ptr, i64, i64 } %t272, { ptr, i64, i64 } %t273)
%t274 = load ptr, ptr %a1
%t275 = load { ptr, i64, i64 }, ptr %a233
call void @finch.gen.label(ptr %t274, { ptr, i64, i64 } %t275)
%t276 = load ptr, ptr %a1
%t277 = load ptr, ptr %a1
%t278 = load { ptr, i64, i64 }, ptr %a230
%t279 = load %S.ast.Type, ptr %a2
%t280 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t277, { ptr, i64, i64 } %t278, %S.ast.Type %t279, i64 1)
%t281 = load ptr, ptr %a1
%t282 = load { ptr, i64, i64 }, ptr %a220
%t283 = load %S.ast.Type, ptr %a2
%t284 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t281, { ptr, i64, i64 } %t282, %S.ast.Type %t283, i64 1)
%t285 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t286 = load { ptr, i64, i64 }, ptr %t285
%t287 = extractvalue { ptr, i64, i64 } %t286, 1
%t288 = icmp uge i64 0, %t287
br i1 %t288, label %range2619, label %inrange2620
range2619:
call void @finch_panic_index(ptr @.str.1597, i64 819, i64 0, i64 %t287)
unreachable
inrange2620:
%t289 = extractvalue { ptr, i64, i64 } %t286, 0
%t290 = getelementptr inbounds %S.ast.Type, ptr %t289, i64 0
%t291 = load %S.ast.Type, ptr %t290
call void @finch.gen.copyAt(ptr %t276, { ptr, i64, i64 } %t280, { ptr, i64, i64 } %t284, %S.ast.Type %t291)
%t292 = load ptr, ptr %a1
%t293 = load ptr, ptr %a1
%t294 = load { ptr, i64, i64 }, ptr %a230
%t295 = load %S.ast.Type, ptr %a2
%t296 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t293, { ptr, i64, i64 } %t294, %S.ast.Type %t295, i64 2)
%t297 = load ptr, ptr %a1
%t298 = load { ptr, i64, i64 }, ptr %a220
%t299 = load %S.ast.Type, ptr %a2
%t300 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t297, { ptr, i64, i64 } %t298, %S.ast.Type %t299, i64 2)
%t301 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t302 = load { ptr, i64, i64 }, ptr %t301
%t303 = extractvalue { ptr, i64, i64 } %t302, 1
%t304 = icmp uge i64 1, %t303
br i1 %t304, label %range2621, label %inrange2622
range2621:
call void @finch_panic_index(ptr @.str.1598, i64 820, i64 1, i64 %t303)
unreachable
inrange2622:
%t305 = extractvalue { ptr, i64, i64 } %t302, 0
%t306 = getelementptr inbounds %S.ast.Type, ptr %t305, i64 1
%t307 = load %S.ast.Type, ptr %t306
call void @finch.gen.copyAt(ptr %t292, { ptr, i64, i64 } %t296, { ptr, i64, i64 } %t300, %S.ast.Type %t307)
%t308 = load ptr, ptr %a1
%t309 = load { ptr, i64, i64 }, ptr %a236
call void @finch.gen.br(ptr %t308, { ptr, i64, i64 } %t309)
%t310 = load ptr, ptr %a1
%t311 = load { ptr, i64, i64 }, ptr %a236
call void @finch.gen.label(ptr %t310, { ptr, i64, i64 } %t311)
%t312 = load ptr, ptr %a1
%t313 = load { ptr, i64, i64 }, ptr %a210
call void @finch.gen.loopEnd(ptr %t312, { ptr, i64, i64 } %t313)
br label %endif2614
endif2614:
br label %endif2603
else2602:
%t314 = load ptr, ptr %a1
%t315 = icmp eq ptr %t314, null
br i1 %t315, label %panic2623, label %ok2624
panic2623:
call void @finch_panic(ptr @.str.1599, i64 826, ptr @.str.1600)
unreachable
ok2624:
%t316 = getelementptr inbounds %S.gen.Gen, ptr %t314, i32 0, i32 15
%t317 = load ptr, ptr %a1
%t318 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t319 = load { ptr, i64, i64 }, ptr %t318
%t320 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t321 = load { ptr, i64, i64 }, ptr %t320
%t322 = call i64 @finch.gen.findStruct(ptr %t317, { ptr, i64, i64 } %t319, { ptr, i64, i64 } %t321)
%t323 = load { ptr, i64, i64 }, ptr %t316
%t324 = extractvalue { ptr, i64, i64 } %t323, 1
%t325 = icmp uge i64 %t322, %t324
br i1 %t325, label %range2625, label %inrange2626
range2625:
call void @finch_panic_index(ptr @.str.1601, i64 826, i64 %t322, i64 %t324)
unreachable
inrange2626:
%t326 = extractvalue { ptr, i64, i64 } %t323, 0
%t327 = getelementptr inbounds %S.gen.StructDef, ptr %t326, i64 %t322
%t328 = load %S.gen.StructDef, ptr %t327
store %S.gen.StructDef %t328, ptr %a329
call void @finch.copy.S_gen_StructDef(ptr %a330, ptr %a329)
%t331 = load %S.gen.StructDef, ptr %a330
store %S.gen.StructDef %t331, ptr %a332
%t333 = load ptr, ptr %a1
%t334 = load %S.ast.Type, ptr %a2
%t335 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t333, %S.ast.Type %t334)
store { ptr, i64, i64 } %t335, ptr %a336
%t337 = load ptr, ptr %a1
%t338 = load { ptr, i64, i64 }, ptr %a336
%t339 = load ptr, ptr %a1
%t340 = load { ptr, i64, i64 }, ptr %a336
%t341 = call { ptr, i64, i64 } @finch.gen.load(ptr %t339, { ptr, i64, i64 } %t340, { ptr, i64, i64 } { ptr @.str.1602, i64 4, i64 0 })
call void @finch.gen.store(ptr %t337, { ptr, i64, i64 } %t338, { ptr, i64, i64 } %t341, { ptr, i64, i64 } { ptr @.str.1603, i64 4, i64 0 })
%t342 = getelementptr inbounds %S.gen.StructDef, ptr %a332, i32 0, i32 12
%t343 = getelementptr inbounds { ptr, i64, i64 }, ptr %t342, i32 0, i32 1
%t344 = load i64, ptr %t343
store i64 0, ptr %a345
br label %for.cond2627
for.cond2627:
%t346 = load i64, ptr %a345
%t347 = icmp slt i64 %t346, %t344
br i1 %t347, label %for.body2628, label %for.end2630
for.body2628:
%t348 = load ptr, ptr %a1
%t349 = getelementptr inbounds %S.gen.StructDef, ptr %a332, i32 0, i32 12
%t350 = load i64, ptr %a345
%t351 = load { ptr, i64, i64 }, ptr %t349
%t352 = extractvalue { ptr, i64, i64 } %t351, 1
%t353 = icmp uge i64 %t350, %t352
br i1 %t353, label %range2631, label %inrange2632
range2631:
call void @finch_panic_index(ptr @.str.1604, i64 830, i64 %t350, i64 %t352)
unreachable
inrange2632:
%t354 = extractvalue { ptr, i64, i64 } %t351, 0
%t355 = getelementptr inbounds %S.ast.Type, ptr %t354, i64 %t350
%t356 = load %S.ast.Type, ptr %t355
%t357 = call i1 @finch.gen.owning(ptr %t348, %S.ast.Type %t356)
br i1 %t357, label %then2633, label %endif2635
then2633:
%t358 = load ptr, ptr %a1
%t359 = load { ptr, i64, i64 }, ptr %a336
store { ptr, i64, i64 } { ptr @.str.1605, i64 23, i64 0 }, ptr %a361
store { ptr, i64, i64 } %t359, ptr %a362
call void @finch_str_concat(ptr %a360, ptr %a361, ptr %a362)
%t363 = load { ptr, i64, i64 }, ptr %a360
store { ptr, i64, i64 } %t363, ptr %a365
store { ptr, i64, i64 } { ptr @.str.1606, i64 23, i64 0 }, ptr %a366
call void @finch_str_concat(ptr %a364, ptr %a365, ptr %a366)
%t367 = load { ptr, i64, i64 }, ptr %a364
%t368 = getelementptr inbounds %S.gen.StructDef, ptr %a332, i32 0, i32 3
%t369 = load i64, ptr %a345
%t370 = load { ptr, i64, i64 }, ptr %t368
%t371 = extractvalue { ptr, i64, i64 } %t370, 1
%t372 = icmp uge i64 %t369, %t371
br i1 %t372, label %range2636, label %inrange2637
range2636:
call void @finch_panic_index(ptr @.str.1607, i64 831, i64 %t369, i64 %t371)
unreachable
inrange2637:
%t373 = extractvalue { ptr, i64, i64 } %t370, 0
%t374 = getelementptr inbounds i64, ptr %t373, i64 %t369
%t375 = load i64, ptr %t374
call void @finch_str_from_int(ptr %a376, i64 %t375)
%t377 = load { ptr, i64, i64 }, ptr %a376
store { ptr, i64, i64 } %t367, ptr %a379
store { ptr, i64, i64 } %t377, ptr %a380
call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380)
%t381 = load { ptr, i64, i64 }, ptr %a378
%t382 = call { ptr, i64, i64 } @finch.gen.op(ptr %t358, { ptr, i64, i64 } %t381)
store { ptr, i64, i64 } %t382, ptr %a383
%t384 = load ptr, ptr %a1
%t385 = load { ptr, i64, i64 }, ptr %a336
store { ptr, i64, i64 } { ptr @.str.1608, i64 23, i64 0 }, ptr %a387
store { ptr, i64, i64 } %t385, ptr %a388
call void @finch_str_concat(ptr %a386, ptr %a387, ptr %a388)
%t389 = load { ptr, i64, i64 }, ptr %a386
store { ptr, i64, i64 } %t389, ptr %a391
store { ptr, i64, i64 } { ptr @.str.1609, i64 23, i64 0 }, ptr %a392
call void @finch_str_concat(ptr %a390, ptr %a391, ptr %a392)
%t393 = load { ptr, i64, i64 }, ptr %a390
%t394 = getelementptr inbounds %S.gen.StructDef, ptr %a332, i32 0, i32 3
%t395 = load i64, ptr %a345
%t396 = load { ptr, i64, i64 }, ptr %t394
%t397 = extractvalue { ptr, i64, i64 } %t396, 1
%t398 = icmp uge i64 %t395, %t397
br i1 %t398, label %range2638, label %inrange2639
range2638:
call void @finch_panic_index(ptr @.str.1610, i64 832, i64 %t395, i64 %t397)
unreachable
inrange2639:
%t399 = extractvalue { ptr, i64, i64 } %t396, 0
%t400 = getelementptr inbounds i64, ptr %t399, i64 %t395
%t401 = load i64, ptr %t400
call void @finch_str_from_int(ptr %a402, i64 %t401)
%t403 = load { ptr, i64, i64 }, ptr %a402
store { ptr, i64, i64 } %t393, ptr %a405
store { ptr, i64, i64 } %t403, ptr %a406
call void @finch_str_concat(ptr %a404, ptr %a405, ptr %a406)
%t407 = load { ptr, i64, i64 }, ptr %a404
%t408 = call { ptr, i64, i64 } @finch.gen.op(ptr %t384, { ptr, i64, i64 } %t407)
store { ptr, i64, i64 } %t408, ptr %a409
%t410 = load ptr, ptr %a1
%t411 = load { ptr, i64, i64 }, ptr %a383
%t412 = load { ptr, i64, i64 }, ptr %a409
%t413 = getelementptr inbounds %S.gen.StructDef, ptr %a332, i32 0, i32 12
%t414 = load i64, ptr %a345
%t415 = load { ptr, i64, i64 }, ptr %t413
%t416 = extractvalue { ptr, i64, i64 } %t415, 1
%t417 = icmp uge i64 %t414, %t416
br i1 %t417, label %range2640, label %inrange2641
range2640:
call void @finch_panic_index(ptr @.str.1611, i64 833, i64 %t414, i64 %t416)
unreachable
inrange2641:
%t418 = extractvalue { ptr, i64, i64 } %t415, 0
%t419 = getelementptr inbounds %S.ast.Type, ptr %t418, i64 %t414
%t420 = load %S.ast.Type, ptr %t419
call void @finch.gen.copyAt(ptr %t410, { ptr, i64, i64 } %t411, { ptr, i64, i64 } %t412, %S.ast.Type %t420)
br label %endif2635
endif2635:
br label %for.step2629
for.step2629:
%t421 = load i64, ptr %a345
%t422 = add i64 %t421, 1
store i64 %t422, ptr %a345
br label %for.cond2627
for.end2630:
br label %endif2603
endif2603:
br label %endif2591
endif2591:
%t423 = load ptr, ptr %a1
call void @finch.gen.emit(ptr %t423, { ptr, i64, i64 } { ptr @.str.1612, i64 8, i64 0 })
%t424 = load ptr, ptr %a1
%t425 = load %S.gen.Saved, ptr %a34
%t426 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } { ptr @.str.1613, i64 21, i64 0 }, ptr %a428
store { ptr, i64, i64 } %t426, ptr %a429
call void @finch_str_concat(ptr %a427, ptr %a428, ptr %a429)
%t430 = load { ptr, i64, i64 }, ptr %a427
store { ptr, i64, i64 } %t430, ptr %a432
store { ptr, i64, i64 } { ptr @.str.1614, i64 20, i64 0 }, ptr %a433
call void @finch_str_concat(ptr %a431, ptr %a432, ptr %a433)
%t434 = load { ptr, i64, i64 }, ptr %a431
call void @finch.gen.endHelper(ptr %t424, %S.gen.Saved %t425, { ptr, i64, i64 } %t434)
%t435 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t435, ptr %a436
call void @finch_str_copy(ptr %a437, ptr %a436)
%t438 = load { ptr, i64, i64 }, ptr %a437
ret { ptr, i64, i64 } %t438
}
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 { 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 %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 %then2642, label %endif2644
then2642:
%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
endif2644:
%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 { ptr, i64, i64 } %t23, ptr %a24
%t25 = load ptr, ptr %a1
%t26 = load ptr, ptr %a1
%t27 = load %S.ast.Type, ptr %a3
%t28 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t26, %S.ast.Type %t27)
%t29 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t25, { ptr, i64, i64 } %t28)
store { ptr, i64, i64 } %t29, ptr %a30
%t31 = load ptr, ptr %a1
%t32 = load { ptr, i64, i64 }, ptr %a30
%t33 = load { ptr, i64, i64 }, ptr %a24
%t34 = load %S.ast.Type, ptr %a3
call void @finch.gen.copyAt(ptr %t31, { ptr, i64, i64 } %t32, { ptr, i64, i64 } %t33, %S.ast.Type %t34)
%t35 = load ptr, ptr %a1
%t36 = load ptr, ptr %a1
%t37 = load %S.ast.Type, ptr %a3
%t38 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t36, %S.ast.Type %t37)
%t39 = load { ptr, i64, i64 }, ptr %a30
%t40 = call { ptr, i64, i64 } @finch.gen.load(ptr %t35, { ptr, i64, i64 } %t38, { ptr, i64, i64 } %t39)
ret { ptr, i64, i64 } %t40
}
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.from2645
logic.from2645:
br i1 %t7, label %logic.end2647, label %logic.rhs2646
logic.rhs2646:
%t8 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2
%t9 = load i1, ptr %t8
br label %logic.rend2648
logic.rend2648:
br label %logic.end2647
logic.end2647:
%t10 = phi i1 [ true, %logic.from2645 ], [ %t9, %logic.rend2648 ]
br i1 %t10, label %then2649, label %endif2651
then2649:
%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
endif2651:
%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
%a22 = alloca { ptr, i64, i64 }, align 16
%a23 = 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
%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
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.1615, 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 %then2652, label %endif2654
then2652:
%t15 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } { ptr @.str.1616, 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
store { ptr, i64, i64 } %t19, ptr %a11
br label %endif2654
endif2654:
%t20 = load ptr, ptr %a1
%t21 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t21, ptr %a23
store { ptr, i64, i64 } { ptr @.str.1617, i64 35, 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 %a7
store { ptr, i64, i64 } %t25, 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
%t31 = load { ptr, i64, i64 }, ptr %a11
store { ptr, i64, i64 } %t30, ptr %a33
store { ptr, i64, i64 } %t31, ptr %a34
call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34)
%t35 = load { ptr, i64, i64 }, ptr %a32
store { ptr, i64, i64 } %t35, ptr %a37
store { ptr, i64, i64 } { ptr @.str.1618, i64 1, i64 0 }, ptr %a38
call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38)
%t39 = load { ptr, i64, i64 }, ptr %a36
call void @finch.gen.emit(ptr %t20, { ptr, i64, i64 } %t39)
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
%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
%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
%a29 = 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
%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
%a50 = alloca { ptr, i64, i64 }, align 16
%a51 = alloca { ptr, i64, i64 }, align 16
%a52 = 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.1619, 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.1620, i64 3, i64 0 }, ptr %a11
call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11)
%t12 = load { ptr, i64, i64 }, ptr %a9
%t13 = call { ptr, i64, i64 } @finch.gen.op(ptr %t3, { ptr, i64, i64 } %t12)
store { ptr, i64, i64 } %t13, ptr %a14
%t15 = load ptr, ptr %a1
%t16 = load { ptr, i64, i64 }, ptr %a14
store { ptr, i64, i64 } { ptr @.str.1621, i64 12, 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.1622, i64 6, i64 0 }, ptr %a23
call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23)
%t24 = load { ptr, i64, i64 }, ptr %a21
%t25 = call { ptr, i64, i64 } @finch.gen.op(ptr %t15, { ptr, i64, i64 } %t24)
store { ptr, i64, i64 } %t25, ptr %a26
%t27 = load ptr, ptr %a1
%t28 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t27, { ptr, i64, i64 } { ptr @.str.1623, i64 0, i64 0 })
store { ptr, i64, i64 } %t28, ptr %a29
%t30 = load ptr, ptr %a1
%t31 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } { ptr @.str.1624, i64 10, i64 0 }, ptr %a33
store { ptr, i64, i64 } %t31, ptr %a34
call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34)
%t35 = load { ptr, i64, i64 }, ptr %a32
store { ptr, i64, i64 } %t35, ptr %a37
store { ptr, i64, i64 } { ptr @.str.1625, i64 6, i64 0 }, ptr %a38
call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38)
%t39 = load { ptr, i64, i64 }, ptr %a36
%t40 = load { ptr, i64, i64 }, ptr %a29
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)
%t44 = load { ptr, i64, i64 }, ptr %a41
store { ptr, i64, i64 } %t44, ptr %a46
store { ptr, i64, i64 } { ptr @.str.1626, i64 6, i64 0 }, ptr %a47
call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47)
%t48 = load { ptr, i64, i64 }, ptr %a45
%t49 = load { ptr, i64, i64 }, ptr %a14
store { ptr, i64, i64 } %t48, ptr %a51
store { ptr, i64, i64 } %t49, ptr %a52
call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52)
%t53 = load { ptr, i64, i64 }, ptr %a50
%t54 = call { ptr, i64, i64 } @finch.gen.op(ptr %t30, { ptr, i64, i64 } %t53)
ret { ptr, i64, i64 } %t54
}
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 { ptr, i64, i64 }, align 16
%a20 = alloca { ptr, i64, i64 }, align 16
%a21 = 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
%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
%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
%a63 = 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
%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
%a84 = alloca { ptr, i64, i64 }, 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
%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
%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
%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
%a131 = alloca { ptr, i64, i64 }, align 16
%a132 = alloca { ptr, i64, i64 }, align 16
%a133 = 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
%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
%a148 = 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
%a160 = alloca { ptr, i64, i64 }, align 16
%a161 = alloca { ptr, i64, i64 }, align 16
%a162 = 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
%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
%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
%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
%a200 = 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
%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
%a233 = alloca { ptr, i64, i64 }, align 16
%a234 = alloca { ptr, i64, i64 }, align 16
%a235 = alloca { ptr, i64, i64 }, align 16
%a242 = alloca { ptr, i64, i64 }, align 16
%a243 = alloca { ptr, i64, i64 }, align 16
%a249 = 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
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 %then2655, label %else2656
then2655:
%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.1629, 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 { ptr, i64, i64 } { ptr @.str.1628, i64 4, 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
call void @finch.gen.printf(ptr %t13, { ptr, i64, i64 } { ptr @.str.1627, i64 4, i64 0 }, { ptr, i64, i64 } %t22)
br label %endif2657
else2656:
%t23 = load %S.ast.Type, ptr %a3
%t24 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t23)
br i1 %t24, label %then2658, label %else2659
then2658:
%t25 = load ptr, ptr %a1
%t26 = load ptr, ptr %a1
%t27 = load { ptr, i64, i64 }, ptr %a2
%t28 = load %S.ast.Type, ptr %a3
%t29 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1632, i64 3, i64 0 })
%t30 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t26, { ptr, i64, i64 } %t27, %S.ast.Type %t28, %S.ast.Type %t29)
store { ptr, i64, i64 } { ptr @.str.1631, i64 4, 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
call void @finch.gen.printf(ptr %t25, { ptr, i64, i64 } { ptr @.str.1630, i64 4, i64 0 }, { ptr, i64, i64 } %t34)
br label %endif2660
else2659:
%t35 = load %S.ast.Type, ptr %a3
%t36 = call i1 @finch.gen.isFloat(%S.ast.Type %t35)
br i1 %t36, label %then2661, label %else2662
then2661:
%t37 = load ptr, ptr %a1
%t38 = load ptr, ptr %a1
%t39 = load { ptr, i64, i64 }, ptr %a2
%t40 = load %S.ast.Type, ptr %a3
%t41 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1635, i64 5, i64 0 })
%t42 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t38, { ptr, i64, i64 } %t39, %S.ast.Type %t40, %S.ast.Type %t41)
store { ptr, i64, i64 } { ptr @.str.1634, i64 7, 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
call void @finch.gen.printf(ptr %t37, { ptr, i64, i64 } { ptr @.str.1633, i64 2, i64 0 }, { ptr, i64, i64 } %t46)
br label %endif2663
else2662:
%t47 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t47, ptr %a48
store { ptr, i64, i64 } { ptr @.str.1636, i64 4, i64 0 }, ptr %a49
%t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49)
%t51 = icmp ne i32 %t50, 0
br i1 %t51, label %then2664, label %else2665
then2664:
%t52 = load ptr, ptr %a1
%t53 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.1637, i64 8, i64 0 }, ptr %a55
store { ptr, i64, i64 } %t53, ptr %a56
call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56)
%t57 = load { ptr, i64, i64 }, ptr %a54
store { ptr, i64, i64 } %t57, ptr %a59
store { ptr, i64, i64 } { ptr @.str.1638, i64 7, i64 0 }, ptr %a60
call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60)
%t61 = load { ptr, i64, i64 }, ptr %a58
%t62 = call { ptr, i64, i64 } @finch.gen.op(ptr %t52, { ptr, i64, i64 } %t61)
store { ptr, i64, i64 } %t62, ptr %a63
%t64 = load i1, ptr %a4
br i1 %t64, label %then2667, label %else2668
then2667:
%t65 = load ptr, ptr %a1
%t66 = load { ptr, i64, i64 }, ptr %a63
store { ptr, i64, i64 } { ptr @.str.1640, i64 4, 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
call void @finch.gen.printf(ptr %t65, { ptr, i64, i64 } { ptr @.str.1639, i64 4, i64 0 }, { ptr, i64, i64 } %t70)
br label %endif2669
else2668:
%t71 = load ptr, ptr %a1
%t72 = load { ptr, i64, i64 }, ptr %a63
store { ptr, i64, i64 } { ptr @.str.1642, i64 4, i64 0 }, ptr %a74
store { ptr, i64, i64 } %t72, ptr %a75
call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75)
%t76 = load { ptr, i64, i64 }, ptr %a73
call void @finch.gen.printf(ptr %t71, { ptr, i64, i64 } { ptr @.str.1641, i64 2, i64 0 }, { ptr, i64, i64 } %t76)
br label %endif2669
endif2669:
br label %endif2666
else2665:
%t77 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t77, ptr %a78
store { ptr, i64, i64 } { ptr @.str.1643, i64 4, i64 0 }, ptr %a79
%t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79)
%t81 = icmp ne i32 %t80, 0
br i1 %t81, label %then2670, label %else2671
then2670:
%t82 = load ptr, ptr %a1
%t83 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t82, { ptr, i64, i64 } { ptr @.str.1644, i64 4, i64 0 })
store { ptr, i64, i64 } %t83, ptr %a84
%t85 = load ptr, ptr %a1
%t86 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t85, { ptr, i64, i64 } { ptr @.str.1645, i64 5, i64 0 })
store { ptr, i64, i64 } %t86, ptr %a87
%t88 = load ptr, ptr %a1
%t89 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.1646, i64 10, 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.1647, i64 6, i64 0 }, ptr %a96
call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96)
%t97 = load { ptr, i64, i64 }, ptr %a94
%t98 = load { ptr, i64, i64 }, ptr %a84
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)
%t102 = load { ptr, i64, i64 }, ptr %a99
store { ptr, i64, i64 } %t102, ptr %a104
store { ptr, i64, i64 } { ptr @.str.1648, i64 6, i64 0 }, ptr %a105
call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105)
%t106 = load { ptr, i64, i64 }, ptr %a103
%t107 = load { ptr, i64, i64 }, ptr %a87
store { ptr, i64, i64 } %t106, 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
%t112 = call { ptr, i64, i64 } @finch.gen.op(ptr %t88, { ptr, i64, i64 } %t111)
store { ptr, i64, i64 } %t112, ptr %a113
%t114 = load ptr, ptr %a1
%t115 = load { ptr, i64, i64 }, ptr %a113
store { ptr, i64, i64 } { ptr @.str.1650, i64 4, 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
call void @finch.gen.printf(ptr %t114, { ptr, i64, i64 } { ptr @.str.1649, i64 2, i64 0 }, { ptr, i64, i64 } %t119)
br label %endif2672
else2671:
%t120 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t120, ptr %a121
store { ptr, i64, i64 } { ptr @.str.1651, i64 3, i64 0 }, ptr %a122
%t123 = call i32 @finch_str_eq(ptr %a121, ptr %a122)
%t124 = icmp ne i32 %t123, 0
br i1 %t124, label %then2673, label %else2674
then2673:
%t125 = load ptr, ptr %a1
%t126 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.1652, i64 31, i64 0 }, ptr %a128
store { ptr, i64, i64 } %t126, ptr %a129
call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129)
%t130 = load { ptr, i64, i64 }, ptr %a127
store { ptr, i64, i64 } %t130, ptr %a132
store { ptr, i64, i64 } { ptr @.str.1653, i64 3, i64 0 }, ptr %a133
call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133)
%t134 = load { ptr, i64, i64 }, ptr %a131
%t135 = call { ptr, i64, i64 } @finch.gen.op(ptr %t125, { ptr, i64, i64 } %t134)
store { ptr, i64, i64 } %t135, ptr %a136
%t137 = load ptr, ptr %a1
%t138 = load { ptr, i64, i64 }, ptr %a136
store { ptr, i64, i64 } { ptr @.str.1654, i64 10, i64 0 }, ptr %a140
store { ptr, i64, i64 } %t138, ptr %a141
call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141)
%t142 = load { ptr, i64, i64 }, ptr %a139
store { ptr, i64, i64 } %t142, ptr %a144
store { ptr, i64, i64 } { ptr @.str.1655, i64 7, i64 0 }, ptr %a145
call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145)
%t146 = load { ptr, i64, i64 }, ptr %a143
%t147 = call { ptr, i64, i64 } @finch.gen.op(ptr %t137, { ptr, i64, i64 } %t146)
store { ptr, i64, i64 } %t147, ptr %a148
%t149 = load ptr, ptr %a1
%t150 = load { ptr, i64, i64 }, ptr %a2
%t151 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t149, { ptr, i64, i64 } %t150)
store { ptr, i64, i64 } %t151, ptr %a152
%t153 = load i1, ptr %a4
br i1 %t153, label %then2676, label %else2677
then2676:
%t154 = load ptr, ptr %a1
%t155 = load { ptr, i64, i64 }, ptr %a148
store { ptr, i64, i64 } { ptr @.str.1657, i64 4, i64 0 }, ptr %a157
store { ptr, i64, i64 } %t155, ptr %a158
call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158)
%t159 = load { ptr, i64, i64 }, ptr %a156
store { ptr, i64, i64 } %t159, ptr %a161
store { ptr, i64, i64 } { ptr @.str.1658, i64 6, i64 0 }, ptr %a162
call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162)
%t163 = load { ptr, i64, i64 }, ptr %a160
%t164 = load { ptr, i64, i64 }, ptr %a152
store { ptr, i64, i64 } %t163, ptr %a166
store { ptr, i64, i64 } %t164, ptr %a167
call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167)
%t168 = load { ptr, i64, i64 }, ptr %a165
call void @finch.gen.printf(ptr %t154, { ptr, i64, i64 } { ptr @.str.1656, i64 6, i64 0 }, { ptr, i64, i64 } %t168)
br label %endif2678
else2677:
%t169 = load ptr, ptr %a1
%t170 = load { ptr, i64, i64 }, ptr %a148
store { ptr, i64, i64 } { ptr @.str.1660, i64 4, i64 0 }, ptr %a172
store { ptr, i64, i64 } %t170, ptr %a173
call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173)
%t174 = load { ptr, i64, i64 }, ptr %a171
store { ptr, i64, i64 } %t174, ptr %a176
store { ptr, i64, i64 } { ptr @.str.1661, i64 6, i64 0 }, ptr %a177
call void @finch_str_concat(ptr %a175, ptr %a176, ptr %a177)
%t178 = load { ptr, i64, i64 }, ptr %a175
%t179 = load { ptr, i64, i64 }, ptr %a152
store { ptr, i64, i64 } %t178, ptr %a181
store { ptr, i64, i64 } %t179, ptr %a182
call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182)
%t183 = load { ptr, i64, i64 }, ptr %a180
call void @finch.gen.printf(ptr %t169, { ptr, i64, i64 } { ptr @.str.1659, i64 4, i64 0 }, { ptr, i64, i64 } %t183)
br label %endif2678
endif2678:
br label %endif2675
else2674:
%t184 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t184, ptr %a185
store { ptr, i64, i64 } { ptr @.str.1662, i64 3, i64 0 }, ptr %a186
%t187 = call i32 @finch_str_eq(ptr %a185, ptr %a186)
%t188 = icmp ne i32 %t187, 0
br i1 %t188, label %then2679, label %else2680
then2679:
%t189 = load ptr, ptr %a1
%t190 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.1663, i64 12, 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.1664, i64 6, i64 0 }, ptr %a197
call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197)
%t198 = load { ptr, i64, i64 }, ptr %a195
%t199 = call { ptr, i64, i64 } @finch.gen.op(ptr %t189, { ptr, i64, i64 } %t198)
store { ptr, i64, i64 } %t199, ptr %a200
%t201 = load ptr, ptr %a1
%t202 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t201, { ptr, i64, i64 } { ptr @.str.1665, i64 8, i64 0 })
store { ptr, i64, i64 } %t202, ptr %a203
%t204 = load ptr, ptr %a1
%t205 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t204, { ptr, i64, i64 } { ptr @.str.1666, i64 8, i64 0 })
store { ptr, i64, i64 } %t205, ptr %a206
%t207 = load ptr, ptr %a1
%t208 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t207, { ptr, i64, i64 } { ptr @.str.1667, i64 8, i64 0 })
store { ptr, i64, i64 } %t208, ptr %a209
%t210 = load ptr, ptr %a1
%t211 = load { ptr, i64, i64 }, ptr %a200
%t212 = load { ptr, i64, i64 }, ptr %a203
%t213 = load { ptr, i64, i64 }, ptr %a206
call void @finch.gen.condBr(ptr %t210, { ptr, i64, i64 } %t211, { ptr, i64, i64 } %t212, { ptr, i64, i64 } %t213)
%t214 = load ptr, ptr %a1
%t215 = load { ptr, i64, i64 }, ptr %a203
call void @finch.gen.label(ptr %t214, { ptr, i64, i64 } %t215)
%t216 = load ptr, ptr %a1
call void @finch.gen.printf(ptr %t216, { ptr, i64, i64 } { ptr @.str.1668, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1669, i64 0, i64 0 })
%t217 = load ptr, ptr %a1
%t218 = load { ptr, i64, i64 }, ptr %a209
call void @finch.gen.br(ptr %t217, { ptr, i64, i64 } %t218)
%t219 = load ptr, ptr %a1
%t220 = load { ptr, i64, i64 }, ptr %a206
call void @finch.gen.label(ptr %t219, { ptr, i64, i64 } %t220)
%t221 = load ptr, ptr %a1
%t222 = load ptr, ptr %a1
%t223 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.1672, i64 13, 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.1673, i64 7, i64 0 }, ptr %a230
call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230)
%t231 = load { ptr, i64, i64 }, ptr %a228
%t232 = call { ptr, i64, i64 } @finch.gen.op(ptr %t222, { ptr, i64, i64 } %t231)
store { ptr, i64, i64 } { ptr @.str.1671, i64 4, 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
call void @finch.gen.printf(ptr %t221, { ptr, i64, i64 } { ptr @.str.1670, i64 6, i64 0 }, { ptr, i64, i64 } %t236)
%t237 = load ptr, ptr %a1
%t238 = load { ptr, i64, i64 }, ptr %a209
call void @finch.gen.br(ptr %t237, { ptr, i64, i64 } %t238)
%t239 = load ptr, ptr %a1
%t240 = load { ptr, i64, i64 }, ptr %a209
call void @finch.gen.label(ptr %t239, { ptr, i64, i64 } %t240)
br label %endif2681
else2680:
%t241 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t241, ptr %a242
store { ptr, i64, i64 } { ptr @.str.1674, i64 4, i64 0 }, ptr %a243
%t244 = call i32 @finch_str_eq(ptr %a242, ptr %a243)
%t245 = icmp ne i32 %t244, 0
br i1 %t245, label %then2682, label %else2683
then2682:
%t246 = load ptr, ptr %a1
call void @finch.gen.printf(ptr %t246, { ptr, i64, i64 } { ptr @.str.1675, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1676, i64 0, i64 0 })
br label %endif2684
else2683:
%t247 = load ptr, ptr %a1
%t248 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t247, { ptr, i64, i64 } { ptr @.str.1677, i64 17, i64 0 })
store { ptr, i64, i64 } %t248, ptr %a249
%t250 = load ptr, ptr %a1
%t251 = load { ptr, i64, i64 }, ptr %a249
call void @finch.gen.store(ptr %t250, { ptr, i64, i64 } { ptr @.str.1678, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.1679, i64 15, i64 0 }, { ptr, i64, i64 } %t251)
%t252 = load ptr, ptr %a1
%t253 = load { ptr, i64, i64 }, ptr %a249
%t254 = load { ptr, i64, i64 }, ptr %a2
%t255 = load %S.ast.Type, ptr %a3
%t256 = load i1, ptr %a4
call void @finch.gen.emitFormat(ptr %t252, { ptr, i64, i64 } %t253, { ptr, i64, i64 } %t254, %S.ast.Type %t255, i1 %t256)
%t257 = load ptr, ptr %a1
%t258 = load { ptr, i64, i64 }, ptr %a249
store { ptr, i64, i64 } { ptr @.str.1680, i64 31, i64 0 }, ptr %a260
store { ptr, i64, i64 } %t258, ptr %a261
call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261)
%t262 = load { ptr, i64, i64 }, ptr %a259
store { ptr, i64, i64 } %t262, ptr %a264
store { ptr, i64, i64 } { ptr @.str.1681, i64 1, i64 0 }, ptr %a265
call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265)
%t266 = load { ptr, i64, i64 }, ptr %a263
call void @finch.gen.emit(ptr %t257, { ptr, i64, i64 } %t266)
br label %endif2684
endif2684:
br label %endif2681
endif2681:
br label %endif2675
endif2675:
br label %endif2672
endif2672:
br label %endif2666
endif2666:
br label %endif2663
endif2663:
br label %endif2660
endif2660:
br label %endif2657
endif2657:
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
%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
%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
%a33 = alloca { ptr, i64, i64 }, align 16
%a34 = alloca { ptr, i64, i64 }, align 16
%a35 = 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.1682, 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.1683, i64 6, i64 0 }, ptr %a12
call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12)
%t13 = load { ptr, i64, i64 }, ptr %a10
%t14 = load ptr, ptr %a1
%t15 = load { ptr, i64, i64 }, ptr %a3
%t16 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t14, { ptr, i64, i64 } %t15)
store { ptr, i64, i64 } %t13, 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.1684, i64 6, i64 0 }, ptr %a23
call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23)
%t24 = load { ptr, i64, i64 }, ptr %a21
%t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1
%t26 = load i64, ptr %t25
call void @finch_str_from_int(ptr %a27, i64 %t26)
%t28 = load { ptr, i64, i64 }, ptr %a27
store { ptr, i64, i64 } %t24, 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.1685, i64 1, 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.gen.emit(ptr %t4, { ptr, i64, i64 } %t36)
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
%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
%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
%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
%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
%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
%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
%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
%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
%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
%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
%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
%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
%a148 = alloca { ptr, i64, i64 }, align 16
%a149 = alloca { ptr, i64, i64 }, 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
%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
%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
%a178 = alloca %S.ast.Type, align 16
%a179 = 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 { 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
%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
%a201 = 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
%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
%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
%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
%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
%a247 = alloca { ptr, i64, i64 }, align 16
%a248 = alloca { ptr, i64, i64 }, align 16
%a249 = alloca { ptr, i64, i64 }, align 16
%a253 = alloca { ptr, i64, i64 }, align 16
%a254 = alloca { ptr, i64, i64 }, align 16
%a258 = alloca %S.ast.Type, align 16
%a259 = alloca %S.ast.Type, 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
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.1686, i64 1, i64 0 }, ptr %a12
%t13 = load i1, ptr %a5
br i1 %t13, label %then2685, label %endif2687
then2685:
store { ptr, i64, i64 } { ptr @.str.1687, i64 1, i64 0 }, ptr %a12
br label %endif2687
endif2687:
%t14 = load %S.ast.Type, ptr %a4
%t15 = call i1 @finch.gen.isSigned(%S.ast.Type %t14)
br i1 %t15, label %then2688, label %else2689
then2688:
%t16 = load ptr, ptr %a1
%t17 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.1688, i64 29, i64 0 }, ptr %a19
store { ptr, i64, i64 } %t17, ptr %a20
call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20)
%t21 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t21, ptr %a23
store { ptr, i64, i64 } { ptr @.str.1689, i64 6, 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, ptr %a1
%t27 = load { ptr, i64, i64 }, ptr %a3
%t28 = load %S.ast.Type, ptr %a4
%t29 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1690, i64 3, i64 0 })
%t30 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t26, { ptr, i64, i64 } %t27, %S.ast.Type %t28, %S.ast.Type %t29)
store { ptr, i64, i64 } %t25, 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
store { ptr, i64, i64 } %t34, ptr %a36
store { ptr, i64, i64 } { ptr @.str.1691, i64 1, i64 0 }, ptr %a37
call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37)
%t38 = load { ptr, i64, i64 }, ptr %a35
call void @finch.gen.emit(ptr %t16, { ptr, i64, i64 } %t38)
br label %endif2690
else2689:
%t39 = load %S.ast.Type, ptr %a4
%t40 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t39)
br i1 %t40, label %then2691, label %else2692
then2691:
%t41 = load ptr, ptr %a1
%t42 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.1692, i64 30, 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.1693, i64 6, i64 0 }, ptr %a49
call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49)
%t50 = load { ptr, i64, i64 }, ptr %a47
%t51 = load ptr, ptr %a1
%t52 = load { ptr, i64, i64 }, ptr %a3
%t53 = load %S.ast.Type, ptr %a4
%t54 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1694, i64 3, i64 0 })
%t55 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t51, { ptr, i64, i64 } %t52, %S.ast.Type %t53, %S.ast.Type %t54)
store { ptr, i64, i64 } %t50, 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
store { ptr, i64, i64 } %t59, ptr %a61
store { ptr, i64, i64 } { ptr @.str.1695, i64 1, i64 0 }, ptr %a62
call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62)
%t63 = load { ptr, i64, i64 }, ptr %a60
call void @finch.gen.emit(ptr %t41, { ptr, i64, i64 } %t63)
br label %endif2693
else2692:
%t64 = load %S.ast.Type, ptr %a4
%t65 = call i1 @finch.gen.isFloat(%S.ast.Type %t64)
br i1 %t65, label %then2694, label %else2695
then2694:
%t66 = load ptr, ptr %a1
%t67 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.1696, i64 31, 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.1697, i64 9, i64 0 }, ptr %a74
call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74)
%t75 = load { ptr, i64, i64 }, ptr %a72
%t76 = load ptr, ptr %a1
%t77 = load { ptr, i64, i64 }, ptr %a3
%t78 = load %S.ast.Type, ptr %a4
%t79 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1698, i64 5, i64 0 })
%t80 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t76, { ptr, i64, i64 } %t77, %S.ast.Type %t78, %S.ast.Type %t79)
store { ptr, i64, i64 } %t75, 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.1699, i64 1, i64 0 }, ptr %a87
call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87)
%t88 = load { ptr, i64, i64 }, ptr %a85
call void @finch.gen.emit(ptr %t66, { ptr, i64, i64 } %t88)
br label %endif2696
else2695:
%t89 = load { ptr, i64, i64 }, ptr %a11
store { ptr, i64, i64 } %t89, ptr %a90
store { ptr, i64, i64 } { ptr @.str.1700, i64 4, i64 0 }, ptr %a91
%t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91)
%t93 = icmp ne i32 %t92, 0
br i1 %t93, label %then2697, label %else2698
then2697:
%t94 = load ptr, ptr %a1
%t95 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.1701, i64 30, 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.1702, i64 5, i64 0 }, 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 %a3
store { ptr, i64, i64 } %t103, ptr %a106
store { ptr, i64, i64 } %t104, 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 %a110
store { ptr, i64, i64 } { ptr @.str.1703, i64 6, 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 %a12
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)
%t117 = load { ptr, i64, i64 }, ptr %a114
store { ptr, i64, i64 } %t117, ptr %a119
store { ptr, i64, i64 } { ptr @.str.1704, i64 1, i64 0 }, ptr %a120
call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120)
%t121 = load { ptr, i64, i64 }, ptr %a118
call void @finch.gen.emit(ptr %t94, { ptr, i64, i64 } %t121)
br label %endif2699
else2698:
%t122 = load { ptr, i64, i64 }, ptr %a11
store { ptr, i64, i64 } %t122, ptr %a123
store { ptr, i64, i64 } { ptr @.str.1705, i64 4, i64 0 }, ptr %a124
%t125 = call i32 @finch_str_eq(ptr %a123, ptr %a124)
%t126 = icmp ne i32 %t125, 0
br i1 %t126, label %then2700, label %else2701
then2700:
%t127 = load ptr, ptr %a1
%t128 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.1706, i64 30, i64 0 }, ptr %a130
store { ptr, i64, i64 } %t128, ptr %a131
call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131)
%t132 = load { ptr, i64, i64 }, ptr %a129
store { ptr, i64, i64 } %t132, ptr %a134
store { ptr, i64, i64 } { ptr @.str.1707, i64 6, i64 0 }, ptr %a135
call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135)
%t136 = load { ptr, i64, i64 }, ptr %a133
%t137 = load ptr, ptr %a1
%t138 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } { ptr @.str.1708, i64 8, i64 0 }, ptr %a140
store { ptr, i64, i64 } %t138, ptr %a141
call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141)
%t142 = load { ptr, i64, i64 }, ptr %a139
store { ptr, i64, i64 } %t142, ptr %a144
store { ptr, i64, i64 } { ptr @.str.1709, i64 7, i64 0 }, ptr %a145
call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145)
%t146 = load { ptr, i64, i64 }, ptr %a143
%t147 = call { ptr, i64, i64 } @finch.gen.op(ptr %t137, { ptr, i64, i64 } %t146)
store { ptr, i64, i64 } %t136, ptr %a149
store { ptr, i64, i64 } %t147, ptr %a150
call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150)
%t151 = load { ptr, i64, i64 }, ptr %a148
store { ptr, i64, i64 } %t151, ptr %a153
store { ptr, i64, i64 } { ptr @.str.1710, i64 1, i64 0 }, ptr %a154
call void @finch_str_concat(ptr %a152, ptr %a153, ptr %a154)
%t155 = load { ptr, i64, i64 }, ptr %a152
call void @finch.gen.emit(ptr %t127, { ptr, i64, i64 } %t155)
br label %endif2702
else2701:
%t156 = load { ptr, i64, i64 }, ptr %a11
store { ptr, i64, i64 } %t156, ptr %a157
store { ptr, i64, i64 } { ptr @.str.1711, i64 3, i64 0 }, ptr %a158
%t159 = call i32 @finch_str_eq(ptr %a157, ptr %a158)
%t160 = icmp ne i32 %t159, 0
br i1 %t160, label %then2703, label %else2704
then2703:
%t161 = load ptr, ptr %a1
%t162 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.1712, i64 29, i64 0 }, ptr %a164
store { ptr, i64, i64 } %t162, ptr %a165
call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165)
%t166 = load { ptr, i64, i64 }, ptr %a163
store { ptr, i64, i64 } %t166, ptr %a168
store { ptr, i64, i64 } { ptr @.str.1713, i64 6, i64 0 }, ptr %a169
call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169)
%t170 = load { ptr, i64, i64 }, ptr %a167
%t171 = load ptr, ptr %a1
%t172 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t172, ptr %a173
call void @finch_str_copy(ptr %a174, ptr %a173)
%t175 = load { ptr, i64, i64 }, ptr %a174
%t176 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t175, 0
%t177 = load %S.ast.Type, ptr %a4
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 %t176, %S.ast.Type %t180, 1
%t182 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t171, %S.gen.Val %t181)
store { ptr, i64, i64 } %t170, 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.1714, i64 6, i64 0 }, ptr %a189
call void @finch_str_concat(ptr %a187, ptr %a188, ptr %a189)
%t190 = load { ptr, i64, i64 }, ptr %a187
%t191 = load { ptr, i64, i64 }, ptr %a12
store { ptr, i64, i64 } %t190, 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.1715, i64 1, i64 0 }, ptr %a198
call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198)
%t199 = load { ptr, i64, i64 }, ptr %a196
call void @finch.gen.emit(ptr %t161, { ptr, i64, i64 } %t199)
br label %endif2705
else2704:
%t200 = load { ptr, i64, i64 }, ptr %a11
store { ptr, i64, i64 } %t200, ptr %a201
store { ptr, i64, i64 } { ptr @.str.1716, i64 3, i64 0 }, ptr %a202
%t203 = call i32 @finch_str_eq(ptr %a201, ptr %a202)
%t204 = icmp ne i32 %t203, 0
br label %logic.from2706
logic.from2706:
br i1 %t204, label %logic.end2708, label %logic.rhs2707
logic.rhs2707:
%t205 = load { ptr, i64, i64 }, ptr %a11
store { ptr, i64, i64 } %t205, ptr %a206
store { ptr, i64, i64 } { ptr @.str.1717, i64 4, i64 0 }, ptr %a207
%t208 = call i32 @finch_str_eq(ptr %a206, ptr %a207)
%t209 = icmp ne i32 %t208, 0
br label %logic.rend2709
logic.rend2709:
br label %logic.end2708
logic.end2708:
%t210 = phi i1 [ true, %logic.from2706 ], [ %t209, %logic.rend2709 ]
br i1 %t210, label %then2710, label %else2711
then2710:
%t211 = load ptr, ptr %a1
%t212 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.1718, i64 29, i64 0 }, 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
store { ptr, i64, i64 } %t216, ptr %a218
store { ptr, i64, i64 } { ptr @.str.1719, i64 6, i64 0 }, ptr %a219
call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219)
%t220 = load { ptr, i64, i64 }, ptr %a217
%t221 = load { ptr, i64, i64 }, ptr %a3
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)
%t225 = load { ptr, i64, i64 }, ptr %a222
store { ptr, i64, i64 } %t225, ptr %a227
store { ptr, i64, i64 } { ptr @.str.1720, i64 1, i64 0 }, ptr %a228
call void @finch_str_concat(ptr %a226, ptr %a227, ptr %a228)
%t229 = load { ptr, i64, i64 }, ptr %a226
call void @finch.gen.emit(ptr %t211, { ptr, i64, i64 } %t229)
br label %endif2712
else2711:
%t230 = load ptr, ptr %a1
%t231 = load ptr, ptr %a1
%t232 = load %S.ast.Type, ptr %a4
%t233 = call { ptr, i64, i64 } @finch.gen.formatFn(ptr %t231, %S.ast.Type %t232)
store { ptr, i64, i64 } { ptr @.str.1721, i64 10, i64 0 }, ptr %a235
store { ptr, i64, i64 } %t233, ptr %a236
call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236)
%t237 = load { ptr, i64, i64 }, ptr %a234
store { ptr, i64, i64 } %t237, ptr %a239
store { ptr, i64, i64 } { ptr @.str.1722, i64 5, i64 0 }, ptr %a240
call void @finch_str_concat(ptr %a238, ptr %a239, ptr %a240)
%t241 = load { ptr, i64, i64 }, ptr %a238
%t242 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t241, ptr %a244
store { ptr, i64, i64 } %t242, ptr %a245
call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245)
%t246 = load { ptr, i64, i64 }, ptr %a243
store { ptr, i64, i64 } %t246, ptr %a248
store { ptr, i64, i64 } { ptr @.str.1723, i64 6, i64 0 }, ptr %a249
call void @finch_str_concat(ptr %a247, ptr %a248, ptr %a249)
%t250 = load { ptr, i64, i64 }, ptr %a247
%t251 = load ptr, ptr %a1
%t252 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t252, ptr %a253
call void @finch_str_copy(ptr %a254, ptr %a253)
%t255 = load { ptr, i64, i64 }, ptr %a254
%t256 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t255, 0
%t257 = load %S.ast.Type, ptr %a4
store %S.ast.Type %t257, ptr %a258
call void @finch.copy.S_ast_Type(ptr %a259, ptr %a258)
%t260 = load %S.ast.Type, ptr %a259
%t261 = insertvalue %S.gen.Val %t256, %S.ast.Type %t260, 1
%t262 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t251, %S.gen.Val %t261)
store { ptr, i64, i64 } %t250, 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.1724, i64 1, i64 0 }, ptr %a269
call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269)
%t270 = load { ptr, i64, i64 }, ptr %a267
call void @finch.gen.emit(ptr %t230, { ptr, i64, i64 } %t270)
br label %endif2712
endif2712:
br label %endif2705
endif2705:
br label %endif2702
endif2702:
br label %endif2699
endif2699:
br label %endif2696
endif2696:
br label %endif2693
endif2693:
br label %endif2690
endif2690:
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 { 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
%a9 = alloca { ptr, i64, i64 }, align 16
%a17 = alloca { ptr, i64, i64 }, align 16
%a18 = alloca { ptr, i64, i64 }, align 16
%a25 = alloca { ptr, i64, i64 }, align 16
%a26 = alloca { ptr, i64, i64 }, align 16
%a34 = alloca %S.gen.Saved, align 16
%a37 = alloca { ptr, i64, i64 }, align 16
%a38 = alloca { ptr, i64, i64 }, align 16
%a48 = alloca %S.ast.Type, align 16
%a49 = alloca %S.ast.Type, align 16
%a51 = alloca %S.ast.Type, align 16
%a54 = alloca { ptr, i64, i64 }, align 16
%a59 = alloca { ptr, i64, i64 }, align 16
%a64 = alloca { ptr, i64, i64 }, align 16
%a67 = 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
%a87 = 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
%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
%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
%a145 = alloca { ptr, i64, i64 }, align 16
%a146 = alloca { ptr, i64, i64 }, align 16
%a164 = alloca %S.gen.EnumDef, align 16
%a165 = alloca %S.gen.EnumDef, align 16
%a167 = alloca %S.gen.EnumDef, align 16
%a170 = 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
%a182 = alloca 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
%a207 = alloca { ptr, i64, i64 }, align 16
%a208 = alloca { ptr, i64, i64 }, align 16
%a209 = 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
%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
%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
%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
%a255 = alloca { ptr, i64, i64 }, align 16
%a256 = alloca { ptr, i64, i64 }, align 16
%a257 = alloca { ptr, i64, i64 }, align 16
%a265 = alloca i64, align 16
%a294 = alloca { ptr, i64, i64 }, align 16
%a295 = alloca { ptr, i64, i64 }, align 16
%a296 = 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
%a306 = alloca { ptr, i64, i64 }, align 16
%a307 = 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
%a325 = alloca { ptr, i64, i64 }, align 16
%a326 = alloca { ptr, i64, i64 }, align 16
%a331 = 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
%a350 = alloca { ptr, i64, i64 }, align 16
%a354 = alloca { ptr, i64, i64 }, align 16
%a364 = alloca { ptr, i64, i64 }, align 16
%a367 = alloca { ptr, i64, i64 }, align 16
%a370 = 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
%a394 = alloca { ptr, i64, i64 }, align 16
%a397 = alloca { ptr, i64, i64 }, align 16
%a482 = alloca %S.gen.StructDef, align 16
%a483 = alloca %S.gen.StructDef, align 16
%a485 = alloca %S.gen.StructDef, align 16
%a489 = 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
%a500 = alloca i64, align 16
%a503 = 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
%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
%a530 = alloca { ptr, i64, i64 }, align 16
%a531 = alloca { ptr, i64, i64 }, align 16
%a532 = alloca { ptr, i64, i64 }, align 16
%a542 = alloca { ptr, i64, i64 }, align 16
%a544 = 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
%a579 = 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
%a588 = alloca { ptr, i64, i64 }, align 16
%a589 = 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.1725, i64 14, 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 %a9
%t10 = load ptr, ptr %a1
%t11 = icmp eq ptr %t10, null
br i1 %t11, label %panic2713, label %ok2714
panic2713:
call void @finch_panic(ptr @.str.1726, i64 965, ptr @.str.1727)
unreachable
ok2714:
%t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 21
%t13 = load { ptr, i64, i64 }, ptr %t12
%t14 = load { ptr, i64, i64 }, ptr %a9
%t15 = call i1 @finch.gen.has({ ptr, i64, i64 } %t13, { ptr, i64, i64 } %t14)
br i1 %t15, label %then2715, label %endif2717
then2715:
%t16 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t16, ptr %a17
call void @finch_str_copy(ptr %a18, ptr %a17)
%t19 = load { ptr, i64, i64 }, ptr %a18
ret { ptr, i64, i64 } %t19
endif2717:
%t20 = load ptr, ptr %a1
%t21 = icmp eq ptr %t20, null
br i1 %t21, label %panic2718, label %ok2719
panic2718:
call void @finch_panic(ptr @.str.1728, i64 968, ptr @.str.1729)
unreachable
ok2719:
%t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 21
%t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1
%t24 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t24, ptr %a25
call void @finch_str_copy(ptr %a26, ptr %a25)
%t27 = load { ptr, i64, i64 }, ptr %a26
%t28 = load i64, ptr %t23
%t29 = add i64 %t28, 1
call void @finch_arr_reserve(ptr %t22, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t30 = load ptr, ptr %t22
%t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28
store { ptr, i64, i64 } %t27, ptr %t31
store i64 %t29, ptr %t23
%t32 = load ptr, ptr %a1
%t33 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t32)
store %S.gen.Saved %t33, ptr %a34
%t35 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0
%t36 = load { ptr, i64, i64 }, ptr %t35
store { ptr, i64, i64 } %t36, ptr %a37
store { ptr, i64, i64 } { ptr @.str.1730, i64 5, i64 0 }, ptr %a38
%t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38)
%t40 = icmp ne i32 %t39, 0
br i1 %t40, label %then2720, label %else2721
then2720:
%t41 = getelementptr inbounds %S.ast.Type, ptr %a2, 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 %range2723, label %inrange2724
range2723:
call void @finch_panic_index(ptr @.str.1731, i64 971, i64 0, i64 %t43)
unreachable
inrange2724:
%t45 = extractvalue { ptr, i64, i64 } %t42, 0
%t46 = getelementptr inbounds %S.ast.Type, ptr %t45, i64 0
%t47 = load %S.ast.Type, ptr %t46
store %S.ast.Type %t47, ptr %a48
call void @finch.copy.S_ast_Type(ptr %a49, ptr %a48)
%t50 = load %S.ast.Type, ptr %a49
store %S.ast.Type %t50, ptr %a51
%t52 = load ptr, ptr %a1
%t53 = call { ptr, i64, i64 } @finch.gen.load(ptr %t52, { ptr, i64, i64 } { ptr @.str.1732, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1733, i64 2, i64 0 })
store { ptr, i64, i64 } %t53, ptr %a54
%t55 = load ptr, ptr %a1
%t56 = load ptr, ptr %a1
%t57 = call { ptr, i64, i64 } @finch.gen.op(ptr %t56, { ptr, i64, i64 } { ptr @.str.1735, i64 62, i64 0 })
%t58 = call { ptr, i64, i64 } @finch.gen.load(ptr %t55, { ptr, i64, i64 } { ptr @.str.1734, i64 3, i64 0 }, { ptr, i64, i64 } %t57)
store { ptr, i64, i64 } %t58, ptr %a59
%t60 = load ptr, ptr %a1
call void @finch.gen.bufText(ptr %t60, { ptr, i64, i64 } { ptr @.str.1736, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1737, i64 1, i64 0 })
%t61 = load ptr, ptr %a1
%t62 = load { ptr, i64, i64 }, ptr %a59
%t63 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t61, { ptr, i64, i64 } %t62)
store { ptr, i64, i64 } %t63, ptr %a64
%t65 = load ptr, ptr %a1
%t66 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t65, { ptr, i64, i64 } { ptr @.str.1738, i64 3, i64 0 })
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.1739, i64 4, i64 0 })
store { ptr, i64, i64 } %t69, ptr %a70
%t71 = load ptr, ptr %a1
%t72 = load { ptr, i64, i64 }, ptr %a64
%t73 = extractvalue { ptr, i64, i64 } %t72, 1
%t74 = icmp uge i64 3, %t73
br i1 %t74, label %range2725, label %inrange2726
range2725:
call void @finch_panic_index(ptr @.str.1741, i64 978, i64 3, i64 %t73)
unreachable
inrange2726:
%t75 = extractvalue { ptr, i64, i64 } %t72, 0
%t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %t75, i64 3
%t77 = load { ptr, i64, i64 }, ptr %t76
store { ptr, i64, i64 } { ptr @.str.1740, i64 13, 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.1742, i64 3, i64 0 }, ptr %a84
call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84)
%t85 = load { ptr, i64, i64 }, ptr %a82
%t86 = call { ptr, i64, i64 } @finch.gen.op(ptr %t71, { ptr, i64, i64 } %t85)
store { ptr, i64, i64 } %t86, ptr %a87
%t88 = load ptr, ptr %a1
%t89 = load { ptr, i64, i64 }, ptr %a87
%t90 = load { ptr, i64, i64 }, ptr %a67
%t91 = load { ptr, i64, i64 }, ptr %a70
call void @finch.gen.condBr(ptr %t88, { ptr, i64, i64 } %t89, { ptr, i64, i64 } %t90, { ptr, i64, i64 } %t91)
%t92 = load ptr, ptr %a1
%t93 = load { ptr, i64, i64 }, ptr %a67
call void @finch.gen.label(ptr %t92, { ptr, i64, i64 } %t93)
%t94 = load ptr, ptr %a1
call void @finch.gen.bufText(ptr %t94, { ptr, i64, i64 } { ptr @.str.1743, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1744, i64 2, i64 0 })
%t95 = load ptr, ptr %a1
%t96 = load { ptr, i64, i64 }, ptr %a70
call void @finch.gen.br(ptr %t95, { ptr, i64, i64 } %t96)
%t97 = load ptr, ptr %a1
%t98 = load { ptr, i64, i64 }, ptr %a70
call void @finch.gen.label(ptr %t97, { ptr, i64, i64 } %t98)
%t99 = load ptr, ptr %a1
%t100 = load ptr, ptr %a1
%t101 = load %S.ast.Type, ptr %a51
%t102 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t100, %S.ast.Type %t101)
store { ptr, i64, i64 } { ptr @.str.1745, i64 23, 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.1746, i64 6, i64 0 }, ptr %a109
call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109)
%t110 = load { ptr, i64, i64 }, ptr %a107
%t111 = load { ptr, i64, i64 }, ptr %a54
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.1747, i64 6, i64 0 }, ptr %a118
call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118)
%t119 = load { ptr, i64, i64 }, ptr %a116
%t120 = load { ptr, i64, i64 }, ptr %a64
%t121 = extractvalue { ptr, i64, i64 } %t120, 1
%t122 = icmp uge i64 3, %t121
br i1 %t122, label %range2727, label %inrange2728
range2727:
call void @finch_panic_index(ptr @.str.1748, i64 984, i64 3, i64 %t121)
unreachable
inrange2728:
%t123 = extractvalue { ptr, i64, i64 } %t120, 0
%t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i64 3
%t125 = load { ptr, i64, i64 }, ptr %t124
store { ptr, i64, i64 } %t119, 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
%t130 = call { ptr, i64, i64 } @finch.gen.op(ptr %t99, { ptr, i64, i64 } %t129)
store { ptr, i64, i64 } %t130, ptr %a131
%t132 = load ptr, ptr %a1
%t133 = load ptr, ptr %a1
%t134 = load ptr, ptr %a1
%t135 = load %S.ast.Type, ptr %a51
%t136 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t134, %S.ast.Type %t135)
%t137 = load { ptr, i64, i64 }, ptr %a131
%t138 = call { ptr, i64, i64 } @finch.gen.load(ptr %t133, { ptr, i64, i64 } %t136, { ptr, i64, i64 } %t137)
%t139 = load %S.ast.Type, ptr %a51
call void @finch.gen.emitFormat(ptr %t132, { ptr, i64, i64 } { ptr @.str.1749, i64 4, i64 0 }, { ptr, i64, i64 } %t138, %S.ast.Type %t139, i1 true)
%t140 = load ptr, ptr %a1
%t141 = load { ptr, i64, i64 }, ptr %a64
call void @finch.gen.loopEnd(ptr %t140, { ptr, i64, i64 } %t141)
%t142 = load ptr, ptr %a1
call void @finch.gen.bufText(ptr %t142, { ptr, i64, i64 } { ptr @.str.1750, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1751, i64 1, i64 0 })
br label %endif2722
else2721:
%t143 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0
%t144 = load { ptr, i64, i64 }, ptr %t143
store { ptr, i64, i64 } %t144, ptr %a145
store { ptr, i64, i64 } { ptr @.str.1752, i64 4, i64 0 }, ptr %a146
%t147 = call i32 @finch_str_eq(ptr %a145, ptr %a146)
%t148 = icmp ne i32 %t147, 0
br i1 %t148, label %then2729, label %else2730
then2729:
%t149 = load ptr, ptr %a1
%t150 = icmp eq ptr %t149, null
br i1 %t150, label %panic2732, label %ok2733
panic2732:
call void @finch_panic(ptr @.str.1753, i64 990, ptr @.str.1754)
unreachable
ok2733:
%t151 = getelementptr inbounds %S.gen.Gen, ptr %t149, i32 0, i32 20
%t152 = load ptr, ptr %a1
%t153 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t154 = load { ptr, i64, i64 }, ptr %t153
%t155 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t156 = load { ptr, i64, i64 }, ptr %t155
%t157 = call i64 @finch.gen.findEnum(ptr %t152, { ptr, i64, i64 } %t154, { ptr, i64, i64 } %t156)
%t158 = load { ptr, i64, i64 }, ptr %t151
%t159 = extractvalue { ptr, i64, i64 } %t158, 1
%t160 = icmp uge i64 %t157, %t159
br i1 %t160, label %range2734, label %inrange2735
range2734:
call void @finch_panic_index(ptr @.str.1755, i64 990, i64 %t157, i64 %t159)
unreachable
inrange2735:
%t161 = extractvalue { ptr, i64, i64 } %t158, 0
%t162 = getelementptr inbounds %S.gen.EnumDef, ptr %t161, i64 %t157
%t163 = load %S.gen.EnumDef, ptr %t162
store %S.gen.EnumDef %t163, ptr %a164
call void @finch.copy.S_gen_EnumDef(ptr %a165, ptr %a164)
%t166 = load %S.gen.EnumDef, ptr %a165
store %S.gen.EnumDef %t166, ptr %a167
%t168 = load ptr, ptr %a1
%t169 = call { ptr, i64, i64 } @finch.gen.load(ptr %t168, { ptr, i64, i64 } { ptr @.str.1756, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1757, i64 2, i64 0 })
store { ptr, i64, i64 } %t169, ptr %a170
%t171 = load ptr, ptr %a1
%t172 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t171, { ptr, i64, i64 } { ptr @.str.1758, i64 10, i64 0 })
store { ptr, i64, i64 } %t172, ptr %a173
%t174 = load ptr, ptr %a1
%t175 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t174, { ptr, i64, i64 } { ptr @.str.1759, i64 9, i64 0 })
store { ptr, i64, i64 } %t175, ptr %a176
store { ptr, i64, i64 } zeroinitializer, ptr %a177
store { ptr, i64, i64 } zeroinitializer, ptr %a178
%t179 = getelementptr inbounds %S.gen.EnumDef, ptr %a167, i32 0, i32 2
%t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1
%t181 = load i64, ptr %t180
store i64 0, ptr %a182
br label %for.cond2736
for.cond2736:
%t183 = load i64, ptr %a182
%t184 = icmp slt i64 %t183, %t181
br i1 %t184, label %for.body2737, label %for.end2739
for.body2737:
%t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %a178, i32 0, i32 1
%t186 = load ptr, ptr %a1
%t187 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t186, { ptr, i64, i64 } { ptr @.str.1760, i64 6, i64 0 })
%t188 = load i64, ptr %t185
%t189 = add i64 %t188, 1
call void @finch_arr_reserve(ptr %a178, i64 %t189, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t190 = load ptr, ptr %a178
%t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %t190, i64 %t188
store { ptr, i64, i64 } %t187, ptr %t191
store i64 %t189, ptr %t185
%t192 = getelementptr inbounds { ptr, i64, i64 }, ptr %a177, i32 0, i32 1
%t193 = getelementptr inbounds %S.gen.EnumDef, ptr %a167, i32 0, i32 3
%t194 = load i64, ptr %a182
%t195 = load { ptr, i64, i64 }, ptr %t193
%t196 = extractvalue { ptr, i64, i64 } %t195, 1
%t197 = icmp uge i64 %t194, %t196
br i1 %t197, label %range2740, label %inrange2741
range2740:
call void @finch_panic_index(ptr @.str.1762, i64 998, i64 %t194, i64 %t196)
unreachable
inrange2741:
%t198 = extractvalue { ptr, i64, i64 } %t195, 0
%t199 = getelementptr inbounds i64, ptr %t198, i64 %t194
%t200 = load i64, ptr %t199
call void @finch_str_from_int(ptr %a201, i64 %t200)
%t202 = load { ptr, i64, i64 }, ptr %a201
store { ptr, i64, i64 } { ptr @.str.1761, i64 4, 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.1763, i64 9, i64 0 }, ptr %a209
call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209)
%t210 = load { ptr, i64, i64 }, ptr %a207
%t211 = load i64, ptr %a182
%t212 = load { ptr, i64, i64 }, ptr %a178
%t213 = extractvalue { ptr, i64, i64 } %t212, 1
%t214 = icmp uge i64 %t211, %t213
br i1 %t214, label %range2742, label %inrange2743
range2742:
call void @finch_panic_index(ptr @.str.1764, i64 998, i64 %t211, i64 %t213)
unreachable
inrange2743:
%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 } %t210, 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 = load i64, ptr %t192
%t223 = add i64 %t222, 1
call void @finch_arr_reserve(ptr %a177, i64 %t223, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t224 = load ptr, ptr %a177
%t225 = getelementptr inbounds { ptr, i64, i64 }, ptr %t224, i64 %t222
store { ptr, i64, i64 } %t221, ptr %t225
store i64 %t223, ptr %t192
br label %for.step2738
for.step2738:
%t226 = load i64, ptr %a182
%t227 = add i64 %t226, 1
store i64 %t227, ptr %a182
br label %for.cond2736
for.end2739:
%t228 = load ptr, ptr %a1
%t229 = load { ptr, i64, i64 }, ptr %a170
store { ptr, i64, i64 } { ptr @.str.1765, i64 11, 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.1766, i64 9, i64 0 }, ptr %a236
call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236)
%t237 = load { ptr, i64, i64 }, ptr %a234
%t238 = load { ptr, i64, i64 }, ptr %a173
store { ptr, i64, i64 } %t237, ptr %a240
store { ptr, i64, i64 } %t238, ptr %a241
call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241)
%t242 = load { ptr, i64, i64 }, ptr %a239
store { ptr, i64, i64 } %t242, ptr %a244
store { ptr, i64, i64 } { ptr @.str.1767, i64 3, 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 { ptr, i64, i64 }, ptr %a177, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.1768, i64 1, i64 0 }, ptr %a248
call void @finch_str_join(ptr %a249, ptr %a177, ptr %a248)
%t250 = load { ptr, i64, i64 }, ptr %a249
store { ptr, i64, i64 } %t246, 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.1769, i64 2, i64 0 }, ptr %a257
call void @finch_str_concat(ptr %a255, ptr %a256, ptr %a257)
%t258 = load { ptr, i64, i64 }, ptr %a255
call void @finch.gen.emit(ptr %t228, { ptr, i64, i64 } %t258)
%t259 = load ptr, ptr %a1
%t260 = icmp eq ptr %t259, null
br i1 %t260, label %panic2744, label %ok2745
panic2744:
call void @finch_panic(ptr @.str.1770, i64 1001, ptr @.str.1771)
unreachable
ok2745:
%t261 = getelementptr inbounds %S.gen.Gen, ptr %t259, i32 0, i32 9
store i1 true, ptr %t261
%t262 = getelementptr inbounds %S.gen.EnumDef, ptr %a167, i32 0, i32 2
%t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i32 0, i32 1
%t264 = load i64, ptr %t263
store i64 0, ptr %a265
br label %for.cond2746
for.cond2746:
%t266 = load i64, ptr %a265
%t267 = icmp slt i64 %t266, %t264
br i1 %t267, label %for.body2747, label %for.end2749
for.body2747:
%t268 = load ptr, ptr %a1
%t269 = load i64, ptr %a265
%t270 = load { ptr, i64, i64 }, ptr %a178
%t271 = extractvalue { ptr, i64, i64 } %t270, 1
%t272 = icmp uge i64 %t269, %t271
br i1 %t272, label %range2750, label %inrange2751
range2750:
call void @finch_panic_index(ptr @.str.1772, i64 1003, i64 %t269, i64 %t271)
unreachable
inrange2751:
%t273 = extractvalue { ptr, i64, i64 } %t270, 0
%t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 %t269
%t275 = load { ptr, i64, i64 }, ptr %t274
call void @finch.gen.label(ptr %t268, { ptr, i64, i64 } %t275)
%t276 = load ptr, ptr %a1
%t277 = getelementptr inbounds %S.gen.EnumDef, ptr %a167, i32 0, i32 2
%t278 = load i64, ptr %a265
%t279 = load { ptr, i64, i64 }, ptr %t277
%t280 = extractvalue { ptr, i64, i64 } %t279, 1
%t281 = icmp uge i64 %t278, %t280
br i1 %t281, label %range2752, label %inrange2753
range2752:
call void @finch_panic_index(ptr @.str.1774, i64 1004, i64 %t278, i64 %t280)
unreachable
inrange2753:
%t282 = extractvalue { ptr, i64, i64 } %t279, 0
%t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i64 %t278
%t284 = load { ptr, i64, i64 }, ptr %t283
call void @finch.gen.bufText(ptr %t276, { ptr, i64, i64 } { ptr @.str.1773, i64 4, i64 0 }, { ptr, i64, i64 } %t284)
%t285 = load ptr, ptr %a1
%t286 = load { ptr, i64, i64 }, ptr %a176
call void @finch.gen.br(ptr %t285, { ptr, i64, i64 } %t286)
br label %for.step2748
for.step2748:
%t287 = load i64, ptr %a265
%t288 = add i64 %t287, 1
store i64 %t288, ptr %a265
br label %for.cond2746
for.end2749:
%t289 = load ptr, ptr %a1
%t290 = load { ptr, i64, i64 }, ptr %a173
call void @finch.gen.label(ptr %t289, { ptr, i64, i64 } %t290)
%t291 = load ptr, ptr %a1
%t292 = getelementptr inbounds %S.gen.EnumDef, ptr %a167, i32 0, i32 1
%t293 = load { ptr, i64, i64 }, ptr %t292
store { ptr, i64, i64 } %t293, ptr %a295
store { ptr, i64, i64 } { ptr @.str.1776, i64 1, i64 0 }, ptr %a296
call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296)
%t297 = load { ptr, i64, i64 }, ptr %a294
call void @finch.gen.bufText(ptr %t291, { ptr, i64, i64 } { ptr @.str.1775, i64 4, i64 0 }, { ptr, i64, i64 } %t297)
%t298 = load ptr, ptr %a1
%t299 = load ptr, ptr %a1
%t300 = load { ptr, i64, i64 }, ptr %a170
store { ptr, i64, i64 } { ptr @.str.1778, i64 9, i64 0 }, ptr %a302
store { ptr, i64, i64 } %t300, ptr %a303
call void @finch_str_concat(ptr %a301, ptr %a302, ptr %a303)
%t304 = load { ptr, i64, i64 }, ptr %a301
store { ptr, i64, i64 } %t304, ptr %a306
store { ptr, i64, i64 } { ptr @.str.1779, i64 7, i64 0 }, ptr %a307
call void @finch_str_concat(ptr %a305, ptr %a306, ptr %a307)
%t308 = load { ptr, i64, i64 }, ptr %a305
%t309 = call { ptr, i64, i64 } @finch.gen.op(ptr %t299, { ptr, i64, i64 } %t308)
store { ptr, i64, i64 } { ptr @.str.1777, i64 39, i64 0 }, ptr %a311
store { ptr, i64, i64 } %t309, ptr %a312
call void @finch_str_concat(ptr %a310, ptr %a311, ptr %a312)
%t313 = load { ptr, i64, i64 }, ptr %a310
store { ptr, i64, i64 } %t313, ptr %a315
store { ptr, i64, i64 } { ptr @.str.1780, i64 1, i64 0 }, ptr %a316
call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316)
%t317 = load { ptr, i64, i64 }, ptr %a314
call void @finch.gen.emit(ptr %t298, { ptr, i64, i64 } %t317)
%t318 = load ptr, ptr %a1
call void @finch.gen.bufText(ptr %t318, { ptr, i64, i64 } { ptr @.str.1781, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1782, i64 1, i64 0 })
%t319 = load ptr, ptr %a1
%t320 = load { ptr, i64, i64 }, ptr %a176
call void @finch.gen.br(ptr %t319, { ptr, i64, i64 } %t320)
%t321 = load ptr, ptr %a1
%t322 = load { ptr, i64, i64 }, ptr %a176
call void @finch.gen.label(ptr %t321, { ptr, i64, i64 } %t322)
br label %endif2731
else2730:
%t323 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0
%t324 = load { ptr, i64, i64 }, ptr %t323
store { ptr, i64, i64 } %t324, ptr %a325
store { ptr, i64, i64 } { ptr @.str.1783, i64 3, i64 0 }, ptr %a326
%t327 = call i32 @finch_str_eq(ptr %a325, ptr %a326)
%t328 = icmp ne i32 %t327, 0
br i1 %t328, label %then2754, label %else2755
then2754:
%t329 = load ptr, ptr %a1
%t330 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t329, { ptr, i64, i64 } { ptr @.str.1784, i64 2, 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.1785, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.1786, i64 4, i64 0 }, { ptr, i64, i64 } %t333)
%t334 = load ptr, ptr %a1
call void @finch.gen.bufText(ptr %t334, { ptr, i64, i64 } { ptr @.str.1787, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1788, i64 1, i64 0 })
%t335 = load ptr, ptr %a1
%t336 = load ptr, ptr %a1
%t337 = load ptr, ptr %a1
%t338 = load %S.ast.Type, ptr %a2
%t339 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t337, %S.ast.Type %t338)
store { ptr, i64, i64 } { ptr @.str.1790, i64 23, i64 0 }, ptr %a341
store { ptr, i64, i64 } %t339, ptr %a342
call void @finch_str_concat(ptr %a340, ptr %a341, ptr %a342)
%t343 = load { ptr, i64, i64 }, ptr %a340
store { ptr, i64, i64 } %t343, ptr %a345
store { ptr, i64, i64 } { ptr @.str.1791, i64 22, i64 0 }, ptr %a346
call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346)
%t347 = load { ptr, i64, i64 }, ptr %a344
%t348 = call { ptr, i64, i64 } @finch.gen.op(ptr %t336, { ptr, i64, i64 } %t347)
%t349 = call { ptr, i64, i64 } @finch.gen.load(ptr %t335, { ptr, i64, i64 } { ptr @.str.1789, i64 3, i64 0 }, { ptr, i64, i64 } %t348)
store { ptr, i64, i64 } %t349, ptr %a350
%t351 = load ptr, ptr %a1
%t352 = load { ptr, i64, i64 }, ptr %a350
%t353 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t351, { ptr, i64, i64 } %t352)
store { ptr, i64, i64 } %t353, ptr %a354
%t355 = load ptr, ptr %a1
%t356 = load %S.ast.Type, ptr %a2
%t357 = load { ptr, i64, i64 }, ptr %a354
%t358 = extractvalue { ptr, i64, i64 } %t357, 1
%t359 = icmp uge i64 3, %t358
br i1 %t359, label %range2757, label %inrange2758
range2757:
call void @finch_panic_index(ptr @.str.1793, i64 1020, i64 3, i64 %t358)
unreachable
inrange2758:
%t360 = extractvalue { ptr, i64, i64 } %t357, 0
%t361 = getelementptr inbounds { ptr, i64, i64 }, ptr %t360, i64 3
%t362 = load { ptr, i64, i64 }, ptr %t361
%t363 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t355, { ptr, i64, i64 } { ptr @.str.1792, i64 2, i64 0 }, %S.ast.Type %t356, { ptr, i64, i64 } %t362)
store { ptr, i64, i64 } %t363, ptr %a364
%t365 = load ptr, ptr %a1
%t366 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t365, { ptr, i64, i64 } { ptr @.str.1794, i64 10, i64 0 })
store { ptr, i64, i64 } %t366, ptr %a367
%t368 = load ptr, ptr %a1
%t369 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t368, { ptr, i64, i64 } { ptr @.str.1795, i64 10, i64 0 })
store { ptr, i64, i64 } %t369, ptr %a370
%t371 = load ptr, ptr %a1
%t372 = load ptr, ptr %a1
%t373 = load ptr, ptr %a1
%t374 = load ptr, ptr %a1
%t375 = load { ptr, i64, i64 }, ptr %a364
%t376 = load %S.ast.Type, ptr %a2
%t377 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t374, { ptr, i64, i64 } %t375, %S.ast.Type %t376, i64 0)
%t378 = call { ptr, i64, i64 } @finch.gen.load(ptr %t373, { ptr, i64, i64 } { ptr @.str.1797, i64 3, i64 0 }, { ptr, i64, i64 } %t377)
store { ptr, i64, i64 } { ptr @.str.1796, i64 12, i64 0 }, ptr %a380
store { ptr, i64, i64 } %t378, ptr %a381
call void @finch_str_concat(ptr %a379, ptr %a380, ptr %a381)
%t382 = load { ptr, i64, i64 }, ptr %a379
store { ptr, i64, i64 } %t382, ptr %a384
store { ptr, i64, i64 } { ptr @.str.1798, i64 3, i64 0 }, ptr %a385
call void @finch_str_concat(ptr %a383, ptr %a384, ptr %a385)
%t386 = load { ptr, i64, i64 }, ptr %a383
%t387 = call { ptr, i64, i64 } @finch.gen.op(ptr %t372, { ptr, i64, i64 } %t386)
%t388 = load { ptr, i64, i64 }, ptr %a367
%t389 = load { ptr, i64, i64 }, ptr %a370
call void @finch.gen.condBr(ptr %t371, { ptr, i64, i64 } %t387, { ptr, i64, i64 } %t388, { ptr, i64, i64 } %t389)
%t390 = load ptr, ptr %a1
%t391 = load { ptr, i64, i64 }, ptr %a367
call void @finch.gen.label(ptr %t390, { ptr, i64, i64 } %t391)
%t392 = load ptr, ptr %a1
%t393 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t392, { ptr, i64, i64 } { ptr @.str.1799, i64 3, i64 0 })
store { ptr, i64, i64 } %t393, ptr %a394
%t395 = load ptr, ptr %a1
%t396 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t395, { ptr, i64, i64 } { ptr @.str.1800, i64 4, i64 0 })
store { ptr, i64, i64 } %t396, ptr %a397
%t398 = load ptr, ptr %a1
%t399 = load ptr, ptr %a1
%t400 = load { ptr, i64, i64 }, ptr %a331
%t401 = call { ptr, i64, i64 } @finch.gen.load(ptr %t399, { ptr, i64, i64 } { ptr @.str.1801, i64 2, i64 0 }, { ptr, i64, i64 } %t400)
%t402 = load { ptr, i64, i64 }, ptr %a397
%t403 = load { ptr, i64, i64 }, ptr %a394
call void @finch.gen.condBr(ptr %t398, { ptr, i64, i64 } %t401, { ptr, i64, i64 } %t402, { ptr, i64, i64 } %t403)
%t404 = load ptr, ptr %a1
%t405 = load { ptr, i64, i64 }, ptr %a394
call void @finch.gen.label(ptr %t404, { ptr, i64, i64 } %t405)
%t406 = load ptr, ptr %a1
call void @finch.gen.bufText(ptr %t406, { ptr, i64, i64 } { ptr @.str.1802, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1803, i64 2, i64 0 })
%t407 = load ptr, ptr %a1
%t408 = load { ptr, i64, i64 }, ptr %a397
call void @finch.gen.br(ptr %t407, { ptr, i64, i64 } %t408)
%t409 = load ptr, ptr %a1
%t410 = load { ptr, i64, i64 }, ptr %a397
call void @finch.gen.label(ptr %t409, { ptr, i64, i64 } %t410)
%t411 = load ptr, ptr %a1
%t412 = load { ptr, i64, i64 }, ptr %a331
call void @finch.gen.store(ptr %t411, { ptr, i64, i64 } { ptr @.str.1804, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.1805, i64 5, i64 0 }, { ptr, i64, i64 } %t412)
%t413 = load ptr, ptr %a1
%t414 = load ptr, ptr %a1
%t415 = load ptr, ptr %a1
%t416 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t417 = load { ptr, i64, i64 }, ptr %t416
%t418 = extractvalue { ptr, i64, i64 } %t417, 1
%t419 = icmp uge i64 0, %t418
br i1 %t419, label %range2759, label %inrange2760
range2759:
call void @finch_panic_index(ptr @.str.1807, i64 1033, i64 0, i64 %t418)
unreachable
inrange2760:
%t420 = extractvalue { ptr, i64, i64 } %t417, 0
%t421 = getelementptr inbounds %S.ast.Type, ptr %t420, i64 0
%t422 = load %S.ast.Type, ptr %t421
%t423 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t415, %S.ast.Type %t422)
%t424 = load ptr, ptr %a1
%t425 = load { ptr, i64, i64 }, ptr %a364
%t426 = load %S.ast.Type, ptr %a2
%t427 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t424, { ptr, i64, i64 } %t425, %S.ast.Type %t426, i64 1)
%t428 = call { ptr, i64, i64 } @finch.gen.load(ptr %t414, { ptr, i64, i64 } %t423, { ptr, i64, i64 } %t427)
%t429 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t430 = load { ptr, i64, i64 }, ptr %t429
%t431 = extractvalue { ptr, i64, i64 } %t430, 1
%t432 = icmp uge i64 0, %t431
br i1 %t432, label %range2761, label %inrange2762
range2761:
call void @finch_panic_index(ptr @.str.1808, i64 1033, i64 0, i64 %t431)
unreachable
inrange2762:
%t433 = extractvalue { ptr, i64, i64 } %t430, 0
%t434 = getelementptr inbounds %S.ast.Type, ptr %t433, i64 0
%t435 = load %S.ast.Type, ptr %t434
call void @finch.gen.emitFormat(ptr %t413, { ptr, i64, i64 } { ptr @.str.1806, i64 4, i64 0 }, { ptr, i64, i64 } %t428, %S.ast.Type %t435, i1 true)
%t436 = load ptr, ptr %a1
call void @finch.gen.bufText(ptr %t436, { ptr, i64, i64 } { ptr @.str.1809, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1810, i64 2, i64 0 })
%t437 = load ptr, ptr %a1
%t438 = load ptr, ptr %a1
%t439 = load ptr, ptr %a1
%t440 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t441 = load { ptr, i64, i64 }, ptr %t440
%t442 = extractvalue { ptr, i64, i64 } %t441, 1
%t443 = icmp uge i64 1, %t442
br i1 %t443, label %range2763, label %inrange2764
range2763:
call void @finch_panic_index(ptr @.str.1812, i64 1035, i64 1, i64 %t442)
unreachable
inrange2764:
%t444 = extractvalue { ptr, i64, i64 } %t441, 0
%t445 = getelementptr inbounds %S.ast.Type, ptr %t444, i64 1
%t446 = load %S.ast.Type, ptr %t445
%t447 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t439, %S.ast.Type %t446)
%t448 = load ptr, ptr %a1
%t449 = load { ptr, i64, i64 }, ptr %a364
%t450 = load %S.ast.Type, ptr %a2
%t451 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t448, { ptr, i64, i64 } %t449, %S.ast.Type %t450, i64 2)
%t452 = call { ptr, i64, i64 } @finch.gen.load(ptr %t438, { ptr, i64, i64 } %t447, { ptr, i64, i64 } %t451)
%t453 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t454 = load { ptr, i64, i64 }, ptr %t453
%t455 = extractvalue { ptr, i64, i64 } %t454, 1
%t456 = icmp uge i64 1, %t455
br i1 %t456, label %range2765, label %inrange2766
range2765:
call void @finch_panic_index(ptr @.str.1813, i64 1035, i64 1, i64 %t455)
unreachable
inrange2766:
%t457 = extractvalue { ptr, i64, i64 } %t454, 0
%t458 = getelementptr inbounds %S.ast.Type, ptr %t457, i64 1
%t459 = load %S.ast.Type, ptr %t458
call void @finch.gen.emitFormat(ptr %t437, { ptr, i64, i64 } { ptr @.str.1811, i64 4, i64 0 }, { ptr, i64, i64 } %t452, %S.ast.Type %t459, i1 true)
%t460 = load ptr, ptr %a1
%t461 = load { ptr, i64, i64 }, ptr %a370
call void @finch.gen.br(ptr %t460, { ptr, i64, i64 } %t461)
%t462 = load ptr, ptr %a1
%t463 = load { ptr, i64, i64 }, ptr %a370
call void @finch.gen.label(ptr %t462, { ptr, i64, i64 } %t463)
%t464 = load ptr, ptr %a1
%t465 = load { ptr, i64, i64 }, ptr %a354
call void @finch.gen.loopEnd(ptr %t464, { ptr, i64, i64 } %t465)
%t466 = load ptr, ptr %a1
call void @finch.gen.bufText(ptr %t466, { ptr, i64, i64 } { ptr @.str.1814, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1815, i64 1, i64 0 })
br label %endif2756
else2755:
%t467 = load ptr, ptr %a1
%t468 = icmp eq ptr %t467, null
br i1 %t468, label %panic2767, label %ok2768
panic2767:
call void @finch_panic(ptr @.str.1816, i64 1041, ptr @.str.1817)
unreachable
ok2768:
%t469 = getelementptr inbounds %S.gen.Gen, ptr %t467, i32 0, i32 15
%t470 = load ptr, ptr %a1
%t471 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t472 = load { ptr, i64, i64 }, ptr %t471
%t473 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t474 = load { ptr, i64, i64 }, ptr %t473
%t475 = call i64 @finch.gen.findStruct(ptr %t470, { ptr, i64, i64 } %t472, { ptr, i64, i64 } %t474)
%t476 = load { ptr, i64, i64 }, ptr %t469
%t477 = extractvalue { ptr, i64, i64 } %t476, 1
%t478 = icmp uge i64 %t475, %t477
br i1 %t478, label %range2769, label %inrange2770
range2769:
call void @finch_panic_index(ptr @.str.1818, i64 1041, i64 %t475, i64 %t477)
unreachable
inrange2770:
%t479 = extractvalue { ptr, i64, i64 } %t476, 0
%t480 = getelementptr inbounds %S.gen.StructDef, ptr %t479, i64 %t475
%t481 = load %S.gen.StructDef, ptr %t480
store %S.gen.StructDef %t481, ptr %a482
call void @finch.copy.S_gen_StructDef(ptr %a483, ptr %a482)
%t484 = load %S.gen.StructDef, ptr %a483
store %S.gen.StructDef %t484, ptr %a485
%t486 = load ptr, ptr %a1
%t487 = load %S.ast.Type, ptr %a2
%t488 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t486, %S.ast.Type %t487)
store { ptr, i64, i64 } %t488, ptr %a489
%t490 = load ptr, ptr %a1
%t491 = getelementptr inbounds %S.gen.StructDef, ptr %a485, i32 0, i32 1
%t492 = load { ptr, i64, i64 }, ptr %t491
store { ptr, i64, i64 } %t492, ptr %a494
store { ptr, i64, i64 } { ptr @.str.1820, i64 1, i64 0 }, ptr %a495
call void @finch_str_concat(ptr %a493, ptr %a494, ptr %a495)
%t496 = load { ptr, i64, i64 }, ptr %a493
call void @finch.gen.bufText(ptr %t490, { ptr, i64, i64 } { ptr @.str.1819, i64 4, i64 0 }, { ptr, i64, i64 } %t496)
%t497 = getelementptr inbounds %S.gen.StructDef, ptr %a485, i32 0, i32 12
%t498 = getelementptr inbounds { ptr, i64, i64 }, ptr %t497, i32 0, i32 1
%t499 = load i64, ptr %t498
store i64 0, ptr %a500
br label %for.cond2771
for.cond2771:
%t501 = load i64, ptr %a500
%t502 = icmp slt i64 %t501, %t499
br i1 %t502, label %for.body2772, label %for.end2774
for.body2772:
store { ptr, i64, i64 } { ptr @.str.1821, i64 2, i64 0 }, ptr %a503
%t504 = load i64, ptr %a500
%t505 = icmp eq i64 %t504, 0
br i1 %t505, label %then2775, label %endif2777
then2775:
store { ptr, i64, i64 } { ptr @.str.1822, i64 0, i64 0 }, ptr %a503
br label %endif2777
endif2777:
%t506 = load ptr, ptr %a1
%t507 = load { ptr, i64, i64 }, ptr %a503
%t508 = getelementptr inbounds %S.gen.StructDef, ptr %a485, i32 0, i32 11
%t509 = load i64, ptr %a500
%t510 = load { ptr, i64, i64 }, ptr %t508
%t511 = extractvalue { ptr, i64, i64 } %t510, 1
%t512 = icmp uge i64 %t509, %t511
br i1 %t512, label %range2778, label %inrange2779
range2778:
call void @finch_panic_index(ptr @.str.1824, i64 1049, i64 %t509, i64 %t511)
unreachable
inrange2779:
%t513 = extractvalue { ptr, i64, i64 } %t510, 0
%t514 = getelementptr inbounds { ptr, i64, i64 }, ptr %t513, i64 %t509
%t515 = load { ptr, i64, i64 }, ptr %t514
store { ptr, i64, i64 } %t507, ptr %a517
store { ptr, i64, i64 } %t515, ptr %a518
call void @finch_str_concat(ptr %a516, ptr %a517, ptr %a518)
%t519 = load { ptr, i64, i64 }, ptr %a516
store { ptr, i64, i64 } %t519, ptr %a521
store { ptr, i64, i64 } { ptr @.str.1825, i64 2, i64 0 }, ptr %a522
call void @finch_str_concat(ptr %a520, ptr %a521, ptr %a522)
%t523 = load { ptr, i64, i64 }, ptr %a520
call void @finch.gen.bufText(ptr %t506, { ptr, i64, i64 } { ptr @.str.1823, i64 4, i64 0 }, { ptr, i64, i64 } %t523)
%t524 = load ptr, ptr %a1
%t525 = load { ptr, i64, i64 }, ptr %a489
store { ptr, i64, i64 } { ptr @.str.1826, i64 23, i64 0 }, ptr %a527
store { ptr, i64, i64 } %t525, ptr %a528
call void @finch_str_concat(ptr %a526, ptr %a527, ptr %a528)
%t529 = load { ptr, i64, i64 }, ptr %a526
store { ptr, i64, i64 } %t529, ptr %a531
store { ptr, i64, i64 } { ptr @.str.1827, i64 21, i64 0 }, ptr %a532
call void @finch_str_concat(ptr %a530, ptr %a531, ptr %a532)
%t533 = load { ptr, i64, i64 }, ptr %a530
%t534 = getelementptr inbounds %S.gen.StructDef, ptr %a485, i32 0, i32 3
%t535 = load i64, ptr %a500
%t536 = load { ptr, i64, i64 }, ptr %t534
%t537 = extractvalue { ptr, i64, i64 } %t536, 1
%t538 = icmp uge i64 %t535, %t537
br i1 %t538, label %range2780, label %inrange2781
range2780:
call void @finch_panic_index(ptr @.str.1828, i64 1050, i64 %t535, i64 %t537)
unreachable
inrange2781:
%t539 = extractvalue { ptr, i64, i64 } %t536, 0
%t540 = getelementptr inbounds i64, ptr %t539, i64 %t535
%t541 = load i64, ptr %t540
call void @finch_str_from_int(ptr %a542, i64 %t541)
%t543 = load { ptr, i64, i64 }, ptr %a542
store { ptr, i64, i64 } %t533, ptr %a545
store { ptr, i64, i64 } %t543, ptr %a546
call void @finch_str_concat(ptr %a544, ptr %a545, ptr %a546)
%t547 = load { ptr, i64, i64 }, ptr %a544
%t548 = call { ptr, i64, i64 } @finch.gen.op(ptr %t524, { ptr, i64, i64 } %t547)
store { ptr, i64, i64 } %t548, ptr %a549
%t550 = load ptr, ptr %a1
%t551 = load ptr, ptr %a1
%t552 = load ptr, ptr %a1
%t553 = getelementptr inbounds %S.gen.StructDef, ptr %a485, i32 0, i32 12
%t554 = load i64, ptr %a500
%t555 = load { ptr, i64, i64 }, ptr %t553
%t556 = extractvalue { ptr, i64, i64 } %t555, 1
%t557 = icmp uge i64 %t554, %t556
br i1 %t557, label %range2782, label %inrange2783
range2782:
call void @finch_panic_index(ptr @.str.1830, i64 1051, i64 %t554, i64 %t556)
unreachable
inrange2783:
%t558 = extractvalue { ptr, i64, i64 } %t555, 0
%t559 = getelementptr inbounds %S.ast.Type, ptr %t558, i64 %t554
%t560 = load %S.ast.Type, ptr %t559
%t561 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t552, %S.ast.Type %t560)
%t562 = load { ptr, i64, i64 }, ptr %a549
%t563 = call { ptr, i64, i64 } @finch.gen.load(ptr %t551, { ptr, i64, i64 } %t561, { ptr, i64, i64 } %t562)
%t564 = getelementptr inbounds %S.gen.StructDef, ptr %a485, i32 0, i32 12
%t565 = load i64, ptr %a500
%t566 = load { ptr, i64, i64 }, ptr %t564
%t567 = extractvalue { ptr, i64, i64 } %t566, 1
%t568 = icmp uge i64 %t565, %t567
br i1 %t568, label %range2784, label %inrange2785
range2784:
call void @finch_panic_index(ptr @.str.1831, i64 1051, i64 %t565, i64 %t567)
unreachable
inrange2785:
%t569 = extractvalue { ptr, i64, i64 } %t566, 0
%t570 = getelementptr inbounds %S.ast.Type, ptr %t569, i64 %t565
%t571 = load %S.ast.Type, ptr %t570
call void @finch.gen.emitFormat(ptr %t550, { ptr, i64, i64 } { ptr @.str.1829, i64 4, i64 0 }, { ptr, i64, i64 } %t563, %S.ast.Type %t571, i1 true)
br label %for.step2773
for.step2773:
%t572 = load i64, ptr %a500
%t573 = add i64 %t572, 1
store i64 %t573, ptr %a500
br label %for.cond2771
for.end2774:
%t574 = load ptr, ptr %a1
call void @finch.gen.bufText(ptr %t574, { ptr, i64, i64 } { ptr @.str.1832, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1833, i64 1, i64 0 })
br label %endif2756
endif2756:
br label %endif2731
endif2731:
br label %endif2722
endif2722:
%t575 = load ptr, ptr %a1
call void @finch.gen.emit(ptr %t575, { ptr, i64, i64 } { ptr @.str.1834, i64 8, i64 0 })
%t576 = load ptr, ptr %a1
%t577 = load %S.gen.Saved, ptr %a34
%t578 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } { ptr @.str.1835, i64 21, i64 0 }, ptr %a580
store { ptr, i64, i64 } %t578, ptr %a581
call void @finch_str_concat(ptr %a579, ptr %a580, ptr %a581)
%t582 = load { ptr, i64, i64 }, ptr %a579
store { ptr, i64, i64 } %t582, ptr %a584
store { ptr, i64, i64 } { ptr @.str.1836, i64 18, i64 0 }, ptr %a585
call void @finch_str_concat(ptr %a583, ptr %a584, ptr %a585)
%t586 = load { ptr, i64, i64 }, ptr %a583
call void @finch.gen.endHelper(ptr %t576, %S.gen.Saved %t577, { ptr, i64, i64 } %t586)
%t587 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t587, ptr %a588
call void @finch_str_copy(ptr %a589, ptr %a588)
%t590 = load { ptr, i64, i64 }, ptr %a589
ret { ptr, i64, i64 } %t590
}
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
%a29 = 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
%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
%a45 = alloca { ptr, i64, i64 }, align 16
%a46 = alloca { ptr, i64, i64 }, align 16
%a47 = 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
%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
%a76 = alloca { ptr, i64, i64 }, align 16
%a77 = alloca { ptr, i64, i64 }, align 16
%a78 = 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
%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
%a105 = 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
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 %then2786, label %endif2788
then2786:
%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
endif2788:
%t18 = load i64, ptr %a10
%t19 = load i64, ptr %a7
%t20 = icmp slt i64 %t18, %t19
br i1 %t20, label %then2789, label %endif2791
then2789:
%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.1837, 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.1838, i64 1, i64 0 }, ptr %a31
call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31)
%t32 = load { ptr, i64, i64 }, ptr %a29
%t33 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t32, ptr %a35
store { ptr, i64, i64 } %t33, ptr %a36
call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36)
%t37 = load { ptr, i64, i64 }, ptr %a34
store { ptr, i64, i64 } %t37, ptr %a39
store { ptr, i64, i64 } { ptr @.str.1839, i64 4, i64 0 }, ptr %a40
call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40)
%t41 = load { ptr, i64, i64 }, ptr %a38
%t42 = load ptr, ptr %a1
%t43 = load %S.ast.Type, ptr %a4
%t44 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t42, %S.ast.Type %t43)
store { ptr, i64, i64 } %t41, 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
%t49 = call { ptr, i64, i64 } @finch.gen.op(ptr %t21, { ptr, i64, i64 } %t48)
ret { ptr, i64, i64 } %t49
endif2791:
%t50 = load %S.ast.Type, ptr %a3
%t51 = call i1 @finch.gen.isSigned(%S.ast.Type %t50)
br i1 %t51, label %then2792, label %endif2794
then2792:
%t52 = load ptr, ptr %a1
%t53 = load ptr, ptr %a1
%t54 = load %S.ast.Type, ptr %a3
%t55 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t53, %S.ast.Type %t54)
store { ptr, i64, i64 } { ptr @.str.1840, i64 5, 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
store { ptr, i64, i64 } %t59, ptr %a61
store { ptr, i64, i64 } { ptr @.str.1841, i64 1, i64 0 }, ptr %a62
call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62)
%t63 = load { ptr, i64, i64 }, ptr %a60
%t64 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t63, ptr %a66
store { ptr, i64, i64 } %t64, ptr %a67
call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67)
%t68 = load { ptr, i64, i64 }, ptr %a65
store { ptr, i64, i64 } %t68, ptr %a70
store { ptr, i64, i64 } { ptr @.str.1842, i64 4, i64 0 }, ptr %a71
call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71)
%t72 = load { ptr, i64, i64 }, ptr %a69
%t73 = load ptr, ptr %a1
%t74 = load %S.ast.Type, ptr %a4
%t75 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t73, %S.ast.Type %t74)
store { ptr, i64, i64 } %t72, 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
%t80 = call { ptr, i64, i64 } @finch.gen.op(ptr %t52, { ptr, i64, i64 } %t79)
ret { ptr, i64, i64 } %t80
endif2794:
%t81 = load ptr, ptr %a1
%t82 = load ptr, ptr %a1
%t83 = load %S.ast.Type, ptr %a3
%t84 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t82, %S.ast.Type %t83)
store { ptr, i64, i64 } { ptr @.str.1843, i64 5, 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.1844, i64 1, i64 0 }, ptr %a91
call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91)
%t92 = load { ptr, i64, i64 }, ptr %a89
%t93 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t92, ptr %a95
store { ptr, i64, i64 } %t93, ptr %a96
call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96)
%t97 = load { ptr, i64, i64 }, ptr %a94
store { ptr, i64, i64 } %t97, ptr %a99
store { ptr, i64, i64 } { ptr @.str.1845, i64 4, i64 0 }, ptr %a100
call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100)
%t101 = load { ptr, i64, i64 }, ptr %a98
%t102 = load ptr, ptr %a1
%t103 = load %S.ast.Type, ptr %a4
%t104 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t102, %S.ast.Type %t103)
store { ptr, i64, i64 } %t101, ptr %a106
store { ptr, i64, i64 } %t104, ptr %a107
call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107)
%t108 = load { ptr, i64, i64 }, ptr %a105
%t109 = call { ptr, i64, i64 } @finch.gen.op(ptr %t81, { ptr, i64, i64 } %t108)
ret { ptr, i64, i64 } %t109
}
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
%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
%a39 = 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
%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
%a59 = 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
%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
%a75 = alloca { ptr, i64, i64 }, align 16
%a76 = alloca { ptr, i64, i64 }, align 16
%a77 = 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 %then2795, label %endif2797
then2795:
%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
endif2797:
%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 %then2798, label %endif2800
then2798:
%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.1846, i64 6, i64 0 }, ptr %a27
store { ptr, i64, i64 } %t25, ptr %a28
call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28)
%t29 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t29, ptr %a31
store { ptr, i64, i64 } { ptr @.str.1847, i64 1, i64 0 }, ptr %a32
call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32)
%t33 = load { ptr, i64, i64 }, ptr %a30
%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)
%t38 = load { ptr, i64, i64 }, ptr %a35
store { ptr, i64, i64 } %t38, ptr %a40
store { ptr, i64, i64 } { ptr @.str.1848, i64 4, i64 0 }, ptr %a41
call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41)
%t42 = load { ptr, i64, i64 }, ptr %a39
%t43 = load ptr, ptr %a1
%t44 = load %S.ast.Type, ptr %a4
%t45 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t43, %S.ast.Type %t44)
store { ptr, i64, i64 } %t42, 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
%t50 = call { ptr, i64, i64 } @finch.gen.op(ptr %t22, { ptr, i64, i64 } %t49)
ret { ptr, i64, i64 } %t50
endif2800:
%t51 = load ptr, ptr %a1
%t52 = load ptr, ptr %a1
%t53 = load %S.ast.Type, ptr %a3
%t54 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t52, %S.ast.Type %t53)
store { ptr, i64, i64 } { ptr @.str.1849, i64 8, i64 0 }, ptr %a56
store { ptr, i64, i64 } %t54, ptr %a57
call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57)
%t58 = load { ptr, i64, i64 }, ptr %a55
store { ptr, i64, i64 } %t58, ptr %a60
store { ptr, i64, i64 } { ptr @.str.1850, i64 1, i64 0 }, ptr %a61
call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61)
%t62 = load { ptr, i64, i64 }, ptr %a59
%t63 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t62, 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.1851, i64 4, i64 0 }, ptr %a70
call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70)
%t71 = load { ptr, i64, i64 }, ptr %a68
%t72 = load ptr, ptr %a1
%t73 = load %S.ast.Type, ptr %a4
%t74 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t72, %S.ast.Type %t73)
store { ptr, i64, i64 } %t71, ptr %a76
store { ptr, i64, i64 } %t74, ptr %a77
call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77)
%t78 = load { ptr, i64, i64 }, ptr %a75
%t79 = call { ptr, i64, i64 } @finch.gen.op(ptr %t51, { ptr, i64, i64 } %t78)
ret { ptr, i64, i64 } %t79
}
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
%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
%a24 = 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
%a33 = 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
%a49 = alloca { ptr, i64, i64 }, align 16
%a50 = alloca { ptr, i64, i64 }, align 16
%a51 = 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
%a60 = alloca { ptr, i64, i64 }, align 16
%a61 = alloca { ptr, i64, i64 }, align 16
%a62 = 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 %then2801, label %endif2803
then2801:
%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.1852, i64 7, 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.1853, i64 1, 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, 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)
%t23 = load { ptr, i64, i64 }, ptr %a20
store { ptr, i64, i64 } %t23, ptr %a25
store { ptr, i64, i64 } { ptr @.str.1854, i64 4, 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, ptr %a1
%t29 = load %S.ast.Type, ptr %a4
%t30 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t28, %S.ast.Type %t29)
store { ptr, i64, i64 } %t27, 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 = call { ptr, i64, i64 } @finch.gen.op(ptr %t7, { ptr, i64, i64 } %t34)
ret { ptr, i64, i64 } %t35
endif2803:
%t36 = load ptr, ptr %a1
%t37 = load ptr, ptr %a1
%t38 = load %S.ast.Type, ptr %a3
%t39 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t37, %S.ast.Type %t38)
store { ptr, i64, i64 } { ptr @.str.1855, i64 7, i64 0 }, ptr %a41
store { ptr, i64, i64 } %t39, ptr %a42
call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42)
%t43 = load { ptr, i64, i64 }, ptr %a40
store { ptr, i64, i64 } %t43, ptr %a45
store { ptr, i64, i64 } { ptr @.str.1856, i64 1, i64 0 }, ptr %a46
call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46)
%t47 = load { ptr, i64, i64 }, ptr %a44
%t48 = load { ptr, i64, i64 }, ptr %a2
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)
%t52 = load { ptr, i64, i64 }, ptr %a49
store { ptr, i64, i64 } %t52, ptr %a54
store { ptr, i64, i64 } { ptr @.str.1857, i64 4, i64 0 }, ptr %a55
call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55)
%t56 = load { ptr, i64, i64 }, ptr %a53
%t57 = load ptr, ptr %a1
%t58 = load %S.ast.Type, ptr %a4
%t59 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t57, %S.ast.Type %t58)
store { ptr, i64, i64 } %t56, 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
%t64 = call { ptr, i64, i64 } @finch.gen.op(ptr %t36, { ptr, i64, i64 } %t63)
ret { ptr, i64, i64 } %t64
}
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
%a130 = alloca { ptr, i64, i64 }, align 16
%a131 = alloca { ptr, i64, i64 }, align 16
%a132 = alloca { ptr, i64, i64 }, align 16
%a144 = alloca { ptr, i64, i64 }, align 16
%a145 = 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 %S.ast.Type, align 16
%a158 = alloca %S.ast.Type, align 16
%a171 = alloca %S.ast.Type, align 16
%a172 = alloca %S.ast.Type, 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
%a198 = alloca %S.ast.Type, align 16
%a199 = alloca %S.ast.Type, align 16
%a205 = alloca { ptr, i64, i64 }, align 16
%a206 = alloca { ptr, i64, i64 }, align 16
%a211 = alloca { ptr, i64, i64 }, align 16
%a212 = alloca { ptr, i64, i64 }, align 16
%a228 = alloca %S.ast.Type, align 16
%a229 = alloca %S.ast.Type, 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
%a243 = alloca { ptr, i64, i64 }, align 16
%a244 = alloca { ptr, i64, i64 }, align 16
%a245 = 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
%a254 = 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
%a272 = alloca { ptr, i64, i64 }, align 16
%a273 = alloca { ptr, i64, i64 }, align 16
%a274 = 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
%a288 = alloca { ptr, i64, i64 }, align 16
%a289 = alloca { ptr, i64, i64 }, align 16
%a290 = alloca { ptr, i64, i64 }, align 16
%a294 = alloca { ptr, i64, i64 }, align 16
%a295 = alloca { ptr, i64, i64 }, align 16
%a304 = alloca { ptr, i64, i64 }, align 16
%a305 = alloca { ptr, i64, i64 }, align 16
%a312 = alloca { ptr, i64, i64 }, align 16
%a313 = 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
%a327 = alloca %S.gen.Val, align 16
%a328 = 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 %then2804, label %endif2806
then2804:
%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
endif2806:
%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.1858, 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.from2807
logic.from2807:
br i1 %t20, label %logic.rhs2808, label %logic.end2809
logic.rhs2808:
%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.1859, 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.rend2810
logic.rend2810:
br label %logic.end2809
logic.end2809:
%t27 = phi i1 [ false, %logic.from2807 ], [ %t26, %logic.rend2810 ]
br i1 %t27, label %then2811, label %endif2813
then2811:
%t28 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } { ptr @.str.1860, 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
endif2813:
%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.1861, 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.from2814
logic.from2814:
br i1 %t40, label %logic.rhs2815, label %logic.end2816
logic.rhs2815:
%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.1862, 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.rend2817
logic.rend2817:
br label %logic.end2816
logic.end2816:
%t47 = phi i1 [ false, %logic.from2814 ], [ %t46, %logic.rend2817 ]
br label %logic.from2818
logic.from2818:
br i1 %t47, label %logic.rhs2819, label %logic.end2820
logic.rhs2819:
%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.from2821
logic.from2821:
br i1 %t52, label %logic.end2823, label %logic.rhs2822
logic.rhs2822:
%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.rend2824
logic.rend2824:
br label %logic.end2823
logic.end2823:
%t57 = phi i1 [ true, %logic.from2821 ], [ %t56, %logic.rend2824 ]
br label %logic.rend2825
logic.rend2825:
br label %logic.end2820
logic.end2820:
%t58 = phi i1 [ false, %logic.from2818 ], [ %t57, %logic.rend2825 ]
br i1 %t58, label %then2826, label %endif2828
then2826:
%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
endif2828:
%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.from2829
logic.from2829:
br i1 %t72, label %logic.rhs2830, label %logic.end2831
logic.rhs2830:
%t73 = load %S.ast.Type, ptr %a3
%t74 = call i1 @finch.gen.isInt(%S.ast.Type %t73)
br label %logic.rend2832
logic.rend2832:
br label %logic.end2831
logic.end2831:
%t75 = phi i1 [ false, %logic.from2829 ], [ %t74, %logic.rend2832 ]
br i1 %t75, label %then2833, label %endif2835
then2833:
%t76 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3
%t77 = load i1, ptr %t76
br label %logic.from2836
logic.from2836:
br i1 %t77, label %logic.rhs2837, label %logic.end2838
logic.rhs2837:
%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.rend2839
logic.rend2839:
br label %logic.end2838
logic.end2838:
%t84 = phi i1 [ false, %logic.from2836 ], [ %t83, %logic.rend2839 ]
br i1 %t84, label %then2840, label %endif2842
then2840:
%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
endif2842:
%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 %then2843, label %endif2845
then2843:
%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
endif2845:
%t114 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3
%t115 = load i1, ptr %t114
br i1 %t115, label %then2846, label %endif2848
then2846:
%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.1863, 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.1864, i64 16, i64 0 }, ptr %a126
call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126)
%t127 = load { ptr, i64, i64 }, ptr %a124
%t128 = load %S.ast.Type, ptr %a3
%t129 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %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)
%t133 = load { ptr, i64, i64 }, ptr %a130
call void @finch.gen.fail(ptr %t116, %S.ast.Node %t117, { ptr, i64, i64 } %t133)
br label %endif2848
endif2848:
br label %endif2835
endif2835:
%t134 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1
%t135 = load %S.ast.Type, ptr %t134
%t136 = call i1 @finch.gen.isInt(%S.ast.Type %t135)
br label %logic.from2849
logic.from2849:
br i1 %t136, label %logic.rhs2850, label %logic.end2851
logic.rhs2850:
%t137 = load %S.ast.Type, ptr %a3
%t138 = call i1 @finch.gen.isFloat(%S.ast.Type %t137)
br label %logic.rend2852
logic.rend2852:
br label %logic.end2851
logic.end2851:
%t139 = phi i1 [ false, %logic.from2849 ], [ %t138, %logic.rend2852 ]
br i1 %t139, label %then2853, label %endif2855
then2853:
%t140 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3
%t141 = load i1, ptr %t140
br label %logic.from2856
logic.from2856:
br i1 %t141, label %logic.rhs2857, label %logic.end2858
logic.rhs2857:
%t142 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0
%t143 = load { ptr, i64, i64 }, ptr %t142
store { ptr, i64, i64 } %t143, ptr %a144
store { ptr, i64, i64 } { ptr @.str.1865, i64 5, i64 0 }, ptr %a145
%t146 = call i32 @finch_str_eq(ptr %a144, ptr %a145)
%t147 = icmp ne i32 %t146, 0
br label %logic.rend2859
logic.rend2859:
br label %logic.end2858
logic.end2858:
%t148 = phi i1 [ false, %logic.from2856 ], [ %t147, %logic.rend2859 ]
br i1 %t148, label %then2860, label %endif2862
then2860:
%t149 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0
%t150 = load { ptr, i64, i64 }, ptr %t149
store { ptr, i64, i64 } %t150, ptr %a152
store { ptr, i64, i64 } { ptr @.str.1866, i64 2, i64 0 }, ptr %a153
call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153)
%t154 = load { ptr, i64, i64 }, ptr %a151
%t155 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t154, 0
%t156 = load %S.ast.Type, ptr %a3
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 %t155, %S.ast.Type %t159, 1
%t161 = insertvalue %S.gen.Val %t160, i1 true, 3
ret %S.gen.Val %t161
endif2862:
%t162 = load ptr, ptr %a1
%t163 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0
%t164 = load { ptr, i64, i64 }, ptr %t163
%t165 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1
%t166 = load %S.ast.Type, ptr %t165
%t167 = load %S.ast.Type, ptr %a3
%t168 = call { ptr, i64, i64 } @finch.gen.intToFloat(ptr %t162, { ptr, i64, i64 } %t164, %S.ast.Type %t166, %S.ast.Type %t167)
%t169 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t168, 0
%t170 = load %S.ast.Type, ptr %a3
store %S.ast.Type %t170, ptr %a171
call void @finch.copy.S_ast_Type(ptr %a172, ptr %a171)
%t173 = load %S.ast.Type, ptr %a172
%t174 = insertvalue %S.gen.Val %t169, %S.ast.Type %t173, 1
ret %S.gen.Val %t174
endif2855:
%t175 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1
%t176 = getelementptr inbounds %S.ast.Type, ptr %t175, i32 0, i32 0
%t177 = load { ptr, i64, i64 }, ptr %t176
store { ptr, i64, i64 } %t177, ptr %a178
store { ptr, i64, i64 } { ptr @.str.1867, i64 3, i64 0 }, ptr %a179
%t180 = call i32 @finch_str_eq(ptr %a178, ptr %a179)
%t181 = icmp ne i32 %t180, 0
br label %logic.from2863
logic.from2863:
br i1 %t181, label %logic.rhs2864, label %logic.end2865
logic.rhs2864:
%t182 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0
%t183 = load { ptr, i64, i64 }, ptr %t182
store { ptr, i64, i64 } %t183, ptr %a184
store { ptr, i64, i64 } { ptr @.str.1868, i64 5, i64 0 }, ptr %a185
%t186 = call i32 @finch_str_eq(ptr %a184, ptr %a185)
%t187 = icmp ne i32 %t186, 0
br label %logic.rend2866
logic.rend2866:
br label %logic.end2865
logic.end2865:
%t188 = phi i1 [ false, %logic.from2863 ], [ %t187, %logic.rend2866 ]
br i1 %t188, label %then2867, label %endif2869
then2867:
%t189 = load ptr, ptr %a1
%t190 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0
%t191 = load { ptr, i64, i64 }, ptr %t190
%t192 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1
%t193 = load %S.ast.Type, ptr %t192
%t194 = load %S.ast.Type, ptr %a3
%t195 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t189, { ptr, i64, i64 } %t191, %S.ast.Type %t193, %S.ast.Type %t194)
%t196 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t195, 0
%t197 = load %S.ast.Type, ptr %a3
store %S.ast.Type %t197, ptr %a198
call void @finch.copy.S_ast_Type(ptr %a199, ptr %a198)
%t200 = load %S.ast.Type, ptr %a199
%t201 = insertvalue %S.gen.Val %t196, %S.ast.Type %t200, 1
ret %S.gen.Val %t201
endif2869:
%t202 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1
%t203 = getelementptr inbounds %S.ast.Type, ptr %t202, i32 0, i32 0
%t204 = load { ptr, i64, i64 }, ptr %t203
store { ptr, i64, i64 } %t204, ptr %a205
store { ptr, i64, i64 } { ptr @.str.1869, i64 5, i64 0 }, ptr %a206
%t207 = call i32 @finch_str_eq(ptr %a205, ptr %a206)
%t208 = icmp ne i32 %t207, 0
br label %logic.from2870
logic.from2870:
br i1 %t208, label %logic.rhs2871, label %logic.end2872
logic.rhs2871:
%t209 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0
%t210 = load { ptr, i64, i64 }, ptr %t209
store { ptr, i64, i64 } %t210, ptr %a211
store { ptr, i64, i64 } { ptr @.str.1870, i64 3, i64 0 }, ptr %a212
%t213 = call i32 @finch_str_eq(ptr %a211, ptr %a212)
%t214 = icmp ne i32 %t213, 0
br label %logic.rend2873
logic.rend2873:
br label %logic.end2872
logic.end2872:
%t215 = phi i1 [ false, %logic.from2870 ], [ %t214, %logic.rend2873 ]
br label %logic.from2874
logic.from2874:
br i1 %t215, label %logic.rhs2875, label %logic.end2876
logic.rhs2875:
%t216 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3
%t217 = load i1, ptr %t216
br label %logic.rend2877
logic.rend2877:
br label %logic.end2876
logic.end2876:
%t218 = phi i1 [ false, %logic.from2874 ], [ %t217, %logic.rend2877 ]
br i1 %t218, label %then2878, label %endif2880
then2878:
%t219 = load ptr, ptr %a1
%t220 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0
%t221 = load { ptr, i64, i64 }, ptr %t220
%t222 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1
%t223 = load %S.ast.Type, ptr %t222
%t224 = load %S.ast.Type, ptr %a3
%t225 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t219, { ptr, i64, i64 } %t221, %S.ast.Type %t223, %S.ast.Type %t224)
%t226 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t225, 0
%t227 = load %S.ast.Type, ptr %a3
store %S.ast.Type %t227, ptr %a228
call void @finch.copy.S_ast_Type(ptr %a229, ptr %a228)
%t230 = load %S.ast.Type, ptr %a229
%t231 = insertvalue %S.gen.Val %t226, %S.ast.Type %t230, 1
ret %S.gen.Val %t231
endif2880:
%t232 = load { ptr, i64, i64 }, ptr %a5
store { ptr, i64, i64 } %t232, ptr %a234
store { ptr, i64, i64 } { ptr @.str.1871, i64 9, i64 0 }, ptr %a235
call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235)
%t236 = load { ptr, i64, i64 }, ptr %a233
%t237 = load %S.ast.Type, ptr %a3
%t238 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %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)
%t242 = load { ptr, i64, i64 }, ptr %a239
store { ptr, i64, i64 } %t242, ptr %a244
store { ptr, i64, i64 } { ptr @.str.1872, i64 14, 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.gen.Val, ptr %a2, i32 0, i32 1
%t248 = load %S.ast.Type, ptr %t247
%t249 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t248)
store { ptr, i64, i64 } %t246, ptr %a251
store { ptr, i64, i64 } %t249, ptr %a252
call void @finch_str_concat(ptr %a250, ptr %a251, ptr %a252)
%t253 = load { ptr, i64, i64 }, ptr %a250
store { ptr, i64, i64 } %t253, ptr %a254
%t255 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1
%t256 = load %S.ast.Type, ptr %t255
%t257 = call i1 @finch.gen.isNumber(%S.ast.Type %t256)
br label %logic.from2881
logic.from2881:
br i1 %t257, label %logic.rhs2882, label %logic.end2883
logic.rhs2882:
%t258 = load %S.ast.Type, ptr %a3
%t259 = call i1 @finch.gen.isNumber(%S.ast.Type %t258)
br label %logic.rend2884
logic.rend2884:
br label %logic.end2883
logic.end2883:
%t260 = phi i1 [ false, %logic.from2881 ], [ %t259, %logic.rend2884 ]
br i1 %t260, label %then2885, label %endif2887
then2885:
%t261 = load { ptr, i64, i64 }, ptr %a254
store { ptr, i64, i64 } %t261, ptr %a263
store { ptr, i64, i64 } { ptr @.str.1873, i64 6, i64 0 }, ptr %a264
call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264)
%t265 = load { ptr, i64, i64 }, ptr %a262
%t266 = load %S.ast.Type, ptr %a3
%t267 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %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)
%t271 = load { ptr, i64, i64 }, ptr %a268
store { ptr, i64, i64 } %t271, ptr %a273
store { ptr, i64, i64 } { ptr @.str.1874, i64 16, i64 0 }, ptr %a274
call void @finch_str_concat(ptr %a272, ptr %a273, ptr %a274)
%t275 = load { ptr, i64, i64 }, ptr %a272
store { ptr, i64, i64 } %t275, ptr %a254
%t276 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1
%t277 = load %S.ast.Type, ptr %t276
%t278 = call i1 @finch.gen.isFloat(%S.ast.Type %t277)
br label %logic.from2888
logic.from2888:
br i1 %t278, label %logic.rhs2889, label %logic.end2890
logic.rhs2889:
%t279 = load %S.ast.Type, ptr %a3
%t280 = call i1 @finch.gen.isInt(%S.ast.Type %t279)
br label %logic.rend2891
logic.rend2891:
br label %logic.end2890
logic.end2890:
%t281 = phi i1 [ false, %logic.from2888 ], [ %t280, %logic.rend2891 ]
br i1 %t281, label %then2892, label %endif2894
then2892:
%t282 = load { ptr, i64, i64 }, ptr %a254
store { ptr, i64, i64 } %t282, ptr %a284
store { ptr, i64, i64 } { ptr @.str.1875, i64 26, i64 0 }, ptr %a285
call void @finch_str_concat(ptr %a283, ptr %a284, ptr %a285)
%t286 = load { ptr, i64, i64 }, ptr %a283
store { ptr, i64, i64 } %t286, ptr %a254
br label %endif2894
endif2894:
%t287 = load { ptr, i64, i64 }, ptr %a254
store { ptr, i64, i64 } %t287, ptr %a289
store { ptr, i64, i64 } { ptr @.str.1876, i64 1, i64 0 }, 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 %a254
br label %endif2887
endif2887:
%t292 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0
%t293 = load { ptr, i64, i64 }, ptr %t292
store { ptr, i64, i64 } %t293, ptr %a294
store { ptr, i64, i64 } { ptr @.str.1877, i64 3, i64 0 }, ptr %a295
%t296 = call i32 @finch_str_eq(ptr %a294, ptr %a295)
%t297 = icmp ne i32 %t296, 0
br label %logic.from2895
logic.from2895:
br i1 %t297, label %logic.rhs2896, label %logic.end2897
logic.rhs2896:
%t298 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1
%t299 = load %S.ast.Type, ptr %t298
%t300 = call i1 @finch.gen.isNumber(%S.ast.Type %t299)
br label %logic.from2898
logic.from2898:
br i1 %t300, label %logic.end2900, label %logic.rhs2899
logic.rhs2899:
%t301 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1
%t302 = getelementptr inbounds %S.ast.Type, ptr %t301, i32 0, i32 0
%t303 = load { ptr, i64, i64 }, ptr %t302
store { ptr, i64, i64 } %t303, ptr %a304
store { ptr, i64, i64 } { ptr @.str.1878, i64 4, i64 0 }, ptr %a305
%t306 = call i32 @finch_str_eq(ptr %a304, ptr %a305)
%t307 = icmp ne i32 %t306, 0
br label %logic.rend2901
logic.rend2901:
br label %logic.end2900
logic.end2900:
%t308 = phi i1 [ true, %logic.from2898 ], [ %t307, %logic.rend2901 ]
br label %logic.from2902
logic.from2902:
br i1 %t308, label %logic.end2904, label %logic.rhs2903
logic.rhs2903:
%t309 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1
%t310 = getelementptr inbounds %S.ast.Type, ptr %t309, i32 0, i32 0
%t311 = load { ptr, i64, i64 }, ptr %t310
store { ptr, i64, i64 } %t311, ptr %a312
store { ptr, i64, i64 } { ptr @.str.1879, i64 4, i64 0 }, ptr %a313
%t314 = call i32 @finch_str_eq(ptr %a312, ptr %a313)
%t315 = icmp ne i32 %t314, 0
br label %logic.rend2905
logic.rend2905:
br label %logic.end2904
logic.end2904:
%t316 = phi i1 [ true, %logic.from2902 ], [ %t315, %logic.rend2905 ]
br label %logic.rend2906
logic.rend2906:
br label %logic.end2897
logic.end2897:
%t317 = phi i1 [ false, %logic.from2895 ], [ %t316, %logic.rend2906 ]
br i1 %t317, label %then2907, label %endif2909
then2907:
%t318 = load { ptr, i64, i64 }, ptr %a254
store { ptr, i64, i64 } %t318, ptr %a320
store { ptr, i64, i64 } { ptr @.str.1880, i64 34, i64 0 }, ptr %a321
call void @finch_str_concat(ptr %a319, ptr %a320, ptr %a321)
%t322 = load { ptr, i64, i64 }, ptr %a319
store { ptr, i64, i64 } %t322, ptr %a254
br label %endif2909
endif2909:
%t323 = load ptr, ptr %a1
%t324 = load %S.ast.Node, ptr %a4
%t325 = load { ptr, i64, i64 }, ptr %a254
call void @finch.gen.fail(ptr %t323, %S.ast.Node %t324, { ptr, i64, i64 } %t325)
%t326 = load %S.gen.Val, ptr %a2
store %S.gen.Val %t326, ptr %a327
call void @finch.copy.S_gen_Val(ptr %a328, ptr %a327)
%t329 = load %S.gen.Val, ptr %a328
ret %S.gen.Val %t329
}
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 %panic2910, label %ok2911
panic2910:
call void @finch_panic(ptr @.str.1881, i64 1148, ptr @.str.1882)
unreachable
ok2911:
%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.cond2912
for.cond2912:
%t9 = load i64, ptr %a8
%t10 = icmp slt i64 %t9, %t7
br i1 %t10, label %for.body2913, label %for.end2915
for.body2913:
%t11 = load ptr, ptr %a1
%t12 = icmp eq ptr %t11, null
br i1 %t12, label %panic2916, label %ok2917
panic2916:
call void @finch_panic(ptr @.str.1883, i64 1149, ptr @.str.1884)
unreachable
ok2917:
%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 %panic2918, label %ok2919
panic2918:
call void @finch_panic(ptr @.str.1885, i64 1150, ptr @.str.1886)
unreachable
ok2919:
%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 %range2920, label %inrange2921
range2920:
call void @finch_panic_index(ptr @.str.1887, i64 1150, i64 %t23, i64 %t25)
unreachable
inrange2921:
%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.cond2922
for.cond2922:
%t33 = load i64, ptr %a32
%t34 = icmp slt i64 %t33, %t31
br i1 %t34, label %for.body2923, label %for.end2925
for.body2923:
%t35 = load ptr, ptr %a1
%t36 = icmp eq ptr %t35, null
br i1 %t36, label %panic2926, label %ok2927
panic2926:
call void @finch_panic(ptr @.str.1888, i64 1151, ptr @.str.1889)
unreachable
ok2927:
%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 %range2928, label %inrange2929
range2928:
call void @finch_panic_index(ptr @.str.1890, i64 1151, i64 %t38, i64 %t40)
unreachable
inrange2929:
%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 %range2930, label %inrange2931
range2930:
call void @finch_panic_index(ptr @.str.1891, i64 1151, i64 %t45, i64 %t47)
unreachable
inrange2931:
%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 %then2932, label %endif2934
then2932:
%t58 = load ptr, ptr %a1
%t59 = icmp eq ptr %t58, null
br i1 %t59, label %panic2935, label %ok2936
panic2935:
call void @finch_panic(ptr @.str.1892, i64 1152, ptr @.str.1893)
unreachable
ok2936:
%t60 = getelementptr inbounds %S.gen.Gen, ptr %t58, i32 0, i32 42
%t61 = load i1, ptr %t60
br label %logic.from2937
logic.from2937:
br i1 %t61, label %logic.rhs2938, label %logic.end2939
logic.rhs2938:
%t62 = load ptr, ptr %a1
%t63 = icmp eq ptr %t62, null
br i1 %t63, label %panic2940, label %ok2941
panic2940:
call void @finch_panic(ptr @.str.1894, i64 1152, ptr @.str.1895)
unreachable
ok2941:
%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 %range2942, label %inrange2943
range2942:
call void @finch_panic_index(ptr @.str.1896, i64 1152, i64 %t65, i64 %t67)
unreachable
inrange2943:
%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 %range2944, label %inrange2945
range2944:
call void @finch_panic_index(ptr @.str.1897, i64 1152, i64 %t72, i64 %t74)
unreachable
inrange2945:
%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 %panic2946, label %ok2947
panic2946:
call void @finch_panic(ptr @.str.1898, i64 1152, ptr @.str.1899)
unreachable
ok2947:
%t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 43
%t83 = load i64, ptr %t82
%t84 = icmp sge i64 %t79, %t83
br label %logic.rend2948
logic.rend2948:
br label %logic.end2939
logic.end2939:
%t85 = phi i1 [ false, %logic.from2937 ], [ %t84, %logic.rend2948 ]
br i1 %t85, label %then2949, label %endif2951
then2949:
br label %for.step2924
endif2951:
%t86 = load i64, ptr %a19
%t87 = mul i64 %t86, 100000
%t88 = load i64, ptr %a32
%t89 = add i64 %t87, %t88
ret i64 %t89
endif2934:
br label %for.step2924
for.step2924:
%t90 = load i64, ptr %a32
%t91 = add i64 %t90, 1
store i64 %t91, ptr %a32
br label %for.cond2922
for.end2925:
br label %for.step2914
for.step2914:
%t92 = load i64, ptr %a8
%t93 = add i64 %t92, 1
store i64 %t93, ptr %a8
br label %for.cond2912
for.end2915:
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 5
%t9 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 5
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 %panic2952, label %ok2953
panic2952:
call void @finch_panic(ptr @.str.1900, i64 1163, ptr @.str.1901)
unreachable
ok2953:
%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 %range2954, label %inrange2955
range2954:
call void @finch_panic_index(ptr @.str.1902, i64 1163, i64 %t7, i64 %t9)
unreachable
inrange2955:
%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 %range2956, label %inrange2957
range2956:
call void @finch_panic_index(ptr @.str.1903, i64 1163, i64 %t15, i64 %t17)
unreachable
inrange2957:
%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 %panic2958, label %ok2959
panic2958:
call void @finch_panic(ptr @.str.1904, i64 1167, ptr @.str.1905)
unreachable
ok2959:
%t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 14
%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.cond2960
for.cond2960:
%t10 = load i64, ptr %a9
%t11 = icmp slt i64 %t10, %t8
br i1 %t11, label %for.body2961, label %for.end2963
for.body2961:
%t12 = load ptr, ptr %a1
%t13 = icmp eq ptr %t12, null
br i1 %t13, label %panic2964, label %ok2965
panic2964:
call void @finch_panic(ptr @.str.1906, i64 1168, ptr @.str.1907)
unreachable
ok2965:
%t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 14
%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 %range2966, label %inrange2967
range2966:
call void @finch_panic_index(ptr @.str.1908, i64 1168, i64 %t15, i64 %t17)
unreachable
inrange2967:
%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.from2968
logic.from2968:
br i1 %t27, label %logic.rhs2969, label %logic.end2970
logic.rhs2969:
%t28 = load ptr, ptr %a1
%t29 = icmp eq ptr %t28, null
br i1 %t29, label %panic2971, label %ok2972
panic2971:
call void @finch_panic(ptr @.str.1909, i64 1168, ptr @.str.1910)
unreachable
ok2972:
%t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 14
%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 %range2973, label %inrange2974
range2973:
call void @finch_panic_index(ptr @.str.1911, i64 1168, i64 %t31, i64 %t33)
unreachable
inrange2974:
%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.rend2975
logic.rend2975:
br label %logic.end2970
logic.end2970:
%t44 = phi i1 [ false, %logic.from2968 ], [ %t43, %logic.rend2975 ]
br label %logic.from2976
logic.from2976:
br i1 %t44, label %logic.rhs2977, label %logic.end2978
logic.rhs2977:
%t45 = load ptr, ptr %a1
%t46 = icmp eq ptr %t45, null
br i1 %t46, label %panic2979, label %ok2980
panic2979:
call void @finch_panic(ptr @.str.1912, i64 1168, ptr @.str.1913)
unreachable
ok2980:
%t47 = getelementptr inbounds %S.gen.Gen, ptr %t45, i32 0, i32 14
%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 %range2981, label %inrange2982
range2981:
call void @finch_panic_index(ptr @.str.1914, i64 1168, i64 %t48, i64 %t50)
unreachable
inrange2982:
%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.rend2983
logic.rend2983:
br label %logic.end2978
logic.end2978:
%t58 = phi i1 [ false, %logic.from2976 ], [ %t57, %logic.rend2983 ]
br i1 %t58, label %then2984, label %endif2986
then2984:
%t59 = load i64, ptr %a9
ret i64 %t59
endif2986:
br label %for.step2962
for.step2962:
%t60 = load i64, ptr %a9
%t61 = add i64 %t60, 1
store i64 %t61, ptr %a9
br label %for.cond2960
for.end2963:
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 %panic2987, label %ok2988
panic2987:
call void @finch_panic(ptr @.str.1915, i64 1176, ptr @.str.1916)
unreachable
ok2988:
%t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 14
%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.cond2989
for.cond2989:
%t11 = load i64, ptr %a10
%t12 = icmp slt i64 %t11, %t9
br i1 %t12, label %for.body2990, label %for.end2992
for.body2990:
%t13 = load ptr, ptr %a1
%t14 = icmp eq ptr %t13, null
br i1 %t14, label %panic2993, label %ok2994
panic2993:
call void @finch_panic(ptr @.str.1917, i64 1177, ptr @.str.1918)
unreachable
ok2994:
%t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 14
%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 %range2995, label %inrange2996
range2995:
call void @finch_panic_index(ptr @.str.1919, i64 1177, i64 %t16, i64 %t18)
unreachable
inrange2996:
%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.from2997
logic.from2997:
br i1 %t28, label %logic.rhs2998, label %logic.end2999
logic.rhs2998:
%t29 = load ptr, ptr %a1
%t30 = icmp eq ptr %t29, null
br i1 %t30, label %panic3000, label %ok3001
panic3000:
call void @finch_panic(ptr @.str.1920, i64 1177, ptr @.str.1921)
unreachable
ok3001:
%t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 14
%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 %range3002, label %inrange3003
range3002:
call void @finch_panic_index(ptr @.str.1922, i64 1177, i64 %t32, i64 %t34)
unreachable
inrange3003:
%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.rend3004
logic.rend3004:
br label %logic.end2999
logic.end2999:
%t45 = phi i1 [ false, %logic.from2997 ], [ %t44, %logic.rend3004 ]
br label %logic.from3005
logic.from3005:
br i1 %t45, label %logic.rhs3006, label %logic.end3007
logic.rhs3006:
%t46 = load ptr, ptr %a1
%t47 = icmp eq ptr %t46, null
br i1 %t47, label %panic3008, label %ok3009
panic3008:
call void @finch_panic(ptr @.str.1923, i64 1177, ptr @.str.1924)
unreachable
ok3009:
%t48 = getelementptr inbounds %S.gen.Gen, ptr %t46, i32 0, i32 14
%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 %range3010, label %inrange3011
range3010:
call void @finch_panic_index(ptr @.str.1925, i64 1177, i64 %t49, i64 %t51)
unreachable
inrange3011:
%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.rend3012
logic.rend3012:
br label %logic.end3007
logic.end3007:
%t62 = phi i1 [ false, %logic.from3005 ], [ %t61, %logic.rend3012 ]
br i1 %t62, label %then3013, label %endif3015
then3013:
%t63 = load i64, ptr %a10
ret i64 %t63
endif3015:
br label %for.step2991
for.step2991:
%t64 = load i64, ptr %a10
%t65 = add i64 %t64, 1
store i64 %t65, ptr %a10
br label %for.cond2989
for.end2992:
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.1926, i64 5, i64 0 }, ptr %t4
%t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1
store { ptr, i64, i64 } { ptr @.str.1927, i64 4, i64 0 }, ptr %t5
%t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2
store { ptr, i64, i64 } { ptr @.str.1928, i64 3, i64 0 }, ptr %t6
%t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3
store { ptr, i64, i64 } { ptr @.str.1929, i64 3, i64 0 }, ptr %t7
%t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4
store { ptr, i64, i64 } { ptr @.str.1930, i64 4, i64 0 }, ptr %t8
%t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5
store { ptr, i64, i64 } { ptr @.str.1931, i64 5, i64 0 }, ptr %t9
%t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6
store { ptr, i64, i64 } { ptr @.str.1932, i64 4, i64 0 }, ptr %t10
%t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7
store { ptr, i64, i64 } { ptr @.str.1933, i64 9, i64 0 }, ptr %t11
%t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8
store { ptr, i64, i64 } { ptr @.str.1934, i64 10, i64 0 }, ptr %t12
%t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9
store { ptr, i64, i64 } { ptr @.str.1935, i64 11, i64 0 }, ptr %t13
%t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10
store { ptr, i64, i64 } { ptr @.str.1936, i64 5, i64 0 }, ptr %t14
%t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11
store { ptr, i64, i64 } { ptr @.str.1937, i64 4, i64 0 }, ptr %t15
%t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12
store { ptr, i64, i64 } { ptr @.str.1938, i64 5, i64 0 }, ptr %t16
%t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13
store { ptr, i64, i64 } { ptr @.str.1939, i64 3, i64 0 }, ptr %t17
%t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14
store { ptr, i64, i64 } { ptr @.str.1940, i64 4, i64 0 }, ptr %t18
%t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15
store { ptr, i64, i64 } { ptr @.str.1941, i64 3, i64 0 }, ptr %t19
%t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16
store { ptr, i64, i64 } { ptr @.str.1942, i64 11, i64 0 }, ptr %t20
%t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17
store { ptr, i64, i64 } { ptr @.str.1943, i64 2, i64 0 }, ptr %t21
%t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18
store { ptr, i64, i64 } { ptr @.str.1944, i64 3, i64 0 }, ptr %t22
%t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19
store { ptr, i64, i64 } { ptr @.str.1945, i64 3, i64 0 }, ptr %t23
%t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20
store { ptr, i64, i64 } { ptr @.str.1946, i64 3, i64 0 }, ptr %t24
%t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 21
store { ptr, i64, i64 } { ptr @.str.1947, i64 2, i64 0 }, ptr %t25
%t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 22
store { ptr, i64, i64 } { ptr @.str.1948, i64 3, i64 0 }, ptr %t26
%t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 23
store { ptr, i64, i64 } { ptr @.str.1949, i64 3, i64 0 }, ptr %t27
%t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 24
store { ptr, i64, i64 } { ptr @.str.1950, i64 3, i64 0 }, ptr %t28
%t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 25
store { ptr, i64, i64 } { ptr @.str.1951, i64 3, i64 0 }, ptr %t29
%t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 26
store { ptr, i64, i64 } { ptr @.str.1952, i64 3, i64 0 }, ptr %t30
%t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 27
store { ptr, i64, i64 } { ptr @.str.1953, 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.cond3016
find.cond3016:
%t42 = load i64, ptr %a41
%t43 = icmp slt i64 %t42, %t39
br i1 %t43, label %find.body3017, label %find.end3020
find.body3017:
%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.hit3018, label %find.next3019
find.hit3018:
store i64 %t42, ptr %a38
br label %find.end3020
find.next3019:
%t50 = add i64 %t42, 1
store i64 %t50, ptr %a41
br label %find.cond3016
find.end3020:
%t51 = load i64, ptr %a38
%t52 = icmp sge i64 %t51, 0
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) {
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
%a12 = alloca { ptr, i64, i64 }, align 16
%a13 = 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
%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
%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
%a65 = alloca { ptr, i64, i64 }, align 16
%a89 = alloca { ptr, i64, i64 }, align 16
%a90 = alloca { ptr, i64, i64 }, align 16
%a94 = alloca %S.ast.Type, align 16
%a95 = alloca %S.ast.Type, align 16
%a99 = alloca { ptr, i64, i64 }, align 16
%a100 = alloca { ptr, i64, i64 }, align 16
%a121 = alloca { ptr, i64, i64 }, align 16
%a122 = alloca { ptr, i64, i64 }, align 16
%a150 = alloca { ptr, i64, i64 }, align 16
%a151 = 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
%a188 = alloca %S.ast.Node, align 16
%a189 = alloca %S.ast.Node, align 16
%a191 = alloca %S.ast.Node, 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
%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
%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
%a236 = 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 { ptr, i64, i64 }, align 16
%a244 = 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
%a254 = alloca { ptr, i64, i64 }, align 16
%a255 = alloca { ptr, i64, i64 }, align 16
%a256 = 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
%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
%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
%a309 = alloca { ptr, i64, i64 }, align 16
%a310 = 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
%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
%a327 = alloca { ptr, i64, i64 }, align 16
%a328 = 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
%t7 = load ptr, ptr %a1
%t8 = load { ptr, i64, i64 }, ptr %a3
%t9 = call i64 @finch.gen.lookup(ptr %t7, { ptr, i64, i64 } %t8)
%t10 = icmp sge i64 %t9, 0
br label %logic.from3021
logic.from3021:
br i1 %t10, label %logic.rhs3022, label %logic.end3023
logic.rhs3022:
%t11 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t11, ptr %a12
store { ptr, i64, i64 } { ptr @.str.1954, i64 3, i64 0 }, ptr %a13
%t14 = call i32 @finch_str_eq(ptr %a12, ptr %a13)
%t15 = icmp eq i32 %t14, 0
br label %logic.rend3024
logic.rend3024:
br label %logic.end3023
logic.end3023:
%t16 = phi i1 [ false, %logic.from3021 ], [ %t15, %logic.rend3024 ]
br i1 %t16, label %then3025, label %endif3027
then3025:
%t17 = load ptr, ptr %a1
%t18 = load %S.ast.Node, ptr %a2
%t19 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } { ptr @.str.1955, i64 18, 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.1956, i64 21, i64 0 }, ptr %a26
call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26)
%t27 = load { ptr, i64, i64 }, ptr %a24
call void @finch.gen.fail(ptr %t17, %S.ast.Node %t18, { ptr, i64, i64 } %t27)
br label %endif3027
endif3027:
%t28 = load ptr, ptr %a1
%t29 = load ptr, ptr %a1
%t30 = icmp eq ptr %t29, null
br i1 %t30, label %panic3028, label %ok3029
panic3028:
call void @finch_panic(ptr @.str.1957, i64 1195, ptr @.str.1958)
unreachable
ok3029:
%t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 13
%t32 = load { ptr, i64, i64 }, ptr %t31
%t33 = load { ptr, i64, i64 }, ptr %a3
%t34 = call i64 @finch.gen.findFn(ptr %t28, { ptr, i64, i64 } %t32, { ptr, i64, i64 } %t33)
%t35 = icmp sge i64 %t34, 0
br i1 %t35, label %then3030, label %endif3032
then3030:
%t36 = load ptr, ptr %a1
%t37 = load %S.ast.Node, ptr %a2
%t38 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } { ptr @.str.1959, i64 1, i64 0 }, ptr %a40
store { ptr, i64, i64 } %t38, ptr %a41
call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41)
%t42 = load { ptr, i64, i64 }, ptr %a39
store { ptr, i64, i64 } %t42, ptr %a44
store { ptr, i64, i64 } { ptr @.str.1960, i64 35, 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.gen.fail(ptr %t36, %S.ast.Node %t37, { ptr, i64, i64 } %t46)
br label %endif3032
endif3032:
%t47 = load { ptr, i64, i64 }, ptr %a3
%t48 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t47)
br i1 %t48, label %then3033, label %endif3035
then3033:
%t49 = load ptr, ptr %a1
%t50 = load %S.ast.Node, ptr %a2
%t51 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } { ptr @.str.1961, 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.1962, i64 38, i64 0 }, ptr %a58
call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58)
%t59 = load { ptr, i64, i64 }, ptr %a56
call void @finch.gen.fail(ptr %t49, %S.ast.Node %t50, { ptr, i64, i64 } %t59)
br label %endif3035
endif3035:
%t60 = load ptr, ptr %a1
%t61 = load ptr, ptr %a1
%t62 = load %S.ast.Type, ptr %a4
%t63 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t61, %S.ast.Type %t62)
%t64 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t60, { 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 %a4
%t69 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t67, %S.ast.Type %t68)
%t70 = load { ptr, i64, i64 }, ptr %a5
%t71 = load { ptr, i64, i64 }, ptr %a65
call void @finch.gen.store(ptr %t66, { ptr, i64, i64 } %t69, { ptr, i64, i64 } %t70, { ptr, i64, i64 } %t71)
%t72 = load ptr, ptr %a1
%t73 = icmp eq ptr %t72, null
br i1 %t73, label %panic3036, label %ok3037
panic3036:
call void @finch_panic(ptr @.str.1963, i64 1203, ptr @.str.1964)
unreachable
ok3037:
%t74 = getelementptr inbounds %S.gen.Gen, ptr %t72, i32 0, i32 10
%t75 = load ptr, ptr %a1
%t76 = icmp eq ptr %t75, null
br i1 %t76, label %panic3038, label %ok3039
panic3038:
call void @finch_panic(ptr @.str.1965, i64 1203, ptr @.str.1966)
unreachable
ok3039:
%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 = sub i64 %t79, 1
%t81 = load { ptr, i64, i64 }, ptr %t74
%t82 = extractvalue { ptr, i64, i64 } %t81, 1
%t83 = icmp uge i64 %t80, %t82
br i1 %t83, label %range3040, label %inrange3041
range3040:
call void @finch_panic_index(ptr @.str.1967, i64 1203, i64 %t80, i64 %t82)
unreachable
inrange3041:
%t84 = extractvalue { ptr, i64, i64 } %t81, 0
%t85 = getelementptr inbounds %S.gen.Scope, ptr %t84, i64 %t80
%t86 = getelementptr inbounds %S.gen.Scope, ptr %t85, i32 0, i32 0
%t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1
%t88 = load { ptr, i64, i64 }, ptr %a3
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.gen.Var zeroinitializer, { ptr, i64, i64 } %t91, 0
%t93 = load %S.ast.Type, ptr %a4
store %S.ast.Type %t93, ptr %a94
call void @finch.copy.S_ast_Type(ptr %a95, ptr %a94)
%t96 = load %S.ast.Type, ptr %a95
%t97 = insertvalue %S.gen.Var %t92, %S.ast.Type %t96, 1
%t98 = load { ptr, i64, i64 }, ptr %a65
store { ptr, i64, i64 } %t98, ptr %a99
call void @finch_str_copy(ptr %a100, ptr %a99)
%t101 = load { ptr, i64, i64 }, ptr %a100
%t102 = insertvalue %S.gen.Var %t97, { ptr, i64, i64 } %t101, 2
%t103 = load i1, ptr %a6
%t104 = insertvalue %S.gen.Var %t102, i1 %t103, 3
%t105 = load ptr, ptr %a1
%t106 = icmp eq ptr %t105, null
br i1 %t106, label %panic3042, label %ok3043
panic3042:
call void @finch_panic(ptr @.str.1968, i64 1203, ptr @.str.1969)
unreachable
ok3043:
%t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 23
%t108 = load i64, ptr %t107
%t109 = insertvalue %S.gen.Var %t104, i64 %t108, 4
%t110 = load ptr, ptr %a1
%t111 = icmp eq ptr %t110, null
br i1 %t111, label %panic3044, label %ok3045
panic3044:
call void @finch_panic(ptr @.str.1970, i64 1203, ptr @.str.1971)
unreachable
ok3045:
%t112 = getelementptr inbounds %S.gen.Gen, ptr %t110, i32 0, i32 1
%t113 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13
%t114 = load i64, ptr %t113
%t115 = load { ptr, i64, i64 }, ptr %t112
%t116 = extractvalue { ptr, i64, i64 } %t115, 1
%t117 = icmp uge i64 %t114, %t116
br i1 %t117, label %range3046, label %inrange3047
range3046:
call void @finch_panic_index(ptr @.str.1972, i64 1203, i64 %t114, i64 %t116)
unreachable
inrange3047:
%t118 = extractvalue { ptr, i64, i64 } %t115, 0
%t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %t118, i64 %t114
%t120 = load { ptr, i64, i64 }, ptr %t119
store { ptr, i64, i64 } %t120, ptr %a121
call void @finch_str_copy(ptr %a122, ptr %a121)
%t123 = load { ptr, i64, i64 }, ptr %a122
%t124 = insertvalue %S.gen.Var %t109, { ptr, i64, i64 } %t123, 5
%t125 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11
%t126 = load i64, ptr %t125
%t127 = insertvalue %S.gen.Var %t124, i64 %t126, 6
%t128 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12
%t129 = load i64, ptr %t128
%t130 = insertvalue %S.gen.Var %t127, i64 %t129, 7
%t131 = load i64, ptr %t87
%t132 = add i64 %t131, 1
call void @finch_arr_reserve(ptr %t86, i64 %t132, i64 ptrtoint (ptr getelementptr (%S.gen.Var, ptr null, i32 1) to i64))
%t133 = load ptr, ptr %t86
%t134 = getelementptr inbounds %S.gen.Var, ptr %t133, i64 %t131
store %S.gen.Var %t130, ptr %t134
store i64 %t132, ptr %t87
%t135 = load ptr, ptr %a1
%t136 = icmp eq ptr %t135, null
br i1 %t136, label %panic3048, label %ok3049
panic3048:
call void @finch_panic(ptr @.str.1973, i64 1204, ptr @.str.1974)
unreachable
ok3049:
%t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 23
%t138 = load i64, ptr %t137
%t139 = add i64 %t138, 1
store i64 %t139, ptr %t137
%t140 = load ptr, ptr %a1
%t141 = load %S.ast.Node, ptr %a2
%t142 = load { ptr, i64, i64 }, ptr %a3
%t143 = load %S.ast.Type, ptr %a4
%t144 = load { ptr, i64, i64 }, ptr %a65
call void @finch.gen.dbgVariable(ptr %t140, %S.ast.Node %t141, { ptr, i64, i64 } %t142, %S.ast.Type %t143, { ptr, i64, i64 } %t144)
%t145 = load ptr, ptr %a1
%t146 = icmp eq ptr %t145, null
br i1 %t146, label %panic3050, label %ok3051
panic3050:
call void @finch_panic(ptr @.str.1975, i64 1206, ptr @.str.1976)
unreachable
ok3051:
%t147 = getelementptr inbounds %S.gen.Gen, ptr %t145, i32 0, i32 26
%t148 = load i1, ptr %t147
br label %logic.from3052
logic.from3052:
br i1 %t148, label %logic.rhs3053, label %logic.end3054
logic.rhs3053:
%t149 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t149, ptr %a150
store { ptr, i64, i64 } { ptr @.str.1977, i64 3, i64 0 }, ptr %a151
%t152 = call i32 @finch_str_eq(ptr %a150, ptr %a151)
%t153 = icmp eq i32 %t152, 0
br label %logic.rend3055
logic.rend3055:
br label %logic.end3054
logic.end3054:
%t154 = phi i1 [ false, %logic.from3052 ], [ %t153, %logic.rend3055 ]
br label %logic.from3056
logic.from3056:
br i1 %t154, label %logic.rhs3057, label %logic.end3058
logic.rhs3057:
%t155 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t155, ptr %a156
store { ptr, i64, i64 } { ptr @.str.1979, i64 1, i64 0 }, ptr %a158
%t159 = call i32 @finch_str_starts(ptr %a156, ptr %a158)
%t160 = icmp ne i32 %t159, 0
%t161 = xor i1 %t160, true
br label %logic.rend3059
logic.rend3059:
br label %logic.end3058
logic.end3058:
%t162 = phi i1 [ false, %logic.from3056 ], [ %t161, %logic.rend3059 ]
br i1 %t162, label %then3060, label %endif3062
then3060:
%t163 = load ptr, ptr %a1
%t164 = icmp eq ptr %t163, null
br i1 %t164, label %panic3063, label %ok3064
panic3063:
call void @finch_panic(ptr @.str.1980, i64 1207, ptr @.str.1981)
unreachable
ok3064:
%t165 = getelementptr inbounds %S.gen.Gen, ptr %t163, i32 0, i32 0
%t166 = load ptr, ptr %a1
%t167 = icmp eq ptr %t166, null
br i1 %t167, label %panic3065, label %ok3066
panic3065:
call void @finch_panic(ptr @.str.1982, i64 1207, ptr @.str.1983)
unreachable
ok3066:
%t168 = getelementptr inbounds %S.gen.Gen, ptr %t166, i32 0, i32 12
%t169 = getelementptr inbounds %S.gen.FnSig, ptr %t168, i32 0, i32 16
%t170 = load i64, ptr %t169
%t171 = load { ptr, i64, i64 }, ptr %t165
%t172 = extractvalue { ptr, i64, i64 } %t171, 1
%t173 = icmp uge i64 %t170, %t172
br i1 %t173, label %range3067, label %inrange3068
range3067:
call void @finch_panic_index(ptr @.str.1984, i64 1207, i64 %t170, i64 %t172)
unreachable
inrange3068:
%t174 = extractvalue { ptr, i64, i64 } %t171, 0
%t175 = getelementptr inbounds %S.ast.Program, ptr %t174, i64 %t170
%t176 = getelementptr inbounds %S.ast.Program, ptr %t175, i32 0, i32 8
%t177 = load ptr, ptr %a1
%t178 = icmp eq ptr %t177, null
br i1 %t178, label %panic3069, label %ok3070
panic3069:
call void @finch_panic(ptr @.str.1985, i64 1207, ptr @.str.1986)
unreachable
ok3070:
%t179 = getelementptr inbounds %S.gen.Gen, ptr %t177, i32 0, i32 12
%t180 = getelementptr inbounds %S.gen.FnSig, ptr %t179, i32 0, i32 17
%t181 = load i64, ptr %t180
%t182 = load { ptr, i64, i64 }, ptr %t176
%t183 = extractvalue { ptr, i64, i64 } %t182, 1
%t184 = icmp uge i64 %t181, %t183
br i1 %t184, label %range3071, label %inrange3072
range3071:
call void @finch_panic_index(ptr @.str.1987, i64 1207, i64 %t181, i64 %t183)
unreachable
inrange3072:
%t185 = extractvalue { ptr, i64, i64 } %t182, 0
%t186 = getelementptr inbounds %S.ast.Node, ptr %t185, i64 %t181
%t187 = load %S.ast.Node, ptr %t186
store %S.ast.Node %t187, ptr %a188
call void @finch.copy.S_ast_Node(ptr %a189, ptr %a188)
%t190 = load %S.ast.Node, ptr %a189
store %S.ast.Node %t190, ptr %a191
%t192 = load ptr, ptr %a1
%t193 = icmp eq ptr %t192, null
br i1 %t193, label %panic3073, label %ok3074
panic3073:
call void @finch_panic(ptr @.str.1988, i64 1208, ptr @.str.1989)
unreachable
ok3074:
%t194 = getelementptr inbounds %S.gen.Gen, ptr %t192, i32 0, i32 27
%t195 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1
%t196 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } { ptr @.str.1990, i64 3, 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.1991, i64 1, i64 0 }, ptr %a203
call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203)
%t204 = load { ptr, i64, i64 }, ptr %a201
%t205 = load %S.ast.Type, ptr %a4
%t206 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t205)
store { ptr, i64, i64 } %t204, 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.1992, i64 1, i64 0 }, ptr %a213
call void @finch_str_concat(ptr %a211, ptr %a212, ptr %a213)
%t214 = load { ptr, i64, i64 }, ptr %a211
%t215 = load ptr, ptr %a1
%t216 = icmp eq ptr %t215, null
br i1 %t216, label %panic3075, label %ok3076
panic3075:
call void @finch_panic(ptr @.str.1993, i64 1208, ptr @.str.1994)
unreachable
ok3076:
%t217 = getelementptr inbounds %S.gen.Gen, ptr %t215, i32 0, i32 1
%t218 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13
%t219 = load i64, ptr %t218
%t220 = load { ptr, i64, i64 }, ptr %t217
%t221 = extractvalue { ptr, i64, i64 } %t220, 1
%t222 = icmp uge i64 %t219, %t221
br i1 %t222, label %range3077, label %inrange3078
range3077:
call void @finch_panic_index(ptr @.str.1995, i64 1208, i64 %t219, i64 %t221)
unreachable
inrange3078:
%t223 = extractvalue { ptr, i64, i64 } %t220, 0
%t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i64 %t219
%t225 = load { ptr, i64, i64 }, ptr %t224
store { ptr, i64, i64 } %t214, ptr %a227
store { ptr, i64, i64 } %t225, ptr %a228
call void @finch_str_concat(ptr %a226, ptr %a227, ptr %a228)
%t229 = load { ptr, i64, i64 }, ptr %a226
store { ptr, i64, i64 } %t229, ptr %a231
store { ptr, i64, i64 } { ptr @.str.1996, i64 1, i64 0 }, ptr %a232
call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232)
%t233 = load { ptr, i64, i64 }, ptr %a230
%t234 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11
%t235 = load i64, ptr %t234
call void @finch_str_from_int(ptr %a236, i64 %t235)
%t237 = load { ptr, i64, i64 }, ptr %a236
store { ptr, i64, i64 } %t233, ptr %a239
store { ptr, i64, i64 } %t237, ptr %a240
call void @finch_str_concat(ptr %a238, ptr %a239, ptr %a240)
%t241 = load { ptr, i64, i64 }, ptr %a238
store { ptr, i64, i64 } %t241, ptr %a243
store { ptr, i64, i64 } { ptr @.str.1997, i64 1, i64 0 }, ptr %a244
call void @finch_str_concat(ptr %a242, ptr %a243, ptr %a244)
%t245 = load { ptr, i64, i64 }, ptr %a242
%t246 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12
%t247 = load i64, ptr %t246
call void @finch_str_from_int(ptr %a248, i64 %t247)
%t249 = load { ptr, i64, i64 }, ptr %a248
store { ptr, i64, i64 } %t245, ptr %a251
store { ptr, i64, i64 } %t249, ptr %a252
call void @finch_str_concat(ptr %a250, ptr %a251, ptr %a252)
%t253 = load { ptr, i64, i64 }, ptr %a250
store { ptr, i64, i64 } %t253, ptr %a255
store { ptr, i64, i64 } { ptr @.str.1998, i64 1, i64 0 }, ptr %a256
call void @finch_str_concat(ptr %a254, ptr %a255, ptr %a256)
%t257 = load { ptr, i64, i64 }, ptr %a254
%t258 = load ptr, ptr %a1
%t259 = icmp eq ptr %t258, null
br i1 %t259, label %panic3079, label %ok3080
panic3079:
call void @finch_panic(ptr @.str.1999, i64 1208, ptr @.str.2000)
unreachable
ok3080:
%t260 = getelementptr inbounds %S.gen.Gen, ptr %t258, i32 0, i32 1
%t261 = getelementptr inbounds %S.ast.Node, ptr %a191, i32 0, i32 13
%t262 = load i64, ptr %t261
%t263 = load { ptr, i64, i64 }, ptr %t260
%t264 = extractvalue { ptr, i64, i64 } %t263, 1
%t265 = icmp uge i64 %t262, %t264
br i1 %t265, label %range3081, label %inrange3082
range3081:
call void @finch_panic_index(ptr @.str.2001, i64 1208, i64 %t262, i64 %t264)
unreachable
inrange3082:
%t266 = extractvalue { ptr, i64, i64 } %t263, 0
%t267 = getelementptr inbounds { ptr, i64, i64 }, ptr %t266, i64 %t262
%t268 = load { ptr, i64, i64 }, ptr %t267
store { ptr, i64, i64 } %t257, ptr %a270
store { ptr, i64, i64 } %t268, ptr %a271
call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271)
%t272 = load { ptr, i64, i64 }, ptr %a269
store { ptr, i64, i64 } %t272, ptr %a274
store { ptr, i64, i64 } { ptr @.str.2002, 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 = getelementptr inbounds %S.ast.Node, ptr %a191, i32 0, i32 11
%t278 = load i64, ptr %t277
call void @finch_str_from_int(ptr %a279, i64 %t278)
%t280 = load { ptr, i64, i64 }, ptr %a279
store { ptr, i64, i64 } %t276, ptr %a282
store { ptr, i64, i64 } %t280, ptr %a283
call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283)
%t284 = load { ptr, i64, i64 }, ptr %a281
store { ptr, i64, i64 } %t284, ptr %a286
store { ptr, i64, i64 } { ptr @.str.2003, i64 1, i64 0 }, ptr %a287
call void @finch_str_concat(ptr %a285, ptr %a286, ptr %a287)
%t288 = load { ptr, i64, i64 }, ptr %a285
%t289 = getelementptr inbounds %S.ast.Node, ptr %a191, i32 0, i32 14
%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)
%t296 = load { ptr, i64, i64 }, ptr %a293
%t297 = load i64, ptr %t195
%t298 = add i64 %t297, 1
call void @finch_arr_reserve(ptr %t194, i64 %t298, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t299 = load ptr, ptr %t194
%t300 = getelementptr inbounds { ptr, i64, i64 }, ptr %t299, i64 %t297
store { ptr, i64, i64 } %t296, ptr %t300
store i64 %t298, ptr %t195
%t301 = load ptr, ptr %a1
%t302 = load %S.ast.Node, ptr %a2
%t303 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12
%t304 = load i64, ptr %t303
%t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1
%t306 = load i64, ptr %t305
%t307 = load %S.ast.Type, ptr %a4
%t308 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t307)
store { ptr, i64, i64 } { ptr @.str.2004, i64 9, i64 0 }, ptr %a310
store { ptr, i64, i64 } %t308, ptr %a311
call void @finch_str_concat(ptr %a309, ptr %a310, ptr %a311)
%t312 = load { ptr, i64, i64 }, ptr %a309
store { ptr, i64, i64 } %t312, ptr %a314
store { ptr, i64, i64 } { ptr @.str.2005, 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)
%t321 = load { ptr, i64, i64 }, ptr %a318
store { ptr, i64, i64 } %t321, ptr %a323
store { ptr, i64, i64 } { ptr @.str.2006, i64 4, i64 0 }, ptr %a324
call void @finch_str_concat(ptr %a322, ptr %a323, ptr %a324)
%t325 = load { ptr, i64, i64 }, ptr %a322
call void @finch.gen.noteRef(ptr %t301, %S.ast.Node %t302, i64 %t304, i64 %t306, { ptr, i64, i64 } %t325, { ptr, i64, i64 } { ptr @.str.2007, i64 0, i64 0 }, i64 0, i64 0)
br label %endif3062
endif3062:
%t326 = load { ptr, i64, i64 }, ptr %a65
store { ptr, i64, i64 } %t326, ptr %a327
call void @finch_str_copy(ptr %a328, ptr %a327)
%t329 = load { ptr, i64, i64 }, ptr %a328
ret { ptr, i64, i64 } %t329
}
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 %panic3083, label %ok3084
panic3083:
call void @finch_panic(ptr @.str.2008, i64 1215, ptr @.str.2009)
unreachable
ok3084:
%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.gen.popScope(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 %panic3085, label %ok3086
panic3085:
call void @finch_panic(ptr @.str.2010, i64 1219, ptr @.str.2011)
unreachable
ok3086:
%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 = icmp eq i64 %t6, 0
br i1 %t7, label %panic3087, label %ok3088
panic3087:
call void @finch_panic(ptr @.str.2012, i64 1219, ptr @.str.2013)
unreachable
ok3088:
%t8 = sub i64 %t6, 1
%t9 = load ptr, ptr %t4
%t10 = getelementptr inbounds %S.gen.Scope, ptr %t9, i64 %t8
%t11 = load %S.gen.Scope, ptr %t10
store i64 %t8, ptr %t5
ret void
}
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.cond3093
n.cond3093:
%t6 = load i64, ptr %a5
%t7 = icmp slt i64 %t6, %t4
br i1 %t7, label %n.body3094, label %n.end3095
n.body3094:
%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.cond3093
n.end3095:
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)
ret void
}
define internal void @finch.gen.runDefers(ptr %p0, i64 %p1) {
entry:
%a1 = alloca ptr, align 16
%a2 = alloca i64, align 16
%a13 = alloca %S.gen.Scope, align 16
%a14 = alloca %S.gen.Scope, align 16
%a16 = alloca %S.gen.Scope, align 16
%a20 = alloca i64, align 16
%a29 = alloca i1, align 16
%a34 = 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 %panic3089, label %ok3090
panic3089:
call void @finch_panic(ptr @.str.2014, i64 1224, ptr @.str.2015)
unreachable
ok3090:
%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 %range3091, label %inrange3092
range3091:
call void @finch_panic_index(ptr @.str.2016, i64 1224, i64 %t6, i64 %t8)
unreachable
inrange3092:
%t10 = extractvalue { ptr, i64, i64 } %t7, 0
%t11 = getelementptr inbounds %S.gen.Scope, ptr %t10, i64 %t6
%t12 = load %S.gen.Scope, ptr %t11
store %S.gen.Scope %t12, ptr %a13
call void @finch.copy.S_gen_Scope(ptr %a14, ptr %a13)
%t15 = load %S.gen.Scope, ptr %a14
store %S.gen.Scope %t15, ptr %a16
%t17 = getelementptr inbounds %S.gen.Scope, ptr %a16, i32 0, i32 1
%t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1
%t19 = load i64, ptr %t18
store i64 %t19, ptr %a20
br label %while.cond3096
while.cond3096:
%t21 = load i64, ptr %a20
%t22 = icmp sgt i64 %t21, 0
br i1 %t22, label %while.body3097, label %while.end3098
while.body3097:
%t23 = load i64, ptr %a20
%t24 = sub i64 %t23, 1
store i64 %t24, ptr %a20
%t25 = load ptr, ptr %a1
%t26 = icmp eq ptr %t25, null
br i1 %t26, label %panic3099, label %ok3100
panic3099:
call void @finch_panic(ptr @.str.2017, i64 1228, ptr @.str.2018)
unreachable
ok3100:
%t27 = getelementptr inbounds %S.gen.Gen, ptr %t25, i32 0, i32 42
%t28 = load i1, ptr %t27
store i1 %t28, ptr %a29
%t30 = load ptr, ptr %a1
%t31 = icmp eq ptr %t30, null
br i1 %t31, label %panic3101, label %ok3102
panic3101:
call void @finch_panic(ptr @.str.2019, i64 1229, ptr @.str.2020)
unreachable
ok3102:
%t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 43
%t33 = load i64, ptr %t32
store i64 %t33, ptr %a34
%t35 = load ptr, ptr %a1
%t36 = icmp eq ptr %t35, null
br i1 %t36, label %panic3103, label %ok3104
panic3103:
call void @finch_panic(ptr @.str.2021, i64 1230, ptr @.str.2022)
unreachable
ok3104:
%t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 42
store i1 true, ptr %t37
%t38 = getelementptr inbounds %S.gen.Scope, ptr %a16, i32 0, i32 2
%t39 = load i64, ptr %a20
%t40 = load { ptr, i64, i64 }, ptr %t38
%t41 = extractvalue { ptr, i64, i64 } %t40, 1
%t42 = icmp uge i64 %t39, %t41
br i1 %t42, label %range3105, label %inrange3106
range3105:
call void @finch_panic_index(ptr @.str.2023, i64 1231, i64 %t39, i64 %t41)
unreachable
inrange3106:
%t43 = extractvalue { ptr, i64, i64 } %t40, 0
%t44 = getelementptr inbounds i64, ptr %t43, i64 %t39
%t45 = load i64, ptr %t44
%t46 = load ptr, ptr %a1
%t47 = icmp eq ptr %t46, null
br i1 %t47, label %panic3107, label %ok3108
panic3107:
call void @finch_panic(ptr @.str.2024, i64 1231, ptr @.str.2025)
unreachable
ok3108:
%t48 = getelementptr inbounds %S.gen.Gen, ptr %t46, i32 0, i32 43
store i64 %t45, ptr %t48
%t49 = load ptr, ptr %a1
%t50 = icmp eq ptr %t49, null
br i1 %t50, label %panic3109, label %ok3110
panic3109:
call void @finch_panic(ptr @.str.2026, i64 1232, ptr @.str.2027)
unreachable
ok3110:
%t51 = getelementptr inbounds %S.gen.Gen, ptr %t49, i32 0, i32 44
%t52 = load i64, ptr %t51
%t53 = add i64 %t52, 1
store i64 %t53, ptr %t51
%t54 = load ptr, ptr %a1
call void @finch.gen.pushScope(ptr %t54)
%t55 = load ptr, ptr %a1
%t56 = getelementptr inbounds %S.gen.Scope, ptr %a16, i32 0, i32 1
%t57 = load i64, ptr %a20
%t58 = load { ptr, i64, i64 }, ptr %t56
%t59 = extractvalue { ptr, i64, i64 } %t58, 1
%t60 = icmp uge i64 %t57, %t59
br i1 %t60, label %range3111, label %inrange3112
range3111:
call void @finch_panic_index(ptr @.str.2028, i64 1234, i64 %t57, i64 %t59)
unreachable
inrange3112:
%t61 = extractvalue { ptr, i64, i64 } %t58, 0
%t62 = getelementptr inbounds %S.ast.Node, ptr %t61, i64 %t57
%t63 = load %S.ast.Node, ptr %t62
call void @finch.gen.stmt(ptr %t55, %S.ast.Node %t63)
%t64 = load ptr, ptr %a1
call void @finch.gen.popScope(ptr %t64)
%t65 = load ptr, ptr %a1
%t66 = icmp eq ptr %t65, null
br i1 %t66, label %panic3113, label %ok3114
panic3113:
call void @finch_panic(ptr @.str.2029, i64 1236, ptr @.str.2030)
unreachable
ok3114:
%t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 44
%t68 = load i64, ptr %t67
%t69 = sub i64 %t68, 1
store i64 %t69, ptr %t67
%t70 = load i1, ptr %a29
%t71 = load ptr, ptr %a1
%t72 = icmp eq ptr %t71, null
br i1 %t72, label %panic3115, label %ok3116
panic3115:
call void @finch_panic(ptr @.str.2031, i64 1237, ptr @.str.2032)
unreachable
ok3116:
%t73 = getelementptr inbounds %S.gen.Gen, ptr %t71, i32 0, i32 42
store i1 %t70, ptr %t73
%t74 = load i64, ptr %a34
%t75 = load ptr, ptr %a1
%t76 = icmp eq ptr %t75, null
br i1 %t76, label %panic3117, label %ok3118
panic3117:
call void @finch_panic(ptr @.str.2033, i64 1238, ptr @.str.2034)
unreachable
ok3118:
%t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 43
store i64 %t74, ptr %t77
br label %while.cond3096
while.end3098:
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 %panic3119, label %ok3120
panic3119:
call void @finch_panic(ptr @.str.2035, i64 1244, ptr @.str.2036)
unreachable
ok3120:
%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.cond3121
while.cond3121:
%t9 = load i64, ptr %a8
%t10 = load i64, ptr %a2
%t11 = icmp sgt i64 %t9, %t10
br i1 %t11, label %while.body3122, label %while.end3123
while.body3122:
%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.runDefers(ptr %t14, i64 %t15)
br label %while.cond3121
while.end3123:
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
%t3 = icmp eq ptr %t2, null
br i1 %t3, label %panic3124, label %ok3125
panic3124:
call void @finch_panic(ptr @.str.2037, i64 1253, ptr @.str.2038)
unreachable
ok3125:
%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 %then3126, label %endif3128
then3126:
%t7 = load ptr, ptr %a1
%t8 = load ptr, ptr %a1
%t9 = icmp eq ptr %t8, null
br i1 %t9, label %panic3129, label %ok3130
panic3129:
call void @finch_panic(ptr @.str.2039, i64 1254, ptr @.str.2040)
unreachable
ok3130:
%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.runDefers(ptr %t7, i64 %t13)
br label %endif3128
endif3128:
%t14 = load ptr, ptr %a1
%t15 = icmp eq ptr %t14, null
br i1 %t15, label %panic3131, label %ok3132
panic3131:
call void @finch_panic(ptr @.str.2041, i64 1256, ptr @.str.2042)
unreachable
ok3132:
%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 %panic3133, label %ok3134
panic3133:
call void @finch_panic(ptr @.str.2043, i64 1256, ptr @.str.2044)
unreachable
ok3134:
%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
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.2045, 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 %then3135, label %endif3137
then3135:
%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
endif3137:
%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.2046, 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.from3138
logic.from3138:
br i1 %t18, label %logic.end3140, label %logic.rhs3139
logic.rhs3139:
%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.2047, 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.rend3141
logic.rend3141:
br label %logic.end3140
logic.end3140:
%t25 = phi i1 [ true, %logic.from3138 ], [ %t24, %logic.rend3141 ]
br i1 %t25, label %then3142, label %endif3144
then3142:
%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 %range3145, label %inrange3146
range3145:
call void @finch_panic_index(ptr @.str.2048, i64 1266, i64 0, i64 %t28)
unreachable
inrange3146:
%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
endif3144:
ret { ptr, i64, i64 } { ptr @.str.2049, 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
%a40 = alloca { ptr, i64, i64 }, align 16
%a41 = alloca { ptr, i64, i64 }, align 16
%a47 = alloca i64, align 16
%a50 = alloca i64, align 16
%a55 = alloca { ptr, i64, i64 }, align 16
%a56 = alloca { ptr, i64, i64 }, align 16
%a68 = alloca i64, align 16
%a71 = alloca i64, align 16
%a76 = alloca { ptr, i64, i64 }, align 16
%a77 = alloca { ptr, i64, i64 }, align 16
%a94 = alloca { ptr, i64, i64 }, align 16
%a95 = 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
%a126 = alloca { ptr, i64, i64 }, align 16
%a127 = alloca { ptr, i64, i64 }, align 16
%a132 = alloca i64, align 16
%a140 = 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.2050, i64 4, i64 0 }, ptr %t6
%t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 1
store { ptr, i64, i64 } { ptr @.str.2051, i64 3, i64 0 }, ptr %t7
%t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 2
store { ptr, i64, i64 } { ptr @.str.2052, i64 6, i64 0 }, ptr %t8
%t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 3
store { ptr, i64, i64 } { ptr @.str.2053, i64 6, i64 0 }, ptr %t9
%t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 4
store { ptr, i64, i64 } { ptr @.str.2054, i64 5, i64 0 }, ptr %t10
%t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 5
store { ptr, i64, i64 } { ptr @.str.2055, i64 6, i64 0 }, ptr %t11
%t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 6
store { ptr, i64, i64 } { ptr @.str.2056, i64 4, i64 0 }, ptr %t12
%t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 7
store { ptr, i64, i64 } { ptr @.str.2057, 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.2058, 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.from3147
logic.from3147:
br i1 %t23, label %logic.rhs3148, label %logic.end3149
logic.rhs3148:
%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 %range3150, label %inrange3151
range3150:
call void @finch_panic_index(ptr @.str.2059, i64 1273, i64 0, i64 %t26)
unreachable
inrange3151:
%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
br label %logic.rend3152
logic.rend3152:
br label %logic.end3149
logic.end3149:
%t37 = phi i1 [ false, %logic.from3147 ], [ %t36, %logic.rend3152 ]
br i1 %t37, label %then3153, label %endif3155
then3153:
ret i1 true
endif3155:
%t38 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0
%t39 = load { ptr, i64, i64 }, ptr %t38
store { ptr, i64, i64 } %t39, ptr %a40
store { ptr, i64, i64 } { ptr @.str.2060, i64 6, i64 0 }, ptr %a41
%t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41)
%t43 = icmp ne i32 %t42, 0
br label %logic.from3156
logic.from3156:
br i1 %t43, label %logic.rhs3157, label %logic.end3158
logic.rhs3157:
%t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %a17, i32 0, i32 1
%t45 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1
%t46 = load { ptr, i64, i64 }, ptr %t45
store i64 -1, ptr %a47
%t48 = load i64, ptr %t44
%t49 = load ptr, ptr %a17
store i64 0, ptr %a50
br label %find.cond3159
find.cond3159:
%t51 = load i64, ptr %a50
%t52 = icmp slt i64 %t51, %t48
br i1 %t52, label %find.body3160, label %find.end3163
find.body3160:
%t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t51
%t54 = load { ptr, i64, i64 }, ptr %t53
store { ptr, i64, i64 } %t54, ptr %a55
store { ptr, i64, i64 } %t46, ptr %a56
%t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56)
%t58 = icmp ne i32 %t57, 0
br i1 %t58, label %find.hit3161, label %find.next3162
find.hit3161:
store i64 %t51, ptr %a47
br label %find.end3163
find.next3162:
%t59 = add i64 %t51, 1
store i64 %t59, ptr %a50
br label %find.cond3159
find.end3163:
%t60 = load i64, ptr %a47
%t61 = icmp sge i64 %t60, 0
br label %logic.from3164
logic.from3164:
br i1 %t61, label %logic.end3166, label %logic.rhs3165
logic.rhs3165:
%t62 = load ptr, ptr %a1
%t63 = icmp eq ptr %t62, null
br i1 %t63, label %panic3167, label %ok3168
panic3167:
call void @finch_panic(ptr @.str.2061, i64 1279, ptr @.str.2062)
unreachable
ok3168:
%t64 = getelementptr inbounds %S.gen.Gen, ptr %t62, i32 0, i32 22
%t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i32 0, i32 1
%t66 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1
%t67 = load { ptr, i64, i64 }, ptr %t66
store i64 -1, ptr %a68
%t69 = load i64, ptr %t65
%t70 = load ptr, ptr %t64
store i64 0, ptr %a71
br label %find.cond3169
find.cond3169:
%t72 = load i64, ptr %a71
%t73 = icmp slt i64 %t72, %t69
br i1 %t73, label %find.body3170, label %find.end3173
find.body3170:
%t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i64 %t72
%t75 = load { ptr, i64, i64 }, ptr %t74
store { ptr, i64, i64 } %t75, ptr %a76
store { ptr, i64, i64 } %t67, ptr %a77
%t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77)
%t79 = icmp ne i32 %t78, 0
br i1 %t79, label %find.hit3171, label %find.next3172
find.hit3171:
store i64 %t72, ptr %a68
br label %find.end3173
find.next3172:
%t80 = add i64 %t72, 1
store i64 %t80, ptr %a71
br label %find.cond3169
find.end3173:
%t81 = load i64, ptr %a68
%t82 = icmp sge i64 %t81, 0
br label %logic.rend3174
logic.rend3174:
br label %logic.end3166
logic.end3166:
%t83 = phi i1 [ true, %logic.from3164 ], [ %t82, %logic.rend3174 ]
br label %logic.rend3175
logic.rend3175:
br label %logic.end3158
logic.end3158:
%t84 = phi i1 [ false, %logic.from3156 ], [ %t83, %logic.rend3175 ]
br label %logic.from3176
logic.from3176:
br i1 %t84, label %logic.rhs3177, label %logic.end3178
logic.rhs3177:
%t85 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9
%t86 = load { ptr, i64, i64 }, ptr %t85
%t87 = extractvalue { ptr, i64, i64 } %t86, 1
%t88 = icmp uge i64 0, %t87
br i1 %t88, label %range3179, label %inrange3180
range3179:
call void @finch_panic_index(ptr @.str.2063, i64 1279, i64 0, i64 %t87)
unreachable
inrange3180:
%t89 = extractvalue { ptr, i64, i64 } %t86, 0
%t90 = getelementptr inbounds %S.ast.Node, ptr %t89, i64 0
%t91 = load %S.ast.Node, ptr %t90
%t92 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t91)
%t93 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t92, ptr %a94
store { ptr, i64, i64 } %t93, ptr %a95
%t96 = call i32 @finch_str_eq(ptr %a94, ptr %a95)
%t97 = icmp ne i32 %t96, 0
br label %logic.rend3181
logic.rend3181:
br label %logic.end3178
logic.end3178:
%t98 = phi i1 [ false, %logic.from3176 ], [ %t97, %logic.rend3181 ]
br i1 %t98, label %then3182, label %endif3184
then3182:
ret i1 true
endif3184:
%t99 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0
%t100 = load { ptr, i64, i64 }, ptr %t99
store { ptr, i64, i64 } %t100, ptr %a101
store { ptr, i64, i64 } { ptr @.str.2064, i64 4, i64 0 }, ptr %a102
%t103 = call i32 @finch_str_eq(ptr %a101, ptr %a102)
%t104 = icmp ne i32 %t103, 0
br label %logic.from3185
logic.from3185:
br i1 %t104, label %logic.rhs3186, label %logic.end3187
logic.rhs3186:
%t105 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1
%t106 = load { ptr, i64, i64 }, ptr %t105
store { ptr, i64, i64 } %t106, ptr %a107
store { ptr, i64, i64 } { ptr @.str.2065, 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.rend3188
logic.rend3188:
br label %logic.end3187
logic.end3187:
%t111 = phi i1 [ false, %logic.from3185 ], [ %t110, %logic.rend3188 ]
br label %logic.from3189
logic.from3189:
br i1 %t111, label %logic.rhs3190, label %logic.end3191
logic.rhs3190:
%t112 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9
%t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1
%t114 = load i64, ptr %t113
%t115 = icmp eq i64 %t114, 1
br label %logic.rend3192
logic.rend3192:
br label %logic.end3191
logic.end3191:
%t116 = phi i1 [ false, %logic.from3189 ], [ %t115, %logic.rend3192 ]
br label %logic.from3193
logic.from3193:
br i1 %t116, label %logic.rhs3194, label %logic.end3195
logic.rhs3194:
%t117 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9
%t118 = load { ptr, i64, i64 }, ptr %t117
%t119 = extractvalue { ptr, i64, i64 } %t118, 1
%t120 = icmp uge i64 0, %t119
br i1 %t120, label %range3196, label %inrange3197
range3196:
call void @finch_panic_index(ptr @.str.2066, i64 1282, i64 0, i64 %t119)
unreachable
inrange3197:
%t121 = extractvalue { ptr, i64, i64 } %t118, 0
%t122 = getelementptr inbounds %S.ast.Node, ptr %t121, i64 0
%t123 = load %S.ast.Node, ptr %t122
%t124 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t123)
%t125 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t124, ptr %a126
store { ptr, i64, i64 } %t125, ptr %a127
%t128 = call i32 @finch_str_eq(ptr %a126, ptr %a127)
%t129 = icmp ne i32 %t128, 0
br label %logic.rend3198
logic.rend3198:
br label %logic.end3195
logic.end3195:
%t130 = phi i1 [ false, %logic.from3193 ], [ %t129, %logic.rend3198 ]
br i1 %t130, label %then3199, label %endif3201
then3199:
ret i1 true
endif3201:
%t131 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9
store i64 0, ptr %a132
br label %each.cond3202
each.cond3202:
%t133 = getelementptr inbounds { ptr, i64, i64 }, ptr %t131, i32 0, i32 1
%t134 = load i64, ptr %t133
%t135 = load i64, ptr %a132
%t136 = icmp slt i64 %t135, %t134
br i1 %t136, label %each.body3203, label %each.end3205
each.body3203:
%t137 = load ptr, ptr %t131
%t138 = getelementptr inbounds %S.ast.Node, ptr %t137, i64 %t135
%t139 = load %S.ast.Node, ptr %t138
store %S.ast.Node %t139, ptr %a140
%t141 = load ptr, ptr %a1
%t142 = load { ptr, i64, i64 }, ptr %a2
%t143 = load %S.ast.Node, ptr %a140
%t144 = call i1 @finch.gen.mutates(ptr %t141, { ptr, i64, i64 } %t142, %S.ast.Node %t143)
br i1 %t144, label %then3206, label %endif3208
then3206:
ret i1 true
endif3208:
br label %each.step3204
each.step3204:
%t145 = load i64, ptr %a132
%t146 = add i64 %t145, 1
store i64 %t146, ptr %a132
br label %each.cond3202
each.end3205:
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
%a39 = alloca i64, align 16
%a59 = alloca %S.ast.Node, align 16
%a60 = alloca %S.ast.Node, align 16
%a62 = alloca %S.ast.Node, 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
%a106 = alloca { ptr, i64, i64 }, align 16
%a107 = 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
%a139 = 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
%a166 = alloca i64, align 16
%a183 = alloca { ptr, i64, i64 }, align 16
%a184 = alloca { ptr, i64, i64 }, align 16
%a198 = alloca i64, align 16
%a218 = alloca %S.ast.Node, align 16
%a219 = alloca %S.ast.Node, align 16
%a221 = alloca %S.ast.Node, 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
%a257 = alloca { ptr, i64, i64 }, align 16
%a258 = alloca { ptr, i64, i64 }, align 16
%a263 = alloca { ptr, i64, i64 }, align 16
%a264 = alloca { ptr, i64, i64 }, align 16
%a267 = alloca %S.gen.EnumDef, align 16
%a268 = alloca i64, align 16
%a270 = alloca i64, align 16
%a278 = alloca %S.ast.Node, align 16
%a285 = alloca { ptr, i64, i64 }, align 16
%a291 = alloca i64, align 16
%a294 = alloca i64, align 16
%a299 = alloca { ptr, i64, i64 }, align 16
%a300 = 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
%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
%a325 = alloca { ptr, i64, i64 }, align 16
%a326 = alloca { ptr, i64, i64 }, align 16
%a331 = alloca i64, align 16
%a334 = alloca 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
%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
%a362 = alloca { ptr, i64, i64 }, align 16
%a363 = alloca { ptr, i64, i64 }, align 16
%a364 = alloca { ptr, i64, i64 }, align 16
%a370 = alloca { ptr, i64, i64 }, align 16
%a371 = alloca { ptr, i64, i64 }, align 16
%a393 = alloca %S.gen.EnumDef, align 16
%a394 = alloca %S.gen.EnumDef, align 16
%a410 = alloca i64, align 16
%a429 = alloca { ptr, i64, i64 }, align 16
%a430 = alloca { ptr, i64, i64 }, align 16
%a448 = alloca i64, align 16
%a460 = alloca i64, align 16
%a477 = alloca { ptr, i64, i64 }, align 16
%a478 = alloca { ptr, i64, i64 }, align 16
%a492 = alloca i64, align 16
%a512 = alloca %S.ast.Node, align 16
%a513 = alloca %S.ast.Node, align 16
%a515 = alloca %S.ast.Node, align 16
%a535 = alloca { ptr, i64, i64 }, align 16
%a536 = 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
%a541 = 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
%a565 = alloca { ptr, i64, i64 }, align 16
%a566 = alloca { ptr, i64, i64 }, align 16
%a567 = alloca { ptr, i64, i64 }, align 16
%a577 = alloca { ptr, i64, i64 }, align 16
%a578 = alloca { ptr, i64, i64 }, align 16
%a583 = alloca { ptr, i64, i64 }, align 16
%a584 = alloca { ptr, i64, i64 }, align 16
%a589 = alloca { ptr, i64, i64 }, align 16
%a590 = alloca { ptr, i64, i64 }, align 16
%a595 = alloca { ptr, i64, i64 }, align 16
%a596 = alloca { ptr, i64, i64 }, align 16
%a611 = alloca { ptr, i64, i64 }, align 16
%a612 = alloca { ptr, i64, i64 }, align 16
%a614 = alloca { ptr, i64, i64 }, align 16
%a615 = alloca i1, align 16
%a642 = alloca { ptr, i64, i64 }, align 16
%a643 = alloca { ptr, i64, i64 }, align 16
%a644 = 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
%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
%a672 = alloca i64, align 16
%a691 = alloca { ptr, i64, i64 }, align 16
%a692 = alloca { ptr, i64, i64 }, align 16
%a693 = 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
%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
%a716 = alloca { ptr, i64, i64 }, align 16
%a717 = 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
%a742 = alloca i64, align 16
%a745 = alloca i64, align 16
%a750 = alloca { ptr, i64, i64 }, align 16
%a751 = 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
%a765 = alloca { ptr, i64, i64 }, align 16
%a766 = alloca { ptr, i64, i64 }, align 16
%a767 = 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
%a792 = alloca { ptr, i64, i64 }, align 16
%a793 = alloca { ptr, i64, i64 }, align 16
%a794 = 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
%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
%a819 = alloca { ptr, i64, i64 }, align 16
%a820 = alloca { ptr, i64, i64 }, align 16
%a825 = alloca { ptr, i64, i64 }, align 16
%a826 = alloca { ptr, i64, i64 }, align 16
%a831 = alloca { ptr, i64, i64 }, align 16
%a832 = alloca { ptr, i64, i64 }, align 16
%a836 = alloca { ptr, i64, i64 }, align 16
%a837 = alloca { ptr, i64, i64 }, align 16
%a852 = alloca %S.gen.FnSig, 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
%a868 = alloca { ptr, i64, i64 }, align 16
%a869 = alloca { ptr, i64, i64 }, align 16
%a870 = 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
%a886 = alloca { ptr, i64, i64 }, align 16
%a887 = alloca { ptr, i64, i64 }, align 16
%a888 = 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
%a896 = alloca { ptr, i64, i64 }, align 16
%a897 = alloca { ptr, i64, i64 }, align 16
%a898 = 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
%a917 = alloca i64, align 16
%a929 = alloca { ptr, i64, i64 }, align 16
%a930 = alloca { ptr, i64, i64 }, align 16
%a949 = alloca { ptr, i64, i64 }, align 16
%a950 = alloca { ptr, i64, i64 }, align 16
%a951 = 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
%a993 = alloca { ptr, i64, i64 }, align 16
%a994 = alloca { ptr, i64, i64 }, align 16
%a1012 = alloca %S.gen.FnSig, align 16
%a1013 = alloca %S.gen.FnSig, align 16
%a1023 = alloca i1, align 16
%a1030 = alloca i64, align 16
%a1096 = alloca %S.ast.Node, align 16
%a1097 = alloca %S.ast.Node, align 16
%a1099 = alloca %S.ast.Node, align 16
%a1138 = alloca { ptr, i64, i64 }, align 16
%a1139 = alloca { ptr, i64, i64 }, align 16
%a1152 = alloca i64, align 16
%a1165 = alloca %S.gen.Template, align 16
%a1166 = alloca %S.gen.Template, align 16
%a1168 = alloca %S.gen.Template, align 16
%a1196 = alloca %S.ast.Node, align 16
%a1197 = alloca %S.ast.Node, align 16
%a1199 = alloca %S.ast.Node, align 16
%a1229 = alloca { ptr, i64, i64 }, align 16
%a1230 = alloca { ptr, i64, i64 }, align 16
%a1243 = alloca i64, align 16
%a1283 = alloca %S.ast.Node, align 16
%a1284 = alloca %S.ast.Node, align 16
%a1286 = alloca %S.ast.Node, align 16
%a1298 = alloca %S.ast.Node, align 16
%a1299 = alloca %S.ast.Node, align 16
%a1301 = alloca %S.ast.Node, align 16
%a1314 = alloca i64, align 16
%a1334 = alloca %S.ast.Type, align 16
%a1335 = alloca %S.ast.Type, align 16
%a1337 = 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 %panic3209, label %ok3210
panic3209:
call void @finch_panic(ptr @.str.2067, i64 1296, ptr @.str.2068)
unreachable
ok3210:
%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.cond3211
for.cond3211:
%t8 = load i64, ptr %a7
%t9 = icmp slt i64 %t8, %t6
br i1 %t9, label %for.body3212, label %for.end3214
for.body3212:
%t10 = load ptr, ptr %a1
%t11 = icmp eq ptr %t10, null
br i1 %t11, label %panic3215, label %ok3216
panic3215:
call void @finch_panic(ptr @.str.2069, i64 1297, ptr @.str.2070)
unreachable
ok3216:
%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 %range3217, label %inrange3218
range3217:
call void @finch_panic_index(ptr @.str.2071, i64 1297, i64 %t13, i64 %t15)
unreachable
inrange3218:
%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 %panic3219, label %ok3220
panic3219:
call void @finch_panic(ptr @.str.2072, i64 1297, ptr @.str.2073)
unreachable
ok3220:
%t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 13
store { ptr, i64, i64 } %t20, ptr %a24
call void @finch_str_copy(ptr %a25, ptr %a24)
%t26 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } %t26, ptr %t23
%t27 = load ptr, ptr %a1
%t28 = icmp eq ptr %t27, null
br i1 %t28, label %panic3221, label %ok3222
panic3221:
call void @finch_panic(ptr @.str.2074, i64 1298, ptr @.str.2075)
unreachable
ok3222:
%t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 0
%t30 = load i64, ptr %a7
%t31 = load { ptr, i64, i64 }, ptr %t29
%t32 = extractvalue { ptr, i64, i64 } %t31, 1
%t33 = icmp uge i64 %t30, %t32
br i1 %t33, label %range3223, label %inrange3224
range3223:
call void @finch_panic_index(ptr @.str.2076, i64 1298, i64 %t30, i64 %t32)
unreachable
inrange3224:
%t34 = extractvalue { ptr, i64, i64 } %t31, 0
%t35 = getelementptr inbounds %S.ast.Program, ptr %t34, i64 %t30
%t36 = getelementptr inbounds %S.ast.Program, ptr %t35, i32 0, i32 6
%t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i32 0, i32 1
%t38 = load i64, ptr %t37
store i64 0, ptr %a39
br label %for.cond3225
for.cond3225:
%t40 = load i64, ptr %a39
%t41 = icmp slt i64 %t40, %t38
br i1 %t41, label %for.body3226, label %for.end3228
for.body3226:
%t42 = load ptr, ptr %a1
%t43 = icmp eq ptr %t42, null
br i1 %t43, label %panic3229, label %ok3230
panic3229:
call void @finch_panic(ptr @.str.2077, i64 1299, ptr @.str.2078)
unreachable
ok3230:
%t44 = getelementptr inbounds %S.gen.Gen, ptr %t42, i32 0, i32 0
%t45 = load i64, ptr %a7
%t46 = load { ptr, i64, i64 }, ptr %t44
%t47 = extractvalue { ptr, i64, i64 } %t46, 1
%t48 = icmp uge i64 %t45, %t47
br i1 %t48, label %range3231, label %inrange3232
range3231:
call void @finch_panic_index(ptr @.str.2079, i64 1299, i64 %t45, i64 %t47)
unreachable
inrange3232:
%t49 = extractvalue { ptr, i64, i64 } %t46, 0
%t50 = getelementptr inbounds %S.ast.Program, ptr %t49, i64 %t45
%t51 = getelementptr inbounds %S.ast.Program, ptr %t50, i32 0, i32 6
%t52 = load i64, ptr %a39
%t53 = load { ptr, i64, i64 }, ptr %t51
%t54 = extractvalue { ptr, i64, i64 } %t53, 1
%t55 = icmp uge i64 %t52, %t54
br i1 %t55, label %range3233, label %inrange3234
range3233:
call void @finch_panic_index(ptr @.str.2080, i64 1299, i64 %t52, i64 %t54)
unreachable
inrange3234:
%t56 = extractvalue { ptr, i64, i64 } %t53, 0
%t57 = getelementptr inbounds %S.ast.Node, ptr %t56, i64 %t52
%t58 = load %S.ast.Node, ptr %t57
store %S.ast.Node %t58, ptr %a59
call void @finch.copy.S_ast_Node(ptr %a60, ptr %a59)
%t61 = load %S.ast.Node, ptr %a60
store %S.ast.Node %t61, ptr %a62
%t63 = load ptr, ptr %a1
%t64 = load ptr, ptr %a1
%t65 = icmp eq ptr %t64, null
br i1 %t65, label %panic3235, label %ok3236
panic3235:
call void @finch_panic(ptr @.str.2081, i64 1300, ptr @.str.2082)
unreachable
ok3236:
%t66 = getelementptr inbounds %S.gen.Gen, ptr %t64, i32 0, i32 13
%t67 = load { ptr, i64, i64 }, ptr %t66
%t68 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 1
%t69 = load { ptr, i64, i64 }, ptr %t68
%t70 = call i64 @finch.gen.findStruct(ptr %t63, { ptr, i64, i64 } %t67, { ptr, i64, i64 } %t69)
%t71 = icmp sge i64 %t70, 0
br label %logic.from3237
logic.from3237:
br i1 %t71, label %logic.end3239, label %logic.rhs3238
logic.rhs3238:
%t72 = load ptr, ptr %a1
%t73 = load ptr, ptr %a1
%t74 = icmp eq ptr %t73, null
br i1 %t74, label %panic3240, label %ok3241
panic3240:
call void @finch_panic(ptr @.str.2083, i64 1300, ptr @.str.2084)
unreachable
ok3241:
%t75 = getelementptr inbounds %S.gen.Gen, ptr %t73, i32 0, i32 13
%t76 = load { ptr, i64, i64 }, ptr %t75
%t77 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 1
%t78 = load { ptr, i64, i64 }, ptr %t77
%t79 = call i64 @finch.gen.findTemplate(ptr %t72, { ptr, i64, i64 } %t76, { ptr, i64, i64 } %t78, { ptr, i64, i64 } { ptr @.str.2085, i64 0, i64 0 }, i1 true)
%t80 = icmp sge i64 %t79, 0
br label %logic.rend3242
logic.rend3242:
br label %logic.end3239
logic.end3239:
%t81 = phi i1 [ true, %logic.from3237 ], [ %t80, %logic.rend3242 ]
br i1 %t81, label %then3243, label %endif3245
then3243:
%t82 = load ptr, ptr %a1
%t83 = load %S.ast.Node, ptr %a62
%t84 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 1
%t85 = load { ptr, i64, i64 }, ptr %t84
store { ptr, i64, i64 } { ptr @.str.2086, i64 12, 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.2087, i64 18, i64 0 }, ptr %a92
call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92)
%t93 = load { ptr, i64, i64 }, ptr %a90
call void @finch.gen.fail(ptr %t82, %S.ast.Node %t83, { ptr, i64, i64 } %t93)
br label %endif3245
endif3245:
%t94 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 3
%t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1
%t96 = load i64, ptr %t95
%t97 = icmp sgt i64 %t96, 0
br i1 %t97, label %then3246, label %endif3248
then3246:
%t98 = load ptr, ptr %a1
%t99 = icmp eq ptr %t98, null
br i1 %t99, label %panic3249, label %ok3250
panic3249:
call void @finch_panic(ptr @.str.2088, i64 1305, ptr @.str.2089)
unreachable
ok3250:
%t100 = getelementptr inbounds %S.gen.Gen, ptr %t98, i32 0, i32 16
%t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t100, i32 0, i32 1
%t102 = load ptr, ptr %a1
%t103 = icmp eq ptr %t102, null
br i1 %t103, label %panic3251, label %ok3252
panic3251:
call void @finch_panic(ptr @.str.2090, i64 1305, ptr @.str.2091)
unreachable
ok3252:
%t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 13
%t105 = load { ptr, i64, i64 }, ptr %t104
store { ptr, i64, i64 } %t105, ptr %a106
call void @finch_str_copy(ptr %a107, ptr %a106)
%t108 = load { ptr, i64, i64 }, ptr %a107
%t109 = insertvalue %S.gen.Template zeroinitializer, { ptr, i64, i64 } %t108, 0
%t110 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 1
%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 = insertvalue %S.gen.Template %t109, { ptr, i64, i64 } %t114, 1
%t116 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 3
%t117 = load { ptr, i64, i64 }, ptr %t116
store { ptr, i64, i64 } %t117, ptr %a118
call void @finch.copy.arr_str(ptr %a119, ptr %a118)
%t120 = load { ptr, i64, i64 }, ptr %a119
%t121 = insertvalue %S.gen.Template %t115, { ptr, i64, i64 } %t120, 3
%t122 = load i64, ptr %a7
%t123 = insertvalue %S.gen.Template %t121, i64 %t122, 4
%t124 = load i64, ptr %a39
%t125 = insertvalue %S.gen.Template %t123, i64 %t124, 5
%t126 = insertvalue %S.gen.Template %t125, i1 true, 6
%t127 = load i64, ptr %t101
%t128 = add i64 %t127, 1
call void @finch_arr_reserve(ptr %t100, i64 %t128, i64 ptrtoint (ptr getelementptr (%S.gen.Template, ptr null, i32 1) to i64))
%t129 = load ptr, ptr %t100
%t130 = getelementptr inbounds %S.gen.Template, ptr %t129, i64 %t127
store %S.gen.Template %t126, ptr %t130
store i64 %t128, ptr %t101
br label %for.step3227
endif3248:
%t131 = load ptr, ptr %a1
%t132 = icmp eq ptr %t131, null
br i1 %t132, label %panic3253, label %ok3254
panic3253:
call void @finch_panic(ptr @.str.2092, i64 1308, ptr @.str.2093)
unreachable
ok3254:
%t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 15
%t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1
%t135 = load ptr, ptr %a1
%t136 = icmp eq ptr %t135, null
br i1 %t136, label %panic3255, label %ok3256
panic3255:
call void @finch_panic(ptr @.str.2094, i64 1308, ptr @.str.2095)
unreachable
ok3256:
%t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 13
%t138 = load { ptr, i64, i64 }, ptr %t137
store { ptr, i64, i64 } %t138, ptr %a139
call void @finch_str_copy(ptr %a140, ptr %a139)
%t141 = load { ptr, i64, i64 }, ptr %a140
%t142 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } %t141, 0
%t143 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 1
%t144 = load { ptr, i64, i64 }, ptr %t143
store { ptr, i64, i64 } %t144, ptr %a145
call void @finch_str_copy(ptr %a146, ptr %a145)
%t147 = load { ptr, i64, i64 }, ptr %a146
%t148 = insertvalue %S.gen.StructDef %t142, { ptr, i64, i64 } %t147, 1
%t149 = load i64, ptr %a7
%t150 = insertvalue %S.gen.StructDef %t148, i64 %t149, 13
%t151 = load i64, ptr %a39
%t152 = insertvalue %S.gen.StructDef %t150, i64 %t151, 14
%t153 = load i64, ptr %t134
%t154 = add i64 %t153, 1
call void @finch_arr_reserve(ptr %t133, i64 %t154, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64))
%t155 = load ptr, ptr %t133
%t156 = getelementptr inbounds %S.gen.StructDef, ptr %t155, i64 %t153
store %S.gen.StructDef %t152, ptr %t156
store i64 %t154, ptr %t134
br label %for.step3227
for.step3227:
%t157 = load i64, ptr %a39
%t158 = add i64 %t157, 1
store i64 %t158, ptr %a39
br label %for.cond3225
for.end3228:
br label %for.step3213
for.step3213:
%t159 = load i64, ptr %a7
%t160 = add i64 %t159, 1
store i64 %t160, ptr %a7
br label %for.cond3211
for.end3214:
%t161 = load ptr, ptr %a1
%t162 = icmp eq ptr %t161, null
br i1 %t162, label %panic3257, label %ok3258
panic3257:
call void @finch_panic(ptr @.str.2096, i64 1311, ptr @.str.2097)
unreachable
ok3258:
%t163 = getelementptr inbounds %S.gen.Gen, ptr %t161, i32 0, i32 0
%t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %t163, i32 0, i32 1
%t165 = load i64, ptr %t164
store i64 0, ptr %a166
br label %for.cond3259
for.cond3259:
%t167 = load i64, ptr %a166
%t168 = icmp slt i64 %t167, %t165
br i1 %t168, label %for.body3260, label %for.end3262
for.body3260:
%t169 = load ptr, ptr %a1
%t170 = icmp eq ptr %t169, null
br i1 %t170, label %panic3263, label %ok3264
panic3263:
call void @finch_panic(ptr @.str.2098, i64 1312, ptr @.str.2099)
unreachable
ok3264:
%t171 = getelementptr inbounds %S.gen.Gen, ptr %t169, i32 0, i32 0
%t172 = load i64, ptr %a166
%t173 = load { ptr, i64, i64 }, ptr %t171
%t174 = extractvalue { ptr, i64, i64 } %t173, 1
%t175 = icmp uge i64 %t172, %t174
br i1 %t175, label %range3265, label %inrange3266
range3265:
call void @finch_panic_index(ptr @.str.2100, i64 1312, i64 %t172, i64 %t174)
unreachable
inrange3266:
%t176 = extractvalue { ptr, i64, i64 } %t173, 0
%t177 = getelementptr inbounds %S.ast.Program, ptr %t176, i64 %t172
%t178 = getelementptr inbounds %S.ast.Program, ptr %t177, i32 0, i32 0
%t179 = load { ptr, i64, i64 }, ptr %t178
%t180 = load ptr, ptr %a1
%t181 = icmp eq ptr %t180, null
br i1 %t181, label %panic3267, label %ok3268
panic3267:
call void @finch_panic(ptr @.str.2101, i64 1312, ptr @.str.2102)
unreachable
ok3268:
%t182 = getelementptr inbounds %S.gen.Gen, ptr %t180, i32 0, i32 13
store { ptr, i64, i64 } %t179, ptr %a183
call void @finch_str_copy(ptr %a184, ptr %a183)
%t185 = load { ptr, i64, i64 }, ptr %a184
store { ptr, i64, i64 } %t185, ptr %t182
%t186 = load ptr, ptr %a1
%t187 = icmp eq ptr %t186, null
br i1 %t187, label %panic3269, label %ok3270
panic3269:
call void @finch_panic(ptr @.str.2103, i64 1313, ptr @.str.2104)
unreachable
ok3270:
%t188 = getelementptr inbounds %S.gen.Gen, ptr %t186, i32 0, i32 0
%t189 = load i64, ptr %a166
%t190 = load { ptr, i64, i64 }, ptr %t188
%t191 = extractvalue { ptr, i64, i64 } %t190, 1
%t192 = icmp uge i64 %t189, %t191
br i1 %t192, label %range3271, label %inrange3272
range3271:
call void @finch_panic_index(ptr @.str.2105, i64 1313, i64 %t189, i64 %t191)
unreachable
inrange3272:
%t193 = extractvalue { ptr, i64, i64 } %t190, 0
%t194 = getelementptr inbounds %S.ast.Program, ptr %t193, i64 %t189
%t195 = getelementptr inbounds %S.ast.Program, ptr %t194, i32 0, i32 7
%t196 = getelementptr inbounds { ptr, i64, i64 }, ptr %t195, i32 0, i32 1
%t197 = load i64, ptr %t196
store i64 0, ptr %a198
br label %for.cond3273
for.cond3273:
%t199 = load i64, ptr %a198
%t200 = icmp slt i64 %t199, %t197
br i1 %t200, label %for.body3274, label %for.end3276
for.body3274:
%t201 = load ptr, ptr %a1
%t202 = icmp eq ptr %t201, null
br i1 %t202, label %panic3277, label %ok3278
panic3277:
call void @finch_panic(ptr @.str.2106, i64 1314, ptr @.str.2107)
unreachable
ok3278:
%t203 = getelementptr inbounds %S.gen.Gen, ptr %t201, i32 0, i32 0
%t204 = load i64, ptr %a166
%t205 = load { ptr, i64, i64 }, ptr %t203
%t206 = extractvalue { ptr, i64, i64 } %t205, 1
%t207 = icmp uge i64 %t204, %t206
br i1 %t207, label %range3279, label %inrange3280
range3279:
call void @finch_panic_index(ptr @.str.2108, i64 1314, i64 %t204, i64 %t206)
unreachable
inrange3280:
%t208 = extractvalue { ptr, i64, i64 } %t205, 0
%t209 = getelementptr inbounds %S.ast.Program, ptr %t208, i64 %t204
%t210 = getelementptr inbounds %S.ast.Program, ptr %t209, i32 0, i32 7
%t211 = load i64, ptr %a198
%t212 = load { ptr, i64, i64 }, ptr %t210
%t213 = extractvalue { ptr, i64, i64 } %t212, 1
%t214 = icmp uge i64 %t211, %t213
br i1 %t214, label %range3281, label %inrange3282
range3281:
call void @finch_panic_index(ptr @.str.2109, i64 1314, i64 %t211, i64 %t213)
unreachable
inrange3282:
%t215 = extractvalue { ptr, i64, i64 } %t212, 0
%t216 = getelementptr inbounds %S.ast.Node, ptr %t215, i64 %t211
%t217 = load %S.ast.Node, ptr %t216
store %S.ast.Node %t217, ptr %a218
call void @finch.copy.S_ast_Node(ptr %a219, ptr %a218)
%t220 = load %S.ast.Node, ptr %a219
store %S.ast.Node %t220, ptr %a221
%t222 = load ptr, ptr %a1
%t223 = load ptr, ptr %a1
%t224 = icmp eq ptr %t223, null
br i1 %t224, label %panic3283, label %ok3284
panic3283:
call void @finch_panic(ptr @.str.2110, i64 1315, ptr @.str.2111)
unreachable
ok3284:
%t225 = getelementptr inbounds %S.gen.Gen, ptr %t223, i32 0, i32 13
%t226 = load { ptr, i64, i64 }, ptr %t225
%t227 = getelementptr inbounds %S.ast.Node, ptr %a221, i32 0, i32 1
%t228 = load { ptr, i64, i64 }, ptr %t227
%t229 = call i64 @finch.gen.findEnum(ptr %t222, { ptr, i64, i64 } %t226, { ptr, i64, i64 } %t228)
%t230 = icmp sge i64 %t229, 0
br label %logic.from3285
logic.from3285:
br i1 %t230, label %logic.end3287, label %logic.rhs3286
logic.rhs3286:
%t231 = load ptr, ptr %a1
%t232 = load ptr, ptr %a1
%t233 = icmp eq ptr %t232, null
br i1 %t233, label %panic3288, label %ok3289
panic3288:
call void @finch_panic(ptr @.str.2112, i64 1315, ptr @.str.2113)
unreachable
ok3289:
%t234 = getelementptr inbounds %S.gen.Gen, ptr %t232, i32 0, i32 13
%t235 = load { ptr, i64, i64 }, ptr %t234
%t236 = getelementptr inbounds %S.ast.Node, ptr %a221, i32 0, i32 1
%t237 = load { ptr, i64, i64 }, ptr %t236
%t238 = call i64 @finch.gen.findStruct(ptr %t231, { ptr, i64, i64 } %t235, { ptr, i64, i64 } %t237)
%t239 = icmp sge i64 %t238, 0
br label %logic.rend3290
logic.rend3290:
br label %logic.end3287
logic.end3287:
%t240 = phi i1 [ true, %logic.from3285 ], [ %t239, %logic.rend3290 ]
br i1 %t240, label %then3291, label %endif3293
then3291:
%t241 = load ptr, ptr %a1
%t242 = load %S.ast.Node, ptr %a221
%t243 = getelementptr inbounds %S.ast.Node, ptr %a221, i32 0, i32 1
%t244 = load { ptr, i64, i64 }, ptr %t243
store { ptr, i64, i64 } { ptr @.str.2114, i64 1, i64 0 }, ptr %a246
store { ptr, i64, i64 } %t244, ptr %a247
call void @finch_str_concat(ptr %a245, ptr %a246, ptr %a247)
%t248 = load { ptr, i64, i64 }, ptr %a245
store { ptr, i64, i64 } %t248, ptr %a250
store { ptr, i64, i64 } { ptr @.str.2115, i64 18, i64 0 }, ptr %a251
call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251)
%t252 = load { ptr, i64, i64 }, ptr %a249
call void @finch.gen.fail(ptr %t241, %S.ast.Node %t242, { ptr, i64, i64 } %t252)
br label %endif3293
endif3293:
%t253 = load ptr, ptr %a1
%t254 = icmp eq ptr %t253, null
br i1 %t254, label %panic3294, label %ok3295
panic3294:
call void @finch_panic(ptr @.str.2116, i64 1318, ptr @.str.2117)
unreachable
ok3295:
%t255 = getelementptr inbounds %S.gen.Gen, ptr %t253, i32 0, i32 13
%t256 = load { ptr, i64, i64 }, ptr %t255
store { ptr, i64, i64 } %t256, ptr %a257
call void @finch_str_copy(ptr %a258, ptr %a257)
%t259 = load { ptr, i64, i64 }, ptr %a258
%t260 = insertvalue %S.gen.EnumDef zeroinitializer, { ptr, i64, i64 } %t259, 0
%t261 = getelementptr inbounds %S.ast.Node, ptr %a221, i32 0, i32 1
%t262 = load { ptr, i64, i64 }, ptr %t261
store { ptr, i64, i64 } %t262, ptr %a263
call void @finch_str_copy(ptr %a264, ptr %a263)
%t265 = load { ptr, i64, i64 }, ptr %a264
%t266 = insertvalue %S.gen.EnumDef %t260, { ptr, i64, i64 } %t265, 1
store %S.gen.EnumDef %t266, ptr %a267
store i64 0, ptr %a268
%t269 = getelementptr inbounds %S.ast.Node, ptr %a221, i32 0, i32 9
store i64 0, ptr %a270
br label %each.cond3296
each.cond3296:
%t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t269, i32 0, i32 1
%t272 = load i64, ptr %t271
%t273 = load i64, ptr %a270
%t274 = icmp slt i64 %t273, %t272
br i1 %t274, label %each.body3297, label %each.end3299
each.body3297:
%t275 = load ptr, ptr %t269
%t276 = getelementptr inbounds %S.ast.Node, ptr %t275, i64 %t273
%t277 = load %S.ast.Node, ptr %t276
store %S.ast.Node %t277, ptr %a278
%t279 = getelementptr inbounds %S.ast.Node, ptr %a278, i32 0, i32 4
%t280 = getelementptr inbounds { ptr, i64, i64 }, ptr %t279, i32 0, i32 1
%t281 = load i64, ptr %t280
%t282 = icmp sgt i64 %t281, 0
br i1 %t282, label %then3300, label %endif3302
then3300:
%t283 = getelementptr inbounds %S.ast.Node, ptr %a278, i32 0, i32 4
%t284 = load { ptr, i64, i64 }, ptr %t283
store { ptr, i64, i64 } %t284, ptr %a285
%t286 = call i64 @finch_str_to_int(ptr %a285, ptr @.str.2118, i64 1322)
store i64 %t286, ptr %a268
br label %endif3302
endif3302:
%t287 = getelementptr inbounds %S.gen.EnumDef, ptr %a267, i32 0, i32 2
%t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i32 0, i32 1
%t289 = getelementptr inbounds %S.ast.Node, ptr %a278, i32 0, i32 1
%t290 = load { ptr, i64, i64 }, ptr %t289
store i64 -1, ptr %a291
%t292 = load i64, ptr %t288
%t293 = load ptr, ptr %t287
store i64 0, ptr %a294
br label %find.cond3303
find.cond3303:
%t295 = load i64, ptr %a294
%t296 = icmp slt i64 %t295, %t292
br i1 %t296, label %find.body3304, label %find.end3307
find.body3304:
%t297 = getelementptr inbounds { ptr, i64, i64 }, ptr %t293, i64 %t295
%t298 = load { ptr, i64, i64 }, ptr %t297
store { ptr, i64, i64 } %t298, ptr %a299
store { ptr, i64, i64 } %t290, ptr %a300
%t301 = call i32 @finch_str_eq(ptr %a299, ptr %a300)
%t302 = icmp ne i32 %t301, 0
br i1 %t302, label %find.hit3305, label %find.next3306
find.hit3305:
store i64 %t295, ptr %a291
br label %find.end3307
find.next3306:
%t303 = add i64 %t295, 1
store i64 %t303, ptr %a294
br label %find.cond3303
find.end3307:
%t304 = load i64, ptr %a291
%t305 = icmp sge i64 %t304, 0
br i1 %t305, label %then3308, label %endif3310
then3308:
%t306 = load ptr, ptr %a1
%t307 = load %S.ast.Node, ptr %a278
%t308 = getelementptr inbounds %S.ast.Node, ptr %a221, i32 0, i32 1
%t309 = load { ptr, i64, i64 }, ptr %t308
store { ptr, i64, i64 } { ptr @.str.2119, i64 9, i64 0 }, ptr %a311
store { ptr, i64, i64 } %t309, ptr %a312
call void @finch_str_concat(ptr %a310, ptr %a311, ptr %a312)
%t313 = load { ptr, i64, i64 }, ptr %a310
store { ptr, i64, i64 } %t313, ptr %a315
store { ptr, i64, i64 } { ptr @.str.2120, i64 17, i64 0 }, ptr %a316
call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316)
%t317 = load { ptr, i64, i64 }, ptr %a314
%t318 = getelementptr inbounds %S.ast.Node, ptr %a278, i32 0, i32 1
%t319 = load { ptr, i64, i64 }, ptr %t318
store { ptr, i64, i64 } %t317, ptr %a321
store { ptr, i64, i64 } %t319, ptr %a322
call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322)
%t323 = load { ptr, i64, i64 }, ptr %a320
store { ptr, i64, i64 } %t323, ptr %a325
store { ptr, i64, i64 } { ptr @.str.2121, i64 6, i64 0 }, ptr %a326
call void @finch_str_concat(ptr %a324, ptr %a325, ptr %a326)
%t327 = load { ptr, i64, i64 }, ptr %a324
call void @finch.gen.fail(ptr %t306, %S.ast.Node %t307, { ptr, i64, i64 } %t327)
br label %endif3310
endif3310:
%t328 = getelementptr inbounds %S.gen.EnumDef, ptr %a267, i32 0, i32 3
%t329 = getelementptr inbounds { ptr, i64, i64 }, ptr %t328, i32 0, i32 1
%t330 = load i64, ptr %a268
store i64 -1, ptr %a331
%t332 = load i64, ptr %t329
%t333 = load ptr, ptr %t328
store i64 0, ptr %a334
br label %find.cond3311
find.cond3311:
%t335 = load i64, ptr %a334
%t336 = icmp slt i64 %t335, %t332
br i1 %t336, label %find.body3312, label %find.end3315
find.body3312:
%t337 = getelementptr inbounds i64, ptr %t333, i64 %t335
%t338 = load i64, ptr %t337
%t339 = icmp eq i64 %t338, %t330
br i1 %t339, label %find.hit3313, label %find.next3314
find.hit3313:
store i64 %t335, ptr %a331
br label %find.end3315
find.next3314:
%t340 = add i64 %t335, 1
store i64 %t340, ptr %a334
br label %find.cond3311
find.end3315:
%t341 = load i64, ptr %a331
%t342 = icmp sge i64 %t341, 0
br i1 %t342, label %then3316, label %endif3318
then3316:
%t343 = load ptr, ptr %a1
%t344 = load %S.ast.Node, ptr %a278
%t345 = getelementptr inbounds %S.ast.Node, ptr %a221, i32 0, i32 1
%t346 = load { ptr, i64, i64 }, ptr %t345
store { ptr, i64, i64 } { ptr @.str.2122, i64 16, 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.2123, i64 17, i64 0 }, ptr %a353
call void @finch_str_concat(ptr %a351, ptr %a352, ptr %a353)
%t354 = load { ptr, i64, i64 }, ptr %a351
%t355 = load i64, ptr %a268
call void @finch_str_from_int(ptr %a356, i64 %t355)
%t357 = load { ptr, i64, i64 }, ptr %a356
store { ptr, i64, i64 } %t354, ptr %a359
store { ptr, i64, i64 } %t357, ptr %a360
call void @finch_str_concat(ptr %a358, ptr %a359, ptr %a360)
%t361 = load { ptr, i64, i64 }, ptr %a358
store { ptr, i64, i64 } %t361, ptr %a363
store { ptr, i64, i64 } { ptr @.str.2124, i64 20, i64 0 }, ptr %a364
call void @finch_str_concat(ptr %a362, ptr %a363, ptr %a364)
%t365 = load { ptr, i64, i64 }, ptr %a362
call void @finch.gen.fail(ptr %t343, %S.ast.Node %t344, { ptr, i64, i64 } %t365)
br label %endif3318
endif3318:
%t366 = getelementptr inbounds %S.gen.EnumDef, ptr %a267, i32 0, i32 2
%t367 = getelementptr inbounds { ptr, i64, i64 }, ptr %t366, i32 0, i32 1
%t368 = getelementptr inbounds %S.ast.Node, ptr %a278, i32 0, i32 1
%t369 = load { ptr, i64, i64 }, ptr %t368
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 %t367
%t374 = add i64 %t373, 1
call void @finch_arr_reserve(ptr %t366, i64 %t374, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t375 = load ptr, ptr %t366
%t376 = getelementptr inbounds { ptr, i64, i64 }, ptr %t375, i64 %t373
store { ptr, i64, i64 } %t372, ptr %t376
store i64 %t374, ptr %t367
%t377 = getelementptr inbounds %S.gen.EnumDef, ptr %a267, i32 0, i32 3
%t378 = getelementptr inbounds { ptr, i64, i64 }, ptr %t377, i32 0, i32 1
%t379 = load i64, ptr %a268
%t380 = load i64, ptr %t378
%t381 = add i64 %t380, 1
call void @finch_arr_reserve(ptr %t377, i64 %t381, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64))
%t382 = load ptr, ptr %t377
%t383 = getelementptr inbounds i64, ptr %t382, i64 %t380
store i64 %t379, ptr %t383
store i64 %t381, ptr %t378
%t384 = load i64, ptr %a268
%t385 = add i64 %t384, 1
store i64 %t385, ptr %a268
br label %each.step3298
each.step3298:
%t386 = load i64, ptr %a270
%t387 = add i64 %t386, 1
store i64 %t387, ptr %a270
br label %each.cond3296
each.end3299:
%t388 = load ptr, ptr %a1
%t389 = icmp eq ptr %t388, null
br i1 %t389, label %panic3319, label %ok3320
panic3319:
call void @finch_panic(ptr @.str.2125, i64 1334, ptr @.str.2126)
unreachable
ok3320:
%t390 = getelementptr inbounds %S.gen.Gen, ptr %t388, i32 0, i32 20
%t391 = getelementptr inbounds { ptr, i64, i64 }, ptr %t390, i32 0, i32 1
%t392 = load %S.gen.EnumDef, ptr %a267
store %S.gen.EnumDef %t392, ptr %a393
call void @finch.copy.S_gen_EnumDef(ptr %a394, ptr %a393)
%t395 = load %S.gen.EnumDef, ptr %a394
%t396 = load i64, ptr %t391
%t397 = add i64 %t396, 1
call void @finch_arr_reserve(ptr %t390, i64 %t397, i64 ptrtoint (ptr getelementptr (%S.gen.EnumDef, ptr null, i32 1) to i64))
%t398 = load ptr, ptr %t390
%t399 = getelementptr inbounds %S.gen.EnumDef, ptr %t398, i64 %t396
store %S.gen.EnumDef %t395, ptr %t399
store i64 %t397, ptr %t391
br label %for.step3275
for.step3275:
%t400 = load i64, ptr %a198
%t401 = add i64 %t400, 1
store i64 %t401, ptr %a198
br label %for.cond3273
for.end3276:
br label %for.step3261
for.step3261:
%t402 = load i64, ptr %a166
%t403 = add i64 %t402, 1
store i64 %t403, ptr %a166
br label %for.cond3259
for.end3262:
%t404 = load ptr, ptr %a1
%t405 = icmp eq ptr %t404, null
br i1 %t405, label %panic3321, label %ok3322
panic3321:
call void @finch_panic(ptr @.str.2127, i64 1337, ptr @.str.2128)
unreachable
ok3322:
%t406 = getelementptr inbounds %S.gen.Gen, ptr %t404, i32 0, i32 24
%t407 = getelementptr inbounds %S.cimport.CImports, ptr %t406, i32 0, i32 4
%t408 = getelementptr inbounds { ptr, i64, i64 }, ptr %t407, i32 0, i32 1
%t409 = load i64, ptr %t408
store i64 0, ptr %a410
br label %for.cond3323
for.cond3323:
%t411 = load i64, ptr %a410
%t412 = icmp slt i64 %t411, %t409
br i1 %t412, label %for.body3324, label %for.end3326
for.body3324:
%t413 = load ptr, ptr %a1
%t414 = icmp eq ptr %t413, null
br i1 %t414, label %panic3327, label %ok3328
panic3327:
call void @finch_panic(ptr @.str.2129, i64 1338, ptr @.str.2130)
unreachable
ok3328:
%t415 = getelementptr inbounds %S.gen.Gen, ptr %t413, i32 0, i32 15
%t416 = getelementptr inbounds { ptr, i64, i64 }, ptr %t415, i32 0, i32 1
%t417 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } { ptr @.str.2131, i64 1, i64 0 }, 0
%t418 = load ptr, ptr %a1
%t419 = icmp eq ptr %t418, null
br i1 %t419, label %panic3329, label %ok3330
panic3329:
call void @finch_panic(ptr @.str.2132, i64 1338, ptr @.str.2133)
unreachable
ok3330:
%t420 = getelementptr inbounds %S.gen.Gen, ptr %t418, i32 0, i32 24
%t421 = getelementptr inbounds %S.cimport.CImports, ptr %t420, i32 0, i32 4
%t422 = load i64, ptr %a410
%t423 = load { ptr, i64, i64 }, ptr %t421
%t424 = extractvalue { ptr, i64, i64 } %t423, 1
%t425 = icmp uge i64 %t422, %t424
br i1 %t425, label %range3331, label %inrange3332
range3331:
call void @finch_panic_index(ptr @.str.2134, i64 1338, i64 %t422, i64 %t424)
unreachable
inrange3332:
%t426 = extractvalue { ptr, i64, i64 } %t423, 0
%t427 = getelementptr inbounds { ptr, i64, i64 }, ptr %t426, i64 %t422
%t428 = load { ptr, i64, i64 }, ptr %t427
store { ptr, i64, i64 } %t428, ptr %a429
call void @finch_str_copy(ptr %a430, ptr %a429)
%t431 = load { ptr, i64, i64 }, ptr %a430
%t432 = insertvalue %S.gen.StructDef %t417, { ptr, i64, i64 } %t431, 1
%t433 = insertvalue %S.gen.StructDef %t432, i1 true, 2
%t434 = insertvalue %S.gen.StructDef %t433, i64 -1, 13
%t435 = load i64, ptr %a410
%t436 = insertvalue %S.gen.StructDef %t434, i64 %t435, 14
%t437 = load i64, ptr %t416
%t438 = add i64 %t437, 1
call void @finch_arr_reserve(ptr %t415, i64 %t438, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64))
%t439 = load ptr, ptr %t415
%t440 = getelementptr inbounds %S.gen.StructDef, ptr %t439, i64 %t437
store %S.gen.StructDef %t436, ptr %t440
store i64 %t438, ptr %t416
br label %for.step3325
for.step3325:
%t441 = load i64, ptr %a410
%t442 = add i64 %t441, 1
store i64 %t442, ptr %a410
br label %for.cond3323
for.end3326:
%t443 = load ptr, ptr %a1
%t444 = icmp eq ptr %t443, null
br i1 %t444, label %panic3333, label %ok3334
panic3333:
call void @finch_panic(ptr @.str.2135, i64 1340, ptr @.str.2136)
unreachable
ok3334:
%t445 = getelementptr inbounds %S.gen.Gen, ptr %t443, i32 0, i32 15
%t446 = getelementptr inbounds { ptr, i64, i64 }, ptr %t445, i32 0, i32 1
%t447 = load i64, ptr %t446
store i64 0, ptr %a448
br label %for.cond3335
for.cond3335:
%t449 = load i64, ptr %a448
%t450 = icmp slt i64 %t449, %t447
br i1 %t450, label %for.body3336, label %for.end3338
for.body3336:
%t451 = load ptr, ptr %a1
%t452 = load i64, ptr %a448
call void @finch.gen.resolveStruct(ptr %t451, i64 %t452)
br label %for.step3337
for.step3337:
%t453 = load i64, ptr %a448
%t454 = add i64 %t453, 1
store i64 %t454, ptr %a448
br label %for.cond3335
for.end3338:
%t455 = load ptr, ptr %a1
%t456 = icmp eq ptr %t455, null
br i1 %t456, label %panic3339, label %ok3340
panic3339:
call void @finch_panic(ptr @.str.2137, i64 1343, ptr @.str.2138)
unreachable
ok3340:
%t457 = getelementptr inbounds %S.gen.Gen, ptr %t455, i32 0, i32 0
%t458 = getelementptr inbounds { ptr, i64, i64 }, ptr %t457, i32 0, i32 1
%t459 = load i64, ptr %t458
store i64 0, ptr %a460
br label %for.cond3341
for.cond3341:
%t461 = load i64, ptr %a460
%t462 = icmp slt i64 %t461, %t459
br i1 %t462, label %for.body3342, label %for.end3344
for.body3342:
%t463 = load ptr, ptr %a1
%t464 = icmp eq ptr %t463, null
br i1 %t464, label %panic3345, label %ok3346
panic3345:
call void @finch_panic(ptr @.str.2139, i64 1344, ptr @.str.2140)
unreachable
ok3346:
%t465 = getelementptr inbounds %S.gen.Gen, ptr %t463, i32 0, i32 0
%t466 = load i64, ptr %a460
%t467 = load { ptr, i64, i64 }, ptr %t465
%t468 = extractvalue { ptr, i64, i64 } %t467, 1
%t469 = icmp uge i64 %t466, %t468
br i1 %t469, label %range3347, label %inrange3348
range3347:
call void @finch_panic_index(ptr @.str.2141, i64 1344, i64 %t466, i64 %t468)
unreachable
inrange3348:
%t470 = extractvalue { ptr, i64, i64 } %t467, 0
%t471 = getelementptr inbounds %S.ast.Program, ptr %t470, i64 %t466
%t472 = getelementptr inbounds %S.ast.Program, ptr %t471, i32 0, i32 0
%t473 = load { ptr, i64, i64 }, ptr %t472
%t474 = load ptr, ptr %a1
%t475 = icmp eq ptr %t474, null
br i1 %t475, label %panic3349, label %ok3350
panic3349:
call void @finch_panic(ptr @.str.2142, i64 1344, ptr @.str.2143)
unreachable
ok3350:
%t476 = getelementptr inbounds %S.gen.Gen, ptr %t474, i32 0, i32 13
store { ptr, i64, i64 } %t473, ptr %a477
call void @finch_str_copy(ptr %a478, ptr %a477)
%t479 = load { ptr, i64, i64 }, ptr %a478
store { ptr, i64, i64 } %t479, ptr %t476
%t480 = load ptr, ptr %a1
%t481 = icmp eq ptr %t480, null
br i1 %t481, label %panic3351, label %ok3352
panic3351:
call void @finch_panic(ptr @.str.2144, i64 1345, ptr @.str.2145)
unreachable
ok3352:
%t482 = getelementptr inbounds %S.gen.Gen, ptr %t480, i32 0, i32 0
%t483 = load i64, ptr %a460
%t484 = load { ptr, i64, i64 }, ptr %t482
%t485 = extractvalue { ptr, i64, i64 } %t484, 1
%t486 = icmp uge i64 %t483, %t485
br i1 %t486, label %range3353, label %inrange3354
range3353:
call void @finch_panic_index(ptr @.str.2146, i64 1345, i64 %t483, i64 %t485)
unreachable
inrange3354:
%t487 = extractvalue { ptr, i64, i64 } %t484, 0
%t488 = getelementptr inbounds %S.ast.Program, ptr %t487, i64 %t483
%t489 = getelementptr inbounds %S.ast.Program, ptr %t488, i32 0, i32 8
%t490 = getelementptr inbounds { ptr, i64, i64 }, ptr %t489, i32 0, i32 1
%t491 = load i64, ptr %t490
store i64 0, ptr %a492
br label %for.cond3355
for.cond3355:
%t493 = load i64, ptr %a492
%t494 = icmp slt i64 %t493, %t491
br i1 %t494, label %for.body3356, label %for.end3358
for.body3356:
%t495 = load ptr, ptr %a1
%t496 = icmp eq ptr %t495, null
br i1 %t496, label %panic3359, label %ok3360
panic3359:
call void @finch_panic(ptr @.str.2147, i64 1346, ptr @.str.2148)
unreachable
ok3360:
%t497 = getelementptr inbounds %S.gen.Gen, ptr %t495, i32 0, i32 0
%t498 = load i64, ptr %a460
%t499 = load { ptr, i64, i64 }, ptr %t497
%t500 = extractvalue { ptr, i64, i64 } %t499, 1
%t501 = icmp uge i64 %t498, %t500
br i1 %t501, label %range3361, label %inrange3362
range3361:
call void @finch_panic_index(ptr @.str.2149, i64 1346, i64 %t498, i64 %t500)
unreachable
inrange3362:
%t502 = extractvalue { ptr, i64, i64 } %t499, 0
%t503 = getelementptr inbounds %S.ast.Program, ptr %t502, i64 %t498
%t504 = getelementptr inbounds %S.ast.Program, ptr %t503, i32 0, i32 8
%t505 = load i64, ptr %a492
%t506 = load { ptr, i64, i64 }, ptr %t504
%t507 = extractvalue { ptr, i64, i64 } %t506, 1
%t508 = icmp uge i64 %t505, %t507
br i1 %t508, label %range3363, label %inrange3364
range3363:
call void @finch_panic_index(ptr @.str.2150, i64 1346, i64 %t505, i64 %t507)
unreachable
inrange3364:
%t509 = extractvalue { ptr, i64, i64 } %t506, 0
%t510 = getelementptr inbounds %S.ast.Node, ptr %t509, i64 %t505
%t511 = load %S.ast.Node, ptr %t510
store %S.ast.Node %t511, ptr %a512
call void @finch.copy.S_ast_Node(ptr %a513, ptr %a512)
%t514 = load %S.ast.Node, ptr %a513
store %S.ast.Node %t514, ptr %a515
%t516 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 3
%t517 = getelementptr inbounds { ptr, i64, i64 }, ptr %t516, i32 0, i32 1
%t518 = load i64, ptr %t517
%t519 = icmp sgt i64 %t518, 0
br i1 %t519, label %then3365, label %endif3367
then3365:
%t520 = load ptr, ptr %a1
%t521 = load ptr, ptr %a1
%t522 = icmp eq ptr %t521, null
br i1 %t522, label %panic3368, label %ok3369
panic3368:
call void @finch_panic(ptr @.str.2151, i64 1349, ptr @.str.2152)
unreachable
ok3369:
%t523 = getelementptr inbounds %S.gen.Gen, ptr %t521, i32 0, i32 13
%t524 = load { ptr, i64, i64 }, ptr %t523
%t525 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1
%t526 = load { ptr, i64, i64 }, ptr %t525
%t527 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t528 = load { ptr, i64, i64 }, ptr %t527
%t529 = call i64 @finch.gen.findTemplate(ptr %t520, { ptr, i64, i64 } %t524, { ptr, i64, i64 } %t526, { ptr, i64, i64 } %t528, i1 false)
%t530 = icmp sge i64 %t529, 0
br i1 %t530, label %then3370, label %endif3372
then3370:
%t531 = load ptr, ptr %a1
%t532 = load %S.ast.Node, ptr %a515
%t533 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1
%t534 = load { ptr, i64, i64 }, ptr %t533
store { ptr, i64, i64 } { ptr @.str.2153, i64 10, i64 0 }, ptr %a536
store { ptr, i64, i64 } %t534, ptr %a537
call void @finch_str_concat(ptr %a535, ptr %a536, ptr %a537)
%t538 = load { ptr, i64, i64 }, ptr %a535
store { ptr, i64, i64 } %t538, ptr %a540
store { ptr, i64, i64 } { ptr @.str.2154, i64 18, i64 0 }, ptr %a541
call void @finch_str_concat(ptr %a539, ptr %a540, ptr %a541)
%t542 = load { ptr, i64, i64 }, ptr %a539
call void @finch.gen.fail(ptr %t531, %S.ast.Node %t532, { ptr, i64, i64 } %t542)
br label %endif3372
endif3372:
%t543 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t544 = getelementptr inbounds { ptr, i64, i64 }, ptr %t543, i32 0, i32 1
%t545 = load i64, ptr %t544
%t546 = icmp sgt i64 %t545, 0
br label %logic.from3373
logic.from3373:
br i1 %t546, label %logic.rhs3374, label %logic.end3375
logic.rhs3374:
%t547 = load ptr, ptr %a1
%t548 = load ptr, ptr %a1
%t549 = icmp eq ptr %t548, null
br i1 %t549, label %panic3376, label %ok3377
panic3376:
call void @finch_panic(ptr @.str.2155, i64 1352, ptr @.str.2156)
unreachable
ok3377:
%t550 = getelementptr inbounds %S.gen.Gen, ptr %t548, i32 0, i32 13
%t551 = load { ptr, i64, i64 }, ptr %t550
%t552 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t553 = load { ptr, i64, i64 }, ptr %t552
%t554 = call i64 @finch.gen.findTemplate(ptr %t547, { ptr, i64, i64 } %t551, { ptr, i64, i64 } %t553, { ptr, i64, i64 } { ptr @.str.2157, i64 0, i64 0 }, i1 true)
%t555 = icmp slt i64 %t554, 0
br label %logic.rend3378
logic.rend3378:
br label %logic.end3375
logic.end3375:
%t556 = phi i1 [ false, %logic.from3373 ], [ %t555, %logic.rend3378 ]
br i1 %t556, label %then3379, label %endif3381
then3379:
%t557 = load ptr, ptr %a1
%t558 = load %S.ast.Node, ptr %a515
%t559 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t560 = load { ptr, i64, i64 }, ptr %t559
store { ptr, i64, i64 } { ptr @.str.2158, i64 34, i64 0 }, ptr %a562
store { ptr, i64, i64 } %t560, ptr %a563
call void @finch_str_concat(ptr %a561, ptr %a562, ptr %a563)
%t564 = load { ptr, i64, i64 }, ptr %a561
store { ptr, i64, i64 } %t564, ptr %a566
store { ptr, i64, i64 } { ptr @.str.2159, i64 53, i64 0 }, ptr %a567
call void @finch_str_concat(ptr %a565, ptr %a566, ptr %a567)
%t568 = load { ptr, i64, i64 }, ptr %a565
call void @finch.gen.fail(ptr %t557, %S.ast.Node %t558, { ptr, i64, i64 } %t568)
br label %endif3381
endif3381:
%t569 = load ptr, ptr %a1
%t570 = icmp eq ptr %t569, null
br i1 %t570, label %panic3382, label %ok3383
panic3382:
call void @finch_panic(ptr @.str.2160, i64 1355, ptr @.str.2161)
unreachable
ok3383:
%t571 = getelementptr inbounds %S.gen.Gen, ptr %t569, i32 0, i32 16
%t572 = getelementptr inbounds { ptr, i64, i64 }, ptr %t571, i32 0, i32 1
%t573 = load ptr, ptr %a1
%t574 = icmp eq ptr %t573, null
br i1 %t574, label %panic3384, label %ok3385
panic3384:
call void @finch_panic(ptr @.str.2162, i64 1355, ptr @.str.2163)
unreachable
ok3385:
%t575 = getelementptr inbounds %S.gen.Gen, ptr %t573, i32 0, i32 13
%t576 = load { ptr, i64, i64 }, ptr %t575
store { ptr, i64, i64 } %t576, ptr %a577
call void @finch_str_copy(ptr %a578, ptr %a577)
%t579 = load { ptr, i64, i64 }, ptr %a578
%t580 = insertvalue %S.gen.Template zeroinitializer, { ptr, i64, i64 } %t579, 0
%t581 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1
%t582 = load { ptr, i64, i64 }, ptr %t581
store { ptr, i64, i64 } %t582, ptr %a583
call void @finch_str_copy(ptr %a584, ptr %a583)
%t585 = load { ptr, i64, i64 }, ptr %a584
%t586 = insertvalue %S.gen.Template %t580, { ptr, i64, i64 } %t585, 1
%t587 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t588 = load { ptr, i64, i64 }, ptr %t587
store { ptr, i64, i64 } %t588, ptr %a589
call void @finch_str_copy(ptr %a590, ptr %a589)
%t591 = load { ptr, i64, i64 }, ptr %a590
%t592 = insertvalue %S.gen.Template %t586, { ptr, i64, i64 } %t591, 2
%t593 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 3
%t594 = load { ptr, i64, i64 }, ptr %t593
store { ptr, i64, i64 } %t594, ptr %a595
call void @finch.copy.arr_str(ptr %a596, ptr %a595)
%t597 = load { ptr, i64, i64 }, ptr %a596
%t598 = insertvalue %S.gen.Template %t592, { ptr, i64, i64 } %t597, 3
%t599 = load i64, ptr %a460
%t600 = insertvalue %S.gen.Template %t598, i64 %t599, 4
%t601 = load i64, ptr %a492
%t602 = insertvalue %S.gen.Template %t600, i64 %t601, 5
%t603 = load i64, ptr %t572
%t604 = add i64 %t603, 1
call void @finch_arr_reserve(ptr %t571, i64 %t604, i64 ptrtoint (ptr getelementptr (%S.gen.Template, ptr null, i32 1) to i64))
%t605 = load ptr, ptr %t571
%t606 = getelementptr inbounds %S.gen.Template, ptr %t605, i64 %t603
store %S.gen.Template %t602, ptr %t606
store i64 %t604, ptr %t572
br label %for.step3357
endif3367:
%t607 = load ptr, ptr %a1
%t608 = icmp eq ptr %t607, null
br i1 %t608, label %panic3386, label %ok3387
panic3386:
call void @finch_panic(ptr @.str.2164, i64 1358, ptr @.str.2165)
unreachable
ok3387:
%t609 = getelementptr inbounds %S.gen.Gen, ptr %t607, i32 0, i32 13
%t610 = load { ptr, i64, i64 }, ptr %t609
store { ptr, i64, i64 } %t610, ptr %a611
call void @finch_str_copy(ptr %a612, ptr %a611)
%t613 = load { ptr, i64, i64 }, ptr %a612
store { ptr, i64, i64 } %t613, ptr %a614
store i1 false, ptr %a615
%t616 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t617 = getelementptr inbounds { ptr, i64, i64 }, ptr %t616, i32 0, i32 1
%t618 = load i64, ptr %t617
%t619 = icmp sgt i64 %t618, 0
br label %logic.from3388
logic.from3388:
br i1 %t619, label %logic.rhs3389, label %logic.end3390
logic.rhs3389:
%t620 = load ptr, ptr %a1
%t621 = load ptr, ptr %a1
%t622 = icmp eq ptr %t621, null
br i1 %t622, label %panic3391, label %ok3392
panic3391:
call void @finch_panic(ptr @.str.2166, i64 1360, ptr @.str.2167)
unreachable
ok3392:
%t623 = getelementptr inbounds %S.gen.Gen, ptr %t621, i32 0, i32 13
%t624 = load { ptr, i64, i64 }, ptr %t623
%t625 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t626 = load { ptr, i64, i64 }, ptr %t625
%t627 = call i64 @finch.gen.findEnum(ptr %t620, { ptr, i64, i64 } %t624, { ptr, i64, i64 } %t626)
%t628 = icmp sge i64 %t627, 0
br label %logic.rend3393
logic.rend3393:
br label %logic.end3390
logic.end3390:
%t629 = phi i1 [ false, %logic.from3388 ], [ %t628, %logic.rend3393 ]
br i1 %t629, label %then3394, label %else3395
then3394:
store i1 true, ptr %a615
%t630 = load ptr, ptr %a1
%t631 = load { ptr, i64, i64 }, ptr %a614
%t632 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t633 = load { ptr, i64, i64 }, ptr %t632
%t634 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1
%t635 = load { ptr, i64, i64 }, ptr %t634
%t636 = call i64 @finch.gen.findMethod(ptr %t630, { ptr, i64, i64 } %t631, { ptr, i64, i64 } %t633, { ptr, i64, i64 } %t635)
%t637 = icmp sge i64 %t636, 0
br i1 %t637, label %then3397, label %endif3399
then3397:
%t638 = load ptr, ptr %a1
%t639 = load %S.ast.Node, ptr %a515
%t640 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t641 = load { ptr, i64, i64 }, ptr %t640
store { ptr, i64, i64 } { ptr @.str.2168, i64 11, i64 0 }, ptr %a643
store { ptr, i64, i64 } %t641, ptr %a644
call void @finch_str_concat(ptr %a642, ptr %a643, ptr %a644)
%t645 = load { ptr, i64, i64 }, ptr %a642
store { ptr, i64, i64 } %t645, ptr %a647
store { ptr, i64, i64 } { ptr @.str.2169, i64 1, i64 0 }, ptr %a648
call void @finch_str_concat(ptr %a646, ptr %a647, ptr %a648)
%t649 = load { ptr, i64, i64 }, ptr %a646
%t650 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1
%t651 = load { ptr, i64, i64 }, ptr %t650
store { ptr, i64, i64 } %t649, ptr %a653
store { ptr, i64, i64 } %t651, ptr %a654
call void @finch_str_concat(ptr %a652, ptr %a653, ptr %a654)
%t655 = load { ptr, i64, i64 }, ptr %a652
store { ptr, i64, i64 } %t655, ptr %a657
store { ptr, i64, i64 } { ptr @.str.2170, i64 17, i64 0 }, ptr %a658
call void @finch_str_concat(ptr %a656, ptr %a657, ptr %a658)
%t659 = load { ptr, i64, i64 }, ptr %a656
call void @finch.gen.fail(ptr %t638, %S.ast.Node %t639, { ptr, i64, i64 } %t659)
br label %endif3399
endif3399:
br label %endif3396
else3395:
%t660 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t661 = getelementptr inbounds { ptr, i64, i64 }, ptr %t660, i32 0, i32 1
%t662 = load i64, ptr %t661
%t663 = icmp sgt i64 %t662, 0
br i1 %t663, label %then3400, label %else3401
then3400:
%t664 = load ptr, ptr %a1
%t665 = load ptr, ptr %a1
%t666 = icmp eq ptr %t665, null
br i1 %t666, label %panic3403, label %ok3404
panic3403:
call void @finch_panic(ptr @.str.2171, i64 1366, ptr @.str.2172)
unreachable
ok3404:
%t667 = getelementptr inbounds %S.gen.Gen, ptr %t665, i32 0, i32 13
%t668 = load { ptr, i64, i64 }, ptr %t667
%t669 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t670 = load { ptr, i64, i64 }, ptr %t669
%t671 = call i64 @finch.gen.findStruct(ptr %t664, { ptr, i64, i64 } %t668, { ptr, i64, i64 } %t670)
store i64 %t671, ptr %a672
%t673 = load i64, ptr %a672
%t674 = icmp slt i64 %t673, 0
br label %logic.from3405
logic.from3405:
br i1 %t674, label %logic.rhs3406, label %logic.end3407
logic.rhs3406:
%t675 = load ptr, ptr %a1
%t676 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t677 = load { ptr, i64, i64 }, ptr %t676
%t678 = call i64 @finch.gen.findStruct(ptr %t675, { ptr, i64, i64 } { ptr @.str.2173, i64 1, i64 0 }, { ptr, i64, i64 } %t677)
%t679 = icmp sge i64 %t678, 0
br label %logic.rend3408
logic.rend3408:
br label %logic.end3407
logic.end3407:
%t680 = phi i1 [ false, %logic.from3405 ], [ %t679, %logic.rend3408 ]
br i1 %t680, label %then3409, label %endif3411
then3409:
%t681 = load ptr, ptr %a1
%t682 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t683 = load { ptr, i64, i64 }, ptr %t682
%t684 = call i64 @finch.gen.findStruct(ptr %t681, { ptr, i64, i64 } { ptr @.str.2174, i64 1, i64 0 }, { ptr, i64, i64 } %t683)
store i64 %t684, ptr %a672
store { ptr, i64, i64 } { ptr @.str.2175, i64 1, i64 0 }, ptr %a614
br label %endif3411
endif3411:
%t685 = load i64, ptr %a672
%t686 = icmp slt i64 %t685, 0
br i1 %t686, label %then3412, label %endif3414
then3412:
%t687 = load ptr, ptr %a1
%t688 = load %S.ast.Node, ptr %a515
%t689 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t690 = load { ptr, i64, i64 }, ptr %t689
store { ptr, i64, i64 } { ptr @.str.2176, i64 26, i64 0 }, ptr %a692
store { ptr, i64, i64 } %t690, ptr %a693
call void @finch_str_concat(ptr %a691, ptr %a692, ptr %a693)
%t694 = load { ptr, i64, i64 }, ptr %a691
store { ptr, i64, i64 } %t694, ptr %a696
store { ptr, i64, i64 } { ptr @.str.2177, i64 76, i64 0 }, ptr %a697
call void @finch_str_concat(ptr %a695, ptr %a696, ptr %a697)
%t698 = load { ptr, i64, i64 }, ptr %a695
call void @finch.gen.fail(ptr %t687, %S.ast.Node %t688, { ptr, i64, i64 } %t698)
br label %endif3414
endif3414:
%t699 = load ptr, ptr %a1
%t700 = load { ptr, i64, i64 }, ptr %a614
%t701 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t702 = load { ptr, i64, i64 }, ptr %t701
%t703 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1
%t704 = load { ptr, i64, i64 }, ptr %t703
%t705 = call i64 @finch.gen.findMethod(ptr %t699, { ptr, i64, i64 } %t700, { ptr, i64, i64 } %t702, { ptr, i64, i64 } %t704)
%t706 = icmp sge i64 %t705, 0
br i1 %t706, label %then3415, label %endif3417
then3415:
%t707 = load ptr, ptr %a1
%t708 = load %S.ast.Node, ptr %a515
%t709 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t710 = load { ptr, i64, i64 }, ptr %t709
store { ptr, i64, i64 } { ptr @.str.2178, i64 11, i64 0 }, ptr %a712
store { ptr, i64, i64 } %t710, ptr %a713
call void @finch_str_concat(ptr %a711, ptr %a712, ptr %a713)
%t714 = load { ptr, i64, i64 }, ptr %a711
store { ptr, i64, i64 } %t714, ptr %a716
store { ptr, i64, i64 } { ptr @.str.2179, i64 1, i64 0 }, ptr %a717
call void @finch_str_concat(ptr %a715, ptr %a716, ptr %a717)
%t718 = load { ptr, i64, i64 }, ptr %a715
%t719 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1
%t720 = load { ptr, i64, i64 }, ptr %t719
store { ptr, i64, i64 } %t718, ptr %a722
store { ptr, i64, i64 } %t720, ptr %a723
call void @finch_str_concat(ptr %a721, ptr %a722, ptr %a723)
%t724 = load { ptr, i64, i64 }, ptr %a721
store { ptr, i64, i64 } %t724, ptr %a726
store { ptr, i64, i64 } { ptr @.str.2180, i64 17, i64 0 }, ptr %a727
call void @finch_str_concat(ptr %a725, ptr %a726, ptr %a727)
%t728 = load { ptr, i64, i64 }, ptr %a725
call void @finch.gen.fail(ptr %t707, %S.ast.Node %t708, { ptr, i64, i64 } %t728)
br label %endif3417
endif3417:
%t729 = load ptr, ptr %a1
%t730 = icmp eq ptr %t729, null
br i1 %t730, label %panic3418, label %ok3419
panic3418:
call void @finch_panic(ptr @.str.2181, i64 1377, ptr @.str.2182)
unreachable
ok3419:
%t731 = getelementptr inbounds %S.gen.Gen, ptr %t729, i32 0, i32 15
%t732 = load i64, ptr %a672
%t733 = load { ptr, i64, i64 }, ptr %t731
%t734 = extractvalue { ptr, i64, i64 } %t733, 1
%t735 = icmp uge i64 %t732, %t734
br i1 %t735, label %range3420, label %inrange3421
range3420:
call void @finch_panic_index(ptr @.str.2183, i64 1377, i64 %t732, i64 %t734)
unreachable
inrange3421:
%t736 = extractvalue { ptr, i64, i64 } %t733, 0
%t737 = getelementptr inbounds %S.gen.StructDef, ptr %t736, i64 %t732
%t738 = getelementptr inbounds %S.gen.StructDef, ptr %t737, i32 0, i32 11
%t739 = getelementptr inbounds { ptr, i64, i64 }, ptr %t738, i32 0, i32 1
%t740 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1
%t741 = load { ptr, i64, i64 }, ptr %t740
store i64 -1, ptr %a742
%t743 = load i64, ptr %t739
%t744 = load ptr, ptr %t738
store i64 0, ptr %a745
br label %find.cond3422
find.cond3422:
%t746 = load i64, ptr %a745
%t747 = icmp slt i64 %t746, %t743
br i1 %t747, label %find.body3423, label %find.end3426
find.body3423:
%t748 = getelementptr inbounds { ptr, i64, i64 }, ptr %t744, i64 %t746
%t749 = load { ptr, i64, i64 }, ptr %t748
store { ptr, i64, i64 } %t749, ptr %a750
store { ptr, i64, i64 } %t741, ptr %a751
%t752 = call i32 @finch_str_eq(ptr %a750, ptr %a751)
%t753 = icmp ne i32 %t752, 0
br i1 %t753, label %find.hit3424, label %find.next3425
find.hit3424:
store i64 %t746, ptr %a742
br label %find.end3426
find.next3425:
%t754 = add i64 %t746, 1
store i64 %t754, ptr %a745
br label %find.cond3422
find.end3426:
%t755 = load i64, ptr %a742
%t756 = icmp sge i64 %t755, 0
br i1 %t756, label %then3427, label %endif3429
then3427:
%t757 = load ptr, ptr %a1
%t758 = load %S.ast.Node, ptr %a515
%t759 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t760 = load { ptr, i64, i64 }, ptr %t759
store { ptr, i64, i64 } { ptr @.str.2184, i64 11, i64 0 }, ptr %a762
store { ptr, i64, i64 } %t760, ptr %a763
call void @finch_str_concat(ptr %a761, ptr %a762, ptr %a763)
%t764 = load { ptr, i64, i64 }, ptr %a761
store { ptr, i64, i64 } %t764, ptr %a766
store { ptr, i64, i64 } { ptr @.str.2185, i64 28, i64 0 }, ptr %a767
call void @finch_str_concat(ptr %a765, ptr %a766, ptr %a767)
%t768 = load { ptr, i64, i64 }, ptr %a765
%t769 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1
%t770 = load { ptr, i64, i64 }, ptr %t769
store { ptr, i64, i64 } %t768, ptr %a772
store { ptr, i64, i64 } %t770, ptr %a773
call void @finch_str_concat(ptr %a771, ptr %a772, ptr %a773)
%t774 = load { ptr, i64, i64 }, ptr %a771
store { ptr, i64, i64 } %t774, ptr %a776
store { ptr, i64, i64 } { ptr @.str.2186, i64 1, i64 0 }, ptr %a777
call void @finch_str_concat(ptr %a775, ptr %a776, ptr %a777)
%t778 = load { ptr, i64, i64 }, ptr %a775
call void @finch.gen.fail(ptr %t757, %S.ast.Node %t758, { ptr, i64, i64 } %t778)
br label %endif3429
endif3429:
br label %endif3402
else3401:
%t779 = load ptr, ptr %a1
%t780 = load ptr, ptr %a1
%t781 = icmp eq ptr %t780, null
br i1 %t781, label %panic3430, label %ok3431
panic3430:
call void @finch_panic(ptr @.str.2187, i64 1381, ptr @.str.2188)
unreachable
ok3431:
%t782 = getelementptr inbounds %S.gen.Gen, ptr %t780, i32 0, i32 13
%t783 = load { ptr, i64, i64 }, ptr %t782
%t784 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1
%t785 = load { ptr, i64, i64 }, ptr %t784
%t786 = call i64 @finch.gen.findFn(ptr %t779, { ptr, i64, i64 } %t783, { ptr, i64, i64 } %t785)
%t787 = icmp sge i64 %t786, 0
br i1 %t787, label %then3432, label %endif3434
then3432:
%t788 = load ptr, ptr %a1
%t789 = load %S.ast.Node, ptr %a515
%t790 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1
%t791 = load { ptr, i64, i64 }, ptr %t790
store { ptr, i64, i64 } { ptr @.str.2189, i64 10, i64 0 }, ptr %a793
store { ptr, i64, i64 } %t791, ptr %a794
call void @finch_str_concat(ptr %a792, ptr %a793, ptr %a794)
%t795 = load { ptr, i64, i64 }, ptr %a792
store { ptr, i64, i64 } %t795, ptr %a797
store { ptr, i64, i64 } { ptr @.str.2190, i64 18, i64 0 }, ptr %a798
call void @finch_str_concat(ptr %a796, ptr %a797, ptr %a798)
%t799 = load { ptr, i64, i64 }, ptr %a796
call void @finch.gen.fail(ptr %t788, %S.ast.Node %t789, { ptr, i64, i64 } %t799)
br label %endif3434
endif3434:
%t800 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1
%t801 = load { ptr, i64, i64 }, ptr %t800
%t802 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t801)
br i1 %t802, label %then3435, label %endif3437
then3435:
%t803 = load ptr, ptr %a1
%t804 = load %S.ast.Node, ptr %a515
%t805 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1
%t806 = load { ptr, i64, i64 }, ptr %t805
store { ptr, i64, i64 } { ptr @.str.2191, i64 1, 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.2192, i64 43, i64 0 }, ptr %a813
call void @finch_str_concat(ptr %a811, ptr %a812, ptr %a813)
%t814 = load { ptr, i64, i64 }, ptr %a811
call void @finch.gen.fail(ptr %t803, %S.ast.Node %t804, { ptr, i64, i64 } %t814)
br label %endif3437
endif3437:
br label %endif3402
endif3402:
br label %endif3396
endif3396:
%t815 = load ptr, ptr %a1
%t816 = icmp eq ptr %t815, null
br i1 %t816, label %panic3438, label %ok3439
panic3438:
call void @finch_panic(ptr @.str.2193, i64 1388, ptr @.str.2194)
unreachable
ok3439:
%t817 = getelementptr inbounds %S.gen.Gen, ptr %t815, i32 0, i32 13
%t818 = load { ptr, i64, i64 }, ptr %t817
store { ptr, i64, i64 } %t818, ptr %a819
call void @finch_str_copy(ptr %a820, ptr %a819)
%t821 = load { ptr, i64, i64 }, ptr %a820
%t822 = insertvalue %S.gen.FnSig zeroinitializer, { ptr, i64, i64 } %t821, 0
%t823 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1
%t824 = load { ptr, i64, i64 }, ptr %t823
store { ptr, i64, i64 } %t824, ptr %a825
call void @finch_str_copy(ptr %a826, ptr %a825)
%t827 = load { ptr, i64, i64 }, ptr %a826
%t828 = insertvalue %S.gen.FnSig %t822, { ptr, i64, i64 } %t827, 1
%t829 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t830 = load { ptr, i64, i64 }, ptr %t829
store { ptr, i64, i64 } %t830, ptr %a831
call void @finch_str_copy(ptr %a832, ptr %a831)
%t833 = load { ptr, i64, i64 }, ptr %a832
%t834 = insertvalue %S.gen.FnSig %t828, { ptr, i64, i64 } %t833, 2
%t835 = load { ptr, i64, i64 }, ptr %a614
store { ptr, i64, i64 } %t835, ptr %a836
call void @finch_str_copy(ptr %a837, ptr %a836)
%t838 = load { ptr, i64, i64 }, ptr %a837
%t839 = insertvalue %S.gen.FnSig %t834, { ptr, i64, i64 } %t838, 3
%t840 = load i1, ptr %a615
%t841 = insertvalue %S.gen.FnSig %t839, i1 %t840, 4
%t842 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 8
%t843 = load i1, ptr %t842
%t844 = insertvalue %S.gen.FnSig %t841, i1 %t843, 5
%t845 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 7
%t846 = load i1, ptr %t845
%t847 = insertvalue %S.gen.FnSig %t844, i1 %t846, 9
%t848 = load i64, ptr %a460
%t849 = insertvalue %S.gen.FnSig %t847, i64 %t848, 16
%t850 = load i64, ptr %a492
%t851 = insertvalue %S.gen.FnSig %t849, i64 %t850, 17
store %S.gen.FnSig %t851, ptr %a852
%t853 = load ptr, ptr %a1
%t854 = icmp eq ptr %t853, null
br i1 %t854, label %panic3440, label %ok3441
panic3440:
call void @finch_panic(ptr @.str.2196, i64 1389, ptr @.str.2197)
unreachable
ok3441:
%t855 = getelementptr inbounds %S.gen.Gen, ptr %t853, i32 0, i32 13
%t856 = load { ptr, i64, i64 }, ptr %t855
%t857 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t856)
store { ptr, i64, i64 } { ptr @.str.2195, i64 7, i64 0 }, ptr %a859
store { ptr, i64, i64 } %t857, ptr %a860
call void @finch_str_concat(ptr %a858, ptr %a859, ptr %a860)
%t861 = load { ptr, i64, i64 }, ptr %a858
store { ptr, i64, i64 } %t861, ptr %a863
store { ptr, i64, i64 } { ptr @.str.2198, i64 1, i64 0 }, ptr %a864
call void @finch_str_concat(ptr %a862, ptr %a863, ptr %a864)
%t865 = load { ptr, i64, i64 }, ptr %a862
%t866 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1
%t867 = load { ptr, i64, i64 }, ptr %t866
store { ptr, i64, i64 } %t865, ptr %a869
store { ptr, i64, i64 } %t867, ptr %a870
call void @finch_str_concat(ptr %a868, ptr %a869, ptr %a870)
%t871 = load { ptr, i64, i64 }, ptr %a868
%t872 = getelementptr inbounds %S.gen.FnSig, ptr %a852, i32 0, i32 11
store { ptr, i64, i64 } %t871, ptr %t872
%t873 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t874 = getelementptr inbounds { ptr, i64, i64 }, ptr %t873, i32 0, i32 1
%t875 = load i64, ptr %t874
%t876 = icmp sgt i64 %t875, 0
br i1 %t876, label %then3442, label %endif3444
then3442:
%t877 = load ptr, ptr %a1
%t878 = icmp eq ptr %t877, null
br i1 %t878, label %panic3445, label %ok3446
panic3445:
call void @finch_panic(ptr @.str.2200, i64 1391, ptr @.str.2201)
unreachable
ok3446:
%t879 = getelementptr inbounds %S.gen.Gen, ptr %t877, i32 0, i32 13
%t880 = load { ptr, i64, i64 }, ptr %t879
%t881 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t880)
store { ptr, i64, i64 } { ptr @.str.2199, i64 7, i64 0 }, ptr %a883
store { ptr, i64, i64 } %t881, ptr %a884
call void @finch_str_concat(ptr %a882, ptr %a883, ptr %a884)
%t885 = load { ptr, i64, i64 }, ptr %a882
store { ptr, i64, i64 } %t885, ptr %a887
store { ptr, i64, i64 } { ptr @.str.2202, i64 1, i64 0 }, ptr %a888
call void @finch_str_concat(ptr %a886, ptr %a887, ptr %a888)
%t889 = load { ptr, i64, i64 }, ptr %a886
%t890 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t891 = load { ptr, i64, i64 }, ptr %t890
store { ptr, i64, i64 } %t889, ptr %a893
store { ptr, i64, i64 } %t891, ptr %a894
call void @finch_str_concat(ptr %a892, ptr %a893, ptr %a894)
%t895 = load { ptr, i64, i64 }, ptr %a892
store { ptr, i64, i64 } %t895, ptr %a897
store { ptr, i64, i64 } { ptr @.str.2203, i64 1, i64 0 }, ptr %a898
call void @finch_str_concat(ptr %a896, ptr %a897, ptr %a898)
%t899 = load { ptr, i64, i64 }, ptr %a896
%t900 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1
%t901 = load { ptr, i64, i64 }, ptr %t900
store { ptr, i64, i64 } %t899, ptr %a903
store { ptr, i64, i64 } %t901, ptr %a904
call void @finch_str_concat(ptr %a902, ptr %a903, ptr %a904)
%t905 = load { ptr, i64, i64 }, ptr %a902
%t906 = getelementptr inbounds %S.gen.FnSig, ptr %a852, i32 0, i32 11
store { ptr, i64, i64 } %t905, ptr %t906
br label %endif3444
endif3444:
%t907 = load ptr, ptr %a1
%t908 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 5
%t909 = load %S.ast.Type, ptr %t908
%t910 = load %S.ast.Node, ptr %a515
%t911 = call %S.ast.Type @finch.gen.resolve(ptr %t907, %S.ast.Type %t909, %S.ast.Node %t910)
%t912 = getelementptr inbounds %S.gen.FnSig, ptr %a852, i32 0, i32 12
store %S.ast.Type %t911, ptr %t912
%t913 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 9
%t914 = getelementptr inbounds { ptr, i64, i64 }, ptr %t913, i32 0, i32 1
%t915 = load i64, ptr %t914
%t916 = sub i64 %t915, 1
store i64 0, ptr %a917
br label %for.cond3447
for.cond3447:
%t918 = load i64, ptr %a917
%t919 = icmp slt i64 %t918, %t916
br i1 %t919, label %for.body3448, label %for.end3450
for.body3448:
%t920 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 9
%t921 = load i64, ptr %a917
%t922 = load { ptr, i64, i64 }, ptr %t920
%t923 = extractvalue { ptr, i64, i64 } %t922, 1
%t924 = icmp uge i64 %t921, %t923
br i1 %t924, label %range3451, label %inrange3452
range3451:
call void @finch_panic_index(ptr @.str.2204, i64 1395, i64 %t921, i64 %t923)
unreachable
inrange3452:
%t925 = extractvalue { ptr, i64, i64 } %t922, 0
%t926 = getelementptr inbounds %S.ast.Node, ptr %t925, i64 %t921
%t927 = getelementptr inbounds %S.ast.Node, ptr %t926, i32 0, i32 1
%t928 = load { ptr, i64, i64 }, ptr %t927
store { ptr, i64, i64 } %t928, ptr %a929
store { ptr, i64, i64 } { ptr @.str.2205, i64 4, i64 0 }, ptr %a930
%t931 = call i32 @finch_str_eq(ptr %a929, ptr %a930)
%t932 = icmp ne i32 %t931, 0
br label %logic.from3453
logic.from3453:
br i1 %t932, label %logic.rhs3454, label %logic.end3455
logic.rhs3454:
%t933 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t934 = getelementptr inbounds { ptr, i64, i64 }, ptr %t933, i32 0, i32 1
%t935 = load i64, ptr %t934
%t936 = icmp sgt i64 %t935, 0
br label %logic.rend3456
logic.rend3456:
br label %logic.end3455
logic.end3455:
%t937 = phi i1 [ false, %logic.from3453 ], [ %t936, %logic.rend3456 ]
br i1 %t937, label %then3457, label %endif3459
then3457:
%t938 = load ptr, ptr %a1
%t939 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 9
%t940 = load i64, ptr %a917
%t941 = load { ptr, i64, i64 }, ptr %t939
%t942 = extractvalue { ptr, i64, i64 } %t941, 1
%t943 = icmp uge i64 %t940, %t942
br i1 %t943, label %range3460, label %inrange3461
range3460:
call void @finch_panic_index(ptr @.str.2206, i64 1396, i64 %t940, i64 %t942)
unreachable
inrange3461:
%t944 = extractvalue { ptr, i64, i64 } %t941, 0
%t945 = getelementptr inbounds %S.ast.Node, ptr %t944, i64 %t940
%t946 = load %S.ast.Node, ptr %t945
%t947 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2
%t948 = load { ptr, i64, i64 }, ptr %t947
store { ptr, i64, i64 } { ptr @.str.2207, i64 22, i64 0 }, ptr %a950
store { ptr, i64, i64 } %t948, ptr %a951
call void @finch_str_concat(ptr %a949, ptr %a950, ptr %a951)
%t952 = load { ptr, i64, i64 }, ptr %a949
store { ptr, i64, i64 } %t952, ptr %a954
store { ptr, i64, i64 } { ptr @.str.2208, i64 24, i64 0 }, ptr %a955
call void @finch_str_concat(ptr %a953, ptr %a954, ptr %a955)
%t956 = load { ptr, i64, i64 }, ptr %a953
call void @finch.gen.fail(ptr %t938, %S.ast.Node %t946, { ptr, i64, i64 } %t956)
br label %endif3459
endif3459:
%t957 = getelementptr inbounds %S.gen.FnSig, ptr %a852, i32 0, i32 13
%t958 = getelementptr inbounds { ptr, i64, i64 }, ptr %t957, i32 0, i32 1
%t959 = load ptr, ptr %a1
%t960 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 9
%t961 = load i64, ptr %a917
%t962 = load { ptr, i64, i64 }, ptr %t960
%t963 = extractvalue { ptr, i64, i64 } %t962, 1
%t964 = icmp uge i64 %t961, %t963
br i1 %t964, label %range3462, label %inrange3463
range3462:
call void @finch_panic_index(ptr @.str.2209, i64 1398, i64 %t961, i64 %t963)
unreachable
inrange3463:
%t965 = extractvalue { ptr, i64, i64 } %t962, 0
%t966 = getelementptr inbounds %S.ast.Node, ptr %t965, i64 %t961
%t967 = getelementptr inbounds %S.ast.Node, ptr %t966, i32 0, i32 5
%t968 = load %S.ast.Type, ptr %t967
%t969 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 9
%t970 = load i64, ptr %a917
%t971 = load { ptr, i64, i64 }, ptr %t969
%t972 = extractvalue { ptr, i64, i64 } %t971, 1
%t973 = icmp uge i64 %t970, %t972
br i1 %t973, label %range3464, label %inrange3465
range3464:
call void @finch_panic_index(ptr @.str.2210, i64 1398, i64 %t970, i64 %t972)
unreachable
inrange3465:
%t974 = extractvalue { ptr, i64, i64 } %t971, 0
%t975 = getelementptr inbounds %S.ast.Node, ptr %t974, i64 %t970
%t976 = load %S.ast.Node, ptr %t975
%t977 = call %S.ast.Type @finch.gen.resolve(ptr %t959, %S.ast.Type %t968, %S.ast.Node %t976)
%t978 = load i64, ptr %t958
%t979 = add i64 %t978, 1
call void @finch_arr_reserve(ptr %t957, i64 %t979, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64))
%t980 = load ptr, ptr %t957
%t981 = getelementptr inbounds %S.ast.Type, ptr %t980, i64 %t978
store %S.ast.Type %t977, ptr %t981
store i64 %t979, ptr %t958
%t982 = getelementptr inbounds %S.gen.FnSig, ptr %a852, i32 0, i32 14
%t983 = getelementptr inbounds { ptr, i64, i64 }, ptr %t982, i32 0, i32 1
%t984 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 9
%t985 = load i64, ptr %a917
%t986 = load { ptr, i64, i64 }, ptr %t984
%t987 = extractvalue { ptr, i64, i64 } %t986, 1
%t988 = icmp uge i64 %t985, %t987
br i1 %t988, label %range3466, label %inrange3467
range3466:
call void @finch_panic_index(ptr @.str.2211, i64 1399, i64 %t985, i64 %t987)
unreachable
inrange3467:
%t989 = extractvalue { ptr, i64, i64 } %t986, 0
%t990 = getelementptr inbounds %S.ast.Node, ptr %t989, i64 %t985
%t991 = getelementptr inbounds %S.ast.Node, ptr %t990, i32 0, i32 1
%t992 = load { ptr, i64, i64 }, ptr %t991
store { ptr, i64, i64 } %t992, ptr %a993
call void @finch_str_copy(ptr %a994, ptr %a993)
%t995 = load { ptr, i64, i64 }, ptr %a994
%t996 = load i64, ptr %t983
%t997 = add i64 %t996, 1
call void @finch_arr_reserve(ptr %t982, i64 %t997, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t998 = load ptr, ptr %t982
%t999 = getelementptr inbounds { ptr, i64, i64 }, ptr %t998, i64 %t996
store { ptr, i64, i64 } %t995, ptr %t999
store i64 %t997, ptr %t983
br label %for.step3449
for.step3449:
%t1000 = load i64, ptr %a917
%t1001 = add i64 %t1000, 1
store i64 %t1001, ptr %a917
br label %for.cond3447
for.end3450:
%t1002 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 8
%t1003 = load i1, ptr %t1002
br i1 %t1003, label %then3468, label %endif3470
then3468:
%t1004 = load ptr, ptr %a1
%t1005 = load %S.ast.Node, ptr %a515
%t1006 = load %S.gen.FnSig, ptr %a852
call void @finch.gen.checkExport(ptr %t1004, %S.ast.Node %t1005, %S.gen.FnSig %t1006)
br label %endif3470
endif3470:
%t1007 = load ptr, ptr %a1
%t1008 = icmp eq ptr %t1007, null
br i1 %t1008, label %panic3471, label %ok3472
panic3471:
call void @finch_panic(ptr @.str.2212, i64 1404, ptr @.str.2213)
unreachable
ok3472:
%t1009 = getelementptr inbounds %S.gen.Gen, ptr %t1007, i32 0, i32 14
%t1010 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1009, i32 0, i32 1
%t1011 = load %S.gen.FnSig, ptr %a852
store %S.gen.FnSig %t1011, ptr %a1012
call void @finch.copy.S_gen_FnSig(ptr %a1013, ptr %a1012)
%t1014 = load %S.gen.FnSig, ptr %a1013
%t1015 = load i64, ptr %t1010
%t1016 = add i64 %t1015, 1
call void @finch_arr_reserve(ptr %t1009, i64 %t1016, i64 ptrtoint (ptr getelementptr (%S.gen.FnSig, ptr null, i32 1) to i64))
%t1017 = load ptr, ptr %t1009
%t1018 = getelementptr inbounds %S.gen.FnSig, ptr %t1017, i64 %t1015
store %S.gen.FnSig %t1014, ptr %t1018
store i64 %t1016, ptr %t1010
br label %for.step3357
for.step3357:
%t1019 = load i64, ptr %a492
%t1020 = add i64 %t1019, 1
store i64 %t1020, ptr %a492
br label %for.cond3355
for.end3358:
br label %for.step3343
for.step3343:
%t1021 = load i64, ptr %a460
%t1022 = add i64 %t1021, 1
store i64 %t1022, ptr %a460
br label %for.cond3341
for.end3344:
store i1 true, ptr %a1023
br label %while.cond3473
while.cond3473:
%t1024 = load i1, ptr %a1023
br i1 %t1024, label %while.body3474, label %while.end3475
while.body3474:
store i1 false, ptr %a1023
%t1025 = load ptr, ptr %a1
%t1026 = icmp eq ptr %t1025, null
br i1 %t1026, label %panic3476, label %ok3477
panic3476:
call void @finch_panic(ptr @.str.2214, i64 1412, ptr @.str.2215)
unreachable
ok3477:
%t1027 = getelementptr inbounds %S.gen.Gen, ptr %t1025, i32 0, i32 14
%t1028 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1027, i32 0, i32 1
%t1029 = load i64, ptr %t1028
store i64 0, ptr %a1030
br label %for.cond3478
for.cond3478:
%t1031 = load i64, ptr %a1030
%t1032 = icmp slt i64 %t1031, %t1029
br i1 %t1032, label %for.body3479, label %for.end3481
for.body3479:
%t1033 = load ptr, ptr %a1
%t1034 = icmp eq ptr %t1033, null
br i1 %t1034, label %panic3482, label %ok3483
panic3482:
call void @finch_panic(ptr @.str.2216, i64 1413, ptr @.str.2217)
unreachable
ok3483:
%t1035 = getelementptr inbounds %S.gen.Gen, ptr %t1033, i32 0, i32 14
%t1036 = load i64, ptr %a1030
%t1037 = load { ptr, i64, i64 }, ptr %t1035
%t1038 = extractvalue { ptr, i64, i64 } %t1037, 1
%t1039 = icmp uge i64 %t1036, %t1038
br i1 %t1039, label %range3484, label %inrange3485
range3484:
call void @finch_panic_index(ptr @.str.2218, i64 1413, i64 %t1036, i64 %t1038)
unreachable
inrange3485:
%t1040 = extractvalue { ptr, i64, i64 } %t1037, 0
%t1041 = getelementptr inbounds %S.gen.FnSig, ptr %t1040, i64 %t1036
%t1042 = getelementptr inbounds %S.gen.FnSig, ptr %t1041, i32 0, i32 2
%t1043 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1042, i32 0, i32 1
%t1044 = load i64, ptr %t1043
%t1045 = icmp sgt i64 %t1044, 0
br label %logic.from3486
logic.from3486:
br i1 %t1045, label %logic.rhs3487, label %logic.end3488
logic.rhs3487:
%t1046 = load ptr, ptr %a1
%t1047 = icmp eq ptr %t1046, null
br i1 %t1047, label %panic3489, label %ok3490
panic3489:
call void @finch_panic(ptr @.str.2219, i64 1413, ptr @.str.2220)
unreachable
ok3490:
%t1048 = getelementptr inbounds %S.gen.Gen, ptr %t1046, i32 0, i32 14
%t1049 = load i64, ptr %a1030
%t1050 = load { ptr, i64, i64 }, ptr %t1048
%t1051 = extractvalue { ptr, i64, i64 } %t1050, 1
%t1052 = icmp uge i64 %t1049, %t1051
br i1 %t1052, label %range3491, label %inrange3492
range3491:
call void @finch_panic_index(ptr @.str.2221, i64 1413, i64 %t1049, i64 %t1051)
unreachable
inrange3492:
%t1053 = extractvalue { ptr, i64, i64 } %t1050, 0
%t1054 = getelementptr inbounds %S.gen.FnSig, ptr %t1053, i64 %t1049
%t1055 = getelementptr inbounds %S.gen.FnSig, ptr %t1054, i32 0, i32 10
%t1056 = load i1, ptr %t1055
%t1057 = xor i1 %t1056, true
br label %logic.rend3493
logic.rend3493:
br label %logic.end3488
logic.end3488:
%t1058 = phi i1 [ false, %logic.from3486 ], [ %t1057, %logic.rend3493 ]
br i1 %t1058, label %then3494, label %endif3496
then3494:
%t1059 = load ptr, ptr %a1
%t1060 = icmp eq ptr %t1059, null
br i1 %t1060, label %panic3497, label %ok3498
panic3497:
call void @finch_panic(ptr @.str.2222, i64 1414, ptr @.str.2223)
unreachable
ok3498:
%t1061 = getelementptr inbounds %S.gen.Gen, ptr %t1059, i32 0, i32 0
%t1062 = load ptr, ptr %a1
%t1063 = icmp eq ptr %t1062, null
br i1 %t1063, label %panic3499, label %ok3500
panic3499:
call void @finch_panic(ptr @.str.2224, i64 1414, ptr @.str.2225)
unreachable
ok3500:
%t1064 = getelementptr inbounds %S.gen.Gen, ptr %t1062, i32 0, i32 14
%t1065 = load i64, ptr %a1030
%t1066 = load { ptr, i64, i64 }, ptr %t1064
%t1067 = extractvalue { ptr, i64, i64 } %t1066, 1
%t1068 = icmp uge i64 %t1065, %t1067
br i1 %t1068, label %range3501, label %inrange3502
range3501:
call void @finch_panic_index(ptr @.str.2226, i64 1414, i64 %t1065, i64 %t1067)
unreachable
inrange3502:
%t1069 = extractvalue { ptr, i64, i64 } %t1066, 0
%t1070 = getelementptr inbounds %S.gen.FnSig, ptr %t1069, i64 %t1065
%t1071 = getelementptr inbounds %S.gen.FnSig, ptr %t1070, i32 0, i32 16
%t1072 = load i64, ptr %t1071
%t1073 = load { ptr, i64, i64 }, ptr %t1061
%t1074 = extractvalue { ptr, i64, i64 } %t1073, 1
%t1075 = icmp uge i64 %t1072, %t1074
br i1 %t1075, label %range3503, label %inrange3504
range3503:
call void @finch_panic_index(ptr @.str.2227, i64 1414, i64 %t1072, i64 %t1074)
unreachable
inrange3504:
%t1076 = extractvalue { ptr, i64, i64 } %t1073, 0
%t1077 = getelementptr inbounds %S.ast.Program, ptr %t1076, i64 %t1072
%t1078 = getelementptr inbounds %S.ast.Program, ptr %t1077, i32 0, i32 8
%t1079 = load ptr, ptr %a1
%t1080 = icmp eq ptr %t1079, null
br i1 %t1080, label %panic3505, label %ok3506
panic3505:
call void @finch_panic(ptr @.str.2228, i64 1414, ptr @.str.2229)
unreachable
ok3506:
%t1081 = getelementptr inbounds %S.gen.Gen, ptr %t1079, i32 0, i32 14
%t1082 = load i64, ptr %a1030
%t1083 = load { ptr, i64, i64 }, ptr %t1081
%t1084 = extractvalue { ptr, i64, i64 } %t1083, 1
%t1085 = icmp uge i64 %t1082, %t1084
br i1 %t1085, label %range3507, label %inrange3508
range3507:
call void @finch_panic_index(ptr @.str.2230, i64 1414, i64 %t1082, i64 %t1084)
unreachable
inrange3508:
%t1086 = extractvalue { ptr, i64, i64 } %t1083, 0
%t1087 = getelementptr inbounds %S.gen.FnSig, ptr %t1086, i64 %t1082
%t1088 = getelementptr inbounds %S.gen.FnSig, ptr %t1087, i32 0, i32 17
%t1089 = load i64, ptr %t1088
%t1090 = load { ptr, i64, i64 }, ptr %t1078
%t1091 = extractvalue { ptr, i64, i64 } %t1090, 1
%t1092 = icmp uge i64 %t1089, %t1091
br i1 %t1092, label %range3509, label %inrange3510
range3509:
call void @finch_panic_index(ptr @.str.2231, i64 1414, i64 %t1089, i64 %t1091)
unreachable
inrange3510:
%t1093 = extractvalue { ptr, i64, i64 } %t1090, 0
%t1094 = getelementptr inbounds %S.ast.Node, ptr %t1093, i64 %t1089
%t1095 = load %S.ast.Node, ptr %t1094
store %S.ast.Node %t1095, ptr %a1096
call void @finch.copy.S_ast_Node(ptr %a1097, ptr %a1096)
%t1098 = load %S.ast.Node, ptr %a1097
store %S.ast.Node %t1098, ptr %a1099
%t1100 = load ptr, ptr %a1
%t1101 = getelementptr inbounds %S.ast.Node, ptr %a1099, i32 0, i32 9
%t1102 = getelementptr inbounds %S.ast.Node, ptr %a1099, i32 0, i32 9
%t1103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1102, i32 0, i32 1
%t1104 = load i64, ptr %t1103
%t1105 = sub i64 %t1104, 1
%t1106 = load { ptr, i64, i64 }, ptr %t1101
%t1107 = extractvalue { ptr, i64, i64 } %t1106, 1
%t1108 = icmp uge i64 %t1105, %t1107
br i1 %t1108, label %range3511, label %inrange3512
range3511:
call void @finch_panic_index(ptr @.str.2233, i64 1415, i64 %t1105, i64 %t1107)
unreachable
inrange3512:
%t1109 = extractvalue { ptr, i64, i64 } %t1106, 0
%t1110 = getelementptr inbounds %S.ast.Node, ptr %t1109, i64 %t1105
%t1111 = load %S.ast.Node, ptr %t1110
%t1112 = call i1 @finch.gen.mutates(ptr %t1100, { ptr, i64, i64 } { ptr @.str.2232, i64 4, i64 0 }, %S.ast.Node %t1111)
br i1 %t1112, label %then3513, label %endif3515
then3513:
%t1113 = load ptr, ptr %a1
%t1114 = icmp eq ptr %t1113, null
br i1 %t1114, label %panic3516, label %ok3517
panic3516:
call void @finch_panic(ptr @.str.2234, i64 1416, ptr @.str.2235)
unreachable
ok3517:
%t1115 = getelementptr inbounds %S.gen.Gen, ptr %t1113, i32 0, i32 14
%t1116 = load i64, ptr %a1030
%t1117 = load { ptr, i64, i64 }, ptr %t1115
%t1118 = extractvalue { ptr, i64, i64 } %t1117, 1
%t1119 = icmp uge i64 %t1116, %t1118
br i1 %t1119, label %range3518, label %inrange3519
range3518:
call void @finch_panic_index(ptr @.str.2236, i64 1416, i64 %t1116, i64 %t1118)
unreachable
inrange3519:
%t1120 = extractvalue { ptr, i64, i64 } %t1117, 0
%t1121 = getelementptr inbounds %S.gen.FnSig, ptr %t1120, i64 %t1116
%t1122 = getelementptr inbounds %S.gen.FnSig, ptr %t1121, i32 0, i32 10
store i1 true, ptr %t1122
%t1123 = load ptr, ptr %a1
%t1124 = icmp eq ptr %t1123, null
br i1 %t1124, label %panic3520, label %ok3521
panic3520:
call void @finch_panic(ptr @.str.2237, i64 1417, ptr @.str.2238)
unreachable
ok3521:
%t1125 = getelementptr inbounds %S.gen.Gen, ptr %t1123, i32 0, i32 22
%t1126 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1125, i32 0, i32 1
%t1127 = load ptr, ptr %a1
%t1128 = icmp eq ptr %t1127, null
br i1 %t1128, label %panic3522, label %ok3523
panic3522:
call void @finch_panic(ptr @.str.2239, i64 1417, ptr @.str.2240)
unreachable
ok3523:
%t1129 = getelementptr inbounds %S.gen.Gen, ptr %t1127, i32 0, i32 14
%t1130 = load i64, ptr %a1030
%t1131 = load { ptr, i64, i64 }, ptr %t1129
%t1132 = extractvalue { ptr, i64, i64 } %t1131, 1
%t1133 = icmp uge i64 %t1130, %t1132
br i1 %t1133, label %range3524, label %inrange3525
range3524:
call void @finch_panic_index(ptr @.str.2241, i64 1417, i64 %t1130, i64 %t1132)
unreachable
inrange3525:
%t1134 = extractvalue { ptr, i64, i64 } %t1131, 0
%t1135 = getelementptr inbounds %S.gen.FnSig, ptr %t1134, i64 %t1130
%t1136 = getelementptr inbounds %S.gen.FnSig, ptr %t1135, i32 0, i32 1
%t1137 = load { ptr, i64, i64 }, ptr %t1136
store { ptr, i64, i64 } %t1137, ptr %a1138
call void @finch_str_copy(ptr %a1139, ptr %a1138)
%t1140 = load { ptr, i64, i64 }, ptr %a1139
%t1141 = load i64, ptr %t1126
%t1142 = add i64 %t1141, 1
call void @finch_arr_reserve(ptr %t1125, i64 %t1142, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t1143 = load ptr, ptr %t1125
%t1144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1143, i64 %t1141
store { ptr, i64, i64 } %t1140, ptr %t1144
store i64 %t1142, ptr %t1126
store i1 true, ptr %a1023
br label %endif3515
endif3515:
br label %endif3496
endif3496:
br label %for.step3480
for.step3480:
%t1145 = load i64, ptr %a1030
%t1146 = add i64 %t1145, 1
store i64 %t1146, ptr %a1030
br label %for.cond3478
for.end3481:
%t1147 = load ptr, ptr %a1
%t1148 = icmp eq ptr %t1147, null
br i1 %t1148, label %panic3526, label %ok3527
panic3526:
call void @finch_panic(ptr @.str.2242, i64 1422, ptr @.str.2243)
unreachable
ok3527:
%t1149 = getelementptr inbounds %S.gen.Gen, ptr %t1147, i32 0, i32 16
%t1150 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1149, i32 0, i32 1
%t1151 = load i64, ptr %t1150
store i64 0, ptr %a1152
br label %for.cond3528
for.cond3528:
%t1153 = load i64, ptr %a1152
%t1154 = icmp slt i64 %t1153, %t1151
br i1 %t1154, label %for.body3529, label %for.end3531
for.body3529:
%t1155 = load ptr, ptr %a1
%t1156 = icmp eq ptr %t1155, null
br i1 %t1156, label %panic3532, label %ok3533
panic3532:
call void @finch_panic(ptr @.str.2244, i64 1423, ptr @.str.2245)
unreachable
ok3533:
%t1157 = getelementptr inbounds %S.gen.Gen, ptr %t1155, i32 0, i32 16
%t1158 = load i64, ptr %a1152
%t1159 = load { ptr, i64, i64 }, ptr %t1157
%t1160 = extractvalue { ptr, i64, i64 } %t1159, 1
%t1161 = icmp uge i64 %t1158, %t1160
br i1 %t1161, label %range3534, label %inrange3535
range3534:
call void @finch_panic_index(ptr @.str.2246, i64 1423, i64 %t1158, i64 %t1160)
unreachable
inrange3535:
%t1162 = extractvalue { ptr, i64, i64 } %t1159, 0
%t1163 = getelementptr inbounds %S.gen.Template, ptr %t1162, i64 %t1158
%t1164 = load %S.gen.Template, ptr %t1163
store %S.gen.Template %t1164, ptr %a1165
call void @finch.copy.S_gen_Template(ptr %a1166, ptr %a1165)
%t1167 = load %S.gen.Template, ptr %a1166
store %S.gen.Template %t1167, ptr %a1168
%t1169 = getelementptr inbounds %S.gen.Template, ptr %a1168, i32 0, i32 2
%t1170 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1169, i32 0, i32 1
%t1171 = load i64, ptr %t1170
%t1172 = icmp sgt i64 %t1171, 0
br label %logic.from3536
logic.from3536:
br i1 %t1172, label %logic.rhs3537, label %logic.end3538
logic.rhs3537:
%t1173 = getelementptr inbounds %S.gen.Template, ptr %a1168, i32 0, i32 7
%t1174 = load i1, ptr %t1173
%t1175 = xor i1 %t1174, true
br label %logic.rend3539
logic.rend3539:
br label %logic.end3538
logic.end3538:
%t1176 = phi i1 [ false, %logic.from3536 ], [ %t1175, %logic.rend3539 ]
br i1 %t1176, label %then3540, label %endif3542
then3540:
%t1177 = load ptr, ptr %a1
%t1178 = icmp eq ptr %t1177, null
br i1 %t1178, label %panic3543, label %ok3544
panic3543:
call void @finch_panic(ptr @.str.2247, i64 1425, ptr @.str.2248)
unreachable
ok3544:
%t1179 = getelementptr inbounds %S.gen.Gen, ptr %t1177, i32 0, i32 0
%t1180 = getelementptr inbounds %S.gen.Template, ptr %a1168, i32 0, i32 4
%t1181 = load i64, ptr %t1180
%t1182 = load { ptr, i64, i64 }, ptr %t1179
%t1183 = extractvalue { ptr, i64, i64 } %t1182, 1
%t1184 = icmp uge i64 %t1181, %t1183
br i1 %t1184, label %range3545, label %inrange3546
range3545:
call void @finch_panic_index(ptr @.str.2249, i64 1425, i64 %t1181, i64 %t1183)
unreachable
inrange3546:
%t1185 = extractvalue { ptr, i64, i64 } %t1182, 0
%t1186 = getelementptr inbounds %S.ast.Program, ptr %t1185, i64 %t1181
%t1187 = getelementptr inbounds %S.ast.Program, ptr %t1186, i32 0, i32 8
%t1188 = getelementptr inbounds %S.gen.Template, ptr %a1168, i32 0, i32 5
%t1189 = load i64, ptr %t1188
%t1190 = load { ptr, i64, i64 }, ptr %t1187
%t1191 = extractvalue { ptr, i64, i64 } %t1190, 1
%t1192 = icmp uge i64 %t1189, %t1191
br i1 %t1192, label %range3547, label %inrange3548
range3547:
call void @finch_panic_index(ptr @.str.2250, i64 1425, i64 %t1189, i64 %t1191)
unreachable
inrange3548:
%t1193 = extractvalue { ptr, i64, i64 } %t1190, 0
%t1194 = getelementptr inbounds %S.ast.Node, ptr %t1193, i64 %t1189
%t1195 = load %S.ast.Node, ptr %t1194
store %S.ast.Node %t1195, ptr %a1196
call void @finch.copy.S_ast_Node(ptr %a1197, ptr %a1196)
%t1198 = load %S.ast.Node, ptr %a1197
store %S.ast.Node %t1198, ptr %a1199
%t1200 = load ptr, ptr %a1
%t1201 = getelementptr inbounds %S.ast.Node, ptr %a1199, i32 0, i32 9
%t1202 = getelementptr inbounds %S.ast.Node, ptr %a1199, i32 0, i32 9
%t1203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1202, i32 0, i32 1
%t1204 = load i64, ptr %t1203
%t1205 = sub i64 %t1204, 1
%t1206 = load { ptr, i64, i64 }, ptr %t1201
%t1207 = extractvalue { ptr, i64, i64 } %t1206, 1
%t1208 = icmp uge i64 %t1205, %t1207
br i1 %t1208, label %range3549, label %inrange3550
range3549:
call void @finch_panic_index(ptr @.str.2252, i64 1426, i64 %t1205, i64 %t1207)
unreachable
inrange3550:
%t1209 = extractvalue { ptr, i64, i64 } %t1206, 0
%t1210 = getelementptr inbounds %S.ast.Node, ptr %t1209, i64 %t1205
%t1211 = load %S.ast.Node, ptr %t1210
%t1212 = call i1 @finch.gen.mutates(ptr %t1200, { ptr, i64, i64 } { ptr @.str.2251, i64 4, i64 0 }, %S.ast.Node %t1211)
br i1 %t1212, label %then3551, label %endif3553
then3551:
%t1213 = load ptr, ptr %a1
%t1214 = icmp eq ptr %t1213, null
br i1 %t1214, label %panic3554, label %ok3555
panic3554:
call void @finch_panic(ptr @.str.2253, i64 1427, ptr @.str.2254)
unreachable
ok3555:
%t1215 = getelementptr inbounds %S.gen.Gen, ptr %t1213, i32 0, i32 16
%t1216 = load i64, ptr %a1152
%t1217 = load { ptr, i64, i64 }, ptr %t1215
%t1218 = extractvalue { ptr, i64, i64 } %t1217, 1
%t1219 = icmp uge i64 %t1216, %t1218
br i1 %t1219, label %range3556, label %inrange3557
range3556:
call void @finch_panic_index(ptr @.str.2255, i64 1427, i64 %t1216, i64 %t1218)
unreachable
inrange3557:
%t1220 = extractvalue { ptr, i64, i64 } %t1217, 0
%t1221 = getelementptr inbounds %S.gen.Template, ptr %t1220, i64 %t1216
%t1222 = getelementptr inbounds %S.gen.Template, ptr %t1221, i32 0, i32 7
store i1 true, ptr %t1222
%t1223 = load ptr, ptr %a1
%t1224 = icmp eq ptr %t1223, null
br i1 %t1224, label %panic3558, label %ok3559
panic3558:
call void @finch_panic(ptr @.str.2256, i64 1428, ptr @.str.2257)
unreachable
ok3559:
%t1225 = getelementptr inbounds %S.gen.Gen, ptr %t1223, i32 0, i32 22
%t1226 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1225, i32 0, i32 1
%t1227 = getelementptr inbounds %S.gen.Template, ptr %a1168, i32 0, i32 1
%t1228 = load { ptr, i64, i64 }, ptr %t1227
store { ptr, i64, i64 } %t1228, ptr %a1229
call void @finch_str_copy(ptr %a1230, ptr %a1229)
%t1231 = load { ptr, i64, i64 }, ptr %a1230
%t1232 = load i64, ptr %t1226
%t1233 = add i64 %t1232, 1
call void @finch_arr_reserve(ptr %t1225, i64 %t1233, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t1234 = load ptr, ptr %t1225
%t1235 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1234, i64 %t1232
store { ptr, i64, i64 } %t1231, ptr %t1235
store i64 %t1233, ptr %t1226
store i1 true, ptr %a1023
br label %endif3553
endif3553:
br label %endif3542
endif3542:
br label %for.step3530
for.step3530:
%t1236 = load i64, ptr %a1152
%t1237 = add i64 %t1236, 1
store i64 %t1237, ptr %a1152
br label %for.cond3528
for.end3531:
br label %while.cond3473
while.end3475:
%t1238 = load ptr, ptr %a1
%t1239 = icmp eq ptr %t1238, null
br i1 %t1239, label %panic3560, label %ok3561
panic3560:
call void @finch_panic(ptr @.str.2258, i64 1435, ptr @.str.2259)
unreachable
ok3561:
%t1240 = getelementptr inbounds %S.gen.Gen, ptr %t1238, i32 0, i32 14
%t1241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1240, i32 0, i32 1
%t1242 = load i64, ptr %t1241
store i64 0, ptr %a1243
br label %for.cond3562
for.cond3562:
%t1244 = load i64, ptr %a1243
%t1245 = icmp slt i64 %t1244, %t1242
br i1 %t1245, label %for.body3563, label %for.end3565
for.body3563:
%t1246 = load ptr, ptr %a1
%t1247 = icmp eq ptr %t1246, null
br i1 %t1247, label %panic3566, label %ok3567
panic3566:
call void @finch_panic(ptr @.str.2260, i64 1436, ptr @.str.2261)
unreachable
ok3567:
%t1248 = getelementptr inbounds %S.gen.Gen, ptr %t1246, i32 0, i32 0
%t1249 = load ptr, ptr %a1
%t1250 = icmp eq ptr %t1249, null
br i1 %t1250, label %panic3568, label %ok3569
panic3568:
call void @finch_panic(ptr @.str.2262, i64 1436, ptr @.str.2263)
unreachable
ok3569:
%t1251 = getelementptr inbounds %S.gen.Gen, ptr %t1249, i32 0, i32 14
%t1252 = load i64, ptr %a1243
%t1253 = load { ptr, i64, i64 }, ptr %t1251
%t1254 = extractvalue { ptr, i64, i64 } %t1253, 1
%t1255 = icmp uge i64 %t1252, %t1254
br i1 %t1255, label %range3570, label %inrange3571
range3570:
call void @finch_panic_index(ptr @.str.2264, i64 1436, i64 %t1252, i64 %t1254)
unreachable
inrange3571:
%t1256 = extractvalue { ptr, i64, i64 } %t1253, 0
%t1257 = getelementptr inbounds %S.gen.FnSig, ptr %t1256, i64 %t1252
%t1258 = getelementptr inbounds %S.gen.FnSig, ptr %t1257, i32 0, i32 16
%t1259 = load i64, ptr %t1258
%t1260 = load { ptr, i64, i64 }, ptr %t1248
%t1261 = extractvalue { ptr, i64, i64 } %t1260, 1
%t1262 = icmp uge i64 %t1259, %t1261
br i1 %t1262, label %range3572, label %inrange3573
range3572:
call void @finch_panic_index(ptr @.str.2265, i64 1436, i64 %t1259, i64 %t1261)
unreachable
inrange3573:
%t1263 = extractvalue { ptr, i64, i64 } %t1260, 0
%t1264 = getelementptr inbounds %S.ast.Program, ptr %t1263, i64 %t1259
%t1265 = getelementptr inbounds %S.ast.Program, ptr %t1264, i32 0, i32 8
%t1266 = load ptr, ptr %a1
%t1267 = icmp eq ptr %t1266, null
br i1 %t1267, label %panic3574, label %ok3575
panic3574:
call void @finch_panic(ptr @.str.2266, i64 1436, ptr @.str.2267)
unreachable
ok3575:
%t1268 = getelementptr inbounds %S.gen.Gen, ptr %t1266, i32 0, i32 14
%t1269 = load i64, ptr %a1243
%t1270 = load { ptr, i64, i64 }, ptr %t1268
%t1271 = extractvalue { ptr, i64, i64 } %t1270, 1
%t1272 = icmp uge i64 %t1269, %t1271
br i1 %t1272, label %range3576, label %inrange3577
range3576:
call void @finch_panic_index(ptr @.str.2268, i64 1436, i64 %t1269, i64 %t1271)
unreachable
inrange3577:
%t1273 = extractvalue { ptr, i64, i64 } %t1270, 0
%t1274 = getelementptr inbounds %S.gen.FnSig, ptr %t1273, i64 %t1269
%t1275 = getelementptr inbounds %S.gen.FnSig, ptr %t1274, i32 0, i32 17
%t1276 = load i64, ptr %t1275
%t1277 = load { ptr, i64, i64 }, ptr %t1265
%t1278 = extractvalue { ptr, i64, i64 } %t1277, 1
%t1279 = icmp uge i64 %t1276, %t1278
br i1 %t1279, label %range3578, label %inrange3579
range3578:
call void @finch_panic_index(ptr @.str.2269, i64 1436, i64 %t1276, i64 %t1278)
unreachable
inrange3579:
%t1280 = extractvalue { ptr, i64, i64 } %t1277, 0
%t1281 = getelementptr inbounds %S.ast.Node, ptr %t1280, i64 %t1276
%t1282 = load %S.ast.Node, ptr %t1281
store %S.ast.Node %t1282, ptr %a1283
call void @finch.copy.S_ast_Node(ptr %a1284, ptr %a1283)
%t1285 = load %S.ast.Node, ptr %a1284
store %S.ast.Node %t1285, ptr %a1286
%t1287 = getelementptr inbounds %S.ast.Node, ptr %a1286, i32 0, i32 9
%t1288 = getelementptr inbounds %S.ast.Node, ptr %a1286, i32 0, i32 9
%t1289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1288, i32 0, i32 1
%t1290 = load i64, ptr %t1289
%t1291 = sub i64 %t1290, 1
%t1292 = load { ptr, i64, i64 }, ptr %t1287
%t1293 = extractvalue { ptr, i64, i64 } %t1292, 1
%t1294 = icmp uge i64 %t1291, %t1293
br i1 %t1294, label %range3580, label %inrange3581
range3580:
call void @finch_panic_index(ptr @.str.2270, i64 1437, i64 %t1291, i64 %t1293)
unreachable
inrange3581:
%t1295 = extractvalue { ptr, i64, i64 } %t1292, 0
%t1296 = getelementptr inbounds %S.ast.Node, ptr %t1295, i64 %t1291
%t1297 = load %S.ast.Node, ptr %t1296
store %S.ast.Node %t1297, ptr %a1298
call void @finch.copy.S_ast_Node(ptr %a1299, ptr %a1298)
%t1300 = load %S.ast.Node, ptr %a1299
store %S.ast.Node %t1300, ptr %a1301
%t1302 = load ptr, ptr %a1
%t1303 = icmp eq ptr %t1302, null
br i1 %t1303, label %panic3582, label %ok3583
panic3582:
call void @finch_panic(ptr @.str.2271, i64 1438, ptr @.str.2272)
unreachable
ok3583:
%t1304 = getelementptr inbounds %S.gen.Gen, ptr %t1302, i32 0, i32 14
%t1305 = load i64, ptr %a1243
%t1306 = load { ptr, i64, i64 }, ptr %t1304
%t1307 = extractvalue { ptr, i64, i64 } %t1306, 1
%t1308 = icmp uge i64 %t1305, %t1307
br i1 %t1308, label %range3584, label %inrange3585
range3584:
call void @finch_panic_index(ptr @.str.2273, i64 1438, i64 %t1305, i64 %t1307)
unreachable
inrange3585:
%t1309 = extractvalue { ptr, i64, i64 } %t1306, 0
%t1310 = getelementptr inbounds %S.gen.FnSig, ptr %t1309, i64 %t1305
%t1311 = getelementptr inbounds %S.gen.FnSig, ptr %t1310, i32 0, i32 13
%t1312 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1311, i32 0, i32 1
%t1313 = load i64, ptr %t1312
store i64 0, ptr %a1314
br label %for.cond3586
for.cond3586:
%t1315 = load i64, ptr %a1314
%t1316 = icmp slt i64 %t1315, %t1313
br i1 %t1316, label %for.body3587, label %for.end3589
for.body3587:
%t1317 = load ptr, ptr %a1
%t1318 = icmp eq ptr %t1317, null
br i1 %t1318, label %panic3590, label %ok3591
panic3590:
call void @finch_panic(ptr @.str.2274, i64 1439, ptr @.str.2275)
unreachable
ok3591:
%t1319 = getelementptr inbounds %S.gen.Gen, ptr %t1317, i32 0, i32 14
%t1320 = load i64, ptr %a1243
%t1321 = load { ptr, i64, i64 }, ptr %t1319
%t1322 = extractvalue { ptr, i64, i64 } %t1321, 1
%t1323 = icmp uge i64 %t1320, %t1322
br i1 %t1323, label %range3592, label %inrange3593
range3592:
call void @finch_panic_index(ptr @.str.2276, i64 1439, i64 %t1320, i64 %t1322)
unreachable
inrange3593:
%t1324 = extractvalue { ptr, i64, i64 } %t1321, 0
%t1325 = getelementptr inbounds %S.gen.FnSig, ptr %t1324, i64 %t1320
%t1326 = getelementptr inbounds %S.gen.FnSig, ptr %t1325, i32 0, i32 13
%t1327 = load i64, ptr %a1314
%t1328 = load { ptr, i64, i64 }, ptr %t1326
%t1329 = extractvalue { ptr, i64, i64 } %t1328, 1
%t1330 = icmp uge i64 %t1327, %t1329
br i1 %t1330, label %range3594, label %inrange3595
range3594:
call void @finch_panic_index(ptr @.str.2277, i64 1439, i64 %t1327, i64 %t1329)
unreachable
inrange3595:
%t1331 = extractvalue { ptr, i64, i64 } %t1328, 0
%t1332 = getelementptr inbounds %S.ast.Type, ptr %t1331, i64 %t1327
%t1333 = load %S.ast.Type, ptr %t1332
store %S.ast.Type %t1333, ptr %a1334
call void @finch.copy.S_ast_Type(ptr %a1335, ptr %a1334)
%t1336 = load %S.ast.Type, ptr %a1335
store %S.ast.Type %t1336, ptr %a1337
%t1338 = load ptr, ptr %a1
%t1339 = icmp eq ptr %t1338, null
br i1 %t1339, label %panic3596, label %ok3597
panic3596:
call void @finch_panic(ptr @.str.2278, i64 1440, ptr @.str.2279)
unreachable
ok3597:
%t1340 = getelementptr inbounds %S.gen.Gen, ptr %t1338, i32 0, i32 14
%t1341 = load i64, ptr %a1243
%t1342 = load { ptr, i64, i64 }, ptr %t1340
%t1343 = extractvalue { ptr, i64, i64 } %t1342, 1
%t1344 = icmp uge i64 %t1341, %t1343
br i1 %t1344, label %range3598, label %inrange3599
range3598:
call void @finch_panic_index(ptr @.str.2280, i64 1440, i64 %t1341, i64 %t1343)
unreachable
inrange3599:
%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 15
%t1348 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1347, i32 0, i32 1
%t1349 = load ptr, ptr %a1
%t1350 = load %S.ast.Type, ptr %a1337
%t1351 = call i1 @finch.gen.owning(ptr %t1349, %S.ast.Type %t1350)
br label %logic.from3600
logic.from3600:
br i1 %t1351, label %logic.rhs3601, label %logic.end3602
logic.rhs3601:
%t1352 = load ptr, ptr %a1
%t1353 = load ptr, ptr %a1
%t1354 = icmp eq ptr %t1353, null
br i1 %t1354, label %panic3603, label %ok3604
panic3603:
call void @finch_panic(ptr @.str.2281, i64 1440, ptr @.str.2282)
unreachable
ok3604:
%t1355 = getelementptr inbounds %S.gen.Gen, ptr %t1353, i32 0, i32 14
%t1356 = load i64, ptr %a1243
%t1357 = load { ptr, i64, i64 }, ptr %t1355
%t1358 = extractvalue { ptr, i64, i64 } %t1357, 1
%t1359 = icmp uge i64 %t1356, %t1358
br i1 %t1359, label %range3605, label %inrange3606
range3605:
call void @finch_panic_index(ptr @.str.2283, i64 1440, i64 %t1356, i64 %t1358)
unreachable
inrange3606:
%t1360 = extractvalue { ptr, i64, i64 } %t1357, 0
%t1361 = getelementptr inbounds %S.gen.FnSig, ptr %t1360, i64 %t1356
%t1362 = getelementptr inbounds %S.gen.FnSig, ptr %t1361, i32 0, i32 14
%t1363 = load i64, ptr %a1314
%t1364 = load { ptr, i64, i64 }, ptr %t1362
%t1365 = extractvalue { ptr, i64, i64 } %t1364, 1
%t1366 = icmp uge i64 %t1363, %t1365
br i1 %t1366, label %range3607, label %inrange3608
range3607:
call void @finch_panic_index(ptr @.str.2284, i64 1440, i64 %t1363, i64 %t1365)
unreachable
inrange3608:
%t1367 = extractvalue { ptr, i64, i64 } %t1364, 0
%t1368 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1367, i64 %t1363
%t1369 = load { ptr, i64, i64 }, ptr %t1368
%t1370 = load %S.ast.Node, ptr %a1301
%t1371 = call i1 @finch.gen.mutates(ptr %t1352, { ptr, i64, i64 } %t1369, %S.ast.Node %t1370)
%t1372 = xor i1 %t1371, true
br label %logic.rend3609
logic.rend3609:
br label %logic.end3602
logic.end3602:
%t1373 = phi i1 [ false, %logic.from3600 ], [ %t1372, %logic.rend3609 ]
%t1374 = load i64, ptr %t1348
%t1375 = add i64 %t1374, 1
call void @finch_arr_reserve(ptr %t1347, i64 %t1375, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64))
%t1376 = load ptr, ptr %t1347
%t1377 = getelementptr inbounds i1, ptr %t1376, i64 %t1374
store i1 %t1373, ptr %t1377
store i64 %t1375, ptr %t1348
br label %for.step3588
for.step3588:
%t1378 = load i64, ptr %a1314
%t1379 = add i64 %t1378, 1
store i64 %t1379, ptr %a1314
br label %for.cond3586
for.end3589:
br label %for.step3564
for.step3564:
%t1380 = load i64, ptr %a1243
%t1381 = add i64 %t1380, 1
store i64 %t1381, ptr %a1243
br label %for.cond3562
for.end3565:
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 %panic3610, label %ok3611
panic3610:
call void @finch_panic(ptr @.str.2285, i64 1446, ptr @.str.2286)
unreachable
ok3611:
%t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 16
%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.cond3612
for.cond3612:
%t12 = load i64, ptr %a11
%t13 = icmp slt i64 %t12, %t10
br i1 %t13, label %for.body3613, label %for.end3615
for.body3613:
%t14 = load ptr, ptr %a1
%t15 = icmp eq ptr %t14, null
br i1 %t15, label %panic3616, label %ok3617
panic3616:
call void @finch_panic(ptr @.str.2287, i64 1447, ptr @.str.2288)
unreachable
ok3617:
%t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 16
%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 %range3618, label %inrange3619
range3618:
call void @finch_panic_index(ptr @.str.2289, i64 1447, i64 %t17, i64 %t19)
unreachable
inrange3619:
%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.from3620
logic.from3620:
br i1 %t34, label %logic.rhs3621, label %logic.end3622
logic.rhs3621:
%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.rend3623
logic.rend3623:
br label %logic.end3622
logic.end3622:
%t42 = phi i1 [ false, %logic.from3620 ], [ %t41, %logic.rend3623 ]
br label %logic.from3624
logic.from3624:
br i1 %t42, label %logic.rhs3625, label %logic.end3626
logic.rhs3625:
%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.rend3627
logic.rend3627:
br label %logic.end3626
logic.end3626:
%t50 = phi i1 [ false, %logic.from3624 ], [ %t49, %logic.rend3627 ]
br label %logic.from3628
logic.from3628:
br i1 %t50, label %logic.rhs3629, label %logic.end3630
logic.rhs3629:
%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.rend3631
logic.rend3631:
br label %logic.end3630
logic.end3630:
%t55 = phi i1 [ false, %logic.from3628 ], [ %t54, %logic.rend3631 ]
br i1 %t55, label %then3632, label %endif3634
then3632:
%t56 = load i64, ptr %a11
ret i64 %t56
endif3634:
br label %for.step3614
for.step3614:
%t57 = load i64, ptr %a11
%t58 = add i64 %t57, 1
store i64 %t58, ptr %a11
br label %for.cond3612
for.end3615:
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.cond3635
each.cond3635:
%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.body3636, label %each.end3638
each.body3636:
%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.step3637
each.step3637:
%t19 = load i64, ptr %a3
%t20 = add i64 %t19, 1
store i64 %t20, ptr %a3
br label %each.cond3635
each.end3638:
%t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.2290, i64 2, i64 0 }, ptr %a22
call void @finch_str_join(ptr %a23, ptr %a2, ptr %a22)
%t24 = load { ptr, i64, i64 }, ptr %a23
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
%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
%a43 = alloca %S.gen.Template, align 16
%a44 = alloca %S.gen.Template, align 16
%a46 = alloca %S.gen.Template, align 16
%a56 = 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
%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
%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
%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
%a91 = alloca { ptr, i64, i64 }, align 16
%a92 = alloca { ptr, i64, i64 }, align 16
%a93 = 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
%a104 = alloca { ptr, i64, i64 }, align 16
%a105 = alloca { ptr, i64, i64 }, align 16
%a106 = 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
%a115 = alloca { ptr, i64, i64 }, align 16
%a116 = alloca { ptr, i64, i64 }, align 16
%a118 = alloca { ptr, i64, i64 }, align 16
%a129 = 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
%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
%a173 = alloca { ptr, i64, i64 }, align 16
%a174 = alloca { ptr, i64, i64 }, align 16
%a178 = alloca { ptr, i64, i64 }, align 16
%a179 = 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.2291, 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 %then3639, label %endif3641
then3639:
%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.2292, 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.2293, i64 28, i64 0 }, ptr %a22
call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22)
%t23 = load { ptr, i64, i64 }, ptr %a20
%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)
%t28 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } %t28, ptr %a30
store { ptr, i64, i64 } { ptr @.str.2294, i64 34, i64 0 }, ptr %a31
call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31)
%t32 = load { ptr, i64, i64 }, ptr %a29
call void @finch.gen.fail(ptr %t13, %S.ast.Node %t14, { ptr, i64, i64 } %t32)
br label %endif3641
endif3641:
%t33 = load ptr, ptr %a1
%t34 = icmp eq ptr %t33, null
br i1 %t34, label %panic3642, label %ok3643
panic3642:
call void @finch_panic(ptr @.str.2295, i64 1469, ptr @.str.2296)
unreachable
ok3643:
%t35 = getelementptr inbounds %S.gen.Gen, ptr %t33, i32 0, i32 16
%t36 = load i64, ptr %a10
%t37 = load { ptr, i64, i64 }, ptr %t35
%t38 = extractvalue { ptr, i64, i64 } %t37, 1
%t39 = icmp uge i64 %t36, %t38
br i1 %t39, label %range3644, label %inrange3645
range3644:
call void @finch_panic_index(ptr @.str.2297, i64 1469, i64 %t36, i64 %t38)
unreachable
inrange3645:
%t40 = extractvalue { ptr, i64, i64 } %t37, 0
%t41 = getelementptr inbounds %S.gen.Template, ptr %t40, i64 %t36
%t42 = load %S.gen.Template, ptr %t41
store %S.gen.Template %t42, ptr %a43
call void @finch.copy.S_gen_Template(ptr %a44, ptr %a43)
%t45 = load %S.gen.Template, ptr %a44
store %S.gen.Template %t45, ptr %a46
%t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1
%t48 = load i64, ptr %t47
%t49 = getelementptr inbounds %S.gen.Template, ptr %a46, i32 0, i32 3
%t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i32 0, i32 1
%t51 = load i64, ptr %t50
%t52 = icmp ne i64 %t48, %t51
br i1 %t52, label %then3646, label %endif3648
then3646:
%t53 = load ptr, ptr %a1
%t54 = load %S.ast.Node, ptr %a5
%t55 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t55, ptr %a57
store { ptr, i64, i64 } { ptr @.str.2298, i64 7, i64 0 }, ptr %a58
call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58)
%t59 = load { ptr, i64, i64 }, ptr %a56
%t60 = getelementptr inbounds %S.gen.Template, ptr %a46, i32 0, i32 3
%t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i32 0, i32 1
%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 } %t59, ptr %a66
store { ptr, i64, i64 } %t64, ptr %a67
call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67)
%t68 = load { ptr, i64, i64 }, ptr %a65
store { ptr, i64, i64 } %t68, ptr %a70
store { ptr, i64, i64 } { ptr @.str.2299, i64 24, i64 0 }, ptr %a71
call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71)
%t72 = load { ptr, i64, i64 }, ptr %a69
%t73 = load { ptr, i64, i64 }, ptr %a3
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)
%t77 = load { ptr, i64, i64 }, ptr %a74
store { ptr, i64, i64 } %t77, ptr %a79
store { ptr, i64, i64 } { ptr @.str.2300, i64 1, i64 0 }, ptr %a80
call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80)
%t81 = load { ptr, i64, i64 }, ptr %a78
%t82 = getelementptr inbounds %S.gen.Template, ptr %a46, i32 0, i32 3
%t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.2301, i64 2, 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 } %t81, ptr %a88
store { ptr, i64, i64 } %t86, ptr %a89
call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89)
%t90 = load { ptr, i64, i64 }, ptr %a87
store { ptr, i64, i64 } %t90, ptr %a92
store { ptr, i64, i64 } { ptr @.str.2302, i64 11, i64 0 }, ptr %a93
call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93)
%t94 = load { ptr, i64, i64 }, ptr %a91
%t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1
%t96 = load i64, ptr %t95
call void @finch_str_from_int(ptr %a97, i64 %t96)
%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)
%t102 = load { ptr, i64, i64 }, ptr %a99
call void @finch.gen.fail(ptr %t53, %S.ast.Node %t54, { ptr, i64, i64 } %t102)
br label %endif3648
endif3648:
%t103 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t103, ptr %a105
store { ptr, i64, i64 } { ptr @.str.2303, i64 1, 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 %a4
%t109 = call { ptr, i64, i64 } @finch.gen.shownTypes({ ptr, i64, i64 } %t108)
store { ptr, i64, i64 } %t107, 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
store { ptr, i64, i64 } %t113, ptr %a115
store { ptr, i64, i64 } { ptr @.str.2304, i64 1, i64 0 }, ptr %a116
call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116)
%t117 = load { ptr, i64, i64 }, ptr %a114
store { ptr, i64, i64 } %t117, ptr %a118
%t119 = load ptr, ptr %a1
%t120 = load { ptr, i64, i64 }, ptr %a2
%t121 = load { ptr, i64, i64 }, ptr %a118
%t122 = call i64 @finch.gen.findStruct(ptr %t119, { ptr, i64, i64 } %t120, { ptr, i64, i64 } %t121)
%t123 = icmp slt i64 %t122, 0
br i1 %t123, label %then3649, label %endif3651
then3649:
%t124 = load ptr, ptr %a1
%t125 = icmp eq ptr %t124, null
br i1 %t125, label %panic3652, label %ok3653
panic3652:
call void @finch_panic(ptr @.str.2305, i64 1475, ptr @.str.2306)
unreachable
ok3653:
%t126 = getelementptr inbounds %S.gen.Gen, ptr %t124, i32 0, i32 15
%t127 = getelementptr inbounds { ptr, i64, i64 }, ptr %t126, i32 0, i32 1
%t128 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t128, ptr %a129
call void @finch_str_copy(ptr %a130, ptr %a129)
%t131 = load { ptr, i64, i64 }, ptr %a130
%t132 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } %t131, 0
%t133 = load { ptr, i64, i64 }, ptr %a118
store { ptr, i64, i64 } %t133, ptr %a134
call void @finch_str_copy(ptr %a135, ptr %a134)
%t136 = load { ptr, i64, i64 }, ptr %a135
%t137 = insertvalue %S.gen.StructDef %t132, { ptr, i64, i64 } %t136, 1
%t138 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t138, ptr %a139
call void @finch_str_copy(ptr %a140, ptr %a139)
%t141 = load { ptr, i64, i64 }, ptr %a140
%t142 = insertvalue %S.gen.StructDef %t137, { ptr, i64, i64 } %t141, 5
%t143 = getelementptr inbounds %S.gen.Template, ptr %a46, i32 0, i32 3
%t144 = load { ptr, i64, i64 }, ptr %t143
store { ptr, i64, i64 } %t144, ptr %a145
call void @finch.copy.arr_str(ptr %a146, ptr %a145)
%t147 = load { ptr, i64, i64 }, ptr %a146
%t148 = insertvalue %S.gen.StructDef %t142, { ptr, i64, i64 } %t147, 6
%t149 = load { ptr, i64, i64 }, ptr %a4
store { ptr, i64, i64 } %t149, ptr %a150
call void @finch.copy.arr_S_ast_Type(ptr %a151, ptr %a150)
%t152 = load { ptr, i64, i64 }, ptr %a151
%t153 = insertvalue %S.gen.StructDef %t148, { ptr, i64, i64 } %t152, 7
%t154 = getelementptr inbounds %S.gen.Template, ptr %a46, i32 0, i32 4
%t155 = load i64, ptr %t154
%t156 = insertvalue %S.gen.StructDef %t153, i64 %t155, 13
%t157 = getelementptr inbounds %S.gen.Template, ptr %a46, i32 0, i32 5
%t158 = load i64, ptr %t157
%t159 = insertvalue %S.gen.StructDef %t156, i64 %t158, 14
%t160 = load i64, ptr %t127
%t161 = add i64 %t160, 1
call void @finch_arr_reserve(ptr %t126, i64 %t161, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64))
%t162 = load ptr, ptr %t126
%t163 = getelementptr inbounds %S.gen.StructDef, ptr %t162, i64 %t160
store %S.gen.StructDef %t159, ptr %t163
store i64 %t161, ptr %t127
%t164 = load ptr, ptr %a1
%t165 = load ptr, ptr %a1
%t166 = icmp eq ptr %t165, null
br i1 %t166, label %panic3654, label %ok3655
panic3654:
call void @finch_panic(ptr @.str.2307, i64 1476, ptr @.str.2308)
unreachable
ok3655:
%t167 = getelementptr inbounds %S.gen.Gen, ptr %t165, i32 0, i32 15
%t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1
%t169 = load i64, ptr %t168
%t170 = sub i64 %t169, 1
call void @finch.gen.resolveStruct(ptr %t164, i64 %t170)
br label %endif3651
endif3651:
%t171 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.2309, i64 6, i64 0 }, 0
%t172 = load { ptr, i64, i64 }, ptr %a118
store { ptr, i64, i64 } %t172, ptr %a173
call void @finch_str_copy(ptr %a174, ptr %a173)
%t175 = load { ptr, i64, i64 }, ptr %a174
%t176 = insertvalue %S.ast.Type %t171, { ptr, i64, i64 } %t175, 2
%t177 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t177, ptr %a178
call void @finch_str_copy(ptr %a179, ptr %a178)
%t180 = load { ptr, i64, i64 }, ptr %a179
%t181 = insertvalue %S.ast.Type %t176, { ptr, i64, i64 } %t180, 3
ret %S.ast.Type %t181
}
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
%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
%a49 = alloca i64, align 16
%a58 = alloca i64, align 16
%a81 = alloca %S.ast.Node, align 16
%a82 = alloca %S.ast.Node, align 16
%a84 = alloca %S.ast.Node, 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
%a98 = alloca { ptr, i64, i64 }, align 16
%a99 = 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
%a114 = alloca { ptr, i64, i64 }, align 16
%a115 = alloca { ptr, i64, i64 }, align 16
%a130 = alloca %S.gen.FnSig, 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
%a145 = alloca { ptr, i64, i64 }, align 16
%a146 = alloca { ptr, i64, i64 }, align 16
%a156 = alloca { ptr, i64, i64 }, align 16
%a157 = 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
%a173 = alloca { ptr, i64, i64 }, align 16
%a174 = alloca { ptr, i64, i64 }, align 16
%a175 = 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
%a185 = 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
%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
%a202 = 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
%a214 = 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
%a227 = alloca { ptr, i64, i64 }, align 16
%a228 = 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
%a244 = alloca { ptr, i64, i64 }, align 16
%a245 = alloca { ptr, i64, i64 }, align 16
%a251 = 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
%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
%a292 = alloca %S.ast.Node, align 16
%a293 = alloca %S.ast.Node, align 16
%a295 = alloca %S.ast.Node, align 16
%a300 = alloca i64, align 16
%a322 = alloca %S.ast.Type, align 16
%a326 = alloca %S.ast.Type, align 16
%a327 = alloca %S.ast.Type, align 16
%a344 = alloca { ptr, i64, i64 }, align 16
%a345 = alloca { ptr, i64, i64 }, align 16
%a380 = alloca { ptr, i64, i64 }, align 16
%a381 = alloca { ptr, i64, i64 }, align 16
%a387 = alloca { ptr, i64, i64 }, align 16
%a388 = alloca { ptr, i64, i64 }, align 16
%a394 = alloca { ptr, i64, i64 }, align 16
%a395 = alloca { ptr, i64, i64 }, align 16
%a401 = alloca { ptr, i64, i64 }, align 16
%a402 = alloca { ptr, i64, i64 }, align 16
%a409 = alloca %S.gen.FnSig, align 16
%a410 = 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 %panic3656, label %ok3657
panic3656:
call void @finch_panic(ptr @.str.2310, i64 1483, ptr @.str.2311)
unreachable
ok3657:
%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 %range3658, label %inrange3659
range3658:
call void @finch_panic_index(ptr @.str.2312, i64 1483, i64 %t9, i64 %t11)
unreachable
inrange3659:
%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.2313, 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)
%t31 = load { ptr, i64, i64 }, ptr %a28
store { ptr, i64, i64 } %t31, ptr %a33
store { ptr, i64, i64 } { ptr @.str.2314, i64 1, i64 0 }, ptr %a34
call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34)
%t35 = load { ptr, i64, i64 }, ptr %a32
store { ptr, i64, i64 } %t35, ptr %a36
%t37 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 2
%t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i32 0, i32 1
%t39 = load i64, ptr %t38
%t40 = icmp sgt i64 %t39, 0
br i1 %t40, label %then3660, label %else3661
then3660:
%t41 = load ptr, ptr %a1
%t42 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0
%t43 = load { ptr, i64, i64 }, ptr %t42
%t44 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2
%t45 = load { ptr, i64, i64 }, ptr %t44
%t46 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1
%t47 = load { ptr, i64, i64 }, ptr %t46
%t48 = call i64 @finch.gen.findMethod(ptr %t41, { ptr, i64, i64 } %t43, { ptr, i64, i64 } %t45, { ptr, i64, i64 } %t47)
store i64 %t48, ptr %a49
%t50 = load i64, ptr %a49
%t51 = icmp sge i64 %t50, 0
br i1 %t51, label %then3663, label %endif3665
then3663:
%t52 = load i64, ptr %a49
ret i64 %t52
endif3665:
br label %endif3662
else3661:
%t53 = load ptr, ptr %a1
%t54 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0
%t55 = load { ptr, i64, i64 }, ptr %t54
%t56 = load { ptr, i64, i64 }, ptr %a36
%t57 = call i64 @finch.gen.findFn(ptr %t53, { ptr, i64, i64 } %t55, { ptr, i64, i64 } %t56)
store i64 %t57, ptr %a58
%t59 = load i64, ptr %a58
%t60 = icmp sge i64 %t59, 0
br i1 %t60, label %then3666, label %endif3668
then3666:
%t61 = load i64, ptr %a58
ret i64 %t61
endif3668:
br label %endif3662
endif3662:
%t62 = load ptr, ptr %a1
%t63 = icmp eq ptr %t62, null
br i1 %t63, label %panic3669, label %ok3670
panic3669:
call void @finch_panic(ptr @.str.2315, i64 1496, ptr @.str.2316)
unreachable
ok3670:
%t64 = getelementptr inbounds %S.gen.Gen, ptr %t62, i32 0, i32 0
%t65 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4
%t66 = load i64, ptr %t65
%t67 = load { ptr, i64, i64 }, ptr %t64
%t68 = extractvalue { ptr, i64, i64 } %t67, 1
%t69 = icmp uge i64 %t66, %t68
br i1 %t69, label %range3671, label %inrange3672
range3671:
call void @finch_panic_index(ptr @.str.2317, i64 1496, i64 %t66, i64 %t68)
unreachable
inrange3672:
%t70 = extractvalue { ptr, i64, i64 } %t67, 0
%t71 = getelementptr inbounds %S.ast.Program, ptr %t70, i64 %t66
%t72 = getelementptr inbounds %S.ast.Program, ptr %t71, i32 0, i32 8
%t73 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 5
%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 %range3673, label %inrange3674
range3673:
call void @finch_panic_index(ptr @.str.2318, i64 1496, i64 %t74, i64 %t76)
unreachable
inrange3674:
%t78 = extractvalue { ptr, i64, i64 } %t75, 0
%t79 = getelementptr inbounds %S.ast.Node, ptr %t78, i64 %t74
%t80 = load %S.ast.Node, ptr %t79
store %S.ast.Node %t80, ptr %a81
call void @finch.copy.S_ast_Node(ptr %a82, ptr %a81)
%t83 = load %S.ast.Node, ptr %a82
store %S.ast.Node %t83, ptr %a84
%t85 = getelementptr inbounds %S.gen.Template, ptr %a19, 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.FnSig zeroinitializer, { ptr, i64, i64 } %t89, 0
%t91 = load { ptr, i64, i64 }, ptr %a36
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.gen.FnSig %t90, { ptr, i64, i64 } %t94, 1
%t96 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0
%t97 = load { ptr, i64, i64 }, ptr %t96
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.gen.FnSig %t95, { ptr, i64, i64 } %t100, 3
%t102 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3
%t103 = load { ptr, i64, i64 }, ptr %t102
store { ptr, i64, i64 } %t103, ptr %a104
call void @finch.copy.arr_str(ptr %a105, ptr %a104)
%t106 = load { ptr, i64, i64 }, ptr %a105
%t107 = insertvalue %S.gen.FnSig %t101, { ptr, i64, i64 } %t106, 6
%t108 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t108, ptr %a109
call void @finch.copy.arr_S_ast_Type(ptr %a110, ptr %a109)
%t111 = load { ptr, i64, i64 }, ptr %a110
%t112 = insertvalue %S.gen.FnSig %t107, { ptr, i64, i64 } %t111, 7
%t113 = load { ptr, i64, i64 }, ptr %a36
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.FnSig %t112, { ptr, i64, i64 } %t116, 8
%t118 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 7
%t119 = load i1, ptr %t118
%t120 = insertvalue %S.gen.FnSig %t117, i1 %t119, 9
%t121 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 7
%t122 = load i1, ptr %t121
%t123 = insertvalue %S.gen.FnSig %t120, i1 %t122, 10
%t124 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4
%t125 = load i64, ptr %t124
%t126 = insertvalue %S.gen.FnSig %t123, i64 %t125, 16
%t127 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 5
%t128 = load i64, ptr %t127
%t129 = insertvalue %S.gen.FnSig %t126, i64 %t128, 17
store %S.gen.FnSig %t129, ptr %a130
%t131 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0
%t132 = load { ptr, i64, i64 }, ptr %t131
%t133 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t132)
store { ptr, i64, i64 } { ptr @.str.2319, i64 7, 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
store { ptr, i64, i64 } %t137, ptr %a139
store { ptr, i64, i64 } { ptr @.str.2320, i64 1, i64 0 }, ptr %a140
call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140)
%t141 = load { ptr, i64, i64 }, ptr %a138
%t142 = load { ptr, i64, i64 }, ptr %a36
%t143 = call { ptr, i64, i64 } @finch.gen.mangle({ 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)
%t147 = load { ptr, i64, i64 }, ptr %a144
%t148 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 11
store { ptr, i64, i64 } %t147, ptr %t148
%t149 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 2
%t150 = getelementptr inbounds { ptr, i64, i64 }, ptr %t149, i32 0, i32 1
%t151 = load i64, ptr %t150
%t152 = icmp sgt i64 %t151, 0
br i1 %t152, label %then3675, label %endif3677
then3675:
%t153 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1
%t154 = load { ptr, i64, i64 }, ptr %t153
%t155 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 1
store { ptr, i64, i64 } %t154, ptr %a156
call void @finch_str_copy(ptr %a157, ptr %a156)
%t158 = load { ptr, i64, i64 }, ptr %a157
store { ptr, i64, i64 } %t158, ptr %t155
%t159 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2
%t160 = load { ptr, i64, i64 }, ptr %t159
%t161 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 2
store { ptr, i64, i64 } %t160, ptr %a162
call void @finch_str_copy(ptr %a163, ptr %a162)
%t164 = load { ptr, i64, i64 }, ptr %a163
store { ptr, i64, i64 } %t164, ptr %t161
%t165 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2
%t166 = load { ptr, i64, i64 }, ptr %t165
store { ptr, i64, i64 } %t166, ptr %a168
store { ptr, i64, i64 } { ptr @.str.2321, i64 1, i64 0 }, ptr %a169
call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169)
%t170 = load { ptr, i64, i64 }, ptr %a167
%t171 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1
%t172 = load { ptr, i64, i64 }, ptr %t171
store { ptr, i64, i64 } %t170, 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
%t177 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 8
store { ptr, i64, i64 } %t176, ptr %t177
%t178 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0
%t179 = load { ptr, i64, i64 }, ptr %t178
%t180 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t179)
store { ptr, i64, i64 } { ptr @.str.2322, i64 7, i64 0 }, ptr %a182
store { ptr, i64, i64 } %t180, ptr %a183
call void @finch_str_concat(ptr %a181, ptr %a182, ptr %a183)
%t184 = load { ptr, i64, i64 }, ptr %a181
store { ptr, i64, i64 } %t184, ptr %a186
store { ptr, i64, i64 } { ptr @.str.2323, i64 1, i64 0 }, ptr %a187
call void @finch_str_concat(ptr %a185, ptr %a186, ptr %a187)
%t188 = load { ptr, i64, i64 }, ptr %a185
%t189 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2
%t190 = load { ptr, i64, i64 }, ptr %t189
%t191 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t190)
store { ptr, i64, i64 } %t188, 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.2324, i64 1, i64 0 }, ptr %a198
call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198)
%t199 = load { ptr, i64, i64 }, ptr %a196
%t200 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1
%t201 = load { ptr, i64, i64 }, ptr %t200
store { ptr, i64, i64 } %t199, ptr %a203
store { ptr, i64, i64 } %t201, ptr %a204
call void @finch_str_concat(ptr %a202, ptr %a203, ptr %a204)
%t205 = load { ptr, i64, i64 }, ptr %a202
%t206 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 11
store { ptr, i64, i64 } %t205, ptr %t206
br label %endif3677
endif3677:
%t207 = load ptr, ptr %a1
%t208 = icmp eq ptr %t207, null
br i1 %t208, label %panic3678, label %ok3679
panic3678:
call void @finch_panic(ptr @.str.2325, i64 1505, ptr @.str.2326)
unreachable
ok3679:
%t209 = getelementptr inbounds %S.gen.Gen, ptr %t207, i32 0, i32 17
%t210 = load { ptr, i64, i64 }, ptr %t209
store { ptr, i64, i64 } %t210, ptr %a211
call void @finch.copy.arr_str(ptr %a212, ptr %a211)
%t213 = load { ptr, i64, i64 }, ptr %a212
store { ptr, i64, i64 } %t213, ptr %a214
%t215 = load ptr, ptr %a1
%t216 = icmp eq ptr %t215, null
br i1 %t216, label %panic3680, label %ok3681
panic3680:
call void @finch_panic(ptr @.str.2327, i64 1506, ptr @.str.2328)
unreachable
ok3681:
%t217 = getelementptr inbounds %S.gen.Gen, ptr %t215, i32 0, i32 18
%t218 = load { ptr, i64, i64 }, ptr %t217
store { ptr, i64, i64 } %t218, ptr %a219
call void @finch.copy.arr_S_ast_Type(ptr %a220, ptr %a219)
%t221 = load { ptr, i64, i64 }, ptr %a220
store { ptr, i64, i64 } %t221, ptr %a222
%t223 = load ptr, ptr %a1
%t224 = icmp eq ptr %t223, null
br i1 %t224, label %panic3682, label %ok3683
panic3682:
call void @finch_panic(ptr @.str.2329, i64 1507, ptr @.str.2330)
unreachable
ok3683:
%t225 = getelementptr inbounds %S.gen.Gen, ptr %t223, i32 0, i32 13
%t226 = load { ptr, i64, i64 }, ptr %t225
store { ptr, i64, i64 } %t226, ptr %a227
call void @finch_str_copy(ptr %a228, ptr %a227)
%t229 = load { ptr, i64, i64 }, ptr %a228
store { ptr, i64, i64 } %t229, ptr %a230
%t231 = load ptr, ptr %a1
%t232 = icmp eq ptr %t231, null
br i1 %t232, label %panic3684, label %ok3685
panic3684:
call void @finch_panic(ptr @.str.2331, i64 1508, ptr @.str.2332)
unreachable
ok3685:
%t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 19
%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
store { ptr, i64, i64 } %t237, ptr %a238
%t239 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3
%t240 = load { ptr, i64, i64 }, ptr %t239
%t241 = load ptr, ptr %a1
%t242 = icmp eq ptr %t241, null
br i1 %t242, label %panic3686, label %ok3687
panic3686:
call void @finch_panic(ptr @.str.2333, i64 1509, ptr @.str.2334)
unreachable
ok3687:
%t243 = getelementptr inbounds %S.gen.Gen, ptr %t241, i32 0, i32 17
store { ptr, i64, i64 } %t240, ptr %a244
call void @finch.copy.arr_str(ptr %a245, ptr %a244)
%t246 = load { ptr, i64, i64 }, ptr %a245
store { ptr, i64, i64 } %t246, ptr %t243
%t247 = load { ptr, i64, i64 }, ptr %a3
%t248 = load ptr, ptr %a1
%t249 = icmp eq ptr %t248, null
br i1 %t249, label %panic3688, label %ok3689
panic3688:
call void @finch_panic(ptr @.str.2335, i64 1510, ptr @.str.2336)
unreachable
ok3689:
%t250 = getelementptr inbounds %S.gen.Gen, ptr %t248, i32 0, i32 18
store { ptr, i64, i64 } %t247, ptr %a251
call void @finch.copy.arr_S_ast_Type(ptr %a252, ptr %a251)
%t253 = load { ptr, i64, i64 }, ptr %a252
store { ptr, i64, i64 } %t253, ptr %t250
%t254 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0
%t255 = load { ptr, i64, i64 }, ptr %t254
%t256 = load ptr, ptr %a1
%t257 = icmp eq ptr %t256, null
br i1 %t257, label %panic3690, label %ok3691
panic3690:
call void @finch_panic(ptr @.str.2337, i64 1511, ptr @.str.2338)
unreachable
ok3691:
%t258 = getelementptr inbounds %S.gen.Gen, ptr %t256, i32 0, i32 13
store { ptr, i64, i64 } %t255, ptr %a259
call void @finch_str_copy(ptr %a260, ptr %a259)
%t261 = load { ptr, i64, i64 }, ptr %a260
store { ptr, i64, i64 } %t261, ptr %t258
%t262 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 8
%t263 = load { ptr, i64, i64 }, ptr %t262
store { ptr, i64, i64 } { ptr @.str.2339, i64 17, i64 0 }, ptr %a265
store { ptr, i64, i64 } %t263, ptr %a266
call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266)
%t267 = load { ptr, i64, i64 }, ptr %a264
store { ptr, i64, i64 } %t267, ptr %a269
store { ptr, i64, i64 } { ptr @.str.2340, i64 1, 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, ptr %a1
%t273 = icmp eq ptr %t272, null
br i1 %t273, label %panic3692, label %ok3693
panic3692:
call void @finch_panic(ptr @.str.2341, i64 1512, ptr @.str.2342)
unreachable
ok3693:
%t274 = getelementptr inbounds %S.gen.Gen, ptr %t272, i32 0, i32 19
store { ptr, i64, i64 } %t271, ptr %t274
%t275 = load ptr, ptr %a1
%t276 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 5
%t277 = load %S.ast.Type, ptr %t276
%t278 = load %S.ast.Node, ptr %a84
%t279 = call %S.ast.Type @finch.gen.resolve(ptr %t275, %S.ast.Type %t277, %S.ast.Node %t278)
%t280 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 12
store %S.ast.Type %t279, ptr %t280
%t281 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 9
%t282 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 9
%t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1
%t284 = load i64, ptr %t283
%t285 = sub i64 %t284, 1
%t286 = load { ptr, i64, i64 }, ptr %t281
%t287 = extractvalue { ptr, i64, i64 } %t286, 1
%t288 = icmp uge i64 %t285, %t287
br i1 %t288, label %range3694, label %inrange3695
range3694:
call void @finch_panic_index(ptr @.str.2343, i64 1514, i64 %t285, i64 %t287)
unreachable
inrange3695:
%t289 = extractvalue { ptr, i64, i64 } %t286, 0
%t290 = getelementptr inbounds %S.ast.Node, ptr %t289, i64 %t285
%t291 = load %S.ast.Node, ptr %t290
store %S.ast.Node %t291, ptr %a292
call void @finch.copy.S_ast_Node(ptr %a293, ptr %a292)
%t294 = load %S.ast.Node, ptr %a293
store %S.ast.Node %t294, ptr %a295
%t296 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 9
%t297 = getelementptr inbounds { ptr, i64, i64 }, ptr %t296, i32 0, i32 1
%t298 = load i64, ptr %t297
%t299 = sub i64 %t298, 1
store i64 0, ptr %a300
br label %for.cond3696
for.cond3696:
%t301 = load i64, ptr %a300
%t302 = icmp slt i64 %t301, %t299
br i1 %t302, label %for.body3697, label %for.end3699
for.body3697:
%t303 = load ptr, ptr %a1
%t304 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 9
%t305 = load i64, ptr %a300
%t306 = load { ptr, i64, i64 }, ptr %t304
%t307 = extractvalue { ptr, i64, i64 } %t306, 1
%t308 = icmp uge i64 %t305, %t307
br i1 %t308, label %range3700, label %inrange3701
range3700:
call void @finch_panic_index(ptr @.str.2344, i64 1516, i64 %t305, i64 %t307)
unreachable
inrange3701:
%t309 = extractvalue { ptr, i64, i64 } %t306, 0
%t310 = getelementptr inbounds %S.ast.Node, ptr %t309, i64 %t305
%t311 = getelementptr inbounds %S.ast.Node, ptr %t310, i32 0, i32 5
%t312 = load %S.ast.Type, ptr %t311
%t313 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 9
%t314 = load i64, ptr %a300
%t315 = load { ptr, i64, i64 }, ptr %t313
%t316 = extractvalue { ptr, i64, i64 } %t315, 1
%t317 = icmp uge i64 %t314, %t316
br i1 %t317, label %range3702, label %inrange3703
range3702:
call void @finch_panic_index(ptr @.str.2345, i64 1516, i64 %t314, i64 %t316)
unreachable
inrange3703:
%t318 = extractvalue { ptr, i64, i64 } %t315, 0
%t319 = getelementptr inbounds %S.ast.Node, ptr %t318, i64 %t314
%t320 = load %S.ast.Node, ptr %t319
%t321 = call %S.ast.Type @finch.gen.resolve(ptr %t303, %S.ast.Type %t312, %S.ast.Node %t320)
store %S.ast.Type %t321, ptr %a322
%t323 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 13
%t324 = getelementptr inbounds { ptr, i64, i64 }, ptr %t323, i32 0, i32 1
%t325 = load %S.ast.Type, ptr %a322
store %S.ast.Type %t325, ptr %a326
call void @finch.copy.S_ast_Type(ptr %a327, ptr %a326)
%t328 = load %S.ast.Type, ptr %a327
%t329 = load i64, ptr %t324
%t330 = add i64 %t329, 1
call void @finch_arr_reserve(ptr %t323, i64 %t330, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64))
%t331 = load ptr, ptr %t323
%t332 = getelementptr inbounds %S.ast.Type, ptr %t331, i64 %t329
store %S.ast.Type %t328, ptr %t332
store i64 %t330, ptr %t324
%t333 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 14
%t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t333, i32 0, i32 1
%t335 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 9
%t336 = load i64, ptr %a300
%t337 = load { ptr, i64, i64 }, ptr %t335
%t338 = extractvalue { ptr, i64, i64 } %t337, 1
%t339 = icmp uge i64 %t336, %t338
br i1 %t339, label %range3704, label %inrange3705
range3704:
call void @finch_panic_index(ptr @.str.2346, i64 1518, i64 %t336, i64 %t338)
unreachable
inrange3705:
%t340 = extractvalue { ptr, i64, i64 } %t337, 0
%t341 = getelementptr inbounds %S.ast.Node, ptr %t340, i64 %t336
%t342 = getelementptr inbounds %S.ast.Node, ptr %t341, i32 0, i32 1
%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 = load i64, ptr %t334
%t348 = add i64 %t347, 1
call void @finch_arr_reserve(ptr %t333, i64 %t348, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t349 = load ptr, ptr %t333
%t350 = getelementptr inbounds { ptr, i64, i64 }, ptr %t349, i64 %t347
store { ptr, i64, i64 } %t346, ptr %t350
store i64 %t348, ptr %t334
%t351 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 15
%t352 = getelementptr inbounds { ptr, i64, i64 }, ptr %t351, i32 0, i32 1
%t353 = load ptr, ptr %a1
%t354 = load %S.ast.Type, ptr %a322
%t355 = call i1 @finch.gen.owning(ptr %t353, %S.ast.Type %t354)
br label %logic.from3706
logic.from3706:
br i1 %t355, label %logic.rhs3707, label %logic.end3708
logic.rhs3707:
%t356 = load ptr, ptr %a1
%t357 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 9
%t358 = load i64, ptr %a300
%t359 = load { ptr, i64, i64 }, ptr %t357
%t360 = extractvalue { ptr, i64, i64 } %t359, 1
%t361 = icmp uge i64 %t358, %t360
br i1 %t361, label %range3709, label %inrange3710
range3709:
call void @finch_panic_index(ptr @.str.2347, i64 1519, i64 %t358, i64 %t360)
unreachable
inrange3710:
%t362 = extractvalue { ptr, i64, i64 } %t359, 0
%t363 = getelementptr inbounds %S.ast.Node, ptr %t362, i64 %t358
%t364 = getelementptr inbounds %S.ast.Node, ptr %t363, i32 0, i32 1
%t365 = load { ptr, i64, i64 }, ptr %t364
%t366 = load %S.ast.Node, ptr %a295
%t367 = call i1 @finch.gen.mutates(ptr %t356, { ptr, i64, i64 } %t365, %S.ast.Node %t366)
%t368 = xor i1 %t367, true
br label %logic.rend3711
logic.rend3711:
br label %logic.end3708
logic.end3708:
%t369 = phi i1 [ false, %logic.from3706 ], [ %t368, %logic.rend3711 ]
%t370 = load i64, ptr %t352
%t371 = add i64 %t370, 1
call void @finch_arr_reserve(ptr %t351, i64 %t371, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64))
%t372 = load ptr, ptr %t351
%t373 = getelementptr inbounds i1, ptr %t372, i64 %t370
store i1 %t369, ptr %t373
store i64 %t371, ptr %t352
br label %for.step3698
for.step3698:
%t374 = load i64, ptr %a300
%t375 = add i64 %t374, 1
store i64 %t375, ptr %a300
br label %for.cond3696
for.end3699:
%t376 = load { ptr, i64, i64 }, ptr %a214
%t377 = load ptr, ptr %a1
%t378 = icmp eq ptr %t377, null
br i1 %t378, label %panic3712, label %ok3713
panic3712:
call void @finch_panic(ptr @.str.2348, i64 1521, ptr @.str.2349)
unreachable
ok3713:
%t379 = getelementptr inbounds %S.gen.Gen, ptr %t377, i32 0, i32 17
store { ptr, i64, i64 } %t376, ptr %a380
call void @finch.copy.arr_str(ptr %a381, ptr %a380)
%t382 = load { ptr, i64, i64 }, ptr %a381
store { ptr, i64, i64 } %t382, ptr %t379
%t383 = load { ptr, i64, i64 }, ptr %a222
%t384 = load ptr, ptr %a1
%t385 = icmp eq ptr %t384, null
br i1 %t385, label %panic3714, label %ok3715
panic3714:
call void @finch_panic(ptr @.str.2350, i64 1522, ptr @.str.2351)
unreachable
ok3715:
%t386 = getelementptr inbounds %S.gen.Gen, ptr %t384, i32 0, i32 18
store { ptr, i64, i64 } %t383, ptr %a387
call void @finch.copy.arr_S_ast_Type(ptr %a388, ptr %a387)
%t389 = load { ptr, i64, i64 }, ptr %a388
store { ptr, i64, i64 } %t389, ptr %t386
%t390 = load { ptr, i64, i64 }, ptr %a230
%t391 = load ptr, ptr %a1
%t392 = icmp eq ptr %t391, null
br i1 %t392, label %panic3716, label %ok3717
panic3716:
call void @finch_panic(ptr @.str.2352, i64 1523, ptr @.str.2353)
unreachable
ok3717:
%t393 = getelementptr inbounds %S.gen.Gen, ptr %t391, i32 0, i32 13
store { ptr, i64, i64 } %t390, ptr %a394
call void @finch_str_copy(ptr %a395, ptr %a394)
%t396 = load { ptr, i64, i64 }, ptr %a395
store { ptr, i64, i64 } %t396, ptr %t393
%t397 = load { ptr, i64, i64 }, ptr %a238
%t398 = load ptr, ptr %a1
%t399 = icmp eq ptr %t398, null
br i1 %t399, label %panic3718, label %ok3719
panic3718:
call void @finch_panic(ptr @.str.2354, i64 1524, ptr @.str.2355)
unreachable
ok3719:
%t400 = getelementptr inbounds %S.gen.Gen, ptr %t398, i32 0, i32 19
store { ptr, i64, i64 } %t397, ptr %a401
call void @finch_str_copy(ptr %a402, ptr %a401)
%t403 = load { ptr, i64, i64 }, ptr %a402
store { ptr, i64, i64 } %t403, ptr %t400
%t404 = load ptr, ptr %a1
%t405 = icmp eq ptr %t404, null
br i1 %t405, label %panic3720, label %ok3721
panic3720:
call void @finch_panic(ptr @.str.2356, i64 1525, ptr @.str.2357)
unreachable
ok3721:
%t406 = getelementptr inbounds %S.gen.Gen, ptr %t404, i32 0, i32 14
%t407 = getelementptr inbounds { ptr, i64, i64 }, ptr %t406, i32 0, i32 1
%t408 = load %S.gen.FnSig, ptr %a130
store %S.gen.FnSig %t408, ptr %a409
call void @finch.copy.S_gen_FnSig(ptr %a410, ptr %a409)
%t411 = load %S.gen.FnSig, ptr %a410
%t412 = load i64, ptr %t407
%t413 = add i64 %t412, 1
call void @finch_arr_reserve(ptr %t406, i64 %t413, i64 ptrtoint (ptr getelementptr (%S.gen.FnSig, ptr null, i32 1) to i64))
%t414 = load ptr, ptr %t406
%t415 = getelementptr inbounds %S.gen.FnSig, ptr %t414, i64 %t412
store %S.gen.FnSig %t411, ptr %t415
store i64 %t413, ptr %t407
%t416 = load ptr, ptr %a1
%t417 = icmp eq ptr %t416, null
br i1 %t417, label %panic3722, label %ok3723
panic3722:
call void @finch_panic(ptr @.str.2358, i64 1526, ptr @.str.2359)
unreachable
ok3723:
%t418 = getelementptr inbounds %S.gen.Gen, ptr %t416, i32 0, i32 14
%t419 = getelementptr inbounds { ptr, i64, i64 }, ptr %t418, i32 0, i32 1
%t420 = load i64, ptr %t419
%t421 = sub i64 %t420, 1
ret i64 %t421
}
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
%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
%a107 = alloca { ptr, i64, i64 }, align 16
%a108 = alloca { ptr, i64, i64 }, align 16
%a121 = alloca { ptr, i64, i64 }, align 16
%a122 = alloca { ptr, i64, i64 }, align 16
%a150 = alloca { ptr, i64, i64 }, align 16
%a151 = alloca { ptr, i64, i64 }, align 16
%a156 = alloca { ptr, i64, i64 }, align 16
%a157 = 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
%a209 = alloca { ptr, i64, i64 }, align 16
%a228 = alloca %S.gen.StructDef, align 16
%a229 = alloca %S.gen.StructDef, align 16
%a231 = alloca %S.gen.StructDef, align 16
%a236 = alloca { ptr, i64, i64 }, align 16
%a237 = alloca { ptr, i64, i64 }, align 16
%a251 = 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.2360, 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.from3724
logic.from3724:
br i1 %t11, label %logic.rhs3725, label %logic.end3726
logic.rhs3725:
%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.rend3727
logic.rend3727:
br label %logic.end3726
logic.end3726:
%t16 = phi i1 [ false, %logic.from3724 ], [ %t15, %logic.rend3727 ]
br label %logic.from3728
logic.from3728:
br i1 %t16, label %logic.rhs3729, label %logic.end3730
logic.rhs3729:
%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.rend3731
logic.rend3731:
br label %logic.end3730
logic.end3730:
%t21 = phi i1 [ false, %logic.from3728 ], [ %t20, %logic.rend3731 ]
br label %logic.from3732
logic.from3732:
br i1 %t21, label %logic.rhs3733, label %logic.end3734
logic.rhs3733:
%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.cond3735
find.cond3735:
%t29 = load i64, ptr %a28
%t30 = icmp slt i64 %t29, %t26
br i1 %t30, label %find.body3736, label %find.end3739
find.body3736:
%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.hit3737, label %find.next3738
find.hit3737:
store i64 %t29, ptr %a25
br label %find.end3739
find.next3738:
%t37 = add i64 %t29, 1
store i64 %t37, ptr %a28
br label %find.cond3735
find.end3739:
%t38 = load i64, ptr %a25
%t39 = icmp sge i64 %t38, 0
br label %logic.rend3740
logic.rend3740:
br label %logic.end3734
logic.end3734:
%t40 = phi i1 [ false, %logic.from3732 ], [ %t39, %logic.rend3740 ]
br i1 %t40, label %then3741, label %endif3743
then3741:
%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.cond3744
find.cond3744:
%t48 = load i64, ptr %a47
%t49 = icmp slt i64 %t48, %t45
br i1 %t49, label %find.body3745, label %find.end3748
find.body3745:
%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.hit3746, label %find.next3747
find.hit3746:
store i64 %t48, ptr %a44
br label %find.end3748
find.next3747:
%t56 = add i64 %t48, 1
store i64 %t56, ptr %a47
br label %find.cond3744
find.end3748:
%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 %panic3749, label %ok3750
panic3749:
call void @finch_panic(ptr @.str.2361, i64 1533, ptr @.str.2362)
unreachable
ok3750:
%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 %range3751, label %inrange3752
range3751:
call void @finch_panic_index(ptr @.str.2363, i64 1533, i64 %t62, i64 %t64)
unreachable
inrange3752:
%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 %then3753, label %endif3755
then3753:
%t70 = load %S.ast.Type, ptr %a3
%t71 = load ptr, ptr %a5
%t72 = icmp eq ptr %t71, null
br i1 %t72, label %panic3756, label %ok3757
panic3756:
call void @finch_panic(ptr @.str.2364, i64 1534, ptr @.str.2365)
unreachable
ok3757:
%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 %range3758, label %inrange3759
range3758:
call void @finch_panic_index(ptr @.str.2366, i64 1534, i64 %t74, i64 %t76)
unreachable
inrange3759:
%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
store %S.ast.Type %t82, ptr %t79
%t83 = load ptr, ptr %a5
%t84 = icmp eq ptr %t83, null
br i1 %t84, label %panic3760, label %ok3761
panic3760:
call void @finch_panic(ptr @.str.2367, i64 1535, ptr @.str.2368)
unreachable
ok3761:
%t85 = getelementptr inbounds %S.gen.Binds, ptr %t83, i32 0, i32 1
%t86 = load i64, ptr %a58
%t87 = load { ptr, i64, i64 }, ptr %t85
%t88 = extractvalue { ptr, i64, i64 } %t87, 1
%t89 = icmp uge i64 %t86, %t88
br i1 %t89, label %range3762, label %inrange3763
range3762:
call void @finch_panic_index(ptr @.str.2369, i64 1535, i64 %t86, i64 %t88)
unreachable
inrange3763:
%t90 = extractvalue { ptr, i64, i64 } %t87, 0
%t91 = getelementptr inbounds i1, ptr %t90, i64 %t86
store i1 true, ptr %t91
br label %endif3755
endif3755:
ret void
endif3743:
%t92 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0
%t93 = load { ptr, i64, i64 }, ptr %t92
store { ptr, i64, i64 } %t93, ptr %a94
store { ptr, i64, i64 } { ptr @.str.2370, i64 5, i64 0 }, ptr %a95
%t96 = call i32 @finch_str_eq(ptr %a94, ptr %a95)
%t97 = icmp ne i32 %t96, 0
br label %logic.from3764
logic.from3764:
br i1 %t97, label %logic.end3766, label %logic.rhs3765
logic.rhs3765:
%t98 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0
%t99 = load { ptr, i64, i64 }, ptr %t98
store { ptr, i64, i64 } %t99, ptr %a100
store { ptr, i64, i64 } { ptr @.str.2371, i64 3, i64 0 }, ptr %a101
%t102 = call i32 @finch_str_eq(ptr %a100, ptr %a101)
%t103 = icmp ne i32 %t102, 0
br label %logic.rend3767
logic.rend3767:
br label %logic.end3766
logic.end3766:
%t104 = phi i1 [ true, %logic.from3764 ], [ %t103, %logic.rend3767 ]
br label %logic.from3768
logic.from3768:
br i1 %t104, label %logic.end3770, label %logic.rhs3769
logic.rhs3769:
%t105 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0
%t106 = load { ptr, i64, i64 }, ptr %t105
store { ptr, i64, i64 } %t106, ptr %a107
store { ptr, i64, i64 } { ptr @.str.2372, i64 5, i64 0 }, ptr %a108
%t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108)
%t110 = icmp ne i32 %t109, 0
br label %logic.rend3771
logic.rend3771:
br label %logic.end3770
logic.end3770:
%t111 = phi i1 [ true, %logic.from3768 ], [ %t110, %logic.rend3771 ]
br label %logic.from3772
logic.from3772:
br i1 %t111, label %logic.rhs3773, label %logic.end3774
logic.rhs3773:
%t112 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1
%t114 = load i64, ptr %t113
%t115 = icmp sgt i64 %t114, 0
br label %logic.rend3775
logic.rend3775:
br label %logic.end3774
logic.end3774:
%t116 = phi i1 [ false, %logic.from3772 ], [ %t115, %logic.rend3775 ]
br label %logic.from3776
logic.from3776:
br i1 %t116, label %logic.rhs3777, label %logic.end3778
logic.rhs3777:
%t117 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0
%t118 = load { ptr, i64, i64 }, ptr %t117
%t119 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0
%t120 = load { ptr, i64, i64 }, ptr %t119
store { ptr, i64, i64 } %t118, ptr %a121
store { ptr, i64, i64 } %t120, ptr %a122
%t123 = call i32 @finch_str_eq(ptr %a121, ptr %a122)
%t124 = icmp ne i32 %t123, 0
br label %logic.rend3779
logic.rend3779:
br label %logic.end3778
logic.end3778:
%t125 = phi i1 [ false, %logic.from3776 ], [ %t124, %logic.rend3779 ]
br label %logic.from3780
logic.from3780:
br i1 %t125, label %logic.rhs3781, label %logic.end3782
logic.rhs3781:
%t126 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1
%t127 = getelementptr inbounds { ptr, i64, i64 }, ptr %t126, i32 0, i32 1
%t128 = load i64, ptr %t127
%t129 = icmp sgt i64 %t128, 0
br label %logic.rend3783
logic.rend3783:
br label %logic.end3782
logic.end3782:
%t130 = phi i1 [ false, %logic.from3780 ], [ %t129, %logic.rend3783 ]
br i1 %t130, label %then3784, label %endif3786
then3784:
%t131 = load ptr, ptr %a1
%t132 = getelementptr inbounds %S.ast.Type, ptr %a2, 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 %range3787, label %inrange3788
range3787:
call void @finch_panic_index(ptr @.str.2373, i64 1540, i64 0, i64 %t134)
unreachable
inrange3788:
%t136 = extractvalue { ptr, i64, i64 } %t133, 0
%t137 = getelementptr inbounds %S.ast.Type, ptr %t136, i64 0
%t138 = load %S.ast.Type, ptr %t137
%t139 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1
%t140 = load { ptr, i64, i64 }, ptr %t139
%t141 = extractvalue { ptr, i64, i64 } %t140, 1
%t142 = icmp uge i64 0, %t141
br i1 %t142, label %range3789, label %inrange3790
range3789:
call void @finch_panic_index(ptr @.str.2374, i64 1540, i64 0, i64 %t141)
unreachable
inrange3790:
%t143 = extractvalue { ptr, i64, i64 } %t140, 0
%t144 = getelementptr inbounds %S.ast.Type, ptr %t143, i64 0
%t145 = load %S.ast.Type, ptr %t144
%t146 = load { ptr, i64, i64 }, ptr %a4
%t147 = load ptr, ptr %a5
call void @finch.gen.bindType(ptr %t131, %S.ast.Type %t138, %S.ast.Type %t145, { ptr, i64, i64 } %t146, ptr %t147)
ret void
endif3786:
%t148 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0
%t149 = load { ptr, i64, i64 }, ptr %t148
store { ptr, i64, i64 } %t149, ptr %a150
store { ptr, i64, i64 } { ptr @.str.2375, i64 3, i64 0 }, ptr %a151
%t152 = call i32 @finch_str_eq(ptr %a150, ptr %a151)
%t153 = icmp ne i32 %t152, 0
br label %logic.from3791
logic.from3791:
br i1 %t153, label %logic.rhs3792, label %logic.end3793
logic.rhs3792:
%t154 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0
%t155 = load { ptr, i64, i64 }, ptr %t154
store { ptr, i64, i64 } %t155, ptr %a156
store { ptr, i64, i64 } { ptr @.str.2376, i64 3, i64 0 }, ptr %a157
%t158 = call i32 @finch_str_eq(ptr %a156, ptr %a157)
%t159 = icmp ne i32 %t158, 0
br label %logic.rend3794
logic.rend3794:
br label %logic.end3793
logic.end3793:
%t160 = phi i1 [ false, %logic.from3791 ], [ %t159, %logic.rend3794 ]
br i1 %t160, label %then3795, label %endif3797
then3795:
%t161 = load ptr, ptr %a1
%t162 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t163 = load { ptr, i64, i64 }, ptr %t162
%t164 = extractvalue { ptr, i64, i64 } %t163, 1
%t165 = icmp uge i64 0, %t164
br i1 %t165, label %range3798, label %inrange3799
range3798:
call void @finch_panic_index(ptr @.str.2377, i64 1544, i64 0, i64 %t164)
unreachable
inrange3799:
%t166 = extractvalue { ptr, i64, i64 } %t163, 0
%t167 = getelementptr inbounds %S.ast.Type, ptr %t166, i64 0
%t168 = load %S.ast.Type, ptr %t167
%t169 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1
%t170 = load { ptr, i64, i64 }, ptr %t169
%t171 = extractvalue { ptr, i64, i64 } %t170, 1
%t172 = icmp uge i64 0, %t171
br i1 %t172, label %range3800, label %inrange3801
range3800:
call void @finch_panic_index(ptr @.str.2378, i64 1544, i64 0, i64 %t171)
unreachable
inrange3801:
%t173 = extractvalue { ptr, i64, i64 } %t170, 0
%t174 = getelementptr inbounds %S.ast.Type, ptr %t173, i64 0
%t175 = load %S.ast.Type, ptr %t174
%t176 = load { ptr, i64, i64 }, ptr %a4
%t177 = load ptr, ptr %a5
call void @finch.gen.bindType(ptr %t161, %S.ast.Type %t168, %S.ast.Type %t175, { ptr, i64, i64 } %t176, ptr %t177)
%t178 = load ptr, ptr %a1
%t179 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t180 = load { ptr, i64, i64 }, ptr %t179
%t181 = extractvalue { ptr, i64, i64 } %t180, 1
%t182 = icmp uge i64 1, %t181
br i1 %t182, label %range3802, label %inrange3803
range3802:
call void @finch_panic_index(ptr @.str.2379, i64 1545, i64 1, i64 %t181)
unreachable
inrange3803:
%t183 = extractvalue { ptr, i64, i64 } %t180, 0
%t184 = getelementptr inbounds %S.ast.Type, ptr %t183, i64 1
%t185 = load %S.ast.Type, ptr %t184
%t186 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1
%t187 = load { ptr, i64, i64 }, ptr %t186
%t188 = extractvalue { ptr, i64, i64 } %t187, 1
%t189 = icmp uge i64 1, %t188
br i1 %t189, label %range3804, label %inrange3805
range3804:
call void @finch_panic_index(ptr @.str.2380, i64 1545, i64 1, i64 %t188)
unreachable
inrange3805:
%t190 = extractvalue { ptr, i64, i64 } %t187, 0
%t191 = getelementptr inbounds %S.ast.Type, ptr %t190, i64 1
%t192 = load %S.ast.Type, ptr %t191
%t193 = load { ptr, i64, i64 }, ptr %a4
%t194 = load ptr, ptr %a5
call void @finch.gen.bindType(ptr %t178, %S.ast.Type %t185, %S.ast.Type %t192, { ptr, i64, i64 } %t193, ptr %t194)
ret void
endif3797:
%t195 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0
%t196 = load { ptr, i64, i64 }, ptr %t195
store { ptr, i64, i64 } %t196, ptr %a197
store { ptr, i64, i64 } { ptr @.str.2381, i64 5, i64 0 }, ptr %a198
%t199 = call i32 @finch_str_eq(ptr %a197, ptr %a198)
%t200 = icmp ne i32 %t199, 0
br label %logic.from3806
logic.from3806:
br i1 %t200, label %logic.rhs3807, label %logic.end3808
logic.rhs3807:
%t201 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %t201, i32 0, i32 1
%t203 = load i64, ptr %t202
%t204 = icmp sgt i64 %t203, 0
br label %logic.rend3809
logic.rend3809:
br label %logic.end3808
logic.end3808:
%t205 = phi i1 [ false, %logic.from3806 ], [ %t204, %logic.rend3809 ]
br label %logic.from3810
logic.from3810:
br i1 %t205, label %logic.rhs3811, label %logic.end3812
logic.rhs3811:
%t206 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0
%t207 = load { ptr, i64, i64 }, ptr %t206
store { ptr, i64, i64 } %t207, ptr %a208
store { ptr, i64, i64 } { ptr @.str.2382, 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.rend3813
logic.rend3813:
br label %logic.end3812
logic.end3812:
%t212 = phi i1 [ false, %logic.from3810 ], [ %t211, %logic.rend3813 ]
br i1 %t212, label %then3814, label %endif3816
then3814:
%t213 = load ptr, ptr %a1
%t214 = icmp eq ptr %t213, null
br i1 %t214, label %panic3817, label %ok3818
panic3817:
call void @finch_panic(ptr @.str.2383, i64 1549, ptr @.str.2384)
unreachable
ok3818:
%t215 = getelementptr inbounds %S.gen.Gen, ptr %t213, i32 0, i32 15
%t216 = load ptr, ptr %a1
%t217 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 3
%t218 = load { ptr, i64, i64 }, ptr %t217
%t219 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 2
%t220 = load { ptr, i64, i64 }, ptr %t219
%t221 = call i64 @finch.gen.findStruct(ptr %t216, { ptr, i64, i64 } %t218, { ptr, i64, i64 } %t220)
%t222 = load { ptr, i64, i64 }, ptr %t215
%t223 = extractvalue { ptr, i64, i64 } %t222, 1
%t224 = icmp uge i64 %t221, %t223
br i1 %t224, label %range3819, label %inrange3820
range3819:
call void @finch_panic_index(ptr @.str.2385, i64 1549, i64 %t221, i64 %t223)
unreachable
inrange3820:
%t225 = extractvalue { ptr, i64, i64 } %t222, 0
%t226 = getelementptr inbounds %S.gen.StructDef, ptr %t225, i64 %t221
%t227 = load %S.gen.StructDef, ptr %t226
store %S.gen.StructDef %t227, ptr %a228
call void @finch.copy.S_gen_StructDef(ptr %a229, ptr %a228)
%t230 = load %S.gen.StructDef, ptr %a229
store %S.gen.StructDef %t230, ptr %a231
%t232 = getelementptr inbounds %S.gen.StructDef, ptr %a231, i32 0, i32 5
%t233 = load { ptr, i64, i64 }, ptr %t232
%t234 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t235 = load { ptr, i64, i64 }, ptr %t234
store { ptr, i64, i64 } %t233, ptr %a236
store { ptr, i64, i64 } %t235, ptr %a237
%t238 = call i32 @finch_str_eq(ptr %a236, ptr %a237)
%t239 = icmp ne i32 %t238, 0
br label %logic.from3821
logic.from3821:
br i1 %t239, label %logic.rhs3822, label %logic.end3823
logic.rhs3822:
%t240 = getelementptr inbounds %S.gen.StructDef, ptr %a231, i32 0, i32 7
%t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t240, i32 0, i32 1
%t242 = load i64, ptr %t241
%t243 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %t243, i32 0, i32 1
%t245 = load i64, ptr %t244
%t246 = icmp eq i64 %t242, %t245
br label %logic.rend3824
logic.rend3824:
br label %logic.end3823
logic.end3823:
%t247 = phi i1 [ false, %logic.from3821 ], [ %t246, %logic.rend3824 ]
br i1 %t247, label %then3825, label %endif3827
then3825:
%t248 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i32 0, i32 1
%t250 = load i64, ptr %t249
store i64 0, ptr %a251
br label %for.cond3828
for.cond3828:
%t252 = load i64, ptr %a251
%t253 = icmp slt i64 %t252, %t250
br i1 %t253, label %for.body3829, label %for.end3831
for.body3829:
%t254 = load ptr, ptr %a1
%t255 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t256 = load i64, ptr %a251
%t257 = load { ptr, i64, i64 }, ptr %t255
%t258 = extractvalue { ptr, i64, i64 } %t257, 1
%t259 = icmp uge i64 %t256, %t258
br i1 %t259, label %range3832, label %inrange3833
range3832:
call void @finch_panic_index(ptr @.str.2386, i64 1552, i64 %t256, i64 %t258)
unreachable
inrange3833:
%t260 = extractvalue { ptr, i64, i64 } %t257, 0
%t261 = getelementptr inbounds %S.ast.Type, ptr %t260, i64 %t256
%t262 = load %S.ast.Type, ptr %t261
%t263 = getelementptr inbounds %S.gen.StructDef, ptr %a231, i32 0, i32 7
%t264 = load i64, ptr %a251
%t265 = load { ptr, i64, i64 }, ptr %t263
%t266 = extractvalue { ptr, i64, i64 } %t265, 1
%t267 = icmp uge i64 %t264, %t266
br i1 %t267, label %range3834, label %inrange3835
range3834:
call void @finch_panic_index(ptr @.str.2387, i64 1552, i64 %t264, i64 %t266)
unreachable
inrange3835:
%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 = load { ptr, i64, i64 }, ptr %a4
%t272 = load ptr, ptr %a5
call void @finch.gen.bindType(ptr %t254, %S.ast.Type %t262, %S.ast.Type %t270, { ptr, i64, i64 } %t271, ptr %t272)
br label %for.step3830
for.step3830:
%t273 = load i64, ptr %a251
%t274 = add i64 %t273, 1
store i64 %t274, ptr %a251
br label %for.cond3828
for.end3831:
br label %endif3827
endif3827:
br label %endif3816
endif3816:
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
%a83 = alloca { ptr, i64, i64 }, align 16
%a84 = alloca { ptr, i64, i64 }, align 16
%a85 = 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
%a99 = alloca i64, align 16
%a107 = alloca %S.ast.Type, align 16
%a130 = alloca %S.gen.Binds, align 16
%a134 = alloca i64, align 16
%a152 = alloca { ptr, i64, i64 }, align 16
%a154 = alloca i64, align 16
%a169 = alloca %S.gen.Val, align 16
%a173 = alloca { ptr, i64, i64 }, align 16
%a174 = alloca { ptr, i64, i64 }, align 16
%a180 = alloca { ptr, i64, i64 }, align 16
%a181 = 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
%a205 = alloca { ptr, i64, i64 }, align 16
%a206 = alloca { ptr, i64, i64 }, align 16
%a207 = alloca { ptr, i64, i64 }, align 16
%a211 = alloca %S.gen.Val, align 16
%a212 = alloca %S.gen.Val, align 16
%a237 = alloca 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
%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
%a286 = alloca i64, align 16
%a297 = alloca %S.gen.FnSig, align 16
%a298 = alloca %S.gen.FnSig, align 16
%a300 = alloca %S.gen.FnSig, align 16
%a304 = alloca { ptr, i64, i64 }, align 16
%a306 = alloca 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
%a352 = alloca %S.gen.Val, align 16
%a364 = 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
%a372 = 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 = load ptr, ptr %a1
%t7 = icmp eq ptr %t6, null
br i1 %t7, label %panic3836, label %ok3837
panic3836:
call void @finch_panic(ptr @.str.2388, i64 1560, ptr @.str.2389)
unreachable
ok3837:
%t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 16
%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 %range3838, label %inrange3839
range3838:
call void @finch_panic_index(ptr @.str.2390, i64 1560, i64 %t9, i64 %t11)
unreachable
inrange3839:
%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 %panic3840, label %ok3841
panic3840:
call void @finch_panic(ptr @.str.2391, i64 1561, ptr @.str.2392)
unreachable
ok3841:
%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 %range3842, label %inrange3843
range3842:
call void @finch_panic_index(ptr @.str.2393, i64 1561, i64 %t24, i64 %t26)
unreachable
inrange3843:
%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 %range3844, label %inrange3845
range3844:
call void @finch_panic_index(ptr @.str.2394, i64 1561, i64 %t32, i64 %t34)
unreachable
inrange3845:
%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 %then3846, label %endif3848
then3846:
%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 %then3849, label %endif3851
then3849:
%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.2395, 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)
%t82 = load { ptr, i64, i64 }, ptr %a79
store { ptr, i64, i64 } %t82, ptr %a84
store { ptr, i64, i64 } { ptr @.str.2396, i64 27, i64 0 }, ptr %a85
call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85)
%t86 = load { ptr, i64, i64 }, ptr %a83
%t87 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5
%t88 = getelementptr inbounds %S.ast.Type, ptr %t87, i32 0, i32 1
%t89 = getelementptr inbounds { ptr, i64, i64 }, ptr %t88, i32 0, i32 1
%t90 = load i64, ptr %t89
call void @finch_str_from_int(ptr %a91, i64 %t90)
%t92 = load { ptr, i64, i64 }, ptr %a91
store { ptr, i64, i64 } %t86, ptr %a94
store { ptr, i64, i64 } %t92, ptr %a95
call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95)
%t96 = load { ptr, i64, i64 }, ptr %a93
call void @finch.gen.fail(ptr %t67, %S.ast.Node %t68, { ptr, i64, i64 } %t96)
br label %endif3851
endif3851:
%t97 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5
%t98 = getelementptr inbounds %S.ast.Type, ptr %t97, i32 0, i32 1
store i64 0, ptr %a99
br label %each.cond3852
each.cond3852:
%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.body3853, label %each.end3855
each.body3853:
%t104 = load ptr, ptr %t98
%t105 = getelementptr inbounds %S.ast.Type, ptr %t104, i64 %t102
%t106 = load %S.ast.Type, ptr %t105
store %S.ast.Type %t106, ptr %a107
%t108 = getelementptr inbounds { ptr, i64, i64 }, ptr %a53, i32 0, i32 1
%t109 = load ptr, ptr %a1
%t110 = load %S.ast.Type, ptr %a107
%t111 = load %S.ast.Node, ptr %a2
%t112 = call %S.ast.Type @finch.gen.resolve(ptr %t109, %S.ast.Type %t110, %S.ast.Node %t111)
%t113 = load i64, ptr %t108
%t114 = add i64 %t113, 1
call void @finch_arr_reserve(ptr %a53, i64 %t114, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64))
%t115 = load ptr, ptr %a53
%t116 = getelementptr inbounds %S.ast.Type, ptr %t115, i64 %t113
store %S.ast.Type %t112, ptr %t116
store i64 %t114, ptr %t108
br label %each.step3854
each.step3854:
%t117 = load i64, ptr %a99
%t118 = add i64 %t117, 1
store i64 %t118, ptr %a99
br label %each.cond3852
each.end3855:
%t119 = load ptr, ptr %a1
%t120 = load ptr, ptr %a1
%t121 = load i64, ptr %a3
%t122 = load { ptr, i64, i64 }, ptr %a53
%t123 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2397, i64 4, i64 0 })
%t124 = load %S.ast.Node, ptr %a2
%t125 = call i64 @finch.gen.instFn(ptr %t120, i64 %t121, { ptr, i64, i64 } %t122, %S.ast.Type %t123, %S.ast.Node %t124)
%t126 = load %S.ast.Node, ptr %a2
%t127 = load i64, ptr %a4
%t128 = load { ptr, i64, i64 }, ptr %a5
%t129 = call %S.gen.Val @finch.gen.callFn(ptr %t119, i64 %t125, %S.ast.Node %t126, i64 %t127, { ptr, i64, i64 } %t128, { ptr, i64, i64 } { ptr @.str.2398, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.2399, i64 0, i64 0 })
ret %S.gen.Val %t129
endif3848:
store %S.gen.Binds zeroinitializer, ptr %a130
%t131 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3
%t132 = getelementptr inbounds { ptr, i64, i64 }, ptr %t131, i32 0, i32 1
%t133 = load i64, ptr %t132
store i64 0, ptr %a134
br label %for.cond3856
for.cond3856:
%t135 = load i64, ptr %a134
%t136 = icmp slt i64 %t135, %t133
br i1 %t136, label %for.body3857, label %for.end3859
for.body3857:
%t137 = getelementptr inbounds %S.gen.Binds, ptr %a130, i32 0, i32 0
%t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1
%t139 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2400, i64 4, i64 0 })
%t140 = load i64, ptr %t138
%t141 = add i64 %t140, 1
call void @finch_arr_reserve(ptr %t137, i64 %t141, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64))
%t142 = load ptr, ptr %t137
%t143 = getelementptr inbounds %S.ast.Type, ptr %t142, i64 %t140
store %S.ast.Type %t139, ptr %t143
store i64 %t141, ptr %t138
%t144 = getelementptr inbounds %S.gen.Binds, ptr %a130, i32 0, i32 1
%t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1
%t146 = load i64, ptr %t145
%t147 = add i64 %t146, 1
call void @finch_arr_reserve(ptr %t144, i64 %t147, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64))
%t148 = load ptr, ptr %t144
%t149 = getelementptr inbounds i1, ptr %t148, i64 %t146
store i1 false, ptr %t149
store i64 %t147, ptr %t145
br label %for.step3858
for.step3858:
%t150 = load i64, ptr %a134
%t151 = add i64 %t150, 1
store i64 %t151, ptr %a134
br label %for.cond3856
for.end3859:
store { ptr, i64, i64 } zeroinitializer, ptr %a152
%t153 = load i64, ptr %a47
store i64 0, ptr %a154
br label %for.cond3860
for.cond3860:
%t155 = load i64, ptr %a154
%t156 = icmp slt i64 %t155, %t153
br i1 %t156, label %for.body3861, label %for.end3863
for.body3861:
%t157 = load ptr, ptr %a1
%t158 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t159 = load i64, ptr %a4
%t160 = load i64, ptr %a154
%t161 = add i64 %t159, %t160
%t162 = load { ptr, i64, i64 }, ptr %t158
%t163 = extractvalue { ptr, i64, i64 } %t162, 1
%t164 = icmp uge i64 %t161, %t163
br i1 %t164, label %range3864, label %inrange3865
range3864:
call void @finch_panic_index(ptr @.str.2401, i64 1581, i64 %t161, i64 %t163)
unreachable
inrange3865:
%t165 = extractvalue { ptr, i64, i64 } %t162, 0
%t166 = getelementptr inbounds %S.ast.Node, ptr %t165, i64 %t161
%t167 = load %S.ast.Node, ptr %t166
%t168 = call %S.gen.Val @finch.gen.expr(ptr %t157, %S.ast.Node %t167)
store %S.gen.Val %t168, ptr %a169
%t170 = getelementptr inbounds %S.gen.Val, ptr %a169, i32 0, i32 1
%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.2402, i64 4, i64 0 }, ptr %a174
%t175 = call i32 @finch_str_eq(ptr %a173, ptr %a174)
%t176 = icmp ne i32 %t175, 0
br label %logic.from3866
logic.from3866:
br i1 %t176, label %logic.end3868, label %logic.rhs3867
logic.rhs3867:
%t177 = getelementptr inbounds %S.gen.Val, ptr %a169, i32 0, i32 1
%t178 = getelementptr inbounds %S.ast.Type, ptr %t177, i32 0, i32 0
%t179 = load { ptr, i64, i64 }, ptr %t178
store { ptr, i64, i64 } %t179, ptr %a180
store { ptr, i64, i64 } { ptr @.str.2403, i64 4, i64 0 }, ptr %a181
%t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181)
%t183 = icmp ne i32 %t182, 0
br label %logic.rend3869
logic.rend3869:
br label %logic.end3868
logic.end3868:
%t184 = phi i1 [ true, %logic.from3866 ], [ %t183, %logic.rend3869 ]
br i1 %t184, label %then3870, label %endif3872
then3870:
%t185 = load ptr, ptr %a1
%t186 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t187 = load i64, ptr %a4
%t188 = load i64, ptr %a154
%t189 = add i64 %t187, %t188
%t190 = load { ptr, i64, i64 }, ptr %t186
%t191 = extractvalue { ptr, i64, i64 } %t190, 1
%t192 = icmp uge i64 %t189, %t191
br i1 %t192, label %range3873, label %inrange3874
range3873:
call void @finch_panic_index(ptr @.str.2404, i64 1583, i64 %t189, i64 %t191)
unreachable
inrange3874:
%t193 = extractvalue { ptr, i64, i64 } %t190, 0
%t194 = getelementptr inbounds %S.ast.Node, ptr %t193, i64 %t189
%t195 = load %S.ast.Node, ptr %t194
%t196 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3
%t197 = getelementptr inbounds { ptr, i64, i64 }, ptr %t196, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.2406, i64 2, i64 0 }, ptr %a198
call void @finch_str_join(ptr %a199, ptr %t196, ptr %a198)
%t200 = load { ptr, i64, i64 }, ptr %a199
store { ptr, i64, i64 } { ptr @.str.2405, i64 29, i64 0 }, ptr %a202
store { ptr, i64, i64 } %t200, ptr %a203
call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203)
%t204 = load { ptr, i64, i64 }, ptr %a201
store { ptr, i64, i64 } %t204, ptr %a206
store { ptr, i64, i64 } { ptr @.str.2407, i64 5, i64 0 }, ptr %a207
call void @finch_str_concat(ptr %a205, ptr %a206, ptr %a207)
%t208 = load { ptr, i64, i64 }, ptr %a205
call void @finch.gen.fail(ptr %t185, %S.ast.Node %t195, { ptr, i64, i64 } %t208)
br label %endif3872
endif3872:
%t209 = getelementptr inbounds { ptr, i64, i64 }, ptr %a152, i32 0, i32 1
%t210 = load %S.gen.Val, ptr %a169
store %S.gen.Val %t210, ptr %a211
call void @finch.copy.S_gen_Val(ptr %a212, ptr %a211)
%t213 = load %S.gen.Val, ptr %a212
%t214 = load i64, ptr %t209
%t215 = add i64 %t214, 1
call void @finch_arr_reserve(ptr %a152, i64 %t215, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64))
%t216 = load ptr, ptr %a152
%t217 = getelementptr inbounds %S.gen.Val, ptr %t216, i64 %t214
store %S.gen.Val %t213, ptr %t217
store i64 %t215, ptr %t209
%t218 = load ptr, ptr %a1
%t219 = getelementptr inbounds %S.ast.Node, ptr %a42, i32 0, i32 9
%t220 = load i64, ptr %a154
%t221 = load { ptr, i64, i64 }, ptr %t219
%t222 = extractvalue { ptr, i64, i64 } %t221, 1
%t223 = icmp uge i64 %t220, %t222
br i1 %t223, label %range3875, label %inrange3876
range3875:
call void @finch_panic_index(ptr @.str.2408, i64 1586, i64 %t220, i64 %t222)
unreachable
inrange3876:
%t224 = extractvalue { ptr, i64, i64 } %t221, 0
%t225 = getelementptr inbounds %S.ast.Node, ptr %t224, i64 %t220
%t226 = getelementptr inbounds %S.ast.Node, ptr %t225, i32 0, i32 5
%t227 = load %S.ast.Type, ptr %t226
%t228 = getelementptr inbounds %S.gen.Val, ptr %a169, i32 0, i32 1
%t229 = load %S.ast.Type, ptr %t228
%t230 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3
%t231 = load { ptr, i64, i64 }, ptr %t230
call void @finch.gen.bindType(ptr %t218, %S.ast.Type %t227, %S.ast.Type %t229, { ptr, i64, i64 } %t231, ptr %a130)
br label %for.step3862
for.step3862:
%t232 = load i64, ptr %a154
%t233 = add i64 %t232, 1
store i64 %t233, ptr %a154
br label %for.cond3860
for.end3863:
%t234 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3
%t235 = getelementptr inbounds { ptr, i64, i64 }, ptr %t234, i32 0, i32 1
%t236 = load i64, ptr %t235
store i64 0, ptr %a237
br label %for.cond3877
for.cond3877:
%t238 = load i64, ptr %a237
%t239 = icmp slt i64 %t238, %t236
br i1 %t239, label %for.body3878, label %for.end3880
for.body3878:
%t240 = getelementptr inbounds %S.gen.Binds, ptr %a130, i32 0, i32 1
%t241 = load i64, ptr %a237
%t242 = load { ptr, i64, i64 }, ptr %t240
%t243 = extractvalue { ptr, i64, i64 } %t242, 1
%t244 = icmp uge i64 %t241, %t243
br i1 %t244, label %range3881, label %inrange3882
range3881:
call void @finch_panic_index(ptr @.str.2409, i64 1589, i64 %t241, i64 %t243)
unreachable
inrange3882:
%t245 = extractvalue { ptr, i64, i64 } %t242, 0
%t246 = getelementptr inbounds i1, ptr %t245, i64 %t241
%t247 = load i1, ptr %t246
%t248 = xor i1 %t247, true
br i1 %t248, label %then3883, label %endif3885
then3883:
%t249 = load ptr, ptr %a1
%t250 = load %S.ast.Node, ptr %a2
%t251 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3
%t252 = load i64, ptr %a237
%t253 = load { ptr, i64, i64 }, ptr %t251
%t254 = extractvalue { ptr, i64, i64 } %t253, 1
%t255 = icmp uge i64 %t252, %t254
br i1 %t255, label %range3886, label %inrange3887
range3886:
call void @finch_panic_index(ptr @.str.2411, i64 1590, i64 %t252, i64 %t254)
unreachable
inrange3887:
%t256 = extractvalue { ptr, i64, i64 } %t253, 0
%t257 = getelementptr inbounds { ptr, i64, i64 }, ptr %t256, i64 %t252
%t258 = load { ptr, i64, i64 }, ptr %t257
store { ptr, i64, i64 } { ptr @.str.2410, i64 16, i64 0 }, ptr %a260
store { ptr, i64, i64 } %t258, ptr %a261
call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261)
%t262 = load { ptr, i64, i64 }, ptr %a259
store { ptr, i64, i64 } %t262, ptr %a264
store { ptr, i64, i64 } { ptr @.str.2412, i64 24, i64 0 }, ptr %a265
call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265)
%t266 = load { ptr, i64, i64 }, ptr %a263
%t267 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1
%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)
%t272 = load { ptr, i64, i64 }, ptr %a269
store { ptr, i64, i64 } %t272, ptr %a274
store { ptr, i64, i64 } { ptr @.str.2413, i64 10, i64 0 }, ptr %a275
call void @finch_str_concat(ptr %a273, ptr %a274, ptr %a275)
%t276 = load { ptr, i64, i64 }, ptr %a273
call void @finch.gen.fail(ptr %t249, %S.ast.Node %t250, { ptr, i64, i64 } %t276)
br label %endif3885
endif3885:
br label %for.step3879
for.step3879:
%t277 = load i64, ptr %a237
%t278 = add i64 %t277, 1
store i64 %t278, ptr %a237
br label %for.cond3877
for.end3880:
%t279 = load ptr, ptr %a1
%t280 = load i64, ptr %a3
%t281 = getelementptr inbounds %S.gen.Binds, ptr %a130, i32 0, i32 0
%t282 = load { ptr, i64, i64 }, ptr %t281
%t283 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2414, i64 4, i64 0 })
%t284 = load %S.ast.Node, ptr %a2
%t285 = call i64 @finch.gen.instFn(ptr %t279, i64 %t280, { ptr, i64, i64 } %t282, %S.ast.Type %t283, %S.ast.Node %t284)
store i64 %t285, ptr %a286
%t287 = load ptr, ptr %a1
%t288 = icmp eq ptr %t287, null
br i1 %t288, label %panic3888, label %ok3889
panic3888:
call void @finch_panic(ptr @.str.2415, i64 1594, ptr @.str.2416)
unreachable
ok3889:
%t289 = getelementptr inbounds %S.gen.Gen, ptr %t287, i32 0, i32 14
%t290 = load i64, ptr %a286
%t291 = load { ptr, i64, i64 }, ptr %t289
%t292 = extractvalue { ptr, i64, i64 } %t291, 1
%t293 = icmp uge i64 %t290, %t292
br i1 %t293, label %range3890, label %inrange3891
range3890:
call void @finch_panic_index(ptr @.str.2417, i64 1594, i64 %t290, i64 %t292)
unreachable
inrange3891:
%t294 = extractvalue { ptr, i64, i64 } %t291, 0
%t295 = getelementptr inbounds %S.gen.FnSig, ptr %t294, i64 %t290
%t296 = load %S.gen.FnSig, ptr %t295
store %S.gen.FnSig %t296, ptr %a297
call void @finch.copy.S_gen_FnSig(ptr %a298, ptr %a297)
%t299 = load %S.gen.FnSig, ptr %a298
store %S.gen.FnSig %t299, ptr %a300
%t301 = load ptr, ptr %a1
%t302 = load %S.ast.Node, ptr %a2
%t303 = load %S.gen.FnSig, ptr %a300
call void @finch.gen.noteCall(ptr %t301, %S.ast.Node %t302, %S.gen.FnSig %t303)
store { ptr, i64, i64 } zeroinitializer, ptr %a304
%t305 = load i64, ptr %a47
store i64 0, ptr %a306
br label %for.cond3892
for.cond3892:
%t307 = load i64, ptr %a306
%t308 = icmp slt i64 %t307, %t305
br i1 %t308, label %for.body3893, label %for.end3895
for.body3893:
%t309 = load ptr, ptr %a1
%t310 = load i64, ptr %a306
%t311 = load { ptr, i64, i64 }, ptr %a152
%t312 = extractvalue { ptr, i64, i64 } %t311, 1
%t313 = icmp uge i64 %t310, %t312
br i1 %t313, label %range3896, label %inrange3897
range3896:
call void @finch_panic_index(ptr @.str.2418, i64 1598, i64 %t310, i64 %t312)
unreachable
inrange3897:
%t314 = extractvalue { ptr, i64, i64 } %t311, 0
%t315 = getelementptr inbounds %S.gen.Val, ptr %t314, i64 %t310
%t316 = load %S.gen.Val, ptr %t315
%t317 = getelementptr inbounds %S.gen.FnSig, ptr %a300, i32 0, i32 13
%t318 = load i64, ptr %a306
%t319 = load { ptr, i64, i64 }, ptr %t317
%t320 = extractvalue { ptr, i64, i64 } %t319, 1
%t321 = icmp uge i64 %t318, %t320
br i1 %t321, label %range3898, label %inrange3899
range3898:
call void @finch_panic_index(ptr @.str.2419, i64 1598, i64 %t318, i64 %t320)
unreachable
inrange3899:
%t322 = extractvalue { ptr, i64, i64 } %t319, 0
%t323 = getelementptr inbounds %S.ast.Type, ptr %t322, i64 %t318
%t324 = load %S.ast.Type, ptr %t323
%t325 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t326 = load i64, ptr %a4
%t327 = load i64, ptr %a306
%t328 = add i64 %t326, %t327
%t329 = load { ptr, i64, i64 }, ptr %t325
%t330 = extractvalue { ptr, i64, i64 } %t329, 1
%t331 = icmp uge i64 %t328, %t330
br i1 %t331, label %range3900, label %inrange3901
range3900:
call void @finch_panic_index(ptr @.str.2420, i64 1598, i64 %t328, i64 %t330)
unreachable
inrange3901:
%t332 = extractvalue { ptr, i64, i64 } %t329, 0
%t333 = getelementptr inbounds %S.ast.Node, ptr %t332, i64 %t328
%t334 = load %S.ast.Node, ptr %t333
%t335 = getelementptr inbounds %S.gen.FnSig, ptr %a300, i32 0, i32 14
%t336 = load i64, ptr %a306
%t337 = load { ptr, i64, i64 }, ptr %t335
%t338 = extractvalue { ptr, i64, i64 } %t337, 1
%t339 = icmp uge i64 %t336, %t338
br i1 %t339, label %range3902, label %inrange3903
range3902:
call void @finch_panic_index(ptr @.str.2422, i64 1598, i64 %t336, i64 %t338)
unreachable
inrange3903:
%t340 = extractvalue { ptr, i64, i64 } %t337, 0
%t341 = getelementptr inbounds { ptr, i64, i64 }, ptr %t340, i64 %t336
%t342 = load { ptr, i64, i64 }, ptr %t341
store { ptr, i64, i64 } { ptr @.str.2421, i64 10, 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.2423, i64 1, i64 0 }, ptr %a349
call void @finch_str_concat(ptr %a347, ptr %a348, ptr %a349)
%t350 = load { ptr, i64, i64 }, ptr %a347
%t351 = call %S.gen.Val @finch.gen.coerce(ptr %t309, %S.gen.Val %t316, %S.ast.Type %t324, %S.ast.Node %t334, { ptr, i64, i64 } %t350)
store %S.gen.Val %t351, ptr %a352
%t353 = getelementptr inbounds { ptr, i64, i64 }, ptr %a304, i32 0, i32 1
%t354 = load ptr, ptr %a1
%t355 = getelementptr inbounds %S.gen.FnSig, ptr %a300, i32 0, i32 13
%t356 = load i64, ptr %a306
%t357 = load { ptr, i64, i64 }, ptr %t355
%t358 = extractvalue { ptr, i64, i64 } %t357, 1
%t359 = icmp uge i64 %t356, %t358
br i1 %t359, label %range3904, label %inrange3905
range3904:
call void @finch_panic_index(ptr @.str.2424, i64 1599, i64 %t356, i64 %t358)
unreachable
inrange3905:
%t360 = extractvalue { ptr, i64, i64 } %t357, 0
%t361 = getelementptr inbounds %S.ast.Type, ptr %t360, i64 %t356
%t362 = load %S.ast.Type, ptr %t361
%t363 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t354, %S.ast.Type %t362)
store { ptr, i64, i64 } %t363, ptr %a365
store { ptr, i64, i64 } { ptr @.str.2425, i64 1, i64 0 }, ptr %a366
call void @finch_str_concat(ptr %a364, ptr %a365, ptr %a366)
%t367 = load { ptr, i64, i64 }, ptr %a364
%t368 = getelementptr inbounds %S.gen.Val, ptr %a352, i32 0, i32 0
%t369 = load { ptr, i64, i64 }, ptr %t368
store { ptr, i64, i64 } %t367, ptr %a371
store { ptr, i64, i64 } %t369, ptr %a372
call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372)
%t373 = load { ptr, i64, i64 }, ptr %a370
%t374 = load i64, ptr %t353
%t375 = add i64 %t374, 1
call void @finch_arr_reserve(ptr %a304, i64 %t375, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t376 = load ptr, ptr %a304
%t377 = getelementptr inbounds { ptr, i64, i64 }, ptr %t376, i64 %t374
store { ptr, i64, i64 } %t373, ptr %t377
store i64 %t375, ptr %t353
br label %for.step3894
for.step3894:
%t378 = load i64, ptr %a306
%t379 = add i64 %t378, 1
store i64 %t379, ptr %a306
br label %for.cond3892
for.end3895:
%t380 = load ptr, ptr %a1
%t381 = load %S.gen.FnSig, ptr %a300
%t382 = load %S.ast.Node, ptr %a2
%t383 = load { ptr, i64, i64 }, ptr %a304
%t384 = load { ptr, i64, i64 }, ptr %a5
%t385 = call %S.gen.Val @finch.gen.emitCall(ptr %t380, %S.gen.FnSig %t381, %S.ast.Node %t382, { ptr, i64, i64 } %t383, { ptr, i64, i64 } %t384)
ret %S.gen.Val %t385
}
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.cond3914
n.cond3914:
%t6 = load i64, ptr %a5
%t7 = icmp slt i64 %t6, %t4
br i1 %t7, label %n.body3915, label %n.end3916
n.body3915:
%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.cond3914
n.end3916:
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
%a89 = alloca { ptr, i64, i64 }, align 16
%a90 = alloca { ptr, i64, i64 }, align 16
%a91 = alloca { ptr, i64, i64 }, align 16
%a110 = alloca { ptr, i64, i64 }, align 16
%a111 = alloca { ptr, i64, i64 }, align 16
%a129 = alloca %S.ast.Type, align 16
%a130 = alloca %S.ast.Type, 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
%a200 = alloca { ptr, i64, i64 }, align 16
%a201 = alloca { ptr, i64, i64 }, align 16
%a202 = alloca { ptr, i64, i64 }, align 16
%a220 = alloca { ptr, i64, i64 }, align 16
%a221 = 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
%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
%a296 = alloca { ptr, i64, i64 }, align 16
%a297 = alloca { ptr, i64, i64 }, align 16
%a298 = 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 %panic3906, label %ok3907
panic3906:
call void @finch_panic(ptr @.str.2426, i64 1607, ptr @.str.2427)
unreachable
ok3907:
%t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 24
%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 %panic3908, label %ok3909
panic3908:
call void @finch_panic(ptr @.str.2428, i64 1607, ptr @.str.2429)
unreachable
ok3909:
%t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 15
%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 %range3910, label %inrange3911
range3910:
call void @finch_panic_index(ptr @.str.2430, i64 1607, i64 %t10, i64 %t12)
unreachable
inrange3911:
%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.missing3912, label %map.found3913
map.missing3912:
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.2431, i64 1607, ptr %a21)
unreachable
map.found3913:
%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 %panic3917, label %ok3918
panic3917:
call void @finch_panic(ptr @.str.2432, i64 1608, ptr @.str.2433)
unreachable
ok3918:
%t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 15
%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 %range3919, label %inrange3920
range3919:
call void @finch_panic_index(ptr @.str.2434, i64 1608, i64 %t35, i64 %t37)
unreachable
inrange3920:
%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.cond3921
each.cond3921:
%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.body3922, label %each.end3924
each.body3922:
%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 %then3925, label %endif3927
then3925:
br label %each.step3923
endif3927:
%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.2435, 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 %then3928, label %endif3930
then3928:
%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 %endif3930
endif3930:
%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 %then3931, label %endif3933
then3931:
%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.2436, i64 1, 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.2437, i64 6, i64 0 }, ptr %a91
call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91)
%t92 = load { ptr, i64, i64 }, ptr %a89
%t93 = load i64, ptr %t78
%t94 = add i64 %t93, 1
call void @finch_arr_reserve(ptr %a43, i64 %t94, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t95 = load ptr, ptr %a43
%t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i64 %t93
store { ptr, i64, i64 } %t92, ptr %t96
store i64 %t94, ptr %t78
br label %endif3933
endif3933:
%t97 = load ptr, ptr %a1
%t98 = icmp eq ptr %t97, null
br i1 %t98, label %panic3934, label %ok3935
panic3934:
call void @finch_panic(ptr @.str.2438, i64 1622, ptr @.str.2439)
unreachable
ok3935:
%t99 = getelementptr inbounds %S.gen.Gen, ptr %t97, i32 0, i32 15
%t100 = load i64, ptr %a2
%t101 = load { ptr, i64, i64 }, ptr %t99
%t102 = extractvalue { ptr, i64, i64 } %t101, 1
%t103 = icmp uge i64 %t100, %t102
br i1 %t103, label %range3936, label %inrange3937
range3936:
call void @finch_panic_index(ptr @.str.2440, i64 1622, i64 %t100, i64 %t102)
unreachable
inrange3937:
%t104 = extractvalue { ptr, i64, i64 } %t101, 0
%t105 = getelementptr inbounds %S.gen.StructDef, ptr %t104, i64 %t100
%t106 = getelementptr inbounds %S.gen.StructDef, ptr %t105, i32 0, i32 11
%t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t106, i32 0, i32 1
%t108 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 0
%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 = load i64, ptr %t107
%t114 = add i64 %t113, 1
call void @finch_arr_reserve(ptr %t106, i64 %t114, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t115 = load ptr, ptr %t106
%t116 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 %t113
store { ptr, i64, i64 } %t112, ptr %t116
store i64 %t114, ptr %t107
%t117 = load ptr, ptr %a1
%t118 = icmp eq ptr %t117, null
br i1 %t118, label %panic3938, label %ok3939
panic3938:
call void @finch_panic(ptr @.str.2441, i64 1623, ptr @.str.2442)
unreachable
ok3939:
%t119 = getelementptr inbounds %S.gen.Gen, ptr %t117, i32 0, i32 15
%t120 = load i64, ptr %a2
%t121 = load { ptr, i64, i64 }, ptr %t119
%t122 = extractvalue { ptr, i64, i64 } %t121, 1
%t123 = icmp uge i64 %t120, %t122
br i1 %t123, label %range3940, label %inrange3941
range3940:
call void @finch_panic_index(ptr @.str.2443, i64 1623, i64 %t120, i64 %t122)
unreachable
inrange3941:
%t124 = extractvalue { ptr, i64, i64 } %t121, 0
%t125 = getelementptr inbounds %S.gen.StructDef, ptr %t124, i64 %t120
%t126 = getelementptr inbounds %S.gen.StructDef, ptr %t125, i32 0, i32 12
%t127 = getelementptr inbounds { ptr, i64, i64 }, ptr %t126, i32 0, i32 1
%t128 = load %S.ast.Type, ptr %a60
store %S.ast.Type %t128, ptr %a129
call void @finch.copy.S_ast_Type(ptr %a130, ptr %a129)
%t131 = load %S.ast.Type, ptr %a130
%t132 = load i64, ptr %t127
%t133 = add i64 %t132, 1
call void @finch_arr_reserve(ptr %t126, i64 %t133, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64))
%t134 = load ptr, ptr %t126
%t135 = getelementptr inbounds %S.ast.Type, ptr %t134, i64 %t132
store %S.ast.Type %t131, ptr %t135
store i64 %t133, ptr %t127
%t136 = load ptr, ptr %a1
%t137 = icmp eq ptr %t136, null
br i1 %t137, label %panic3942, label %ok3943
panic3942:
call void @finch_panic(ptr @.str.2444, i64 1624, ptr @.str.2445)
unreachable
ok3943:
%t138 = getelementptr inbounds %S.gen.Gen, ptr %t136, i32 0, i32 15
%t139 = load i64, ptr %a2
%t140 = load { ptr, i64, i64 }, ptr %t138
%t141 = extractvalue { ptr, i64, i64 } %t140, 1
%t142 = icmp uge i64 %t139, %t141
br i1 %t142, label %range3944, label %inrange3945
range3944:
call void @finch_panic_index(ptr @.str.2446, i64 1624, i64 %t139, i64 %t141)
unreachable
inrange3945:
%t143 = extractvalue { ptr, i64, i64 } %t140, 0
%t144 = getelementptr inbounds %S.gen.StructDef, ptr %t143, i64 %t139
%t145 = getelementptr inbounds %S.gen.StructDef, ptr %t144, i32 0, i32 3
%t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i32 0, i32 1
%t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1
%t148 = load i64, ptr %t147
%t149 = load i64, ptr %t146
%t150 = add i64 %t149, 1
call void @finch_arr_reserve(ptr %t145, i64 %t150, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64))
%t151 = load ptr, ptr %t145
%t152 = getelementptr inbounds i64, ptr %t151, i64 %t149
store i64 %t148, ptr %t152
store i64 %t150, ptr %t146
%t153 = load ptr, ptr %a1
%t154 = icmp eq ptr %t153, null
br i1 %t154, label %panic3946, label %ok3947
panic3946:
call void @finch_panic(ptr @.str.2447, i64 1625, ptr @.str.2448)
unreachable
ok3947:
%t155 = getelementptr inbounds %S.gen.Gen, ptr %t153, i32 0, i32 15
%t156 = load i64, ptr %a2
%t157 = load { ptr, i64, i64 }, ptr %t155
%t158 = extractvalue { ptr, i64, i64 } %t157, 1
%t159 = icmp uge i64 %t156, %t158
br i1 %t159, label %range3948, label %inrange3949
range3948:
call void @finch_panic_index(ptr @.str.2449, i64 1625, i64 %t156, i64 %t158)
unreachable
inrange3949:
%t160 = extractvalue { ptr, i64, i64 } %t157, 0
%t161 = getelementptr inbounds %S.gen.StructDef, ptr %t160, i64 %t156
%t162 = getelementptr inbounds %S.gen.StructDef, ptr %t161, i32 0, i32 4
%t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i32 0, i32 1
%t164 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2
%t165 = load i64, ptr %t164
%t166 = load i64, ptr %t163
%t167 = add i64 %t166, 1
call void @finch_arr_reserve(ptr %t162, i64 %t167, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64))
%t168 = load ptr, ptr %t162
%t169 = getelementptr inbounds i64, ptr %t168, i64 %t166
store i64 %t165, ptr %t169
store i64 %t167, ptr %t163
%t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1
%t171 = load ptr, ptr %a1
%t172 = load %S.ast.Type, ptr %a60
%t173 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t171, %S.ast.Type %t172)
%t174 = load i64, ptr %t170
%t175 = add i64 %t174, 1
call void @finch_arr_reserve(ptr %a43, i64 %t175, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t176 = load ptr, ptr %a43
%t177 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 %t174
store { ptr, i64, i64 } %t173, ptr %t177
store i64 %t175, ptr %t170
%t178 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2
%t179 = load i64, ptr %t178
%t180 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 3
%t181 = load i64, ptr %t180
%t182 = add i64 %t179, %t181
store i64 %t182, ptr %a42
br label %each.step3923
each.step3923:
%t183 = load i64, ptr %a45
%t184 = add i64 %t183, 1
store i64 %t184, ptr %a45
br label %each.cond3921
each.end3924:
%t185 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2
%t186 = load i64, ptr %t185
%t187 = load i64, ptr %a42
%t188 = icmp sgt i64 %t186, %t187
br i1 %t188, label %then3950, label %endif3952
then3950:
%t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1
%t190 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2
%t191 = load i64, ptr %t190
%t192 = load i64, ptr %a42
%t193 = sub i64 %t191, %t192
call void @finch_str_from_int(ptr %a194, i64 %t193)
%t195 = load { ptr, i64, i64 }, ptr %a194
store { ptr, i64, i64 } { ptr @.str.2450, i64 1, 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.2451, i64 6, i64 0 }, ptr %a202
call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202)
%t203 = load { ptr, i64, i64 }, ptr %a200
%t204 = load i64, ptr %t189
%t205 = add i64 %t204, 1
call void @finch_arr_reserve(ptr %a43, i64 %t205, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t206 = load ptr, ptr %a43
%t207 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i64 %t204
store { ptr, i64, i64 } %t203, ptr %t207
store i64 %t205, ptr %t189
br label %endif3952
endif3952:
%t208 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 4
%t209 = load { ptr, i64, i64 }, ptr %t208
%t210 = load ptr, ptr %a1
%t211 = icmp eq ptr %t210, null
br i1 %t211, label %panic3953, label %ok3954
panic3953:
call void @finch_panic(ptr @.str.2452, i64 1632, ptr @.str.2453)
unreachable
ok3954:
%t212 = getelementptr inbounds %S.gen.Gen, ptr %t210, i32 0, i32 15
%t213 = load i64, ptr %a2
%t214 = load { ptr, i64, i64 }, ptr %t212
%t215 = extractvalue { ptr, i64, i64 } %t214, 1
%t216 = icmp uge i64 %t213, %t215
br i1 %t216, label %range3955, label %inrange3956
range3955:
call void @finch_panic_index(ptr @.str.2454, i64 1632, i64 %t213, i64 %t215)
unreachable
inrange3956:
%t217 = extractvalue { ptr, i64, i64 } %t214, 0
%t218 = getelementptr inbounds %S.gen.StructDef, ptr %t217, i64 %t213
%t219 = getelementptr inbounds %S.gen.StructDef, ptr %t218, i32 0, i32 8
store { ptr, i64, i64 } %t209, ptr %a220
call void @finch_str_copy(ptr %a221, ptr %a220)
%t222 = load { ptr, i64, i64 }, ptr %a221
store { ptr, i64, i64 } %t222, ptr %t219
%t223 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 5
%t224 = load i1, ptr %t223
br label %logic.from3957
logic.from3957:
br i1 %t224, label %logic.rhs3958, label %logic.end3959
logic.rhs3958:
%t225 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 4
%t226 = getelementptr inbounds { ptr, i64, i64 }, ptr %t225, i32 0, i32 1
%t227 = load i64, ptr %t226
%t228 = icmp eq i64 %t227, 0
br label %logic.rend3960
logic.rend3960:
br label %logic.end3959
logic.end3959:
%t229 = phi i1 [ false, %logic.from3957 ], [ %t228, %logic.rend3960 ]
br i1 %t229, label %then3961, label %endif3963
then3961:
%t230 = load ptr, ptr %a1
%t231 = icmp eq ptr %t230, null
br i1 %t231, label %panic3964, label %ok3965
panic3964:
call void @finch_panic(ptr @.str.2456, i64 1634, ptr @.str.2457)
unreachable
ok3965:
%t232 = getelementptr inbounds %S.gen.Gen, ptr %t230, i32 0, i32 15
%t233 = load i64, ptr %a2
%t234 = load { ptr, i64, i64 }, ptr %t232
%t235 = extractvalue { ptr, i64, i64 } %t234, 1
%t236 = icmp uge i64 %t233, %t235
br i1 %t236, label %range3966, label %inrange3967
range3966:
call void @finch_panic_index(ptr @.str.2458, i64 1634, i64 %t233, i64 %t235)
unreachable
inrange3967:
%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 8
store { ptr, i64, i64 } { ptr @.str.2455, i64 49, i64 0 }, ptr %t239
br label %endif3963
endif3963:
%t240 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2
%t241 = load i64, ptr %t240
%t242 = load ptr, ptr %a1
%t243 = icmp eq ptr %t242, null
br i1 %t243, label %panic3968, label %ok3969
panic3968:
call void @finch_panic(ptr @.str.2459, i64 1636, ptr @.str.2460)
unreachable
ok3969:
%t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 15
%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 %range3970, label %inrange3971
range3970:
call void @finch_panic_index(ptr @.str.2461, i64 1636, i64 %t245, i64 %t247)
unreachable
inrange3971:
%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 9
store i64 %t241, ptr %t251
%t252 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 3
%t253 = load i64, ptr %t252
%t254 = load ptr, ptr %a1
%t255 = icmp eq ptr %t254, null
br i1 %t255, label %panic3972, label %ok3973
panic3972:
call void @finch_panic(ptr @.str.2462, i64 1637, ptr @.str.2463)
unreachable
ok3973:
%t256 = getelementptr inbounds %S.gen.Gen, ptr %t254, i32 0, i32 15
%t257 = load i64, ptr %a2
%t258 = load { ptr, i64, i64 }, ptr %t256
%t259 = extractvalue { ptr, i64, i64 } %t258, 1
%t260 = icmp uge i64 %t257, %t259
br i1 %t260, label %range3974, label %inrange3975
range3974:
call void @finch_panic_index(ptr @.str.2464, i64 1637, i64 %t257, i64 %t259)
unreachable
inrange3975:
%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 10
store i64 %t253, ptr %t263
%t264 = load ptr, ptr %a1
%t265 = icmp eq ptr %t264, null
br i1 %t265, label %panic3976, label %ok3977
panic3976:
call void @finch_panic(ptr @.str.2465, i64 1638, ptr @.str.2466)
unreachable
ok3977:
%t266 = getelementptr inbounds %S.gen.Gen, ptr %t264, i32 0, i32 15
%t267 = load i64, ptr %a2
%t268 = load { ptr, i64, i64 }, ptr %t266
%t269 = extractvalue { ptr, i64, i64 } %t268, 1
%t270 = icmp uge i64 %t267, %t269
br i1 %t270, label %range3978, label %inrange3979
range3978:
call void @finch_panic_index(ptr @.str.2467, i64 1638, i64 %t267, i64 %t269)
unreachable
inrange3979:
%t271 = extractvalue { ptr, i64, i64 } %t268, 0
%t272 = getelementptr inbounds %S.gen.StructDef, ptr %t271, i64 %t267
%t273 = getelementptr inbounds %S.gen.StructDef, ptr %t272, i32 0, i32 15
store i64 2, ptr %t273
%t274 = load ptr, ptr %a1
%t275 = icmp eq ptr %t274, null
br i1 %t275, label %panic3980, label %ok3981
panic3980:
call void @finch_panic(ptr @.str.2468, i64 1639, ptr @.str.2469)
unreachable
ok3981:
%t276 = getelementptr inbounds %S.gen.Gen, ptr %t274, i32 0, i32 2
%t277 = getelementptr inbounds { ptr, i64, i64 }, ptr %t276, i32 0, i32 1
%t278 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 0
%t279 = load { ptr, i64, i64 }, ptr %t278
store { ptr, i64, i64 } { ptr @.str.2470, i64 5, i64 0 }, ptr %a281
store { ptr, i64, i64 } %t279, ptr %a282
call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282)
%t283 = load { ptr, i64, i64 }, ptr %a280
store { ptr, i64, i64 } %t283, ptr %a285
store { ptr, i64, i64 } { ptr @.str.2471, i64 10, i64 0 }, ptr %a286
call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286)
%t287 = load { ptr, i64, i64 }, ptr %a284
%t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.2472, i64 2, i64 0 }, ptr %a289
call void @finch_str_join(ptr %a290, ptr %a43, ptr %a289)
%t291 = load { ptr, i64, i64 }, ptr %a290
store { ptr, i64, i64 } %t287, 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.2473, i64 2, i64 0 }, ptr %a298
call void @finch_str_concat(ptr %a296, ptr %a297, ptr %a298)
%t299 = load { ptr, i64, i64 }, ptr %a296
%t300 = load i64, ptr %t277
%t301 = add i64 %t300, 1
call void @finch_arr_reserve(ptr %t276, i64 %t301, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t302 = load ptr, ptr %t276
%t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t302, i64 %t300
store { ptr, i64, i64 } %t299, ptr %t303
store i64 %t301, ptr %t277
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
%a98 = alloca { ptr, i64, i64 }, align 16
%a99 = 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
%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
%a143 = alloca { ptr, i64, i64 }, align 16
%a144 = 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 %panic3982, label %ok3983
panic3982:
call void @finch_panic(ptr @.str.2474, i64 1643, ptr @.str.2475)
unreachable
ok3983:
%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 %range3984, label %inrange3985
range3984:
call void @finch_panic_index(ptr @.str.2476, i64 1643, i64 %t6, i64 %t8)
unreachable
inrange3985:
%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 %then3986, label %endif3988
then3986:
ret void
endif3988:
%t15 = load ptr, ptr %a1
%t16 = icmp eq ptr %t15, null
br i1 %t16, label %panic3989, label %ok3990
panic3989:
call void @finch_panic(ptr @.str.2477, i64 1646, ptr @.str.2478)
unreachable
ok3990:
%t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 15
%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 %range3991, label %inrange3992
range3991:
call void @finch_panic_index(ptr @.str.2479, i64 1646, i64 %t18, i64 %t20)
unreachable
inrange3992:
%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 %then3993, label %endif3995
then3993:
%t26 = load ptr, ptr %a1
%t27 = load i64, ptr %a2
call void @finch.gen.resolveCStruct(ptr %t26, i64 %t27)
ret void
endif3995:
%t28 = load ptr, ptr %a1
%t29 = icmp eq ptr %t28, null
br i1 %t29, label %panic3996, label %ok3997
panic3996:
call void @finch_panic(ptr @.str.2480, i64 1650, ptr @.str.2481)
unreachable
ok3997:
%t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 15
%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 %range3998, label %inrange3999
range3998:
call void @finch_panic_index(ptr @.str.2482, i64 1650, i64 %t31, i64 %t33)
unreachable
inrange3999:
%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 %then4000, label %endif4002
then4000:
%t41 = load ptr, ptr %a1
%t42 = load i64, ptr %a2
call void @finch.gen.resolveStructBody(ptr %t41, i64 %t42)
ret void
endif4002:
%t43 = load ptr, ptr %a1
%t44 = icmp eq ptr %t43, null
br i1 %t44, label %panic4003, label %ok4004
panic4003:
call void @finch_panic(ptr @.str.2483, i64 1655, ptr @.str.2484)
unreachable
ok4004:
%t45 = getelementptr inbounds %S.gen.Gen, ptr %t43, i32 0, i32 17
%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 %panic4005, label %ok4006
panic4005:
call void @finch_panic(ptr @.str.2485, i64 1656, ptr @.str.2486)
unreachable
ok4006:
%t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 18
%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 %panic4007, label %ok4008
panic4007:
call void @finch_panic(ptr @.str.2487, i64 1657, ptr @.str.2488)
unreachable
ok4008:
%t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 19
%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 %panic4009, label %ok4010
panic4009:
call void @finch_panic(ptr @.str.2489, i64 1658, ptr @.str.2490)
unreachable
ok4010:
%t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 15
%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 %range4011, label %inrange4012
range4011:
call void @finch_panic_index(ptr @.str.2491, i64 1658, i64 %t70, i64 %t72)
unreachable
inrange4012:
%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 %panic4013, label %ok4014
panic4013:
call void @finch_panic(ptr @.str.2492, i64 1658, ptr @.str.2493)
unreachable
ok4014:
%t80 = getelementptr inbounds %S.gen.Gen, ptr %t78, i32 0, i32 17
store { ptr, i64, i64 } %t77, ptr %a81
call void @finch.copy.arr_str(ptr %a82, ptr %a81)
%t83 = load { ptr, i64, i64 }, ptr %a82
store { ptr, i64, i64 } %t83, ptr %t80
%t84 = load ptr, ptr %a1
%t85 = icmp eq ptr %t84, null
br i1 %t85, label %panic4015, label %ok4016
panic4015:
call void @finch_panic(ptr @.str.2494, i64 1659, ptr @.str.2495)
unreachable
ok4016:
%t86 = getelementptr inbounds %S.gen.Gen, ptr %t84, i32 0, i32 15
%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 %range4017, label %inrange4018
range4017:
call void @finch_panic_index(ptr @.str.2496, i64 1659, i64 %t87, i64 %t89)
unreachable
inrange4018:
%t91 = extractvalue { ptr, i64, i64 } %t88, 0
%t92 = getelementptr inbounds %S.gen.StructDef, ptr %t91, i64 %t87
%t93 = getelementptr inbounds %S.gen.StructDef, ptr %t92, i32 0, i32 7
%t94 = load { ptr, i64, i64 }, ptr %t93
%t95 = load ptr, ptr %a1
%t96 = icmp eq ptr %t95, null
br i1 %t96, label %panic4019, label %ok4020
panic4019:
call void @finch_panic(ptr @.str.2497, i64 1659, ptr @.str.2498)
unreachable
ok4020:
%t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 18
store { ptr, i64, i64 } %t94, ptr %a98
call void @finch.copy.arr_S_ast_Type(ptr %a99, ptr %a98)
%t100 = load { ptr, i64, i64 }, ptr %a99
store { ptr, i64, i64 } %t100, ptr %t97
%t101 = load ptr, ptr %a1
%t102 = icmp eq ptr %t101, null
br i1 %t102, label %panic4021, label %ok4022
panic4021:
call void @finch_panic(ptr @.str.2500, i64 1660, ptr @.str.2501)
unreachable
ok4022:
%t103 = getelementptr inbounds %S.gen.Gen, ptr %t101, i32 0, i32 15
%t104 = load i64, ptr %a2
%t105 = load { ptr, i64, i64 }, ptr %t103
%t106 = extractvalue { ptr, i64, i64 } %t105, 1
%t107 = icmp uge i64 %t104, %t106
br i1 %t107, label %range4023, label %inrange4024
range4023:
call void @finch_panic_index(ptr @.str.2502, i64 1660, i64 %t104, i64 %t106)
unreachable
inrange4024:
%t108 = extractvalue { ptr, i64, i64 } %t105, 0
%t109 = getelementptr inbounds %S.gen.StructDef, ptr %t108, i64 %t104
%t110 = getelementptr inbounds %S.gen.StructDef, ptr %t109, i32 0, i32 1
%t111 = load { ptr, i64, i64 }, ptr %t110
store { ptr, i64, i64 } { ptr @.str.2499, i64 17, i64 0 }, 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.2503, i64 1, i64 0 }, ptr %a118
call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118)
%t119 = load { ptr, i64, i64 }, ptr %a116
%t120 = load ptr, ptr %a1
%t121 = icmp eq ptr %t120, null
br i1 %t121, label %panic4025, label %ok4026
panic4025:
call void @finch_panic(ptr @.str.2504, i64 1660, ptr @.str.2505)
unreachable
ok4026:
%t122 = getelementptr inbounds %S.gen.Gen, ptr %t120, i32 0, i32 19
store { ptr, i64, i64 } %t119, ptr %t122
%t123 = load ptr, ptr %a1
%t124 = load i64, ptr %a2
call void @finch.gen.resolveStructBody(ptr %t123, i64 %t124)
%t125 = load { ptr, i64, i64 }, ptr %a50
%t126 = load ptr, ptr %a1
%t127 = icmp eq ptr %t126, null
br i1 %t127, label %panic4027, label %ok4028
panic4027:
call void @finch_panic(ptr @.str.2506, i64 1662, ptr @.str.2507)
unreachable
ok4028:
%t128 = getelementptr inbounds %S.gen.Gen, ptr %t126, i32 0, i32 17
store { ptr, i64, i64 } %t125, 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 %t128
%t132 = load { ptr, i64, i64 }, ptr %a58
%t133 = load ptr, ptr %a1
%t134 = icmp eq ptr %t133, null
br i1 %t134, label %panic4029, label %ok4030
panic4029:
call void @finch_panic(ptr @.str.2508, i64 1663, ptr @.str.2509)
unreachable
ok4030:
%t135 = getelementptr inbounds %S.gen.Gen, ptr %t133, i32 0, i32 18
store { ptr, i64, i64 } %t132, ptr %a136
call void @finch.copy.arr_S_ast_Type(ptr %a137, ptr %a136)
%t138 = load { ptr, i64, i64 }, ptr %a137
store { ptr, i64, i64 } %t138, ptr %t135
%t139 = load { ptr, i64, i64 }, ptr %a66
%t140 = load ptr, ptr %a1
%t141 = icmp eq ptr %t140, null
br i1 %t141, label %panic4031, label %ok4032
panic4031:
call void @finch_panic(ptr @.str.2510, i64 1664, ptr @.str.2511)
unreachable
ok4032:
%t142 = getelementptr inbounds %S.gen.Gen, ptr %t140, i32 0, i32 19
store { ptr, i64, i64 } %t139, ptr %a143
call void @finch_str_copy(ptr %a144, ptr %a143)
%t145 = load { ptr, i64, i64 }, ptr %a144
store { ptr, i64, i64 } %t145, ptr %t142
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
%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
%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
%a102 = alloca { ptr, i64, i64 }, align 16
%a103 = alloca { ptr, i64, i64 }, align 16
%a105 = alloca { ptr, i64, i64 }, align 16
%a120 = alloca { ptr, i64, i64 }, align 16
%a121 = alloca { ptr, i64, i64 }, align 16
%a123 = alloca i1, align 16
%a124 = alloca { ptr, i64, i64 }, align 16
%a126 = alloca i64, align 16
%a134 = alloca %S.ast.Node, align 16
%a140 = alloca %S.ast.Type, align 16
%a143 = alloca { ptr, i64, i64 }, align 16
%a144 = alloca { ptr, i64, i64 }, align 16
%a194 = alloca { ptr, i64, i64 }, align 16
%a195 = alloca { ptr, i64, i64 }, align 16
%a213 = alloca %S.ast.Type, align 16
%a214 = alloca %S.ast.Type, align 16
%a248 = alloca { ptr, i64, i64 }, align 16
%a249 = 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
%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
%a306 = alloca { ptr, i64, i64 }, align 16
%a307 = 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
%a313 = 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 i64 %p1, ptr %a2
%t3 = load ptr, ptr %a1
%t4 = icmp eq ptr %t3, null
br i1 %t4, label %panic4033, label %ok4034
panic4033:
call void @finch_panic(ptr @.str.2512, i64 1668, ptr @.str.2513)
unreachable
ok4034:
%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 %panic4035, label %ok4036
panic4035:
call void @finch_panic(ptr @.str.2514, i64 1668, ptr @.str.2515)
unreachable
ok4036:
%t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 15
%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 %range4037, label %inrange4038
range4037:
call void @finch_panic_index(ptr @.str.2516, i64 1668, i64 %t9, i64 %t11)
unreachable
inrange4038:
%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 %range4039, label %inrange4040
range4039:
call void @finch_panic_index(ptr @.str.2517, i64 1668, i64 %t16, i64 %t18)
unreachable
inrange4040:
%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 %panic4041, label %ok4042
panic4041:
call void @finch_panic(ptr @.str.2518, i64 1668, ptr @.str.2519)
unreachable
ok4042:
%t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 15
%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 %range4043, label %inrange4044
range4043:
call void @finch_panic_index(ptr @.str.2520, i64 1668, i64 %t26, i64 %t28)
unreachable
inrange4044:
%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 %range4045, label %inrange4046
range4045:
call void @finch_panic_index(ptr @.str.2521, i64 1668, i64 %t33, i64 %t35)
unreachable
inrange4046:
%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 %panic4047, label %ok4048
panic4047:
call void @finch_panic(ptr @.str.2522, i64 1669, ptr @.str.2523)
unreachable
ok4048:
%t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 15
%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 %range4049, label %inrange4050
range4049:
call void @finch_panic_index(ptr @.str.2524, i64 1669, i64 %t47, i64 %t49)
unreachable
inrange4050:
%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 %then4051, label %endif4053
then4051:
%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.2525, 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.2526, i64 26, i64 0 }, ptr %a66
call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66)
%t67 = load { ptr, i64, i64 }, ptr %a64
%t68 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1
%t69 = load { ptr, i64, i64 }, ptr %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)
%t73 = load { ptr, i64, i64 }, ptr %a70
store { ptr, i64, i64 } %t73, ptr %a75
store { ptr, i64, i64 } { ptr @.str.2527, i64 7, i64 0 }, ptr %a76
call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76)
%t77 = load { ptr, i64, i64 }, ptr %a74
%t78 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1
%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)
%t83 = load { ptr, i64, i64 }, ptr %a80
store { ptr, i64, i64 } %t83, ptr %a85
store { ptr, i64, i64 } { ptr @.str.2528, i64 15, i64 0 }, ptr %a86
call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86)
%t87 = load { ptr, i64, i64 }, ptr %a84
call void @finch.gen.fail(ptr %t56, %S.ast.Node %t57, { ptr, i64, i64 } %t87)
br label %endif4053
endif4053:
%t88 = load ptr, ptr %a1
%t89 = icmp eq ptr %t88, null
br i1 %t89, label %panic4054, label %ok4055
panic4054:
call void @finch_panic(ptr @.str.2529, i64 1672, ptr @.str.2530)
unreachable
ok4055:
%t90 = getelementptr inbounds %S.gen.Gen, ptr %t88, i32 0, i32 15
%t91 = load i64, ptr %a2
%t92 = load { ptr, i64, i64 }, ptr %t90
%t93 = extractvalue { ptr, i64, i64 } %t92, 1
%t94 = icmp uge i64 %t91, %t93
br i1 %t94, label %range4056, label %inrange4057
range4056:
call void @finch_panic_index(ptr @.str.2531, i64 1672, i64 %t91, i64 %t93)
unreachable
inrange4057:
%t95 = extractvalue { ptr, i64, i64 } %t92, 0
%t96 = getelementptr inbounds %S.gen.StructDef, ptr %t95, i64 %t91
%t97 = getelementptr inbounds %S.gen.StructDef, ptr %t96, i32 0, i32 15
store i64 1, ptr %t97
%t98 = load ptr, ptr %a1
%t99 = icmp eq ptr %t98, null
br i1 %t99, label %panic4058, label %ok4059
panic4058:
call void @finch_panic(ptr @.str.2532, i64 1673, ptr @.str.2533)
unreachable
ok4059:
%t100 = getelementptr inbounds %S.gen.Gen, ptr %t98, i32 0, i32 13
%t101 = load { ptr, i64, i64 }, ptr %t100
store { ptr, i64, i64 } %t101, ptr %a102
call void @finch_str_copy(ptr %a103, ptr %a102)
%t104 = load { ptr, i64, i64 }, ptr %a103
store { ptr, i64, i64 } %t104, ptr %a105
%t106 = load ptr, ptr %a1
%t107 = icmp eq ptr %t106, null
br i1 %t107, label %panic4060, label %ok4061
panic4060:
call void @finch_panic(ptr @.str.2534, i64 1674, ptr @.str.2535)
unreachable
ok4061:
%t108 = getelementptr inbounds %S.gen.Gen, ptr %t106, i32 0, i32 15
%t109 = load i64, ptr %a2
%t110 = load { ptr, i64, i64 }, ptr %t108
%t111 = extractvalue { ptr, i64, i64 } %t110, 1
%t112 = icmp uge i64 %t109, %t111
br i1 %t112, label %range4062, label %inrange4063
range4062:
call void @finch_panic_index(ptr @.str.2536, i64 1674, i64 %t109, i64 %t111)
unreachable
inrange4063:
%t113 = extractvalue { ptr, i64, i64 } %t110, 0
%t114 = getelementptr inbounds %S.gen.StructDef, ptr %t113, i64 %t109
%t115 = getelementptr inbounds %S.gen.StructDef, ptr %t114, i32 0, i32 0
%t116 = load { ptr, i64, i64 }, ptr %t115
%t117 = load ptr, ptr %a1
%t118 = icmp eq ptr %t117, null
br i1 %t118, label %panic4064, label %ok4065
panic4064:
call void @finch_panic(ptr @.str.2537, i64 1674, ptr @.str.2538)
unreachable
ok4065:
%t119 = getelementptr inbounds %S.gen.Gen, ptr %t117, i32 0, i32 13
store { ptr, i64, i64 } %t116, ptr %a120
call void @finch_str_copy(ptr %a121, ptr %a120)
%t122 = load { ptr, i64, i64 }, ptr %a121
store { ptr, i64, i64 } %t122, ptr %t119
store i1 false, ptr %a123
store { ptr, i64, i64 } zeroinitializer, ptr %a124
%t125 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 9
store i64 0, ptr %a126
br label %each.cond4066
each.cond4066:
%t127 = getelementptr inbounds { ptr, i64, i64 }, ptr %t125, i32 0, i32 1
%t128 = load i64, ptr %t127
%t129 = load i64, ptr %a126
%t130 = icmp slt i64 %t129, %t128
br i1 %t130, label %each.body4067, label %each.end4069
each.body4067:
%t131 = load ptr, ptr %t125
%t132 = getelementptr inbounds %S.ast.Node, ptr %t131, i64 %t129
%t133 = load %S.ast.Node, ptr %t132
store %S.ast.Node %t133, ptr %a134
%t135 = load ptr, ptr %a1
%t136 = getelementptr inbounds %S.ast.Node, ptr %a134, i32 0, i32 5
%t137 = load %S.ast.Type, ptr %t136
%t138 = load %S.ast.Node, ptr %a134
%t139 = call %S.ast.Type @finch.gen.resolve(ptr %t135, %S.ast.Type %t137, %S.ast.Node %t138)
store %S.ast.Type %t139, ptr %a140
%t141 = getelementptr inbounds %S.ast.Type, ptr %a140, i32 0, i32 0
%t142 = load { ptr, i64, i64 }, ptr %t141
store { ptr, i64, i64 } %t142, ptr %a143
store { ptr, i64, i64 } { ptr @.str.2539, i64 6, i64 0 }, ptr %a144
%t145 = call i32 @finch_str_eq(ptr %a143, ptr %a144)
%t146 = icmp ne i32 %t145, 0
br i1 %t146, label %then4070, label %endif4072
then4070:
%t147 = load ptr, ptr %a1
%t148 = load ptr, ptr %a1
%t149 = getelementptr inbounds %S.ast.Type, ptr %a140, i32 0, i32 3
%t150 = load { ptr, i64, i64 }, ptr %t149
%t151 = getelementptr inbounds %S.ast.Type, ptr %a140, i32 0, i32 2
%t152 = load { ptr, i64, i64 }, ptr %t151
%t153 = call i64 @finch.gen.findStruct(ptr %t148, { ptr, i64, i64 } %t150, { ptr, i64, i64 } %t152)
call void @finch.gen.resolveStruct(ptr %t147, i64 %t153)
br label %endif4072
endif4072:
%t154 = load ptr, ptr %a1
%t155 = icmp eq ptr %t154, null
br i1 %t155, label %panic4073, label %ok4074
panic4073:
call void @finch_panic(ptr @.str.2540, i64 1682, ptr @.str.2541)
unreachable
ok4074:
%t156 = getelementptr inbounds %S.gen.Gen, ptr %t154, i32 0, i32 15
%t157 = load i64, ptr %a2
%t158 = load { ptr, i64, i64 }, ptr %t156
%t159 = extractvalue { ptr, i64, i64 } %t158, 1
%t160 = icmp uge i64 %t157, %t159
br i1 %t160, label %range4075, label %inrange4076
range4075:
call void @finch_panic_index(ptr @.str.2542, i64 1682, i64 %t157, i64 %t159)
unreachable
inrange4076:
%t161 = extractvalue { ptr, i64, i64 } %t158, 0
%t162 = getelementptr inbounds %S.gen.StructDef, ptr %t161, i64 %t157
%t163 = getelementptr inbounds %S.gen.StructDef, ptr %t162, i32 0, i32 3
%t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %t163, i32 0, i32 1
%t165 = load ptr, ptr %a1
%t166 = icmp eq ptr %t165, null
br i1 %t166, label %panic4077, label %ok4078
panic4077:
call void @finch_panic(ptr @.str.2543, i64 1682, ptr @.str.2544)
unreachable
ok4078:
%t167 = getelementptr inbounds %S.gen.Gen, ptr %t165, i32 0, i32 15
%t168 = load i64, ptr %a2
%t169 = load { ptr, i64, i64 }, ptr %t167
%t170 = extractvalue { ptr, i64, i64 } %t169, 1
%t171 = icmp uge i64 %t168, %t170
br i1 %t171, label %range4079, label %inrange4080
range4079:
call void @finch_panic_index(ptr @.str.2545, i64 1682, i64 %t168, i64 %t170)
unreachable
inrange4080:
%t172 = extractvalue { ptr, i64, i64 } %t169, 0
%t173 = getelementptr inbounds %S.gen.StructDef, ptr %t172, i64 %t168
%t174 = getelementptr inbounds %S.gen.StructDef, ptr %t173, i32 0, i32 11
%t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %t174, i32 0, i32 1
%t176 = load i64, ptr %t175
%t177 = load i64, ptr %t164
%t178 = add i64 %t177, 1
call void @finch_arr_reserve(ptr %t163, i64 %t178, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64))
%t179 = load ptr, ptr %t163
%t180 = getelementptr inbounds i64, ptr %t179, i64 %t177
store i64 %t176, ptr %t180
store i64 %t178, ptr %t164
%t181 = load ptr, ptr %a1
%t182 = icmp eq ptr %t181, null
br i1 %t182, label %panic4081, label %ok4082
panic4081:
call void @finch_panic(ptr @.str.2546, i64 1683, ptr @.str.2547)
unreachable
ok4082:
%t183 = getelementptr inbounds %S.gen.Gen, ptr %t181, i32 0, i32 15
%t184 = load i64, ptr %a2
%t185 = load { ptr, i64, i64 }, ptr %t183
%t186 = extractvalue { ptr, i64, i64 } %t185, 1
%t187 = icmp uge i64 %t184, %t186
br i1 %t187, label %range4083, label %inrange4084
range4083:
call void @finch_panic_index(ptr @.str.2548, i64 1683, i64 %t184, i64 %t186)
unreachable
inrange4084:
%t188 = extractvalue { ptr, i64, i64 } %t185, 0
%t189 = getelementptr inbounds %S.gen.StructDef, ptr %t188, i64 %t184
%t190 = getelementptr inbounds %S.gen.StructDef, ptr %t189, i32 0, i32 11
%t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %t190, i32 0, i32 1
%t192 = getelementptr inbounds %S.ast.Node, ptr %a134, i32 0, i32 1
%t193 = load { ptr, i64, i64 }, ptr %t192
store { ptr, i64, i64 } %t193, ptr %a194
call void @finch_str_copy(ptr %a195, ptr %a194)
%t196 = load { ptr, i64, i64 }, ptr %a195
%t197 = load i64, ptr %t191
%t198 = add i64 %t197, 1
call void @finch_arr_reserve(ptr %t190, i64 %t198, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t199 = load ptr, ptr %t190
%t200 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i64 %t197
store { ptr, i64, i64 } %t196, ptr %t200
store i64 %t198, ptr %t191
%t201 = load ptr, ptr %a1
%t202 = icmp eq ptr %t201, null
br i1 %t202, label %panic4085, label %ok4086
panic4085:
call void @finch_panic(ptr @.str.2549, i64 1684, ptr @.str.2550)
unreachable
ok4086:
%t203 = getelementptr inbounds %S.gen.Gen, ptr %t201, i32 0, i32 15
%t204 = load i64, ptr %a2
%t205 = load { ptr, i64, i64 }, ptr %t203
%t206 = extractvalue { ptr, i64, i64 } %t205, 1
%t207 = icmp uge i64 %t204, %t206
br i1 %t207, label %range4087, label %inrange4088
range4087:
call void @finch_panic_index(ptr @.str.2551, i64 1684, i64 %t204, i64 %t206)
unreachable
inrange4088:
%t208 = extractvalue { ptr, i64, i64 } %t205, 0
%t209 = getelementptr inbounds %S.gen.StructDef, ptr %t208, i64 %t204
%t210 = getelementptr inbounds %S.gen.StructDef, ptr %t209, i32 0, i32 12
%t211 = getelementptr inbounds { ptr, i64, i64 }, ptr %t210, i32 0, i32 1
%t212 = load %S.ast.Type, ptr %a140
store %S.ast.Type %t212, ptr %a213
call void @finch.copy.S_ast_Type(ptr %a214, ptr %a213)
%t215 = load %S.ast.Type, ptr %a214
%t216 = load i64, ptr %t211
%t217 = add i64 %t216, 1
call void @finch_arr_reserve(ptr %t210, i64 %t217, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64))
%t218 = load ptr, ptr %t210
%t219 = getelementptr inbounds %S.ast.Type, ptr %t218, i64 %t216
store %S.ast.Type %t215, ptr %t219
store i64 %t217, ptr %t211
%t220 = load ptr, ptr %a1
%t221 = load %S.ast.Type, ptr %a140
%t222 = call i1 @finch.gen.owning(ptr %t220, %S.ast.Type %t221)
br i1 %t222, label %then4089, label %endif4091
then4089:
store i1 true, ptr %a123
br label %endif4091
endif4091:
%t223 = getelementptr inbounds { ptr, i64, i64 }, ptr %a124, i32 0, i32 1
%t224 = load ptr, ptr %a1
%t225 = load %S.ast.Type, ptr %a140
%t226 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t224, %S.ast.Type %t225)
%t227 = load i64, ptr %t223
%t228 = add i64 %t227, 1
call void @finch_arr_reserve(ptr %a124, i64 %t228, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t229 = load ptr, ptr %a124
%t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i64 %t227
store { ptr, i64, i64 } %t226, ptr %t230
store i64 %t228, ptr %t223
br label %each.step4068
each.step4068:
%t231 = load i64, ptr %a126
%t232 = add i64 %t231, 1
store i64 %t232, ptr %a126
br label %each.cond4066
each.end4069:
%t233 = load i1, ptr %a123
%t234 = load ptr, ptr %a1
%t235 = icmp eq ptr %t234, null
br i1 %t235, label %panic4092, label %ok4093
panic4092:
call void @finch_panic(ptr @.str.2552, i64 1690, ptr @.str.2553)
unreachable
ok4093:
%t236 = getelementptr inbounds %S.gen.Gen, ptr %t234, i32 0, i32 15
%t237 = load i64, ptr %a2
%t238 = load { ptr, i64, i64 }, ptr %t236
%t239 = extractvalue { ptr, i64, i64 } %t238, 1
%t240 = icmp uge i64 %t237, %t239
br i1 %t240, label %range4094, label %inrange4095
range4094:
call void @finch_panic_index(ptr @.str.2554, i64 1690, i64 %t237, i64 %t239)
unreachable
inrange4095:
%t241 = extractvalue { ptr, i64, i64 } %t238, 0
%t242 = getelementptr inbounds %S.gen.StructDef, ptr %t241, i64 %t237
%t243 = getelementptr inbounds %S.gen.StructDef, ptr %t242, i32 0, i32 16
store i1 %t233, ptr %t243
%t244 = load { ptr, i64, i64 }, ptr %a105
%t245 = load ptr, ptr %a1
%t246 = icmp eq ptr %t245, null
br i1 %t246, label %panic4096, label %ok4097
panic4096:
call void @finch_panic(ptr @.str.2555, i64 1691, ptr @.str.2556)
unreachable
ok4097:
%t247 = getelementptr inbounds %S.gen.Gen, ptr %t245, i32 0, i32 13
store { ptr, i64, i64 } %t244, ptr %a248
call void @finch_str_copy(ptr %a249, ptr %a248)
%t250 = load { ptr, i64, i64 }, ptr %a249
store { ptr, i64, i64 } %t250, ptr %t247
%t251 = load ptr, ptr %a1
%t252 = icmp eq ptr %t251, null
br i1 %t252, label %panic4098, label %ok4099
panic4098:
call void @finch_panic(ptr @.str.2557, i64 1692, ptr @.str.2558)
unreachable
ok4099:
%t253 = getelementptr inbounds %S.gen.Gen, ptr %t251, i32 0, i32 15
%t254 = load i64, ptr %a2
%t255 = load { ptr, i64, i64 }, ptr %t253
%t256 = extractvalue { ptr, i64, i64 } %t255, 1
%t257 = icmp uge i64 %t254, %t256
br i1 %t257, label %range4100, label %inrange4101
range4100:
call void @finch_panic_index(ptr @.str.2559, i64 1692, i64 %t254, i64 %t256)
unreachable
inrange4101:
%t258 = extractvalue { ptr, i64, i64 } %t255, 0
%t259 = getelementptr inbounds %S.gen.StructDef, ptr %t258, i64 %t254
%t260 = getelementptr inbounds %S.gen.StructDef, ptr %t259, i32 0, i32 15
store i64 2, ptr %t260
%t261 = load ptr, ptr %a1
%t262 = icmp eq ptr %t261, null
br i1 %t262, label %panic4102, label %ok4103
panic4102:
call void @finch_panic(ptr @.str.2560, i64 1693, ptr @.str.2561)
unreachable
ok4103:
%t263 = getelementptr inbounds %S.gen.Gen, ptr %t261, i32 0, i32 2
%t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1
%t265 = load ptr, ptr %a1
%t266 = icmp eq ptr %t265, null
br i1 %t266, label %panic4104, label %ok4105
panic4104:
call void @finch_panic(ptr @.str.2563, i64 1693, ptr @.str.2564)
unreachable
ok4105:
%t267 = getelementptr inbounds %S.gen.Gen, ptr %t265, i32 0, i32 15
%t268 = load i64, ptr %a2
%t269 = load { ptr, i64, i64 }, ptr %t267
%t270 = extractvalue { ptr, i64, i64 } %t269, 1
%t271 = icmp uge i64 %t268, %t270
br i1 %t271, label %range4106, label %inrange4107
range4106:
call void @finch_panic_index(ptr @.str.2565, i64 1693, i64 %t268, i64 %t270)
unreachable
inrange4107:
%t272 = extractvalue { ptr, i64, i64 } %t269, 0
%t273 = getelementptr inbounds %S.gen.StructDef, ptr %t272, i64 %t268
%t274 = getelementptr inbounds %S.gen.StructDef, ptr %t273, i32 0, i32 0
%t275 = load { ptr, i64, i64 }, ptr %t274
%t276 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t275)
store { ptr, i64, i64 } { ptr @.str.2562, i64 3, 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.2566, i64 1, i64 0 }, ptr %a283
call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283)
%t284 = load { ptr, i64, i64 }, ptr %a281
%t285 = load ptr, ptr %a1
%t286 = icmp eq ptr %t285, null
br i1 %t286, label %panic4108, label %ok4109
panic4108:
call void @finch_panic(ptr @.str.2567, i64 1693, ptr @.str.2568)
unreachable
ok4109:
%t287 = getelementptr inbounds %S.gen.Gen, ptr %t285, i32 0, i32 15
%t288 = load i64, ptr %a2
%t289 = load { ptr, i64, i64 }, ptr %t287
%t290 = extractvalue { ptr, i64, i64 } %t289, 1
%t291 = icmp uge i64 %t288, %t290
br i1 %t291, label %range4110, label %inrange4111
range4110:
call void @finch_panic_index(ptr @.str.2569, i64 1693, i64 %t288, i64 %t290)
unreachable
inrange4111:
%t292 = extractvalue { ptr, i64, i64 } %t289, 0
%t293 = getelementptr inbounds %S.gen.StructDef, ptr %t292, i64 %t288
%t294 = getelementptr inbounds %S.gen.StructDef, ptr %t293, i32 0, i32 1
%t295 = load { ptr, i64, i64 }, ptr %t294
%t296 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t295)
store { ptr, i64, i64 } %t284, 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.2570, i64 10, i64 0 }, ptr %a303
call void @finch_str_concat(ptr %a301, ptr %a302, ptr %a303)
%t304 = load { ptr, i64, i64 }, ptr %a301
%t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %a124, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.2571, i64 2, i64 0 }, ptr %a306
call void @finch_str_join(ptr %a307, ptr %a124, ptr %a306)
%t308 = load { ptr, i64, i64 }, ptr %a307
store { ptr, i64, i64 } %t304, ptr %a310
store { ptr, i64, i64 } %t308, ptr %a311
call void @finch_str_concat(ptr %a309, ptr %a310, ptr %a311)
%t312 = load { ptr, i64, i64 }, ptr %a309
store { ptr, i64, i64 } %t312, ptr %a314
store { ptr, i64, i64 } { ptr @.str.2572, i64 2, i64 0 }, ptr %a315
call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315)
%t316 = load { ptr, i64, i64 }, ptr %a313
%t317 = load i64, ptr %t264
%t318 = add i64 %t317, 1
call void @finch_arr_reserve(ptr %t263, i64 %t318, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t319 = load ptr, ptr %t263
%t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %t319, i64 %t317
store { ptr, i64, i64 } %t316, ptr %t320
store i64 %t318, ptr %t264
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 %panic4112, label %ok4113
panic4112:
call void @finch_panic(ptr @.str.2573, i64 1702, ptr @.str.2574)
unreachable
ok4113:
%t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 31
%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 %panic4114, label %ok4115
panic4114:
call void @finch_panic(ptr @.str.2575, i64 1703, ptr @.str.2576)
unreachable
ok4115:
%t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 31
%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
store i64 %p0, ptr %a1
%t2 = load i64, ptr %a1
%t3 = icmp slt i64 %t2, 0
br i1 %t3, label %then4116, label %endif4118
then4116:
ret { ptr, i64, i64 } { ptr @.str.2577, i64 4, i64 0 }
endif4118:
%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.2578, i64 1, 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
ret { ptr, i64, i64 } %t10
}
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 %then4119, label %endif4121
then4119:
%t5 = load i64, ptr %a1
ret i64 %t5
endif4121:
%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 %panic4122, label %ok4123
panic4122:
call void @finch_panic(ptr @.str.2579, i64 1722, ptr @.str.2580)
unreachable
ok4123:
%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.2581, 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.from4124
logic.from4124:
br i1 %t13, label %logic.end4126, label %logic.rhs4125
logic.rhs4125:
%t14 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t14, ptr %a15
store { ptr, i64, i64 } { ptr @.str.2582, 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.rend4127
logic.rend4127:
br label %logic.end4126
logic.end4126:
%t19 = phi i1 [ true, %logic.from4124 ], [ %t18, %logic.rend4127 ]
br label %logic.from4128
logic.from4128:
br i1 %t19, label %logic.end4130, label %logic.rhs4129
logic.rhs4129:
%t20 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t20, ptr %a21
store { ptr, i64, i64 } { ptr @.str.2583, 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.rend4131
logic.rend4131:
br label %logic.end4130
logic.end4130:
%t25 = phi i1 [ true, %logic.from4128 ], [ %t24, %logic.rend4131 ]
br label %logic.from4132
logic.from4132:
br i1 %t25, label %logic.end4134, label %logic.rhs4133
logic.rhs4133:
%t26 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t26, ptr %a27
store { ptr, i64, i64 } { ptr @.str.2584, 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.rend4135
logic.rend4135:
br label %logic.end4134
logic.end4134:
%t31 = phi i1 [ true, %logic.from4132 ], [ %t30, %logic.rend4135 ]
br i1 %t31, label %then4136, label %endif4138
then4136:
%t32 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 1, 0
%t33 = insertvalue %S.gen.SizeAlign %t32, i64 1, 1
ret %S.gen.SizeAlign %t33
endif4138:
%t34 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t34, ptr %a35
store { ptr, i64, i64 } { ptr @.str.2585, 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.from4139
logic.from4139:
br i1 %t38, label %logic.end4141, label %logic.rhs4140
logic.rhs4140:
%t39 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t39, ptr %a40
store { ptr, i64, i64 } { ptr @.str.2586, 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.rend4142
logic.rend4142:
br label %logic.end4141
logic.end4141:
%t44 = phi i1 [ true, %logic.from4139 ], [ %t43, %logic.rend4142 ]
br i1 %t44, label %then4143, label %endif4145
then4143:
%t45 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 2, 0
%t46 = insertvalue %S.gen.SizeAlign %t45, i64 2, 1
ret %S.gen.SizeAlign %t46
endif4145:
%t47 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t47, ptr %a48
store { ptr, i64, i64 } { ptr @.str.2587, 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.from4146
logic.from4146:
br i1 %t51, label %logic.end4148, label %logic.rhs4147
logic.rhs4147:
%t52 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t52, ptr %a53
store { ptr, i64, i64 } { ptr @.str.2588, 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.rend4149
logic.rend4149:
br label %logic.end4148
logic.end4148:
%t57 = phi i1 [ true, %logic.from4146 ], [ %t56, %logic.rend4149 ]
br label %logic.from4150
logic.from4150:
br i1 %t57, label %logic.end4152, label %logic.rhs4151
logic.rhs4151:
%t58 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t58, ptr %a59
store { ptr, i64, i64 } { ptr @.str.2589, 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.rend4153
logic.rend4153:
br label %logic.end4152
logic.end4152:
%t63 = phi i1 [ true, %logic.from4150 ], [ %t62, %logic.rend4153 ]
br label %logic.from4154
logic.from4154:
br i1 %t63, label %logic.end4156, label %logic.rhs4155
logic.rhs4155:
%t64 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t64, ptr %a65
store { ptr, i64, i64 } { ptr @.str.2590, 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.rend4157
logic.rend4157:
br label %logic.end4156
logic.end4156:
%t69 = phi i1 [ true, %logic.from4154 ], [ %t68, %logic.rend4157 ]
br i1 %t69, label %then4158, label %endif4160
then4158:
%t70 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 4, 0
%t71 = insertvalue %S.gen.SizeAlign %t70, i64 4, 1
ret %S.gen.SizeAlign %t71
endif4160:
%t72 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t72, ptr %a73
store { ptr, i64, i64 } { ptr @.str.2591, 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.from4161
logic.from4161:
br i1 %t76, label %logic.end4163, label %logic.rhs4162
logic.rhs4162:
%t77 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t77, ptr %a78
store { ptr, i64, i64 } { ptr @.str.2592, 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.rend4164
logic.rend4164:
br label %logic.end4163
logic.end4163:
%t82 = phi i1 [ true, %logic.from4161 ], [ %t81, %logic.rend4164 ]
br i1 %t82, label %then4165, label %endif4167
then4165:
%t83 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 24, 0
%t84 = insertvalue %S.gen.SizeAlign %t83, i64 8, 1
ret %S.gen.SizeAlign %t84
endif4167:
%t85 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t85, ptr %a86
store { ptr, i64, i64 } { ptr @.str.2593, 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 %then4168, label %endif4170
then4168:
%t90 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 56, 0
%t91 = insertvalue %S.gen.SizeAlign %t90, i64 8, 1
ret %S.gen.SizeAlign %t91
endif4170:
%t92 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t92, ptr %a93
store { ptr, i64, i64 } { ptr @.str.2594, 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 %then4171, label %endif4173
then4171:
%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 %range4174, label %inrange4175
range4174:
call void @finch_panic_index(ptr @.str.2595, i64 1744, i64 0, i64 %t100)
unreachable
inrange4175:
%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
ret %S.gen.SizeAlign %t115
endif4173:
%t116 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t116, ptr %a117
store { ptr, i64, i64 } { ptr @.str.2596, 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 %then4176, label %endif4178
then4176:
%t121 = load ptr, ptr %a1
%t122 = icmp eq ptr %t121, null
br i1 %t122, label %panic4179, label %ok4180
panic4179:
call void @finch_panic(ptr @.str.2597, i64 1748, ptr @.str.2598)
unreachable
ok4180:
%t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 15
%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 %range4181, label %inrange4182
range4181:
call void @finch_panic_index(ptr @.str.2599, i64 1748, i64 %t129, i64 %t131)
unreachable
inrange4182:
%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 %then4183, label %endif4185
then4183:
%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
ret %S.gen.SizeAlign %t147
endif4185:
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.cond4186
each.cond4186:
%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.body4187, label %each.end4189
each.body4187:
%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 %then4190, label %endif4192
then4190:
%t175 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1
%t176 = load i64, ptr %t175
store i64 %t176, ptr %a149
br label %endif4192
endif4192:
br label %each.step4188
each.step4188:
%t177 = load i64, ptr %a151
%t178 = add i64 %t177, 1
store i64 %t178, ptr %a151
br label %each.cond4186
each.end4189:
%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
ret %S.gen.SizeAlign %t184
endif4178:
%t185 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 8, 0
%t186 = insertvalue %S.gen.SizeAlign %t185, i64 8, 1
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
%a43 = alloca { ptr, i64, i64 }, align 16
%a44 = alloca { ptr, i64, i64 }, 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 %then4193, label %endif4195
then4193:
%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
endif4195:
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.cond4196
each.cond4196:
%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.body4197, label %each.end4199
each.body4197:
%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.step4198
each.step4198:
%t40 = load i64, ptr %a13
%t41 = add i64 %t40, 1
store i64 %t41, ptr %a13
br label %each.cond4196
each.end4199:
%t42 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t42, ptr %a43
call void @finch.copy.arr_int(ptr %a44, ptr %a43)
%t45 = load { ptr, i64, i64 }, ptr %a44
ret { ptr, i64, i64 } %t45
}
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
%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
%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
%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
%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
%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
%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
%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
%a80 = alloca { ptr, i64, i64 }, align 16
%a81 = alloca { ptr, i64, i64 }, align 16
%a82 = 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.2600, 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.2601, i64 11, i64 0 }, ptr %a17
call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17)
%t18 = load { ptr, i64, i64 }, ptr %a15
%t19 = load i64, ptr %a3
call void @finch_str_from_int(ptr %a20, i64 %t19)
%t21 = load { ptr, i64, i64 }, ptr %a20
store { ptr, i64, i64 } %t18, 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 %a27
store { ptr, i64, i64 } { ptr @.str.2602, i64 9, i64 0 }, ptr %a28
call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28)
%t29 = load { ptr, i64, i64 }, ptr %a26
%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)
%t36 = load { ptr, i64, i64 }, ptr %a33
store { ptr, i64, i64 } %t36, ptr %a38
store { ptr, i64, i64 } { ptr @.str.2603, i64 8, i64 0 }, ptr %a39
call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39)
%t40 = load { ptr, i64, i64 }, ptr %a37
%t41 = load i64, ptr %a5
call void @finch_str_from_int(ptr %a42, i64 %t41)
%t43 = load { ptr, i64, i64 }, ptr %a42
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)
%t47 = load { ptr, i64, i64 }, ptr %a44
store { ptr, i64, i64 } %t47, ptr %a49
store { ptr, i64, i64 } { ptr @.str.2604, i64 12, i64 0 }, ptr %a50
call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50)
%t51 = load { ptr, i64, i64 }, ptr %a48
%t52 = load i64, ptr %a6
%t53 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %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)
%t57 = load { ptr, i64, i64 }, ptr %a54
store { ptr, i64, i64 } %t57, ptr %a59
store { ptr, i64, i64 } { ptr @.str.2605, i64 8, i64 0 }, ptr %a60
call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60)
%t61 = load { ptr, i64, i64 }, ptr %a58
%t62 = load i64, ptr %a7
call void @finch_str_from_int(ptr %a63, i64 %t62)
%t64 = load { ptr, i64, i64 }, ptr %a63
store { ptr, i64, i64 } %t61, ptr %a66
store { ptr, i64, i64 } %t64, ptr %a67
call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67)
%t68 = load { ptr, i64, i64 }, ptr %a65
store { ptr, i64, i64 } %t68, ptr %a70
store { ptr, i64, i64 } { ptr @.str.2606, i64 10, i64 0 }, ptr %a71
call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71)
%t72 = load { ptr, i64, i64 }, ptr %a69
%t73 = load i64, ptr %a8
call void @finch_str_from_int(ptr %a74, i64 %t73)
%t75 = load { ptr, i64, i64 }, ptr %a74
store { ptr, i64, i64 } %t72, 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.2607, i64 1, i64 0 }, ptr %a82
call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82)
%t83 = load { ptr, i64, i64 }, ptr %a80
%t84 = call i64 @finch.gen.md(ptr %t9, { ptr, i64, i64 } %t83)
ret i64 %t84
}
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
%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
%a22 = alloca { ptr, i64, i64 }, align 16
%a23 = 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
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.2608, 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.2609, i64 9, i64 0 }, ptr %a13
call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13)
%t14 = load { ptr, i64, i64 }, ptr %a11
%t15 = load i64, ptr %a3
call void @finch_str_from_int(ptr %a16, i64 %t15)
%t17 = load { ptr, i64, i64 }, ptr %a16
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)
%t21 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t21, ptr %a23
store { ptr, i64, i64 } { ptr @.str.2610, i64 12, 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 %a4
store { ptr, i64, i64 } %t25, 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.2611, i64 1, i64 0 }, ptr %a33
call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33)
%t34 = load { ptr, i64, i64 }, ptr %a31
%t35 = call i64 @finch.gen.md(ptr %t5, { ptr, i64, i64 } %t34)
ret i64 %t35
}
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
%a26 = alloca { ptr, i64, i64 }, align 16
%a31 = 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
%a48 = alloca i64, align 16
%a58 = alloca i64, align 16
%a60 = alloca { ptr, i64, i64 }, align 16
%a61 = 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
%a81 = alloca { ptr, i64, i64 }, align 16
%a82 = alloca { ptr, i64, i64 }, align 16
%a88 = alloca { ptr, i64, i64 }, align 16
%a89 = 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
%a125 = alloca %S.gen.EnumDef, align 16
%a126 = alloca %S.gen.EnumDef, align 16
%a128 = alloca %S.gen.EnumDef, align 16
%a129 = alloca { ptr, i64, i64 }, align 16
%a133 = 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
%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
%a168 = alloca { ptr, i64, i64 }, align 16
%a169 = alloca { ptr, i64, i64 }, align 16
%a170 = 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
%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
%a198 = alloca { ptr, i64, i64 }, align 16
%a199 = 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
%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
%a222 = alloca { ptr, i64, i64 }, align 16
%a223 = alloca i32, align 16
%a234 = alloca { ptr, i64, i64 }, align 16
%a235 = alloca { ptr, i64, i64 }, align 16
%a238 = alloca 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
%a272 = alloca { ptr, i64, i64 }, align 16
%a273 = alloca { ptr, i64, i64 }, align 16
%a285 = alloca %S.gen.SizeAlign, 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
%a295 = alloca { ptr, i64, i64 }, align 16
%a296 = alloca { ptr, i64, i64 }, align 16
%a297 = alloca { ptr, i64, i64 }, align 16
%a300 = alloca 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
%a325 = 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
%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
%a342 = alloca { ptr, i64, i64 }, align 16
%a343 = alloca { ptr, i64, i64 }, align 16
%a344 = 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
%a367 = alloca %S.ast.Type, align 16
%a369 = alloca { ptr, i64, i64 }, align 16
%a370 = alloca { ptr, i64, i64 }, align 16
%a380 = alloca %S.ast.Type, align 16
%a381 = alloca %S.ast.Type, 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
%a397 = alloca i64, align 16
%a401 = alloca i64, align 16
%a407 = alloca i64, align 16
%a413 = alloca i64, align 16
%a419 = alloca 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
%a431 = 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
%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
%a448 = alloca { ptr, i64, i64 }, align 16
%a449 = alloca { ptr, i64, i64 }, align 16
%a450 = alloca { ptr, i64, i64 }, align 16
%a453 = 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
%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
%a470 = alloca { ptr, i64, i64 }, align 16
%a471 = alloca { ptr, i64, i64 }, align 16
%a472 = alloca { ptr, i64, i64 }, align 16
%a484 = alloca { ptr, i64, i64 }, align 16
%a485 = alloca { ptr, i64, i64 }, align 16
%a491 = alloca i64, align 16
%a494 = alloca i64, align 16
%a507 = alloca { ptr, i64, i64 }, align 16
%a508 = alloca { ptr, i64, i64 }, align 16
%a509 = alloca i64, align 16
%a513 = alloca 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
%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
%a558 = 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
%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
%a572 = alloca { ptr, i64, i64 }, align 16
%a573 = alloca { ptr, i64, i64 }, align 16
%a574 = 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
%a590 = alloca { ptr, i64, i64 }, align 16
%a591 = alloca { ptr, i64, i64 }, align 16
%a609 = alloca %S.gen.StructDef, align 16
%a610 = alloca %S.gen.StructDef, align 16
%a612 = alloca %S.gen.StructDef, align 16
%a616 = alloca { ptr, i64, i64 }, align 16
%a620 = alloca %S.gen.SizeAlign, align 16
%a621 = alloca { ptr, i64, i64 }, align 16
%a625 = alloca i64, align 16
%a638 = alloca %S.gen.SizeAlign, 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
%a687 = alloca { ptr, i64, i64 }, align 16
%a688 = alloca { ptr, i64, i64 }, align 16
%a689 = 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
%a696 = alloca { ptr, i64, i64 }, align 16
%a698 = alloca { ptr, i64, i64 }, align 16
%a699 = alloca { ptr, i64, i64 }, align 16
%a700 = alloca { ptr, i64, i64 }, align 16
%a702 = alloca { ptr, i64, i64 }, align 16
%a703 = alloca { ptr, i64, i64 }, align 16
%a704 = alloca { ptr, i64, i64 }, align 16
%a709 = 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
%a716 = alloca { ptr, i64, i64 }, align 16
%a717 = 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
%a724 = alloca { ptr, i64, i64 }, align 16
%a725 = 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
%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
%a764 = alloca { ptr, i64, i64 }, align 16
%a765 = 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.2612, 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.from4200
logic.from4200:
br i1 %t13, label %logic.end4202, label %logic.rhs4201
logic.rhs4201:
%t14 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t14, ptr %a15
store { ptr, i64, i64 } { ptr @.str.2613, 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.rend4203
logic.rend4203:
br label %logic.end4202
logic.end4202:
%t19 = phi i1 [ true, %logic.from4200 ], [ %t18, %logic.rend4203 ]
br i1 %t19, label %then4204, label %endif4206
then4204:
ret i64 -1
endif4206:
%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.2614, i64 2, i64 0 }, 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, ptr %a1
%t28 = icmp eq ptr %t27, null
br i1 %t28, label %panic4207, label %ok4208
panic4207:
call void @finch_panic(ptr @.str.2615, i64 1797, ptr @.str.2616)
unreachable
ok4208:
%t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 32
%t30 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t30, ptr %a31
%t32 = call i64 @finch_map_find(ptr %t29, ptr %a31, 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)
%t33 = icmp sge i64 %t32, 0
br i1 %t33, label %then4209, label %endif4211
then4209:
%t34 = load ptr, ptr %a1
%t35 = icmp eq ptr %t34, null
br i1 %t35, label %panic4212, label %ok4213
panic4212:
call void @finch_panic(ptr @.str.2617, i64 1798, ptr @.str.2618)
unreachable
ok4213:
%t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 32
%t37 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t37, ptr %a38
%t39 = call i64 @finch_map_find(ptr %t36, ptr %a38, 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)
%t40 = icmp slt i64 %t39, 0
br i1 %t40, label %map.missing4214, label %map.found4215
map.missing4214:
store { ptr, i64, i64 } zeroinitializer, ptr %a41
store { ptr, i64, i64 } %t37, ptr %a42
call void @finch_buf_str(ptr %a41, ptr %a42, i32 1)
call void @finch_map_missing(ptr @.str.2619, i64 1798, ptr %a41)
unreachable
map.found4215:
%t43 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t36, i32 0, i32 0
%t44 = load ptr, ptr %t43
%t45 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t44, i64 %t39
%t46 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t45, i32 0, i32 2
%t47 = load i64, ptr %t46
ret i64 %t47
endif4211:
store i64 -1, ptr %a48
%t49 = load ptr, ptr %a1
%t50 = icmp eq ptr %t49, null
br i1 %t50, label %panic4216, label %ok4217
panic4216:
call void @finch_panic(ptr @.str.2620, i64 1801, ptr @.str.2621)
unreachable
ok4217:
%t51 = getelementptr inbounds %S.gen.Gen, ptr %t49, i32 0, i32 33
%t52 = load { ptr, i64, i64 }, ptr %t51
%t53 = extractvalue { ptr, i64, i64 } %t52, 1
%t54 = icmp uge i64 0, %t53
br i1 %t54, label %range4218, label %inrange4219
range4218:
call void @finch_panic_index(ptr @.str.2622, i64 1801, i64 0, i64 %t53)
unreachable
inrange4219:
%t55 = extractvalue { ptr, i64, i64 } %t52, 0
%t56 = getelementptr inbounds i64, ptr %t55, i64 0
%t57 = load i64, ptr %t56
store i64 %t57, ptr %a58
%t59 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t59, ptr %a60
store { ptr, i64, i64 } { ptr @.str.2623, i64 4, i64 0 }, ptr %a61
%t62 = call i32 @finch_str_eq(ptr %a60, ptr %a61)
%t63 = icmp ne i32 %t62, 0
br i1 %t63, label %then4220, label %else4221
then4220:
%t64 = load ptr, ptr %a1
%t65 = call i64 @finch.gen.basicType(ptr %t64, { ptr, i64, i64 } { ptr @.str.2624, i64 4, i64 0 }, i64 8, { ptr, i64, i64 } { ptr @.str.2625, i64 14, i64 0 })
store i64 %t65, ptr %a48
br label %endif4222
else4221:
%t66 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t66, ptr %a67
store { ptr, i64, i64 } { ptr @.str.2626, i64 4, i64 0 }, ptr %a68
%t69 = call i32 @finch_str_eq(ptr %a67, ptr %a68)
%t70 = icmp ne i32 %t69, 0
br i1 %t70, label %then4223, label %else4224
then4223:
%t71 = load ptr, ptr %a1
%t72 = call i64 @finch.gen.basicType(ptr %t71, { ptr, i64, i64 } { ptr @.str.2627, i64 4, i64 0 }, i64 8, { ptr, i64, i64 } { ptr @.str.2628, i64 18, i64 0 })
store i64 %t72, ptr %a48
br label %endif4225
else4224:
%t73 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t73, ptr %a74
store { ptr, i64, i64 } { ptr @.str.2629, i64 3, i64 0 }, ptr %a75
%t76 = call i32 @finch_str_eq(ptr %a74, ptr %a75)
%t77 = icmp ne i32 %t76, 0
br i1 %t77, label %then4226, label %else4227
then4226:
%t78 = load ptr, ptr %a1
%t79 = call i64 @finch.gen.basicType(ptr %t78, { ptr, i64, i64 } { ptr @.str.2630, i64 3, i64 0 }, i64 64, { ptr, i64, i64 } { ptr @.str.2631, i64 13, i64 0 })
store i64 %t79, ptr %a48
br label %endif4228
else4227:
%t80 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t80, ptr %a81
store { ptr, i64, i64 } { ptr @.str.2632, i64 5, i64 0 }, ptr %a82
%t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82)
%t84 = icmp ne i32 %t83, 0
br i1 %t84, label %then4229, label %else4230
then4229:
%t85 = load ptr, ptr %a1
%t86 = call i64 @finch.gen.basicType(ptr %t85, { ptr, i64, i64 } { ptr @.str.2633, i64 5, i64 0 }, i64 64, { ptr, i64, i64 } { ptr @.str.2634, i64 12, i64 0 })
store i64 %t86, ptr %a48
br label %endif4231
else4230:
%t87 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t87, ptr %a88
store { ptr, i64, i64 } { ptr @.str.2635, i64 3, i64 0 }, ptr %a89
%t90 = call i32 @finch_str_eq(ptr %a88, ptr %a89)
%t91 = icmp ne i32 %t90, 0
br i1 %t91, label %then4232, label %else4233
then4232:
%t92 = load ptr, ptr %a1
%t93 = call i64 @finch.gen.basicType(ptr %t92, { ptr, i64, i64 } { ptr @.str.2636, i64 3, i64 0 }, i64 32, { ptr, i64, i64 } { ptr @.str.2637, i64 12, i64 0 })
store i64 %t93, ptr %a48
br label %endif4234
else4233:
%t94 = load %S.ast.Type, ptr %a2
%t95 = call i1 @finch.gen.isInt(%S.ast.Type %t94)
br i1 %t95, label %then4235, label %else4236
then4235:
store { ptr, i64, i64 } { ptr @.str.2638, i64 15, i64 0 }, ptr %a96
%t97 = load %S.ast.Type, ptr %a2
%t98 = call i1 @finch.gen.isSigned(%S.ast.Type %t97)
br i1 %t98, label %then4238, label %endif4240
then4238:
store { ptr, i64, i64 } { ptr @.str.2639, i64 13, i64 0 }, ptr %a96
br label %endif4240
endif4240:
%t99 = load ptr, ptr %a1
%t100 = load { ptr, i64, i64 }, ptr %a8
%t101 = load %S.ast.Type, ptr %a2
%t102 = call i64 @finch.gen.bitsOf(%S.ast.Type %t101)
%t103 = load { ptr, i64, i64 }, ptr %a96
%t104 = call i64 @finch.gen.basicType(ptr %t99, { ptr, i64, i64 } %t100, i64 %t102, { ptr, i64, i64 } %t103)
store i64 %t104, ptr %a48
br label %endif4237
else4236:
%t105 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t105, ptr %a106
store { ptr, i64, i64 } { ptr @.str.2640, i64 4, i64 0 }, ptr %a107
%t108 = call i32 @finch_str_eq(ptr %a106, ptr %a107)
%t109 = icmp ne i32 %t108, 0
br i1 %t109, label %then4241, label %else4242
then4241:
%t110 = load ptr, ptr %a1
%t111 = icmp eq ptr %t110, null
br i1 %t111, label %panic4244, label %ok4245
panic4244:
call void @finch_panic(ptr @.str.2641, i64 1819, ptr @.str.2642)
unreachable
ok4245:
%t112 = getelementptr inbounds %S.gen.Gen, ptr %t110, i32 0, i32 20
%t113 = load ptr, ptr %a1
%t114 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t115 = load { ptr, i64, i64 }, ptr %t114
%t116 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t117 = load { ptr, i64, i64 }, ptr %t116
%t118 = call i64 @finch.gen.findEnum(ptr %t113, { ptr, i64, i64 } %t115, { ptr, i64, i64 } %t117)
%t119 = load { ptr, i64, i64 }, ptr %t112
%t120 = extractvalue { ptr, i64, i64 } %t119, 1
%t121 = icmp uge i64 %t118, %t120
br i1 %t121, label %range4246, label %inrange4247
range4246:
call void @finch_panic_index(ptr @.str.2643, i64 1819, i64 %t118, i64 %t120)
unreachable
inrange4247:
%t122 = extractvalue { ptr, i64, i64 } %t119, 0
%t123 = getelementptr inbounds %S.gen.EnumDef, ptr %t122, i64 %t118
%t124 = load %S.gen.EnumDef, ptr %t123
store %S.gen.EnumDef %t124, ptr %a125
call void @finch.copy.S_gen_EnumDef(ptr %a126, ptr %a125)
%t127 = load %S.gen.EnumDef, ptr %a126
store %S.gen.EnumDef %t127, ptr %a128
store { ptr, i64, i64 } zeroinitializer, ptr %a129
%t130 = getelementptr inbounds %S.gen.EnumDef, ptr %a128, i32 0, i32 2
%t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t130, i32 0, i32 1
%t132 = load i64, ptr %t131
store i64 0, ptr %a133
br label %for.cond4248
for.cond4248:
%t134 = load i64, ptr %a133
%t135 = icmp slt i64 %t134, %t132
br i1 %t135, label %for.body4249, label %for.end4251
for.body4249:
%t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1
%t137 = load ptr, ptr %a1
%t138 = getelementptr inbounds %S.gen.EnumDef, ptr %a128, i32 0, i32 2
%t139 = load i64, ptr %a133
%t140 = load { ptr, i64, i64 }, ptr %t138
%t141 = extractvalue { ptr, i64, i64 } %t140, 1
%t142 = icmp uge i64 %t139, %t141
br i1 %t142, label %range4252, label %inrange4253
range4252:
call void @finch_panic_index(ptr @.str.2645, i64 1822, i64 %t139, i64 %t141)
unreachable
inrange4253:
%t143 = extractvalue { ptr, i64, i64 } %t140, 0
%t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t143, i64 %t139
%t145 = load { ptr, i64, i64 }, ptr %t144
store { ptr, i64, i64 } { ptr @.str.2644, i64 21, 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.2646, i64 10, i64 0 }, ptr %a152
call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152)
%t153 = load { ptr, i64, i64 }, ptr %a150
%t154 = getelementptr inbounds %S.gen.EnumDef, ptr %a128, i32 0, i32 3
%t155 = load i64, ptr %a133
%t156 = load { ptr, i64, i64 }, ptr %t154
%t157 = extractvalue { ptr, i64, i64 } %t156, 1
%t158 = icmp uge i64 %t155, %t157
br i1 %t158, label %range4254, label %inrange4255
range4254:
call void @finch_panic_index(ptr @.str.2647, i64 1822, i64 %t155, i64 %t157)
unreachable
inrange4255:
%t159 = extractvalue { ptr, i64, i64 } %t156, 0
%t160 = getelementptr inbounds i64, ptr %t159, i64 %t155
%t161 = load i64, ptr %t160
call void @finch_str_from_int(ptr %a162, i64 %t161)
%t163 = load { ptr, i64, i64 }, ptr %a162
store { ptr, i64, i64 } %t153, ptr %a165
store { ptr, i64, i64 } %t163, ptr %a166
call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166)
%t167 = load { ptr, i64, i64 }, ptr %a164
store { ptr, i64, i64 } %t167, ptr %a169
store { ptr, i64, i64 } { ptr @.str.2648, i64 1, i64 0 }, ptr %a170
call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170)
%t171 = load { ptr, i64, i64 }, ptr %a168
%t172 = call i64 @finch.gen.md(ptr %t137, { ptr, i64, i64 } %t171)
%t173 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t172)
%t174 = load i64, ptr %t136
%t175 = add i64 %t174, 1
call void @finch_arr_reserve(ptr %a129, i64 %t175, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t176 = load ptr, ptr %a129
%t177 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 %t174
store { ptr, i64, i64 } %t173, ptr %t177
store i64 %t175, ptr %t136
br label %for.step4250
for.step4250:
%t178 = load i64, ptr %a133
%t179 = add i64 %t178, 1
store i64 %t179, ptr %a133
br label %for.cond4248
for.end4251:
%t180 = load ptr, ptr %a1
%t181 = getelementptr inbounds %S.gen.EnumDef, ptr %a128, i32 0, i32 1
%t182 = load { ptr, i64, i64 }, ptr %t181
store { ptr, i64, i64 } { ptr @.str.2649, i64 54, 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.2650, i64 10, 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 %a58
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)
%t197 = load { ptr, i64, i64 }, ptr %a194
store { ptr, i64, i64 } %t197, ptr %a199
store { ptr, i64, i64 } { ptr @.str.2651, i64 24, i64 0 }, ptr %a200
call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200)
%t201 = load { ptr, i64, i64 }, ptr %a198
%t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.2652, i64 2, i64 0 }, ptr %a203
call void @finch_str_join(ptr %a204, ptr %a129, ptr %a203)
%t205 = load { ptr, i64, i64 }, ptr %a204
store { ptr, i64, i64 } %t201, 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.2653, i64 2, i64 0 }, ptr %a212
call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212)
%t213 = load { ptr, i64, i64 }, ptr %a210
%t214 = call i64 @finch.gen.md(ptr %t180, { ptr, i64, i64 } %t213)
store i64 %t214, ptr %a48
br label %endif4243
else4242:
%t215 = load ptr, ptr %a1
%t216 = call i64 @finch.gen.md(ptr %t215, { ptr, i64, i64 } { ptr @.str.2654, i64 0, i64 0 })
store i64 %t216, ptr %a48
%t217 = load i64, ptr %a48
%t218 = load ptr, ptr %a1
%t219 = icmp eq ptr %t218, null
br i1 %t219, label %panic4256, label %ok4257
panic4256:
call void @finch_panic(ptr @.str.2655, i64 1828, ptr @.str.2656)
unreachable
ok4257:
%t220 = getelementptr inbounds %S.gen.Gen, ptr %t218, i32 0, i32 32
%t221 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t221, ptr %a222
store i32 0, ptr %a223
%t224 = call i64 @finch_map_slot(ptr %t220, ptr %a222, 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 %a223)
%t225 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t220, i32 0, i32 0
%t226 = load ptr, ptr %t225
%t227 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t226, i64 %t224
%t228 = load i32, ptr %a223
%t229 = icmp ne i32 %t228, 0
br i1 %t229, label %map.new4258, label %map.have4259
map.new4258:
%t230 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t227, i32 0, i32 1
call void @finch_str_copy(ptr %t230, ptr %a222)
%t231 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t227, i32 0, i32 2
store i64 0, ptr %t231
br label %map.have4259
map.have4259:
%t232 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t227, i32 0, i32 2
store i64 %t217, ptr %t232
%t233 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t233, ptr %a234
store { ptr, i64, i64 } { ptr @.str.2657, i64 3, i64 0 }, ptr %a235
%t236 = call i32 @finch_str_eq(ptr %a234, ptr %a235)
%t237 = icmp ne i32 %t236, 0
br i1 %t237, label %then4260, label %else4261
then4260:
store i64 -1, ptr %a238
%t239 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t240 = getelementptr inbounds { ptr, i64, i64 }, ptr %t239, i32 0, i32 1
%t241 = load i64, ptr %t240
%t242 = icmp sgt i64 %t241, 0
br i1 %t242, label %then4263, label %endif4265
then4263:
%t243 = load ptr, ptr %a1
%t244 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t245 = load { ptr, i64, i64 }, ptr %t244
%t246 = extractvalue { ptr, i64, i64 } %t245, 1
%t247 = icmp uge i64 0, %t246
br i1 %t247, label %range4266, label %inrange4267
range4266:
call void @finch_panic_index(ptr @.str.2658, i64 1832, i64 0, i64 %t246)
unreachable
inrange4267:
%t248 = extractvalue { ptr, i64, i64 } %t245, 0
%t249 = getelementptr inbounds %S.ast.Type, ptr %t248, i64 0
%t250 = load %S.ast.Type, ptr %t249
%t251 = call i64 @finch.gen.diType(ptr %t243, %S.ast.Type %t250)
store i64 %t251, ptr %a238
br label %endif4265
endif4265:
%t252 = load i64, ptr %a238
%t253 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t252)
store { ptr, i64, i64 } { ptr @.str.2659, i64 51, 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.2660, i64 11, i64 0 }, ptr %a260
call void @finch_str_concat(ptr %a258, ptr %a259, ptr %a260)
%t261 = load { ptr, i64, i64 }, ptr %a258
%t262 = load ptr, ptr %a1
%t263 = icmp eq ptr %t262, null
br i1 %t263, label %panic4268, label %ok4269
panic4268:
call void @finch_panic(ptr @.str.2661, i64 1834, ptr @.str.2662)
unreachable
ok4269:
%t264 = getelementptr inbounds %S.gen.Gen, ptr %t262, i32 0, i32 31
%t265 = load i64, ptr %a48
%t266 = load { ptr, i64, i64 }, ptr %t264
%t267 = extractvalue { ptr, i64, i64 } %t266, 1
%t268 = icmp uge i64 %t265, %t267
br i1 %t268, label %range4270, label %inrange4271
range4270:
call void @finch_panic_index(ptr @.str.2663, i64 1834, i64 %t265, i64 %t267)
unreachable
inrange4271:
%t269 = extractvalue { ptr, i64, i64 } %t266, 0
%t270 = getelementptr inbounds { ptr, i64, i64 }, ptr %t269, i64 %t265
store { ptr, i64, i64 } %t261, ptr %t270
br label %endif4262
else4261:
%t271 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t271, ptr %a272
store { ptr, i64, i64 } { ptr @.str.2664, i64 5, i64 0 }, ptr %a273
%t274 = call i32 @finch_str_eq(ptr %a272, ptr %a273)
%t275 = icmp ne i32 %t274, 0
br i1 %t275, label %then4272, label %else4273
then4272:
%t276 = load ptr, ptr %a1
%t277 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t278 = load { ptr, i64, i64 }, ptr %t277
%t279 = extractvalue { ptr, i64, i64 } %t278, 1
%t280 = icmp uge i64 0, %t279
br i1 %t280, label %range4275, label %inrange4276
range4275:
call void @finch_panic_index(ptr @.str.2665, i64 1836, i64 0, i64 %t279)
unreachable
inrange4276:
%t281 = extractvalue { ptr, i64, i64 } %t278, 0
%t282 = getelementptr inbounds %S.ast.Type, ptr %t281, i64 0
%t283 = load %S.ast.Type, ptr %t282
%t284 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t276, %S.ast.Type %t283)
store %S.gen.SizeAlign %t284, ptr %a285
%t286 = load ptr, ptr %a1
%t287 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4
%t288 = load i64, ptr %t287
call void @finch_str_from_int(ptr %a289, i64 %t288)
%t290 = load { ptr, i64, i64 }, ptr %a289
store { ptr, i64, i64 } { ptr @.str.2666, i64 19, i64 0 }, ptr %a292
store { ptr, i64, i64 } %t290, ptr %a293
call void @finch_str_concat(ptr %a291, ptr %a292, ptr %a293)
%t294 = load { ptr, i64, i64 }, ptr %a291
store { ptr, i64, i64 } %t294, ptr %a296
store { ptr, i64, i64 } { ptr @.str.2667, i64 1, i64 0 }, ptr %a297
call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297)
%t298 = load { ptr, i64, i64 }, ptr %a295
%t299 = call i64 @finch.gen.md(ptr %t286, { ptr, i64, i64 } %t298)
store i64 %t299, ptr %a300
%t301 = load ptr, ptr %a1
%t302 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t303 = load { ptr, i64, i64 }, ptr %t302
%t304 = extractvalue { ptr, i64, i64 } %t303, 1
%t305 = icmp uge i64 0, %t304
br i1 %t305, label %range4277, label %inrange4278
range4277:
call void @finch_panic_index(ptr @.str.2669, i64 1838, i64 0, i64 %t304)
unreachable
inrange4278:
%t306 = extractvalue { ptr, i64, i64 } %t303, 0
%t307 = getelementptr inbounds %S.ast.Type, ptr %t306, i64 0
%t308 = load %S.ast.Type, ptr %t307
%t309 = call i64 @finch.gen.diType(ptr %t301, %S.ast.Type %t308)
%t310 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t309)
store { ptr, i64, i64 } { ptr @.str.2668, i64 51, i64 0 }, ptr %a312
store { ptr, i64, i64 } %t310, ptr %a313
call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313)
%t314 = load { ptr, i64, i64 }, ptr %a311
store { ptr, i64, i64 } %t314, ptr %a316
store { ptr, i64, i64 } { ptr @.str.2670, i64 8, i64 0 }, ptr %a317
call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317)
%t318 = load { ptr, i64, i64 }, ptr %a315
%t319 = getelementptr inbounds %S.gen.SizeAlign, ptr %a285, i32 0, i32 0
%t320 = load i64, ptr %t319
%t321 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4
%t322 = load i64, ptr %t321
%t323 = mul i64 %t320, %t322
%t324 = mul i64 %t323, 8
call void @finch_str_from_int(ptr %a325, i64 %t324)
%t326 = load { ptr, i64, i64 }, ptr %a325
store { ptr, i64, i64 } %t318, 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.2671, i64 15, i64 0 }, ptr %a333
call void @finch_str_concat(ptr %a331, ptr %a332, ptr %a333)
%t334 = load { ptr, i64, i64 }, ptr %a331
%t335 = load i64, ptr %a300
call void @finch_str_from_int(ptr %a336, i64 %t335)
%t337 = load { ptr, i64, i64 }, ptr %a336
store { ptr, i64, i64 } %t334, ptr %a339
store { ptr, i64, i64 } %t337, ptr %a340
call void @finch_str_concat(ptr %a338, ptr %a339, ptr %a340)
%t341 = load { ptr, i64, i64 }, ptr %a338
store { ptr, i64, i64 } %t341, ptr %a343
store { ptr, i64, i64 } { ptr @.str.2672, i64 2, i64 0 }, ptr %a344
call void @finch_str_concat(ptr %a342, ptr %a343, ptr %a344)
%t345 = load { ptr, i64, i64 }, ptr %a342
%t346 = load ptr, ptr %a1
%t347 = icmp eq ptr %t346, null
br i1 %t347, label %panic4279, label %ok4280
panic4279:
call void @finch_panic(ptr @.str.2673, i64 1838, ptr @.str.2674)
unreachable
ok4280:
%t348 = getelementptr inbounds %S.gen.Gen, ptr %t346, i32 0, i32 31
%t349 = load i64, ptr %a48
%t350 = load { ptr, i64, i64 }, ptr %t348
%t351 = extractvalue { ptr, i64, i64 } %t350, 1
%t352 = icmp uge i64 %t349, %t351
br i1 %t352, label %range4281, label %inrange4282
range4281:
call void @finch_panic_index(ptr @.str.2675, i64 1838, i64 %t349, i64 %t351)
unreachable
inrange4282:
%t353 = extractvalue { ptr, i64, i64 } %t350, 0
%t354 = getelementptr inbounds { ptr, i64, i64 }, ptr %t353, i64 %t349
store { ptr, i64, i64 } %t345, ptr %t354
br label %endif4274
else4273:
%t355 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t355, ptr %a356
store { ptr, i64, i64 } { ptr @.str.2676, i64 3, i64 0 }, ptr %a357
%t358 = call i32 @finch_str_eq(ptr %a356, ptr %a357)
%t359 = icmp ne i32 %t358, 0
br label %logic.from4283
logic.from4283:
br i1 %t359, label %logic.end4285, label %logic.rhs4284
logic.rhs4284:
%t360 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t360, ptr %a361
store { ptr, i64, i64 } { ptr @.str.2677, i64 5, i64 0 }, ptr %a362
%t363 = call i32 @finch_str_eq(ptr %a361, ptr %a362)
%t364 = icmp ne i32 %t363, 0
br label %logic.rend4286
logic.rend4286:
br label %logic.end4285
logic.end4285:
%t365 = phi i1 [ true, %logic.from4283 ], [ %t364, %logic.rend4286 ]
br i1 %t365, label %then4287, label %else4288
then4287:
%t366 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2678, i64 4, i64 0 })
store %S.ast.Type %t366, ptr %a367
%t368 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t368, ptr %a369
store { ptr, i64, i64 } { ptr @.str.2679, i64 5, i64 0 }, ptr %a370
%t371 = call i32 @finch_str_eq(ptr %a369, ptr %a370)
%t372 = icmp ne i32 %t371, 0
br i1 %t372, label %then4290, label %endif4292
then4290:
%t373 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t374 = load { ptr, i64, i64 }, ptr %t373
%t375 = extractvalue { ptr, i64, i64 } %t374, 1
%t376 = icmp uge i64 0, %t375
br i1 %t376, label %range4293, label %inrange4294
range4293:
call void @finch_panic_index(ptr @.str.2680, i64 1842, i64 0, i64 %t375)
unreachable
inrange4294:
%t377 = extractvalue { ptr, i64, i64 } %t374, 0
%t378 = getelementptr inbounds %S.ast.Type, ptr %t377, i64 0
%t379 = load %S.ast.Type, ptr %t378
store %S.ast.Type %t379, ptr %a380
call void @finch.copy.S_ast_Type(ptr %a381, ptr %a380)
%t382 = load %S.ast.Type, ptr %a381
store %S.ast.Type %t382, ptr %a367
br label %endif4292
endif4292:
%t383 = load ptr, ptr %a1
%t384 = load ptr, ptr %a1
%t385 = load %S.ast.Type, ptr %a367
%t386 = call i64 @finch.gen.diType(ptr %t384, %S.ast.Type %t385)
%t387 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t386)
store { ptr, i64, i64 } { ptr @.str.2681, i64 51, i64 0 }, ptr %a389
store { ptr, i64, i64 } %t387, ptr %a390
call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390)
%t391 = load { ptr, i64, i64 }, ptr %a388
store { ptr, i64, i64 } %t391, ptr %a393
store { ptr, i64, i64 } { ptr @.str.2682, i64 11, i64 0 }, ptr %a394
call void @finch_str_concat(ptr %a392, ptr %a393, ptr %a394)
%t395 = load { ptr, i64, i64 }, ptr %a392
%t396 = call i64 @finch.gen.md(ptr %t383, { ptr, i64, i64 } %t395)
store i64 %t396, ptr %a397
%t398 = load ptr, ptr %a1
%t399 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2683, i64 3, i64 0 })
%t400 = call i64 @finch.gen.diType(ptr %t398, %S.ast.Type %t399)
store i64 %t400, ptr %a401
%t402 = load ptr, ptr %a1
%t403 = load i64, ptr %a48
%t404 = load i64, ptr %a58
%t405 = load i64, ptr %a397
%t406 = call i64 @finch.gen.dbgMember(ptr %t402, { ptr, i64, i64 } { ptr @.str.2684, i64 3, i64 0 }, i64 %t403, i64 %t404, i64 0, i64 %t405, i64 64, i64 0)
store i64 %t406, ptr %a407
%t408 = load ptr, ptr %a1
%t409 = load i64, ptr %a48
%t410 = load i64, ptr %a58
%t411 = load i64, ptr %a401
%t412 = call i64 @finch.gen.dbgMember(ptr %t408, { ptr, i64, i64 } { ptr @.str.2685, i64 3, i64 0 }, i64 %t409, i64 %t410, i64 0, i64 %t411, i64 64, i64 64)
store i64 %t412, ptr %a413
%t414 = load ptr, ptr %a1
%t415 = load i64, ptr %a48
%t416 = load i64, ptr %a58
%t417 = load i64, ptr %a401
%t418 = call i64 @finch.gen.dbgMember(ptr %t414, { ptr, i64, i64 } { ptr @.str.2686, i64 3, i64 0 }, i64 %t415, i64 %t416, i64 0, i64 %t417, i64 64, i64 128)
store i64 %t418, ptr %a419
%t420 = load %S.ast.Type, ptr %a2
%t421 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t420)
store { ptr, i64, i64 } { ptr @.str.2687, i64 52, i64 0 }, ptr %a423
store { ptr, i64, i64 } %t421, ptr %a424
call void @finch_str_concat(ptr %a422, ptr %a423, ptr %a424)
%t425 = load { ptr, i64, i64 }, ptr %a422
store { ptr, i64, i64 } %t425, ptr %a427
store { ptr, i64, i64 } { ptr @.str.2688, i64 10, i64 0 }, ptr %a428
call void @finch_str_concat(ptr %a426, ptr %a427, ptr %a428)
%t429 = load { ptr, i64, i64 }, ptr %a426
%t430 = load i64, ptr %a58
call void @finch_str_from_int(ptr %a431, i64 %t430)
%t432 = load { ptr, i64, i64 }, ptr %a431
store { ptr, i64, i64 } %t429, 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.2689, i64 37, i64 0 }, ptr %a439
call void @finch_str_concat(ptr %a437, ptr %a438, ptr %a439)
%t440 = load { ptr, i64, i64 }, ptr %a437
%t441 = load i64, ptr %a407
call void @finch_str_from_int(ptr %a442, i64 %t441)
%t443 = load { ptr, i64, i64 }, ptr %a442
store { ptr, i64, i64 } %t440, ptr %a445
store { ptr, i64, i64 } %t443, ptr %a446
call void @finch_str_concat(ptr %a444, ptr %a445, ptr %a446)
%t447 = load { ptr, i64, i64 }, ptr %a444
store { ptr, i64, i64 } %t447, ptr %a449
store { ptr, i64, i64 } { ptr @.str.2690, i64 3, i64 0 }, ptr %a450
call void @finch_str_concat(ptr %a448, ptr %a449, ptr %a450)
%t451 = load { ptr, i64, i64 }, ptr %a448
%t452 = load i64, ptr %a413
call void @finch_str_from_int(ptr %a453, i64 %t452)
%t454 = load { ptr, i64, i64 }, ptr %a453
store { ptr, i64, i64 } %t451, ptr %a456
store { ptr, i64, i64 } %t454, ptr %a457
call void @finch_str_concat(ptr %a455, ptr %a456, ptr %a457)
%t458 = load { ptr, i64, i64 }, ptr %a455
store { ptr, i64, i64 } %t458, ptr %a460
store { ptr, i64, i64 } { ptr @.str.2691, i64 3, i64 0 }, ptr %a461
call void @finch_str_concat(ptr %a459, ptr %a460, ptr %a461)
%t462 = load { ptr, i64, i64 }, ptr %a459
%t463 = load i64, ptr %a419
call void @finch_str_from_int(ptr %a464, i64 %t463)
%t465 = load { ptr, i64, i64 }, ptr %a464
store { ptr, i64, i64 } %t462, 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.2692, i64 2, 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, ptr %a1
%t475 = icmp eq ptr %t474, null
br i1 %t475, label %panic4295, label %ok4296
panic4295:
call void @finch_panic(ptr @.str.2693, i64 1849, ptr @.str.2694)
unreachable
ok4296:
%t476 = getelementptr inbounds %S.gen.Gen, ptr %t474, i32 0, i32 31
%t477 = load i64, ptr %a48
%t478 = load { ptr, i64, i64 }, ptr %t476
%t479 = extractvalue { ptr, i64, i64 } %t478, 1
%t480 = icmp uge i64 %t477, %t479
br i1 %t480, label %range4297, label %inrange4298
range4297:
call void @finch_panic_index(ptr @.str.2695, i64 1849, i64 %t477, i64 %t479)
unreachable
inrange4298:
%t481 = extractvalue { ptr, i64, i64 } %t478, 0
%t482 = getelementptr inbounds { ptr, i64, i64 }, ptr %t481, i64 %t477
store { ptr, i64, i64 } %t473, ptr %t482
br label %endif4289
else4288:
%t483 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t483, ptr %a484
store { ptr, i64, i64 } { ptr @.str.2696, i64 3, i64 0 }, ptr %a485
%t486 = call i32 @finch_str_eq(ptr %a484, ptr %a485)
%t487 = icmp ne i32 %t486, 0
br i1 %t487, label %then4299, label %else4300
then4299:
%t488 = load ptr, ptr %a1
%t489 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2697, i64 3, i64 0 })
%t490 = call i64 @finch.gen.diType(ptr %t488, %S.ast.Type %t489)
store i64 %t490, ptr %a491
%t492 = load ptr, ptr %a1
%t493 = call i64 @finch.gen.md(ptr %t492, { ptr, i64, i64 } { ptr @.str.2698, i64 66, i64 0 })
store i64 %t493, ptr %a494
%t495 = mul i64 7, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)
%t496 = call ptr @finch_alloc(i64 %t495)
%t497 = getelementptr inbounds { ptr, i64, i64 }, ptr %t496, i64 0
store { ptr, i64, i64 } { ptr @.str.2699, i64 7, i64 0 }, ptr %t497
%t498 = getelementptr inbounds { ptr, i64, i64 }, ptr %t496, i64 1
store { ptr, i64, i64 } { ptr @.str.2700, i64 3, i64 0 }, ptr %t498
%t499 = getelementptr inbounds { ptr, i64, i64 }, ptr %t496, i64 2
store { ptr, i64, i64 } { ptr @.str.2701, i64 4, i64 0 }, ptr %t499
%t500 = getelementptr inbounds { ptr, i64, i64 }, ptr %t496, i64 3
store { ptr, i64, i64 } { ptr @.str.2702, i64 3, i64 0 }, ptr %t500
%t501 = getelementptr inbounds { ptr, i64, i64 }, ptr %t496, i64 4
store { ptr, i64, i64 } { ptr @.str.2703, i64 5, i64 0 }, ptr %t501
%t502 = getelementptr inbounds { ptr, i64, i64 }, ptr %t496, i64 5
store { ptr, i64, i64 } { ptr @.str.2704, i64 4, i64 0 }, ptr %t502
%t503 = getelementptr inbounds { ptr, i64, i64 }, ptr %t496, i64 6
store { ptr, i64, i64 } { ptr @.str.2705, i64 4, i64 0 }, ptr %t503
%t504 = insertvalue { ptr, i64, i64 } undef, ptr %t496, 0
%t505 = insertvalue { ptr, i64, i64 } %t504, i64 7, 1
%t506 = insertvalue { ptr, i64, i64 } %t505, i64 7, 2
store { ptr, i64, i64 } %t506, ptr %a507
store { ptr, i64, i64 } zeroinitializer, ptr %a508
store i64 0, ptr %a509
br label %for.cond4302
for.cond4302:
%t510 = load i64, ptr %a509
%t511 = icmp slt i64 %t510, 7
br i1 %t511, label %for.body4303, label %for.end4305
for.body4303:
%t512 = load i64, ptr %a491
store i64 %t512, ptr %a513
%t514 = load i64, ptr %a509
%t515 = icmp eq i64 %t514, 0
br label %logic.from4306
logic.from4306:
br i1 %t515, label %logic.end4308, label %logic.rhs4307
logic.rhs4307:
%t516 = load i64, ptr %a509
%t517 = icmp eq i64 %t516, 4
br label %logic.rend4309
logic.rend4309:
br label %logic.end4308
logic.end4308:
%t518 = phi i1 [ true, %logic.from4306 ], [ %t517, %logic.rend4309 ]
br i1 %t518, label %then4310, label %endif4312
then4310:
%t519 = load i64, ptr %a494
store i64 %t519, ptr %a513
br label %endif4312
endif4312:
%t520 = getelementptr inbounds { ptr, i64, i64 }, ptr %a508, i32 0, i32 1
%t521 = load ptr, ptr %a1
%t522 = load i64, ptr %a509
%t523 = load { ptr, i64, i64 }, ptr %a507
%t524 = extractvalue { ptr, i64, i64 } %t523, 1
%t525 = icmp uge i64 %t522, %t524
br i1 %t525, label %range4313, label %inrange4314
range4313:
call void @finch_panic_index(ptr @.str.2707, i64 1860, i64 %t522, i64 %t524)
unreachable
inrange4314:
%t526 = extractvalue { ptr, i64, i64 } %t523, 0
%t527 = getelementptr inbounds { ptr, i64, i64 }, ptr %t526, i64 %t522
%t528 = load { ptr, i64, i64 }, ptr %t527
%t529 = load i64, ptr %a48
%t530 = load i64, ptr %a58
%t531 = load i64, ptr %a513
%t532 = load i64, ptr %a509
%t533 = mul i64 64, %t532
%t534 = call i64 @finch.gen.dbgMember(ptr %t521, { ptr, i64, i64 } %t528, i64 %t529, i64 %t530, i64 0, i64 %t531, i64 64, i64 %t533)
call void @finch_str_from_int(ptr %a535, i64 %t534)
%t536 = load { ptr, i64, i64 }, ptr %a535
store { ptr, i64, i64 } { ptr @.str.2706, i64 1, i64 0 }, ptr %a538
store { ptr, i64, i64 } %t536, ptr %a539
call void @finch_str_concat(ptr %a537, ptr %a538, ptr %a539)
%t540 = load { ptr, i64, i64 }, ptr %a537
%t541 = load i64, ptr %t520
%t542 = add i64 %t541, 1
call void @finch_arr_reserve(ptr %a508, i64 %t542, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t543 = load ptr, ptr %a508
%t544 = getelementptr inbounds { ptr, i64, i64 }, ptr %t543, i64 %t541
store { ptr, i64, i64 } %t540, ptr %t544
store i64 %t542, ptr %t520
br label %for.step4304
for.step4304:
%t545 = load i64, ptr %a509
%t546 = add i64 %t545, 1
store i64 %t546, ptr %a509
br label %for.cond4302
for.end4305:
%t547 = load %S.ast.Type, ptr %a2
%t548 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t547)
store { ptr, i64, i64 } { ptr @.str.2708, i64 52, i64 0 }, ptr %a550
store { ptr, i64, i64 } %t548, ptr %a551
call void @finch_str_concat(ptr %a549, ptr %a550, ptr %a551)
%t552 = load { ptr, i64, i64 }, ptr %a549
store { ptr, i64, i64 } %t552, ptr %a554
store { ptr, i64, i64 } { ptr @.str.2709, i64 10, i64 0 }, ptr %a555
call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555)
%t556 = load { ptr, i64, i64 }, ptr %a553
%t557 = load i64, ptr %a58
call void @finch_str_from_int(ptr %a558, i64 %t557)
%t559 = load { ptr, i64, i64 }, ptr %a558
store { ptr, i64, i64 } %t556, ptr %a561
store { ptr, i64, i64 } %t559, ptr %a562
call void @finch_str_concat(ptr %a560, ptr %a561, ptr %a562)
%t563 = load { ptr, i64, i64 }, ptr %a560
store { ptr, i64, i64 } %t563, ptr %a565
store { ptr, i64, i64 } { ptr @.str.2710, i64 36, i64 0 }, ptr %a566
call void @finch_str_concat(ptr %a564, ptr %a565, ptr %a566)
%t567 = load { ptr, i64, i64 }, ptr %a564
%t568 = getelementptr inbounds { ptr, i64, i64 }, ptr %a508, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.2711, i64 2, i64 0 }, ptr %a569
call void @finch_str_join(ptr %a570, ptr %a508, ptr %a569)
%t571 = load { ptr, i64, i64 }, ptr %a570
store { ptr, i64, i64 } %t567, ptr %a573
store { ptr, i64, i64 } %t571, ptr %a574
call void @finch_str_concat(ptr %a572, ptr %a573, ptr %a574)
%t575 = load { ptr, i64, i64 }, ptr %a572
store { ptr, i64, i64 } %t575, ptr %a577
store { ptr, i64, i64 } { ptr @.str.2712, i64 2, i64 0 }, ptr %a578
call void @finch_str_concat(ptr %a576, ptr %a577, ptr %a578)
%t579 = load { ptr, i64, i64 }, ptr %a576
%t580 = load ptr, ptr %a1
%t581 = icmp eq ptr %t580, null
br i1 %t581, label %panic4315, label %ok4316
panic4315:
call void @finch_panic(ptr @.str.2713, i64 1862, ptr @.str.2714)
unreachable
ok4316:
%t582 = getelementptr inbounds %S.gen.Gen, ptr %t580, i32 0, i32 31
%t583 = load i64, ptr %a48
%t584 = load { ptr, i64, i64 }, ptr %t582
%t585 = extractvalue { ptr, i64, i64 } %t584, 1
%t586 = icmp uge i64 %t583, %t585
br i1 %t586, label %range4317, label %inrange4318
range4317:
call void @finch_panic_index(ptr @.str.2715, i64 1862, i64 %t583, i64 %t585)
unreachable
inrange4318:
%t587 = extractvalue { ptr, i64, i64 } %t584, 0
%t588 = getelementptr inbounds { ptr, i64, i64 }, ptr %t587, i64 %t583
store { ptr, i64, i64 } %t579, ptr %t588
br label %endif4301
else4300:
%t589 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t589, ptr %a590
store { ptr, i64, i64 } { ptr @.str.2716, 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 %then4319, label %else4320
then4319:
%t594 = load ptr, ptr %a1
%t595 = icmp eq ptr %t594, null
br i1 %t595, label %panic4322, label %ok4323
panic4322:
call void @finch_panic(ptr @.str.2717, i64 1864, ptr @.str.2718)
unreachable
ok4323:
%t596 = getelementptr inbounds %S.gen.Gen, ptr %t594, i32 0, i32 15
%t597 = load ptr, ptr %a1
%t598 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t599 = load { ptr, i64, i64 }, ptr %t598
%t600 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t601 = load { ptr, i64, i64 }, ptr %t600
%t602 = call i64 @finch.gen.findStruct(ptr %t597, { ptr, i64, i64 } %t599, { ptr, i64, i64 } %t601)
%t603 = load { ptr, i64, i64 }, ptr %t596
%t604 = extractvalue { ptr, i64, i64 } %t603, 1
%t605 = icmp uge i64 %t602, %t604
br i1 %t605, label %range4324, label %inrange4325
range4324:
call void @finch_panic_index(ptr @.str.2719, i64 1864, i64 %t602, i64 %t604)
unreachable
inrange4325:
%t606 = extractvalue { ptr, i64, i64 } %t603, 0
%t607 = getelementptr inbounds %S.gen.StructDef, ptr %t606, i64 %t602
%t608 = load %S.gen.StructDef, ptr %t607
store %S.gen.StructDef %t608, ptr %a609
call void @finch.copy.S_gen_StructDef(ptr %a610, ptr %a609)
%t611 = load %S.gen.StructDef, ptr %a610
store %S.gen.StructDef %t611, ptr %a612
%t613 = load ptr, ptr %a1
%t614 = load %S.gen.StructDef, ptr %a612
%t615 = call { ptr, i64, i64 } @finch.gen.fieldOffsets(ptr %t613, %S.gen.StructDef %t614)
store { ptr, i64, i64 } %t615, ptr %a616
%t617 = load ptr, ptr %a1
%t618 = load %S.ast.Type, ptr %a2
%t619 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t617, %S.ast.Type %t618)
store %S.gen.SizeAlign %t619, ptr %a620
store { ptr, i64, i64 } zeroinitializer, ptr %a621
%t622 = getelementptr inbounds %S.gen.StructDef, ptr %a612, i32 0, i32 12
%t623 = getelementptr inbounds { ptr, i64, i64 }, ptr %t622, i32 0, i32 1
%t624 = load i64, ptr %t623
store i64 0, ptr %a625
br label %for.cond4326
for.cond4326:
%t626 = load i64, ptr %a625
%t627 = icmp slt i64 %t626, %t624
br i1 %t627, label %for.body4327, label %for.end4329
for.body4327:
%t628 = load ptr, ptr %a1
%t629 = getelementptr inbounds %S.gen.StructDef, ptr %a612, i32 0, i32 12
%t630 = load i64, ptr %a625
%t631 = load { ptr, i64, i64 }, ptr %t629
%t632 = extractvalue { ptr, i64, i64 } %t631, 1
%t633 = icmp uge i64 %t630, %t632
br i1 %t633, label %range4330, label %inrange4331
range4330:
call void @finch_panic_index(ptr @.str.2720, i64 1869, i64 %t630, i64 %t632)
unreachable
inrange4331:
%t634 = extractvalue { ptr, i64, i64 } %t631, 0
%t635 = getelementptr inbounds %S.ast.Type, ptr %t634, i64 %t630
%t636 = load %S.ast.Type, ptr %t635
%t637 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t628, %S.ast.Type %t636)
store %S.gen.SizeAlign %t637, ptr %a638
%t639 = getelementptr inbounds { ptr, i64, i64 }, ptr %a621, i32 0, i32 1
%t640 = load ptr, ptr %a1
%t641 = getelementptr inbounds %S.gen.StructDef, ptr %a612, i32 0, i32 11
%t642 = load i64, ptr %a625
%t643 = load { ptr, i64, i64 }, ptr %t641
%t644 = extractvalue { ptr, i64, i64 } %t643, 1
%t645 = icmp uge i64 %t642, %t644
br i1 %t645, label %range4332, label %inrange4333
range4332:
call void @finch_panic_index(ptr @.str.2722, i64 1870, i64 %t642, i64 %t644)
unreachable
inrange4333:
%t646 = extractvalue { ptr, i64, i64 } %t643, 0
%t647 = getelementptr inbounds { ptr, i64, i64 }, ptr %t646, i64 %t642
%t648 = load { ptr, i64, i64 }, ptr %t647
%t649 = load i64, ptr %a48
%t650 = load i64, ptr %a58
%t651 = load ptr, ptr %a1
%t652 = getelementptr inbounds %S.gen.StructDef, ptr %a612, i32 0, i32 12
%t653 = load i64, ptr %a625
%t654 = load { ptr, i64, i64 }, ptr %t652
%t655 = extractvalue { ptr, i64, i64 } %t654, 1
%t656 = icmp uge i64 %t653, %t655
br i1 %t656, label %range4334, label %inrange4335
range4334:
call void @finch_panic_index(ptr @.str.2723, i64 1870, i64 %t653, i64 %t655)
unreachable
inrange4335:
%t657 = extractvalue { ptr, i64, i64 } %t654, 0
%t658 = getelementptr inbounds %S.ast.Type, ptr %t657, i64 %t653
%t659 = load %S.ast.Type, ptr %t658
%t660 = call i64 @finch.gen.diType(ptr %t651, %S.ast.Type %t659)
%t661 = getelementptr inbounds %S.gen.SizeAlign, ptr %a638, i32 0, i32 0
%t662 = load i64, ptr %t661
%t663 = mul i64 %t662, 8
%t664 = load i64, ptr %a625
%t665 = load { ptr, i64, i64 }, ptr %a616
%t666 = extractvalue { ptr, i64, i64 } %t665, 1
%t667 = icmp uge i64 %t664, %t666
br i1 %t667, label %range4336, label %inrange4337
range4336:
call void @finch_panic_index(ptr @.str.2724, i64 1870, i64 %t664, i64 %t666)
unreachable
inrange4337:
%t668 = extractvalue { ptr, i64, i64 } %t665, 0
%t669 = getelementptr inbounds i64, ptr %t668, i64 %t664
%t670 = load i64, ptr %t669
%t671 = mul i64 %t670, 8
%t672 = call i64 @finch.gen.dbgMember(ptr %t640, { ptr, i64, i64 } %t648, i64 %t649, i64 %t650, i64 0, i64 %t660, i64 %t663, i64 %t671)
call void @finch_str_from_int(ptr %a673, i64 %t672)
%t674 = load { ptr, i64, i64 }, ptr %a673
store { ptr, i64, i64 } { ptr @.str.2721, i64 1, i64 0 }, ptr %a676
store { ptr, i64, i64 } %t674, ptr %a677
call void @finch_str_concat(ptr %a675, ptr %a676, ptr %a677)
%t678 = load { ptr, i64, i64 }, ptr %a675
%t679 = load i64, ptr %t639
%t680 = add i64 %t679, 1
call void @finch_arr_reserve(ptr %a621, i64 %t680, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t681 = load ptr, ptr %a621
%t682 = getelementptr inbounds { ptr, i64, i64 }, ptr %t681, i64 %t679
store { ptr, i64, i64 } %t678, ptr %t682
store i64 %t680, ptr %t639
br label %for.step4328
for.step4328:
%t683 = load i64, ptr %a625
%t684 = add i64 %t683, 1
store i64 %t684, ptr %a625
br label %for.cond4326
for.end4329:
%t685 = getelementptr inbounds %S.gen.StructDef, ptr %a612, i32 0, i32 1
%t686 = load { ptr, i64, i64 }, ptr %t685
store { ptr, i64, i64 } { ptr @.str.2725, i64 52, i64 0 }, ptr %a688
store { ptr, i64, i64 } %t686, ptr %a689
call void @finch_str_concat(ptr %a687, ptr %a688, ptr %a689)
%t690 = load { ptr, i64, i64 }, ptr %a687
store { ptr, i64, i64 } %t690, ptr %a692
store { ptr, i64, i64 } { ptr @.str.2726, i64 10, i64 0 }, ptr %a693
call void @finch_str_concat(ptr %a691, ptr %a692, ptr %a693)
%t694 = load { ptr, i64, i64 }, ptr %a691
%t695 = load i64, ptr %a58
call void @finch_str_from_int(ptr %a696, i64 %t695)
%t697 = load { ptr, i64, i64 }, ptr %a696
store { ptr, i64, i64 } %t694, ptr %a699
store { ptr, i64, i64 } %t697, ptr %a700
call void @finch_str_concat(ptr %a698, ptr %a699, ptr %a700)
%t701 = load { ptr, i64, i64 }, ptr %a698
store { ptr, i64, i64 } %t701, ptr %a703
store { ptr, i64, i64 } { ptr @.str.2727, i64 8, i64 0 }, ptr %a704
call void @finch_str_concat(ptr %a702, ptr %a703, ptr %a704)
%t705 = load { ptr, i64, i64 }, ptr %a702
%t706 = getelementptr inbounds %S.gen.SizeAlign, ptr %a620, i32 0, i32 0
%t707 = load i64, ptr %t706
%t708 = mul i64 %t707, 8
call void @finch_str_from_int(ptr %a709, i64 %t708)
%t710 = load { ptr, i64, i64 }, ptr %a709
store { ptr, i64, i64 } %t705, ptr %a712
store { ptr, i64, i64 } %t710, ptr %a713
call void @finch_str_concat(ptr %a711, ptr %a712, ptr %a713)
%t714 = load { ptr, i64, i64 }, ptr %a711
store { ptr, i64, i64 } %t714, ptr %a716
store { ptr, i64, i64 } { ptr @.str.2728, i64 24, i64 0 }, ptr %a717
call void @finch_str_concat(ptr %a715, ptr %a716, ptr %a717)
%t718 = load { ptr, i64, i64 }, ptr %a715
%t719 = getelementptr inbounds { ptr, i64, i64 }, ptr %a621, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.2729, i64 2, i64 0 }, ptr %a720
call void @finch_str_join(ptr %a721, ptr %a621, ptr %a720)
%t722 = load { ptr, i64, i64 }, ptr %a721
store { ptr, i64, i64 } %t718, ptr %a724
store { ptr, i64, i64 } %t722, ptr %a725
call void @finch_str_concat(ptr %a723, ptr %a724, ptr %a725)
%t726 = load { ptr, i64, i64 }, ptr %a723
store { ptr, i64, i64 } %t726, ptr %a728
store { ptr, i64, i64 } { ptr @.str.2730, i64 2, i64 0 }, ptr %a729
call void @finch_str_concat(ptr %a727, ptr %a728, ptr %a729)
%t730 = load { ptr, i64, i64 }, ptr %a727
%t731 = load ptr, ptr %a1
%t732 = icmp eq ptr %t731, null
br i1 %t732, label %panic4338, label %ok4339
panic4338:
call void @finch_panic(ptr @.str.2731, i64 1872, ptr @.str.2732)
unreachable
ok4339:
%t733 = getelementptr inbounds %S.gen.Gen, ptr %t731, i32 0, i32 31
%t734 = load i64, ptr %a48
%t735 = load { ptr, i64, i64 }, ptr %t733
%t736 = extractvalue { ptr, i64, i64 } %t735, 1
%t737 = icmp uge i64 %t734, %t736
br i1 %t737, label %range4340, label %inrange4341
range4340:
call void @finch_panic_index(ptr @.str.2733, i64 1872, i64 %t734, i64 %t736)
unreachable
inrange4341:
%t738 = extractvalue { ptr, i64, i64 } %t735, 0
%t739 = getelementptr inbounds { ptr, i64, i64 }, ptr %t738, i64 %t734
store { ptr, i64, i64 } %t730, ptr %t739
br label %endif4321
else4320:
%t740 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } { ptr @.str.2734, i64 20, i64 0 }, ptr %a742
store { ptr, i64, i64 } %t740, ptr %a743
call void @finch_str_concat(ptr %a741, ptr %a742, ptr %a743)
%t744 = load { ptr, i64, i64 }, ptr %a741
store { ptr, i64, i64 } %t744, ptr %a746
store { ptr, i64, i64 } { ptr @.str.2735, i64 39, i64 0 }, ptr %a747
call void @finch_str_concat(ptr %a745, ptr %a746, ptr %a747)
%t748 = load { ptr, i64, i64 }, ptr %a745
%t749 = load ptr, ptr %a1
%t750 = icmp eq ptr %t749, null
br i1 %t750, label %panic4342, label %ok4343
panic4342:
call void @finch_panic(ptr @.str.2736, i64 1874, ptr @.str.2737)
unreachable
ok4343:
%t751 = getelementptr inbounds %S.gen.Gen, ptr %t749, i32 0, i32 31
%t752 = load i64, ptr %a48
%t753 = load { ptr, i64, i64 }, ptr %t751
%t754 = extractvalue { ptr, i64, i64 } %t753, 1
%t755 = icmp uge i64 %t752, %t754
br i1 %t755, label %range4344, label %inrange4345
range4344:
call void @finch_panic_index(ptr @.str.2738, i64 1874, i64 %t752, i64 %t754)
unreachable
inrange4345:
%t756 = extractvalue { ptr, i64, i64 } %t753, 0
%t757 = getelementptr inbounds { ptr, i64, i64 }, ptr %t756, i64 %t752
store { ptr, i64, i64 } %t748, ptr %t757
br label %endif4321
endif4321:
br label %endif4301
endif4301:
br label %endif4289
endif4289:
br label %endif4274
endif4274:
br label %endif4262
endif4262:
%t758 = load i64, ptr %a48
ret i64 %t758
endif4243:
br label %endif4237
endif4237:
br label %endif4234
endif4234:
br label %endif4231
endif4231:
br label %endif4228
endif4228:
br label %endif4225
endif4225:
br label %endif4222
endif4222:
%t759 = load i64, ptr %a48
%t760 = load ptr, ptr %a1
%t761 = icmp eq ptr %t760, null
br i1 %t761, label %panic4346, label %ok4347
panic4346:
call void @finch_panic(ptr @.str.2739, i64 1878, ptr @.str.2740)
unreachable
ok4347:
%t762 = getelementptr inbounds %S.gen.Gen, ptr %t760, i32 0, i32 32
%t763 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t763, ptr %a764
store i32 0, ptr %a765
%t766 = call i64 @finch_map_slot(ptr %t762, ptr %a764, 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 %a765)
%t767 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t762, i32 0, i32 0
%t768 = load ptr, ptr %t767
%t769 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t768, i64 %t766
%t770 = load i32, ptr %a765
%t771 = icmp ne i32 %t770, 0
br i1 %t771, label %map.new4348, label %map.have4349
map.new4348:
%t772 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t769, i32 0, i32 1
call void @finch_str_copy(ptr %t772, ptr %a764)
%t773 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t769, i32 0, i32 2
store i64 0, ptr %t773
br label %map.have4349
map.have4349:
%t774 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t769, i32 0, i32 2
store i64 %t759, ptr %t774
%t775 = load i64, ptr %a48
ret i64 %t775
}
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
%a12 = 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
%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
%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 { ptr, i64, i64 }, align 16
%a45 = 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
%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
%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
%a87 = alloca { ptr, i64, i64 }, align 16
%a88 = alloca { ptr, i64, i64 }, align 16
%a89 = 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
%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
%a106 = alloca i64, align 16
%a112 = alloca { ptr, i64, i64 }, align 16
%a113 = alloca i32, align 16
store ptr %p0, ptr %a1
%t2 = load ptr, ptr %a1
%t3 = icmp eq ptr %t2, null
br i1 %t3, label %panic4350, label %ok4351
panic4350:
call void @finch_panic(ptr @.str.2742, i64 1883, ptr @.str.2743)
unreachable
ok4351:
%t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 35
%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.2741, i64 2, 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.2744, i64 1, i64 0 }, ptr %a14
call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14)
%t15 = load { ptr, i64, i64 }, ptr %a12
%t16 = load ptr, ptr %a1
%t17 = icmp eq ptr %t16, null
br i1 %t17, label %panic4352, label %ok4353
panic4352:
call void @finch_panic(ptr @.str.2745, i64 1883, ptr @.str.2746)
unreachable
ok4353:
%t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 36
%t19 = load i64, ptr %t18
call void @finch_str_from_int(ptr %a20, i64 %t19)
%t21 = load { ptr, i64, i64 }, ptr %a20
store { ptr, i64, i64 } %t15, 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 %a27
store { ptr, i64, i64 } { ptr @.str.2747, i64 1, i64 0 }, ptr %a28
call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28)
%t29 = load { ptr, i64, i64 }, ptr %a26
%t30 = load ptr, ptr %a1
%t31 = icmp eq ptr %t30, null
br i1 %t31, label %panic4354, label %ok4355
panic4354:
call void @finch_panic(ptr @.str.2748, i64 1883, ptr @.str.2749)
unreachable
ok4355:
%t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 34
%t33 = load i64, ptr %t32
call void @finch_str_from_int(ptr %a34, i64 %t33)
%t35 = load { ptr, i64, i64 }, ptr %a34
store { ptr, i64, i64 } %t29, 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 %a40
%t41 = load ptr, ptr %a1
%t42 = icmp eq ptr %t41, null
br i1 %t42, label %panic4356, label %ok4357
panic4356:
call void @finch_panic(ptr @.str.2750, i64 1884, ptr @.str.2751)
unreachable
ok4357:
%t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 32
%t44 = load { ptr, i64, i64 }, ptr %a40
store { ptr, i64, i64 } %t44, ptr %a45
%t46 = call i64 @finch_map_find(ptr %t43, ptr %a45, 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)
%t47 = icmp sge i64 %t46, 0
br i1 %t47, label %then4358, label %endif4360
then4358:
%t48 = load ptr, ptr %a1
%t49 = icmp eq ptr %t48, null
br i1 %t49, label %panic4361, label %ok4362
panic4361:
call void @finch_panic(ptr @.str.2752, i64 1885, ptr @.str.2753)
unreachable
ok4362:
%t50 = getelementptr inbounds %S.gen.Gen, ptr %t48, i32 0, i32 32
%t51 = load { ptr, i64, i64 }, ptr %a40
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 slt i64 %t53, 0
br i1 %t54, label %map.missing4363, label %map.found4364
map.missing4363:
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.2754, i64 1885, ptr %a55)
unreachable
map.found4364:
%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 }, i64 }, ptr %t58, i64 %t53
%t60 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t59, i32 0, i32 2
%t61 = load i64, ptr %t60
ret i64 %t61
endif4360:
%t62 = load ptr, ptr %a1
%t63 = load ptr, ptr %a1
%t64 = icmp eq ptr %t63, null
br i1 %t64, label %panic4365, label %ok4366
panic4365:
call void @finch_panic(ptr @.str.2756, i64 1887, ptr @.str.2757)
unreachable
ok4366:
%t65 = getelementptr inbounds %S.gen.Gen, ptr %t63, i32 0, i32 35
%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 } { ptr @.str.2755, i64 18, 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.2758, i64 10, 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, ptr %a1
%t78 = icmp eq ptr %t77, null
br i1 %t78, label %panic4367, label %ok4368
panic4367:
call void @finch_panic(ptr @.str.2759, i64 1887, ptr @.str.2760)
unreachable
ok4368:
%t79 = getelementptr inbounds %S.gen.Gen, ptr %t77, i32 0, i32 36
%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 } %t76, ptr %a84
store { ptr, i64, i64 } %t82, ptr %a85
call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85)
%t86 = load { ptr, i64, i64 }, ptr %a83
store { ptr, i64, i64 } %t86, ptr %a88
store { ptr, i64, i64 } { ptr @.str.2761, i64 10, i64 0 }, ptr %a89
call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89)
%t90 = load { ptr, i64, i64 }, ptr %a87
%t91 = load ptr, ptr %a1
%t92 = icmp eq ptr %t91, null
br i1 %t92, label %panic4369, label %ok4370
panic4369:
call void @finch_panic(ptr @.str.2762, i64 1887, ptr @.str.2763)
unreachable
ok4370:
%t93 = getelementptr inbounds %S.gen.Gen, ptr %t91, i32 0, i32 34
%t94 = load i64, ptr %t93
call void @finch_str_from_int(ptr %a95, i64 %t94)
%t96 = load { ptr, i64, i64 }, ptr %a95
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)
%t100 = load { ptr, i64, i64 }, ptr %a97
store { ptr, i64, i64 } %t100, ptr %a102
store { ptr, i64, i64 } { ptr @.str.2764, i64 1, i64 0 }, ptr %a103
call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103)
%t104 = load { ptr, i64, i64 }, ptr %a101
%t105 = call i64 @finch.gen.md(ptr %t62, { ptr, i64, i64 } %t104)
store i64 %t105, ptr %a106
%t107 = load i64, ptr %a106
%t108 = load ptr, ptr %a1
%t109 = icmp eq ptr %t108, null
br i1 %t109, label %panic4371, label %ok4372
panic4371:
call void @finch_panic(ptr @.str.2765, i64 1888, ptr @.str.2766)
unreachable
ok4372:
%t110 = getelementptr inbounds %S.gen.Gen, ptr %t108, i32 0, i32 32
%t111 = load { ptr, i64, i64 }, ptr %a40
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 }, 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 }, i64 }, ptr %t116, i64 %t114
%t118 = load i32, ptr %a113
%t119 = icmp ne i32 %t118, 0
br i1 %t119, label %map.new4373, label %map.have4374
map.new4373:
%t120 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t117, i32 0, i32 1
call void @finch_str_copy(ptr %t120, ptr %a112)
%t121 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t117, i32 0, i32 2
store i64 0, ptr %t121
br label %map.have4374
map.have4374:
%t122 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t117, i32 0, i32 2
store i64 %t107, ptr %t122
%t123 = load i64, ptr %a106
ret i64 %t123
}
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
%a73 = alloca { ptr, i64, i64 }, align 16
%a74 = alloca { ptr, i64, i64 }, align 16
%a75 = alloca { ptr, i64, i64 }, align 16
%a78 = alloca 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
%a92 = 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
%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
%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
%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
%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
%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
%a136 = alloca { ptr, i64, i64 }, align 16
%a137 = alloca { ptr, i64, i64 }, align 16
%a138 = 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
%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
%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
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 %panic4375, label %ok4376
panic4375:
call void @finch_panic(ptr @.str.2767, i64 1893, ptr @.str.2768)
unreachable
ok4376:
%t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 12
%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 %then4377, label %endif4379
then4377:
%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.2769, i64 4, i64 0 }, ptr %t30
store i64 %t28, ptr %t26
br label %endif4379
endif4379:
%t31 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 13
store i64 0, ptr %a32
br label %each.cond4380
each.cond4380:
%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.body4381, label %each.end4383
each.body4381:
%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.step4382
each.step4382:
%t50 = load i64, ptr %a32
%t51 = add i64 %t50, 1
store i64 %t51, ptr %a32
br label %each.cond4380
each.end4383:
%t52 = load ptr, ptr %a1
%t53 = icmp eq ptr %t52, null
br i1 %t53, label %panic4384, label %ok4385
panic4384:
call void @finch_panic(ptr @.str.2770, i64 1902, ptr @.str.2771)
unreachable
ok4385:
%t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 33
%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 %range4386, label %inrange4387
range4386:
call void @finch_panic_index(ptr @.str.2772, i64 1902, i64 %t56, i64 %t58)
unreachable
inrange4387:
%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.2774, 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.2773, i64 27, 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.2775, i64 2, i64 0 }, ptr %a75
call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75)
%t76 = load { ptr, i64, i64 }, ptr %a73
%t77 = call i64 @finch.gen.md(ptr %t64, { ptr, i64, i64 } %t76)
store i64 %t77, ptr %a78
%t79 = load ptr, ptr %a1
%t80 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 1
%t81 = load { ptr, i64, i64 }, ptr %t80
store { ptr, i64, i64 } { ptr @.str.2776, i64 30, 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.2777, i64 17, i64 0 }, ptr %a88
call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88)
%t89 = load { ptr, i64, i64 }, ptr %a86
%t90 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 11
%t91 = load { ptr, i64, i64 }, ptr %t90
store { ptr, i64, i64 } %t91, ptr %a92
%t94 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 11
%t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1
%t96 = load i64, ptr %t95
call void @finch_str_sub(ptr %a93, ptr %a92, i64 1, i64 %t96, ptr @.str.2778, i64 1904)
%t97 = load { ptr, i64, i64 }, ptr %a93
store { ptr, i64, i64 } %t89, ptr %a99
store { ptr, i64, i64 } %t97, ptr %a100
call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100)
%t101 = load { ptr, i64, i64 }, ptr %a98
store { ptr, i64, i64 } %t101, ptr %a103
store { ptr, i64, i64 } { ptr @.str.2779, i64 11, i64 0 }, ptr %a104
call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104)
%t105 = load { ptr, i64, i64 }, ptr %a102
%t106 = load i64, ptr %a63
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)
%t112 = load { ptr, i64, i64 }, ptr %a109
store { ptr, i64, i64 } %t112, ptr %a114
store { ptr, i64, i64 } { ptr @.str.2780, i64 9, i64 0 }, ptr %a115
call void @finch_str_concat(ptr %a113, ptr %a114, ptr %a115)
%t116 = load { ptr, i64, i64 }, ptr %a113
%t117 = load i64, ptr %a63
call void @finch_str_from_int(ptr %a118, i64 %t117)
%t119 = load { ptr, i64, i64 }, ptr %a118
store { ptr, i64, i64 } %t116, 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.2781, i64 8, i64 0 }, ptr %a126
call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126)
%t127 = load { ptr, i64, i64 }, ptr %a124
%t128 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11
%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 } %t127, 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.2782, i64 9, i64 0 }, ptr %a138
call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138)
%t139 = load { ptr, i64, i64 }, ptr %a136
%t140 = load i64, ptr %a78
call void @finch_str_from_int(ptr %a141, i64 %t140)
%t142 = load { ptr, i64, i64 }, ptr %a141
store { ptr, i64, i64 } %t139, 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.2783, i64 13, 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.Node, ptr %a2, i32 0, i32 11
%t152 = load i64, ptr %t151
call void @finch_str_from_int(ptr %a153, i64 %t152)
%t154 = load { ptr, i64, i64 }, ptr %a153
store { ptr, i64, i64 } %t150, 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.2784, i64 87, i64 0 }, ptr %a161
call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161)
%t162 = load { ptr, i64, i64 }, ptr %a159
%t163 = call i64 @finch.gen.md(ptr %t79, { ptr, i64, i64 } %t162)
ret i64 %t163
}
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
%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
%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
%a59 = alloca { ptr, i64, i64 }, align 16
%a60 = alloca { ptr, i64, i64 }, align 16
%a61 = 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
%a80 = 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
%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
%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
%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
%a113 = alloca 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
%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
%a141 = alloca { ptr, i64, i64 }, align 16
%a142 = alloca { ptr, i64, i64 }, align 16
%a143 = 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 %panic4388, label %ok4389
panic4388:
call void @finch_panic(ptr @.str.2785, i64 1908, ptr @.str.2786)
unreachable
ok4389:
%t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 28
%t9 = load i1, ptr %t8
%t10 = xor i1 %t9, true
br label %logic.from4390
logic.from4390:
br i1 %t10, label %logic.end4392, label %logic.rhs4391
logic.rhs4391:
%t11 = load ptr, ptr %a1
%t12 = icmp eq ptr %t11, null
br i1 %t12, label %panic4393, label %ok4394
panic4393:
call void @finch_panic(ptr @.str.2787, i64 1908, ptr @.str.2788)
unreachable
ok4394:
%t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 34
%t14 = load i64, ptr %t13
%t15 = icmp slt i64 %t14, 0
br label %logic.rend4395
logic.rend4395:
br label %logic.end4392
logic.end4392:
%t16 = phi i1 [ true, %logic.from4390 ], [ %t15, %logic.rend4395 ]
br i1 %t16, label %then4396, label %endif4398
then4396:
ret void
endif4398:
%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 %then4399, label %endif4401
then4399:
ret void
endif4401:
store { ptr, i64, i64 } { ptr @.str.2789, i64 0, i64 0 }, ptr %a23
%t24 = load ptr, ptr %a1
%t25 = icmp eq ptr %t24, null
br i1 %t25, label %panic4402, label %ok4403
panic4402:
call void @finch_panic(ptr @.str.2790, i64 1916, ptr @.str.2791)
unreachable
ok4403:
%t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 37
%t27 = load i64, ptr %t26
%t28 = icmp sgt i64 %t27, 0
br i1 %t28, label %then4404, label %endif4406
then4404:
%t29 = load ptr, ptr %a1
%t30 = icmp eq ptr %t29, null
br i1 %t30, label %panic4407, label %ok4408
panic4407:
call void @finch_panic(ptr @.str.2793, i64 1917, ptr @.str.2794)
unreachable
ok4408:
%t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 37
%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.2792, 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 %a23
br label %endif4406
endif4406:
%t39 = load ptr, ptr %a1
%t40 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } { ptr @.str.2795, i64 24, i64 0 }, ptr %a42
store { ptr, i64, i64 } %t40, ptr %a43
call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43)
%t44 = load { ptr, i64, i64 }, ptr %a41
store { ptr, i64, i64 } %t44, ptr %a46
store { ptr, i64, i64 } { ptr @.str.2796, i64 11, i64 0 }, ptr %a47
call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47)
%t48 = load { ptr, i64, i64 }, ptr %a45
%t49 = load ptr, ptr %a1
%t50 = icmp eq ptr %t49, null
br i1 %t50, label %panic4409, label %ok4410
panic4409:
call void @finch_panic(ptr @.str.2797, i64 1919, ptr @.str.2798)
unreachable
ok4410:
%t51 = getelementptr inbounds %S.gen.Gen, ptr %t49, i32 0, i32 34
%t52 = load i64, ptr %t51
call void @finch_str_from_int(ptr %a53, i64 %t52)
%t54 = load { ptr, i64, i64 }, ptr %a53
store { ptr, i64, i64 } %t48, ptr %a56
store { ptr, i64, i64 } %t54, ptr %a57
call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57)
%t58 = load { ptr, i64, i64 }, ptr %a55
store { ptr, i64, i64 } %t58, ptr %a60
store { ptr, i64, i64 } { ptr @.str.2799, i64 9, i64 0 }, ptr %a61
call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61)
%t62 = load { ptr, i64, i64 }, ptr %a59
%t63 = load ptr, ptr %a1
%t64 = icmp eq ptr %t63, null
br i1 %t64, label %panic4411, label %ok4412
panic4411:
call void @finch_panic(ptr @.str.2800, i64 1919, ptr @.str.2801)
unreachable
ok4412:
%t65 = getelementptr inbounds %S.gen.Gen, ptr %t63, i32 0, i32 33
%t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13
%t67 = load i64, ptr %t66
%t68 = load { ptr, i64, i64 }, ptr %t65
%t69 = extractvalue { ptr, i64, i64 } %t68, 1
%t70 = icmp uge i64 %t67, %t69
br i1 %t70, label %range4413, label %inrange4414
range4413:
call void @finch_panic_index(ptr @.str.2802, i64 1919, i64 %t67, i64 %t69)
unreachable
inrange4414:
%t71 = extractvalue { ptr, i64, i64 } %t68, 0
%t72 = getelementptr inbounds i64, ptr %t71, i64 %t67
%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 } %t62, 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.2803, i64 8, i64 0 }, ptr %a82
call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82)
%t83 = load { ptr, i64, i64 }, ptr %a80
%t84 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11
%t85 = load i64, ptr %t84
call void @finch_str_from_int(ptr %a86, i64 %t85)
%t87 = load { ptr, i64, i64 }, ptr %a86
store { ptr, i64, i64 } %t83, 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.2804, i64 9, i64 0 }, ptr %a94
call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94)
%t95 = load { ptr, i64, i64 }, ptr %a92
%t96 = load i64, ptr %a20
call void @finch_str_from_int(ptr %a97, i64 %t96)
%t98 = load { ptr, i64, i64 }, ptr %a97
store { ptr, i64, i64 } %t95, ptr %a100
store { ptr, i64, i64 } %t98, ptr %a101
call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101)
%t102 = load { ptr, i64, i64 }, ptr %a99
%t103 = load { ptr, i64, i64 }, ptr %a23
store { ptr, i64, i64 } %t102, ptr %a105
store { ptr, i64, i64 } %t103, ptr %a106
call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106)
%t107 = load { ptr, i64, i64 }, ptr %a104
store { ptr, i64, i64 } %t107, ptr %a109
store { ptr, i64, i64 } { ptr @.str.2805, i64 1, i64 0 }, ptr %a110
call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110)
%t111 = load { ptr, i64, i64 }, ptr %a108
%t112 = call i64 @finch.gen.md(ptr %t39, { ptr, i64, i64 } %t111)
store i64 %t112, ptr %a113
%t114 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11
%t115 = load i64, ptr %t114
%t116 = load ptr, ptr %a1
%t117 = icmp eq ptr %t116, null
br i1 %t117, label %panic4415, label %ok4416
panic4415:
call void @finch_panic(ptr @.str.2806, i64 1920, ptr @.str.2807)
unreachable
ok4416:
%t118 = getelementptr inbounds %S.gen.Gen, ptr %t116, i32 0, i32 35
store i64 %t115, ptr %t118
%t119 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12
%t120 = load i64, ptr %t119
%t121 = load ptr, ptr %a1
%t122 = icmp eq ptr %t121, null
br i1 %t122, label %panic4417, label %ok4418
panic4417:
call void @finch_panic(ptr @.str.2808, i64 1921, ptr @.str.2809)
unreachable
ok4418:
%t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 36
store i64 %t120, ptr %t123
%t124 = load ptr, ptr %a1
%t125 = load { ptr, i64, i64 }, ptr %a5
store { ptr, i64, i64 } { ptr @.str.2810, i64 41, 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.2811, i64 12, i64 0 }, ptr %a132
call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132)
%t133 = load { ptr, i64, i64 }, ptr %a130
%t134 = load i64, ptr %a113
call void @finch_str_from_int(ptr %a135, i64 %t134)
%t136 = load { ptr, i64, i64 }, ptr %a135
store { ptr, i64, i64 } %t133, 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.2812, i64 27, i64 0 }, ptr %a143
call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143)
%t144 = load { ptr, i64, i64 }, ptr %a141
call void @finch.gen.emit(ptr %t124, { ptr, i64, i64 } %t144)
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
%a26 = alloca { ptr, i64, i64 }, align 16
%a27 = alloca { ptr, i64, i64 }, align 16
%a28 = 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
%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
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.2813, i64 20, i64 0 }, ptr %t4
%t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1
store { ptr, i64, i64 } { ptr @.str.2814, 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 %panic4419, label %ok4420
panic4419:
call void @finch_panic(ptr @.str.2815, i64 1928, ptr @.str.2816)
unreachable
ok4420:
%t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 31
%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.cond4421
for.cond4421:
%t16 = load i64, ptr %a15
%t17 = icmp slt i64 %t16, %t14
br i1 %t17, label %for.body4422, label %for.end4424
for.body4422:
%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.2817, i64 1, i64 0 }, 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 %a27
store { ptr, i64, i64 } { ptr @.str.2818, i64 3, i64 0 }, ptr %a28
call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28)
%t29 = load { ptr, i64, i64 }, ptr %a26
%t30 = load ptr, ptr %a1
%t31 = icmp eq ptr %t30, null
br i1 %t31, label %panic4425, label %ok4426
panic4425:
call void @finch_panic(ptr @.str.2819, i64 1929, ptr @.str.2820)
unreachable
ok4426:
%t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 31
%t33 = load i64, ptr %a15
%t34 = load { ptr, i64, i64 }, ptr %t32
%t35 = extractvalue { ptr, i64, i64 } %t34, 1
%t36 = icmp uge i64 %t33, %t35
br i1 %t36, label %range4427, label %inrange4428
range4427:
call void @finch_panic_index(ptr @.str.2821, i64 1929, i64 %t33, i64 %t35)
unreachable
inrange4428:
%t37 = extractvalue { ptr, i64, i64 } %t34, 0
%t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 %t33
%t39 = load { ptr, i64, i64 }, ptr %t38
store { ptr, i64, i64 } %t29, ptr %a41
store { ptr, i64, i64 } %t39, ptr %a42
call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42)
%t43 = load { ptr, i64, i64 }, ptr %a40
%t44 = load i64, ptr %t18
%t45 = add i64 %t44, 1
call void @finch_arr_reserve(ptr %a9, i64 %t45, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t46 = load ptr, ptr %a9
%t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t44
store { ptr, i64, i64 } %t43, ptr %t47
store i64 %t45, ptr %t18
br label %for.step4423
for.step4423:
%t48 = load i64, ptr %a15
%t49 = add i64 %t48, 1
store i64 %t49, ptr %a15
br label %for.cond4421
for.end4424:
%t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.2822, i64 1, i64 0 }, ptr %a51
call void @finch_str_join(ptr %a52, ptr %a9, ptr %a51)
%t53 = load { ptr, i64, i64 }, ptr %a52
store { ptr, i64, i64 } %t53, ptr %a55
store { ptr, i64, i64 } { ptr @.str.2823, i64 1, i64 0 }, ptr %a56
call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56)
%t57 = load { ptr, i64, i64 }, ptr %a54
ret { ptr, i64, i64 } %t57
}
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.cond4497
n.cond4497:
%t6 = load i64, ptr %a5
%t7 = icmp slt i64 %t6, %t4
br i1 %t7, label %n.body4498, label %n.end4499
n.body4498:
%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.cond4497
n.end4499:
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
%a27 = alloca { ptr, i64, i64 }, align 16
%a28 = 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
%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
%a103 = alloca %S.ast.Node, align 16
%a104 = alloca %S.ast.Node, align 16
%a106 = alloca %S.ast.Node, align 16
%a107 = alloca { ptr, i64, i64 }, align 16
%a112 = alloca { ptr, i64, i64 }, align 16
%a113 = alloca { ptr, i64, i64 }, align 16
%a119 = alloca { ptr, i64, i64 }, align 16
%a120 = alloca { ptr, i64, i64 }, align 16
%a134 = alloca i64, align 16
%a162 = alloca { ptr, i64, i64 }, align 16
%a167 = alloca { ptr, i64, i64 }, align 16
%a168 = alloca { ptr, i64, i64 }, align 16
%a171 = alloca { ptr, i64, i64 }, align 16
%a184 = alloca { ptr, i64, i64 }, align 16
%a191 = alloca { ptr, i64, i64 }, align 16
%a192 = alloca { ptr, i64, i64 }, align 16
%a200 = alloca { ptr, i64, i64 }, align 16
%a201 = alloca { ptr, i64, i64 }, align 16
%a209 = alloca { ptr, i64, i64 }, align 16
%a210 = alloca { ptr, i64, i64 }, align 16
%a213 = alloca %S.ast.Type, align 16
%a226 = alloca %S.ast.Type, align 16
%a227 = alloca %S.ast.Type, align 16
%a249 = alloca i64, align 16
%a263 = alloca %S.ast.Type, align 16
%a264 = alloca %S.ast.Type, align 16
%a266 = alloca %S.ast.Type, 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
%a278 = alloca { ptr, i64, i64 }, align 16
%a279 = alloca { ptr, i64, i64 }, align 16
%a280 = 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
%a293 = alloca { ptr, i64, i64 }, align 16
%a382 = alloca { ptr, i64, i64 }, align 16
%a383 = 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
%a404 = alloca { ptr, i64, i64 }, align 16
%a405 = alloca { ptr, i64, i64 }, align 16
%a406 = 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
%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
%a434 = alloca { ptr, i64, i64 }, align 16
%a436 = alloca { ptr, i64, i64 }, align 16
%a437 = alloca { ptr, i64, i64 }, align 16
%a438 = 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
%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
%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
%a482 = alloca { ptr, i64, i64 }, align 16
%a483 = alloca { ptr, i64, i64 }, align 16
%a484 = 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
%a492 = alloca { ptr, i64, i64 }, align 16
%a493 = alloca { ptr, i64, i64 }, align 16
%a499 = 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
%a506 = alloca { ptr, i64, i64 }, align 16
%a507 = alloca { ptr, i64, i64 }, align 16
%a508 = alloca { ptr, i64, i64 }, align 16
%a514 = alloca { ptr, i64, i64 }, align 16
%a515 = 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
%a521 = alloca { ptr, i64, i64 }, align 16
%a522 = alloca { ptr, i64, i64 }, align 16
%a523 = 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 %panic4429, label %ok4430
panic4429:
call void @finch_panic(ptr @.str.2824, i64 1935, ptr @.str.2825)
unreachable
ok4430:
%t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 14
%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 %range4431, label %inrange4432
range4431:
call void @finch_panic_index(ptr @.str.2826, i64 1935, i64 %t6, i64 %t8)
unreachable
inrange4432:
%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 %panic4433, label %ok4434
panic4433:
call void @finch_panic(ptr @.str.2827, i64 1935, ptr @.str.2828)
unreachable
ok4434:
%t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 12
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
store %S.gen.FnSig %t18, ptr %t15
%t19 = load ptr, ptr %a1
%t20 = icmp eq ptr %t19, null
br i1 %t20, label %panic4435, label %ok4436
panic4435:
call void @finch_panic(ptr @.str.2829, i64 1936, ptr @.str.2830)
unreachable
ok4436:
%t21 = getelementptr inbounds %S.gen.Gen, ptr %t19, i32 0, i32 12
%t22 = getelementptr inbounds %S.gen.FnSig, ptr %t21, i32 0, i32 0
%t23 = load { ptr, i64, i64 }, ptr %t22
%t24 = load ptr, ptr %a1
%t25 = icmp eq ptr %t24, null
br i1 %t25, label %panic4437, label %ok4438
panic4437:
call void @finch_panic(ptr @.str.2831, i64 1936, ptr @.str.2832)
unreachable
ok4438:
%t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 13
store { ptr, i64, i64 } %t23, ptr %a27
call void @finch_str_copy(ptr %a28, ptr %a27)
%t29 = load { ptr, i64, i64 }, ptr %a28
store { ptr, i64, i64 } %t29, ptr %t26
%t30 = load ptr, ptr %a1
%t31 = icmp eq ptr %t30, null
br i1 %t31, label %panic4439, label %ok4440
panic4439:
call void @finch_panic(ptr @.str.2833, i64 1937, ptr @.str.2834)
unreachable
ok4440:
%t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 12
%t33 = getelementptr inbounds %S.gen.FnSig, ptr %t32, i32 0, i32 6
%t34 = load { ptr, i64, i64 }, ptr %t33
%t35 = load ptr, ptr %a1
%t36 = icmp eq ptr %t35, null
br i1 %t36, label %panic4441, label %ok4442
panic4441:
call void @finch_panic(ptr @.str.2835, i64 1937, ptr @.str.2836)
unreachable
ok4442:
%t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 17
store { ptr, i64, i64 } %t34, ptr %a38
call void @finch.copy.arr_str(ptr %a39, ptr %a38)
%t40 = load { ptr, i64, i64 }, ptr %a39
store { ptr, i64, i64 } %t40, ptr %t37
%t41 = load ptr, ptr %a1
%t42 = icmp eq ptr %t41, null
br i1 %t42, label %panic4443, label %ok4444
panic4443:
call void @finch_panic(ptr @.str.2837, i64 1938, ptr @.str.2838)
unreachable
ok4444:
%t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 12
%t44 = getelementptr inbounds %S.gen.FnSig, ptr %t43, i32 0, i32 7
%t45 = load { ptr, i64, i64 }, ptr %t44
%t46 = load ptr, ptr %a1
%t47 = icmp eq ptr %t46, null
br i1 %t47, label %panic4445, label %ok4446
panic4445:
call void @finch_panic(ptr @.str.2839, i64 1938, ptr @.str.2840)
unreachable
ok4446:
%t48 = getelementptr inbounds %S.gen.Gen, ptr %t46, i32 0, i32 18
store { ptr, i64, i64 } %t45, ptr %a49
call void @finch.copy.arr_S_ast_Type(ptr %a50, ptr %a49)
%t51 = load { ptr, i64, i64 }, ptr %a50
store { ptr, i64, i64 } %t51, ptr %t48
%t52 = load ptr, ptr %a1
%t53 = icmp eq ptr %t52, null
br i1 %t53, label %panic4447, label %ok4448
panic4447:
call void @finch_panic(ptr @.str.2842, i64 1939, ptr @.str.2843)
unreachable
ok4448:
%t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 19
store { ptr, i64, i64 } { ptr @.str.2841, i64 0, i64 0 }, ptr %t54
%t55 = load ptr, ptr %a1
%t56 = icmp eq ptr %t55, null
br i1 %t56, label %panic4449, label %ok4450
panic4449:
call void @finch_panic(ptr @.str.2844, i64 1940, ptr @.str.2845)
unreachable
ok4450:
%t57 = getelementptr inbounds %S.gen.Gen, ptr %t55, i32 0, i32 12
%t58 = getelementptr inbounds %S.gen.FnSig, ptr %t57, i32 0, i32 7
%t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t58, i32 0, i32 1
%t60 = load i64, ptr %t59
%t61 = icmp sgt i64 %t60, 0
br i1 %t61, label %then4451, label %endif4453
then4451:
%t62 = load ptr, ptr %a1
%t63 = icmp eq ptr %t62, null
br i1 %t63, label %panic4454, label %ok4455
panic4454:
call void @finch_panic(ptr @.str.2847, i64 1941, ptr @.str.2848)
unreachable
ok4455:
%t64 = getelementptr inbounds %S.gen.Gen, ptr %t62, i32 0, i32 12
%t65 = getelementptr inbounds %S.gen.FnSig, ptr %t64, i32 0, i32 8
%t66 = load { ptr, i64, i64 }, ptr %t65
store { ptr, i64, i64 } { ptr @.str.2846, i64 17, 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.2849, i64 1, i64 0 }, ptr %a73
call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73)
%t74 = load { ptr, i64, i64 }, ptr %a71
%t75 = load ptr, ptr %a1
%t76 = icmp eq ptr %t75, null
br i1 %t76, label %panic4456, label %ok4457
panic4456:
call void @finch_panic(ptr @.str.2850, i64 1941, ptr @.str.2851)
unreachable
ok4457:
%t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 19
store { ptr, i64, i64 } %t74, ptr %t77
br label %endif4453
endif4453:
%t78 = load ptr, ptr %a1
%t79 = icmp eq ptr %t78, null
br i1 %t79, label %panic4458, label %ok4459
panic4458:
call void @finch_panic(ptr @.str.2852, i64 1943, ptr @.str.2853)
unreachable
ok4459:
%t80 = getelementptr inbounds %S.gen.Gen, ptr %t78, i32 0, i32 0
%t81 = load ptr, ptr %a1
%t82 = icmp eq ptr %t81, null
br i1 %t82, label %panic4460, label %ok4461
panic4460:
call void @finch_panic(ptr @.str.2854, i64 1943, ptr @.str.2855)
unreachable
ok4461:
%t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 12
%t84 = getelementptr inbounds %S.gen.FnSig, ptr %t83, i32 0, i32 16
%t85 = load i64, ptr %t84
%t86 = load { ptr, i64, i64 }, ptr %t80
%t87 = extractvalue { ptr, i64, i64 } %t86, 1
%t88 = icmp uge i64 %t85, %t87
br i1 %t88, label %range4462, label %inrange4463
range4462:
call void @finch_panic_index(ptr @.str.2856, i64 1943, i64 %t85, i64 %t87)
unreachable
inrange4463:
%t89 = extractvalue { ptr, i64, i64 } %t86, 0
%t90 = getelementptr inbounds %S.ast.Program, ptr %t89, i64 %t85
%t91 = getelementptr inbounds %S.ast.Program, ptr %t90, i32 0, i32 8
%t92 = load ptr, ptr %a1
%t93 = icmp eq ptr %t92, null
br i1 %t93, label %panic4464, label %ok4465
panic4464:
call void @finch_panic(ptr @.str.2857, i64 1943, ptr @.str.2858)
unreachable
ok4465:
%t94 = getelementptr inbounds %S.gen.Gen, ptr %t92, i32 0, i32 12
%t95 = getelementptr inbounds %S.gen.FnSig, ptr %t94, i32 0, i32 17
%t96 = load i64, ptr %t95
%t97 = load { ptr, i64, i64 }, ptr %t91
%t98 = extractvalue { ptr, i64, i64 } %t97, 1
%t99 = icmp uge i64 %t96, %t98
br i1 %t99, label %range4466, label %inrange4467
range4466:
call void @finch_panic_index(ptr @.str.2859, i64 1943, i64 %t96, i64 %t98)
unreachable
inrange4467:
%t100 = extractvalue { ptr, i64, i64 } %t97, 0
%t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 %t96
%t102 = load %S.ast.Node, ptr %t101
store %S.ast.Node %t102, ptr %a103
call void @finch.copy.S_ast_Node(ptr %a104, ptr %a103)
%t105 = load %S.ast.Node, ptr %a104
store %S.ast.Node %t105, ptr %a106
store { ptr, i64, i64 } zeroinitializer, ptr %a107
%t108 = load { ptr, i64, i64 }, ptr %a107
%t109 = load ptr, ptr %a1
%t110 = icmp eq ptr %t109, null
br i1 %t110, label %panic4468, label %ok4469
panic4468:
call void @finch_panic(ptr @.str.2860, i64 1945, ptr @.str.2861)
unreachable
ok4469:
%t111 = getelementptr inbounds %S.gen.Gen, ptr %t109, i32 0, i32 4
store { ptr, i64, i64 } %t108, ptr %a112
call void @finch.copy.arr_str(ptr %a113, ptr %a112)
%t114 = load { ptr, i64, i64 }, ptr %a113
store { ptr, i64, i64 } %t114, ptr %t111
%t115 = load { ptr, i64, i64 }, ptr %a107
%t116 = load ptr, ptr %a1
%t117 = icmp eq ptr %t116, null
br i1 %t117, label %panic4470, label %ok4471
panic4470:
call void @finch_panic(ptr @.str.2862, i64 1946, ptr @.str.2863)
unreachable
ok4471:
%t118 = getelementptr inbounds %S.gen.Gen, ptr %t116, i32 0, i32 5
store { ptr, i64, i64 } %t115, ptr %a119
call void @finch.copy.arr_str(ptr %a120, ptr %a119)
%t121 = load { ptr, i64, i64 }, ptr %a120
store { ptr, i64, i64 } %t121, ptr %t118
%t122 = load ptr, ptr %a1
%t123 = icmp eq ptr %t122, null
br i1 %t123, label %panic4472, label %ok4473
panic4472:
call void @finch_panic(ptr @.str.2864, i64 1947, ptr @.str.2865)
unreachable
ok4473:
%t124 = getelementptr inbounds %S.gen.Gen, ptr %t122, i32 0, i32 6
store i64 0, ptr %t124
%t125 = load ptr, ptr %a1
%t126 = icmp eq ptr %t125, null
br i1 %t126, label %panic4474, label %ok4475
panic4474:
call void @finch_panic(ptr @.str.2866, i64 1948, ptr @.str.2867)
unreachable
ok4475:
%t127 = getelementptr inbounds %S.gen.Gen, ptr %t125, i32 0, i32 9
store i1 false, ptr %t127
%t128 = load ptr, ptr %a1
%t129 = icmp eq ptr %t128, null
br i1 %t129, label %panic4476, label %ok4477
panic4476:
call void @finch_panic(ptr @.str.2868, i64 1949, ptr @.str.2869)
unreachable
ok4477:
%t130 = getelementptr inbounds %S.gen.Gen, ptr %t128, i32 0, i32 23
store i64 0, ptr %t130
%t131 = load ptr, ptr %a1
%t132 = icmp eq ptr %t131, null
br i1 %t132, label %panic4478, label %ok4479
panic4478:
call void @finch_panic(ptr @.str.2870, i64 1950, ptr @.str.2871)
unreachable
ok4479:
%t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 34
store i64 -1, ptr %t133
store i64 -1, ptr %a134
%t135 = load ptr, ptr %a1
%t136 = icmp eq ptr %t135, null
br i1 %t136, label %panic4480, label %ok4481
panic4480:
call void @finch_panic(ptr @.str.2872, i64 1952, ptr @.str.2873)
unreachable
ok4481:
%t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 28
%t138 = load i1, ptr %t137
br i1 %t138, label %then4482, label %endif4484
then4482:
%t139 = load ptr, ptr %a1
%t140 = load %S.ast.Node, ptr %a106
%t141 = call i64 @finch.gen.dbgSubprogram(ptr %t139, %S.ast.Node %t140)
store i64 %t141, ptr %a134
%t142 = load i64, ptr %a134
%t143 = load ptr, ptr %a1
%t144 = icmp eq ptr %t143, null
br i1 %t144, label %panic4485, label %ok4486
panic4485:
call void @finch_panic(ptr @.str.2874, i64 1954, ptr @.str.2875)
unreachable
ok4486:
%t145 = getelementptr inbounds %S.gen.Gen, ptr %t143, i32 0, i32 34
store i64 %t142, ptr %t145
%t146 = getelementptr inbounds %S.ast.Node, ptr %a106, i32 0, i32 11
%t147 = load i64, ptr %t146
%t148 = load ptr, ptr %a1
%t149 = icmp eq ptr %t148, null
br i1 %t149, label %panic4487, label %ok4488
panic4487:
call void @finch_panic(ptr @.str.2876, i64 1955, ptr @.str.2877)
unreachable
ok4488:
%t150 = getelementptr inbounds %S.gen.Gen, ptr %t148, i32 0, i32 35
store i64 %t147, ptr %t150
%t151 = getelementptr inbounds %S.ast.Node, ptr %a106, i32 0, i32 12
%t152 = load i64, ptr %t151
%t153 = load ptr, ptr %a1
%t154 = icmp eq ptr %t153, null
br i1 %t154, label %panic4489, label %ok4490
panic4489:
call void @finch_panic(ptr @.str.2878, i64 1956, ptr @.str.2879)
unreachable
ok4490:
%t155 = getelementptr inbounds %S.gen.Gen, ptr %t153, i32 0, i32 36
store i64 %t152, ptr %t155
br label %endif4484
endif4484:
%t156 = load ptr, ptr %a1
%t157 = icmp eq ptr %t156, null
br i1 %t157, label %panic4491, label %ok4492
panic4491:
call void @finch_panic(ptr @.str.2880, i64 1958, ptr @.str.2881)
unreachable
ok4492:
%t158 = getelementptr inbounds %S.gen.Gen, ptr %t156, i32 0, i32 42
store i1 false, ptr %t158
%t159 = load ptr, ptr %a1
%t160 = icmp eq ptr %t159, null
br i1 %t160, label %panic4493, label %ok4494
panic4493:
call void @finch_panic(ptr @.str.2882, i64 1959, ptr @.str.2883)
unreachable
ok4494:
%t161 = getelementptr inbounds %S.gen.Gen, ptr %t159, i32 0, i32 44
store i64 0, ptr %t161
store { ptr, i64, i64 } zeroinitializer, ptr %a162
%t163 = load { ptr, i64, i64 }, ptr %a162
%t164 = load ptr, ptr %a1
%t165 = icmp eq ptr %t164, null
br i1 %t165, label %panic4495, label %ok4496
panic4495:
call void @finch_panic(ptr @.str.2884, i64 1961, ptr @.str.2885)
unreachable
ok4496:
%t166 = getelementptr inbounds %S.gen.Gen, ptr %t164, i32 0, i32 10
store { ptr, i64, i64 } %t163, ptr %a167
call void @finch.copy.arr_S_gen_Scope(ptr %a168, ptr %a167)
%t169 = load { ptr, i64, i64 }, ptr %a168
store { ptr, i64, i64 } %t169, ptr %t166
%t170 = load ptr, ptr %a1
call void @finch.gen.pushScope(ptr %t170)
store { ptr, i64, i64 } zeroinitializer, ptr %a171
%t172 = load ptr, ptr %a1
%t173 = icmp eq ptr %t172, null
br i1 %t173, label %panic4500, label %ok4501
panic4500:
call void @finch_panic(ptr @.str.2886, i64 1964, ptr @.str.2887)
unreachable
ok4501:
%t174 = getelementptr inbounds %S.gen.Gen, ptr %t172, i32 0, i32 12
%t175 = getelementptr inbounds %S.gen.FnSig, ptr %t174, i32 0, i32 2
%t176 = getelementptr inbounds { ptr, i64, i64 }, ptr %t175, i32 0, i32 1
%t177 = load i64, ptr %t176
%t178 = icmp sgt i64 %t177, 0
br i1 %t178, label %then4502, label %endif4504
then4502:
%t179 = getelementptr inbounds { ptr, i64, i64 }, ptr %a171, i32 0, i32 1
%t180 = load i64, ptr %t179
%t181 = add i64 %t180, 1
call void @finch_arr_reserve(ptr %a171, i64 %t181, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t182 = load ptr, ptr %a171
%t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i64 %t180
store { ptr, i64, i64 } { ptr @.str.2888, i64 9, i64 0 }, ptr %t183
store i64 %t181, ptr %t179
store { ptr, i64, i64 } { ptr @.str.2889, i64 6, i64 0 }, ptr %a184
%t185 = load ptr, ptr %a1
%t186 = icmp eq ptr %t185, null
br i1 %t186, label %panic4505, label %ok4506
panic4505:
call void @finch_panic(ptr @.str.2890, i64 1968, ptr @.str.2891)
unreachable
ok4506:
%t187 = getelementptr inbounds %S.gen.Gen, ptr %t185, i32 0, i32 12
%t188 = getelementptr inbounds %S.gen.FnSig, ptr %t187, i32 0, i32 4
%t189 = load i1, ptr %t188
br i1 %t189, label %then4507, label %endif4509
then4507:
store { ptr, i64, i64 } { ptr @.str.2892, i64 4, i64 0 }, ptr %a184
br label %endif4509
endif4509:
%t190 = load { ptr, i64, i64 }, ptr %a184
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 zeroinitializer, { ptr, i64, i64 } %t193, 0
%t195 = load ptr, ptr %a1
%t196 = icmp eq ptr %t195, null
br i1 %t196, label %panic4510, label %ok4511
panic4510:
call void @finch_panic(ptr @.str.2893, i64 1971, ptr @.str.2894)
unreachable
ok4511:
%t197 = getelementptr inbounds %S.gen.Gen, ptr %t195, i32 0, i32 12
%t198 = getelementptr inbounds %S.gen.FnSig, ptr %t197, i32 0, i32 2
%t199 = load { ptr, i64, i64 }, ptr %t198
store { ptr, i64, i64 } %t199, ptr %a200
call void @finch_str_copy(ptr %a201, ptr %a200)
%t202 = load { ptr, i64, i64 }, ptr %a201
%t203 = insertvalue %S.ast.Type %t194, { ptr, i64, i64 } %t202, 2
%t204 = load ptr, ptr %a1
%t205 = icmp eq ptr %t204, null
br i1 %t205, label %panic4512, label %ok4513
panic4512:
call void @finch_panic(ptr @.str.2895, i64 1971, ptr @.str.2896)
unreachable
ok4513:
%t206 = getelementptr inbounds %S.gen.Gen, ptr %t204, i32 0, i32 12
%t207 = getelementptr inbounds %S.gen.FnSig, ptr %t206, i32 0, i32 3
%t208 = load { ptr, i64, i64 }, ptr %t207
store { ptr, i64, i64 } %t208, ptr %a209
call void @finch_str_copy(ptr %a210, ptr %a209)
%t211 = load { ptr, i64, i64 }, ptr %a210
%t212 = insertvalue %S.ast.Type %t203, { ptr, i64, i64 } %t211, 3
store %S.ast.Type %t212, ptr %a213
%t214 = load ptr, ptr %a1
%t215 = icmp eq ptr %t214, null
br i1 %t215, label %panic4514, label %ok4515
panic4514:
call void @finch_panic(ptr @.str.2897, i64 1972, ptr @.str.2898)
unreachable
ok4515:
%t216 = getelementptr inbounds %S.gen.Gen, ptr %t214, i32 0, i32 10
%t217 = load { ptr, i64, i64 }, ptr %t216
%t218 = extractvalue { ptr, i64, i64 } %t217, 1
%t219 = icmp uge i64 0, %t218
br i1 %t219, label %range4516, label %inrange4517
range4516:
call void @finch_panic_index(ptr @.str.2899, i64 1972, i64 0, i64 %t218)
unreachable
inrange4517:
%t220 = extractvalue { ptr, i64, i64 } %t217, 0
%t221 = getelementptr inbounds %S.gen.Scope, ptr %t220, i64 0
%t222 = getelementptr inbounds %S.gen.Scope, ptr %t221, i32 0, i32 0
%t223 = getelementptr inbounds { ptr, i64, i64 }, ptr %t222, i32 0, i32 1
%t224 = insertvalue %S.gen.Var zeroinitializer, { ptr, i64, i64 } { ptr @.str.2900, i64 4, i64 0 }, 0
%t225 = load %S.ast.Type, ptr %a213
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.Var %t224, %S.ast.Type %t228, 1
%t230 = insertvalue %S.gen.Var %t229, { ptr, i64, i64 } { ptr @.str.2901, i64 5, i64 0 }, 2
%t231 = insertvalue %S.gen.Var %t230, i1 false, 3
%t232 = load i64, ptr %t223
%t233 = add i64 %t232, 1
call void @finch_arr_reserve(ptr %t222, i64 %t233, i64 ptrtoint (ptr getelementptr (%S.gen.Var, ptr null, i32 1) to i64))
%t234 = load ptr, ptr %t222
%t235 = getelementptr inbounds %S.gen.Var, ptr %t234, i64 %t232
store %S.gen.Var %t231, ptr %t235
store i64 %t233, ptr %t223
%t236 = load ptr, ptr %a1
%t237 = icmp eq ptr %t236, null
br i1 %t237, label %panic4518, label %ok4519
panic4518:
call void @finch_panic(ptr @.str.2902, i64 1973, ptr @.str.2903)
unreachable
ok4519:
%t238 = getelementptr inbounds %S.gen.Gen, ptr %t236, i32 0, i32 28
%t239 = load i1, ptr %t238
br i1 %t239, label %then4520, label %endif4522
then4520:
%t240 = load ptr, ptr %a1
%t241 = load %S.ast.Node, ptr %a106
%t242 = load %S.ast.Type, ptr %a213
call void @finch.gen.dbgVariable(ptr %t240, %S.ast.Node %t241, { ptr, i64, i64 } { ptr @.str.2904, i64 4, i64 0 }, %S.ast.Type %t242, { ptr, i64, i64 } { ptr @.str.2905, i64 5, i64 0 })
br label %endif4522
endif4522:
br label %endif4504
endif4504:
%t243 = load ptr, ptr %a1
%t244 = icmp eq ptr %t243, null
br i1 %t244, label %panic4523, label %ok4524
panic4523:
call void @finch_panic(ptr @.str.2906, i64 1978, ptr @.str.2907)
unreachable
ok4524:
%t245 = getelementptr inbounds %S.gen.Gen, ptr %t243, i32 0, i32 12
%t246 = getelementptr inbounds %S.gen.FnSig, ptr %t245, i32 0, i32 13
%t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i32 0, i32 1
%t248 = load i64, ptr %t247
store i64 0, ptr %a249
br label %for.cond4525
for.cond4525:
%t250 = load i64, ptr %a249
%t251 = icmp slt i64 %t250, %t248
br i1 %t251, label %for.body4526, label %for.end4528
for.body4526:
%t252 = load ptr, ptr %a1
%t253 = icmp eq ptr %t252, null
br i1 %t253, label %panic4529, label %ok4530
panic4529:
call void @finch_panic(ptr @.str.2908, i64 1979, ptr @.str.2909)
unreachable
ok4530:
%t254 = getelementptr inbounds %S.gen.Gen, ptr %t252, i32 0, i32 12
%t255 = getelementptr inbounds %S.gen.FnSig, ptr %t254, i32 0, i32 13
%t256 = load i64, ptr %a249
%t257 = load { ptr, i64, i64 }, ptr %t255
%t258 = extractvalue { ptr, i64, i64 } %t257, 1
%t259 = icmp uge i64 %t256, %t258
br i1 %t259, label %range4531, label %inrange4532
range4531:
call void @finch_panic_index(ptr @.str.2910, i64 1979, i64 %t256, i64 %t258)
unreachable
inrange4532:
%t260 = extractvalue { ptr, i64, i64 } %t257, 0
%t261 = getelementptr inbounds %S.ast.Type, ptr %t260, i64 %t256
%t262 = load %S.ast.Type, ptr %t261
store %S.ast.Type %t262, ptr %a263
call void @finch.copy.S_ast_Type(ptr %a264, ptr %a263)
%t265 = load %S.ast.Type, ptr %a264
store %S.ast.Type %t265, ptr %a266
%t267 = getelementptr inbounds { ptr, i64, i64 }, ptr %a171, i32 0, i32 1
%t268 = load ptr, ptr %a1
%t269 = load %S.ast.Type, ptr %a266
%t270 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t268, %S.ast.Type %t269)
store { ptr, i64, i64 } %t270, ptr %a272
store { ptr, i64, i64 } { ptr @.str.2911, i64 3, i64 0 }, ptr %a273
call void @finch_str_concat(ptr %a271, ptr %a272, ptr %a273)
%t274 = load { ptr, i64, i64 }, ptr %a271
%t275 = load i64, ptr %a249
call void @finch_str_from_int(ptr %a276, i64 %t275)
%t277 = load { ptr, i64, i64 }, ptr %a276
store { ptr, i64, i64 } %t274, ptr %a279
store { ptr, i64, i64 } %t277, ptr %a280
call void @finch_str_concat(ptr %a278, ptr %a279, ptr %a280)
%t281 = load { ptr, i64, i64 }, ptr %a278
%t282 = load i64, ptr %t267
%t283 = add i64 %t282, 1
call void @finch_arr_reserve(ptr %a171, i64 %t283, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t284 = load ptr, ptr %a171
%t285 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i64 %t282
store { ptr, i64, i64 } %t281, ptr %t285
store i64 %t283, ptr %t267
%t286 = load i64, ptr %a249
call void @finch_str_from_int(ptr %a287, i64 %t286)
%t288 = load { ptr, i64, i64 }, ptr %a287
store { ptr, i64, i64 } { ptr @.str.2912, i64 2, i64 0 }, ptr %a290
store { ptr, i64, i64 } %t288, ptr %a291
call void @finch_str_concat(ptr %a289, ptr %a290, ptr %a291)
%t292 = load { ptr, i64, i64 }, ptr %a289
store { ptr, i64, i64 } %t292, ptr %a293
%t294 = load ptr, ptr %a1
%t295 = load %S.ast.Type, ptr %a266
%t296 = call i1 @finch.gen.owning(ptr %t294, %S.ast.Type %t295)
br label %logic.from4533
logic.from4533:
br i1 %t296, label %logic.rhs4534, label %logic.end4535
logic.rhs4534:
%t297 = load ptr, ptr %a1
%t298 = icmp eq ptr %t297, null
br i1 %t298, label %panic4536, label %ok4537
panic4536:
call void @finch_panic(ptr @.str.2913, i64 1982, ptr @.str.2914)
unreachable
ok4537:
%t299 = getelementptr inbounds %S.gen.Gen, ptr %t297, i32 0, i32 12
%t300 = getelementptr inbounds %S.gen.FnSig, ptr %t299, i32 0, i32 15
%t301 = load i64, ptr %a249
%t302 = load { ptr, i64, i64 }, ptr %t300
%t303 = extractvalue { ptr, i64, i64 } %t302, 1
%t304 = icmp uge i64 %t301, %t303
br i1 %t304, label %range4538, label %inrange4539
range4538:
call void @finch_panic_index(ptr @.str.2915, i64 1982, i64 %t301, i64 %t303)
unreachable
inrange4539:
%t305 = extractvalue { ptr, i64, i64 } %t302, 0
%t306 = getelementptr inbounds i1, ptr %t305, i64 %t301
%t307 = load i1, ptr %t306
%t308 = xor i1 %t307, true
br label %logic.rend4540
logic.rend4540:
br label %logic.end4535
logic.end4535:
%t309 = phi i1 [ false, %logic.from4533 ], [ %t308, %logic.rend4540 ]
br i1 %t309, label %then4541, label %endif4543
then4541:
%t310 = load ptr, ptr %a1
%t311 = load { ptr, i64, i64 }, ptr %a293
%t312 = load %S.ast.Type, ptr %a266
%t313 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t310, { ptr, i64, i64 } %t311, %S.ast.Type %t312)
store { ptr, i64, i64 } %t313, ptr %a293
br label %endif4543
endif4543:
%t314 = load i64, ptr %a249
%t315 = add i64 %t314, 1
%t316 = load ptr, ptr %a1
%t317 = icmp eq ptr %t316, null
br i1 %t317, label %panic4544, label %ok4545
panic4544:
call void @finch_panic(ptr @.str.2916, i64 1985, ptr @.str.2917)
unreachable
ok4545:
%t318 = getelementptr inbounds %S.gen.Gen, ptr %t316, i32 0, i32 37
store i64 %t315, ptr %t318
%t319 = load ptr, ptr %a1
%t320 = icmp eq ptr %t319, null
br i1 %t320, label %panic4546, label %ok4547
panic4546:
call void @finch_panic(ptr @.str.2918, i64 1986, ptr @.str.2919)
unreachable
ok4547:
%t321 = getelementptr inbounds %S.gen.Gen, ptr %t319, i32 0, i32 12
%t322 = getelementptr inbounds %S.gen.FnSig, ptr %t321, i32 0, i32 2
%t323 = getelementptr inbounds { ptr, i64, i64 }, ptr %t322, i32 0, i32 1
%t324 = load i64, ptr %t323
%t325 = icmp sgt i64 %t324, 0
br i1 %t325, label %then4548, label %endif4550
then4548:
%t326 = load i64, ptr %a249
%t327 = add i64 %t326, 2
%t328 = load ptr, ptr %a1
%t329 = icmp eq ptr %t328, null
br i1 %t329, label %panic4551, label %ok4552
panic4551:
call void @finch_panic(ptr @.str.2920, i64 1987, ptr @.str.2921)
unreachable
ok4552:
%t330 = getelementptr inbounds %S.gen.Gen, ptr %t328, i32 0, i32 37
store i64 %t327, ptr %t330
br label %endif4550
endif4550:
%t331 = load ptr, ptr %a1
%t332 = getelementptr inbounds %S.ast.Node, ptr %a106, i32 0, i32 9
%t333 = load i64, ptr %a249
%t334 = load { ptr, i64, i64 }, ptr %t332
%t335 = extractvalue { ptr, i64, i64 } %t334, 1
%t336 = icmp uge i64 %t333, %t335
br i1 %t336, label %range4553, label %inrange4554
range4553:
call void @finch_panic_index(ptr @.str.2922, i64 1989, i64 %t333, i64 %t335)
unreachable
inrange4554:
%t337 = extractvalue { ptr, i64, i64 } %t334, 0
%t338 = getelementptr inbounds %S.ast.Node, ptr %t337, i64 %t333
%t339 = load %S.ast.Node, ptr %t338
%t340 = load ptr, ptr %a1
%t341 = icmp eq ptr %t340, null
br i1 %t341, label %panic4555, label %ok4556
panic4555:
call void @finch_panic(ptr @.str.2923, i64 1989, ptr @.str.2924)
unreachable
ok4556:
%t342 = getelementptr inbounds %S.gen.Gen, ptr %t340, i32 0, i32 12
%t343 = getelementptr inbounds %S.gen.FnSig, ptr %t342, i32 0, i32 14
%t344 = load i64, ptr %a249
%t345 = load { ptr, i64, i64 }, ptr %t343
%t346 = extractvalue { ptr, i64, i64 } %t345, 1
%t347 = icmp uge i64 %t344, %t346
br i1 %t347, label %range4557, label %inrange4558
range4557:
call void @finch_panic_index(ptr @.str.2925, i64 1989, i64 %t344, i64 %t346)
unreachable
inrange4558:
%t348 = extractvalue { ptr, i64, i64 } %t345, 0
%t349 = getelementptr inbounds { ptr, i64, i64 }, ptr %t348, i64 %t344
%t350 = load { ptr, i64, i64 }, ptr %t349
%t351 = load %S.ast.Type, ptr %a266
%t352 = load { ptr, i64, i64 }, ptr %a293
%t353 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t331, %S.ast.Node %t339, { ptr, i64, i64 } %t350, %S.ast.Type %t351, { ptr, i64, i64 } %t352, i1 false)
%t354 = load ptr, ptr %a1
%t355 = icmp eq ptr %t354, null
br i1 %t355, label %panic4559, label %ok4560
panic4559:
call void @finch_panic(ptr @.str.2926, i64 1990, ptr @.str.2927)
unreachable
ok4560:
%t356 = getelementptr inbounds %S.gen.Gen, ptr %t354, i32 0, i32 37
store i64 0, ptr %t356
br label %for.step4527
for.step4527:
%t357 = load i64, ptr %a249
%t358 = add i64 %t357, 1
store i64 %t358, ptr %a249
br label %for.cond4525
for.end4528:
%t359 = load ptr, ptr %a1
%t360 = getelementptr inbounds %S.ast.Node, ptr %a106, i32 0, i32 9
%t361 = getelementptr inbounds %S.ast.Node, ptr %a106, i32 0, i32 9
%t362 = getelementptr inbounds { ptr, i64, i64 }, ptr %t361, i32 0, i32 1
%t363 = load i64, ptr %t362
%t364 = sub i64 %t363, 1
%t365 = load { ptr, i64, i64 }, ptr %t360
%t366 = extractvalue { ptr, i64, i64 } %t365, 1
%t367 = icmp uge i64 %t364, %t366
br i1 %t367, label %range4561, label %inrange4562
range4561:
call void @finch_panic_index(ptr @.str.2928, i64 1992, i64 %t364, i64 %t366)
unreachable
inrange4562:
%t368 = extractvalue { ptr, i64, i64 } %t365, 0
%t369 = getelementptr inbounds %S.ast.Node, ptr %t368, i64 %t364
%t370 = load %S.ast.Node, ptr %t369
call void @finch.gen.block(ptr %t359, %S.ast.Node %t370, i1 false)
%t371 = load ptr, ptr %a1
%t372 = icmp eq ptr %t371, null
br i1 %t372, label %panic4563, label %ok4564
panic4563:
call void @finch_panic(ptr @.str.2929, i64 1993, ptr @.str.2930)
unreachable
ok4564:
%t373 = getelementptr inbounds %S.gen.Gen, ptr %t371, i32 0, i32 9
%t374 = load i1, ptr %t373
%t375 = xor i1 %t374, true
br i1 %t375, label %then4565, label %endif4567
then4565:
%t376 = load ptr, ptr %a1
%t377 = icmp eq ptr %t376, null
br i1 %t377, label %panic4568, label %ok4569
panic4568:
call void @finch_panic(ptr @.str.2931, i64 1994, ptr @.str.2932)
unreachable
ok4569:
%t378 = getelementptr inbounds %S.gen.Gen, ptr %t376, i32 0, i32 12
%t379 = getelementptr inbounds %S.gen.FnSig, ptr %t378, i32 0, i32 12
%t380 = getelementptr inbounds %S.ast.Type, ptr %t379, i32 0, i32 0
%t381 = load { ptr, i64, i64 }, ptr %t380
store { ptr, i64, i64 } %t381, ptr %a382
store { ptr, i64, i64 } { ptr @.str.2933, i64 4, i64 0 }, ptr %a383
%t384 = call i32 @finch_str_eq(ptr %a382, ptr %a383)
%t385 = icmp eq i32 %t384, 0
br i1 %t385, label %then4570, label %endif4572
then4570:
%t386 = load ptr, ptr %a1
%t387 = load %S.ast.Node, ptr %a106
%t388 = getelementptr inbounds %S.ast.Node, ptr %a106, i32 0, i32 1
%t389 = load { ptr, i64, i64 }, ptr %t388
store { ptr, i64, i64 } { ptr @.str.2934, i64 10, i64 0 }, ptr %a391
store { ptr, i64, i64 } %t389, ptr %a392
call void @finch_str_concat(ptr %a390, ptr %a391, ptr %a392)
%t393 = load { ptr, i64, i64 }, ptr %a390
store { ptr, i64, i64 } %t393, ptr %a395
store { ptr, i64, i64 } { ptr @.str.2935, i64 38, i64 0 }, ptr %a396
call void @finch_str_concat(ptr %a394, ptr %a395, ptr %a396)
%t397 = load { ptr, i64, i64 }, ptr %a394
%t398 = load ptr, ptr %a1
%t399 = icmp eq ptr %t398, null
br i1 %t399, label %panic4573, label %ok4574
panic4573:
call void @finch_panic(ptr @.str.2936, i64 1995, ptr @.str.2937)
unreachable
ok4574:
%t400 = getelementptr inbounds %S.gen.Gen, ptr %t398, i32 0, i32 12
%t401 = getelementptr inbounds %S.gen.FnSig, ptr %t400, i32 0, i32 12
%t402 = load %S.ast.Type, ptr %t401
%t403 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t402)
store { ptr, i64, i64 } %t397, ptr %a405
store { ptr, i64, i64 } %t403, ptr %a406
call void @finch_str_concat(ptr %a404, ptr %a405, ptr %a406)
%t407 = load { ptr, i64, i64 }, ptr %a404
call void @finch.gen.fail(ptr %t386, %S.ast.Node %t387, { ptr, i64, i64 } %t407)
br label %endif4572
endif4572:
%t408 = load ptr, ptr %a1
call void @finch.gen.runDefers(ptr %t408, i64 0)
%t409 = load ptr, ptr %a1
%t410 = icmp eq ptr %t409, null
br i1 %t410, label %panic4575, label %ok4576
panic4575:
call void @finch_panic(ptr @.str.2938, i64 1998, ptr @.str.2939)
unreachable
ok4576:
%t411 = getelementptr inbounds %S.gen.Gen, ptr %t409, i32 0, i32 12
%t412 = getelementptr inbounds %S.gen.FnSig, ptr %t411, i32 0, i32 9
%t413 = load i1, ptr %t412
br i1 %t413, label %then4577, label %else4578
then4577:
%t414 = load ptr, ptr %a1
%t415 = load ptr, ptr %a1
%t416 = load ptr, ptr %a1
%t417 = icmp eq ptr %t416, null
br i1 %t417, label %panic4580, label %ok4581
panic4580:
call void @finch_panic(ptr @.str.2941, i64 1999, ptr @.str.2942)
unreachable
ok4581:
%t418 = getelementptr inbounds %S.gen.Gen, ptr %t416, i32 0, i32 12
%t419 = load %S.gen.FnSig, ptr %t418
%t420 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t415, %S.gen.FnSig %t419)
store { ptr, i64, i64 } { ptr @.str.2940, i64 4, i64 0 }, ptr %a422
store { ptr, i64, i64 } %t420, ptr %a423
call void @finch_str_concat(ptr %a421, ptr %a422, ptr %a423)
%t424 = load { ptr, i64, i64 }, ptr %a421
store { ptr, i64, i64 } %t424, ptr %a426
store { ptr, i64, i64 } { ptr @.str.2943, i64 53, i64 0 }, ptr %a427
call void @finch_str_concat(ptr %a425, ptr %a426, ptr %a427)
%t428 = load { ptr, i64, i64 }, ptr %a425
call void @finch.gen.emit(ptr %t414, { ptr, i64, i64 } %t428)
br label %endif4579
else4578:
%t429 = load ptr, ptr %a1
call void @finch.gen.emit(ptr %t429, { ptr, i64, i64 } { ptr @.str.2944, i64 8, i64 0 })
br label %endif4579
endif4579:
br label %endif4567
endif4567:
store { ptr, i64, i64 } { ptr @.str.2945, i64 0, i64 0 }, ptr %a430
%t431 = load i64, ptr %a134
%t432 = icmp sge i64 %t431, 0
br i1 %t432, label %then4582, label %endif4584
then4582:
%t433 = load i64, ptr %a134
call void @finch_str_from_int(ptr %a434, i64 %t433)
%t435 = load { ptr, i64, i64 }, ptr %a434
store { ptr, i64, i64 } { ptr @.str.2946, i64 7, i64 0 }, ptr %a437
store { ptr, i64, i64 } %t435, ptr %a438
call void @finch_str_concat(ptr %a436, ptr %a437, ptr %a438)
%t439 = load { ptr, i64, i64 }, ptr %a436
store { ptr, i64, i64 } %t439, ptr %a430
br label %endif4584
endif4584:
%t440 = load ptr, ptr %a1
%t441 = icmp eq ptr %t440, null
br i1 %t441, label %panic4585, label %ok4586
panic4585:
call void @finch_panic(ptr @.str.2947, i64 2008, ptr @.str.2948)
unreachable
ok4586:
%t442 = getelementptr inbounds %S.gen.Gen, ptr %t440, i32 0, i32 34
store i64 -1, ptr %t442
%t443 = load ptr, ptr %a1
%t444 = icmp eq ptr %t443, null
br i1 %t444, label %panic4587, label %ok4588
panic4587:
call void @finch_panic(ptr @.str.2949, i64 2009, ptr @.str.2950)
unreachable
ok4588:
%t445 = getelementptr inbounds %S.gen.Gen, ptr %t443, i32 0, i32 3
%t446 = getelementptr inbounds { ptr, i64, i64 }, ptr %t445, i32 0, i32 1
%t447 = load ptr, ptr %a1
%t448 = load ptr, ptr %a1
%t449 = icmp eq ptr %t448, null
br i1 %t449, label %panic4589, label %ok4590
panic4589:
call void @finch_panic(ptr @.str.2952, i64 2009, ptr @.str.2953)
unreachable
ok4590:
%t450 = getelementptr inbounds %S.gen.Gen, ptr %t448, i32 0, i32 12
%t451 = load %S.gen.FnSig, ptr %t450
%t452 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t447, %S.gen.FnSig %t451)
store { ptr, i64, i64 } { ptr @.str.2951, i64 16, 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.2954, i64 1, i64 0 }, ptr %a459
call void @finch_str_concat(ptr %a457, ptr %a458, ptr %a459)
%t460 = load { ptr, i64, i64 }, ptr %a457
%t461 = load ptr, ptr %a1
%t462 = icmp eq ptr %t461, null
br i1 %t462, label %panic4591, label %ok4592
panic4591:
call void @finch_panic(ptr @.str.2955, i64 2009, ptr @.str.2956)
unreachable
ok4592:
%t463 = getelementptr inbounds %S.gen.Gen, ptr %t461, i32 0, i32 12
%t464 = getelementptr inbounds %S.gen.FnSig, ptr %t463, i32 0, i32 11
%t465 = load { ptr, i64, i64 }, ptr %t464
store { ptr, i64, i64 } %t460, 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.2957, 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 = getelementptr inbounds { ptr, i64, i64 }, ptr %a171, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.2958, i64 2, i64 0 }, ptr %a475
call void @finch_str_join(ptr %a476, ptr %a171, ptr %a475)
%t477 = load { ptr, i64, i64 }, ptr %a476
store { ptr, i64, i64 } %t473, ptr %a479
store { ptr, i64, i64 } %t477, ptr %a480
call void @finch_str_concat(ptr %a478, ptr %a479, ptr %a480)
%t481 = load { ptr, i64, i64 }, ptr %a478
store { ptr, i64, i64 } %t481, ptr %a483
store { ptr, i64, i64 } { ptr @.str.2959, i64 1, i64 0 }, ptr %a484
call void @finch_str_concat(ptr %a482, ptr %a483, ptr %a484)
%t485 = load { ptr, i64, i64 }, ptr %a482
%t486 = load { ptr, i64, i64 }, ptr %a430
store { ptr, i64, i64 } %t485, ptr %a488
store { ptr, i64, i64 } %t486, ptr %a489
call void @finch_str_concat(ptr %a487, ptr %a488, ptr %a489)
%t490 = load { ptr, i64, i64 }, ptr %a487
store { ptr, i64, i64 } %t490, ptr %a492
store { ptr, i64, i64 } { ptr @.str.2960, i64 10, i64 0 }, ptr %a493
call void @finch_str_concat(ptr %a491, ptr %a492, ptr %a493)
%t494 = load { ptr, i64, i64 }, ptr %a491
%t495 = load ptr, ptr %a1
%t496 = icmp eq ptr %t495, null
br i1 %t496, label %panic4593, label %ok4594
panic4593:
call void @finch_panic(ptr @.str.2961, i64 2010, ptr @.str.2962)
unreachable
ok4594:
%t497 = getelementptr inbounds %S.gen.Gen, ptr %t495, i32 0, i32 5
%t498 = getelementptr inbounds { ptr, i64, i64 }, ptr %t497, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.2963, i64 1, i64 0 }, ptr %a499
call void @finch_str_join(ptr %a500, ptr %t497, ptr %a499)
%t501 = load { ptr, i64, i64 }, ptr %a500
store { ptr, i64, i64 } %t494, 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.2964, i64 1, i64 0 }, ptr %a508
call void @finch_str_concat(ptr %a506, ptr %a507, ptr %a508)
%t509 = load { ptr, i64, i64 }, ptr %a506
%t510 = load ptr, ptr %a1
%t511 = icmp eq ptr %t510, null
br i1 %t511, label %panic4595, label %ok4596
panic4595:
call void @finch_panic(ptr @.str.2965, i64 2010, ptr @.str.2966)
unreachable
ok4596:
%t512 = getelementptr inbounds %S.gen.Gen, ptr %t510, i32 0, i32 4
%t513 = getelementptr inbounds { ptr, i64, i64 }, ptr %t512, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.2967, i64 1, i64 0 }, ptr %a514
call void @finch_str_join(ptr %a515, ptr %t512, ptr %a514)
%t516 = load { ptr, i64, i64 }, ptr %a515
store { ptr, i64, i64 } %t509, ptr %a518
store { ptr, i64, i64 } %t516, ptr %a519
call void @finch_str_concat(ptr %a517, ptr %a518, ptr %a519)
%t520 = load { ptr, i64, i64 }, ptr %a517
store { ptr, i64, i64 } %t520, ptr %a522
store { ptr, i64, i64 } { ptr @.str.2968, i64 3, i64 0 }, ptr %a523
call void @finch_str_concat(ptr %a521, ptr %a522, ptr %a523)
%t524 = load { ptr, i64, i64 }, ptr %a521
%t525 = load i64, ptr %t446
%t526 = add i64 %t525, 1
call void @finch_arr_reserve(ptr %t445, i64 %t526, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t527 = load ptr, ptr %t445
%t528 = getelementptr inbounds { ptr, i64, i64 }, ptr %t527, i64 %t525
store { ptr, i64, i64 } %t524, ptr %t528
store i64 %t526, ptr %t446
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 %then4597, label %endif4599
then4597:
%t5 = load ptr, ptr %a1
call void @finch.gen.pushScope(ptr %t5)
br label %endif4599
endif4599:
%t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
store i64 0, ptr %a7
br label %each.cond4600
each.cond4600:
%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.body4601, label %each.end4603
each.body4601:
%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 %panic4604, label %ok4605
panic4604:
call void @finch_panic(ptr @.str.2969, i64 2020, ptr @.str.2970)
unreachable
ok4605:
%t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 9
%t19 = load i1, ptr %t18
br i1 %t19, label %then4606, label %endif4608
then4606:
%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.2971, i64 66, i64 0 })
br label %endif4608
endif4608:
%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.step4602
each.step4602:
%t24 = load i64, ptr %a7
%t25 = add i64 %t24, 1
store i64 %t25, ptr %a7
br label %each.cond4600
each.end4603:
%t26 = load i1, ptr %a3
br i1 %t26, label %then4609, label %endif4611
then4609:
%t27 = load ptr, ptr %a1
call void @finch.gen.endScope(ptr %t27)
br label %endif4611
endif4611:
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.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
%a76 = alloca { ptr, i64, i64 }, align 16
%a77 = alloca { ptr, i64, i64 }, align 16
%a84 = 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
%a98 = alloca { ptr, i64, i64 }, align 16
%a99 = alloca { ptr, i64, i64 }, align 16
%a105 = alloca { ptr, i64, i64 }, align 16
%a106 = alloca { ptr, i64, i64 }, align 16
%a112 = alloca { ptr, i64, i64 }, align 16
%a113 = alloca { ptr, i64, i64 }, align 16
%a119 = alloca { ptr, i64, i64 }, align 16
%a120 = alloca { ptr, i64, i64 }, align 16
%a136 = alloca i64, align 16
%a155 = alloca %S.ast.Node, align 16
%a156 = alloca %S.ast.Node, align 16
%a182 = alloca { ptr, i64, i64 }, align 16
%a183 = alloca { ptr, i64, i64 }, align 16
%a187 = alloca { ptr, i64, i64 }, align 16
%a188 = 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
%a213 = alloca { ptr, i64, i64 }, align 16
%a214 = alloca { ptr, i64, i64 }, align 16
%a215 = alloca { ptr, i64, i64 }, align 16
%a232 = alloca %S.gen.Loop, align 16
%a233 = alloca %S.gen.Loop, align 16
%a235 = alloca %S.gen.Loop, align 16
%a240 = alloca { ptr, i64, i64 }, align 16
%a241 = 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
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 %panic4612, label %ok4613
panic4612:
call void @finch_panic(ptr @.str.2972, i64 2031, ptr @.str.2973)
unreachable
ok4613:
%t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 35
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 %panic4614, label %ok4615
panic4614:
call void @finch_panic(ptr @.str.2974, i64 2032, ptr @.str.2975)
unreachable
ok4615:
%t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 36
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.2976, 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 %then4616, label %else4617
then4616:
%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 %endif4618
else4617:
%t26 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t26, ptr %a27
store { ptr, i64, i64 } { ptr @.str.2977, 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 %then4619, label %else4620
then4619:
%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 %endif4621
else4620:
%t33 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t33, ptr %a34
store { ptr, i64, i64 } { ptr @.str.2978, 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 %then4622, label %else4623
then4622:
%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 %endif4624
else4623:
%t40 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t40, ptr %a41
store { ptr, i64, i64 } { ptr @.str.2979, 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 %then4625, label %else4626
then4625:
%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 %range4628, label %inrange4629
range4628:
call void @finch_panic_index(ptr @.str.2980, i64 2041, i64 0, i64 %t47)
unreachable
inrange4629:
%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.2981, 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 %then4630, label %else4631
then4630:
%t57 = load ptr, ptr %a1
%t58 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t59 = load { ptr, i64, i64 }, ptr %t58
%t60 = extractvalue { ptr, i64, i64 } %t59, 1
%t61 = icmp uge i64 0, %t60
br i1 %t61, label %range4633, label %inrange4634
range4633:
call void @finch_panic_index(ptr @.str.2982, i64 2042, i64 0, i64 %t60)
unreachable
inrange4634:
%t62 = extractvalue { ptr, i64, i64 } %t59, 0
%t63 = getelementptr inbounds %S.ast.Node, ptr %t62, i64 0
%t64 = load %S.ast.Node, ptr %t63
%t65 = call %S.gen.Val @finch.gen.orElse(ptr %t57, %S.ast.Node %t64, i1 true)
br label %endif4632
else4631:
%t66 = load ptr, ptr %a1
%t67 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t68 = load { ptr, i64, i64 }, ptr %t67
%t69 = extractvalue { ptr, i64, i64 } %t68, 1
%t70 = icmp uge i64 0, %t69
br i1 %t70, label %range4635, label %inrange4636
range4635:
call void @finch_panic_index(ptr @.str.2983, i64 2044, i64 0, i64 %t69)
unreachable
inrange4636:
%t71 = extractvalue { ptr, i64, i64 } %t68, 0
%t72 = getelementptr inbounds %S.ast.Node, ptr %t71, i64 0
%t73 = load %S.ast.Node, ptr %t72
%t74 = call %S.gen.Val @finch.gen.expr(ptr %t66, %S.ast.Node %t73)
br label %endif4632
endif4632:
br label %endif4627
else4626:
%t75 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t75, ptr %a76
store { ptr, i64, i64 } { ptr @.str.2984, i64 5, i64 0 }, ptr %a77
%t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77)
%t79 = icmp ne i32 %t78, 0
br i1 %t79, label %then4637, label %else4638
then4637:
%t80 = load ptr, ptr %a1
%t81 = load %S.ast.Node, ptr %a2
%t82 = call %S.gen.Val @finch.gen.matchGen(ptr %t80, %S.ast.Node %t81, i1 false)
br label %endif4639
else4638:
%t83 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t83, ptr %a84
store { ptr, i64, i64 } { ptr @.str.2985, i64 2, i64 0 }, ptr %a85
%t86 = call i32 @finch_str_eq(ptr %a84, ptr %a85)
%t87 = icmp ne i32 %t86, 0
br i1 %t87, label %then4640, label %else4641
then4640:
%t88 = load ptr, ptr %a1
%t89 = load %S.ast.Node, ptr %a2
call void @finch.gen.ifStmt(ptr %t88, %S.ast.Node %t89)
br label %endif4642
else4641:
%t90 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t90, ptr %a91
store { ptr, i64, i64 } { ptr @.str.2986, i64 5, i64 0 }, ptr %a92
%t93 = call i32 @finch_str_eq(ptr %a91, ptr %a92)
%t94 = icmp ne i32 %t93, 0
br i1 %t94, label %then4643, label %else4644
then4643:
%t95 = load ptr, ptr %a1
%t96 = load %S.ast.Node, ptr %a2
call void @finch.gen.whileStmt(ptr %t95, %S.ast.Node %t96)
br label %endif4645
else4644:
%t97 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t97, ptr %a98
store { ptr, i64, i64 } { ptr @.str.2987, i64 3, i64 0 }, ptr %a99
%t100 = call i32 @finch_str_eq(ptr %a98, ptr %a99)
%t101 = icmp ne i32 %t100, 0
br i1 %t101, label %then4646, label %else4647
then4646:
%t102 = load ptr, ptr %a1
%t103 = load %S.ast.Node, ptr %a2
call void @finch.gen.forStmt(ptr %t102, %S.ast.Node %t103)
br label %endif4648
else4647:
%t104 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t104, ptr %a105
store { ptr, i64, i64 } { ptr @.str.2988, i64 4, i64 0 }, ptr %a106
%t107 = call i32 @finch_str_eq(ptr %a105, ptr %a106)
%t108 = icmp ne i32 %t107, 0
br i1 %t108, label %then4649, label %else4650
then4649:
%t109 = load ptr, ptr %a1
%t110 = load %S.ast.Node, ptr %a2
call void @finch.gen.eachStmt(ptr %t109, %S.ast.Node %t110)
br label %endif4651
else4650:
%t111 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t111, ptr %a112
store { ptr, i64, i64 } { ptr @.str.2989, i64 6, i64 0 }, ptr %a113
%t114 = call i32 @finch_str_eq(ptr %a112, ptr %a113)
%t115 = icmp ne i32 %t114, 0
br i1 %t115, label %then4652, label %else4653
then4652:
%t116 = load ptr, ptr %a1
%t117 = load %S.ast.Node, ptr %a2
call void @finch.gen.returnStmt(ptr %t116, %S.ast.Node %t117)
br label %endif4654
else4653:
%t118 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t118, ptr %a119
store { ptr, i64, i64 } { ptr @.str.2990, i64 5, i64 0 }, ptr %a120
%t121 = call i32 @finch_str_eq(ptr %a119, ptr %a120)
%t122 = icmp ne i32 %t121, 0
br i1 %t122, label %then4655, label %else4656
then4655:
%t123 = load ptr, ptr %a1
%t124 = icmp eq ptr %t123, null
br i1 %t124, label %panic4658, label %ok4659
panic4658:
call void @finch_panic(ptr @.str.2991, i64 2059, ptr @.str.2992)
unreachable
ok4659:
%t125 = getelementptr inbounds %S.gen.Gen, ptr %t123, i32 0, i32 44
%t126 = load i64, ptr %t125
%t127 = icmp sgt i64 %t126, 0
br i1 %t127, label %then4660, label %endif4662
then4660:
%t128 = load ptr, ptr %a1
%t129 = load %S.ast.Node, ptr %a2
call void @finch.gen.fail(ptr %t128, %S.ast.Node %t129, { ptr, i64, i64 } { ptr @.str.2993, i64 33, i64 0 })
br label %endif4662
endif4662:
%t130 = load ptr, ptr %a1
%t131 = icmp eq ptr %t130, null
br i1 %t131, label %panic4663, label %ok4664
panic4663:
call void @finch_panic(ptr @.str.2994, i64 2062, ptr @.str.2995)
unreachable
ok4664:
%t132 = getelementptr inbounds %S.gen.Gen, ptr %t130, i32 0, i32 10
%t133 = getelementptr inbounds { ptr, i64, i64 }, ptr %t132, i32 0, i32 1
%t134 = load i64, ptr %t133
%t135 = sub i64 %t134, 1
store i64 %t135, ptr %a136
%t137 = load ptr, ptr %a1
%t138 = icmp eq ptr %t137, null
br i1 %t138, label %panic4665, label %ok4666
panic4665:
call void @finch_panic(ptr @.str.2996, i64 2063, ptr @.str.2997)
unreachable
ok4666:
%t139 = getelementptr inbounds %S.gen.Gen, ptr %t137, i32 0, i32 10
%t140 = load i64, ptr %a136
%t141 = load { ptr, i64, i64 }, ptr %t139
%t142 = extractvalue { ptr, i64, i64 } %t141, 1
%t143 = icmp uge i64 %t140, %t142
br i1 %t143, label %range4667, label %inrange4668
range4667:
call void @finch_panic_index(ptr @.str.2998, i64 2063, i64 %t140, i64 %t142)
unreachable
inrange4668:
%t144 = extractvalue { ptr, i64, i64 } %t141, 0
%t145 = getelementptr inbounds %S.gen.Scope, ptr %t144, i64 %t140
%t146 = getelementptr inbounds %S.gen.Scope, ptr %t145, i32 0, i32 1
%t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i32 0, i32 1
%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 %range4669, label %inrange4670
range4669:
call void @finch_panic_index(ptr @.str.2999, i64 2063, i64 0, i64 %t150)
unreachable
inrange4670:
%t152 = extractvalue { ptr, i64, i64 } %t149, 0
%t153 = getelementptr inbounds %S.ast.Node, ptr %t152, i64 0
%t154 = load %S.ast.Node, ptr %t153
store %S.ast.Node %t154, ptr %a155
call void @finch.copy.S_ast_Node(ptr %a156, ptr %a155)
%t157 = load %S.ast.Node, ptr %a156
%t158 = load i64, ptr %t147
%t159 = add i64 %t158, 1
call void @finch_arr_reserve(ptr %t146, i64 %t159, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t160 = load ptr, ptr %t146
%t161 = getelementptr inbounds %S.ast.Node, ptr %t160, i64 %t158
store %S.ast.Node %t157, ptr %t161
store i64 %t159, ptr %t147
%t162 = load ptr, ptr %a1
%t163 = icmp eq ptr %t162, null
br i1 %t163, label %panic4671, label %ok4672
panic4671:
call void @finch_panic(ptr @.str.3000, i64 2064, ptr @.str.3001)
unreachable
ok4672:
%t164 = getelementptr inbounds %S.gen.Gen, ptr %t162, i32 0, i32 10
%t165 = load i64, ptr %a136
%t166 = load { ptr, i64, i64 }, ptr %t164
%t167 = extractvalue { ptr, i64, i64 } %t166, 1
%t168 = icmp uge i64 %t165, %t167
br i1 %t168, label %range4673, label %inrange4674
range4673:
call void @finch_panic_index(ptr @.str.3002, i64 2064, i64 %t165, i64 %t167)
unreachable
inrange4674:
%t169 = extractvalue { ptr, i64, i64 } %t166, 0
%t170 = getelementptr inbounds %S.gen.Scope, ptr %t169, i64 %t165
%t171 = getelementptr inbounds %S.gen.Scope, ptr %t170, i32 0, i32 2
%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 %panic4675, label %ok4676
panic4675:
call void @finch_panic(ptr @.str.3003, i64 2064, ptr @.str.3004)
unreachable
ok4676:
%t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 23
%t176 = load i64, ptr %t175
%t177 = load i64, ptr %t172
%t178 = add i64 %t177, 1
call void @finch_arr_reserve(ptr %t171, i64 %t178, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64))
%t179 = load ptr, ptr %t171
%t180 = getelementptr inbounds i64, ptr %t179, i64 %t177
store i64 %t176, ptr %t180
store i64 %t178, ptr %t172
br label %endif4657
else4656:
%t181 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t181, ptr %a182
store { ptr, i64, i64 } { ptr @.str.3005, i64 5, i64 0 }, ptr %a183
%t184 = call i32 @finch_str_eq(ptr %a182, ptr %a183)
%t185 = icmp ne i32 %t184, 0
br label %logic.from4677
logic.from4677:
br i1 %t185, label %logic.end4679, label %logic.rhs4678
logic.rhs4678:
%t186 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t186, ptr %a187
store { ptr, i64, i64 } { ptr @.str.3006, i64 8, i64 0 }, ptr %a188
%t189 = call i32 @finch_str_eq(ptr %a187, ptr %a188)
%t190 = icmp ne i32 %t189, 0
br label %logic.rend4680
logic.rend4680:
br label %logic.end4679
logic.end4679:
%t191 = phi i1 [ true, %logic.from4677 ], [ %t190, %logic.rend4680 ]
br i1 %t191, label %then4681, label %else4682
then4681:
%t192 = load ptr, ptr %a1
%t193 = icmp eq ptr %t192, null
br i1 %t193, label %panic4684, label %ok4685
panic4684:
call void @finch_panic(ptr @.str.3007, i64 2066, ptr @.str.3008)
unreachable
ok4685:
%t194 = getelementptr inbounds %S.gen.Gen, ptr %t192, i32 0, i32 44
%t195 = load i64, ptr %t194
%t196 = icmp sgt i64 %t195, 0
br i1 %t196, label %then4686, label %endif4688
then4686:
%t197 = load ptr, ptr %a1
%t198 = load %S.ast.Node, ptr %a2
%t199 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t199, ptr %a201
store { ptr, i64, i64 } { ptr @.str.3009, i64 27, i64 0 }, ptr %a202
call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202)
%t203 = load { ptr, i64, i64 }, ptr %a200
call void @finch.gen.fail(ptr %t197, %S.ast.Node %t198, { ptr, i64, i64 } %t203)
br label %endif4688
endif4688:
%t204 = load ptr, ptr %a1
%t205 = icmp eq ptr %t204, null
br i1 %t205, label %panic4689, label %ok4690
panic4689:
call void @finch_panic(ptr @.str.3010, i64 2069, ptr @.str.3011)
unreachable
ok4690:
%t206 = getelementptr inbounds %S.gen.Gen, ptr %t204, i32 0, i32 11
%t207 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i32 0, i32 1
%t208 = load i64, ptr %t207
%t209 = icmp eq i64 %t208, 0
br i1 %t209, label %then4691, label %endif4693
then4691:
%t210 = load ptr, ptr %a1
%t211 = load %S.ast.Node, ptr %a2
%t212 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t212, ptr %a214
store { ptr, i64, i64 } { ptr @.str.3012, i64 31, i64 0 }, ptr %a215
call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215)
%t216 = load { ptr, i64, i64 }, ptr %a213
call void @finch.gen.fail(ptr %t210, %S.ast.Node %t211, { ptr, i64, i64 } %t216)
br label %endif4693
endif4693:
%t217 = load ptr, ptr %a1
%t218 = icmp eq ptr %t217, null
br i1 %t218, label %panic4694, label %ok4695
panic4694:
call void @finch_panic(ptr @.str.3013, i64 2072, ptr @.str.3014)
unreachable
ok4695:
%t219 = getelementptr inbounds %S.gen.Gen, ptr %t217, i32 0, i32 11
%t220 = load ptr, ptr %a1
%t221 = icmp eq ptr %t220, null
br i1 %t221, label %panic4696, label %ok4697
panic4696:
call void @finch_panic(ptr @.str.3015, i64 2072, ptr @.str.3016)
unreachable
ok4697:
%t222 = getelementptr inbounds %S.gen.Gen, ptr %t220, i32 0, i32 11
%t223 = getelementptr inbounds { ptr, i64, i64 }, ptr %t222, i32 0, i32 1
%t224 = load i64, ptr %t223
%t225 = sub i64 %t224, 1
%t226 = load { ptr, i64, i64 }, ptr %t219
%t227 = extractvalue { ptr, i64, i64 } %t226, 1
%t228 = icmp uge i64 %t225, %t227
br i1 %t228, label %range4698, label %inrange4699
range4698:
call void @finch_panic_index(ptr @.str.3017, i64 2072, i64 %t225, i64 %t227)
unreachable
inrange4699:
%t229 = extractvalue { ptr, i64, i64 } %t226, 0
%t230 = getelementptr inbounds %S.gen.Loop, ptr %t229, i64 %t225
%t231 = load %S.gen.Loop, ptr %t230
store %S.gen.Loop %t231, ptr %a232
call void @finch.copy.S_gen_Loop(ptr %a233, ptr %a232)
%t234 = load %S.gen.Loop, ptr %a233
store %S.gen.Loop %t234, ptr %a235
%t236 = load ptr, ptr %a1
%t237 = getelementptr inbounds %S.gen.Loop, ptr %a235, i32 0, i32 2
%t238 = load i64, ptr %t237
call void @finch.gen.unwind(ptr %t236, i64 %t238)
%t239 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t239, ptr %a240
store { ptr, i64, i64 } { ptr @.str.3018, i64 5, i64 0 }, ptr %a241
%t242 = call i32 @finch_str_eq(ptr %a240, ptr %a241)
%t243 = icmp ne i32 %t242, 0
br i1 %t243, label %then4700, label %else4701
then4700:
%t244 = load ptr, ptr %a1
%t245 = getelementptr inbounds %S.gen.Loop, ptr %a235, i32 0, i32 1
%t246 = load { ptr, i64, i64 }, ptr %t245
call void @finch.gen.br(ptr %t244, { ptr, i64, i64 } %t246)
br label %endif4702
else4701:
%t247 = load ptr, ptr %a1
%t248 = getelementptr inbounds %S.gen.Loop, ptr %a235, i32 0, i32 0
%t249 = load { ptr, i64, i64 }, ptr %t248
call void @finch.gen.br(ptr %t247, { ptr, i64, i64 } %t249)
br label %endif4702
endif4702:
br label %endif4683
else4682:
%t250 = load ptr, ptr %a1
%t251 = load %S.ast.Node, ptr %a2
%t252 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } { ptr @.str.3019, i64 18, 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
call void @finch.gen.fail(ptr %t250, %S.ast.Node %t251, { ptr, i64, i64 } %t256)
br label %endif4683
endif4683:
br label %endif4657
endif4657:
br label %endif4654
endif4654:
br label %endif4651
endif4651:
br label %endif4648
endif4648:
br label %endif4645
endif4645:
br label %endif4642
endif4642:
br label %endif4639
endif4639:
br label %endif4627
endif4627:
br label %endif4624
endif4624:
br label %endif4621
endif4621:
br label %endif4618
endif4618:
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
%a71 = alloca %S.ast.Type, 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
%a99 = alloca %S.gen.Val, 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
%a146 = alloca %S.gen.Val, 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 %then4703, label %endif4705
then4703:
%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 %range4706, label %inrange4707
range4706:
call void @finch_panic_index(ptr @.str.3020, i64 2086, i64 0, i64 %t9)
unreachable
inrange4707:
%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.3021, 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 %then4708, label %endif4710
then4708:
%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 %range4711, label %inrange4712
range4711:
call void @finch_panic_index(ptr @.str.3022, i64 2088, i64 0, i64 %t26)
unreachable
inrange4712:
%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.3023, i64 46, i64 0 })
br label %endif4710
endif4710:
%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.3024, 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 %then4713, label %endif4715
then4713:
%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 %range4716, label %inrange4717
range4716:
call void @finch_panic_index(ptr @.str.3025, i64 2091, i64 0, i64 %t41)
unreachable
inrange4717:
%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.3026, 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.3027, i64 7, i64 0 }, ptr %a54
call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54)
%t55 = load { ptr, i64, i64 }, ptr %a52
call void @finch.gen.fail(ptr %t38, %S.ast.Node %t45, { ptr, i64, i64 } %t55)
br label %endif4715
endif4715:
%t56 = load ptr, ptr %a1
%t57 = load %S.ast.Node, ptr %a2
%t58 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t59 = load { ptr, i64, i64 }, ptr %t58
%t60 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1
%t61 = load %S.ast.Type, ptr %t60
%t62 = load ptr, ptr %a1
%t63 = load %S.gen.Val, ptr %a15
%t64 = call { ptr, i64, i64 } @finch.gen.own(ptr %t62, %S.gen.Val %t63)
%t65 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t56, %S.ast.Node %t57, { ptr, i64, i64 } %t59, %S.ast.Type %t61, { ptr, i64, i64 } %t64, i1 false)
ret void
endif4705:
%t66 = load ptr, ptr %a1
%t67 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5
%t68 = load %S.ast.Type, ptr %t67
%t69 = load %S.ast.Node, ptr %a2
%t70 = call %S.ast.Type @finch.gen.resolve(ptr %t66, %S.ast.Type %t68, %S.ast.Node %t69)
store %S.ast.Type %t70, ptr %a71
%t72 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i32 0, i32 1
%t74 = load i64, ptr %t73
%t75 = icmp eq i64 %t74, 0
br i1 %t75, label %then4718, label %endif4720
then4718:
%t76 = getelementptr inbounds %S.ast.Type, ptr %a71, i32 0, i32 0
%t77 = load { ptr, i64, i64 }, ptr %t76
store { ptr, i64, i64 } %t77, ptr %a78
store { ptr, i64, i64 } { ptr @.str.3028, i64 6, i64 0 }, ptr %a79
%t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79)
%t81 = icmp ne i32 %t80, 0
br label %logic.from4721
logic.from4721:
br i1 %t81, label %logic.rhs4722, label %logic.end4723
logic.rhs4722:
%t82 = load ptr, ptr %a1
%t83 = load %S.ast.Type, ptr %a71
%t84 = call i1 @finch.gen.hasDefaults(ptr %t82, %S.ast.Type %t83)
br label %logic.rend4724
logic.rend4724:
br label %logic.end4723
logic.end4723:
%t85 = phi i1 [ false, %logic.from4721 ], [ %t84, %logic.rend4724 ]
br i1 %t85, label %then4725, label %endif4727
then4725:
store { ptr, i64, i64 } zeroinitializer, ptr %a86
store { ptr, i64, i64 } zeroinitializer, ptr %a87
%t88 = load ptr, ptr %a1
%t89 = load ptr, ptr %a1
%t90 = getelementptr inbounds %S.ast.Type, ptr %a71, i32 0, i32 3
%t91 = load { ptr, i64, i64 }, ptr %t90
%t92 = getelementptr inbounds %S.ast.Type, ptr %a71, i32 0, i32 2
%t93 = load { ptr, i64, i64 }, ptr %t92
%t94 = call i64 @finch.gen.findStruct(ptr %t89, { ptr, i64, i64 } %t91, { ptr, i64, i64 } %t93)
%t95 = load { ptr, i64, i64 }, ptr %a86
%t96 = load { ptr, i64, i64 }, ptr %a87
%t97 = load %S.ast.Node, ptr %a2
%t98 = call %S.gen.Val @finch.gen.construct(ptr %t88, i64 %t94, { ptr, i64, i64 } %t95, { ptr, i64, i64 } %t96, %S.ast.Node %t97)
store %S.gen.Val %t98, ptr %a99
%t100 = load ptr, ptr %a1
%t101 = load %S.ast.Node, ptr %a2
%t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t103 = load { ptr, i64, i64 }, ptr %t102
%t104 = load %S.ast.Type, ptr %a71
%t105 = getelementptr inbounds %S.gen.Val, ptr %a99, i32 0, i32 0
%t106 = load { ptr, i64, i64 }, ptr %t105
%t107 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t100, %S.ast.Node %t101, { ptr, i64, i64 } %t103, %S.ast.Type %t104, { ptr, i64, i64 } %t106, i1 false)
ret void
endif4727:
%t108 = load ptr, ptr %a1
%t109 = load %S.ast.Node, ptr %a2
%t110 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t111 = load { ptr, i64, i64 }, ptr %t110
%t112 = load %S.ast.Type, ptr %a71
%t113 = load %S.ast.Type, ptr %a71
%t114 = call { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %t113)
%t115 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t108, %S.ast.Node %t109, { ptr, i64, i64 } %t111, %S.ast.Type %t112, { ptr, i64, i64 } %t114, i1 false)
ret void
endif4720:
%t116 = load ptr, ptr %a1
%t117 = load ptr, ptr %a1
%t118 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t119 = load { ptr, i64, i64 }, ptr %t118
%t120 = extractvalue { ptr, i64, i64 } %t119, 1
%t121 = icmp uge i64 0, %t120
br i1 %t121, label %range4728, label %inrange4729
range4728:
call void @finch_panic_index(ptr @.str.3029, i64 2108, i64 0, i64 %t120)
unreachable
inrange4729:
%t122 = extractvalue { ptr, i64, i64 } %t119, 0
%t123 = getelementptr inbounds %S.ast.Node, ptr %t122, i64 0
%t124 = load %S.ast.Node, ptr %t123
%t125 = load %S.ast.Type, ptr %a71
%t126 = call %S.gen.Val @finch.gen.exprWant(ptr %t117, %S.ast.Node %t124, %S.ast.Type %t125)
%t127 = load %S.ast.Type, ptr %a71
%t128 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t129 = load { ptr, i64, i64 }, ptr %t128
%t130 = extractvalue { ptr, i64, i64 } %t129, 1
%t131 = icmp uge i64 0, %t130
br i1 %t131, label %range4730, label %inrange4731
range4730:
call void @finch_panic_index(ptr @.str.3030, i64 2108, i64 0, i64 %t130)
unreachable
inrange4731:
%t132 = extractvalue { ptr, i64, i64 } %t129, 0
%t133 = getelementptr inbounds %S.ast.Node, ptr %t132, i64 0
%t134 = load %S.ast.Node, ptr %t133
%t135 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t136 = load { ptr, i64, i64 }, ptr %t135
store { ptr, i64, i64 } { ptr @.str.3031, i64 1, 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.3032, i64 1, i64 0 }, ptr %a143
call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143)
%t144 = load { ptr, i64, i64 }, ptr %a141
%t145 = call %S.gen.Val @finch.gen.coerce(ptr %t116, %S.gen.Val %t126, %S.ast.Type %t127, %S.ast.Node %t134, { ptr, i64, i64 } %t144)
store %S.gen.Val %t145, ptr %a146
%t147 = load ptr, ptr %a1
%t148 = load %S.ast.Node, ptr %a2
%t149 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t150 = load { ptr, i64, i64 }, ptr %t149
%t151 = load %S.ast.Type, ptr %a71
%t152 = load ptr, ptr %a1
%t153 = load %S.gen.Val, ptr %a146
%t154 = call { ptr, i64, i64 } @finch.gen.own(ptr %t152, %S.gen.Val %t153)
%t155 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t147, %S.ast.Node %t148, { ptr, i64, i64 } %t150, %S.ast.Type %t151, { ptr, i64, i64 } %t154, i1 false)
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 %panic4732, label %ok4733
panic4732:
call void @finch_panic(ptr @.str.3033, i64 2113, ptr @.str.3034)
unreachable
ok4733:
%t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 15
%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 %range4734, label %inrange4735
range4734:
call void @finch_panic_index(ptr @.str.3035, i64 2113, i64 %t11, i64 %t13)
unreachable
inrange4735:
%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 %then4736, label %endif4738
then4736:
ret i1 false
endif4738:
%t24 = load ptr, ptr %a1
%t25 = icmp eq ptr %t24, null
br i1 %t25, label %panic4739, label %ok4740
panic4739:
call void @finch_panic(ptr @.str.3036, i64 2117, ptr @.str.3037)
unreachable
ok4740:
%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 %range4741, label %inrange4742
range4741:
call void @finch_panic_index(ptr @.str.3038, i64 2117, i64 %t28, i64 %t30)
unreachable
inrange4742:
%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 %range4743, label %inrange4744
range4743:
call void @finch_panic_index(ptr @.str.3039, i64 2117, i64 %t36, i64 %t38)
unreachable
inrange4744:
%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.cond4745
each.cond4745:
%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.body4746, label %each.end4748
each.body4746:
%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 %then4749, label %endif4751
then4749:
ret i1 true
endif4751:
br label %each.step4747
each.step4747:
%t56 = load i64, ptr %a43
%t57 = add i64 %t56, 1
store i64 %t57, ptr %a43
br label %each.cond4745
each.end4748:
ret i1 false
}
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
%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
%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
%a71 = 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
%a83 = alloca { ptr, i64, i64 }, align 16
%a84 = alloca { ptr, i64, i64 }, align 16
%a85 = alloca { ptr, i64, i64 }, align 16
%a89 = alloca { ptr, i64, i64 }, align 16
%a90 = alloca { ptr, i64, i64 }, align 16
%a102 = alloca %S.gen.Val, align 16
%a106 = alloca %S.gen.Place, align 16
%a139 = alloca %S.gen.Val, align 16
%a143 = alloca %S.gen.Place, align 16
%a155 = alloca %S.ast.Type, align 16
%a156 = alloca %S.ast.Type, align 16
%a159 = alloca %S.gen.Val, align 16
%a162 = alloca { ptr, i64, i64 }, align 16
%a163 = alloca { ptr, i64, i64 }, align 16
%a165 = alloca { ptr, i64, i64 }, align 16
%a178 = alloca %S.gen.Val, 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 %range4752, label %inrange4753
range4752:
call void @finch_panic_index(ptr @.str.3040, i64 2126, i64 0, i64 %t5)
unreachable
inrange4753:
%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 %then4754, label %endif4756
then4754:
%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.from4757
logic.from4757:
br i1 %t25, label %logic.rhs4758, label %logic.end4759
logic.rhs4758:
%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.3041, 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.rend4760
logic.rend4760:
br label %logic.end4759
logic.end4759:
%t32 = phi i1 [ false, %logic.from4757 ], [ %t31, %logic.rend4760 ]
br i1 %t32, label %then4761, label %endif4763
then4761:
%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.3042, 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.3043, i64 18, i64 0 }, ptr %a42
call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42)
%t43 = load { ptr, i64, i64 }, ptr %a40
%t44 = load { ptr, i64, i64 }, ptr %a16
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)
%t48 = load { ptr, i64, i64 }, ptr %a45
store { ptr, i64, i64 } %t48, ptr %a50
store { ptr, i64, i64 } { ptr @.str.3044, i64 8, i64 0 }, ptr %a51
call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51)
%t52 = load { ptr, i64, i64 }, ptr %a49
call void @finch.gen.fail(ptr %t33, %S.ast.Node %t34, { ptr, i64, i64 } %t52)
br label %endif4763
endif4763:
%t53 = load i64, ptr %a23
%t54 = icmp sge i64 %t53, 0
br label %logic.from4764
logic.from4764:
br i1 %t54, label %logic.rhs4765, label %logic.end4766
logic.rhs4765:
%t55 = load ptr, ptr %a1
%t56 = load i64, ptr %a23
%t57 = call %S.gen.Var @finch.gen.varAt(ptr %t55, i64 %t56)
%t58 = extractvalue %S.gen.Var %t57, 3
br label %logic.rend4767
logic.rend4767:
br label %logic.end4766
logic.end4766:
%t59 = phi i1 [ false, %logic.from4764 ], [ %t58, %logic.rend4767 ]
br i1 %t59, label %then4768, label %endif4770
then4768:
%t60 = load ptr, ptr %a1
%t61 = load %S.ast.Node, ptr %a2
%t62 = load { ptr, i64, i64 }, ptr %a16
store { ptr, i64, i64 } { ptr @.str.3045, i64 19, 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.3046, i64 18, i64 0 }, ptr %a69
call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69)
%t70 = load { ptr, i64, i64 }, ptr %a67
call void @finch.gen.fail(ptr %t60, %S.ast.Node %t61, { ptr, i64, i64 } %t70)
br label %endif4770
endif4770:
br label %endif4756
endif4756:
store { ptr, i64, i64 } { ptr @.str.3047, i64 9, i64 0 }, ptr %a71
%t72 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0
%t73 = load { ptr, i64, i64 }, ptr %t72
store { ptr, i64, i64 } %t73, ptr %a74
store { ptr, i64, i64 } { ptr @.str.3048, i64 3, i64 0 }, ptr %a75
%t76 = call i32 @finch_str_eq(ptr %a74, ptr %a75)
%t77 = icmp ne i32 %t76, 0
br i1 %t77, label %then4771, label %endif4773
then4771:
%t78 = load { ptr, i64, i64 }, ptr %a16
store { ptr, i64, i64 } { ptr @.str.3049, i64 1, i64 0 }, ptr %a80
store { ptr, i64, i64 } %t78, ptr %a81
call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81)
%t82 = load { ptr, i64, i64 }, ptr %a79
store { ptr, i64, i64 } %t82, ptr %a84
store { ptr, i64, i64 } { ptr @.str.3050, i64 1, i64 0 }, ptr %a85
call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85)
%t86 = load { ptr, i64, i64 }, ptr %a83
store { ptr, i64, i64 } %t86, ptr %a71
br label %endif4773
endif4773:
%t87 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t88 = load { ptr, i64, i64 }, ptr %t87
store { ptr, i64, i64 } %t88, ptr %a89
store { ptr, i64, i64 } { ptr @.str.3051, i64 1, i64 0 }, ptr %a90
%t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90)
%t92 = icmp ne i32 %t91, 0
br i1 %t92, label %then4774, label %endif4776
then4774:
%t93 = load ptr, ptr %a1
%t94 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t95 = load { ptr, i64, i64 }, ptr %t94
%t96 = extractvalue { ptr, i64, i64 } %t95, 1
%t97 = icmp uge i64 1, %t96
br i1 %t97, label %range4777, label %inrange4778
range4777:
call void @finch_panic_index(ptr @.str.3052, i64 2142, i64 1, i64 %t96)
unreachable
inrange4778:
%t98 = extractvalue { ptr, i64, i64 } %t95, 0
%t99 = getelementptr inbounds %S.ast.Node, ptr %t98, i64 1
%t100 = load %S.ast.Node, ptr %t99
%t101 = call %S.gen.Val @finch.gen.expr(ptr %t93, %S.ast.Node %t100)
store %S.gen.Val %t101, ptr %a102
%t103 = load ptr, ptr %a1
%t104 = load %S.ast.Node, ptr %a13
%t105 = call %S.gen.Place @finch.gen.place(ptr %t103, %S.ast.Node %t104, i1 true)
store %S.gen.Place %t105, ptr %a106
%t107 = load ptr, ptr %a1
%t108 = load %S.gen.Val, ptr %a102
%t109 = getelementptr inbounds %S.gen.Place, ptr %a106, i32 0, i32 1
%t110 = load %S.ast.Type, ptr %t109
%t111 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t112 = load { ptr, i64, i64 }, ptr %t111
%t113 = extractvalue { ptr, i64, i64 } %t112, 1
%t114 = icmp uge i64 1, %t113
br i1 %t114, label %range4779, label %inrange4780
range4779:
call void @finch_panic_index(ptr @.str.3053, i64 2144, i64 1, i64 %t113)
unreachable
inrange4780:
%t115 = extractvalue { ptr, i64, i64 } %t112, 0
%t116 = getelementptr inbounds %S.ast.Node, ptr %t115, i64 1
%t117 = load %S.ast.Node, ptr %t116
%t118 = load { ptr, i64, i64 }, ptr %a71
%t119 = call %S.gen.Val @finch.gen.coerce(ptr %t107, %S.gen.Val %t108, %S.ast.Type %t110, %S.ast.Node %t117, { ptr, i64, i64 } %t118)
store %S.gen.Val %t119, ptr %a102
%t120 = load ptr, ptr %a1
%t121 = load ptr, ptr %a1
%t122 = getelementptr inbounds %S.gen.Place, ptr %a106, i32 0, i32 1
%t123 = load %S.ast.Type, ptr %t122
%t124 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t121, %S.ast.Type %t123)
%t125 = load ptr, ptr %a1
%t126 = load %S.gen.Val, ptr %a102
%t127 = call { ptr, i64, i64 } @finch.gen.own(ptr %t125, %S.gen.Val %t126)
%t128 = getelementptr inbounds %S.gen.Place, ptr %a106, i32 0, i32 0
%t129 = load { ptr, i64, i64 }, ptr %t128
call void @finch.gen.store(ptr %t120, { ptr, i64, i64 } %t124, { ptr, i64, i64 } %t127, { ptr, i64, i64 } %t129)
ret void
endif4776:
%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 %range4781, label %inrange4782
range4781:
call void @finch_panic_index(ptr @.str.3054, i64 2148, i64 1, i64 %t133)
unreachable
inrange4782:
%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 = call %S.gen.Val @finch.gen.expr(ptr %t130, %S.ast.Node %t137)
store %S.gen.Val %t138, ptr %a139
%t140 = load ptr, ptr %a1
%t141 = load %S.ast.Node, ptr %a13
%t142 = call %S.gen.Place @finch.gen.place(ptr %t140, %S.ast.Node %t141, i1 true)
store %S.gen.Place %t142, ptr %a143
%t144 = load ptr, ptr %a1
%t145 = load ptr, ptr %a1
%t146 = getelementptr inbounds %S.gen.Place, ptr %a143, i32 0, i32 1
%t147 = load %S.ast.Type, ptr %t146
%t148 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t145, %S.ast.Type %t147)
%t149 = getelementptr inbounds %S.gen.Place, ptr %a143, i32 0, i32 0
%t150 = load { ptr, i64, i64 }, ptr %t149
%t151 = call { ptr, i64, i64 } @finch.gen.load(ptr %t144, { ptr, i64, i64 } %t148, { ptr, i64, i64 } %t150)
%t152 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t151, 0
%t153 = getelementptr inbounds %S.gen.Place, ptr %a143, i32 0, i32 1
%t154 = load %S.ast.Type, ptr %t153
store %S.ast.Type %t154, ptr %a155
call void @finch.copy.S_ast_Type(ptr %a156, ptr %a155)
%t157 = load %S.ast.Type, ptr %a156
%t158 = insertvalue %S.gen.Val %t152, %S.ast.Type %t157, 1
store %S.gen.Val %t158, ptr %a159
%t160 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t161 = load { ptr, i64, i64 }, ptr %t160
store { ptr, i64, i64 } %t161, ptr %a162
call void @finch_str_sub(ptr %a163, ptr %a162, i64 0, i64 1, ptr @.str.3055, i64 2151)
%t164 = load { ptr, i64, i64 }, ptr %a163
store { ptr, i64, i64 } %t164, ptr %a165
%t166 = load ptr, ptr %a1
%t167 = load ptr, ptr %a1
%t168 = load { ptr, i64, i64 }, ptr %a165
%t169 = load %S.gen.Val, ptr %a159
%t170 = load %S.gen.Val, ptr %a139
%t171 = load %S.ast.Node, ptr %a2
%t172 = call %S.gen.Val @finch.gen.arith(ptr %t167, { ptr, i64, i64 } %t168, %S.gen.Val %t169, %S.gen.Val %t170, %S.ast.Node %t171)
%t173 = getelementptr inbounds %S.gen.Place, ptr %a143, i32 0, i32 1
%t174 = load %S.ast.Type, ptr %t173
%t175 = load %S.ast.Node, ptr %a2
%t176 = load { ptr, i64, i64 }, ptr %a71
%t177 = call %S.gen.Val @finch.gen.coerce(ptr %t166, %S.gen.Val %t172, %S.ast.Type %t174, %S.ast.Node %t175, { ptr, i64, i64 } %t176)
store %S.gen.Val %t177, ptr %a178
%t179 = load ptr, ptr %a1
%t180 = load ptr, ptr %a1
%t181 = getelementptr inbounds %S.gen.Place, ptr %a143, 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)
%t184 = load ptr, ptr %a1
%t185 = load %S.gen.Val, ptr %a178
%t186 = call { ptr, i64, i64 } @finch.gen.own(ptr %t184, %S.gen.Val %t185)
%t187 = getelementptr inbounds %S.gen.Place, ptr %a143, i32 0, i32 0
%t188 = load { ptr, i64, i64 }, ptr %t187
call void @finch.gen.store(ptr %t179, { ptr, i64, i64 } %t183, { ptr, i64, i64 } %t186, { ptr, i64, i64 } %t188)
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
%a11 = alloca { ptr, i64, i64 }, align 16
%a12 = 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 = 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.3056, 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.3057, i64 11, i64 0 })
%t10 = extractvalue %S.gen.Val %t9, 0
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 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 %range4783, label %inrange4784
range4783:
call void @finch_panic_index(ptr @.str.3058, i64 2161, i64 0, i64 %t6)
unreachable
inrange4784:
%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.3059, 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.3060, 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.3061, 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 %then4785, label %else4786
then4785:
%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 %endif4787
else4786:
%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 %endif4787
endif4787:
%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 %range4788, label %inrange4789
range4788:
call void @finch_panic_index(ptr @.str.3062, i64 2171, i64 1, i64 %t39)
unreachable
inrange4789:
%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 %panic4790, label %ok4791
panic4790:
call void @finch_panic(ptr @.str.3063, i64 2172, ptr @.str.3064)
unreachable
ok4791:
%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 %then4792, label %else4793
then4792:
%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 %range4795, label %inrange4796
range4795:
call void @finch_panic_index(ptr @.str.3065, i64 2176, i64 2, i64 %t61)
unreachable
inrange4796:
%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.from4797
logic.from4797:
br i1 %t66, label %logic.end4799, label %logic.rhs4798
logic.rhs4798:
%t67 = load ptr, ptr %a1
%t68 = icmp eq ptr %t67, null
br i1 %t68, label %panic4800, label %ok4801
panic4800:
call void @finch_panic(ptr @.str.3066, i64 2177, ptr @.str.3067)
unreachable
ok4801:
%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.rend4802
logic.rend4802:
br label %logic.end4799
logic.end4799:
%t72 = phi i1 [ true, %logic.from4797 ], [ %t71, %logic.rend4802 ]
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 %endif4794
else4793:
store i1 true, ptr %a49
br label %endif4794
endif4794:
%t75 = load i1, ptr %a49
br i1 %t75, label %then4803, label %endif4805
then4803:
%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 %endif4805
endif4805:
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
%a93 = alloca i1, 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.3068, 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.3069, 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.3070, 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 %range4806, label %inrange4807
range4806:
call void @finch_panic_index(ptr @.str.3071, i64 2193, i64 0, i64 %t18)
unreachable
inrange4807:
%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.3072, 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.from4808
logic.from4808:
br i1 %t27, label %logic.rhs4809, label %logic.end4810
logic.rhs4809:
%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 %range4811, label %inrange4812
range4811:
call void @finch_panic_index(ptr @.str.3073, i64 2193, i64 0, i64 %t30)
unreachable
inrange4812:
%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.3074, 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.rend4813
logic.rend4813:
br label %logic.end4810
logic.end4810:
%t40 = phi i1 [ false, %logic.from4808 ], [ %t39, %logic.rend4813 ]
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 %range4814, label %inrange4815
range4814:
call void @finch_panic_index(ptr @.str.3075, i64 2194, i64 0, i64 %t45)
unreachable
inrange4815:
%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 %then4816, label %else4817
then4816:
%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 %endif4818
else4817:
%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 %endif4818
endif4818:
%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 %panic4819, label %ok4820
panic4819:
call void @finch_panic(ptr @.str.3076, i64 2201, ptr @.str.3077)
unreachable
ok4820:
%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 { 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 %panic4821, label %ok4822
panic4821:
call void @finch_panic(ptr @.str.3078, i64 2201, ptr @.str.3079)
unreachable
ok4822:
%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 i64, ptr %t64
%t82 = add i64 %t81, 1
call void @finch_arr_reserve(ptr %t63, i64 %t82, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64))
%t83 = load ptr, ptr %t63
%t84 = getelementptr inbounds %S.gen.Loop, ptr %t83, i64 %t81
store %S.gen.Loop %t80, ptr %t84
store i64 %t82, ptr %t64
%t85 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t86 = load { ptr, i64, i64 }, ptr %t85
%t87 = extractvalue { ptr, i64, i64 } %t86, 1
%t88 = icmp uge i64 1, %t87
br i1 %t88, label %range4823, label %inrange4824
range4823:
call void @finch_panic_index(ptr @.str.3080, i64 2202, i64 1, i64 %t87)
unreachable
inrange4824:
%t89 = extractvalue { ptr, i64, i64 } %t86, 0
%t90 = getelementptr inbounds %S.ast.Node, ptr %t89, i64 1
%t91 = load %S.ast.Node, ptr %t90
%t92 = call i1 @finch.gen.countBreaks(%S.ast.Node %t91)
store i1 %t92, ptr %a93
%t94 = load ptr, ptr %a1
%t95 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t96 = load { ptr, i64, i64 }, ptr %t95
%t97 = extractvalue { ptr, i64, i64 } %t96, 1
%t98 = icmp uge i64 1, %t97
br i1 %t98, label %range4825, label %inrange4826
range4825:
call void @finch_panic_index(ptr @.str.3081, i64 2203, i64 1, i64 %t97)
unreachable
inrange4826:
%t99 = extractvalue { ptr, i64, i64 } %t96, 0
%t100 = getelementptr inbounds %S.ast.Node, ptr %t99, i64 1
%t101 = load %S.ast.Node, ptr %t100
call void @finch.gen.block(ptr %t94, %S.ast.Node %t101, i1 true)
%t102 = load ptr, ptr %a1
%t103 = icmp eq ptr %t102, null
br i1 %t103, label %panic4827, label %ok4828
panic4827:
call void @finch_panic(ptr @.str.3082, i64 2204, ptr @.str.3083)
unreachable
ok4828:
%t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 11
%t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1
%t106 = load i64, ptr %t105
%t107 = icmp eq i64 %t106, 0
br i1 %t107, label %panic4829, label %ok4830
panic4829:
call void @finch_panic(ptr @.str.3084, i64 2204, ptr @.str.3085)
unreachable
ok4830:
%t108 = sub i64 %t106, 1
%t109 = load ptr, ptr %t104
%t110 = getelementptr inbounds %S.gen.Loop, ptr %t109, i64 %t108
%t111 = load %S.gen.Loop, ptr %t110
store i64 %t108, ptr %t105
%t112 = load ptr, ptr %a1
%t113 = load { ptr, i64, i64 }, ptr %a5
call void @finch.gen.br(ptr %t112, { ptr, i64, i64 } %t113)
%t114 = load i1, ptr %a41
%t115 = xor i1 %t114, true
br label %logic.from4831
logic.from4831:
br i1 %t115, label %logic.end4833, label %logic.rhs4832
logic.rhs4832:
%t116 = load i1, ptr %a93
br label %logic.rend4834
logic.rend4834:
br label %logic.end4833
logic.end4833:
%t117 = phi i1 [ true, %logic.from4831 ], [ %t116, %logic.rend4834 ]
br i1 %t117, label %then4835, label %endif4837
then4835:
%t118 = load ptr, ptr %a1
%t119 = load { ptr, i64, i64 }, ptr %a11
call void @finch.gen.label(ptr %t118, { ptr, i64, i64 } %t119)
br label %endif4837
endif4837:
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.3086, 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 %then4838, label %endif4840
then4838:
ret i1 true
endif4840:
%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.3087, 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.from4841
logic.from4841:
br i1 %t13, label %logic.end4843, label %logic.rhs4842
logic.rhs4842:
%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.3088, 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.rend4844
logic.rend4844:
br label %logic.end4843
logic.end4843:
%t20 = phi i1 [ true, %logic.from4841 ], [ %t19, %logic.rend4844 ]
br label %logic.from4845
logic.from4845:
br i1 %t20, label %logic.end4847, label %logic.rhs4846
logic.rhs4846:
%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.3089, 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.rend4848
logic.rend4848:
br label %logic.end4847
logic.end4847:
%t27 = phi i1 [ true, %logic.from4845 ], [ %t26, %logic.rend4848 ]
br i1 %t27, label %then4849, label %endif4851
then4849:
ret i1 false
endif4851:
%t28 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9
store i64 0, ptr %a29
br label %each.cond4852
each.cond4852:
%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.body4853, label %each.end4855
each.body4853:
%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 %then4856, label %endif4858
then4856:
ret i1 true
endif4858:
br label %each.step4854
each.step4854:
%t40 = load i64, ptr %a29
%t41 = add i64 %t40, 1
store i64 %t41, ptr %a29
br label %each.cond4852
each.end4855:
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
%a23 = alloca { ptr, i64, i64 }, align 16
%a24 = alloca { ptr, i64, i64 }, align 16
%a26 = 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
%a59 = alloca { ptr, i64, i64 }, align 16
%a62 = 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
%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
%a86 = alloca { ptr, i64, i64 }, align 16
%a87 = alloca { ptr, i64, i64 }, align 16
%a88 = 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
%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
%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
%a160 = alloca { ptr, i64, i64 }, align 16
%a161 = alloca { ptr, i64, i64 }, align 16
%a162 = 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 %range4859, label %inrange4860
range4859:
call void @finch_panic_index(ptr @.str.3090, i64 2228, i64 0, i64 %t7)
unreachable
inrange4860:
%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.3091, 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 %range4861, label %inrange4862
range4861:
call void @finch_panic_index(ptr @.str.3092, i64 2228, i64 0, i64 %t16)
unreachable
inrange4862:
%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.3093, i64 20, i64 0 })
%t22 = extractvalue %S.gen.Val %t21, 0
store { ptr, i64, i64 } %t22, ptr %a23
call void @finch_str_copy(ptr %a24, ptr %a23)
%t25 = load { ptr, i64, i64 }, ptr %a24
store { ptr, i64, i64 } %t25, ptr %a26
%t27 = load ptr, ptr %a1
%t28 = load ptr, ptr %a1
%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 1, %t31
br i1 %t32, label %range4863, label %inrange4864
range4863:
call void @finch_panic_index(ptr @.str.3094, i64 2229, i64 1, i64 %t31)
unreachable
inrange4864:
%t33 = extractvalue { ptr, i64, i64 } %t30, 0
%t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 1
%t35 = load %S.ast.Node, ptr %t34
%t36 = call %S.gen.Val @finch.gen.expr(ptr %t28, %S.ast.Node %t35)
%t37 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3095, i64 3, i64 0 })
%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 %range4865, label %inrange4866
range4865:
call void @finch_panic_index(ptr @.str.3096, i64 2229, i64 1, i64 %t40)
unreachable
inrange4866:
%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 %S.gen.Val @finch.gen.coerce(ptr %t27, %S.gen.Val %t36, %S.ast.Type %t37, %S.ast.Node %t44, { ptr, i64, i64 } { ptr @.str.3097, i64 18, i64 0 })
%t46 = extractvalue %S.gen.Val %t45, 0
store { ptr, i64, i64 } %t46, ptr %a47
call void @finch_str_copy(ptr %a48, ptr %a47)
%t49 = load { ptr, i64, i64 }, ptr %a48
store { ptr, i64, i64 } %t49, ptr %a50
%t51 = load ptr, ptr %a1
call void @finch.gen.pushScope(ptr %t51)
%t52 = load ptr, ptr %a1
%t53 = load %S.ast.Node, ptr %a2
%t54 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t55 = load { ptr, i64, i64 }, ptr %t54
%t56 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3098, i64 3, i64 0 })
%t57 = load { ptr, i64, i64 }, ptr %a26
%t58 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t52, %S.ast.Node %t53, { ptr, i64, i64 } %t55, %S.ast.Type %t56, { ptr, i64, i64 } %t57, i1 true)
store { ptr, i64, i64 } %t58, ptr %a59
%t60 = load ptr, ptr %a1
%t61 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t60, { ptr, i64, i64 } { ptr @.str.3099, i64 8, i64 0 })
store { ptr, i64, i64 } %t61, ptr %a62
%t63 = load ptr, ptr %a1
%t64 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t63, { ptr, i64, i64 } { ptr @.str.3100, i64 8, i64 0 })
store { ptr, i64, i64 } %t64, ptr %a65
%t66 = load ptr, ptr %a1
%t67 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t66, { ptr, i64, i64 } { ptr @.str.3101, i64 8, i64 0 })
store { ptr, i64, i64 } %t67, ptr %a68
%t69 = load ptr, ptr %a1
%t70 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t69, { ptr, i64, i64 } { ptr @.str.3102, i64 7, i64 0 })
store { ptr, i64, i64 } %t70, ptr %a71
%t72 = load ptr, ptr %a1
%t73 = load { ptr, i64, i64 }, ptr %a62
call void @finch.gen.br(ptr %t72, { ptr, i64, i64 } %t73)
%t74 = load ptr, ptr %a1
%t75 = load { ptr, i64, i64 }, ptr %a62
call void @finch.gen.label(ptr %t74, { ptr, i64, i64 } %t75)
%t76 = load ptr, ptr %a1
%t77 = load { ptr, i64, i64 }, ptr %a59
%t78 = call { ptr, i64, i64 } @finch.gen.load(ptr %t76, { ptr, i64, i64 } { ptr @.str.3103, i64 3, i64 0 }, { ptr, i64, i64 } %t77)
store { ptr, i64, i64 } %t78, ptr %a79
%t80 = load ptr, ptr %a1
%t81 = load { ptr, i64, i64 }, ptr %a79
store { ptr, i64, i64 } { ptr @.str.3104, i64 13, 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.3105, i64 2, i64 0 }, ptr %a88
call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88)
%t89 = load { ptr, i64, i64 }, ptr %a86
%t90 = load { ptr, i64, i64 }, ptr %a50
store { ptr, i64, i64 } %t89, 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
%t95 = call { ptr, i64, i64 } @finch.gen.op(ptr %t80, { ptr, i64, i64 } %t94)
store { ptr, i64, i64 } %t95, ptr %a96
%t97 = load ptr, ptr %a1
%t98 = load { ptr, i64, i64 }, ptr %a96
%t99 = load { ptr, i64, i64 }, ptr %a65
%t100 = load { ptr, i64, i64 }, ptr %a71
call void @finch.gen.condBr(ptr %t97, { ptr, i64, i64 } %t98, { ptr, i64, i64 } %t99, { ptr, i64, i64 } %t100)
%t101 = load ptr, ptr %a1
%t102 = load { ptr, i64, i64 }, ptr %a65
call void @finch.gen.label(ptr %t101, { ptr, i64, i64 } %t102)
%t103 = load ptr, ptr %a1
%t104 = icmp eq ptr %t103, null
br i1 %t104, label %panic4867, label %ok4868
panic4867:
call void @finch_panic(ptr @.str.3106, i64 2242, ptr @.str.3107)
unreachable
ok4868:
%t105 = getelementptr inbounds %S.gen.Gen, ptr %t103, i32 0, i32 11
%t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t105, i32 0, i32 1
%t107 = load { ptr, i64, i64 }, ptr %a68
store { ptr, i64, i64 } %t107, ptr %a108
call void @finch_str_copy(ptr %a109, ptr %a108)
%t110 = load { ptr, i64, i64 }, ptr %a109
%t111 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t110, 0
%t112 = load { ptr, i64, i64 }, ptr %a71
store { ptr, i64, i64 } %t112, ptr %a113
call void @finch_str_copy(ptr %a114, ptr %a113)
%t115 = load { ptr, i64, i64 }, ptr %a114
%t116 = insertvalue %S.gen.Loop %t111, { ptr, i64, i64 } %t115, 1
%t117 = load ptr, ptr %a1
%t118 = icmp eq ptr %t117, null
br i1 %t118, label %panic4869, label %ok4870
panic4869:
call void @finch_panic(ptr @.str.3108, i64 2242, ptr @.str.3109)
unreachable
ok4870:
%t119 = getelementptr inbounds %S.gen.Gen, ptr %t117, i32 0, i32 10
%t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1
%t121 = load i64, ptr %t120
%t122 = insertvalue %S.gen.Loop %t116, i64 %t121, 2
%t123 = load i64, ptr %t106
%t124 = add i64 %t123, 1
call void @finch_arr_reserve(ptr %t105, i64 %t124, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64))
%t125 = load ptr, ptr %t105
%t126 = getelementptr inbounds %S.gen.Loop, ptr %t125, i64 %t123
store %S.gen.Loop %t122, ptr %t126
store i64 %t124, ptr %t106
%t127 = load ptr, ptr %a1
%t128 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t129 = load { ptr, i64, i64 }, ptr %t128
%t130 = extractvalue { ptr, i64, i64 } %t129, 1
%t131 = icmp uge i64 2, %t130
br i1 %t131, label %range4871, label %inrange4872
range4871:
call void @finch_panic_index(ptr @.str.3110, i64 2243, i64 2, i64 %t130)
unreachable
inrange4872:
%t132 = extractvalue { ptr, i64, i64 } %t129, 0
%t133 = getelementptr inbounds %S.ast.Node, ptr %t132, i64 2
%t134 = load %S.ast.Node, ptr %t133
call void @finch.gen.block(ptr %t127, %S.ast.Node %t134, i1 true)
%t135 = load ptr, ptr %a1
%t136 = icmp eq ptr %t135, null
br i1 %t136, label %panic4873, label %ok4874
panic4873:
call void @finch_panic(ptr @.str.3111, i64 2244, ptr @.str.3112)
unreachable
ok4874:
%t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 11
%t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1
%t139 = load i64, ptr %t138
%t140 = icmp eq i64 %t139, 0
br i1 %t140, label %panic4875, label %ok4876
panic4875:
call void @finch_panic(ptr @.str.3113, i64 2244, ptr @.str.3114)
unreachable
ok4876:
%t141 = sub i64 %t139, 1
%t142 = load ptr, ptr %t137
%t143 = getelementptr inbounds %S.gen.Loop, ptr %t142, i64 %t141
%t144 = load %S.gen.Loop, ptr %t143
store i64 %t141, ptr %t138
%t145 = load ptr, ptr %a1
%t146 = load { ptr, i64, i64 }, ptr %a68
call void @finch.gen.br(ptr %t145, { ptr, i64, i64 } %t146)
%t147 = load ptr, ptr %a1
%t148 = load { ptr, i64, i64 }, ptr %a68
call void @finch.gen.label(ptr %t147, { ptr, i64, i64 } %t148)
%t149 = load ptr, ptr %a1
%t150 = load { ptr, i64, i64 }, ptr %a59
%t151 = call { ptr, i64, i64 } @finch.gen.load(ptr %t149, { ptr, i64, i64 } { ptr @.str.3115, i64 3, i64 0 }, { ptr, i64, i64 } %t150)
store { ptr, i64, i64 } %t151, ptr %a152
%t153 = load ptr, ptr %a1
%t154 = load ptr, ptr %a1
%t155 = load { ptr, i64, i64 }, ptr %a152
store { ptr, i64, i64 } { ptr @.str.3117, i64 8, i64 0 }, ptr %a157
store { ptr, i64, i64 } %t155, ptr %a158
call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158)
%t159 = load { ptr, i64, i64 }, ptr %a156
store { ptr, i64, i64 } %t159, ptr %a161
store { ptr, i64, i64 } { ptr @.str.3118, i64 3, i64 0 }, ptr %a162
call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162)
%t163 = load { ptr, i64, i64 }, ptr %a160
%t164 = call { ptr, i64, i64 } @finch.gen.op(ptr %t154, { ptr, i64, i64 } %t163)
%t165 = load { ptr, i64, i64 }, ptr %a59
call void @finch.gen.store(ptr %t153, { ptr, i64, i64 } { ptr @.str.3116, i64 3, i64 0 }, { ptr, i64, i64 } %t164, { ptr, i64, i64 } %t165)
%t166 = load ptr, ptr %a1
%t167 = load { ptr, i64, i64 }, ptr %a62
call void @finch.gen.br(ptr %t166, { ptr, i64, i64 } %t167)
%t168 = load ptr, ptr %a1
%t169 = load { ptr, i64, i64 }, ptr %a71
call void @finch.gen.label(ptr %t168, { ptr, i64, i64 } %t169)
%t170 = load ptr, ptr %a1
call void @finch.gen.popScope(ptr %t170)
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
%a47 = alloca i1, align 16
%a50 = alloca { ptr, i64, i64 }, align 16
%a53 = 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
%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
%a81 = alloca { ptr, i64, i64 }, align 16
%a84 = 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
%a103 = alloca { ptr, i64, i64 }, align 16
%a106 = 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
%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
%a131 = 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
%a139 = alloca { ptr, i64, i64 }, align 16
%a140 = alloca { ptr, i64, i64 }, align 16
%a141 = 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
%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
%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
%a183 = alloca { ptr, i64, i64 }, align 16
%a184 = alloca { ptr, i64, i64 }, align 16
%a185 = alloca { ptr, i64, i64 }, align 16
%a196 = 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
%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
%a221 = 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
%a234 = alloca { ptr, i64, i64 }, align 16
%a235 = alloca { ptr, i64, i64 }, align 16
%a236 = alloca { ptr, i64, i64 }, align 16
%a248 = alloca { ptr, i64, i64 }, align 16
%a255 = 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
%a277 = alloca { ptr, i64, i64 }, align 16
%a278 = alloca { ptr, i64, i64 }, align 16
%a282 = alloca { ptr, i64, i64 }, align 16
%a283 = alloca { ptr, i64, i64 }, align 16
%a306 = alloca { ptr, i64, i64 }, align 16
%a332 = alloca { ptr, i64, i64 }, align 16
%a371 = 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
%a379 = alloca { ptr, i64, i64 }, align 16
%a380 = alloca { ptr, i64, i64 }, align 16
%a381 = 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 %range4877, label %inrange4878
range4877:
call void @finch_panic_index(ptr @.str.3119, i64 2256, i64 0, i64 %t8)
unreachable
inrange4878:
%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 %range4879, label %inrange4880
range4879:
call void @finch_panic_index(ptr @.str.3120, i64 2257, i64 1, i64 %t19)
unreachable
inrange4880:
%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.from4881
logic.from4881:
br i1 %t28, label %logic.rhs4882, label %logic.end4883
logic.rhs4882:
%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 %range4884, label %inrange4885
range4884:
call void @finch_panic_index(ptr @.str.3121, i64 2258, i64 0, i64 %t32)
unreachable
inrange4885:
%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 %range4886, label %inrange4887
range4886:
call void @finch_panic_index(ptr @.str.3122, i64 2258, i64 1, i64 %t40)
unreachable
inrange4887:
%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)
br label %logic.rend4888
logic.rend4888:
br label %logic.end4883
logic.end4883:
%t46 = phi i1 [ false, %logic.from4881 ], [ %t45, %logic.rend4888 ]
store i1 %t46, ptr %a47
%t48 = load ptr, ptr %a1
%t49 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t48, { ptr, i64, i64 } { ptr @.str.3123, i64 3, i64 0 })
store { ptr, i64, i64 } %t49, ptr %a50
%t51 = load ptr, ptr %a1
%t52 = load { ptr, i64, i64 }, ptr %a50
call void @finch.gen.store(ptr %t51, { ptr, i64, i64 } { ptr @.str.3124, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3125, i64 1, i64 0 }, { ptr, i64, i64 } %t52)
store { ptr, i64, i64 } { ptr @.str.3126, i64 0, i64 0 }, ptr %a53
%t54 = load i1, ptr %a5
br i1 %t54, label %then4889, label %endif4891
then4889:
%t55 = load ptr, ptr %a1
%t56 = load ptr, ptr %a1
%t57 = load ptr, ptr %a1
%t58 = load %S.ast.Type, ptr %a4
%t59 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t57, %S.ast.Type %t58)
store { ptr, i64, i64 } { ptr @.str.3128, i64 23, 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.3129, i64 6, i64 0 }, ptr %a66
call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66)
%t67 = load { ptr, i64, i64 }, ptr %a64
%t68 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t67, 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.3130, i64 14, i64 0 }, ptr %a75
call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75)
%t76 = load { ptr, i64, i64 }, ptr %a73
%t77 = call { ptr, i64, i64 } @finch.gen.op(ptr %t56, { ptr, i64, i64 } %t76)
%t78 = call { ptr, i64, i64 } @finch.gen.load(ptr %t55, { ptr, i64, i64 } { ptr @.str.3127, i64 3, i64 0 }, { ptr, i64, i64 } %t77)
store { ptr, i64, i64 } %t78, ptr %a53
br label %endif4891
endif4891:
%t79 = load ptr, ptr %a1
%t80 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t79, { ptr, i64, i64 } { ptr @.str.3131, i64 8, i64 0 })
store { ptr, i64, i64 } %t80, ptr %a81
%t82 = load ptr, ptr %a1
%t83 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t82, { ptr, i64, i64 } { ptr @.str.3132, i64 9, i64 0 })
store { ptr, i64, i64 } %t83, ptr %a84
%t85 = load ptr, ptr %a1
%t86 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t85, { ptr, i64, i64 } { ptr @.str.3133, i64 8, i64 0 })
store { ptr, i64, i64 } %t86, ptr %a87
%t88 = load ptr, ptr %a1
%t89 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t88, { ptr, i64, i64 } { ptr @.str.3134, 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.3135, i64 7, i64 0 })
store { ptr, i64, i64 } %t92, ptr %a93
%t94 = load ptr, ptr %a1
%t95 = load { ptr, i64, i64 }, ptr %a81
call void @finch.gen.br(ptr %t94, { ptr, i64, i64 } %t95)
%t96 = load ptr, ptr %a1
%t97 = load { ptr, i64, i64 }, ptr %a81
call void @finch.gen.label(ptr %t96, { ptr, i64, i64 } %t97)
%t98 = load i1, ptr %a5
br label %logic.from4892
logic.from4892:
br i1 %t98, label %logic.rhs4893, label %logic.end4894
logic.rhs4893:
%t99 = load i1, ptr %a47
br label %logic.rend4895
logic.rend4895:
br label %logic.end4894
logic.end4894:
%t100 = phi i1 [ false, %logic.from4892 ], [ %t99, %logic.rend4895 ]
br i1 %t100, label %then4896, label %endif4898
then4896:
%t101 = load ptr, ptr %a1
%t102 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t101, { ptr, i64, i64 } { ptr @.str.3136, i64 11, i64 0 })
store { ptr, i64, i64 } %t102, ptr %a103
%t104 = load ptr, ptr %a1
%t105 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t104, { ptr, i64, i64 } { ptr @.str.3137, i64 8, i64 0 })
store { ptr, i64, i64 } %t105, ptr %a106
%t107 = load ptr, ptr %a1
%t108 = load ptr, ptr %a1
%t109 = load ptr, ptr %a1
%t110 = load %S.ast.Type, ptr %a4
%t111 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t109, %S.ast.Type %t110)
store { ptr, i64, i64 } { ptr @.str.3139, i64 23, i64 0 }, 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.3140, i64 6, i64 0 }, ptr %a118
call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118)
%t119 = load { ptr, i64, i64 }, ptr %a116
%t120 = load { ptr, i64, i64 }, ptr %a3
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)
%t124 = load { ptr, i64, i64 }, ptr %a121
store { ptr, i64, i64 } %t124, ptr %a126
store { ptr, i64, i64 } { ptr @.str.3141, i64 14, i64 0 }, ptr %a127
call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127)
%t128 = load { ptr, i64, i64 }, ptr %a125
%t129 = call { ptr, i64, i64 } @finch.gen.op(ptr %t108, { ptr, i64, i64 } %t128)
%t130 = call { ptr, i64, i64 } @finch.gen.load(ptr %t107, { ptr, i64, i64 } { ptr @.str.3138, i64 3, i64 0 }, { ptr, i64, i64 } %t129)
store { ptr, i64, i64 } %t130, ptr %a131
%t132 = load ptr, ptr %a1
%t133 = load ptr, ptr %a1
%t134 = load { ptr, i64, i64 }, ptr %a131
store { ptr, i64, i64 } { ptr @.str.3142, i64 12, 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.3143, i64 2, i64 0 }, ptr %a141
call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141)
%t142 = load { ptr, i64, i64 }, ptr %a139
%t143 = load { ptr, i64, i64 }, ptr %a53
store { ptr, i64, i64 } %t142, 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
%t148 = call { ptr, i64, i64 } @finch.gen.op(ptr %t133, { ptr, i64, i64 } %t147)
%t149 = load { ptr, i64, i64 }, ptr %a103
%t150 = load { ptr, i64, i64 }, ptr %a106
call void @finch.gen.condBr(ptr %t132, { ptr, i64, i64 } %t148, { ptr, i64, i64 } %t149, { ptr, i64, i64 } %t150)
%t151 = load ptr, ptr %a1
%t152 = load { ptr, i64, i64 }, ptr %a103
call void @finch.gen.label(ptr %t151, { ptr, i64, i64 } %t152)
%t153 = load ptr, ptr %a1
%t154 = load ptr, ptr %a1
%t155 = load ptr, ptr %a1
%t156 = icmp eq ptr %t155, null
br i1 %t156, label %panic4899, label %ok4900
panic4899:
call void @finch_panic(ptr @.str.3145, i64 2279, ptr @.str.3146)
unreachable
ok4900:
%t157 = getelementptr inbounds %S.gen.Gen, ptr %t155, i32 0, i32 1
%t158 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13
%t159 = load i64, ptr %t158
%t160 = load { ptr, i64, i64 }, ptr %t157
%t161 = extractvalue { ptr, i64, i64 } %t160, 1
%t162 = icmp uge i64 %t159, %t161
br i1 %t162, label %range4901, label %inrange4902
range4901:
call void @finch_panic_index(ptr @.str.3147, i64 2279, i64 %t159, i64 %t161)
unreachable
inrange4902:
%t163 = extractvalue { ptr, i64, i64 } %t160, 0
%t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %t163, i64 %t159
%t165 = load { ptr, i64, i64 }, ptr %t164
%t166 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t154, { ptr, i64, i64 } %t165)
store { ptr, i64, i64 } { ptr @.str.3144, i64 33, i64 0 }, ptr %a168
store { ptr, i64, i64 } %t166, ptr %a169
call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169)
%t170 = load { ptr, i64, i64 }, ptr %a167
store { ptr, i64, i64 } %t170, ptr %a172
store { ptr, i64, i64 } { ptr @.str.3148, i64 6, 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.ast.Node, ptr %a2, i32 0, i32 11
%t176 = load i64, ptr %t175
call void @finch_str_from_int(ptr %a177, i64 %t176)
%t178 = load { ptr, i64, i64 }, ptr %a177
store { ptr, i64, i64 } %t174, 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.3149, i64 1, i64 0 }, ptr %a185
call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185)
%t186 = load { ptr, i64, i64 }, ptr %a183
call void @finch.gen.emit(ptr %t153, { ptr, i64, i64 } %t186)
%t187 = load ptr, ptr %a1
call void @finch.gen.emit(ptr %t187, { ptr, i64, i64 } { ptr @.str.3150, i64 11, i64 0 })
%t188 = load ptr, ptr %a1
%t189 = icmp eq ptr %t188, null
br i1 %t189, label %panic4903, label %ok4904
panic4903:
call void @finch_panic(ptr @.str.3151, i64 2281, ptr @.str.3152)
unreachable
ok4904:
%t190 = getelementptr inbounds %S.gen.Gen, ptr %t188, i32 0, i32 9
store i1 true, ptr %t190
%t191 = load ptr, ptr %a1
%t192 = load { ptr, i64, i64 }, ptr %a106
call void @finch.gen.label(ptr %t191, { ptr, i64, i64 } %t192)
br label %endif4898
endif4898:
%t193 = load ptr, ptr %a1
%t194 = load { ptr, i64, i64 }, ptr %a50
%t195 = call { ptr, i64, i64 } @finch.gen.load(ptr %t193, { ptr, i64, i64 } { ptr @.str.3153, i64 3, i64 0 }, { ptr, i64, i64 } %t194)
store { ptr, i64, i64 } %t195, ptr %a196
%t197 = load ptr, ptr %a1
%t198 = load ptr, ptr %a1
%t199 = load ptr, ptr %a1
%t200 = load %S.ast.Type, ptr %a4
%t201 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t199, %S.ast.Type %t200)
store { ptr, i64, i64 } { ptr @.str.3155, i64 23, i64 0 }, ptr %a203
store { ptr, i64, i64 } %t201, ptr %a204
call void @finch_str_concat(ptr %a202, ptr %a203, ptr %a204)
%t205 = load { ptr, i64, i64 }, ptr %a202
store { ptr, i64, i64 } %t205, ptr %a207
store { ptr, i64, i64 } { ptr @.str.3156, i64 6, i64 0 }, ptr %a208
call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208)
%t209 = load { ptr, i64, i64 }, ptr %a206
%t210 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t209, ptr %a212
store { ptr, i64, i64 } %t210, ptr %a213
call void @finch_str_concat(ptr %a211, ptr %a212, ptr %a213)
%t214 = load { ptr, i64, i64 }, ptr %a211
store { ptr, i64, i64 } %t214, ptr %a216
store { ptr, i64, i64 } { ptr @.str.3157, i64 14, i64 0 }, ptr %a217
call void @finch_str_concat(ptr %a215, ptr %a216, ptr %a217)
%t218 = load { ptr, i64, i64 }, ptr %a215
%t219 = call { ptr, i64, i64 } @finch.gen.op(ptr %t198, { ptr, i64, i64 } %t218)
%t220 = call { ptr, i64, i64 } @finch.gen.load(ptr %t197, { ptr, i64, i64 } { ptr @.str.3154, 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, i64, i64 }, ptr %a196
store { ptr, i64, i64 } { ptr @.str.3158, i64 13, i64 0 }, ptr %a226
store { ptr, i64, i64 } %t224, ptr %a227
call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227)
%t228 = load { ptr, i64, i64 }, ptr %a225
store { ptr, i64, i64 } %t228, ptr %a230
store { ptr, i64, i64 } { ptr @.str.3159, i64 2, i64 0 }, ptr %a231
call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231)
%t232 = load { ptr, i64, i64 }, ptr %a229
%t233 = load { ptr, i64, i64 }, ptr %a221
store { ptr, i64, i64 } %t232, ptr %a235
store { ptr, i64, i64 } %t233, ptr %a236
call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236)
%t237 = load { ptr, i64, i64 }, ptr %a234
%t238 = call { ptr, i64, i64 } @finch.gen.op(ptr %t223, { ptr, i64, i64 } %t237)
%t239 = load { ptr, i64, i64 }, ptr %a84
%t240 = load { ptr, i64, i64 }, ptr %a93
call void @finch.gen.condBr(ptr %t222, { ptr, i64, i64 } %t238, { ptr, i64, i64 } %t239, { ptr, i64, i64 } %t240)
%t241 = load ptr, ptr %a1
%t242 = load { ptr, i64, i64 }, ptr %a84
call void @finch.gen.label(ptr %t241, { ptr, i64, i64 } %t242)
%t243 = load ptr, ptr %a1
%t244 = load { ptr, i64, i64 }, ptr %a3
%t245 = load %S.ast.Type, ptr %a4
%t246 = load { ptr, i64, i64 }, ptr %a196
%t247 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t243, { ptr, i64, i64 } %t244, %S.ast.Type %t245, { ptr, i64, i64 } %t246)
store { ptr, i64, i64 } %t247, ptr %a248
%t249 = load ptr, ptr %a1
%t250 = load ptr, ptr %a1
%t251 = load { ptr, i64, i64 }, ptr %a248
%t252 = load %S.ast.Type, ptr %a4
%t253 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t250, { ptr, i64, i64 } %t251, %S.ast.Type %t252, i64 0)
%t254 = call { ptr, i64, i64 } @finch.gen.load(ptr %t249, { ptr, i64, i64 } { ptr @.str.3160, i64 3, i64 0 }, { ptr, i64, i64 } %t253)
store { ptr, i64, i64 } %t254, ptr %a255
%t256 = load ptr, ptr %a1
%t257 = load ptr, ptr %a1
%t258 = load { ptr, i64, i64 }, ptr %a255
store { ptr, i64, i64 } { ptr @.str.3161, i64 12, i64 0 }, ptr %a260
store { ptr, i64, i64 } %t258, ptr %a261
call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261)
%t262 = load { ptr, i64, i64 }, ptr %a259
store { ptr, i64, i64 } %t262, ptr %a264
store { ptr, i64, i64 } { ptr @.str.3162, i64 3, i64 0 }, ptr %a265
call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265)
%t266 = load { ptr, i64, i64 }, ptr %a263
%t267 = call { ptr, i64, i64 } @finch.gen.op(ptr %t257, { ptr, i64, i64 } %t266)
%t268 = load { ptr, i64, i64 }, ptr %a90
%t269 = load { ptr, i64, i64 }, ptr %a87
call void @finch.gen.condBr(ptr %t256, { ptr, i64, i64 } %t267, { ptr, i64, i64 } %t268, { ptr, i64, i64 } %t269)
%t270 = load ptr, ptr %a1
%t271 = load { ptr, i64, i64 }, ptr %a87
call void @finch.gen.label(ptr %t270, { ptr, i64, i64 } %t271)
%t272 = load ptr, ptr %a1
%t273 = icmp eq ptr %t272, null
br i1 %t273, label %panic4905, label %ok4906
panic4905:
call void @finch_panic(ptr @.str.3163, i64 2292, ptr @.str.3164)
unreachable
ok4906:
%t274 = getelementptr inbounds %S.gen.Gen, ptr %t272, i32 0, i32 11
%t275 = getelementptr inbounds { ptr, i64, i64 }, ptr %t274, i32 0, i32 1
%t276 = load { ptr, i64, i64 }, ptr %a90
store { ptr, i64, i64 } %t276, ptr %a277
call void @finch_str_copy(ptr %a278, ptr %a277)
%t279 = load { ptr, i64, i64 }, ptr %a278
%t280 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t279, 0
%t281 = load { ptr, i64, i64 }, ptr %a93
store { ptr, i64, i64 } %t281, ptr %a282
call void @finch_str_copy(ptr %a283, ptr %a282)
%t284 = load { ptr, i64, i64 }, ptr %a283
%t285 = insertvalue %S.gen.Loop %t280, { ptr, i64, i64 } %t284, 1
%t286 = load ptr, ptr %a1
%t287 = icmp eq ptr %t286, null
br i1 %t287, label %panic4907, label %ok4908
panic4907:
call void @finch_panic(ptr @.str.3165, i64 2292, ptr @.str.3166)
unreachable
ok4908:
%t288 = getelementptr inbounds %S.gen.Gen, ptr %t286, i32 0, i32 10
%t289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t288, i32 0, i32 1
%t290 = load i64, ptr %t289
%t291 = insertvalue %S.gen.Loop %t285, i64 %t290, 2
%t292 = load i64, ptr %t275
%t293 = add i64 %t292, 1
call void @finch_arr_reserve(ptr %t274, i64 %t293, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64))
%t294 = load ptr, ptr %t274
%t295 = getelementptr inbounds %S.gen.Loop, ptr %t294, i64 %t292
store %S.gen.Loop %t291, ptr %t295
store i64 %t293, ptr %t275
%t296 = load ptr, ptr %a1
call void @finch.gen.pushScope(ptr %t296)
%t297 = load ptr, ptr %a1
%t298 = load ptr, ptr %a1
%t299 = load %S.ast.Type, ptr %a16
%t300 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t298, %S.ast.Type %t299)
%t301 = load ptr, ptr %a1
%t302 = load { ptr, i64, i64 }, ptr %a248
%t303 = load %S.ast.Type, ptr %a4
%t304 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t301, { ptr, i64, i64 } %t302, %S.ast.Type %t303, i64 1)
%t305 = call { ptr, i64, i64 } @finch.gen.load(ptr %t297, { ptr, i64, i64 } %t300, { ptr, i64, i64 } %t304)
store { ptr, i64, i64 } %t305, ptr %a306
%t307 = load i1, ptr %a47
br i1 %t307, label %then4909, label %endif4911
then4909:
%t308 = load ptr, ptr %a1
%t309 = load { ptr, i64, i64 }, ptr %a306
%t310 = load %S.ast.Type, ptr %a16
%t311 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t308, { ptr, i64, i64 } %t309, %S.ast.Type %t310)
store { ptr, i64, i64 } %t311, ptr %a306
br label %endif4911
endif4911:
%t312 = load ptr, ptr %a1
%t313 = load %S.ast.Node, ptr %a2
%t314 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t315 = load { ptr, i64, i64 }, ptr %t314
%t316 = load %S.ast.Type, ptr %a16
%t317 = load { ptr, i64, i64 }, ptr %a306
%t318 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t312, %S.ast.Node %t313, { ptr, i64, i64 } %t315, %S.ast.Type %t316, { ptr, i64, i64 } %t317, i1 true)
%t319 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4
%t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %t319, i32 0, i32 1
%t321 = load i64, ptr %t320
%t322 = icmp sgt i64 %t321, 0
br i1 %t322, label %then4912, label %endif4914
then4912:
%t323 = load ptr, ptr %a1
%t324 = load ptr, ptr %a1
%t325 = load %S.ast.Type, ptr %a27
%t326 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t324, %S.ast.Type %t325)
%t327 = load ptr, ptr %a1
%t328 = load { ptr, i64, i64 }, ptr %a248
%t329 = load %S.ast.Type, ptr %a4
%t330 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t327, { ptr, i64, i64 } %t328, %S.ast.Type %t329, i64 2)
%t331 = call { ptr, i64, i64 } @finch.gen.load(ptr %t323, { ptr, i64, i64 } %t326, { ptr, i64, i64 } %t330)
store { ptr, i64, i64 } %t331, ptr %a332
%t333 = load i1, ptr %a47
br i1 %t333, label %then4915, label %endif4917
then4915:
%t334 = load ptr, ptr %a1
%t335 = load { ptr, i64, i64 }, ptr %a332
%t336 = load %S.ast.Type, ptr %a27
%t337 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t334, { ptr, i64, i64 } %t335, %S.ast.Type %t336)
store { ptr, i64, i64 } %t337, ptr %a332
br label %endif4917
endif4917:
%t338 = load ptr, ptr %a1
%t339 = load %S.ast.Node, ptr %a2
%t340 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4
%t341 = load { ptr, i64, i64 }, ptr %t340
%t342 = load %S.ast.Type, ptr %a27
%t343 = load { ptr, i64, i64 }, ptr %a332
%t344 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t338, %S.ast.Node %t339, { ptr, i64, i64 } %t341, %S.ast.Type %t342, { ptr, i64, i64 } %t343, i1 true)
br label %endif4914
endif4914:
%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 %range4918, label %inrange4919
range4918:
call void @finch_panic_index(ptr @.str.3167, i64 2306, i64 1, i64 %t348)
unreachable
inrange4919:
%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 %panic4920, label %ok4921
panic4920:
call void @finch_panic(ptr @.str.3168, i64 2308, ptr @.str.3169)
unreachable
ok4921:
%t356 = getelementptr inbounds %S.gen.Gen, ptr %t354, i32 0, i32 11
%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 %panic4922, label %ok4923
panic4922:
call void @finch_panic(ptr @.str.3170, i64 2308, ptr @.str.3171)
unreachable
ok4923:
%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
%t364 = load ptr, ptr %a1
%t365 = load { ptr, i64, i64 }, ptr %a90
call void @finch.gen.br(ptr %t364, { ptr, i64, i64 } %t365)
%t366 = load ptr, ptr %a1
%t367 = load { ptr, i64, i64 }, ptr %a90
call void @finch.gen.label(ptr %t366, { ptr, i64, i64 } %t367)
%t368 = load ptr, ptr %a1
%t369 = load { ptr, i64, i64 }, ptr %a50
%t370 = call { ptr, i64, i64 } @finch.gen.load(ptr %t368, { ptr, i64, i64 } { ptr @.str.3172, i64 3, i64 0 }, { ptr, i64, i64 } %t369)
store { ptr, i64, i64 } %t370, ptr %a371
%t372 = load ptr, ptr %a1
%t373 = load ptr, ptr %a1
%t374 = load { ptr, i64, i64 }, ptr %a371
store { ptr, i64, i64 } { ptr @.str.3174, i64 8, i64 0 }, ptr %a376
store { ptr, i64, i64 } %t374, ptr %a377
call void @finch_str_concat(ptr %a375, ptr %a376, ptr %a377)
%t378 = load { ptr, i64, i64 }, ptr %a375
store { ptr, i64, i64 } %t378, ptr %a380
store { ptr, i64, i64 } { ptr @.str.3175, i64 3, i64 0 }, ptr %a381
call void @finch_str_concat(ptr %a379, ptr %a380, ptr %a381)
%t382 = load { ptr, i64, i64 }, ptr %a379
%t383 = call { ptr, i64, i64 } @finch.gen.op(ptr %t373, { ptr, i64, i64 } %t382)
%t384 = load { ptr, i64, i64 }, ptr %a50
call void @finch.gen.store(ptr %t372, { ptr, i64, i64 } { ptr @.str.3173, i64 3, i64 0 }, { ptr, i64, i64 } %t383, { ptr, i64, i64 } %t384)
%t385 = load ptr, ptr %a1
%t386 = load { ptr, i64, i64 }, ptr %a81
call void @finch.gen.br(ptr %t385, { ptr, i64, i64 } %t386)
%t387 = load ptr, ptr %a1
%t388 = load { ptr, i64, i64 }, ptr %a93
call void @finch.gen.label(ptr %t387, { ptr, i64, i64 } %t388)
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
%a28 = alloca %S.ast.Type, align 16
%a29 = alloca %S.ast.Type, align 16
%a34 = alloca %S.ast.Type, align 16
%a35 = alloca %S.ast.Type, align 16
%a43 = alloca { ptr, i64, i64 }, align 16
%a44 = 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
%a63 = 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
%a86 = alloca %S.ast.Type, align 16
%a89 = alloca { ptr, i64, i64 }, align 16
%a90 = alloca { ptr, i64, i64 }, align 16
%a100 = alloca %S.ast.Type, align 16
%a101 = alloca %S.ast.Type, align 16
%a127 = alloca i1, align 16
%a130 = alloca { ptr, i64, i64 }, align 16
%a135 = alloca { ptr, i64, i64 }, align 16
%a138 = alloca { ptr, i64, i64 }, align 16
%a141 = alloca { ptr, i64, i64 }, align 16
%a144 = 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
%a162 = 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
%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
%a183 = 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
%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
%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
%a217 = alloca { ptr, i64, i64 }, align 16
%a218 = alloca { ptr, i64, i64 }, align 16
%a221 = alloca { ptr, i64, i64 }, align 16
%a228 = alloca { ptr, i64, i64 }, align 16
%a239 = alloca { ptr, i64, i64 }, align 16
%a240 = alloca { ptr, i64, i64 }, align 16
%a244 = alloca { ptr, i64, i64 }, align 16
%a245 = 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
%a278 = alloca { ptr, i64, i64 }, align 16
%a279 = alloca { ptr, i64, i64 }, align 16
%a313 = 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
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 %range4924, label %inrange4925
range4924:
call void @finch_panic_index(ptr @.str.3176, i64 2319, i64 0, i64 %t7)
unreachable
inrange4925:
%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.3177, i64 0, i64 0 }, ptr %a14
%t15 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3178, 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 %then4926, label %else4927
then4926:
%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
store { ptr, i64, i64 } %t24, ptr %a14
%t25 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 1
%t26 = getelementptr inbounds %S.gen.Place, ptr %t25, i32 0, i32 1
%t27 = load %S.ast.Type, ptr %t26
store %S.ast.Type %t27, ptr %a28
call void @finch.copy.S_ast_Type(ptr %a29, ptr %a28)
%t30 = load %S.ast.Type, ptr %a29
store %S.ast.Type %t30, ptr %a16
br label %endif4928
else4927:
%t31 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 2
%t32 = getelementptr inbounds %S.gen.Val, ptr %t31, i32 0, i32 1
%t33 = load %S.ast.Type, ptr %t32
store %S.ast.Type %t33, ptr %a34
call void @finch.copy.S_ast_Type(ptr %a35, ptr %a34)
%t36 = load %S.ast.Type, ptr %a35
store %S.ast.Type %t36, ptr %a16
%t37 = load ptr, ptr %a1
%t38 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 2
%t39 = load %S.gen.Val, ptr %t38
%t40 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t37, %S.gen.Val %t39)
store { ptr, i64, i64 } %t40, ptr %a14
br label %endif4928
endif4928:
%t41 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0
%t42 = load { ptr, i64, i64 }, ptr %t41
store { ptr, i64, i64 } %t42, ptr %a43
store { ptr, i64, i64 } { ptr @.str.3179, i64 3, i64 0 }, ptr %a44
%t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44)
%t46 = icmp ne i32 %t45, 0
br i1 %t46, label %then4929, label %endif4931
then4929:
%t47 = load ptr, ptr %a1
%t48 = load %S.ast.Node, ptr %a2
%t49 = load { ptr, i64, i64 }, ptr %a14
%t50 = load %S.ast.Type, ptr %a16
%t51 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0
%t52 = load i1, ptr %t51
call void @finch.gen.eachMap(ptr %t47, %S.ast.Node %t48, { ptr, i64, i64 } %t49, %S.ast.Type %t50, i1 %t52)
%t53 = load ptr, ptr %a1
call void @finch.gen.popScope(ptr %t53)
ret void
endif4931:
%t54 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0
%t55 = load { ptr, i64, i64 }, ptr %t54
store { ptr, i64, i64 } %t55, ptr %a56
store { ptr, i64, i64 } { ptr @.str.3180, i64 5, i64 0 }, ptr %a57
%t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57)
%t59 = icmp eq i32 %t58, 0
br label %logic.from4932
logic.from4932:
br i1 %t59, label %logic.rhs4933, label %logic.end4934
logic.rhs4933:
%t60 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0
%t61 = load { ptr, i64, i64 }, ptr %t60
store { ptr, i64, i64 } %t61, ptr %a62
store { ptr, i64, i64 } { ptr @.str.3181, i64 3, i64 0 }, ptr %a63
%t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63)
%t65 = icmp eq i32 %t64, 0
br label %logic.rend4935
logic.rend4935:
br label %logic.end4934
logic.end4934:
%t66 = phi i1 [ false, %logic.from4932 ], [ %t65, %logic.rend4935 ]
br i1 %t66, label %then4936, label %endif4938
then4936:
%t67 = load ptr, ptr %a1
%t68 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t69 = load { ptr, i64, i64 }, ptr %t68
%t70 = extractvalue { ptr, i64, i64 } %t69, 1
%t71 = icmp uge i64 0, %t70
br i1 %t71, label %range4939, label %inrange4940
range4939:
call void @finch_panic_index(ptr @.str.3182, i64 2335, i64 0, i64 %t70)
unreachable
inrange4940:
%t72 = extractvalue { ptr, i64, i64 } %t69, 0
%t73 = getelementptr inbounds %S.ast.Node, ptr %t72, i64 0
%t74 = load %S.ast.Node, ptr %t73
%t75 = load %S.ast.Type, ptr %a16
%t76 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t75)
store { ptr, i64, i64 } { ptr @.str.3183, i64 55, 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.3184, i64 36, i64 0 }, ptr %a83
call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83)
%t84 = load { ptr, i64, i64 }, ptr %a81
call void @finch.gen.fail(ptr %t67, %S.ast.Node %t74, { ptr, i64, i64 } %t84)
br label %endif4938
endif4938:
%t85 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3185, i64 4, i64 0 })
store %S.ast.Type %t85, ptr %a86
%t87 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0
%t88 = load { ptr, i64, i64 }, ptr %t87
store { ptr, i64, i64 } %t88, ptr %a89
store { ptr, i64, i64 } { ptr @.str.3186, i64 5, i64 0 }, ptr %a90
%t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90)
%t92 = icmp ne i32 %t91, 0
br i1 %t92, label %then4941, label %endif4943
then4941:
%t93 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 1
%t94 = load { ptr, i64, i64 }, ptr %t93
%t95 = extractvalue { ptr, i64, i64 } %t94, 1
%t96 = icmp uge i64 0, %t95
br i1 %t96, label %range4944, label %inrange4945
range4944:
call void @finch_panic_index(ptr @.str.3187, i64 2339, i64 0, i64 %t95)
unreachable
inrange4945:
%t97 = extractvalue { ptr, i64, i64 } %t94, 0
%t98 = getelementptr inbounds %S.ast.Type, ptr %t97, i64 0
%t99 = load %S.ast.Type, ptr %t98
store %S.ast.Type %t99, ptr %a100
call void @finch.copy.S_ast_Type(ptr %a101, ptr %a100)
%t102 = load %S.ast.Type, ptr %a101
store %S.ast.Type %t102, ptr %a86
br label %endif4943
endif4943:
%t103 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0
%t104 = load i1, ptr %t103
br label %logic.from4946
logic.from4946:
br i1 %t104, label %logic.rhs4947, label %logic.end4948
logic.rhs4947:
%t105 = load ptr, ptr %a1
%t106 = load %S.ast.Type, ptr %a86
%t107 = call i1 @finch.gen.owning(ptr %t105, %S.ast.Type %t106)
br label %logic.rend4949
logic.rend4949:
br label %logic.end4948
logic.end4948:
%t108 = phi i1 [ false, %logic.from4946 ], [ %t107, %logic.rend4949 ]
br label %logic.from4950
logic.from4950:
br i1 %t108, label %logic.rhs4951, label %logic.end4952
logic.rhs4951:
%t109 = load ptr, ptr %a1
%t110 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t111 = load { ptr, i64, i64 }, ptr %t110
%t112 = extractvalue { ptr, i64, i64 } %t111, 1
%t113 = icmp uge i64 0, %t112
br i1 %t113, label %range4953, label %inrange4954
range4953:
call void @finch_panic_index(ptr @.str.3188, i64 2341, i64 0, i64 %t112)
unreachable
inrange4954:
%t114 = extractvalue { ptr, i64, i64 } %t111, 0
%t115 = getelementptr inbounds %S.ast.Node, ptr %t114, i64 0
%t116 = load %S.ast.Node, ptr %t115
%t117 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t116)
%t118 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t119 = load { ptr, i64, i64 }, ptr %t118
%t120 = extractvalue { ptr, i64, i64 } %t119, 1
%t121 = icmp uge i64 1, %t120
br i1 %t121, label %range4955, label %inrange4956
range4955:
call void @finch_panic_index(ptr @.str.3189, i64 2341, i64 1, i64 %t120)
unreachable
inrange4956:
%t122 = extractvalue { ptr, i64, i64 } %t119, 0
%t123 = getelementptr inbounds %S.ast.Node, ptr %t122, i64 1
%t124 = load %S.ast.Node, ptr %t123
%t125 = call i1 @finch.gen.mutates(ptr %t109, { ptr, i64, i64 } %t117, %S.ast.Node %t124)
br label %logic.rend4957
logic.rend4957:
br label %logic.end4952
logic.end4952:
%t126 = phi i1 [ false, %logic.from4950 ], [ %t125, %logic.rend4957 ]
store i1 %t126, ptr %a127
%t128 = load ptr, ptr %a1
%t129 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t128, { ptr, i64, i64 } { ptr @.str.3190, i64 3, i64 0 })
store { ptr, i64, i64 } %t129, ptr %a130
%t131 = load ptr, ptr %a1
%t132 = load { ptr, i64, i64 }, ptr %a130
call void @finch.gen.store(ptr %t131, { ptr, i64, i64 } { ptr @.str.3191, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3192, i64 1, i64 0 }, { ptr, i64, i64 } %t132)
%t133 = load ptr, ptr %a1
%t134 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t133, { ptr, i64, i64 } { ptr @.str.3193, i64 9, i64 0 })
store { ptr, i64, i64 } %t134, ptr %a135
%t136 = load ptr, ptr %a1
%t137 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t136, { ptr, i64, i64 } { ptr @.str.3194, i64 9, i64 0 })
store { ptr, i64, i64 } %t137, ptr %a138
%t139 = load ptr, ptr %a1
%t140 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t139, { ptr, i64, i64 } { ptr @.str.3195, i64 9, i64 0 })
store { ptr, i64, i64 } %t140, ptr %a141
%t142 = load ptr, ptr %a1
%t143 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t142, { ptr, i64, i64 } { ptr @.str.3196, i64 8, i64 0 })
store { ptr, i64, i64 } %t143, ptr %a144
%t145 = load ptr, ptr %a1
%t146 = load { ptr, i64, i64 }, ptr %a135
call void @finch.gen.br(ptr %t145, { ptr, i64, i64 } %t146)
%t147 = load ptr, ptr %a1
%t148 = load { ptr, i64, i64 }, ptr %a135
call void @finch.gen.label(ptr %t147, { ptr, i64, i64 } %t148)
%t149 = load ptr, ptr %a1
%t150 = load ptr, ptr %a1
%t151 = load { ptr, i64, i64 }, ptr %a14
store { ptr, i64, i64 } { ptr @.str.3198, i64 46, i64 0 }, ptr %a153
store { ptr, i64, i64 } %t151, ptr %a154
call void @finch_str_concat(ptr %a152, ptr %a153, ptr %a154)
%t155 = load { ptr, i64, i64 }, ptr %a152
store { ptr, i64, i64 } %t155, ptr %a157
store { ptr, i64, i64 } { ptr @.str.3199, i64 14, i64 0 }, ptr %a158
call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158)
%t159 = load { ptr, i64, i64 }, ptr %a156
%t160 = call { ptr, i64, i64 } @finch.gen.op(ptr %t150, { ptr, i64, i64 } %t159)
%t161 = call { ptr, i64, i64 } @finch.gen.load(ptr %t149, { ptr, i64, i64 } { ptr @.str.3197, i64 3, i64 0 }, { ptr, i64, i64 } %t160)
store { ptr, i64, i64 } %t161, ptr %a162
%t163 = load ptr, ptr %a1
%t164 = load { ptr, i64, i64 }, ptr %a130
%t165 = call { ptr, i64, i64 } @finch.gen.load(ptr %t163, { ptr, i64, i64 } { ptr @.str.3200, i64 3, i64 0 }, { ptr, i64, i64 } %t164)
store { ptr, i64, i64 } %t165, ptr %a166
%t167 = load ptr, ptr %a1
%t168 = load { ptr, i64, i64 }, ptr %a166
store { ptr, i64, i64 } { ptr @.str.3201, i64 13, i64 0 }, ptr %a170
store { ptr, i64, i64 } %t168, ptr %a171
call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171)
%t172 = load { ptr, i64, i64 }, ptr %a169
store { ptr, i64, i64 } %t172, ptr %a174
store { ptr, i64, i64 } { ptr @.str.3202, i64 2, 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 %a162
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)
%t181 = load { ptr, i64, i64 }, ptr %a178
%t182 = call { ptr, i64, i64 } @finch.gen.op(ptr %t167, { ptr, i64, i64 } %t181)
store { ptr, i64, i64 } %t182, ptr %a183
%t184 = load ptr, ptr %a1
%t185 = load { ptr, i64, i64 }, ptr %a183
%t186 = load { ptr, i64, i64 }, ptr %a138
%t187 = load { ptr, i64, i64 }, ptr %a144
call void @finch.gen.condBr(ptr %t184, { ptr, i64, i64 } %t185, { ptr, i64, i64 } %t186, { ptr, i64, i64 } %t187)
%t188 = load ptr, ptr %a1
%t189 = load { ptr, i64, i64 }, ptr %a138
call void @finch.gen.label(ptr %t188, { ptr, i64, i64 } %t189)
%t190 = load ptr, ptr %a1
%t191 = load { ptr, i64, i64 }, ptr %a14
%t192 = call { ptr, i64, i64 } @finch.gen.load(ptr %t190, { ptr, i64, i64 } { ptr @.str.3203, i64 3, i64 0 }, { ptr, i64, i64 } %t191)
store { ptr, i64, i64 } %t192, ptr %a193
%t194 = load ptr, ptr %a1
%t195 = load ptr, ptr %a1
%t196 = load %S.ast.Type, ptr %a86
%t197 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t195, %S.ast.Type %t196)
store { ptr, i64, i64 } { ptr @.str.3204, i64 23, i64 0 }, ptr %a199
store { ptr, i64, i64 } %t197, ptr %a200
call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200)
%t201 = load { ptr, i64, i64 }, ptr %a198
store { ptr, i64, i64 } %t201, ptr %a203
store { ptr, i64, i64 } { ptr @.str.3205, i64 6, i64 0 }, ptr %a204
call void @finch_str_concat(ptr %a202, ptr %a203, ptr %a204)
%t205 = load { ptr, i64, i64 }, ptr %a202
%t206 = load { ptr, i64, i64 }, ptr %a193
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)
%t210 = load { ptr, i64, i64 }, ptr %a207
store { ptr, i64, i64 } %t210, ptr %a212
store { ptr, i64, i64 } { ptr @.str.3206, i64 6, i64 0 }, ptr %a213
call void @finch_str_concat(ptr %a211, ptr %a212, ptr %a213)
%t214 = load { ptr, i64, i64 }, ptr %a211
%t215 = load { ptr, i64, i64 }, ptr %a166
store { ptr, i64, i64 } %t214, ptr %a217
store { ptr, i64, i64 } %t215, ptr %a218
call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218)
%t219 = load { ptr, i64, i64 }, ptr %a216
%t220 = call { ptr, i64, i64 } @finch.gen.op(ptr %t194, { ptr, i64, i64 } %t219)
store { ptr, i64, i64 } %t220, ptr %a221
%t222 = load ptr, ptr %a1
%t223 = load ptr, ptr %a1
%t224 = load %S.ast.Type, ptr %a86
%t225 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t223, %S.ast.Type %t224)
%t226 = load { ptr, i64, i64 }, ptr %a221
%t227 = call { ptr, i64, i64 } @finch.gen.load(ptr %t222, { ptr, i64, i64 } %t225, { ptr, i64, i64 } %t226)
store { ptr, i64, i64 } %t227, ptr %a228
%t229 = load i1, ptr %a127
br i1 %t229, label %then4958, label %endif4960
then4958:
%t230 = load ptr, ptr %a1
%t231 = load { ptr, i64, i64 }, ptr %a228
%t232 = load %S.ast.Type, ptr %a86
%t233 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t230, { ptr, i64, i64 } %t231, %S.ast.Type %t232)
store { ptr, i64, i64 } %t233, ptr %a228
br label %endif4960
endif4960:
%t234 = load ptr, ptr %a1
%t235 = icmp eq ptr %t234, null
br i1 %t235, label %panic4961, label %ok4962
panic4961:
call void @finch_panic(ptr @.str.3207, i64 2361, ptr @.str.3208)
unreachable
ok4962:
%t236 = getelementptr inbounds %S.gen.Gen, ptr %t234, i32 0, i32 11
%t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %t236, i32 0, i32 1
%t238 = load { ptr, i64, i64 }, ptr %a141
store { ptr, i64, i64 } %t238, ptr %a239
call void @finch_str_copy(ptr %a240, ptr %a239)
%t241 = load { ptr, i64, i64 }, ptr %a240
%t242 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t241, 0
%t243 = load { ptr, i64, i64 }, ptr %a144
store { ptr, i64, i64 } %t243, ptr %a244
call void @finch_str_copy(ptr %a245, ptr %a244)
%t246 = load { ptr, i64, i64 }, ptr %a245
%t247 = insertvalue %S.gen.Loop %t242, { ptr, i64, i64 } %t246, 1
%t248 = load ptr, ptr %a1
%t249 = icmp eq ptr %t248, null
br i1 %t249, label %panic4963, label %ok4964
panic4963:
call void @finch_panic(ptr @.str.3209, i64 2361, ptr @.str.3210)
unreachable
ok4964:
%t250 = getelementptr inbounds %S.gen.Gen, ptr %t248, i32 0, i32 10
%t251 = getelementptr inbounds { ptr, i64, i64 }, ptr %t250, i32 0, i32 1
%t252 = load i64, ptr %t251
%t253 = insertvalue %S.gen.Loop %t247, i64 %t252, 2
%t254 = load i64, ptr %t237
%t255 = add i64 %t254, 1
call void @finch_arr_reserve(ptr %t236, i64 %t255, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64))
%t256 = load ptr, ptr %t236
%t257 = getelementptr inbounds %S.gen.Loop, ptr %t256, i64 %t254
store %S.gen.Loop %t253, ptr %t257
store i64 %t255, ptr %t237
%t258 = load ptr, ptr %a1
call void @finch.gen.pushScope(ptr %t258)
%t259 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t260 = load { ptr, i64, i64 }, ptr %t259
store { ptr, i64, i64 } %t260, ptr %a261
call void @finch_str_copy(ptr %a262, ptr %a261)
%t263 = load { ptr, i64, i64 }, ptr %a262
store { ptr, i64, i64 } %t263, ptr %a264
%t265 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4
%t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i32 0, i32 1
%t267 = load i64, ptr %t266
%t268 = icmp sgt i64 %t267, 0
br i1 %t268, label %then4965, label %endif4967
then4965:
%t269 = load ptr, ptr %a1
%t270 = load %S.ast.Node, ptr %a2
%t271 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t272 = load { ptr, i64, i64 }, ptr %t271
%t273 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3211, i64 3, i64 0 })
%t274 = load { ptr, i64, i64 }, ptr %a166
%t275 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t269, %S.ast.Node %t270, { ptr, i64, i64 } %t272, %S.ast.Type %t273, { ptr, i64, i64 } %t274, i1 true)
%t276 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4
%t277 = load { ptr, i64, i64 }, ptr %t276
store { ptr, i64, i64 } %t277, ptr %a278
call void @finch_str_copy(ptr %a279, ptr %a278)
%t280 = load { ptr, i64, i64 }, ptr %a279
store { ptr, i64, i64 } %t280, ptr %a264
br label %endif4967
endif4967:
%t281 = load ptr, ptr %a1
%t282 = load %S.ast.Node, ptr %a2
%t283 = load { ptr, i64, i64 }, ptr %a264
%t284 = load %S.ast.Type, ptr %a86
%t285 = load { ptr, i64, i64 }, ptr %a228
%t286 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t281, %S.ast.Node %t282, { ptr, i64, i64 } %t283, %S.ast.Type %t284, { ptr, i64, i64 } %t285, i1 true)
%t287 = load ptr, ptr %a1
%t288 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t289 = load { ptr, i64, i64 }, ptr %t288
%t290 = extractvalue { ptr, i64, i64 } %t289, 1
%t291 = icmp uge i64 1, %t290
br i1 %t291, label %range4968, label %inrange4969
range4968:
call void @finch_panic_index(ptr @.str.3212, i64 2369, i64 1, i64 %t290)
unreachable
inrange4969:
%t292 = extractvalue { ptr, i64, i64 } %t289, 0
%t293 = getelementptr inbounds %S.ast.Node, ptr %t292, i64 1
%t294 = load %S.ast.Node, ptr %t293
call void @finch.gen.block(ptr %t287, %S.ast.Node %t294, i1 true)
%t295 = load ptr, ptr %a1
call void @finch.gen.popScope(ptr %t295)
%t296 = load ptr, ptr %a1
%t297 = icmp eq ptr %t296, null
br i1 %t297, label %panic4970, label %ok4971
panic4970:
call void @finch_panic(ptr @.str.3213, i64 2371, ptr @.str.3214)
unreachable
ok4971:
%t298 = getelementptr inbounds %S.gen.Gen, ptr %t296, i32 0, i32 11
%t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i32 0, i32 1
%t300 = load i64, ptr %t299
%t301 = icmp eq i64 %t300, 0
br i1 %t301, label %panic4972, label %ok4973
panic4972:
call void @finch_panic(ptr @.str.3215, i64 2371, ptr @.str.3216)
unreachable
ok4973:
%t302 = sub i64 %t300, 1
%t303 = load ptr, ptr %t298
%t304 = getelementptr inbounds %S.gen.Loop, ptr %t303, i64 %t302
%t305 = load %S.gen.Loop, ptr %t304
store i64 %t302, ptr %t299
%t306 = load ptr, ptr %a1
%t307 = load { ptr, i64, i64 }, ptr %a141
call void @finch.gen.br(ptr %t306, { ptr, i64, i64 } %t307)
%t308 = load ptr, ptr %a1
%t309 = load { ptr, i64, i64 }, ptr %a141
call void @finch.gen.label(ptr %t308, { ptr, i64, i64 } %t309)
%t310 = load ptr, ptr %a1
%t311 = load { ptr, i64, i64 }, ptr %a130
%t312 = call { ptr, i64, i64 } @finch.gen.load(ptr %t310, { ptr, i64, i64 } { ptr @.str.3217, i64 3, i64 0 }, { ptr, i64, i64 } %t311)
store { ptr, i64, i64 } %t312, ptr %a313
%t314 = load ptr, ptr %a1
%t315 = load ptr, ptr %a1
%t316 = load { ptr, i64, i64 }, ptr %a313
store { ptr, i64, i64 } { ptr @.str.3219, i64 8, 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.3220, i64 3, i64 0 }, ptr %a323
call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323)
%t324 = load { ptr, i64, i64 }, ptr %a321
%t325 = call { ptr, i64, i64 } @finch.gen.op(ptr %t315, { ptr, i64, i64 } %t324)
%t326 = load { ptr, i64, i64 }, ptr %a130
call void @finch.gen.store(ptr %t314, { ptr, i64, i64 } { ptr @.str.3218, i64 3, i64 0 }, { ptr, i64, i64 } %t325, { ptr, i64, i64 } %t326)
%t327 = load ptr, ptr %a1
%t328 = load { ptr, i64, i64 }, ptr %a135
call void @finch.gen.br(ptr %t327, { ptr, i64, i64 } %t328)
%t329 = load ptr, ptr %a1
%t330 = load { ptr, i64, i64 }, ptr %a144
call void @finch.gen.label(ptr %t329, { ptr, i64, i64 } %t330)
%t331 = load ptr, ptr %a1
call void @finch.gen.popScope(ptr %t331)
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
%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
%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
%a123 = alloca %S.gen.Val, align 16
%a127 = 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
%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
%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
%a169 = alloca { ptr, i64, i64 }, align 16
%a170 = alloca { ptr, i64, i64 }, align 16
%a171 = alloca { ptr, i64, i64 }, align 16
%a182 = alloca { ptr, i64, i64 }, align 16
%a183 = 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
%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
%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
%a261 = alloca { ptr, i64, i64 }, align 16
%a262 = alloca { ptr, i64, i64 }, align 16
%a263 = alloca { ptr, i64, i64 }, align 16
%a293 = alloca %S.gen.Val, 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 i1, align 16
%a309 = alloca { ptr, i64, i64 }, align 16
%a310 = alloca { ptr, i64, i64 }, align 16
%a323 = alloca i64, align 16
%a348 = 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
%a353 = alloca { ptr, i64, i64 }, align 16
%a354 = alloca { ptr, i64, i64 }, align 16
%a357 = 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
%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
%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
%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
%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
%a407 = 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
%a419 = alloca { ptr, i64, i64 }, align 16
%a420 = alloca { ptr, i64, i64 }, align 16
%a421 = 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
%a436 = alloca { ptr, i64, i64 }, align 16
%a437 = alloca { ptr, i64, i64 }, align 16
%a438 = 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
%a446 = alloca { ptr, i64, i64 }, align 16
%a447 = 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 %panic4974, label %ok4975
panic4974:
call void @finch_panic(ptr @.str.3221, i64 2382, ptr @.str.3222)
unreachable
ok4975:
%t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 44
%t6 = load i64, ptr %t5
%t7 = icmp sgt i64 %t6, 0
br i1 %t7, label %then4976, label %endif4978
then4976:
%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.3223, i64 33, i64 0 })
br label %endif4978
endif4978:
%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.from4979
logic.from4979:
br i1 %t13, label %logic.rhs4980, label %logic.end4981
logic.rhs4980:
%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 %range4982, label %inrange4983
range4982:
call void @finch_panic_index(ptr @.str.3224, i64 2386, i64 0, i64 %t16)
unreachable
inrange4983:
%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.3225, 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.rend4984
logic.rend4984:
br label %logic.end4981
logic.end4981:
%t26 = phi i1 [ false, %logic.from4979 ], [ %t25, %logic.rend4984 ]
br label %logic.from4985
logic.from4985:
br i1 %t26, label %logic.rhs4986, label %logic.end4987
logic.rhs4986:
%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 %range4988, label %inrange4989
range4988:
call void @finch_panic_index(ptr @.str.3226, i64 2386, i64 0, i64 %t29)
unreachable
inrange4989:
%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.3227, 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.rend4990
logic.rend4990:
br label %logic.end4987
logic.end4987:
%t39 = phi i1 [ false, %logic.from4985 ], [ %t38, %logic.rend4990 ]
br i1 %t39, label %then4991, label %endif4993
then4991:
%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 %range4994, label %inrange4995
range4994:
call void @finch_panic_index(ptr @.str.3228, i64 2387, i64 0, i64 %t42)
unreachable
inrange4995:
%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 %panic4996, label %ok4997
panic4996:
call void @finch_panic(ptr @.str.3229, i64 2388, ptr @.str.3230)
unreachable
ok4997:
%t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 12
%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 %then4998, label %endif5000
then4998:
store { ptr, i64, i64 } { ptr @.str.3231, i64 1, i64 0 }, ptr %a57
%t58 = load ptr, ptr %a1
%t59 = icmp eq ptr %t58, null
br i1 %t59, label %panic5001, label %ok5002
panic5001:
call void @finch_panic(ptr @.str.3232, i64 2390, ptr @.str.3233)
unreachable
ok5002:
%t60 = getelementptr inbounds %S.gen.Gen, ptr %t58, i32 0, i32 12
%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.3234, 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 %then5003, label %endif5005
then5003:
%t68 = load ptr, ptr %a1
%t69 = icmp eq ptr %t68, null
br i1 %t69, label %panic5006, label %ok5007
panic5006:
call void @finch_panic(ptr @.str.3235, i64 2391, ptr @.str.3236)
unreachable
ok5007:
%t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 12
%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.3237, i64 1, i64 0 }, ptr %a76
call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76)
%t77 = load { ptr, i64, i64 }, ptr %a74
store { ptr, i64, i64 } %t77, ptr %a57
br label %endif5005
endif5005:
%t78 = load ptr, ptr %a1
%t79 = load %S.ast.Node, ptr %a50
%t80 = load ptr, ptr %a1
%t81 = icmp eq ptr %t80, null
br i1 %t81, label %panic5008, label %ok5009
panic5008:
call void @finch_panic(ptr @.str.3239, i64 2393, ptr @.str.3240)
unreachable
ok5009:
%t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 12
%t83 = getelementptr inbounds %S.gen.FnSig, ptr %t82, i32 0, i32 1
%t84 = load { ptr, i64, i64 }, ptr %t83
store { ptr, i64, i64 } { ptr @.str.3238, i64 1, 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.3241, i64 64, i64 0 }, ptr %a91
call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91)
%t92 = load { ptr, i64, i64 }, ptr %a89
%t93 = load { ptr, i64, i64 }, ptr %a57
store { ptr, i64, i64 } %t92, ptr %a95
store { ptr, i64, i64 } %t93, ptr %a96
call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96)
%t97 = load { ptr, i64, i64 }, ptr %a94
store { ptr, i64, i64 } %t97, ptr %a99
store { ptr, i64, i64 } { ptr @.str.3242, i64 1, i64 0 }, ptr %a100
call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100)
%t101 = load { ptr, i64, i64 }, ptr %a98
call void @finch.gen.fail(ptr %t78, %S.ast.Node %t79, { ptr, i64, i64 } %t101)
br label %endif5000
endif5000:
%t102 = load ptr, ptr %a1
%t103 = load %S.ast.Node, ptr %a50
call void @finch.gen.checkArgs(ptr %t102, %S.ast.Node %t103, i64 0, i64 1, { ptr, i64, i64 } { ptr @.str.3243, i64 5, i64 0 })
%t104 = load ptr, ptr %a1
%t105 = load ptr, ptr %a1
%t106 = getelementptr inbounds %S.ast.Node, ptr %a50, i32 0, i32 9
%t107 = load { ptr, i64, i64 }, ptr %t106
%t108 = extractvalue { ptr, i64, i64 } %t107, 1
%t109 = icmp uge i64 0, %t108
br i1 %t109, label %range5010, label %inrange5011
range5010:
call void @finch_panic_index(ptr @.str.3244, i64 2396, i64 0, i64 %t108)
unreachable
inrange5011:
%t110 = extractvalue { ptr, i64, i64 } %t107, 0
%t111 = getelementptr inbounds %S.ast.Node, ptr %t110, i64 0
%t112 = load %S.ast.Node, ptr %t111
%t113 = call %S.gen.Val @finch.gen.expr(ptr %t105, %S.ast.Node %t112)
%t114 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3245, i64 3, i64 0 })
%t115 = getelementptr inbounds %S.ast.Node, ptr %a50, i32 0, i32 9
%t116 = load { ptr, i64, i64 }, ptr %t115
%t117 = extractvalue { ptr, i64, i64 } %t116, 1
%t118 = icmp uge i64 0, %t117
br i1 %t118, label %range5012, label %inrange5013
range5012:
call void @finch_panic_index(ptr @.str.3246, i64 2396, i64 0, i64 %t117)
unreachable
inrange5013:
%t119 = extractvalue { ptr, i64, i64 } %t116, 0
%t120 = getelementptr inbounds %S.ast.Node, ptr %t119, i64 0
%t121 = load %S.ast.Node, ptr %t120
%t122 = call %S.gen.Val @finch.gen.coerce(ptr %t104, %S.gen.Val %t113, %S.ast.Type %t114, %S.ast.Node %t121, { ptr, i64, i64 } { ptr @.str.3247, i64 17, i64 0 })
store %S.gen.Val %t122, ptr %a123
%t124 = load ptr, ptr %a1
%t125 = load %S.gen.Val, ptr %a123
%t126 = call { ptr, i64, i64 } @finch.gen.own(ptr %t124, %S.gen.Val %t125)
store { ptr, i64, i64 } %t126, ptr %a127
%t128 = load ptr, ptr %a1
call void @finch.gen.unwind(ptr %t128, i64 0)
%t129 = load ptr, ptr %a1
%t130 = load ptr, ptr %a1
%t131 = load ptr, ptr %a1
%t132 = icmp eq ptr %t131, null
br i1 %t132, label %panic5014, label %ok5015
panic5014:
call void @finch_panic(ptr @.str.3249, i64 2399, ptr @.str.3250)
unreachable
ok5015:
%t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 12
%t134 = load %S.gen.FnSig, ptr %t133
%t135 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t130, %S.gen.FnSig %t134)
store { ptr, i64, i64 } { ptr @.str.3248, i64 4, 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.3251, i64 1, i64 0 }, ptr %a142
call void @finch_str_concat(ptr %a140, ptr %a141, ptr %a142)
%t143 = load { ptr, i64, i64 }, ptr %a140
%t144 = load ptr, ptr %a1
%t145 = load ptr, ptr %a1
%t146 = load ptr, ptr %a1
%t147 = icmp eq ptr %t146, null
br i1 %t147, label %panic5016, label %ok5017
panic5016:
call void @finch_panic(ptr @.str.3253, i64 2399, ptr @.str.3254)
unreachable
ok5017:
%t148 = getelementptr inbounds %S.gen.Gen, ptr %t146, i32 0, i32 12
%t149 = load %S.gen.FnSig, ptr %t148
%t150 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t145, %S.gen.FnSig %t149)
store { ptr, i64, i64 } { ptr @.str.3252, i64 12, i64 0 }, ptr %a152
store { ptr, i64, i64 } %t150, ptr %a153
call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153)
%t154 = load { ptr, i64, i64 }, ptr %a151
store { ptr, i64, i64 } %t154, ptr %a156
store { ptr, i64, i64 } { ptr @.str.3255, i64 36, i64 0 }, ptr %a157
call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157)
%t158 = load { ptr, i64, i64 }, ptr %a155
%t159 = load { ptr, i64, i64 }, ptr %a127
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)
%t163 = load { ptr, i64, i64 }, ptr %a160
store { ptr, i64, i64 } %t163, ptr %a165
store { ptr, i64, i64 } { ptr @.str.3256, i64 3, i64 0 }, ptr %a166
call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166)
%t167 = load { ptr, i64, i64 }, ptr %a164
%t168 = call { ptr, i64, i64 } @finch.gen.op(ptr %t144, { ptr, i64, i64 } %t167)
store { ptr, i64, i64 } %t143, ptr %a170
store { ptr, i64, i64 } %t168, ptr %a171
call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171)
%t172 = load { ptr, i64, i64 }, ptr %a169
call void @finch.gen.emit(ptr %t129, { ptr, i64, i64 } %t172)
%t173 = load ptr, ptr %a1
%t174 = icmp eq ptr %t173, null
br i1 %t174, label %panic5018, label %ok5019
panic5018:
call void @finch_panic(ptr @.str.3257, i64 2400, ptr @.str.3258)
unreachable
ok5019:
%t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 9
store i1 true, ptr %t175
ret void
endif4993:
%t176 = load ptr, ptr %a1
%t177 = icmp eq ptr %t176, null
br i1 %t177, label %panic5020, label %ok5021
panic5020:
call void @finch_panic(ptr @.str.3259, i64 2403, ptr @.str.3260)
unreachable
ok5021:
%t178 = getelementptr inbounds %S.gen.Gen, ptr %t176, i32 0, i32 12
%t179 = getelementptr inbounds %S.gen.FnSig, ptr %t178, i32 0, i32 12
%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.3261, i64 4, i64 0 }, ptr %a183
%t184 = call i32 @finch_str_eq(ptr %a182, ptr %a183)
%t185 = icmp ne i32 %t184, 0
br i1 %t185, label %then5022, label %endif5024
then5022:
%t186 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t187 = getelementptr inbounds { ptr, i64, i64 }, ptr %t186, i32 0, i32 1
%t188 = load i64, ptr %t187
%t189 = icmp sgt i64 %t188, 0
br i1 %t189, label %then5025, label %endif5027
then5025:
%t190 = load ptr, ptr %a1
%t191 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t192 = load { ptr, i64, i64 }, ptr %t191
%t193 = extractvalue { ptr, i64, i64 } %t192, 1
%t194 = icmp uge i64 0, %t193
br i1 %t194, label %range5028, label %inrange5029
range5028:
call void @finch_panic_index(ptr @.str.3262, i64 2405, i64 0, i64 %t193)
unreachable
inrange5029:
%t195 = extractvalue { ptr, i64, i64 } %t192, 0
%t196 = getelementptr inbounds %S.ast.Node, ptr %t195, i64 0
%t197 = load %S.ast.Node, ptr %t196
%t198 = load ptr, ptr %a1
%t199 = icmp eq ptr %t198, null
br i1 %t199, label %panic5030, label %ok5031
panic5030:
call void @finch_panic(ptr @.str.3264, i64 2405, ptr @.str.3265)
unreachable
ok5031:
%t200 = getelementptr inbounds %S.gen.Gen, ptr %t198, i32 0, i32 12
%t201 = getelementptr inbounds %S.gen.FnSig, ptr %t200, i32 0, i32 1
%t202 = load { ptr, i64, i64 }, ptr %t201
store { ptr, i64, i64 } { ptr @.str.3263, i64 1, 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.3266, i64 46, i64 0 }, ptr %a209
call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209)
%t210 = load { ptr, i64, i64 }, ptr %a207
call void @finch.gen.fail(ptr %t190, %S.ast.Node %t197, { ptr, i64, i64 } %t210)
br label %endif5027
endif5027:
%t211 = load ptr, ptr %a1
call void @finch.gen.unwind(ptr %t211, i64 0)
%t212 = load ptr, ptr %a1
%t213 = icmp eq ptr %t212, null
br i1 %t213, label %panic5032, label %ok5033
panic5032:
call void @finch_panic(ptr @.str.3267, i64 2408, ptr @.str.3268)
unreachable
ok5033:
%t214 = getelementptr inbounds %S.gen.Gen, ptr %t212, i32 0, i32 12
%t215 = getelementptr inbounds %S.gen.FnSig, ptr %t214, i32 0, i32 9
%t216 = load i1, ptr %t215
br i1 %t216, label %then5034, label %else5035
then5034:
%t217 = load ptr, ptr %a1
%t218 = load ptr, ptr %a1
%t219 = load ptr, ptr %a1
%t220 = icmp eq ptr %t219, null
br i1 %t220, label %panic5037, label %ok5038
panic5037:
call void @finch_panic(ptr @.str.3270, i64 2409, ptr @.str.3271)
unreachable
ok5038:
%t221 = getelementptr inbounds %S.gen.Gen, ptr %t219, i32 0, i32 12
%t222 = load %S.gen.FnSig, ptr %t221
%t223 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t218, %S.gen.FnSig %t222)
store { ptr, i64, i64 } { ptr @.str.3269, i64 4, 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.3272, i64 53, i64 0 }, ptr %a230
call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230)
%t231 = load { ptr, i64, i64 }, ptr %a228
call void @finch.gen.emit(ptr %t217, { ptr, i64, i64 } %t231)
br label %endif5036
else5035:
%t232 = load ptr, ptr %a1
call void @finch.gen.emit(ptr %t232, { ptr, i64, i64 } { ptr @.str.3273, i64 8, i64 0 })
br label %endif5036
endif5036:
%t233 = load ptr, ptr %a1
%t234 = icmp eq ptr %t233, null
br i1 %t234, label %panic5039, label %ok5040
panic5039:
call void @finch_panic(ptr @.str.3274, i64 2413, ptr @.str.3275)
unreachable
ok5040:
%t235 = getelementptr inbounds %S.gen.Gen, ptr %t233, i32 0, i32 9
store i1 true, ptr %t235
ret void
endif5024:
%t236 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %t236, i32 0, i32 1
%t238 = load i64, ptr %t237
%t239 = icmp eq i64 %t238, 0
br i1 %t239, label %then5041, label %endif5043
then5041:
%t240 = load ptr, ptr %a1
%t241 = load %S.ast.Node, ptr %a2
%t242 = load ptr, ptr %a1
%t243 = icmp eq ptr %t242, null
br i1 %t243, label %panic5044, label %ok5045
panic5044:
call void @finch_panic(ptr @.str.3277, i64 2417, ptr @.str.3278)
unreachable
ok5045:
%t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 12
%t245 = getelementptr inbounds %S.gen.FnSig, ptr %t244, i32 0, i32 1
%t246 = load { ptr, i64, i64 }, ptr %t245
store { ptr, i64, i64 } { ptr @.str.3276, i64 1, i64 0 }, ptr %a248
store { ptr, i64, i64 } %t246, ptr %a249
call void @finch_str_concat(ptr %a247, ptr %a248, ptr %a249)
%t250 = load { ptr, i64, i64 }, ptr %a247
store { ptr, i64, i64 } %t250, ptr %a252
store { ptr, i64, i64 } { ptr @.str.3279, i64 14, 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, ptr %a1
%t256 = icmp eq ptr %t255, null
br i1 %t256, label %panic5046, label %ok5047
panic5046:
call void @finch_panic(ptr @.str.3280, i64 2417, ptr @.str.3281)
unreachable
ok5047:
%t257 = getelementptr inbounds %S.gen.Gen, ptr %t255, i32 0, i32 12
%t258 = getelementptr inbounds %S.gen.FnSig, ptr %t257, i32 0, i32 12
%t259 = load %S.ast.Type, ptr %t258
%t260 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t259)
store { ptr, i64, i64 } %t254, ptr %a262
store { ptr, i64, i64 } %t260, ptr %a263
call void @finch_str_concat(ptr %a261, ptr %a262, ptr %a263)
%t264 = load { ptr, i64, i64 }, ptr %a261
call void @finch.gen.fail(ptr %t240, %S.ast.Node %t241, { ptr, i64, i64 } %t264)
br label %endif5043
endif5043:
%t265 = load ptr, ptr %a1
%t266 = load ptr, ptr %a1
%t267 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t268 = load { ptr, i64, i64 }, ptr %t267
%t269 = extractvalue { ptr, i64, i64 } %t268, 1
%t270 = icmp uge i64 0, %t269
br i1 %t270, label %range5048, label %inrange5049
range5048:
call void @finch_panic_index(ptr @.str.3282, i64 2419, i64 0, i64 %t269)
unreachable
inrange5049:
%t271 = extractvalue { ptr, i64, i64 } %t268, 0
%t272 = getelementptr inbounds %S.ast.Node, ptr %t271, i64 0
%t273 = load %S.ast.Node, ptr %t272
%t274 = load ptr, ptr %a1
%t275 = icmp eq ptr %t274, null
br i1 %t275, label %panic5050, label %ok5051
panic5050:
call void @finch_panic(ptr @.str.3283, i64 2419, ptr @.str.3284)
unreachable
ok5051:
%t276 = getelementptr inbounds %S.gen.Gen, ptr %t274, i32 0, i32 12
%t277 = getelementptr inbounds %S.gen.FnSig, ptr %t276, i32 0, i32 12
%t278 = load %S.ast.Type, ptr %t277
%t279 = call %S.gen.Val @finch.gen.exprWant(ptr %t266, %S.ast.Node %t273, %S.ast.Type %t278)
%t280 = load ptr, ptr %a1
%t281 = icmp eq ptr %t280, null
br i1 %t281, label %panic5052, label %ok5053
panic5052:
call void @finch_panic(ptr @.str.3285, i64 2419, ptr @.str.3286)
unreachable
ok5053:
%t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 12
%t283 = getelementptr inbounds %S.gen.FnSig, ptr %t282, i32 0, i32 12
%t284 = load %S.ast.Type, ptr %t283
%t285 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t286 = load { ptr, i64, i64 }, ptr %t285
%t287 = extractvalue { ptr, i64, i64 } %t286, 1
%t288 = icmp uge i64 0, %t287
br i1 %t288, label %range5054, label %inrange5055
range5054:
call void @finch_panic_index(ptr @.str.3287, i64 2419, i64 0, i64 %t287)
unreachable
inrange5055:
%t289 = extractvalue { ptr, i64, i64 } %t286, 0
%t290 = getelementptr inbounds %S.ast.Node, ptr %t289, i64 0
%t291 = load %S.ast.Node, ptr %t290
%t292 = call %S.gen.Val @finch.gen.coerce(ptr %t265, %S.gen.Val %t279, %S.ast.Type %t284, %S.ast.Node %t291, { ptr, i64, i64 } { ptr @.str.3288, i64 18, i64 0 })
store %S.gen.Val %t292, ptr %a293
%t294 = getelementptr inbounds %S.gen.Val, ptr %a293, 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
store { ptr, i64, i64 } %t298, ptr %a299
store i1 false, ptr %a300
%t301 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t302 = load { ptr, i64, i64 }, ptr %t301
%t303 = extractvalue { ptr, i64, i64 } %t302, 1
%t304 = icmp uge i64 0, %t303
br i1 %t304, label %range5056, label %inrange5057
range5056:
call void @finch_panic_index(ptr @.str.3289, i64 2423, i64 0, i64 %t303)
unreachable
inrange5057:
%t305 = extractvalue { ptr, i64, i64 } %t302, 0
%t306 = getelementptr inbounds %S.ast.Node, ptr %t305, i64 0
%t307 = getelementptr inbounds %S.ast.Node, ptr %t306, i32 0, i32 0
%t308 = load { ptr, i64, i64 }, ptr %t307
store { ptr, i64, i64 } %t308, ptr %a309
store { ptr, i64, i64 } { ptr @.str.3290, i64 3, i64 0 }, ptr %a310
%t311 = call i32 @finch_str_eq(ptr %a309, ptr %a310)
%t312 = icmp ne i32 %t311, 0
br i1 %t312, label %then5058, label %endif5060
then5058:
%t313 = load ptr, ptr %a1
%t314 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t315 = load { ptr, i64, i64 }, ptr %t314
%t316 = extractvalue { ptr, i64, i64 } %t315, 1
%t317 = icmp uge i64 0, %t316
br i1 %t317, label %range5061, label %inrange5062
range5061:
call void @finch_panic_index(ptr @.str.3291, i64 2424, i64 0, i64 %t316)
unreachable
inrange5062:
%t318 = extractvalue { ptr, i64, i64 } %t315, 0
%t319 = getelementptr inbounds %S.ast.Node, ptr %t318, i64 0
%t320 = getelementptr inbounds %S.ast.Node, ptr %t319, i32 0, i32 1
%t321 = load { ptr, i64, i64 }, ptr %t320
%t322 = call i64 @finch.gen.lookup(ptr %t313, { ptr, i64, i64 } %t321)
store i64 %t322, ptr %a323
%t324 = load i64, ptr %a323
%t325 = icmp sge i64 %t324, 0
br label %logic.from5063
logic.from5063:
br i1 %t325, label %logic.rhs5064, label %logic.end5065
logic.rhs5064:
%t326 = load i64, ptr %a323
%t327 = sdiv i64 %t326, 100000
%t328 = icmp sgt i64 %t327, 0
br label %logic.rend5066
logic.rend5066:
br label %logic.end5065
logic.end5065:
%t329 = phi i1 [ false, %logic.from5063 ], [ %t328, %logic.rend5066 ]
store i1 %t329, ptr %a300
br label %endif5060
endif5060:
%t330 = load i1, ptr %a300
%t331 = xor i1 %t330, true
br i1 %t331, label %then5067, label %endif5069
then5067:
%t332 = load ptr, ptr %a1
%t333 = load %S.gen.Val, ptr %a293
%t334 = call { ptr, i64, i64 } @finch.gen.own(ptr %t332, %S.gen.Val %t333)
store { ptr, i64, i64 } %t334, ptr %a299
br label %endif5069
endif5069:
%t335 = load ptr, ptr %a1
call void @finch.gen.unwind(ptr %t335, i64 0)
%t336 = load ptr, ptr %a1
%t337 = icmp eq ptr %t336, null
br i1 %t337, label %panic5070, label %ok5071
panic5070:
call void @finch_panic(ptr @.str.3292, i64 2431, ptr @.str.3293)
unreachable
ok5071:
%t338 = getelementptr inbounds %S.gen.Gen, ptr %t336, i32 0, i32 12
%t339 = getelementptr inbounds %S.gen.FnSig, ptr %t338, i32 0, i32 9
%t340 = load i1, ptr %t339
br i1 %t340, label %then5072, label %else5073
then5072:
%t341 = load ptr, ptr %a1
%t342 = load ptr, ptr %a1
%t343 = load ptr, ptr %a1
%t344 = icmp eq ptr %t343, null
br i1 %t344, label %panic5075, label %ok5076
panic5075:
call void @finch_panic(ptr @.str.3295, i64 2432, ptr @.str.3296)
unreachable
ok5076:
%t345 = getelementptr inbounds %S.gen.Gen, ptr %t343, i32 0, i32 12
%t346 = load %S.gen.FnSig, ptr %t345
%t347 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t342, %S.gen.FnSig %t346)
store { ptr, i64, i64 } { ptr @.str.3294, i64 12, i64 0 }, ptr %a349
store { ptr, i64, i64 } %t347, ptr %a350
call void @finch_str_concat(ptr %a348, ptr %a349, ptr %a350)
%t351 = load { ptr, i64, i64 }, ptr %a348
store { ptr, i64, i64 } %t351, ptr %a353
store { ptr, i64, i64 } { ptr @.str.3297, i64 28, i64 0 }, ptr %a354
call void @finch_str_concat(ptr %a352, ptr %a353, ptr %a354)
%t355 = load { ptr, i64, i64 }, ptr %a352
%t356 = call { ptr, i64, i64 } @finch.gen.op(ptr %t341, { ptr, i64, i64 } %t355)
store { ptr, i64, i64 } %t356, ptr %a357
%t358 = load ptr, ptr %a1
%t359 = load ptr, ptr %a1
%t360 = load ptr, ptr %a1
%t361 = icmp eq ptr %t360, null
br i1 %t361, label %panic5077, label %ok5078
panic5077:
call void @finch_panic(ptr @.str.3299, i64 2433, ptr @.str.3300)
unreachable
ok5078:
%t362 = getelementptr inbounds %S.gen.Gen, ptr %t360, i32 0, i32 12
%t363 = load %S.gen.FnSig, ptr %t362
%t364 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t359, %S.gen.FnSig %t363)
store { ptr, i64, i64 } { ptr @.str.3298, i64 12, i64 0 }, ptr %a366
store { ptr, i64, i64 } %t364, ptr %a367
call void @finch_str_concat(ptr %a365, ptr %a366, ptr %a367)
%t368 = load { ptr, i64, i64 }, ptr %a365
store { ptr, i64, i64 } %t368, ptr %a370
store { ptr, i64, i64 } { ptr @.str.3301, i64 1, i64 0 }, ptr %a371
call void @finch_str_concat(ptr %a369, ptr %a370, ptr %a371)
%t372 = load { ptr, i64, i64 }, ptr %a369
%t373 = load { ptr, i64, i64 }, ptr %a357
store { ptr, i64, i64 } %t372, ptr %a375
store { ptr, i64, i64 } %t373, ptr %a376
call void @finch_str_concat(ptr %a374, ptr %a375, ptr %a376)
%t377 = load { ptr, i64, i64 }, ptr %a374
store { ptr, i64, i64 } %t377, ptr %a379
store { ptr, i64, i64 } { ptr @.str.3302, i64 2, i64 0 }, ptr %a380
call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380)
%t381 = load { ptr, i64, i64 }, ptr %a378
%t382 = load ptr, ptr %a1
%t383 = load ptr, ptr %a1
%t384 = icmp eq ptr %t383, null
br i1 %t384, label %panic5079, label %ok5080
panic5079:
call void @finch_panic(ptr @.str.3303, i64 2433, ptr @.str.3304)
unreachable
ok5080:
%t385 = getelementptr inbounds %S.gen.Gen, ptr %t383, i32 0, i32 12
%t386 = getelementptr inbounds %S.gen.FnSig, ptr %t385, i32 0, i32 12
%t387 = load %S.ast.Type, ptr %t386
%t388 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t382, %S.ast.Type %t387)
store { ptr, i64, i64 } %t381, 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.3305, i64 1, i64 0 }, ptr %a395
call void @finch_str_concat(ptr %a393, ptr %a394, ptr %a395)
%t396 = load { ptr, i64, i64 }, ptr %a393
%t397 = load { ptr, i64, i64 }, ptr %a299
store { ptr, i64, i64 } %t396, ptr %a399
store { ptr, i64, i64 } %t397, ptr %a400
call void @finch_str_concat(ptr %a398, ptr %a399, ptr %a400)
%t401 = load { ptr, i64, i64 }, ptr %a398
store { ptr, i64, i64 } %t401, ptr %a403
store { ptr, i64, i64 } { ptr @.str.3306, i64 3, i64 0 }, ptr %a404
call void @finch_str_concat(ptr %a402, ptr %a403, ptr %a404)
%t405 = load { ptr, i64, i64 }, ptr %a402
%t406 = call { ptr, i64, i64 } @finch.gen.op(ptr %t358, { ptr, i64, i64 } %t405)
store { ptr, i64, i64 } %t406, ptr %a407
%t408 = load ptr, ptr %a1
%t409 = load ptr, ptr %a1
%t410 = load ptr, ptr %a1
%t411 = icmp eq ptr %t410, null
br i1 %t411, label %panic5081, label %ok5082
panic5081:
call void @finch_panic(ptr @.str.3308, i64 2434, ptr @.str.3309)
unreachable
ok5082:
%t412 = getelementptr inbounds %S.gen.Gen, ptr %t410, i32 0, i32 12
%t413 = load %S.gen.FnSig, ptr %t412
%t414 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t409, %S.gen.FnSig %t413)
store { ptr, i64, i64 } { ptr @.str.3307, i64 4, i64 0 }, ptr %a416
store { ptr, i64, i64 } %t414, ptr %a417
call void @finch_str_concat(ptr %a415, ptr %a416, ptr %a417)
%t418 = load { ptr, i64, i64 }, ptr %a415
store { ptr, i64, i64 } %t418, ptr %a420
store { ptr, i64, i64 } { ptr @.str.3310, i64 1, i64 0 }, ptr %a421
call void @finch_str_concat(ptr %a419, ptr %a420, ptr %a421)
%t422 = load { ptr, i64, i64 }, ptr %a419
%t423 = load { ptr, i64, i64 }, ptr %a407
store { ptr, i64, i64 } %t422, ptr %a425
store { ptr, i64, i64 } %t423, ptr %a426
call void @finch_str_concat(ptr %a424, ptr %a425, ptr %a426)
%t427 = load { ptr, i64, i64 }, ptr %a424
call void @finch.gen.emit(ptr %t408, { ptr, i64, i64 } %t427)
br label %endif5074
else5073:
%t428 = load ptr, ptr %a1
%t429 = load ptr, ptr %a1
%t430 = load ptr, ptr %a1
%t431 = icmp eq ptr %t430, null
br i1 %t431, label %panic5083, label %ok5084
panic5083:
call void @finch_panic(ptr @.str.3312, i64 2436, ptr @.str.3313)
unreachable
ok5084:
%t432 = getelementptr inbounds %S.gen.Gen, ptr %t430, i32 0, i32 12
%t433 = getelementptr inbounds %S.gen.FnSig, ptr %t432, i32 0, i32 12
%t434 = load %S.ast.Type, ptr %t433
%t435 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t429, %S.ast.Type %t434)
store { ptr, i64, i64 } { ptr @.str.3311, i64 4, i64 0 }, ptr %a437
store { ptr, i64, i64 } %t435, ptr %a438
call void @finch_str_concat(ptr %a436, ptr %a437, ptr %a438)
%t439 = load { ptr, i64, i64 }, ptr %a436
store { ptr, i64, i64 } %t439, ptr %a441
store { ptr, i64, i64 } { ptr @.str.3314, i64 1, i64 0 }, ptr %a442
call void @finch_str_concat(ptr %a440, ptr %a441, ptr %a442)
%t443 = load { ptr, i64, i64 }, ptr %a440
%t444 = load { ptr, i64, i64 }, ptr %a299
store { ptr, i64, i64 } %t443, ptr %a446
store { ptr, i64, i64 } %t444, ptr %a447
call void @finch_str_concat(ptr %a445, ptr %a446, ptr %a447)
%t448 = load { ptr, i64, i64 }, ptr %a445
call void @finch.gen.emit(ptr %t428, { ptr, i64, i64 } %t448)
br label %endif5074
endif5074:
%t449 = load ptr, ptr %a1
%t450 = icmp eq ptr %t449, null
br i1 %t450, label %panic5085, label %ok5086
panic5085:
call void @finch_panic(ptr @.str.3315, i64 2438, ptr @.str.3316)
unreachable
ok5086:
%t451 = getelementptr inbounds %S.gen.Gen, ptr %t449, i32 0, i32 9
store i1 true, ptr %t451
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
%a16 = alloca { ptr, i64, i64 }, align 16
%a17 = alloca { ptr, i64, i64 }, align 16
%a18 = 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
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 %range5087, label %inrange5088
range5087:
call void @finch_panic_index(ptr @.str.3318, i64 2450, i64 0, i64 %t6)
unreachable
inrange5088:
%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.3317, i64 7, 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.3319, i64 2, i64 0 }, ptr %a18
call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18)
%t19 = load { ptr, i64, i64 }, ptr %a16
%t20 = load ptr, ptr %a1
%t21 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1
%t22 = load { ptr, i64, i64 }, ptr %t21
%t23 = extractvalue { ptr, i64, i64 } %t22, 1
%t24 = icmp uge i64 1, %t23
br i1 %t24, label %range5089, label %inrange5090
range5089:
call void @finch_panic_index(ptr @.str.3320, i64 2450, i64 1, i64 %t23)
unreachable
inrange5090:
%t25 = extractvalue { ptr, i64, i64 } %t22, 0
%t26 = getelementptr inbounds %S.ast.Type, ptr %t25, i64 1
%t27 = load %S.ast.Type, ptr %t26
%t28 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t20, %S.ast.Type %t27)
store { ptr, i64, i64 } %t19, 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.3321, i64 2, i64 0 }, ptr %a35
call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35)
%t36 = load { ptr, i64, i64 }, ptr %a33
ret { ptr, i64, i64 } %t36
}
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
%a10 = alloca { ptr, i64, i64 }, align 16
%a11 = alloca { ptr, i64, i64 }, align 16
%a12 = 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.3322, 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.3323, i64 26, i64 0 }, ptr %a12
call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12)
%t13 = load { ptr, i64, i64 }, ptr %a10
ret { ptr, i64, i64 } %t13
}
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
%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
%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
%a29 = 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
%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
%a52 = alloca { ptr, i64, i64 }, align 16
%a53 = alloca { ptr, i64, i64 }, align 16
%a54 = 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.3325, i64 23, 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.3326, i64 6, i64 0 }, 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 %a2
store { ptr, i64, i64 } %t17, 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.3327, i64 14, i64 0 }, ptr %a25
call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25)
%t26 = load { ptr, i64, i64 }, ptr %a23
%t27 = call { ptr, i64, i64 } @finch.gen.op(ptr %t6, { ptr, i64, i64 } %t26)
%t28 = call { ptr, i64, i64 } @finch.gen.load(ptr %t5, { ptr, i64, i64 } { ptr @.str.3324, i64 3, i64 0 }, { ptr, i64, i64 } %t27)
store { ptr, i64, i64 } %t28, ptr %a29
%t30 = load ptr, ptr %a1
%t31 = load ptr, ptr %a1
%t32 = load %S.ast.Type, ptr %a3
%t33 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t31, %S.ast.Type %t32)
store { ptr, i64, i64 } { ptr @.str.3328, i64 23, i64 0 }, ptr %a35
store { ptr, i64, i64 } %t33, ptr %a36
call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36)
%t37 = load { ptr, i64, i64 }, ptr %a34
store { ptr, i64, i64 } %t37, ptr %a39
store { ptr, i64, i64 } { ptr @.str.3329, i64 6, i64 0 }, ptr %a40
call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40)
%t41 = load { ptr, i64, i64 }, ptr %a38
%t42 = load { ptr, i64, i64 }, ptr %a29
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)
%t46 = load { ptr, i64, i64 }, ptr %a43
store { ptr, i64, i64 } %t46, ptr %a48
store { ptr, i64, i64 } { ptr @.str.3330, i64 6, i64 0 }, ptr %a49
call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49)
%t50 = load { ptr, i64, i64 }, ptr %a47
%t51 = load { ptr, i64, i64 }, ptr %a4
store { ptr, i64, i64 } %t50, 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 = call { ptr, i64, i64 } @finch.gen.op(ptr %t30, { ptr, i64, i64 } %t55)
ret { ptr, i64, i64 } %t56
}
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
%a13 = 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
%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
%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
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.3331, i64 23, 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.3332, i64 6, i64 0 }, ptr %a15
call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15)
%t16 = load { ptr, i64, i64 }, ptr %a13
%t17 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t16, ptr %a19
store { ptr, i64, i64 } %t17, ptr %a20
call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20)
%t21 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t21, ptr %a23
store { ptr, i64, i64 } { ptr @.str.3333, i64 13, i64 0 }, ptr %a24
call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24)
%t25 = load { ptr, i64, i64 }, ptr %a22
%t26 = load i64, ptr %a4
call void @finch_str_from_int(ptr %a27, i64 %t26)
%t28 = load { ptr, i64, i64 }, ptr %a27
store { ptr, i64, i64 } %t25, 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
%t33 = call { ptr, i64, i64 } @finch.gen.op(ptr %t5, { ptr, i64, i64 } %t32)
ret { ptr, i64, i64 } %t33
}
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
%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
%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
%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
%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
%a65 = alloca { ptr, i64, i64 }, align 16
%a66 = alloca { ptr, i64, i64 }, align 16
%a67 = 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.3334, 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 %range5091, label %inrange5092
range5091:
call void @finch_panic_index(ptr @.str.3335, i64 2470, i64 0, i64 %t8)
unreachable
inrange5092:
%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.3336, 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 %then5093, label %endif5095
then5093:
store { ptr, i64, i64 } { ptr @.str.3337, i64 1, i64 0 }, ptr %a5
br label %endif5095
endif5095:
%t18 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.3338, i64 4, 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.3339, i64 6, i64 0 }, ptr %a25
call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25)
%t26 = load { ptr, i64, i64 }, ptr %a23
%t27 = load { ptr, i64, i64 }, ptr %a3
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)
%t31 = load { ptr, i64, i64 }, ptr %a28
store { ptr, i64, i64 } %t31, ptr %a33
store { ptr, i64, i64 } { ptr @.str.3340, i64 6, i64 0 }, ptr %a34
call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34)
%t35 = load { ptr, i64, i64 }, ptr %a32
%t36 = load ptr, ptr %a1
%t37 = load %S.ast.Type, ptr %a4
%t38 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t36, %S.ast.Type %t37)
store { ptr, i64, i64 } %t35, ptr %a40
store { ptr, i64, i64 } %t38, ptr %a41
call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41)
%t42 = load { ptr, i64, i64 }, ptr %a39
store { ptr, i64, i64 } %t42, ptr %a44
store { ptr, i64, i64 } { ptr @.str.3341, i64 6, i64 0 }, ptr %a45
call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45)
%t46 = load { ptr, i64, i64 }, ptr %a43
%t47 = load ptr, ptr %a1
%t48 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1
%t49 = load { ptr, i64, i64 }, ptr %t48
%t50 = extractvalue { ptr, i64, i64 } %t49, 1
%t51 = icmp uge i64 0, %t50
br i1 %t51, label %range5096, label %inrange5097
range5096:
call void @finch_panic_index(ptr @.str.3342, i64 2473, i64 0, i64 %t50)
unreachable
inrange5097:
%t52 = extractvalue { ptr, i64, i64 } %t49, 0
%t53 = getelementptr inbounds %S.ast.Type, ptr %t52, i64 0
%t54 = load %S.ast.Type, ptr %t53
%t55 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t47, %S.ast.Type %t54)
store { ptr, i64, i64 } %t46, 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
store { ptr, i64, i64 } %t59, ptr %a61
store { ptr, i64, i64 } { ptr @.str.3343, i64 6, i64 0 }, ptr %a62
call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62)
%t63 = load { ptr, i64, i64 }, ptr %a60
%t64 = load { ptr, i64, i64 }, ptr %a5
store { ptr, i64, i64 } %t63, ptr %a66
store { ptr, i64, i64 } %t64, ptr %a67
call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67)
%t68 = load { ptr, i64, i64 }, ptr %a65
ret { ptr, i64, i64 } %t68
}
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
%a15 = 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 { 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.3344, i64 25, 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.3345, i64 1, i64 0 }, ptr %a17
call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17)
%t18 = load { ptr, i64, i64 }, ptr %a15
%t19 = call { ptr, i64, i64 } @finch.gen.op(ptr %t5, { ptr, i64, i64 } %t18)
ret { ptr, i64, i64 } %t19
}
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
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.3346, 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.from5098
logic.from5098:
br i1 %t9, label %logic.rhs5099, label %logic.end5100
logic.rhs5099:
%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.rend5101
logic.rend5101:
br label %logic.end5100
logic.end5100:
%t13 = phi i1 [ false, %logic.from5098 ], [ %t12, %logic.rend5101 ]
br i1 %t13, label %then5102, label %endif5104
then5102:
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
ret { ptr, i64, i64 } %t30
endif5104:
%t31 = load %S.ast.Type, ptr %a2
%t32 = call { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %t31)
ret { ptr, i64, i64 } %t32
}
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
%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
%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
%a46 = alloca { ptr, i64, i64 }, align 16
%a49 = 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
%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
%a114 = alloca %S.ast.Type, align 16
%a115 = alloca %S.ast.Type, align 16
%a129 = 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.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.3347, 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.3348, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3349, 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.3350, i64 25, i64 0 }, 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 %a27
store { ptr, i64, i64 } { ptr @.str.3351, i64 6, i64 0 }, ptr %a28
call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28)
%t29 = load { ptr, i64, i64 }, ptr %a26
%t30 = load { ptr, i64, i64 }, ptr %a13
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)
%t34 = load { ptr, i64, i64 }, ptr %a31
store { ptr, i64, i64 } %t34, ptr %a36
store { ptr, i64, i64 } { ptr @.str.3352, 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 = call { ptr, i64, i64 } @finch.gen.op(ptr %t16, { ptr, i64, i64 } %t38)
store { ptr, i64, i64 } %t39, ptr %a40
%t41 = load ptr, ptr %a1
%t42 = load { ptr, i64, i64 }, ptr %a2
%t43 = load %S.ast.Type, ptr %a3
%t44 = load { ptr, i64, i64 }, ptr %a40
%t45 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t41, { ptr, i64, i64 } %t42, %S.ast.Type %t43, { ptr, i64, i64 } %t44)
store { ptr, i64, i64 } %t45, ptr %a46
%t47 = load ptr, ptr %a1
%t48 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t47, { ptr, i64, i64 } { ptr @.str.3353, i64 7, i64 0 })
store { ptr, i64, i64 } %t48, ptr %a49
%t50 = load ptr, ptr %a1
%t51 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t50, { ptr, i64, i64 } { ptr @.str.3354, i64 8, i64 0 })
store { ptr, i64, i64 } %t51, ptr %a52
%t53 = load ptr, ptr %a1
%t54 = load ptr, ptr %a1
%t55 = load ptr, ptr %a1
%t56 = load { ptr, i64, i64 }, ptr %a13
%t57 = call { ptr, i64, i64 } @finch.gen.load(ptr %t55, { ptr, i64, i64 } { ptr @.str.3356, i64 3, i64 0 }, { ptr, i64, i64 } %t56)
store { ptr, i64, i64 } { ptr @.str.3355, i64 12, i64 0 }, ptr %a59
store { ptr, i64, i64 } %t57, ptr %a60
call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60)
%t61 = load { ptr, i64, i64 }, ptr %a58
store { ptr, i64, i64 } %t61, ptr %a63
store { ptr, i64, i64 } { ptr @.str.3357, i64 3, i64 0 }, ptr %a64
call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64)
%t65 = load { ptr, i64, i64 }, ptr %a62
%t66 = call { ptr, i64, i64 } @finch.gen.op(ptr %t54, { ptr, i64, i64 } %t65)
%t67 = load { ptr, i64, i64 }, ptr %a49
%t68 = load { ptr, i64, i64 }, ptr %a52
call void @finch.gen.condBr(ptr %t53, { ptr, i64, i64 } %t66, { ptr, i64, i64 } %t67, { ptr, i64, i64 } %t68)
%t69 = load ptr, ptr %a1
%t70 = load { ptr, i64, i64 }, ptr %a49
call void @finch.gen.label(ptr %t69, { ptr, i64, i64 } %t70)
%t71 = load ptr, ptr %a1
%t72 = load ptr, ptr %a1
%t73 = load { ptr, i64, i64 }, ptr %a46
%t74 = load %S.ast.Type, ptr %a3
%t75 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t72, { ptr, i64, i64 } %t73, %S.ast.Type %t74, i64 1)
%t76 = load { ptr, i64, i64 }, ptr %a10
%t77 = getelementptr inbounds %S.ast.Type, ptr %a3, 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 %range5105, label %inrange5106
range5105:
call void @finch_panic_index(ptr @.str.3358, i64 2501, i64 0, i64 %t79)
unreachable
inrange5106:
%t81 = extractvalue { ptr, i64, i64 } %t78, 0
%t82 = getelementptr inbounds %S.ast.Type, ptr %t81, i64 0
%t83 = load %S.ast.Type, ptr %t82
call void @finch.gen.copyAt(ptr %t71, { ptr, i64, i64 } %t75, { ptr, i64, i64 } %t76, %S.ast.Type %t83)
%t84 = load i1, ptr %a5
br i1 %t84, label %then5107, label %endif5109
then5107:
%t85 = load ptr, ptr %a1
%t86 = load ptr, ptr %a1
%t87 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1
%t88 = load { ptr, i64, i64 }, ptr %t87
%t89 = extractvalue { ptr, i64, i64 } %t88, 1
%t90 = icmp uge i64 1, %t89
br i1 %t90, label %range5110, label %inrange5111
range5110:
call void @finch_panic_index(ptr @.str.3359, i64 2503, i64 1, i64 %t89)
unreachable
inrange5111:
%t91 = extractvalue { ptr, i64, i64 } %t88, 0
%t92 = getelementptr inbounds %S.ast.Type, ptr %t91, i64 1
%t93 = load %S.ast.Type, ptr %t92
%t94 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t86, %S.ast.Type %t93)
%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 %range5112, label %inrange5113
range5112:
call void @finch_panic_index(ptr @.str.3360, i64 2503, i64 1, i64 %t99)
unreachable
inrange5113:
%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 = load %S.ast.Node, ptr %a6
%t105 = call { ptr, i64, i64 } @finch.gen.defaultVal(ptr %t96, %S.ast.Type %t103, %S.ast.Node %t104)
%t106 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t105, 0
%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 %range5114, label %inrange5115
range5114:
call void @finch_panic_index(ptr @.str.3361, i64 2503, i64 1, i64 %t109)
unreachable
inrange5115:
%t111 = extractvalue { ptr, i64, i64 } %t108, 0
%t112 = getelementptr inbounds %S.ast.Type, ptr %t111, i64 1
%t113 = load %S.ast.Type, ptr %t112
store %S.ast.Type %t113, ptr %a114
call void @finch.copy.S_ast_Type(ptr %a115, ptr %a114)
%t116 = load %S.ast.Type, ptr %a115
%t117 = insertvalue %S.gen.Val %t106, %S.ast.Type %t116, 1
%t118 = insertvalue %S.gen.Val %t117, i1 true, 2
%t119 = call { ptr, i64, i64 } @finch.gen.own(ptr %t95, %S.gen.Val %t118)
%t120 = load ptr, ptr %a1
%t121 = load { ptr, i64, i64 }, ptr %a46
%t122 = load %S.ast.Type, ptr %a3
%t123 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t120, { ptr, i64, i64 } %t121, %S.ast.Type %t122, i64 2)
call void @finch.gen.store(ptr %t85, { ptr, i64, i64 } %t94, { ptr, i64, i64 } %t119, { ptr, i64, i64 } %t123)
br label %endif5109
endif5109:
%t124 = load ptr, ptr %a1
%t125 = load { ptr, i64, i64 }, ptr %a52
call void @finch.gen.br(ptr %t124, { ptr, i64, i64 } %t125)
%t126 = load ptr, ptr %a1
%t127 = load { ptr, i64, i64 }, ptr %a52
call void @finch.gen.label(ptr %t126, { ptr, i64, i64 } %t127)
%t128 = load { ptr, i64, i64 }, ptr %a46
store { ptr, i64, i64 } %t128, ptr %a129
call void @finch_str_copy(ptr %a130, ptr %a129)
%t131 = load { ptr, i64, i64 }, ptr %a130
ret { ptr, i64, i64 } %t131
}
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
%a63 = alloca { ptr, i64, i64 }, align 16
%a71 = alloca %S.ast.Type, align 16
%a72 = alloca %S.ast.Type, align 16
%a76 = alloca { ptr, i64, i64 }, align 16
%a82 = alloca { ptr, i64, i64 }, align 16
%a83 = alloca { ptr, i64, i64 }, align 16
%a92 = alloca { ptr, i64, i64 }, align 16
%a98 = alloca { ptr, i64, i64 }, align 16
%a101 = alloca { ptr, i64, i64 }, align 16
%a104 = 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
%a123 = 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
%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
%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
%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
%a188 = alloca { ptr, i64, i64 }, align 16
%a193 = alloca { ptr, i64, i64 }, align 16
%a194 = alloca { ptr, i64, i64 }, align 16
%a198 = alloca %S.ast.Type, align 16
%a199 = alloca %S.ast.Type, 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 %S.ast.Type, align 16
%a217 = alloca %S.ast.Type, align 16
%a220 = alloca %S.gen.Val, align 16
%a234 = alloca %S.ast.Type, align 16
%a235 = alloca %S.ast.Type, align 16
%a241 = alloca %S.gen.Val, align 16
%a242 = 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 %range5116, label %inrange5117
range5116:
call void @finch_panic_index(ptr @.str.3362, i64 2512, i64 0, i64 %t8)
unreachable
inrange5117:
%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 %range5118, label %inrange5119
range5118:
call void @finch_panic_index(ptr @.str.3363, i64 2513, i64 1, i64 %t19)
unreachable
inrange5119:
%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 %range5120, label %inrange5121
range5120:
call void @finch_panic_index(ptr @.str.3364, i64 2514, i64 1, i64 %t32)
unreachable
inrange5121:
%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 %range5122, label %inrange5123
range5122:
call void @finch_panic_index(ptr @.str.3365, i64 2514, i64 1, i64 %t42)
unreachable
inrange5123:
%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.3366, i64 7, i64 0 })
store %S.gen.Val %t47, ptr %a48
%t49 = load i1, ptr %a5
br i1 %t49, label %then5124, label %endif5126
then5124:
%t50 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0
%t51 = load i1, ptr %t50
%t52 = xor i1 %t51, true
br i1 %t52, label %then5127, label %endif5129
then5127:
%t53 = load ptr, ptr %a1
%t54 = load %S.ast.Node, ptr %a2
call void @finch.gen.fail(ptr %t53, %S.ast.Node %t54, { ptr, i64, i64 } { ptr @.str.3367, i64 44, i64 0 })
br label %endif5129
endif5129:
%t55 = load ptr, ptr %a1
%t56 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1
%t57 = getelementptr inbounds %S.gen.Place, ptr %t56, i32 0, i32 0
%t58 = load { ptr, i64, i64 }, ptr %t57
%t59 = load %S.ast.Type, ptr %a4
%t60 = load %S.gen.Val, ptr %a48
%t61 = load %S.ast.Node, ptr %a2
%t62 = call { ptr, i64, i64 } @finch.gen.mapSlot(ptr %t55, { ptr, i64, i64 } %t58, %S.ast.Type %t59, %S.gen.Val %t60, i1 true, %S.ast.Node %t61)
store { ptr, i64, i64 } %t62, ptr %a63
%t64 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0
%t65 = load ptr, ptr %a1
%t66 = load { ptr, i64, i64 }, ptr %a63
%t67 = load %S.ast.Type, ptr %a4
%t68 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t65, { ptr, i64, i64 } %t66, %S.ast.Type %t67, i64 2)
%t69 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t68, 0
%t70 = load %S.ast.Type, ptr %a27
store %S.ast.Type %t70, ptr %a71
call void @finch.copy.S_ast_Type(ptr %a72, ptr %a71)
%t73 = load %S.ast.Type, ptr %a72
%t74 = insertvalue %S.gen.Place %t69, %S.ast.Type %t73, 1
%t75 = insertvalue %S.gen.Ref %t64, %S.gen.Place %t74, 1
ret %S.gen.Ref %t75
endif5126:
store { ptr, i64, i64 } { ptr @.str.3368, i64 0, i64 0 }, ptr %a76
%t77 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0
%t78 = load i1, ptr %t77
br i1 %t78, label %then5130, label %else5131
then5130:
%t79 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1
%t80 = getelementptr inbounds %S.gen.Place, ptr %t79, i32 0, i32 0
%t81 = load { ptr, i64, i64 }, ptr %t80
store { ptr, i64, i64 } %t81, ptr %a82
call void @finch_str_copy(ptr %a83, ptr %a82)
%t84 = load { ptr, i64, i64 }, ptr %a83
store { ptr, i64, i64 } %t84, ptr %a76
br label %endif5132
else5131:
%t85 = load ptr, ptr %a1
%t86 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2
%t87 = load %S.gen.Val, ptr %t86
%t88 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t85, %S.gen.Val %t87)
store { ptr, i64, i64 } %t88, ptr %a76
br label %endif5132
endif5132:
%t89 = load ptr, ptr %a1
%t90 = load %S.gen.Val, ptr %a48
%t91 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t89, %S.gen.Val %t90)
store { ptr, i64, i64 } %t91, ptr %a92
%t93 = load ptr, ptr %a1
%t94 = load { ptr, i64, i64 }, ptr %a76
%t95 = load { ptr, i64, i64 }, ptr %a92
%t96 = load %S.ast.Type, ptr %a4
%t97 = call { ptr, i64, i64 } @finch.gen.mapFind(ptr %t93, { ptr, i64, i64 } %t94, { ptr, i64, i64 } %t95, %S.ast.Type %t96)
store { ptr, i64, i64 } %t97, ptr %a98
%t99 = load ptr, ptr %a1
%t100 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t99, { ptr, i64, i64 } { ptr @.str.3369, i64 11, i64 0 })
store { ptr, i64, i64 } %t100, ptr %a101
%t102 = load ptr, ptr %a1
%t103 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t102, { ptr, i64, i64 } { ptr @.str.3370, i64 9, i64 0 })
store { ptr, i64, i64 } %t103, ptr %a104
%t105 = load ptr, ptr %a1
%t106 = load ptr, ptr %a1
%t107 = load { ptr, i64, i64 }, ptr %a98
store { ptr, i64, i64 } { ptr @.str.3371, i64 13, 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.3372, i64 3, i64 0 }, ptr %a114
call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114)
%t115 = load { ptr, i64, i64 }, ptr %a112
%t116 = call { ptr, i64, i64 } @finch.gen.op(ptr %t106, { ptr, i64, i64 } %t115)
%t117 = load { ptr, i64, i64 }, ptr %a101
%t118 = load { ptr, i64, i64 }, ptr %a104
call void @finch.gen.condBr(ptr %t105, { ptr, i64, i64 } %t116, { ptr, i64, i64 } %t117, { ptr, i64, i64 } %t118)
%t119 = load ptr, ptr %a1
%t120 = load { ptr, i64, i64 }, ptr %a101
call void @finch.gen.label(ptr %t119, { ptr, i64, i64 } %t120)
%t121 = load ptr, ptr %a1
%t122 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t121, { ptr, i64, i64 } { ptr @.str.3373, i64 17, i64 0 })
store { ptr, i64, i64 } %t122, ptr %a123
%t124 = load ptr, ptr %a1
%t125 = load { ptr, i64, i64 }, ptr %a123
call void @finch.gen.store(ptr %t124, { ptr, i64, i64 } { ptr @.str.3374, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.3375, i64 15, i64 0 }, { ptr, i64, i64 } %t125)
%t126 = load ptr, ptr %a1
%t127 = load { ptr, i64, i64 }, ptr %a123
%t128 = getelementptr inbounds %S.gen.Val, ptr %a48, i32 0, i32 0
%t129 = load { ptr, i64, i64 }, ptr %t128
%t130 = load %S.ast.Type, ptr %a16
call void @finch.gen.emitFormat(ptr %t126, { ptr, i64, i64 } %t127, { ptr, i64, i64 } %t129, %S.ast.Type %t130, i1 true)
%t131 = load ptr, ptr %a1
%t132 = load ptr, ptr %a1
%t133 = load ptr, ptr %a1
%t134 = icmp eq ptr %t133, null
br i1 %t134, label %panic5133, label %ok5134
panic5133:
call void @finch_panic(ptr @.str.3377, i64 2537, ptr @.str.3378)
unreachable
ok5134:
%t135 = getelementptr inbounds %S.gen.Gen, ptr %t133, i32 0, i32 1
%t136 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13
%t137 = load i64, ptr %t136
%t138 = load { ptr, i64, i64 }, ptr %t135
%t139 = extractvalue { ptr, i64, i64 } %t138, 1
%t140 = icmp uge i64 %t137, %t139
br i1 %t140, label %range5135, label %inrange5136
range5135:
call void @finch_panic_index(ptr @.str.3379, i64 2537, i64 %t137, i64 %t139)
unreachable
inrange5136:
%t141 = extractvalue { ptr, i64, i64 } %t138, 0
%t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i64 %t137
%t143 = load { ptr, i64, i64 }, ptr %t142
%t144 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t132, { ptr, i64, i64 } %t143)
store { ptr, i64, i64 } { ptr @.str.3376, i64 33, i64 0 }, ptr %a146
store { ptr, i64, i64 } %t144, ptr %a147
call void @finch_str_concat(ptr %a145, ptr %a146, ptr %a147)
%t148 = load { ptr, i64, i64 }, ptr %a145
store { ptr, i64, i64 } %t148, ptr %a150
store { ptr, i64, i64 } { ptr @.str.3380, i64 6, i64 0 }, ptr %a151
call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151)
%t152 = load { ptr, i64, i64 }, ptr %a149
%t153 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11
%t154 = load i64, ptr %t153
call void @finch_str_from_int(ptr %a155, i64 %t154)
%t156 = load { ptr, i64, i64 }, ptr %a155
store { ptr, i64, i64 } %t152, ptr %a158
store { ptr, i64, i64 } %t156, ptr %a159
call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159)
%t160 = load { ptr, i64, i64 }, ptr %a157
store { ptr, i64, i64 } %t160, ptr %a162
store { ptr, i64, i64 } { ptr @.str.3381, i64 6, 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 %a123
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)
%t169 = load { ptr, i64, i64 }, ptr %a166
store { ptr, i64, i64 } %t169, ptr %a171
store { ptr, i64, i64 } { ptr @.str.3382, i64 1, i64 0 }, ptr %a172
call void @finch_str_concat(ptr %a170, ptr %a171, ptr %a172)
%t173 = load { ptr, i64, i64 }, ptr %a170
call void @finch.gen.emit(ptr %t131, { ptr, i64, i64 } %t173)
%t174 = load ptr, ptr %a1
call void @finch.gen.emit(ptr %t174, { ptr, i64, i64 } { ptr @.str.3383, i64 11, i64 0 })
%t175 = load ptr, ptr %a1
%t176 = icmp eq ptr %t175, null
br i1 %t176, label %panic5137, label %ok5138
panic5137:
call void @finch_panic(ptr @.str.3384, i64 2539, ptr @.str.3385)
unreachable
ok5138:
%t177 = getelementptr inbounds %S.gen.Gen, ptr %t175, i32 0, i32 9
store i1 true, ptr %t177
%t178 = load ptr, ptr %a1
%t179 = load { ptr, i64, i64 }, ptr %a104
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 %a76
%t183 = load %S.ast.Type, ptr %a4
%t184 = load { ptr, i64, i64 }, ptr %a98
%t185 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t181, { ptr, i64, i64 } %t182, %S.ast.Type %t183, { ptr, i64, i64 } %t184)
%t186 = load %S.ast.Type, ptr %a4
%t187 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t180, { ptr, i64, i64 } %t185, %S.ast.Type %t186, i64 2)
store { ptr, i64, i64 } %t187, ptr %a188
%t189 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0
%t190 = load i1, ptr %t189
br i1 %t190, label %then5139, label %endif5141
then5139:
%t191 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0
%t192 = load { ptr, i64, i64 }, ptr %a188
store { ptr, i64, i64 } %t192, ptr %a193
call void @finch_str_copy(ptr %a194, ptr %a193)
%t195 = load { ptr, i64, i64 }, ptr %a194
%t196 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t195, 0
%t197 = load %S.ast.Type, ptr %a27
store %S.ast.Type %t197, ptr %a198
call void @finch.copy.S_ast_Type(ptr %a199, ptr %a198)
%t200 = load %S.ast.Type, ptr %a199
%t201 = insertvalue %S.gen.Place %t196, %S.ast.Type %t200, 1
%t202 = insertvalue %S.gen.Ref %t191, %S.gen.Place %t201, 1
ret %S.gen.Ref %t202
endif5141:
%t203 = load ptr, ptr %a1
%t204 = load ptr, ptr %a1
%t205 = load %S.ast.Type, ptr %a27
%t206 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t204, %S.ast.Type %t205)
%t207 = load { ptr, i64, i64 }, ptr %a188
%t208 = call { ptr, i64, i64 } @finch.gen.load(ptr %t203, { ptr, i64, i64 } %t206, { ptr, i64, i64 } %t207)
store { ptr, i64, i64 } %t208, ptr %a209
%t210 = load { ptr, i64, i64 }, ptr %a209
store { ptr, i64, i64 } %t210, ptr %a211
call void @finch_str_copy(ptr %a212, ptr %a211)
%t213 = load { ptr, i64, i64 }, ptr %a212
%t214 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t213, 0
%t215 = load %S.ast.Type, ptr %a27
store %S.ast.Type %t215, ptr %a216
call void @finch.copy.S_ast_Type(ptr %a217, ptr %a216)
%t218 = load %S.ast.Type, ptr %a217
%t219 = insertvalue %S.gen.Val %t214, %S.ast.Type %t218, 1
store %S.gen.Val %t219, ptr %a220
%t221 = load ptr, ptr %a1
%t222 = load %S.ast.Type, ptr %a27
%t223 = call i1 @finch.gen.owning(ptr %t221, %S.ast.Type %t222)
br label %logic.from5142
logic.from5142:
br i1 %t223, label %logic.rhs5143, label %logic.end5144
logic.rhs5143:
%t224 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2
%t225 = getelementptr inbounds %S.gen.Val, ptr %t224, i32 0, i32 2
%t226 = load i1, ptr %t225
br label %logic.rend5145
logic.rend5145:
br label %logic.end5144
logic.end5144:
%t227 = phi i1 [ false, %logic.from5142 ], [ %t226, %logic.rend5145 ]
br i1 %t227, label %then5146, label %endif5148
then5146:
%t228 = load ptr, ptr %a1
%t229 = load { ptr, i64, i64 }, ptr %a209
%t230 = load %S.ast.Type, ptr %a27
%t231 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t228, { ptr, i64, i64 } %t229, %S.ast.Type %t230)
%t232 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t231, 0
%t233 = load %S.ast.Type, ptr %a27
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 %t232, %S.ast.Type %t236, 1
%t238 = insertvalue %S.gen.Val %t237, i1 true, 2
store %S.gen.Val %t238, ptr %a220
br label %endif5148
endif5148:
%t239 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0
%t240 = load %S.gen.Val, ptr %a220
store %S.gen.Val %t240, ptr %a241
call void @finch.copy.S_gen_Val(ptr %a242, ptr %a241)
%t243 = load %S.gen.Val, ptr %a242
%t244 = insertvalue %S.gen.Ref %t239, %S.gen.Val %t243, 2
ret %S.gen.Ref %t244
}
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
%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
%a105 = alloca { ptr, i64, i64 }, align 16
%a106 = alloca { ptr, i64, i64 }, align 16
%a112 = alloca { ptr, i64, i64 }, align 16
%a113 = alloca { ptr, i64, i64 }, align 16
%a128 = alloca { ptr, i64, i64 }, align 16
%a129 = alloca { ptr, i64, i64 }, align 16
%a135 = alloca { ptr, i64, i64 }, align 16
%a136 = alloca { ptr, i64, i64 }, align 16
%a150 = alloca %S.ast.Type, align 16
%a151 = alloca %S.ast.Type, align 16
%a153 = alloca %S.ast.Type, align 16
%a167 = alloca { ptr, i64, i64 }, align 16
%a177 = alloca i64, align 16
%a181 = alloca %S.gen.Val, align 16
%a182 = alloca %S.gen.Val, align 16
%a184 = alloca %S.gen.Val, align 16
%a186 = alloca %S.gen.Val, align 16
%a187 = alloca %S.gen.Val, align 16
%a189 = alloca %S.gen.Val, align 16
%a274 = alloca { ptr, i64, i64 }, align 16
%a281 = alloca { ptr, i64, i64 }, align 16
%a307 = alloca %S.ast.Type, align 16
%a308 = 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.3386, 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 %then5149, label %endif5151
then5149:
%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 %then5152, label %endif5154
then5152:
%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.3387, i64 52, i64 0 })
br label %endif5154
endif5154:
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.cond5155
for.cond5155:
%t31 = load i64, ptr %a30
%t32 = icmp slt i64 %t31, %t29
br i1 %t32, label %for.body5156, label %for.end5158
for.body5156:
%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 %range5159, label %inrange5160
range5159:
call void @finch_panic_index(ptr @.str.3388, i64 2567, i64 %t36, i64 %t38)
unreachable
inrange5160:
%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.3389, 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.from5161
logic.from5161:
br i1 %t52, label %logic.rhs5162, label %logic.end5163
logic.rhs5162:
%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.3390, 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.rend5164
logic.rend5164:
br label %logic.end5163
logic.end5163:
%t59 = phi i1 [ false, %logic.from5161 ], [ %t58, %logic.rend5164 ]
br i1 %t59, label %then5165, label %endif5167
then5165:
%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 %range5168, label %inrange5169
range5168:
call void @finch_panic_index(ptr @.str.3391, i64 2569, i64 0, i64 %t62)
unreachable
inrange5169:
%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
store %S.ast.Node %t69, ptr %a46
br label %endif5167
endif5167:
%t70 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0
%t71 = load { ptr, i64, i64 }, ptr %t70
store { ptr, i64, i64 } %t71, ptr %a72
store { ptr, i64, i64 } { ptr @.str.3392, i64 5, i64 0 }, ptr %a73
%t74 = call i32 @finch_str_eq(ptr %a72, ptr %a73)
%t75 = icmp ne i32 %t74, 0
br i1 %t75, label %then5170, label %else5171
then5170:
store i1 true, ptr %a25
br label %endif5172
else5171:
%t76 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0
%t77 = load { ptr, i64, i64 }, ptr %t76
store { ptr, i64, i64 } %t77, ptr %a78
store { ptr, i64, i64 } { ptr @.str.3393, i64 3, i64 0 }, ptr %a79
%t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79)
%t81 = icmp eq i32 %t80, 0
br i1 %t81, label %then5173, label %endif5175
then5173:
store i1 false, ptr %a24
br label %endif5175
endif5175:
br label %endif5172
endif5172:
br label %for.step5157
for.step5157:
%t82 = load i64, ptr %a30
%t83 = add i64 %t82, 1
store i64 %t83, ptr %a30
br label %for.cond5155
for.end5158:
%t84 = load ptr, ptr %a1
%t85 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t86 = load { ptr, i64, i64 }, ptr %t85
%t87 = extractvalue { ptr, i64, i64 } %t86, 1
%t88 = icmp uge i64 0, %t87
br i1 %t88, label %range5176, label %inrange5177
range5176:
call void @finch_panic_index(ptr @.str.3394, i64 2577, i64 0, i64 %t87)
unreachable
inrange5177:
%t89 = extractvalue { ptr, i64, i64 } %t86, 0
%t90 = getelementptr inbounds %S.ast.Node, ptr %t89, i64 0
%t91 = load %S.ast.Node, ptr %t90
%t92 = call %S.gen.Val @finch.gen.expr(ptr %t84, %S.ast.Node %t91)
store %S.gen.Val %t92, ptr %a10
%t93 = load ptr, ptr %a1
%t94 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t95 = load { ptr, i64, i64 }, ptr %t94
%t96 = extractvalue { ptr, i64, i64 } %t95, 1
%t97 = icmp uge i64 1, %t96
br i1 %t97, label %range5178, label %inrange5179
range5178:
call void @finch_panic_index(ptr @.str.3395, i64 2578, i64 1, i64 %t96)
unreachable
inrange5179:
%t98 = extractvalue { ptr, i64, i64 } %t95, 0
%t99 = getelementptr inbounds %S.ast.Node, ptr %t98, i64 1
%t100 = load %S.ast.Node, ptr %t99
%t101 = call %S.gen.Val @finch.gen.expr(ptr %t93, %S.ast.Node %t100)
store %S.gen.Val %t101, ptr %a11
%t102 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1
%t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i32 0, i32 0
%t104 = load { ptr, i64, i64 }, ptr %t103
store { ptr, i64, i64 } %t104, ptr %a105
store { ptr, i64, i64 } { ptr @.str.3396, i64 4, i64 0 }, ptr %a106
%t107 = call i32 @finch_str_eq(ptr %a105, ptr %a106)
%t108 = icmp ne i32 %t107, 0
br label %logic.from5180
logic.from5180:
br i1 %t108, label %logic.end5182, label %logic.rhs5181
logic.rhs5181:
%t109 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1
%t110 = getelementptr inbounds %S.ast.Type, ptr %t109, i32 0, i32 0
%t111 = load { ptr, i64, i64 }, ptr %t110
store { ptr, i64, i64 } %t111, ptr %a112
store { ptr, i64, i64 } { ptr @.str.3397, i64 4, i64 0 }, ptr %a113
%t114 = call i32 @finch_str_eq(ptr %a112, ptr %a113)
%t115 = icmp ne i32 %t114, 0
br label %logic.rend5183
logic.rend5183:
br label %logic.end5182
logic.end5182:
%t116 = phi i1 [ true, %logic.from5180 ], [ %t115, %logic.rend5183 ]
br i1 %t116, label %then5184, label %endif5186
then5184:
%t117 = load ptr, ptr %a1
%t118 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t119 = load { ptr, i64, i64 }, ptr %t118
%t120 = extractvalue { ptr, i64, i64 } %t119, 1
%t121 = icmp uge i64 0, %t120
br i1 %t121, label %range5187, label %inrange5188
range5187:
call void @finch_panic_index(ptr @.str.3398, i64 2580, i64 0, i64 %t120)
unreachable
inrange5188:
%t122 = extractvalue { ptr, i64, i64 } %t119, 0
%t123 = getelementptr inbounds %S.ast.Node, ptr %t122, i64 0
%t124 = load %S.ast.Node, ptr %t123
call void @finch.gen.fail(ptr %t117, %S.ast.Node %t124, { ptr, i64, i64 } { ptr @.str.3399, i64 35, i64 0 })
br label %endif5186
endif5186:
%t125 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1
%t126 = getelementptr inbounds %S.ast.Type, ptr %t125, i32 0, i32 0
%t127 = load { ptr, i64, i64 }, ptr %t126
store { ptr, i64, i64 } %t127, ptr %a128
store { ptr, i64, i64 } { ptr @.str.3400, i64 4, i64 0 }, ptr %a129
%t130 = call i32 @finch_str_eq(ptr %a128, ptr %a129)
%t131 = icmp ne i32 %t130, 0
br label %logic.from5189
logic.from5189:
br i1 %t131, label %logic.end5191, label %logic.rhs5190
logic.rhs5190:
%t132 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1
%t133 = getelementptr inbounds %S.ast.Type, ptr %t132, i32 0, i32 0
%t134 = load { ptr, i64, i64 }, ptr %t133
store { ptr, i64, i64 } %t134, ptr %a135
store { ptr, i64, i64 } { ptr @.str.3401, i64 4, i64 0 }, ptr %a136
%t137 = call i32 @finch_str_eq(ptr %a135, ptr %a136)
%t138 = icmp ne i32 %t137, 0
br label %logic.rend5192
logic.rend5192:
br label %logic.end5191
logic.end5191:
%t139 = phi i1 [ true, %logic.from5189 ], [ %t138, %logic.rend5192 ]
br i1 %t139, label %then5193, label %endif5195
then5193:
%t140 = load ptr, ptr %a1
%t141 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t142 = load { ptr, i64, i64 }, ptr %t141
%t143 = extractvalue { ptr, i64, i64 } %t142, 1
%t144 = icmp uge i64 1, %t143
br i1 %t144, label %range5196, label %inrange5197
range5196:
call void @finch_panic_index(ptr @.str.3402, i64 2583, i64 1, i64 %t143)
unreachable
inrange5197:
%t145 = extractvalue { ptr, i64, i64 } %t142, 0
%t146 = getelementptr inbounds %S.ast.Node, ptr %t145, i64 1
%t147 = load %S.ast.Node, ptr %t146
call void @finch.gen.fail(ptr %t140, %S.ast.Node %t147, { ptr, i64, i64 } { ptr @.str.3403, i64 37, i64 0 })
br label %endif5195
endif5195:
%t148 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1
%t149 = load %S.ast.Type, ptr %t148
store %S.ast.Type %t149, ptr %a150
call void @finch.copy.S_ast_Type(ptr %a151, ptr %a150)
%t152 = load %S.ast.Type, ptr %a151
store %S.ast.Type %t152, ptr %a153
%t154 = load i1, ptr %a24
br label %logic.from5198
logic.from5198:
br i1 %t154, label %logic.rhs5199, label %logic.end5200
logic.rhs5199:
%t155 = load i1, ptr %a25
br label %logic.rend5201
logic.rend5201:
br label %logic.end5200
logic.end5200:
%t156 = phi i1 [ false, %logic.from5198 ], [ %t155, %logic.rend5201 ]
br i1 %t156, label %then5202, label %endif5204
then5202:
%t157 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3404, i64 5, i64 0 })
store %S.ast.Type %t157, ptr %a153
br label %endif5204
endif5204:
%t158 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1
%t159 = load %S.ast.Type, ptr %t158
%t160 = load %S.ast.Type, ptr %a153
%t161 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t159, %S.ast.Type %t160)
store %S.ast.Type %t161, ptr %a8
store i1 true, ptr %a9
br label %endif5151
endif5151:
%t162 = load ptr, ptr %a1
%t163 = load ptr, ptr %a1
%t164 = load %S.ast.Type, ptr %a8
%t165 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t163, %S.ast.Type %t164)
%t166 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t162, { ptr, i64, i64 } %t165)
store { ptr, i64, i64 } %t166, ptr %a167
%t168 = load ptr, ptr %a1
%t169 = load ptr, ptr %a1
%t170 = load %S.ast.Type, ptr %a8
%t171 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t169, %S.ast.Type %t170)
%t172 = load { ptr, i64, i64 }, ptr %a167
call void @finch.gen.store(ptr %t168, { ptr, i64, i64 } %t171, { ptr, i64, i64 } { ptr @.str.3405, i64 15, i64 0 }, { ptr, i64, i64 } %t172)
%t173 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i32 0, i32 1
%t175 = load i64, ptr %t174
%t176 = sdiv i64 %t175, 2
store i64 0, ptr %a177
br label %for.cond5205
for.cond5205:
%t178 = load i64, ptr %a177
%t179 = icmp slt i64 %t178, %t176
br i1 %t179, label %for.body5206, label %for.end5208
for.body5206:
%t180 = load %S.gen.Val, ptr %a10
store %S.gen.Val %t180, ptr %a181
call void @finch.copy.S_gen_Val(ptr %a182, ptr %a181)
%t183 = load %S.gen.Val, ptr %a182
store %S.gen.Val %t183, ptr %a184
%t185 = load %S.gen.Val, ptr %a11
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
store %S.gen.Val %t188, ptr %a189
%t190 = load i64, ptr %a177
%t191 = icmp eq i64 %t190, 0
br label %logic.from5209
logic.from5209:
br i1 %t191, label %logic.rhs5210, label %logic.end5211
logic.rhs5210:
%t192 = load i1, ptr %a9
br label %logic.rend5212
logic.rend5212:
br label %logic.end5211
logic.end5211:
%t193 = phi i1 [ false, %logic.from5209 ], [ %t192, %logic.rend5212 ]
%t194 = xor i1 %t193, true
br i1 %t194, label %then5213, label %endif5215
then5213:
%t195 = load ptr, ptr %a1
%t196 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t197 = load i64, ptr %a177
%t198 = mul i64 2, %t197
%t199 = load { ptr, i64, i64 }, ptr %t196
%t200 = extractvalue { ptr, i64, i64 } %t199, 1
%t201 = icmp uge i64 %t198, %t200
br i1 %t201, label %range5216, label %inrange5217
range5216:
call void @finch_panic_index(ptr @.str.3406, i64 2598, i64 %t198, i64 %t200)
unreachable
inrange5217:
%t202 = extractvalue { ptr, i64, i64 } %t199, 0
%t203 = getelementptr inbounds %S.ast.Node, ptr %t202, i64 %t198
%t204 = load %S.ast.Node, ptr %t203
%t205 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1
%t206 = load { ptr, i64, i64 }, ptr %t205
%t207 = extractvalue { ptr, i64, i64 } %t206, 1
%t208 = icmp uge i64 0, %t207
br i1 %t208, label %range5218, label %inrange5219
range5218:
call void @finch_panic_index(ptr @.str.3407, i64 2598, i64 0, i64 %t207)
unreachable
inrange5219:
%t209 = extractvalue { ptr, i64, i64 } %t206, 0
%t210 = getelementptr inbounds %S.ast.Type, ptr %t209, i64 0
%t211 = load %S.ast.Type, ptr %t210
%t212 = call %S.gen.Val @finch.gen.exprWant(ptr %t195, %S.ast.Node %t204, %S.ast.Type %t211)
store %S.gen.Val %t212, ptr %a184
%t213 = load ptr, ptr %a1
%t214 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t215 = load i64, ptr %a177
%t216 = mul i64 2, %t215
%t217 = add i64 %t216, 1
%t218 = load { ptr, i64, i64 }, ptr %t214
%t219 = extractvalue { ptr, i64, i64 } %t218, 1
%t220 = icmp uge i64 %t217, %t219
br i1 %t220, label %range5220, label %inrange5221
range5220:
call void @finch_panic_index(ptr @.str.3408, i64 2599, i64 %t217, i64 %t219)
unreachable
inrange5221:
%t221 = extractvalue { ptr, i64, i64 } %t218, 0
%t222 = getelementptr inbounds %S.ast.Node, ptr %t221, i64 %t217
%t223 = load %S.ast.Node, ptr %t222
%t224 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1
%t225 = load { ptr, i64, i64 }, ptr %t224
%t226 = extractvalue { ptr, i64, i64 } %t225, 1
%t227 = icmp uge i64 1, %t226
br i1 %t227, label %range5222, label %inrange5223
range5222:
call void @finch_panic_index(ptr @.str.3409, i64 2599, i64 1, i64 %t226)
unreachable
inrange5223:
%t228 = extractvalue { ptr, i64, i64 } %t225, 0
%t229 = getelementptr inbounds %S.ast.Type, ptr %t228, i64 1
%t230 = load %S.ast.Type, ptr %t229
%t231 = call %S.gen.Val @finch.gen.exprWant(ptr %t213, %S.ast.Node %t223, %S.ast.Type %t230)
store %S.gen.Val %t231, ptr %a189
br label %endif5215
endif5215:
%t232 = load ptr, ptr %a1
%t233 = load %S.gen.Val, ptr %a184
%t234 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1
%t235 = load { ptr, i64, i64 }, ptr %t234
%t236 = extractvalue { ptr, i64, i64 } %t235, 1
%t237 = icmp uge i64 0, %t236
br i1 %t237, label %range5224, label %inrange5225
range5224:
call void @finch_panic_index(ptr @.str.3410, i64 2601, i64 0, i64 %t236)
unreachable
inrange5225:
%t238 = extractvalue { ptr, i64, i64 } %t235, 0
%t239 = getelementptr inbounds %S.ast.Type, ptr %t238, i64 0
%t240 = load %S.ast.Type, ptr %t239
%t241 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t242 = load i64, ptr %a177
%t243 = mul i64 2, %t242
%t244 = load { ptr, i64, i64 }, ptr %t241
%t245 = extractvalue { ptr, i64, i64 } %t244, 1
%t246 = icmp uge i64 %t243, %t245
br i1 %t246, label %range5226, label %inrange5227
range5226:
call void @finch_panic_index(ptr @.str.3411, i64 2601, i64 %t243, i64 %t245)
unreachable
inrange5227:
%t247 = extractvalue { ptr, i64, i64 } %t244, 0
%t248 = getelementptr inbounds %S.ast.Node, ptr %t247, i64 %t243
%t249 = load %S.ast.Node, ptr %t248
%t250 = call %S.gen.Val @finch.gen.coerce(ptr %t232, %S.gen.Val %t233, %S.ast.Type %t240, %S.ast.Node %t249, { ptr, i64, i64 } { ptr @.str.3412, i64 21, i64 0 })
store %S.gen.Val %t250, ptr %a184
%t251 = load ptr, ptr %a1
%t252 = load %S.gen.Val, ptr %a189
%t253 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1
%t254 = load { ptr, i64, i64 }, ptr %t253
%t255 = extractvalue { ptr, i64, i64 } %t254, 1
%t256 = icmp uge i64 1, %t255
br i1 %t256, label %range5228, label %inrange5229
range5228:
call void @finch_panic_index(ptr @.str.3413, i64 2602, i64 1, i64 %t255)
unreachable
inrange5229:
%t257 = extractvalue { ptr, i64, i64 } %t254, 0
%t258 = getelementptr inbounds %S.ast.Type, ptr %t257, i64 1
%t259 = load %S.ast.Type, ptr %t258
%t260 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t261 = load i64, ptr %a177
%t262 = mul i64 2, %t261
%t263 = add i64 %t262, 1
%t264 = load { ptr, i64, i64 }, ptr %t260
%t265 = extractvalue { ptr, i64, i64 } %t264, 1
%t266 = icmp uge i64 %t263, %t265
br i1 %t266, label %range5230, label %inrange5231
range5230:
call void @finch_panic_index(ptr @.str.3414, i64 2602, i64 %t263, i64 %t265)
unreachable
inrange5231:
%t267 = extractvalue { ptr, i64, i64 } %t264, 0
%t268 = getelementptr inbounds %S.ast.Node, ptr %t267, i64 %t263
%t269 = load %S.ast.Node, ptr %t268
%t270 = call %S.gen.Val @finch.gen.coerce(ptr %t251, %S.gen.Val %t252, %S.ast.Type %t259, %S.ast.Node %t269, { ptr, i64, i64 } { ptr @.str.3415, i64 23, i64 0 })
store %S.gen.Val %t270, ptr %a189
%t271 = load ptr, ptr %a1
%t272 = load %S.gen.Val, ptr %a189
%t273 = call { ptr, i64, i64 } @finch.gen.own(ptr %t271, %S.gen.Val %t272)
store { ptr, i64, i64 } %t273, ptr %a274
%t275 = load ptr, ptr %a1
%t276 = load { ptr, i64, i64 }, ptr %a167
%t277 = load %S.ast.Type, ptr %a8
%t278 = load %S.gen.Val, ptr %a184
%t279 = load %S.ast.Node, ptr %a2
%t280 = call { ptr, i64, i64 } @finch.gen.mapSlot(ptr %t275, { ptr, i64, i64 } %t276, %S.ast.Type %t277, %S.gen.Val %t278, i1 false, %S.ast.Node %t279)
store { ptr, i64, i64 } %t280, ptr %a281
%t282 = load ptr, ptr %a1
%t283 = load ptr, ptr %a1
%t284 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1
%t285 = load { ptr, i64, i64 }, ptr %t284
%t286 = extractvalue { ptr, i64, i64 } %t285, 1
%t287 = icmp uge i64 1, %t286
br i1 %t287, label %range5232, label %inrange5233
range5232:
call void @finch_panic_index(ptr @.str.3416, i64 2605, i64 1, i64 %t286)
unreachable
inrange5233:
%t288 = extractvalue { ptr, i64, i64 } %t285, 0
%t289 = getelementptr inbounds %S.ast.Type, ptr %t288, i64 1
%t290 = load %S.ast.Type, ptr %t289
%t291 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t283, %S.ast.Type %t290)
%t292 = load { ptr, i64, i64 }, ptr %a274
%t293 = load ptr, ptr %a1
%t294 = load { ptr, i64, i64 }, ptr %a281
%t295 = load %S.ast.Type, ptr %a8
%t296 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t293, { ptr, i64, i64 } %t294, %S.ast.Type %t295, i64 2)
call void @finch.gen.store(ptr %t282, { ptr, i64, i64 } %t291, { ptr, i64, i64 } %t292, { ptr, i64, i64 } %t296)
br label %for.step5207
for.step5207:
%t297 = load i64, ptr %a177
%t298 = add i64 %t297, 1
store i64 %t298, ptr %a177
br label %for.cond5205
for.end5208:
%t299 = load ptr, ptr %a1
%t300 = load ptr, ptr %a1
%t301 = load %S.ast.Type, ptr %a8
%t302 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t300, %S.ast.Type %t301)
%t303 = load { ptr, i64, i64 }, ptr %a167
%t304 = call { ptr, i64, i64 } @finch.gen.load(ptr %t299, { ptr, i64, i64 } %t302, { ptr, i64, i64 } %t303)
%t305 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t304, 0
%t306 = load %S.ast.Type, ptr %a8
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 = insertvalue %S.gen.Val %t310, i1 true, 2
ret %S.gen.Val %t311
}
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
%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
%a101 = alloca { ptr, i64, i64 }, align 16
%a103 = alloca { ptr, i64, i64 }, align 16
%a104 = 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
%a121 = alloca { ptr, i64, i64 }, align 16
%a124 = 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
%a142 = alloca { ptr, i64, i64 }, align 16
%a143 = alloca { ptr, i64, i64 }, align 16
%a144 = 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
%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
%a166 = alloca { ptr, i64, i64 }, align 16
%a167 = 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
%a183 = alloca { ptr, i64, i64 }, align 16
%a186 = alloca { ptr, i64, i64 }, align 16
%a209 = alloca { ptr, i64, i64 }, align 16
%a240 = 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
%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
%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
%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
%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
%a300 = alloca %S.ast.Type, align 16
%a301 = alloca %S.ast.Type, align 16
%a309 = alloca { ptr, i64, i64 }, align 16
%a310 = 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
%a329 = alloca { ptr, i64, i64 }, align 16
%a330 = alloca { ptr, i64, i64 }, align 16
%a334 = alloca { ptr, i64, i64 }, align 16
%a335 = alloca { ptr, i64, i64 }, align 16
%a342 = alloca i64, align 16
%a344 = alloca %S.ast.Type, align 16
%a345 = alloca %S.ast.Type, align 16
%a347 = alloca %S.ast.Type, align 16
%a349 = alloca { ptr, i64, i64 }, align 16
%a350 = alloca { ptr, i64, i64 }, align 16
%a354 = alloca %S.ast.Type, align 16
%a355 = alloca %S.ast.Type, align 16
%a359 = alloca %S.ast.Type, align 16
%a362 = 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
%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
%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
%a389 = 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
%a396 = alloca { ptr, i64, i64 }, align 16
%a397 = alloca { ptr, i64, i64 }, align 16
%a398 = 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
%a405 = alloca { ptr, i64, i64 }, align 16
%a406 = alloca { ptr, i64, i64 }, align 16
%a407 = 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
%a417 = alloca { ptr, i64, i64 }, align 16
%a418 = alloca { ptr, i64, i64 }, align 16
%a423 = alloca { ptr, i64, i64 }, align 16
%a426 = 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
%a443 = alloca { ptr, i64, i64 }, align 16
%a444 = alloca { ptr, i64, i64 }, align 16
%a445 = 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
%a453 = alloca { ptr, i64, i64 }, align 16
%a457 = alloca { ptr, i64, i64 }, align 16
%a468 = alloca { ptr, i64, i64 }, align 16
%a471 = alloca { ptr, i64, i64 }, align 16
%a474 = alloca { ptr, i64, i64 }, align 16
%a483 = alloca { ptr, i64, i64 }, align 16
%a484 = 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
%a499 = 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
%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
%a515 = alloca { ptr, i64, i64 }, align 16
%a516 = 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
%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
%a538 = alloca { ptr, i64, i64 }, align 16
%a539 = 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
%a558 = alloca %S.ast.Type, align 16
%a559 = alloca %S.ast.Type, align 16
%a566 = alloca { ptr, i64, i64 }, align 16
%a567 = alloca { ptr, i64, i64 }, align 16
%a568 = 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
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 %range5234, label %inrange5235
range5234:
call void @finch_panic_index(ptr @.str.3417, i64 2612, i64 0, i64 %t13)
unreachable
inrange5235:
%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 %range5236, label %inrange5237
range5236:
call void @finch_panic_index(ptr @.str.3418, i64 2613, i64 1, i64 %t24)
unreachable
inrange5237:
%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.3419, 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.from5238
logic.from5238:
br i1 %t37, label %logic.end5240, label %logic.rhs5239
logic.rhs5239:
%t38 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t38, ptr %a39
store { ptr, i64, i64 } { ptr @.str.3420, 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.rend5241
logic.rend5241:
br label %logic.end5240
logic.end5240:
%t43 = phi i1 [ true, %logic.from5238 ], [ %t42, %logic.rend5241 ]
br label %logic.from5242
logic.from5242:
br i1 %t43, label %logic.end5244, label %logic.rhs5243
logic.rhs5243:
%t44 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t44, ptr %a45
store { ptr, i64, i64 } { ptr @.str.3421, 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.rend5245
logic.rend5245:
br label %logic.end5244
logic.end5244:
%t49 = phi i1 [ true, %logic.from5242 ], [ %t48, %logic.rend5245 ]
br i1 %t49, label %then5246, label %endif5248
then5246:
%t50 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t50, ptr %a51
store { ptr, i64, i64 } { ptr @.str.3422, 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 %then5249, label %else5250
then5249:
%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 %endif5251
else5250:
%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 %endif5251
endif5251:
%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 %range5252, label %inrange5253
range5252:
call void @finch_panic_index(ptr @.str.3423, i64 2620, i64 1, i64 %t65)
unreachable
inrange5253:
%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 %range5254, label %inrange5255
range5254:
call void @finch_panic_index(ptr @.str.3424, i64 2620, i64 1, i64 %t75)
unreachable
inrange5255:
%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.3425, i64 7, i64 0 })
store %S.gen.Val %t80, ptr %a81
%t82 = load ptr, ptr %a1
%t83 = load { ptr, i64, i64 }, ptr %a3
%t84 = load ptr, ptr %a1
%t85 = load %S.gen.Val, ptr %a81
%t86 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t84, %S.gen.Val %t85)
%t87 = load %S.ast.Type, ptr %a4
%t88 = call { ptr, i64, i64 } @finch.gen.mapFind(ptr %t82, { ptr, i64, i64 } %t83, { ptr, i64, i64 } %t86, %S.ast.Type %t87)
store { ptr, i64, i64 } %t88, ptr %a89
%t90 = load ptr, ptr %a1
%t91 = load { ptr, i64, i64 }, ptr %a89
store { ptr, i64, i64 } { ptr @.str.3426, i64 13, 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.3427, i64 3, i64 0 }, ptr %a98
call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98)
%t99 = load { ptr, i64, i64 }, ptr %a96
%t100 = call { ptr, i64, i64 } @finch.gen.op(ptr %t90, { ptr, i64, i64 } %t99)
store { ptr, i64, i64 } %t100, ptr %a101
%t102 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t102, ptr %a103
store { ptr, i64, i64 } { ptr @.str.3428, 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 %then5256, label %endif5258
then5256:
%t107 = load { ptr, i64, i64 }, ptr %a101
store { ptr, i64, i64 } %t107, ptr %a108
call void @finch_str_copy(ptr %a109, ptr %a108)
%t110 = load { ptr, i64, i64 }, ptr %a109
%t111 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t110, 0
%t112 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3429, i64 4, i64 0 })
%t113 = insertvalue %S.gen.Val %t111, %S.ast.Type %t112, 1
ret %S.gen.Val %t113
endif5258:
%t114 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t114, ptr %a115
store { ptr, i64, i64 } { ptr @.str.3430, i64 6, i64 0 }, ptr %a116
%t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116)
%t118 = icmp ne i32 %t117, 0
br i1 %t118, label %then5259, label %endif5261
then5259:
%t119 = load ptr, ptr %a1
%t120 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t119, { ptr, i64, i64 } { ptr @.str.3431, i64 10, i64 0 })
store { ptr, i64, i64 } %t120, ptr %a121
%t122 = load ptr, ptr %a1
%t123 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t122, { ptr, i64, i64 } { ptr @.str.3432, i64 10, i64 0 })
store { ptr, i64, i64 } %t123, ptr %a124
%t125 = load ptr, ptr %a1
%t126 = load { ptr, i64, i64 }, ptr %a101
%t127 = load { ptr, i64, i64 }, ptr %a121
%t128 = load { ptr, i64, i64 }, ptr %a124
call void @finch.gen.condBr(ptr %t125, { ptr, i64, i64 } %t126, { ptr, i64, i64 } %t127, { ptr, i64, i64 } %t128)
%t129 = load ptr, ptr %a1
%t130 = load { ptr, i64, i64 }, ptr %a121
call void @finch.gen.label(ptr %t129, { ptr, i64, i64 } %t130)
%t131 = load ptr, ptr %a1
%t132 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } { ptr @.str.3433, i64 35, i64 0 }, ptr %a134
store { ptr, i64, i64 } %t132, ptr %a135
call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135)
%t136 = load { ptr, i64, i64 }, ptr %a133
store { ptr, i64, i64 } %t136, ptr %a138
store { ptr, i64, i64 } { ptr @.str.3434, i64 6, i64 0 }, ptr %a139
call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139)
%t140 = load { ptr, i64, i64 }, ptr %a137
%t141 = load { ptr, i64, i64 }, ptr %a89
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)
%t145 = load { ptr, i64, i64 }, ptr %a142
store { ptr, i64, i64 } %t145, ptr %a147
store { ptr, i64, i64 } { ptr @.str.3435, i64 6, i64 0 }, ptr %a148
call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148)
%t149 = load { ptr, i64, i64 }, ptr %a146
%t150 = load ptr, ptr %a1
%t151 = load %S.ast.Type, ptr %a4
%t152 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t150, %S.ast.Type %t151)
store { ptr, i64, i64 } %t149, ptr %a154
store { ptr, i64, i64 } %t152, ptr %a155
call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155)
%t156 = load { ptr, i64, i64 }, ptr %a153
store { ptr, i64, i64 } %t156, ptr %a158
store { ptr, i64, i64 } { ptr @.str.3436, i64 1, i64 0 }, ptr %a159
call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159)
%t160 = load { ptr, i64, i64 }, ptr %a157
call void @finch.gen.emit(ptr %t131, { ptr, i64, i64 } %t160)
%t161 = load ptr, ptr %a1
%t162 = load { ptr, i64, i64 }, ptr %a124
call void @finch.gen.br(ptr %t161, { ptr, i64, i64 } %t162)
%t163 = load ptr, ptr %a1
%t164 = load { ptr, i64, i64 }, ptr %a124
call void @finch.gen.label(ptr %t163, { ptr, i64, i64 } %t164)
%t165 = load { ptr, i64, i64 }, ptr %a101
store { ptr, i64, i64 } %t165, ptr %a166
call void @finch_str_copy(ptr %a167, ptr %a166)
%t168 = load { ptr, i64, i64 }, ptr %a167
%t169 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t168, 0
%t170 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3437, i64 4, i64 0 })
%t171 = insertvalue %S.gen.Val %t169, %S.ast.Type %t170, 1
ret %S.gen.Val %t171
endif5261:
%t172 = load ptr, ptr %a1
%t173 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t172, { ptr, i64, i64 } { ptr @.str.3438, i64 9, i64 0 })
store { ptr, i64, i64 } %t173, ptr %a174
%t175 = load ptr, ptr %a1
%t176 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t175, { ptr, i64, i64 } { ptr @.str.3439, i64 11, i64 0 })
store { ptr, i64, i64 } %t176, ptr %a177
%t178 = load ptr, ptr %a1
%t179 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t178, { ptr, i64, i64 } { ptr @.str.3440, i64 8, i64 0 })
store { ptr, i64, i64 } %t179, ptr %a180
%t181 = load ptr, ptr %a1
%t182 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t181, { ptr, i64, i64 } { ptr @.str.3441, i64 8, i64 0 })
store { ptr, i64, i64 } %t182, ptr %a183
%t184 = load ptr, ptr %a1
%t185 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t184, { ptr, i64, i64 } { ptr @.str.3442, i64 7, i64 0 })
store { ptr, i64, i64 } %t185, ptr %a186
%t187 = load ptr, ptr %a1
%t188 = load { ptr, i64, i64 }, ptr %a101
%t189 = load { ptr, i64, i64 }, ptr %a174
%t190 = load { ptr, i64, i64 }, ptr %a177
call void @finch.gen.condBr(ptr %t187, { ptr, i64, i64 } %t188, { ptr, i64, i64 } %t189, { ptr, i64, i64 } %t190)
%t191 = load ptr, ptr %a1
%t192 = load { ptr, i64, i64 }, ptr %a174
call void @finch.gen.label(ptr %t191, { ptr, i64, i64 } %t192)
%t193 = load ptr, ptr %a1
%t194 = load ptr, ptr %a1
%t195 = load ptr, ptr %a1
%t196 = load %S.ast.Type, ptr %a32
%t197 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t195, %S.ast.Type %t196)
%t198 = load ptr, ptr %a1
%t199 = load ptr, ptr %a1
%t200 = load { ptr, i64, i64 }, ptr %a3
%t201 = load %S.ast.Type, ptr %a4
%t202 = load { ptr, i64, i64 }, ptr %a89
%t203 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t199, { ptr, i64, i64 } %t200, %S.ast.Type %t201, { ptr, i64, i64 } %t202)
%t204 = load %S.ast.Type, ptr %a4
%t205 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t198, { ptr, i64, i64 } %t203, %S.ast.Type %t204, i64 2)
%t206 = call { ptr, i64, i64 } @finch.gen.load(ptr %t194, { ptr, i64, i64 } %t197, { ptr, i64, i64 } %t205)
%t207 = load %S.ast.Type, ptr %a32
%t208 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t193, { ptr, i64, i64 } %t206, %S.ast.Type %t207)
store { ptr, i64, i64 } %t208, ptr %a209
%t210 = load ptr, ptr %a1
%t211 = load { ptr, i64, i64 }, ptr %a180
call void @finch.gen.br(ptr %t210, { ptr, i64, i64 } %t211)
%t212 = load ptr, ptr %a1
%t213 = load { ptr, i64, i64 }, ptr %a180
call void @finch.gen.label(ptr %t212, { ptr, i64, i64 } %t213)
%t214 = load ptr, ptr %a1
%t215 = load { ptr, i64, i64 }, ptr %a186
call void @finch.gen.br(ptr %t214, { ptr, i64, i64 } %t215)
%t216 = load ptr, ptr %a1
%t217 = load { ptr, i64, i64 }, ptr %a177
call void @finch.gen.label(ptr %t216, { ptr, i64, i64 } %t217)
%t218 = load ptr, ptr %a1
%t219 = load ptr, ptr %a1
%t220 = load ptr, ptr %a1
%t221 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t222 = load { ptr, i64, i64 }, ptr %t221
%t223 = extractvalue { ptr, i64, i64 } %t222, 1
%t224 = icmp uge i64 2, %t223
br i1 %t224, label %range5262, label %inrange5263
range5262:
call void @finch_panic_index(ptr @.str.3443, i64 2649, i64 2, i64 %t223)
unreachable
inrange5263:
%t225 = extractvalue { ptr, i64, i64 } %t222, 0
%t226 = getelementptr inbounds %S.ast.Node, ptr %t225, i64 2
%t227 = load %S.ast.Node, ptr %t226
%t228 = load %S.ast.Type, ptr %a32
%t229 = call %S.gen.Val @finch.gen.exprWant(ptr %t220, %S.ast.Node %t227, %S.ast.Type %t228)
%t230 = load %S.ast.Type, ptr %a32
%t231 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t232 = load { ptr, i64, i64 }, ptr %t231
%t233 = extractvalue { ptr, i64, i64 } %t232, 1
%t234 = icmp uge i64 2, %t233
br i1 %t234, label %range5264, label %inrange5265
range5264:
call void @finch_panic_index(ptr @.str.3444, i64 2649, i64 2, i64 %t233)
unreachable
inrange5265:
%t235 = extractvalue { ptr, i64, i64 } %t232, 0
%t236 = getelementptr inbounds %S.ast.Node, ptr %t235, i64 2
%t237 = load %S.ast.Node, ptr %t236
%t238 = call %S.gen.Val @finch.gen.coerce(ptr %t219, %S.gen.Val %t229, %S.ast.Type %t230, %S.ast.Node %t237, { ptr, i64, i64 } { ptr @.str.3445, i64 11, i64 0 })
%t239 = call { ptr, i64, i64 } @finch.gen.own(ptr %t218, %S.gen.Val %t238)
store { ptr, i64, i64 } %t239, ptr %a240
%t241 = load ptr, ptr %a1
%t242 = load { ptr, i64, i64 }, ptr %a183
call void @finch.gen.br(ptr %t241, { ptr, i64, i64 } %t242)
%t243 = load ptr, ptr %a1
%t244 = load { ptr, i64, i64 }, ptr %a183
call void @finch.gen.label(ptr %t243, { ptr, i64, i64 } %t244)
%t245 = load ptr, ptr %a1
%t246 = load { ptr, i64, i64 }, ptr %a186
call void @finch.gen.br(ptr %t245, { ptr, i64, i64 } %t246)
%t247 = load ptr, ptr %a1
%t248 = load { ptr, i64, i64 }, ptr %a186
call void @finch.gen.label(ptr %t247, { ptr, i64, i64 } %t248)
%t249 = load ptr, ptr %a1
%t250 = load ptr, ptr %a1
%t251 = load %S.ast.Type, ptr %a32
%t252 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t250, %S.ast.Type %t251)
store { ptr, i64, i64 } { ptr @.str.3446, i64 4, 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.3447, i64 3, 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 %a209
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.3448, i64 3, i64 0 }, ptr %a268
call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268)
%t269 = load { ptr, i64, i64 }, ptr %a266
%t270 = load { ptr, i64, i64 }, ptr %a180
store { ptr, i64, i64 } %t269, 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
store { ptr, i64, i64 } %t274, ptr %a276
store { ptr, i64, i64 } { ptr @.str.3449, i64 6, 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 %a240
store { ptr, i64, i64 } %t278, ptr %a281
store { ptr, i64, i64 } %t279, ptr %a282
call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282)
%t283 = load { ptr, i64, i64 }, ptr %a280
store { ptr, i64, i64 } %t283, ptr %a285
store { ptr, i64, i64 } { ptr @.str.3450, i64 3, i64 0 }, ptr %a286
call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286)
%t287 = load { ptr, i64, i64 }, ptr %a284
%t288 = load { ptr, i64, i64 }, ptr %a183
store { ptr, i64, i64 } %t287, ptr %a290
store { ptr, i64, i64 } %t288, ptr %a291
call void @finch_str_concat(ptr %a289, ptr %a290, ptr %a291)
%t292 = load { ptr, i64, i64 }, ptr %a289
store { ptr, i64, i64 } %t292, ptr %a294
store { ptr, i64, i64 } { ptr @.str.3451, i64 2, i64 0 }, ptr %a295
call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295)
%t296 = load { ptr, i64, i64 }, ptr %a293
%t297 = call { ptr, i64, i64 } @finch.gen.op(ptr %t249, { ptr, i64, i64 } %t296)
%t298 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t297, 0
%t299 = load %S.ast.Type, ptr %a32
store %S.ast.Type %t299, ptr %a300
call void @finch.copy.S_ast_Type(ptr %a301, ptr %a300)
%t302 = load %S.ast.Type, ptr %a301
%t303 = insertvalue %S.gen.Val %t298, %S.ast.Type %t302, 1
%t304 = load ptr, ptr %a1
%t305 = load %S.ast.Type, ptr %a32
%t306 = call i1 @finch.gen.owning(ptr %t304, %S.ast.Type %t305)
%t307 = insertvalue %S.gen.Val %t303, i1 %t306, 2
ret %S.gen.Val %t307
endif5248:
%t308 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t308, ptr %a309
store { ptr, i64, i64 } { ptr @.str.3452, i64 5, i64 0 }, ptr %a310
%t311 = call i32 @finch_str_eq(ptr %a309, ptr %a310)
%t312 = icmp ne i32 %t311, 0
br i1 %t312, label %then5266, label %endif5268
then5266:
%t313 = load ptr, ptr %a1
%t314 = load %S.ast.Node, ptr %a2
%t315 = load { ptr, i64, i64 }, ptr %a10
call void @finch.gen.checkArgs(ptr %t313, %S.ast.Node %t314, i64 1, i64 0, { ptr, i64, i64 } %t315)
%t316 = load ptr, ptr %a1
%t317 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } { ptr @.str.3453, i64 31, i64 0 }, ptr %a319
store { ptr, i64, i64 } %t317, ptr %a320
call void @finch_str_concat(ptr %a318, ptr %a319, ptr %a320)
%t321 = load { ptr, i64, i64 }, ptr %a318
store { ptr, i64, i64 } %t321, ptr %a323
store { ptr, i64, i64 } { ptr @.str.3454, i64 1, i64 0 }, ptr %a324
call void @finch_str_concat(ptr %a322, ptr %a323, ptr %a324)
%t325 = load { ptr, i64, i64 }, ptr %a322
call void @finch.gen.emit(ptr %t316, { ptr, i64, i64 } %t325)
%t326 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3455, i64 4, i64 0 })
%t327 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t326, 1
ret %S.gen.Val %t327
endif5268:
%t328 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t328, ptr %a329
store { ptr, i64, i64 } { ptr @.str.3456, i64 4, i64 0 }, ptr %a330
%t331 = call i32 @finch_str_eq(ptr %a329, ptr %a330)
%t332 = icmp ne i32 %t331, 0
br label %logic.from5269
logic.from5269:
br i1 %t332, label %logic.end5271, label %logic.rhs5270
logic.rhs5270:
%t333 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t333, ptr %a334
store { ptr, i64, i64 } { ptr @.str.3457, i64 6, i64 0 }, ptr %a335
%t336 = call i32 @finch_str_eq(ptr %a334, ptr %a335)
%t337 = icmp ne i32 %t336, 0
br label %logic.rend5272
logic.rend5272:
br label %logic.end5271
logic.end5271:
%t338 = phi i1 [ true, %logic.from5269 ], [ %t337, %logic.rend5272 ]
br i1 %t338, label %then5273, label %endif5275
then5273:
%t339 = load ptr, ptr %a1
%t340 = load %S.ast.Node, ptr %a2
%t341 = load { ptr, i64, i64 }, ptr %a10
call void @finch.gen.checkArgs(ptr %t339, %S.ast.Node %t340, i64 1, i64 0, { ptr, i64, i64 } %t341)
store i64 1, ptr %a342
%t343 = load %S.ast.Type, ptr %a21
store %S.ast.Type %t343, ptr %a344
call void @finch.copy.S_ast_Type(ptr %a345, ptr %a344)
%t346 = load %S.ast.Type, ptr %a345
store %S.ast.Type %t346, ptr %a347
%t348 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t348, ptr %a349
store { ptr, i64, i64 } { ptr @.str.3458, i64 6, i64 0 }, ptr %a350
%t351 = call i32 @finch_str_eq(ptr %a349, ptr %a350)
%t352 = icmp ne i32 %t351, 0
br i1 %t352, label %then5276, label %endif5278
then5276:
store i64 2, ptr %a342
%t353 = load %S.ast.Type, ptr %a32
store %S.ast.Type %t353, ptr %a354
call void @finch.copy.S_ast_Type(ptr %a355, ptr %a354)
%t356 = load %S.ast.Type, ptr %a355
store %S.ast.Type %t356, ptr %a347
br label %endif5278
endif5278:
%t357 = load %S.ast.Type, ptr %a347
%t358 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t357)
store %S.ast.Type %t358, ptr %a359
%t360 = load ptr, ptr %a1
%t361 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t360, { ptr, i64, i64 } { ptr @.str.3459, i64 17, i64 0 })
store { ptr, i64, i64 } %t361, ptr %a362
%t363 = load ptr, ptr %a1
%t364 = load { ptr, i64, i64 }, ptr %a362
call void @finch.gen.store(ptr %t363, { ptr, i64, i64 } { ptr @.str.3460, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.3461, i64 15, i64 0 }, { ptr, i64, i64 } %t364)
%t365 = load ptr, ptr %a1
%t366 = load ptr, ptr %a1
%t367 = load ptr, ptr %a1
%t368 = load %S.ast.Type, ptr %a4
%t369 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t367, %S.ast.Type %t368)
store { ptr, i64, i64 } { ptr @.str.3463, i64 23, i64 0 }, ptr %a371
store { ptr, i64, i64 } %t369, ptr %a372
call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372)
%t373 = load { ptr, i64, i64 }, ptr %a370
store { ptr, i64, i64 } %t373, ptr %a375
store { ptr, i64, i64 } { ptr @.str.3464, i64 6, i64 0 }, ptr %a376
call void @finch_str_concat(ptr %a374, ptr %a375, ptr %a376)
%t377 = load { ptr, i64, i64 }, ptr %a374
%t378 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t377, ptr %a380
store { ptr, i64, i64 } %t378, ptr %a381
call void @finch_str_concat(ptr %a379, ptr %a380, ptr %a381)
%t382 = load { ptr, i64, i64 }, ptr %a379
store { ptr, i64, i64 } %t382, ptr %a384
store { ptr, i64, i64 } { ptr @.str.3465, i64 14, i64 0 }, ptr %a385
call void @finch_str_concat(ptr %a383, ptr %a384, ptr %a385)
%t386 = load { ptr, i64, i64 }, ptr %a383
%t387 = call { ptr, i64, i64 } @finch.gen.op(ptr %t366, { ptr, i64, i64 } %t386)
%t388 = call { ptr, i64, i64 } @finch.gen.load(ptr %t365, { ptr, i64, i64 } { ptr @.str.3462, i64 3, i64 0 }, { ptr, i64, i64 } %t387)
store { ptr, i64, i64 } %t388, ptr %a389
%t390 = load ptr, ptr %a1
%t391 = load { ptr, i64, i64 }, ptr %a362
store { ptr, i64, i64 } { ptr @.str.3466, i64 30, i64 0 }, ptr %a393
store { ptr, i64, i64 } %t391, ptr %a394
call void @finch_str_concat(ptr %a392, ptr %a393, ptr %a394)
%t395 = load { ptr, i64, i64 }, ptr %a392
store { ptr, i64, i64 } %t395, ptr %a397
store { ptr, i64, i64 } { ptr @.str.3467, i64 6, i64 0 }, ptr %a398
call void @finch_str_concat(ptr %a396, ptr %a397, ptr %a398)
%t399 = load { ptr, i64, i64 }, ptr %a396
%t400 = load { ptr, i64, i64 }, ptr %a389
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)
%t404 = load { ptr, i64, i64 }, ptr %a401
store { ptr, i64, i64 } %t404, ptr %a406
store { ptr, i64, i64 } { ptr @.str.3468, i64 6, i64 0 }, ptr %a407
call void @finch_str_concat(ptr %a405, ptr %a406, ptr %a407)
%t408 = load { ptr, i64, i64 }, ptr %a405
%t409 = load ptr, ptr %a1
%t410 = load %S.ast.Type, ptr %a347
%t411 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t409, %S.ast.Type %t410)
store { ptr, i64, i64 } %t408, ptr %a413
store { ptr, i64, i64 } %t411, ptr %a414
call void @finch_str_concat(ptr %a412, ptr %a413, ptr %a414)
%t415 = load { ptr, i64, i64 }, ptr %a412
store { ptr, i64, i64 } %t415, ptr %a417
store { ptr, i64, i64 } { ptr @.str.3469, i64 1, i64 0 }, ptr %a418
call void @finch_str_concat(ptr %a416, ptr %a417, ptr %a418)
%t419 = load { ptr, i64, i64 }, ptr %a416
call void @finch.gen.emit(ptr %t390, { ptr, i64, i64 } %t419)
%t420 = load ptr, ptr %a1
%t421 = load { ptr, i64, i64 }, ptr %a362
%t422 = call { ptr, i64, i64 } @finch.gen.load(ptr %t420, { ptr, i64, i64 } { ptr @.str.3470, i64 3, i64 0 }, { ptr, i64, i64 } %t421)
store { ptr, i64, i64 } %t422, ptr %a423
%t424 = load ptr, ptr %a1
%t425 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t424, { ptr, i64, i64 } { ptr @.str.3471, i64 3, i64 0 })
store { ptr, i64, i64 } %t425, ptr %a426
%t427 = load ptr, ptr %a1
%t428 = load { ptr, i64, i64 }, ptr %a426
call void @finch.gen.store(ptr %t427, { ptr, i64, i64 } { ptr @.str.3472, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3473, i64 1, i64 0 }, { ptr, i64, i64 } %t428)
%t429 = load ptr, ptr %a1
%t430 = load ptr, ptr %a1
%t431 = load ptr, ptr %a1
%t432 = load %S.ast.Type, ptr %a4
%t433 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t431, %S.ast.Type %t432)
store { ptr, i64, i64 } { ptr @.str.3475, i64 23, 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.3476, i64 6, i64 0 }, ptr %a440
call void @finch_str_concat(ptr %a438, ptr %a439, ptr %a440)
%t441 = load { ptr, i64, i64 }, ptr %a438
%t442 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t441, ptr %a444
store { ptr, i64, i64 } %t442, ptr %a445
call void @finch_str_concat(ptr %a443, ptr %a444, ptr %a445)
%t446 = load { ptr, i64, i64 }, ptr %a443
store { ptr, i64, i64 } %t446, ptr %a448
store { ptr, i64, i64 } { ptr @.str.3477, i64 14, i64 0 }, ptr %a449
call void @finch_str_concat(ptr %a447, ptr %a448, ptr %a449)
%t450 = load { ptr, i64, i64 }, ptr %a447
%t451 = call { ptr, i64, i64 } @finch.gen.op(ptr %t430, { ptr, i64, i64 } %t450)
%t452 = call { ptr, i64, i64 } @finch.gen.load(ptr %t429, { ptr, i64, i64 } { ptr @.str.3474, i64 3, i64 0 }, { ptr, i64, i64 } %t451)
store { ptr, i64, i64 } %t452, ptr %a453
%t454 = load ptr, ptr %a1
%t455 = load { ptr, i64, i64 }, ptr %a453
%t456 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t454, { ptr, i64, i64 } %t455)
store { ptr, i64, i64 } %t456, ptr %a457
%t458 = load ptr, ptr %a1
%t459 = load { ptr, i64, i64 }, ptr %a3
%t460 = load %S.ast.Type, ptr %a4
%t461 = load { ptr, i64, i64 }, ptr %a457
%t462 = extractvalue { ptr, i64, i64 } %t461, 1
%t463 = icmp uge i64 3, %t462
br i1 %t463, label %range5279, label %inrange5280
range5279:
call void @finch_panic_index(ptr @.str.3478, i64 2679, i64 3, i64 %t462)
unreachable
inrange5280:
%t464 = extractvalue { ptr, i64, i64 } %t461, 0
%t465 = getelementptr inbounds { ptr, i64, i64 }, ptr %t464, i64 3
%t466 = load { ptr, i64, i64 }, ptr %t465
%t467 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t458, { ptr, i64, i64 } %t459, %S.ast.Type %t460, { ptr, i64, i64 } %t466)
store { ptr, i64, i64 } %t467, ptr %a468
%t469 = load ptr, ptr %a1
%t470 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t469, { ptr, i64, i64 } { ptr @.str.3479, i64 10, i64 0 })
store { ptr, i64, i64 } %t470, ptr %a471
%t472 = load ptr, ptr %a1
%t473 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t472, { ptr, i64, i64 } { ptr @.str.3480, i64 10, i64 0 })
store { ptr, i64, i64 } %t473, ptr %a474
%t475 = load ptr, ptr %a1
%t476 = load ptr, ptr %a1
%t477 = load ptr, ptr %a1
%t478 = load ptr, ptr %a1
%t479 = load { ptr, i64, i64 }, ptr %a468
%t480 = load %S.ast.Type, ptr %a4
%t481 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t478, { ptr, i64, i64 } %t479, %S.ast.Type %t480, i64 0)
%t482 = call { ptr, i64, i64 } @finch.gen.load(ptr %t477, { ptr, i64, i64 } { ptr @.str.3482, i64 3, i64 0 }, { ptr, i64, i64 } %t481)
store { ptr, i64, i64 } { ptr @.str.3481, i64 12, i64 0 }, ptr %a484
store { ptr, i64, i64 } %t482, ptr %a485
call void @finch_str_concat(ptr %a483, ptr %a484, ptr %a485)
%t486 = load { ptr, i64, i64 }, ptr %a483
store { ptr, i64, i64 } %t486, ptr %a488
store { ptr, i64, i64 } { ptr @.str.3483, i64 3, i64 0 }, ptr %a489
call void @finch_str_concat(ptr %a487, ptr %a488, ptr %a489)
%t490 = load { ptr, i64, i64 }, ptr %a487
%t491 = call { ptr, i64, i64 } @finch.gen.op(ptr %t476, { ptr, i64, i64 } %t490)
%t492 = load { ptr, i64, i64 }, ptr %a471
%t493 = load { ptr, i64, i64 }, ptr %a474
call void @finch.gen.condBr(ptr %t475, { ptr, i64, i64 } %t491, { ptr, i64, i64 } %t492, { ptr, i64, i64 } %t493)
%t494 = load ptr, ptr %a1
%t495 = load { ptr, i64, i64 }, ptr %a471
call void @finch.gen.label(ptr %t494, { ptr, i64, i64 } %t495)
%t496 = load ptr, ptr %a1
%t497 = load { ptr, i64, i64 }, ptr %a426
%t498 = call { ptr, i64, i64 } @finch.gen.load(ptr %t496, { ptr, i64, i64 } { ptr @.str.3484, i64 3, i64 0 }, { ptr, i64, i64 } %t497)
store { ptr, i64, i64 } %t498, ptr %a499
%t500 = load ptr, ptr %a1
%t501 = load ptr, ptr %a1
%t502 = load ptr, ptr %a1
%t503 = load %S.ast.Type, ptr %a347
%t504 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t502, %S.ast.Type %t503)
store { ptr, i64, i64 } { ptr @.str.3485, i64 23, i64 0 }, ptr %a506
store { ptr, i64, i64 } %t504, ptr %a507
call void @finch_str_concat(ptr %a505, ptr %a506, ptr %a507)
%t508 = load { ptr, i64, i64 }, ptr %a505
store { ptr, i64, i64 } %t508, ptr %a510
store { ptr, i64, i64 } { ptr @.str.3486, i64 6, i64 0 }, ptr %a511
call void @finch_str_concat(ptr %a509, ptr %a510, ptr %a511)
%t512 = load { ptr, i64, i64 }, ptr %a509
%t513 = load { ptr, i64, i64 }, ptr %a423
store { ptr, i64, i64 } %t512, ptr %a515
store { ptr, i64, i64 } %t513, ptr %a516
call void @finch_str_concat(ptr %a514, ptr %a515, ptr %a516)
%t517 = load { ptr, i64, i64 }, ptr %a514
store { ptr, i64, i64 } %t517, ptr %a519
store { ptr, i64, i64 } { ptr @.str.3487, i64 6, i64 0 }, ptr %a520
call void @finch_str_concat(ptr %a518, ptr %a519, ptr %a520)
%t521 = load { ptr, i64, i64 }, ptr %a518
%t522 = load { ptr, i64, i64 }, ptr %a499
store { ptr, i64, i64 } %t521, ptr %a524
store { ptr, i64, i64 } %t522, ptr %a525
call void @finch_str_concat(ptr %a523, ptr %a524, ptr %a525)
%t526 = load { ptr, i64, i64 }, ptr %a523
%t527 = call { ptr, i64, i64 } @finch.gen.op(ptr %t501, { ptr, i64, i64 } %t526)
%t528 = load ptr, ptr %a1
%t529 = load { ptr, i64, i64 }, ptr %a468
%t530 = load %S.ast.Type, ptr %a4
%t531 = load i64, ptr %a342
%t532 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t528, { ptr, i64, i64 } %t529, %S.ast.Type %t530, i64 %t531)
%t533 = load %S.ast.Type, ptr %a347
call void @finch.gen.copyAt(ptr %t500, { ptr, i64, i64 } %t527, { ptr, i64, i64 } %t532, %S.ast.Type %t533)
%t534 = load ptr, ptr %a1
%t535 = load ptr, ptr %a1
%t536 = load { ptr, i64, i64 }, ptr %a499
store { ptr, i64, i64 } { ptr @.str.3489, i64 8, i64 0 }, ptr %a538
store { ptr, i64, i64 } %t536, ptr %a539
call void @finch_str_concat(ptr %a537, ptr %a538, ptr %a539)
%t540 = load { ptr, i64, i64 }, ptr %a537
store { ptr, i64, i64 } %t540, ptr %a542
store { ptr, i64, i64 } { ptr @.str.3490, i64 3, i64 0 }, ptr %a543
call void @finch_str_concat(ptr %a541, ptr %a542, ptr %a543)
%t544 = load { ptr, i64, i64 }, ptr %a541
%t545 = call { ptr, i64, i64 } @finch.gen.op(ptr %t535, { ptr, i64, i64 } %t544)
%t546 = load { ptr, i64, i64 }, ptr %a426
call void @finch.gen.store(ptr %t534, { ptr, i64, i64 } { ptr @.str.3488, i64 3, i64 0 }, { ptr, i64, i64 } %t545, { ptr, i64, i64 } %t546)
%t547 = load ptr, ptr %a1
%t548 = load { ptr, i64, i64 }, ptr %a474
call void @finch.gen.br(ptr %t547, { ptr, i64, i64 } %t548)
%t549 = load ptr, ptr %a1
%t550 = load { ptr, i64, i64 }, ptr %a474
call void @finch.gen.label(ptr %t549, { ptr, i64, i64 } %t550)
%t551 = load ptr, ptr %a1
%t552 = load { ptr, i64, i64 }, ptr %a457
call void @finch.gen.loopEnd(ptr %t551, { ptr, i64, i64 } %t552)
%t553 = load ptr, ptr %a1
%t554 = load { ptr, i64, i64 }, ptr %a362
%t555 = call { ptr, i64, i64 } @finch.gen.load(ptr %t553, { ptr, i64, i64 } { ptr @.str.3491, i64 17, i64 0 }, { ptr, i64, i64 } %t554)
%t556 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t555, 0
%t557 = load %S.ast.Type, ptr %a359
store %S.ast.Type %t557, ptr %a558
call void @finch.copy.S_ast_Type(ptr %a559, ptr %a558)
%t560 = load %S.ast.Type, ptr %a559
%t561 = insertvalue %S.gen.Val %t556, %S.ast.Type %t560, 1
%t562 = insertvalue %S.gen.Val %t561, i1 true, 2
ret %S.gen.Val %t562
endif5275:
%t563 = load ptr, ptr %a1
%t564 = load %S.ast.Node, ptr %a2
%t565 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } { ptr @.str.3492, i64 21, i64 0 }, ptr %a567
store { ptr, i64, i64 } %t565, ptr %a568
call void @finch_str_concat(ptr %a566, ptr %a567, ptr %a568)
%t569 = load { ptr, i64, i64 }, ptr %a566
store { ptr, i64, i64 } %t569, ptr %a571
store { ptr, i64, i64 } { ptr @.str.3493, i64 49, i64 0 }, ptr %a572
call void @finch_str_concat(ptr %a570, ptr %a571, ptr %a572)
%t573 = load { ptr, i64, i64 }, ptr %a570
call void @finch.gen.fail(ptr %t563, %S.ast.Node %t564, { ptr, i64, i64 } %t573)
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
%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
%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
%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
%a110 = alloca %S.ast.Type, align 16
%a111 = 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 = 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.3494, 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.from5281
logic.from5281:
br i1 %t9, label %logic.rhs5282, label %logic.end5283
logic.rhs5282:
%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.3495, 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.rend5284
logic.rend5284:
br label %logic.end5283
logic.end5283:
%t16 = phi i1 [ false, %logic.from5281 ], [ %t15, %logic.rend5284 ]
br label %logic.from5285
logic.from5285:
br i1 %t16, label %logic.rhs5286, label %logic.end5287
logic.rhs5286:
%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.rend5288
logic.rend5288:
br label %logic.end5287
logic.end5287:
%t22 = phi i1 [ false, %logic.from5285 ], [ %t21, %logic.rend5288 ]
br i1 %t22, label %then5289, label %endif5291
then5289:
%t23 = load ptr, ptr %a1
%t24 = icmp eq ptr %t23, null
br i1 %t24, label %panic5292, label %ok5293
panic5292:
call void @finch_panic(ptr @.str.3496, i64 2701, ptr @.str.3497)
unreachable
ok5293:
%t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 20
%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 %range5294, label %inrange5295
range5294:
call void @finch_panic_index(ptr @.str.3498, i64 2701, i64 %t31, i64 %t33)
unreachable
inrange5295:
%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.cond5296
find.cond5296:
%t50 = load i64, ptr %a49
%t51 = icmp slt i64 %t50, %t47
br i1 %t51, label %find.body5297, label %find.end5300
find.body5297:
%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.hit5298, label %find.next5299
find.hit5298:
store i64 %t50, ptr %a46
br label %find.end5300
find.next5299:
%t58 = add i64 %t50, 1
store i64 %t58, ptr %a49
br label %find.cond5296
find.end5300:
%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 %then5301, label %endif5303
then5301:
%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.3499, 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.3500, i64 22, i64 0 }, ptr %a73
call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73)
%t74 = load { ptr, i64, i64 }, ptr %a71
%t75 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 1
%t76 = load { ptr, i64, i64 }, ptr %t75
store { ptr, i64, i64 } %t74, 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.3501, i64 10, i64 0 }, ptr %a83
call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83)
%t84 = load { ptr, i64, i64 }, ptr %a81
%t85 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 2
%t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.3502, i64 2, i64 0 }, ptr %a87
call void @finch_str_join(ptr %a88, ptr %t85, ptr %a87)
%t89 = load { ptr, i64, i64 }, ptr %a88
store { ptr, i64, i64 } %t84, 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.3503, i64 1, i64 0 }, ptr %a96
call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96)
%t97 = load { ptr, i64, i64 }, ptr %a94
call void @finch.gen.fail(ptr %t63, %S.ast.Node %t64, { ptr, i64, i64 } %t97)
br label %endif5303
endif5303:
%t98 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 3
%t99 = load i64, ptr %a60
%t100 = load { ptr, i64, i64 }, ptr %t98
%t101 = extractvalue { ptr, i64, i64 } %t100, 1
%t102 = icmp uge i64 %t99, %t101
br i1 %t102, label %range5304, label %inrange5305
range5304:
call void @finch_panic_index(ptr @.str.3504, i64 2706, i64 %t99, i64 %t101)
unreachable
inrange5305:
%t103 = extractvalue { ptr, i64, i64 } %t100, 0
%t104 = getelementptr inbounds i64, ptr %t103, i64 %t99
%t105 = load i64, ptr %t104
call void @finch_str_from_int(ptr %a106, i64 %t105)
%t107 = load { ptr, i64, i64 }, ptr %a106
%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
endif5291:
%t114 = load ptr, ptr %a1
%t115 = load ptr, ptr %a1
%t116 = load %S.ast.Node, ptr %a2
%t117 = load %S.ast.Type, ptr %a3
%t118 = call %S.gen.Val @finch.gen.exprWant(ptr %t115, %S.ast.Node %t116, %S.ast.Type %t117)
%t119 = load %S.ast.Type, ptr %a3
%t120 = load %S.ast.Node, ptr %a2
%t121 = call %S.gen.Val @finch.gen.coerce(ptr %t114, %S.gen.Val %t118, %S.ast.Type %t119, %S.ast.Node %t120, { ptr, i64, i64 } { ptr @.str.3505, i64 12, i64 0 })
ret %S.gen.Val %t121
}
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
%a43 = alloca { ptr, i64, i64 }, align 16
%a44 = alloca i1, align 16
%a45 = alloca i1, 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 %S.ast.Type, align 16
%a55 = alloca i64, align 16
%a57 = alloca i64, align 16
%a69 = alloca %S.ast.Node, align 16
%a70 = alloca %S.ast.Node, align 16
%a72 = alloca %S.ast.Node, align 16
%a78 = alloca { ptr, i64, i64 }, align 16
%a81 = 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
%a100 = alloca i64, align 16
%a113 = alloca %S.gen.Val, align 16
%a117 = alloca i64, align 16
%a120 = alloca i64, align 16
%a125 = alloca { ptr, i64, i64 }, align 16
%a126 = alloca { ptr, i64, i64 }, align 16
%a134 = alloca { ptr, i64, i64 }, align 16
%a135 = alloca { ptr, i64, i64 }, align 16
%a150 = alloca { ptr, i64, i64 }, align 16
%a151 = alloca { ptr, i64, i64 }, align 16
%a168 = alloca %S.gen.Val, align 16
%a181 = alloca { ptr, i64, i64 }, align 16
%a200 = alloca %S.ast.Node, align 16
%a201 = alloca %S.ast.Node, align 16
%a203 = alloca %S.ast.Node, align 16
%a208 = alloca %S.gen.Val, align 16
%a213 = alloca { ptr, i64, i64 }, align 16
%a214 = alloca { ptr, i64, i64 }, align 16
%a221 = alloca { ptr, i64, i64 }, align 16
%a222 = alloca { ptr, i64, i64 }, align 16
%a228 = alloca { ptr, i64, i64 }, align 16
%a229 = alloca { ptr, i64, i64 }, align 16
%a237 = alloca %S.ast.Type, align 16
%a238 = alloca %S.ast.Type, align 16
%a248 = alloca { ptr, i64, i64 }, align 16
%a251 = alloca { ptr, i64, i64 }, align 16
%a258 = alloca { ptr, i64, i64 }, align 16
%a259 = alloca { ptr, i64, i64 }, align 16
%a267 = alloca { ptr, i64, i64 }, align 16
%a268 = alloca { ptr, i64, i64 }, align 16
%a278 = alloca { ptr, i64, i64 }, align 16
%a279 = alloca { ptr, i64, i64 }, align 16
%a304 = alloca { ptr, i64, i64 }, align 16
%a305 = alloca { ptr, i64, i64 }, align 16
%a323 = alloca %S.gen.EnumDef, align 16
%a324 = alloca %S.gen.EnumDef, align 16
%a326 = alloca %S.gen.EnumDef, align 16
%a327 = alloca { ptr, i64, i64 }, align 16
%a331 = alloca i64, align 16
%a343 = alloca { ptr, i64, i64 }, align 16
%a345 = alloca i64, align 16
%a348 = alloca i64, align 16
%a353 = alloca { ptr, i64, i64 }, align 16
%a354 = alloca { ptr, i64, i64 }, align 16
%a370 = alloca { ptr, i64, i64 }, align 16
%a371 = 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
%a392 = alloca { ptr, i64, i64 }, align 16
%a393 = alloca { ptr, i64, i64 }, align 16
%a394 = 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
%a429 = alloca { ptr, i64, i64 }, align 16
%a430 = alloca { ptr, i64, i64 }, align 16
%a431 = 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
%a440 = alloca { ptr, i64, i64 }, align 16
%a441 = alloca { ptr, i64, i64 }, align 16
%a442 = alloca { ptr, i64, i64 }, align 16
%a447 = alloca %S.ast.Type, align 16
%a448 = 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 %range5306, label %inrange5307
range5306:
call void @finch_panic_index(ptr @.str.3506, i64 2714, i64 0, i64 %t7)
unreachable
inrange5307:
%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.3507, 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.from5308
logic.from5308:
br i1 %t25, label %logic.end5310, label %logic.rhs5309
logic.rhs5309:
%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.3508, 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.rend5311
logic.rend5311:
br label %logic.end5310
logic.end5310:
%t32 = phi i1 [ true, %logic.from5308 ], [ %t31, %logic.rend5311 ]
br i1 %t32, label %then5312, label %endif5314
then5312:
%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 %range5315, label %inrange5316
range5315:
call void @finch_panic_index(ptr @.str.3509, i64 2717, i64 0, i64 %t36)
unreachable
inrange5316:
%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.3510, i64 30, i64 0 })
br label %endif5314
endif5314:
%t41 = load ptr, ptr %a1
%t42 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t41, { ptr, i64, i64 } { ptr @.str.3511, i64 9, i64 0 })
store { ptr, i64, i64 } %t42, ptr %a43
store i1 false, ptr %a44
store i1 false, ptr %a45
store { ptr, i64, i64 } zeroinitializer, ptr %a46
store { ptr, i64, i64 } zeroinitializer, ptr %a47
store { ptr, i64, i64 } zeroinitializer, ptr %a48
%t49 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3512, i64 4, i64 0 })
store %S.ast.Type %t49, ptr %a50
%t51 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t51, i32 0, i32 1
%t53 = load i64, ptr %t52
%t54 = sub i64 %t53, 1
store i64 %t54, ptr %a55
%t56 = load i64, ptr %a55
store i64 0, ptr %a57
br label %for.cond5317
for.cond5317:
%t58 = load i64, ptr %a57
%t59 = icmp slt i64 %t58, %t56
br i1 %t59, label %for.body5318, label %for.end5320
for.body5318:
%t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t61 = load i64, ptr %a57
%t62 = add i64 1, %t61
%t63 = load { ptr, i64, i64 }, ptr %t60
%t64 = extractvalue { ptr, i64, i64 } %t63, 1
%t65 = icmp uge i64 %t62, %t64
br i1 %t65, label %range5321, label %inrange5322
range5321:
call void @finch_panic_index(ptr @.str.3513, i64 2728, i64 %t62, i64 %t64)
unreachable
inrange5322:
%t66 = extractvalue { ptr, i64, i64 } %t63, 0
%t67 = getelementptr inbounds %S.ast.Node, ptr %t66, i64 %t62
%t68 = load %S.ast.Node, ptr %t67
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
store %S.ast.Node %t71, ptr %a72
%t73 = load i1, ptr %a44
br i1 %t73, label %then5323, label %endif5325
then5323:
%t74 = load ptr, ptr %a1
%t75 = load %S.ast.Node, ptr %a72
call void @finch.gen.fail(ptr %t74, %S.ast.Node %t75, { ptr, i64, i64 } { ptr @.str.3514, i64 72, i64 0 })
br label %endif5325
endif5325:
%t76 = load ptr, ptr %a1
%t77 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t76, { ptr, i64, i64 } { ptr @.str.3515, i64 9, i64 0 })
store { ptr, i64, i64 } %t77, ptr %a78
%t79 = load ptr, ptr %a1
%t80 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t79, { ptr, i64, i64 } { ptr @.str.3516, i64 10, i64 0 })
store { ptr, i64, i64 } %t80, ptr %a81
%t82 = getelementptr inbounds %S.ast.Node, ptr %a72, i32 0, i32 6
%t83 = load i1, ptr %t82
br i1 %t83, label %then5326, label %else5327
then5326:
store i1 true, ptr %a44
%t84 = load ptr, ptr %a1
%t85 = load { ptr, i64, i64 }, ptr %a78
call void @finch.gen.br(ptr %t84, { ptr, i64, i64 } %t85)
br label %endif5328
else5327:
%t86 = getelementptr inbounds %S.ast.Node, ptr %a72, 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 %range5329, label %inrange5330
range5329:
call void @finch_panic_index(ptr @.str.3517, i64 2738, i64 0, i64 %t88)
unreachable
inrange5330:
%t90 = extractvalue { ptr, i64, i64 } %t87, 0
%t91 = getelementptr inbounds %S.ast.Node, ptr %t90, i64 0
%t92 = getelementptr inbounds %S.ast.Node, ptr %t91, i32 0, i32 9
%t93 = load { ptr, i64, i64 }, ptr %t92
store { ptr, i64, i64 } %t93, ptr %a94
call void @finch.copy.arr_S_ast_Node(ptr %a95, ptr %a94)
%t96 = load { ptr, i64, i64 }, ptr %a95
store { ptr, i64, i64 } %t96, ptr %a97
%t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %a97, i32 0, i32 1
%t99 = load i64, ptr %t98
store i64 0, ptr %a100
br label %for.cond5331
for.cond5331:
%t101 = load i64, ptr %a100
%t102 = icmp slt i64 %t101, %t99
br i1 %t102, label %for.body5332, label %for.end5334
for.body5332:
%t103 = load ptr, ptr %a1
%t104 = load i64, ptr %a100
%t105 = load { ptr, i64, i64 }, ptr %a97
%t106 = extractvalue { ptr, i64, i64 } %t105, 1
%t107 = icmp uge i64 %t104, %t106
br i1 %t107, label %range5335, label %inrange5336
range5335:
call void @finch_panic_index(ptr @.str.3518, i64 2740, i64 %t104, i64 %t106)
unreachable
inrange5336:
%t108 = extractvalue { ptr, i64, i64 } %t105, 0
%t109 = getelementptr inbounds %S.ast.Node, ptr %t108, i64 %t104
%t110 = load %S.ast.Node, ptr %t109
%t111 = load %S.ast.Type, ptr %a19
%t112 = call %S.gen.Val @finch.gen.patternValue(ptr %t103, %S.ast.Node %t110, %S.ast.Type %t111)
store %S.gen.Val %t112, ptr %a113
%t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %a46, i32 0, i32 1
%t115 = getelementptr inbounds %S.gen.Val, ptr %a113, i32 0, i32 0
%t116 = load { ptr, i64, i64 }, ptr %t115
store i64 -1, ptr %a117
%t118 = load i64, ptr %t114
%t119 = load ptr, ptr %a46
store i64 0, ptr %a120
br label %find.cond5337
find.cond5337:
%t121 = load i64, ptr %a120
%t122 = icmp slt i64 %t121, %t118
br i1 %t122, label %find.body5338, label %find.end5341
find.body5338:
%t123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i64 %t121
%t124 = load { ptr, i64, i64 }, ptr %t123
store { ptr, i64, i64 } %t124, ptr %a125
store { ptr, i64, i64 } %t116, ptr %a126
%t127 = call i32 @finch_str_eq(ptr %a125, ptr %a126)
%t128 = icmp ne i32 %t127, 0
br i1 %t128, label %find.hit5339, label %find.next5340
find.hit5339:
store i64 %t121, ptr %a117
br label %find.end5341
find.next5340:
%t129 = add i64 %t121, 1
store i64 %t129, ptr %a120
br label %find.cond5337
find.end5341:
%t130 = load i64, ptr %a117
%t131 = icmp sge i64 %t130, 0
br label %logic.from5342
logic.from5342:
br i1 %t131, label %logic.rhs5343, label %logic.end5344
logic.rhs5343:
%t132 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0
%t133 = load { ptr, i64, i64 }, ptr %t132
store { ptr, i64, i64 } %t133, ptr %a134
store { ptr, i64, i64 } { ptr @.str.3519, 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.rend5345
logic.rend5345:
br label %logic.end5344
logic.end5344:
%t138 = phi i1 [ false, %logic.from5342 ], [ %t137, %logic.rend5345 ]
br i1 %t138, label %then5346, label %endif5348
then5346:
%t139 = load ptr, ptr %a1
%t140 = load i64, ptr %a100
%t141 = load { ptr, i64, i64 }, ptr %a97
%t142 = extractvalue { ptr, i64, i64 } %t141, 1
%t143 = icmp uge i64 %t140, %t142
br i1 %t143, label %range5349, label %inrange5350
range5349:
call void @finch_panic_index(ptr @.str.3520, i64 2742, i64 %t140, i64 %t142)
unreachable
inrange5350:
%t144 = extractvalue { ptr, i64, i64 } %t141, 0
%t145 = getelementptr inbounds %S.ast.Node, ptr %t144, i64 %t140
%t146 = load %S.ast.Node, ptr %t145
call void @finch.gen.fail(ptr %t139, %S.ast.Node %t146, { ptr, i64, i64 } { ptr @.str.3521, i64 49, i64 0 })
br label %endif5348
endif5348:
%t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %a46, i32 0, i32 1
%t148 = getelementptr inbounds %S.gen.Val, ptr %a113, i32 0, i32 0
%t149 = load { ptr, i64, i64 }, ptr %t148
store { ptr, i64, i64 } %t149, ptr %a150
call void @finch_str_copy(ptr %a151, ptr %a150)
%t152 = load { ptr, i64, i64 }, ptr %a151
%t153 = load i64, ptr %t147
%t154 = add i64 %t153, 1
call void @finch_arr_reserve(ptr %a46, i64 %t154, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t155 = load ptr, ptr %a46
%t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %t155, i64 %t153
store { ptr, i64, i64 } %t152, ptr %t156
store i64 %t154, ptr %t147
%t157 = load ptr, ptr %a1
%t158 = load %S.gen.Val, ptr %a13
%t159 = load %S.gen.Val, ptr %a113
%t160 = load i64, ptr %a100
%t161 = load { ptr, i64, i64 }, ptr %a97
%t162 = extractvalue { ptr, i64, i64 } %t161, 1
%t163 = icmp uge i64 %t160, %t162
br i1 %t163, label %range5351, label %inrange5352
range5351:
call void @finch_panic_index(ptr @.str.3523, i64 2745, i64 %t160, i64 %t162)
unreachable
inrange5352:
%t164 = extractvalue { ptr, i64, i64 } %t161, 0
%t165 = getelementptr inbounds %S.ast.Node, ptr %t164, i64 %t160
%t166 = load %S.ast.Node, ptr %t165
%t167 = call %S.gen.Val @finch.gen.compare(ptr %t157, { ptr, i64, i64 } { ptr @.str.3522, i64 2, i64 0 }, %S.gen.Val %t158, %S.gen.Val %t159, %S.ast.Node %t166)
store %S.gen.Val %t167, ptr %a168
%t169 = load i64, ptr %a100
%t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %a97, i32 0, i32 1
%t171 = load i64, ptr %t170
%t172 = sub i64 %t171, 1
%t173 = icmp eq i64 %t169, %t172
br i1 %t173, label %then5353, label %else5354
then5353:
%t174 = load ptr, ptr %a1
%t175 = getelementptr inbounds %S.gen.Val, ptr %a168, i32 0, i32 0
%t176 = load { ptr, i64, i64 }, ptr %t175
%t177 = load { ptr, i64, i64 }, ptr %a78
%t178 = load { ptr, i64, i64 }, ptr %a81
call void @finch.gen.condBr(ptr %t174, { ptr, i64, i64 } %t176, { ptr, i64, i64 } %t177, { ptr, i64, i64 } %t178)
br label %endif5355
else5354:
%t179 = load ptr, ptr %a1
%t180 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t179, { ptr, i64, i64 } { ptr @.str.3524, i64 8, i64 0 })
store { ptr, i64, i64 } %t180, ptr %a181
%t182 = load ptr, ptr %a1
%t183 = getelementptr inbounds %S.gen.Val, ptr %a168, i32 0, i32 0
%t184 = load { ptr, i64, i64 }, ptr %t183
%t185 = load { ptr, i64, i64 }, ptr %a78
%t186 = load { ptr, i64, i64 }, ptr %a181
call void @finch.gen.condBr(ptr %t182, { ptr, i64, i64 } %t184, { ptr, i64, i64 } %t185, { ptr, i64, i64 } %t186)
%t187 = load ptr, ptr %a1
%t188 = load { ptr, i64, i64 }, ptr %a181
call void @finch.gen.label(ptr %t187, { ptr, i64, i64 } %t188)
br label %endif5355
endif5355:
br label %for.step5333
for.step5333:
%t189 = load i64, ptr %a100
%t190 = add i64 %t189, 1
store i64 %t190, ptr %a100
br label %for.cond5331
for.end5334:
br label %endif5328
endif5328:
%t191 = load ptr, ptr %a1
%t192 = load { ptr, i64, i64 }, ptr %a78
call void @finch.gen.label(ptr %t191, { ptr, i64, i64 } %t192)
%t193 = getelementptr inbounds %S.ast.Node, ptr %a72, i32 0, i32 9
%t194 = load { ptr, i64, i64 }, ptr %t193
%t195 = extractvalue { ptr, i64, i64 } %t194, 1
%t196 = icmp uge i64 1, %t195
br i1 %t196, label %range5356, label %inrange5357
range5356:
call void @finch_panic_index(ptr @.str.3525, i64 2756, i64 1, i64 %t195)
unreachable
inrange5357:
%t197 = extractvalue { ptr, i64, i64 } %t194, 0
%t198 = getelementptr inbounds %S.ast.Node, ptr %t197, i64 1
%t199 = load %S.ast.Node, ptr %t198
store %S.ast.Node %t199, ptr %a200
call void @finch.copy.S_ast_Node(ptr %a201, ptr %a200)
%t202 = load %S.ast.Node, ptr %a201
store %S.ast.Node %t202, ptr %a203
%t204 = load i1, ptr %a3
br i1 %t204, label %then5358, label %else5359
then5358:
%t205 = load ptr, ptr %a1
%t206 = load %S.ast.Node, ptr %a203
%t207 = call %S.gen.Val @finch.gen.expr(ptr %t205, %S.ast.Node %t206)
store %S.gen.Val %t207, ptr %a208
%t209 = load i64, ptr %a57
%t210 = icmp eq i64 %t209, 0
br label %logic.from5361
logic.from5361:
br i1 %t210, label %logic.end5363, label %logic.rhs5362
logic.rhs5362:
%t211 = getelementptr inbounds %S.ast.Type, ptr %a50, i32 0, i32 0
%t212 = load { ptr, i64, i64 }, ptr %t211
store { ptr, i64, i64 } %t212, ptr %a213
store { ptr, i64, i64 } { ptr @.str.3526, i64 4, i64 0 }, ptr %a214
%t215 = call i32 @finch_str_eq(ptr %a213, ptr %a214)
%t216 = icmp ne i32 %t215, 0
br label %logic.rend5364
logic.rend5364:
br label %logic.end5363
logic.end5363:
%t217 = phi i1 [ true, %logic.from5361 ], [ %t216, %logic.rend5364 ]
br i1 %t217, label %then5365, label %endif5367
then5365:
%t218 = getelementptr inbounds %S.gen.Val, ptr %a208, i32 0, i32 1
%t219 = getelementptr inbounds %S.ast.Type, ptr %t218, i32 0, i32 0
%t220 = load { ptr, i64, i64 }, ptr %t219
store { ptr, i64, i64 } %t220, ptr %a221
store { ptr, i64, i64 } { ptr @.str.3527, i64 4, i64 0 }, ptr %a222
%t223 = call i32 @finch_str_eq(ptr %a221, ptr %a222)
%t224 = icmp ne i32 %t223, 0
br label %logic.from5368
logic.from5368:
br i1 %t224, label %logic.end5370, label %logic.rhs5369
logic.rhs5369:
%t225 = getelementptr inbounds %S.gen.Val, ptr %a208, i32 0, i32 1
%t226 = getelementptr inbounds %S.ast.Type, ptr %t225, i32 0, i32 0
%t227 = load { ptr, i64, i64 }, ptr %t226
store { ptr, i64, i64 } %t227, ptr %a228
store { ptr, i64, i64 } { ptr @.str.3528, i64 4, i64 0 }, ptr %a229
%t230 = call i32 @finch_str_eq(ptr %a228, ptr %a229)
%t231 = icmp ne i32 %t230, 0
br label %logic.rend5371
logic.rend5371:
br label %logic.end5370
logic.end5370:
%t232 = phi i1 [ true, %logic.from5368 ], [ %t231, %logic.rend5371 ]
br i1 %t232, label %then5372, label %endif5374
then5372:
%t233 = load ptr, ptr %a1
%t234 = load %S.ast.Node, ptr %a203
call void @finch.gen.fail(ptr %t233, %S.ast.Node %t234, { ptr, i64, i64 } { ptr @.str.3529, i64 52, i64 0 })
br label %endif5374
endif5374:
%t235 = getelementptr inbounds %S.gen.Val, ptr %a208, i32 0, i32 1
%t236 = load %S.ast.Type, ptr %t235
store %S.ast.Type %t236, ptr %a237
call void @finch.copy.S_ast_Type(ptr %a238, ptr %a237)
%t239 = load %S.ast.Type, ptr %a238
store %S.ast.Type %t239, ptr %a50
br label %endif5367
endif5367:
%t240 = load ptr, ptr %a1
%t241 = load %S.gen.Val, ptr %a208
%t242 = load %S.ast.Type, ptr %a50
%t243 = load %S.ast.Node, ptr %a203
%t244 = call %S.gen.Val @finch.gen.coerce(ptr %t240, %S.gen.Val %t241, %S.ast.Type %t242, %S.ast.Node %t243, { ptr, i64, i64 } { ptr @.str.3530, i64 57, i64 0 })
store %S.gen.Val %t244, ptr %a208
%t245 = load ptr, ptr %a1
%t246 = load %S.gen.Val, ptr %a208
%t247 = call { ptr, i64, i64 } @finch.gen.own(ptr %t245, %S.gen.Val %t246)
store { ptr, i64, i64 } %t247, ptr %a248
%t249 = load ptr, ptr %a1
%t250 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t249, { ptr, i64, i64 } { ptr @.str.3531, i64 10, i64 0 })
store { ptr, i64, i64 } %t250, ptr %a251
%t252 = load ptr, ptr %a1
%t253 = load { ptr, i64, i64 }, ptr %a251
call void @finch.gen.br(ptr %t252, { ptr, i64, i64 } %t253)
%t254 = load ptr, ptr %a1
%t255 = load { ptr, i64, i64 }, ptr %a251
call void @finch.gen.label(ptr %t254, { ptr, i64, i64 } %t255)
%t256 = getelementptr inbounds { ptr, i64, i64 }, ptr %a47, i32 0, i32 1
%t257 = load { ptr, i64, i64 }, ptr %a248
store { ptr, i64, i64 } %t257, ptr %a258
call void @finch_str_copy(ptr %a259, ptr %a258)
%t260 = load { ptr, i64, i64 }, ptr %a259
%t261 = load i64, ptr %t256
%t262 = add i64 %t261, 1
call void @finch_arr_reserve(ptr %a47, i64 %t262, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t263 = load ptr, ptr %a47
%t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i64 %t261
store { ptr, i64, i64 } %t260, ptr %t264
store i64 %t262, ptr %t256
%t265 = getelementptr inbounds { ptr, i64, i64 }, ptr %a48, i32 0, i32 1
%t266 = load { ptr, i64, i64 }, ptr %a251
store { ptr, i64, i64 } %t266, ptr %a267
call void @finch_str_copy(ptr %a268, ptr %a267)
%t269 = load { ptr, i64, i64 }, ptr %a268
%t270 = load i64, ptr %t265
%t271 = add i64 %t270, 1
call void @finch_arr_reserve(ptr %a48, i64 %t271, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t272 = load ptr, ptr %a48
%t273 = getelementptr inbounds { ptr, i64, i64 }, ptr %t272, i64 %t270
store { ptr, i64, i64 } %t269, ptr %t273
store i64 %t271, ptr %t265
%t274 = load ptr, ptr %a1
%t275 = load { ptr, i64, i64 }, ptr %a43
call void @finch.gen.br(ptr %t274, { ptr, i64, i64 } %t275)
store i1 true, ptr %a45
br label %endif5360
else5359:
%t276 = getelementptr inbounds %S.ast.Node, ptr %a203, i32 0, i32 0
%t277 = load { ptr, i64, i64 }, ptr %t276
store { ptr, i64, i64 } %t277, ptr %a278
store { ptr, i64, i64 } { ptr @.str.3532, i64 5, i64 0 }, ptr %a279
%t280 = call i32 @finch_str_eq(ptr %a278, ptr %a279)
%t281 = icmp ne i32 %t280, 0
br i1 %t281, label %then5375, label %else5376
then5375:
%t282 = load ptr, ptr %a1
%t283 = load %S.ast.Node, ptr %a203
call void @finch.gen.block(ptr %t282, %S.ast.Node %t283, i1 true)
br label %endif5377
else5376:
%t284 = load ptr, ptr %a1
%t285 = load %S.ast.Node, ptr %a203
call void @finch.gen.stmt(ptr %t284, %S.ast.Node %t285)
br label %endif5377
endif5377:
%t286 = load ptr, ptr %a1
%t287 = icmp eq ptr %t286, null
br i1 %t287, label %panic5378, label %ok5379
panic5378:
call void @finch_panic(ptr @.str.3533, i64 2780, ptr @.str.3534)
unreachable
ok5379:
%t288 = getelementptr inbounds %S.gen.Gen, ptr %t286, i32 0, i32 9
%t289 = load i1, ptr %t288
%t290 = xor i1 %t289, true
br i1 %t290, label %then5380, label %endif5382
then5380:
store i1 true, ptr %a45
br label %endif5382
endif5382:
%t291 = load ptr, ptr %a1
%t292 = load { ptr, i64, i64 }, ptr %a43
call void @finch.gen.br(ptr %t291, { ptr, i64, i64 } %t292)
br label %endif5360
endif5360:
%t293 = getelementptr inbounds %S.ast.Node, ptr %a72, i32 0, i32 6
%t294 = load i1, ptr %t293
%t295 = xor i1 %t294, true
br i1 %t295, label %then5383, label %endif5385
then5383:
%t296 = load ptr, ptr %a1
%t297 = load { ptr, i64, i64 }, ptr %a81
call void @finch.gen.label(ptr %t296, { ptr, i64, i64 } %t297)
br label %endif5385
endif5385:
br label %for.step5319
for.step5319:
%t298 = load i64, ptr %a57
%t299 = add i64 %t298, 1
store i64 %t299, ptr %a57
br label %for.cond5317
for.end5320:
%t300 = load i1, ptr %a44
%t301 = xor i1 %t300, true
br i1 %t301, label %then5386, label %endif5388
then5386:
%t302 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0
%t303 = load { ptr, i64, i64 }, ptr %t302
store { ptr, i64, i64 } %t303, ptr %a304
store { ptr, i64, i64 } { ptr @.str.3535, i64 4, i64 0 }, ptr %a305
%t306 = call i32 @finch_str_eq(ptr %a304, ptr %a305)
%t307 = icmp ne i32 %t306, 0
br i1 %t307, label %then5389, label %else5390
then5389:
%t308 = load ptr, ptr %a1
%t309 = icmp eq ptr %t308, null
br i1 %t309, label %panic5392, label %ok5393
panic5392:
call void @finch_panic(ptr @.str.3536, i64 2791, ptr @.str.3537)
unreachable
ok5393:
%t310 = getelementptr inbounds %S.gen.Gen, ptr %t308, i32 0, i32 20
%t311 = load ptr, ptr %a1
%t312 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3
%t313 = load { ptr, i64, i64 }, ptr %t312
%t314 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2
%t315 = load { ptr, i64, i64 }, ptr %t314
%t316 = call i64 @finch.gen.findEnum(ptr %t311, { ptr, i64, i64 } %t313, { ptr, i64, i64 } %t315)
%t317 = load { ptr, i64, i64 }, ptr %t310
%t318 = extractvalue { ptr, i64, i64 } %t317, 1
%t319 = icmp uge i64 %t316, %t318
br i1 %t319, label %range5394, label %inrange5395
range5394:
call void @finch_panic_index(ptr @.str.3538, i64 2791, i64 %t316, i64 %t318)
unreachable
inrange5395:
%t320 = extractvalue { ptr, i64, i64 } %t317, 0
%t321 = getelementptr inbounds %S.gen.EnumDef, ptr %t320, i64 %t316
%t322 = load %S.gen.EnumDef, ptr %t321
store %S.gen.EnumDef %t322, ptr %a323
call void @finch.copy.S_gen_EnumDef(ptr %a324, ptr %a323)
%t325 = load %S.gen.EnumDef, ptr %a324
store %S.gen.EnumDef %t325, ptr %a326
store { ptr, i64, i64 } zeroinitializer, ptr %a327
%t328 = getelementptr inbounds %S.gen.EnumDef, ptr %a326, i32 0, i32 2
%t329 = getelementptr inbounds { ptr, i64, i64 }, ptr %t328, i32 0, i32 1
%t330 = load i64, ptr %t329
store i64 0, ptr %a331
br label %for.cond5396
for.cond5396:
%t332 = load i64, ptr %a331
%t333 = icmp slt i64 %t332, %t330
br i1 %t333, label %for.body5397, label %for.end5399
for.body5397:
%t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %a46, i32 0, i32 1
%t335 = getelementptr inbounds %S.gen.EnumDef, ptr %a326, i32 0, i32 3
%t336 = load i64, ptr %a331
%t337 = load { ptr, i64, i64 }, ptr %t335
%t338 = extractvalue { ptr, i64, i64 } %t337, 1
%t339 = icmp uge i64 %t336, %t338
br i1 %t339, label %range5400, label %inrange5401
range5400:
call void @finch_panic_index(ptr @.str.3539, i64 2794, i64 %t336, i64 %t338)
unreachable
inrange5401:
%t340 = extractvalue { ptr, i64, i64 } %t337, 0
%t341 = getelementptr inbounds i64, ptr %t340, i64 %t336
%t342 = load i64, ptr %t341
call void @finch_str_from_int(ptr %a343, i64 %t342)
%t344 = load { ptr, i64, i64 }, ptr %a343
store i64 -1, ptr %a345
%t346 = load i64, ptr %t334
%t347 = load ptr, ptr %a46
store i64 0, ptr %a348
br label %find.cond5402
find.cond5402:
%t349 = load i64, ptr %a348
%t350 = icmp slt i64 %t349, %t346
br i1 %t350, label %find.body5403, label %find.end5406
find.body5403:
%t351 = getelementptr inbounds { ptr, i64, i64 }, ptr %t347, i64 %t349
%t352 = load { ptr, i64, i64 }, ptr %t351
store { ptr, i64, i64 } %t352, ptr %a353
store { ptr, i64, i64 } %t344, ptr %a354
%t355 = call i32 @finch_str_eq(ptr %a353, ptr %a354)
%t356 = icmp ne i32 %t355, 0
br i1 %t356, label %find.hit5404, label %find.next5405
find.hit5404:
store i64 %t349, ptr %a345
br label %find.end5406
find.next5405:
%t357 = add i64 %t349, 1
store i64 %t357, ptr %a348
br label %find.cond5402
find.end5406:
%t358 = load i64, ptr %a345
%t359 = icmp sge i64 %t358, 0
%t360 = xor i1 %t359, true
br i1 %t360, label %then5407, label %endif5409
then5407:
%t361 = getelementptr inbounds { ptr, i64, i64 }, ptr %a327, i32 0, i32 1
%t362 = getelementptr inbounds %S.gen.EnumDef, ptr %a326, i32 0, i32 2
%t363 = load i64, ptr %a331
%t364 = load { ptr, i64, i64 }, ptr %t362
%t365 = extractvalue { ptr, i64, i64 } %t364, 1
%t366 = icmp uge i64 %t363, %t365
br i1 %t366, label %range5410, label %inrange5411
range5410:
call void @finch_panic_index(ptr @.str.3540, i64 2795, i64 %t363, i64 %t365)
unreachable
inrange5411:
%t367 = extractvalue { ptr, i64, i64 } %t364, 0
%t368 = getelementptr inbounds { ptr, i64, i64 }, ptr %t367, i64 %t363
%t369 = load { ptr, i64, i64 }, ptr %t368
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 %t361
%t374 = add i64 %t373, 1
call void @finch_arr_reserve(ptr %a327, i64 %t374, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t375 = load ptr, ptr %a327
%t376 = getelementptr inbounds { ptr, i64, i64 }, ptr %t375, i64 %t373
store { ptr, i64, i64 } %t372, ptr %t376
store i64 %t374, ptr %t361
br label %endif5409
endif5409:
br label %for.step5398
for.step5398:
%t377 = load i64, ptr %a331
%t378 = add i64 %t377, 1
store i64 %t378, ptr %a331
br label %for.cond5396
for.end5399:
%t379 = getelementptr inbounds { ptr, i64, i64 }, ptr %a327, i32 0, i32 1
%t380 = load i64, ptr %t379
%t381 = icmp sgt i64 %t380, 0
br i1 %t381, label %then5412, label %endif5414
then5412:
%t382 = load ptr, ptr %a1
%t383 = load %S.ast.Node, ptr %a2
%t384 = getelementptr inbounds { ptr, i64, i64 }, ptr %a327, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.3542, i64 2, i64 0 }, ptr %a385
call void @finch_str_join(ptr %a386, ptr %a327, ptr %a385)
%t387 = load { ptr, i64, i64 }, ptr %a386
store { ptr, i64, i64 } { ptr @.str.3541, i64 26, i64 0 }, ptr %a389
store { ptr, i64, i64 } %t387, ptr %a390
call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390)
%t391 = load { ptr, i64, i64 }, ptr %a388
store { ptr, i64, i64 } %t391, ptr %a393
store { ptr, i64, i64 } { ptr @.str.3543, i64 29, i64 0 }, ptr %a394
call void @finch_str_concat(ptr %a392, ptr %a393, ptr %a394)
%t395 = load { ptr, i64, i64 }, ptr %a392
call void @finch.gen.fail(ptr %t382, %S.ast.Node %t383, { ptr, i64, i64 } %t395)
br label %endif5414
endif5414:
br label %endif5391
else5390:
%t396 = load ptr, ptr %a1
%t397 = load %S.ast.Node, ptr %a2
%t398 = load %S.ast.Type, ptr %a19
%t399 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t398)
store { ptr, i64, i64 } { ptr @.str.3544, i64 11, i64 0 }, ptr %a401
store { ptr, i64, i64 } %t399, ptr %a402
call void @finch_str_concat(ptr %a400, ptr %a401, ptr %a402)
%t403 = load { ptr, i64, i64 }, ptr %a400
store { ptr, i64, i64 } %t403, ptr %a405
store { ptr, i64, i64 } { ptr @.str.3545, i64 54, i64 0 }, ptr %a406
call void @finch_str_concat(ptr %a404, ptr %a405, ptr %a406)
%t407 = load { ptr, i64, i64 }, ptr %a404
call void @finch.gen.fail(ptr %t396, %S.ast.Node %t397, { ptr, i64, i64 } %t407)
br label %endif5391
endif5391:
%t408 = load ptr, ptr %a1
%t409 = load %S.ast.Node, ptr %a2
call void @finch.gen.panicIf(ptr %t408, { ptr, i64, i64 } { ptr @.str.3546, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.3547, i64 35, i64 0 }, %S.ast.Node %t409)
%t410 = load ptr, ptr %a1
call void @finch.gen.emit(ptr %t410, { ptr, i64, i64 } { ptr @.str.3548, i64 11, i64 0 })
%t411 = load ptr, ptr %a1
%t412 = icmp eq ptr %t411, null
br i1 %t412, label %panic5415, label %ok5416
panic5415:
call void @finch_panic(ptr @.str.3549, i64 2807, ptr @.str.3550)
unreachable
ok5416:
%t413 = getelementptr inbounds %S.gen.Gen, ptr %t411, i32 0, i32 9
store i1 true, ptr %t413
br label %endif5388
endif5388:
%t414 = load ptr, ptr %a1
%t415 = load { ptr, i64, i64 }, ptr %a43
call void @finch.gen.label(ptr %t414, { ptr, i64, i64 } %t415)
%t416 = load i1, ptr %a45
%t417 = xor i1 %t416, true
br i1 %t417, label %then5417, label %endif5419
then5417:
%t418 = load ptr, ptr %a1
call void @finch.gen.emit(ptr %t418, { ptr, i64, i64 } { ptr @.str.3551, i64 11, i64 0 })
%t419 = load ptr, ptr %a1
%t420 = icmp eq ptr %t419, null
br i1 %t420, label %panic5420, label %ok5421
panic5420:
call void @finch_panic(ptr @.str.3552, i64 2812, ptr @.str.3553)
unreachable
ok5421:
%t421 = getelementptr inbounds %S.gen.Gen, ptr %t419, i32 0, i32 9
store i1 true, ptr %t421
%t422 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3554, i64 4, i64 0 })
%t423 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t422, 1
ret %S.gen.Val %t423
endif5419:
%t424 = load i1, ptr %a3
br i1 %t424, label %then5422, label %endif5424
then5422:
%t425 = load ptr, ptr %a1
%t426 = load ptr, ptr %a1
%t427 = load %S.ast.Type, ptr %a50
%t428 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t426, %S.ast.Type %t427)
store { ptr, i64, i64 } { ptr @.str.3555, i64 4, i64 0 }, ptr %a430
store { ptr, i64, i64 } %t428, ptr %a431
call void @finch_str_concat(ptr %a429, ptr %a430, ptr %a431)
%t432 = load { ptr, i64, i64 }, ptr %a429
store { ptr, i64, i64 } %t432, ptr %a434
store { ptr, i64, i64 } { ptr @.str.3556, i64 1, i64 0 }, ptr %a435
call void @finch_str_concat(ptr %a433, ptr %a434, ptr %a435)
%t436 = load { ptr, i64, i64 }, ptr %a433
%t437 = load { ptr, i64, i64 }, ptr %a47
%t438 = load { ptr, i64, i64 }, ptr %a48
%t439 = call { ptr, i64, i64 } @finch.gen.phiList({ ptr, i64, i64 } %t437, { ptr, i64, i64 } %t438)
store { ptr, i64, i64 } %t436, 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
%t444 = call { ptr, i64, i64 } @finch.gen.op(ptr %t425, { ptr, i64, i64 } %t443)
%t445 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t444, 0
%t446 = load %S.ast.Type, ptr %a50
store %S.ast.Type %t446, ptr %a447
call void @finch.copy.S_ast_Type(ptr %a448, ptr %a447)
%t449 = load %S.ast.Type, ptr %a448
%t450 = insertvalue %S.gen.Val %t445, %S.ast.Type %t449, 1
%t451 = load ptr, ptr %a1
%t452 = load %S.ast.Type, ptr %a50
%t453 = call i1 @finch.gen.owning(ptr %t451, %S.ast.Type %t452)
%t454 = insertvalue %S.gen.Val %t450, i1 %t453, 2
ret %S.gen.Val %t454
endif5424:
%t455 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3557, i64 4, i64 0 })
%t456 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t455, 1
ret %S.gen.Val %t456
}
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
%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
%a47 = alloca { ptr, i64, i64 }, align 16
%a48 = 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.cond5425
for.cond5425:
%t7 = load i64, ptr %a6
%t8 = icmp slt i64 %t7, %t5
br i1 %t8, label %for.body5426, label %for.end5428
for.body5426:
%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 %range5429, label %inrange5430
range5429:
call void @finch_panic_index(ptr @.str.3559, i64 2824, i64 %t10, i64 %t12)
unreachable
inrange5430:
%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.3558, 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.3560, i64 3, i64 0 }, ptr %a23
call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23)
%t24 = load { ptr, i64, i64 }, ptr %a21
%t25 = load i64, ptr %a6
%t26 = load { ptr, i64, i64 }, ptr %a2
%t27 = extractvalue { ptr, i64, i64 } %t26, 1
%t28 = icmp uge i64 %t25, %t27
br i1 %t28, label %range5431, label %inrange5432
range5431:
call void @finch_panic_index(ptr @.str.3561, i64 2824, i64 %t25, i64 %t27)
unreachable
inrange5432:
%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 } %t24, ptr %a33
store { ptr, i64, i64 } %t31, ptr %a34
call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34)
%t35 = load { ptr, i64, i64 }, ptr %a32
store { ptr, i64, i64 } %t35, ptr %a37
store { ptr, i64, i64 } { ptr @.str.3562, i64 2, i64 0 }, ptr %a38
call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38)
%t39 = load { ptr, i64, i64 }, ptr %a36
%t40 = load i64, ptr %t9
%t41 = add i64 %t40, 1
call void @finch_arr_reserve(ptr %a3, i64 %t41, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t42 = load ptr, ptr %a3
%t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i64 %t40
store { ptr, i64, i64 } %t39, ptr %t43
store i64 %t41, ptr %t9
br label %for.step5427
for.step5427:
%t44 = load i64, ptr %a6
%t45 = add i64 %t44, 1
store i64 %t45, ptr %a6
br label %for.cond5425
for.end5428:
%t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.3563, i64 2, i64 0 }, ptr %a47
call void @finch_str_join(ptr %a48, ptr %a3, ptr %a47)
%t49 = load { ptr, i64, i64 }, ptr %a48
ret { ptr, i64, i64 } %t49
}
define internal void @finch.copy.S_gen_Fallible(ptr %dst, ptr %src) {
entry:
%t1 = load %S.gen.Fallible, ptr %src
store %S.gen.Fallible %t1, ptr %dst
%t2 = getelementptr inbounds %S.gen.Fallible, ptr %dst, i32 0, i32 0
%t3 = getelementptr inbounds %S.gen.Fallible, ptr %src, i32 0, i32 0
call void @finch.copy.S_gen_Val(ptr %t2, ptr %t3)
%t4 = getelementptr inbounds %S.gen.Fallible, ptr %dst, i32 0, i32 1
%t5 = getelementptr inbounds %S.gen.Fallible, ptr %src, i32 0, i32 1
call void @finch_str_copy(ptr %t4, ptr %t5)
%t6 = getelementptr inbounds %S.gen.Fallible, ptr %dst, i32 0, i32 2
%t7 = getelementptr inbounds %S.gen.Fallible, ptr %src, i32 0, i32 2
call void @finch_str_copy(ptr %t6, ptr %t7)
ret void
}
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
%a56 = alloca %S.gen.Val, align 16
%a58 = alloca %S.gen.Val, align 16
%a59 = alloca %S.gen.Val, align 16
%a66 = 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
%a78 = alloca %S.gen.Fallible, align 16
%a83 = alloca { ptr, i64, i64 }, align 16
%a84 = alloca { ptr, i64, i64 }, align 16
%a90 = alloca { ptr, i64, i64 }, align 16
%a91 = alloca { ptr, i64, i64 }, align 16
%a97 = alloca { ptr, i64, i64 }, align 16
%a98 = alloca { ptr, i64, i64 }, align 16
%a107 = alloca %S.gen.Fallible, align 16
%a108 = alloca %S.gen.Fallible, 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.3564, 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.from5433
logic.from5433:
br i1 %t8, label %logic.rhs5434, label %logic.end5435
logic.rhs5434:
%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.3565, 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.rend5436
logic.rend5436:
br label %logic.end5435
logic.end5435:
%t15 = phi i1 [ false, %logic.from5433 ], [ %t14, %logic.rend5436 ]
br i1 %t15, label %then5437, label %endif5439
then5437:
%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.3566, i64 80, i64 0 })
br label %endif5439
endif5439:
%t18 = load ptr, ptr %a1
%t19 = icmp eq ptr %t18, null
br i1 %t19, label %panic5440, label %ok5441
panic5440:
call void @finch_panic(ptr @.str.3567, i64 2842, ptr @.str.3568)
unreachable
ok5441:
%t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 39
%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 %panic5442, label %ok5443
panic5442:
call void @finch_panic(ptr @.str.3569, i64 2843, ptr @.str.3570)
unreachable
ok5443:
%t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 40
%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 %panic5444, label %ok5445
panic5444:
call void @finch_panic(ptr @.str.3571, i64 2844, ptr @.str.3572)
unreachable
ok5445:
%t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 41
%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 %panic5446, label %ok5447
panic5446:
call void @finch_panic(ptr @.str.3573, i64 2845, ptr @.str.3574)
unreachable
ok5447:
%t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 39
store { ptr, i64, i64 } %t43, ptr %t46
%t47 = load ptr, ptr %a1
%t48 = icmp eq ptr %t47, null
br i1 %t48, label %panic5448, label %ok5449
panic5448:
call void @finch_panic(ptr @.str.3576, i64 2846, ptr @.str.3577)
unreachable
ok5449:
%t49 = getelementptr inbounds %S.gen.Gen, ptr %t47, i32 0, i32 40
store { ptr, i64, i64 } { ptr @.str.3575, i64 0, i64 0 }, ptr %t49
%t50 = load ptr, ptr %a1
%t51 = icmp eq ptr %t50, null
br i1 %t51, label %panic5450, label %ok5451
panic5450:
call void @finch_panic(ptr @.str.3579, i64 2847, ptr @.str.3580)
unreachable
ok5451:
%t52 = getelementptr inbounds %S.gen.Gen, ptr %t50, i32 0, i32 41
store { ptr, i64, i64 } { ptr @.str.3578, i64 0, i64 0 }, ptr %t52
%t53 = load ptr, ptr %a1
%t54 = load %S.ast.Node, ptr %a2
%t55 = call %S.gen.Val @finch.gen.expr(ptr %t53, %S.ast.Node %t54)
store %S.gen.Val %t55, ptr %a56
%t57 = load %S.gen.Val, ptr %a56
store %S.gen.Val %t57, ptr %a58
call void @finch.copy.S_gen_Val(ptr %a59, ptr %a58)
%t60 = load %S.gen.Val, ptr %a59
%t61 = insertvalue %S.gen.Fallible zeroinitializer, %S.gen.Val %t60, 0
%t62 = load ptr, ptr %a1
%t63 = icmp eq ptr %t62, null
br i1 %t63, label %panic5452, label %ok5453
panic5452:
call void @finch_panic(ptr @.str.3581, i64 2849, ptr @.str.3582)
unreachable
ok5453:
%t64 = getelementptr inbounds %S.gen.Gen, ptr %t62, i32 0, i32 40
%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
%t69 = insertvalue %S.gen.Fallible %t61, { ptr, i64, i64 } %t68, 1
%t70 = load ptr, ptr %a1
%t71 = icmp eq ptr %t70, null
br i1 %t71, label %panic5454, label %ok5455
panic5454:
call void @finch_panic(ptr @.str.3583, i64 2849, ptr @.str.3584)
unreachable
ok5455:
%t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 41
%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
%t77 = insertvalue %S.gen.Fallible %t69, { ptr, i64, i64 } %t76, 2
store %S.gen.Fallible %t77, ptr %a78
%t79 = load { ptr, i64, i64 }, ptr %a25
%t80 = load ptr, ptr %a1
%t81 = icmp eq ptr %t80, null
br i1 %t81, label %panic5456, label %ok5457
panic5456:
call void @finch_panic(ptr @.str.3585, i64 2850, ptr @.str.3586)
unreachable
ok5457:
%t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 39
store { ptr, i64, i64 } %t79, ptr %a83
call void @finch_str_copy(ptr %a84, ptr %a83)
%t85 = load { ptr, i64, i64 }, ptr %a84
store { ptr, i64, i64 } %t85, ptr %t82
%t86 = load { ptr, i64, i64 }, ptr %a33
%t87 = load ptr, ptr %a1
%t88 = icmp eq ptr %t87, null
br i1 %t88, label %panic5458, label %ok5459
panic5458:
call void @finch_panic(ptr @.str.3587, i64 2851, ptr @.str.3588)
unreachable
ok5459:
%t89 = getelementptr inbounds %S.gen.Gen, ptr %t87, i32 0, i32 40
store { ptr, i64, i64 } %t86, ptr %a90
call void @finch_str_copy(ptr %a91, ptr %a90)
%t92 = load { ptr, i64, i64 }, ptr %a91
store { ptr, i64, i64 } %t92, ptr %t89
%t93 = load { ptr, i64, i64 }, ptr %a41
%t94 = load ptr, ptr %a1
%t95 = icmp eq ptr %t94, null
br i1 %t95, label %panic5460, label %ok5461
panic5460:
call void @finch_panic(ptr @.str.3589, i64 2852, ptr @.str.3590)
unreachable
ok5461:
%t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 41
store { ptr, i64, i64 } %t93, ptr %a97
call void @finch_str_copy(ptr %a98, ptr %a97)
%t99 = load { ptr, i64, i64 }, ptr %a98
store { ptr, i64, i64 } %t99, ptr %t96
%t100 = getelementptr inbounds %S.gen.Fallible, ptr %a78, i32 0, i32 1
%t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t100, i32 0, i32 1
%t102 = load i64, ptr %t101
%t103 = icmp eq i64 %t102, 0
br i1 %t103, label %then5462, label %endif5464
then5462:
%t104 = load ptr, ptr %a1
%t105 = load %S.ast.Node, ptr %a2
call void @finch.gen.fail(ptr %t104, %S.ast.Node %t105, { ptr, i64, i64 } { ptr @.str.3591, i64 50, i64 0 })
br label %endif5464
endif5464:
%t106 = load %S.gen.Fallible, ptr %a78
store %S.gen.Fallible %t106, ptr %a107
call void @finch.copy.S_gen_Fallible(ptr %a108, ptr %a107)
%t109 = load %S.gen.Fallible, ptr %a108
ret %S.gen.Fallible %t109
}
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
%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
%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
%a70 = alloca %S.gen.Fallible, align 16
%a73 = alloca { ptr, i64, i64 }, align 16
%a76 = 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
%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
%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
%a126 = alloca { ptr, i64, i64 }, align 16
%a127 = alloca { ptr, i64, i64 }, align 16
%a128 = alloca { ptr, i64, i64 }, align 16
%a137 = alloca %S.gen.Val, align 16
%a138 = 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 %panic5465, label %ok5466
panic5465:
call void @finch_panic(ptr @.str.3592, i64 2861, ptr @.str.3593)
unreachable
ok5466:
%t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 44
%t6 = load i64, ptr %t5
%t7 = icmp sgt i64 %t6, 0
br i1 %t7, label %then5467, label %endif5469
then5467:
%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.3594, i64 30, i64 0 })
br label %endif5469
endif5469:
%t10 = load ptr, ptr %a1
%t11 = icmp eq ptr %t10, null
br i1 %t11, label %panic5470, label %ok5471
panic5470:
call void @finch_panic(ptr @.str.3595, i64 2864, ptr @.str.3596)
unreachable
ok5471:
%t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 12
%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 %then5472, label %endif5474
then5472:
store { ptr, i64, i64 } { ptr @.str.3597, i64 1, i64 0 }, ptr %a16
%t17 = load ptr, ptr %a1
%t18 = icmp eq ptr %t17, null
br i1 %t18, label %panic5475, label %ok5476
panic5475:
call void @finch_panic(ptr @.str.3598, i64 2866, ptr @.str.3599)
unreachable
ok5476:
%t19 = getelementptr inbounds %S.gen.Gen, ptr %t17, i32 0, i32 12
%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.3600, 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 %then5477, label %endif5479
then5477:
%t27 = load ptr, ptr %a1
%t28 = icmp eq ptr %t27, null
br i1 %t28, label %panic5480, label %ok5481
panic5480:
call void @finch_panic(ptr @.str.3601, i64 2867, ptr @.str.3602)
unreachable
ok5481:
%t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 12
%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.3603, i64 1, i64 0 }, ptr %a35
call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35)
%t36 = load { ptr, i64, i64 }, ptr %a33
store { ptr, i64, i64 } %t36, ptr %a16
br label %endif5479
endif5479:
%t37 = load ptr, ptr %a1
%t38 = load %S.ast.Node, ptr %a2
%t39 = load ptr, ptr %a1
%t40 = icmp eq ptr %t39, null
br i1 %t40, label %panic5482, label %ok5483
panic5482:
call void @finch_panic(ptr @.str.3605, i64 2869, ptr @.str.3606)
unreachable
ok5483:
%t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 12
%t42 = getelementptr inbounds %S.gen.FnSig, ptr %t41, i32 0, i32 1
%t43 = load { ptr, i64, i64 }, ptr %t42
store { ptr, i64, i64 } { ptr @.str.3604, i64 29, 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.3607, i64 31, 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, i64, i64 }, ptr %a16
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)
%t56 = load { ptr, i64, i64 }, ptr %a53
store { ptr, i64, i64 } %t56, ptr %a58
store { ptr, i64, i64 } { ptr @.str.3608, i64 55, i64 0 }, ptr %a59
call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59)
%t60 = load { ptr, i64, i64 }, ptr %a57
call void @finch.gen.fail(ptr %t37, %S.ast.Node %t38, { ptr, i64, i64 } %t60)
br label %endif5474
endif5474:
%t61 = load ptr, ptr %a1
%t62 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t63 = load { ptr, i64, i64 }, ptr %t62
%t64 = extractvalue { ptr, i64, i64 } %t63, 1
%t65 = icmp uge i64 0, %t64
br i1 %t65, label %range5484, label %inrange5485
range5484:
call void @finch_panic_index(ptr @.str.3609, i64 2871, i64 0, i64 %t64)
unreachable
inrange5485:
%t66 = extractvalue { ptr, i64, i64 } %t63, 0
%t67 = getelementptr inbounds %S.ast.Node, ptr %t66, i64 0
%t68 = load %S.ast.Node, ptr %t67
%t69 = call %S.gen.Fallible @finch.gen.fallibleCall(ptr %t61, %S.ast.Node %t68)
store %S.gen.Fallible %t69, ptr %a70
%t71 = load ptr, ptr %a1
%t72 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t71, { ptr, i64, i64 } { ptr @.str.3610, i64 10, i64 0 })
store { ptr, i64, i64 } %t72, ptr %a73
%t74 = load ptr, ptr %a1
%t75 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t74, { ptr, i64, i64 } { ptr @.str.3611, i64 6, i64 0 })
store { ptr, i64, i64 } %t75, ptr %a76
%t77 = load ptr, ptr %a1
%t78 = getelementptr inbounds %S.gen.Fallible, ptr %a70, i32 0, i32 1
%t79 = load { ptr, i64, i64 }, ptr %t78
%t80 = load { ptr, i64, i64 }, ptr %a73
%t81 = load { ptr, i64, i64 }, ptr %a76
call void @finch.gen.condBr(ptr %t77, { ptr, i64, i64 } %t79, { ptr, i64, i64 } %t80, { ptr, i64, i64 } %t81)
%t82 = load ptr, ptr %a1
%t83 = load { ptr, i64, i64 }, ptr %a73
call void @finch.gen.label(ptr %t82, { ptr, i64, i64 } %t83)
%t84 = load ptr, ptr %a1
call void @finch.gen.unwind(ptr %t84, i64 0)
%t85 = load ptr, ptr %a1
%t86 = load ptr, ptr %a1
%t87 = load ptr, ptr %a1
%t88 = icmp eq ptr %t87, null
br i1 %t88, label %panic5486, label %ok5487
panic5486:
call void @finch_panic(ptr @.str.3613, i64 2877, ptr @.str.3614)
unreachable
ok5487:
%t89 = getelementptr inbounds %S.gen.Gen, ptr %t87, i32 0, i32 12
%t90 = load %S.gen.FnSig, ptr %t89
%t91 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t86, %S.gen.FnSig %t90)
store { ptr, i64, i64 } { ptr @.str.3612, i64 4, 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.3615, i64 1, i64 0 }, ptr %a98
call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98)
%t99 = load { ptr, i64, i64 }, ptr %a96
%t100 = load ptr, ptr %a1
%t101 = load ptr, ptr %a1
%t102 = load ptr, ptr %a1
%t103 = icmp eq ptr %t102, null
br i1 %t103, label %panic5488, label %ok5489
panic5488:
call void @finch_panic(ptr @.str.3617, i64 2877, ptr @.str.3618)
unreachable
ok5489:
%t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 12
%t105 = load %S.gen.FnSig, ptr %t104
%t106 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t101, %S.gen.FnSig %t105)
store { ptr, i64, i64 } { ptr @.str.3616, i64 12, i64 0 }, ptr %a108
store { ptr, i64, i64 } %t106, ptr %a109
call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109)
%t110 = load { ptr, i64, i64 }, ptr %a107
store { ptr, i64, i64 } %t110, ptr %a112
store { ptr, i64, i64 } { ptr @.str.3619, i64 36, 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.Fallible, ptr %a70, i32 0, i32 2
%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)
%t120 = load { ptr, i64, i64 }, ptr %a117
store { ptr, i64, i64 } %t120, ptr %a122
store { ptr, i64, i64 } { ptr @.str.3620, i64 3, i64 0 }, ptr %a123
call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123)
%t124 = load { ptr, i64, i64 }, ptr %a121
%t125 = call { ptr, i64, i64 } @finch.gen.op(ptr %t100, { ptr, i64, i64 } %t124)
store { ptr, i64, i64 } %t99, 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
call void @finch.gen.emit(ptr %t85, { ptr, i64, i64 } %t129)
%t130 = load ptr, ptr %a1
%t131 = icmp eq ptr %t130, null
br i1 %t131, label %panic5490, label %ok5491
panic5490:
call void @finch_panic(ptr @.str.3621, i64 2878, ptr @.str.3622)
unreachable
ok5491:
%t132 = getelementptr inbounds %S.gen.Gen, ptr %t130, i32 0, i32 9
store i1 true, ptr %t132
%t133 = load ptr, ptr %a1
%t134 = load { ptr, i64, i64 }, ptr %a76
call void @finch.gen.label(ptr %t133, { ptr, i64, i64 } %t134)
%t135 = getelementptr inbounds %S.gen.Fallible, ptr %a70, i32 0, i32 0
%t136 = load %S.gen.Val, ptr %t135
store %S.gen.Val %t136, ptr %a137
call void @finch.copy.S_gen_Val(ptr %a138, ptr %a137)
%t139 = load %S.gen.Val, ptr %a138
ret %S.gen.Val %t139
}
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
%a54 = alloca i1, align 16
%a61 = alloca { ptr, i64, i64 }, align 16
%a62 = alloca { ptr, i64, i64 }, align 16
%a81 = alloca { ptr, i64, i64 }, align 16
%a82 = alloca { ptr, i64, i64 }, align 16
%a88 = alloca { ptr, i64, i64 }, align 16
%a104 = alloca %S.gen.Val, align 16
%a105 = alloca %S.gen.Val, align 16
%a110 = alloca { ptr, i64, i64 }, align 16
%a111 = alloca { ptr, i64, i64 }, align 16
%a151 = alloca %S.gen.Val, align 16
%a155 = alloca { ptr, i64, i64 }, align 16
%a159 = alloca { ptr, i64, i64 }, align 16
%a162 = 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
%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
%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
%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
%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
%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
%a223 = alloca { ptr, i64, i64 }, align 16
%a229 = alloca %S.ast.Type, align 16
%a230 = 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 %range5492, label %inrange5493
range5492:
call void @finch_panic_index(ptr @.str.3623, i64 2885, i64 0, i64 %t7)
unreachable
inrange5493:
%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.3624, 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.3625, 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 %then5494, label %endif5496
then5494:
%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.3627, 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.3626, i64 3, i64 0 }, %S.ast.Type %t38, { ptr, i64, i64 } %t40, i1 true)
%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 1, %t45
br i1 %t46, label %range5497, label %inrange5498
range5497:
call void @finch_panic_index(ptr @.str.3628, i64 2894, i64 1, i64 %t45)
unreachable
inrange5498:
%t47 = extractvalue { ptr, i64, i64 } %t44, 0
%t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 1
%t49 = load %S.ast.Node, ptr %t48
call void @finch.gen.block(ptr %t42, %S.ast.Node %t49, i1 true)
%t50 = load ptr, ptr %a1
%t51 = icmp eq ptr %t50, null
br i1 %t51, label %panic5499, label %ok5500
panic5499:
call void @finch_panic(ptr @.str.3629, i64 2895, ptr @.str.3630)
unreachable
ok5500:
%t52 = getelementptr inbounds %S.gen.Gen, ptr %t50, i32 0, i32 9
%t53 = load i1, ptr %t52
store i1 %t53, ptr %a54
%t55 = load ptr, ptr %a1
call void @finch.gen.popScope(ptr %t55)
%t56 = load i1, ptr %a54
%t57 = xor i1 %t56, true
br label %logic.from5501
logic.from5501:
br i1 %t57, label %logic.rhs5502, label %logic.end5503
logic.rhs5502:
%t58 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1
%t59 = getelementptr inbounds %S.ast.Type, ptr %t58, i32 0, i32 0
%t60 = load { ptr, i64, i64 }, ptr %t59
store { ptr, i64, i64 } %t60, ptr %a61
store { ptr, i64, i64 } { ptr @.str.3631, i64 4, i64 0 }, ptr %a62
%t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62)
%t64 = icmp eq i32 %t63, 0
br label %logic.rend5504
logic.rend5504:
br label %logic.end5503
logic.end5503:
%t65 = phi i1 [ false, %logic.from5501 ], [ %t64, %logic.rend5504 ]
br label %logic.from5505
logic.from5505:
br i1 %t65, label %logic.rhs5506, label %logic.end5507
logic.rhs5506:
%t66 = load i1, ptr %a3
%t67 = xor i1 %t66, true
br label %logic.rend5508
logic.rend5508:
br label %logic.end5507
logic.end5507:
%t68 = phi i1 [ false, %logic.from5505 ], [ %t67, %logic.rend5508 ]
br i1 %t68, label %then5509, label %endif5511
then5509:
%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 1, %t72
br i1 %t73, label %range5512, label %inrange5513
range5512:
call void @finch_panic_index(ptr @.str.3632, i64 2898, i64 1, i64 %t72)
unreachable
inrange5513:
%t74 = extractvalue { ptr, i64, i64 } %t71, 0
%t75 = getelementptr inbounds %S.ast.Node, ptr %t74, i64 1
%t76 = load %S.ast.Node, ptr %t75
call void @finch.gen.fail(ptr %t69, %S.ast.Node %t76, { ptr, i64, i64 } { ptr @.str.3633, i64 142, i64 0 })
br label %endif5511
endif5511:
%t77 = load i1, ptr %a3
br label %logic.from5514
logic.from5514:
br i1 %t77, label %logic.rhs5515, label %logic.end5516
logic.rhs5515:
%t78 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1
%t79 = getelementptr inbounds %S.ast.Type, ptr %t78, i32 0, i32 0
%t80 = load { ptr, i64, i64 }, ptr %t79
store { ptr, i64, i64 } %t80, ptr %a81
store { ptr, i64, i64 } { ptr @.str.3634, i64 4, i64 0 }, ptr %a82
%t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82)
%t84 = icmp eq i32 %t83, 0
br label %logic.rend5517
logic.rend5517:
br label %logic.end5516
logic.end5516:
%t85 = phi i1 [ false, %logic.from5514 ], [ %t84, %logic.rend5517 ]
br i1 %t85, label %then5518, label %endif5520
then5518:
%t86 = load ptr, ptr %a1
%t87 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t86, { ptr, i64, i64 } { ptr @.str.3635, i64 6, i64 0 })
store { ptr, i64, i64 } %t87, ptr %a88
%t89 = load ptr, ptr %a1
%t90 = load { ptr, i64, i64 }, ptr %a88
call void @finch.gen.br(ptr %t89, { ptr, i64, i64 } %t90)
%t91 = load ptr, ptr %a1
%t92 = load { ptr, i64, i64 }, ptr %a25
call void @finch.gen.label(ptr %t91, { ptr, i64, i64 } %t92)
%t93 = load ptr, ptr %a1
%t94 = load { ptr, i64, i64 }, ptr %a88
call void @finch.gen.br(ptr %t93, { ptr, i64, i64 } %t94)
%t95 = load ptr, ptr %a1
%t96 = load { ptr, i64, i64 }, ptr %a88
call void @finch.gen.label(ptr %t95, { ptr, i64, i64 } %t96)
%t97 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3636, i64 4, i64 0 })
%t98 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t97, 1
ret %S.gen.Val %t98
endif5520:
%t99 = load ptr, ptr %a1
%t100 = load { ptr, i64, i64 }, ptr %a25
call void @finch.gen.br(ptr %t99, { ptr, i64, i64 } %t100)
%t101 = load ptr, ptr %a1
%t102 = load { ptr, i64, i64 }, ptr %a25
call void @finch.gen.label(ptr %t101, { ptr, i64, i64 } %t102)
%t103 = load %S.gen.Val, ptr %a19
store %S.gen.Val %t103, ptr %a104
call void @finch.copy.S_gen_Val(ptr %a105, ptr %a104)
%t106 = load %S.gen.Val, ptr %a105
ret %S.gen.Val %t106
endif5496:
%t107 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1
%t108 = getelementptr inbounds %S.ast.Type, ptr %t107, i32 0, i32 0
%t109 = load { ptr, i64, i64 }, ptr %t108
store { ptr, i64, i64 } %t109, ptr %a110
store { ptr, i64, i64 } { ptr @.str.3637, 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 %then5521, label %endif5523
then5521:
%t114 = load ptr, ptr %a1
%t115 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t116 = load { ptr, i64, i64 }, ptr %t115
%t117 = extractvalue { ptr, i64, i64 } %t116, 1
%t118 = icmp uge i64 1, %t117
br i1 %t118, label %range5524, label %inrange5525
range5524:
call void @finch_panic_index(ptr @.str.3638, i64 2913, i64 1, i64 %t117)
unreachable
inrange5525:
%t119 = extractvalue { ptr, i64, i64 } %t116, 0
%t120 = getelementptr inbounds %S.ast.Node, ptr %t119, i64 1
%t121 = load %S.ast.Node, ptr %t120
call void @finch.gen.fail(ptr %t114, %S.ast.Node %t121, { ptr, i64, i64 } { ptr @.str.3639, i64 98, i64 0 })
br label %endif5523
endif5523:
%t122 = load ptr, ptr %a1
call void @finch.gen.pushScope(ptr %t122)
%t123 = load ptr, ptr %a1
%t124 = load %S.ast.Node, ptr %a2
%t125 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3641, i64 3, i64 0 })
%t126 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 2
%t127 = load { ptr, i64, i64 }, ptr %t126
%t128 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t123, %S.ast.Node %t124, { ptr, i64, i64 } { ptr @.str.3640, i64 3, i64 0 }, %S.ast.Type %t125, { ptr, i64, i64 } %t127, i1 true)
%t129 = load ptr, ptr %a1
%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 %range5526, label %inrange5527
range5526:
call void @finch_panic_index(ptr @.str.3642, i64 2917, i64 1, i64 %t133)
unreachable
inrange5527:
%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 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1
%t139 = load %S.ast.Type, ptr %t138
%t140 = call %S.gen.Val @finch.gen.exprWant(ptr %t130, %S.ast.Node %t137, %S.ast.Type %t139)
%t141 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1
%t142 = load %S.ast.Type, ptr %t141
%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 %range5528, label %inrange5529
range5528:
call void @finch_panic_index(ptr @.str.3643, i64 2917, i64 1, i64 %t145)
unreachable
inrange5529:
%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.coerce(ptr %t129, %S.gen.Val %t140, %S.ast.Type %t142, %S.ast.Node %t149, { ptr, i64, i64 } { ptr @.str.3644, i64 20, i64 0 })
store %S.gen.Val %t150, ptr %a151
%t152 = load ptr, ptr %a1
%t153 = load %S.gen.Val, ptr %a151
%t154 = call { ptr, i64, i64 } @finch.gen.own(ptr %t152, %S.gen.Val %t153)
store { ptr, i64, i64 } %t154, ptr %a155
%t156 = load ptr, ptr %a1
call void @finch.gen.popScope(ptr %t156)
%t157 = load ptr, ptr %a1
%t158 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t157, { ptr, i64, i64 } { ptr @.str.3645, i64 7, i64 0 })
store { ptr, i64, i64 } %t158, ptr %a159
%t160 = load ptr, ptr %a1
%t161 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t160, { ptr, i64, i64 } { ptr @.str.3646, i64 6, i64 0 })
store { ptr, i64, i64 } %t161, ptr %a162
%t163 = load ptr, ptr %a1
%t164 = load { ptr, i64, i64 }, ptr %a159
call void @finch.gen.br(ptr %t163, { ptr, i64, i64 } %t164)
%t165 = load ptr, ptr %a1
%t166 = load { ptr, i64, i64 }, ptr %a159
call void @finch.gen.label(ptr %t165, { ptr, i64, i64 } %t166)
%t167 = load ptr, ptr %a1
%t168 = load { ptr, i64, i64 }, ptr %a162
call void @finch.gen.br(ptr %t167, { ptr, i64, i64 } %t168)
%t169 = load ptr, ptr %a1
%t170 = load { ptr, i64, i64 }, ptr %a25
call void @finch.gen.label(ptr %t169, { ptr, i64, i64 } %t170)
%t171 = load ptr, ptr %a1
%t172 = load { ptr, i64, i64 }, ptr %a162
call void @finch.gen.br(ptr %t171, { ptr, i64, i64 } %t172)
%t173 = load ptr, ptr %a1
%t174 = load { ptr, i64, i64 }, ptr %a162
call void @finch.gen.label(ptr %t173, { ptr, i64, i64 } %t174)
%t175 = load ptr, ptr %a1
%t176 = load ptr, ptr %a1
%t177 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1
%t178 = load %S.ast.Type, ptr %t177
%t179 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t176, %S.ast.Type %t178)
store { ptr, i64, i64 } { ptr @.str.3647, i64 4, i64 0 }, ptr %a181
store { ptr, i64, i64 } %t179, ptr %a182
call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182)
%t183 = load { ptr, i64, i64 }, ptr %a180
store { ptr, i64, i64 } %t183, ptr %a185
store { ptr, i64, i64 } { ptr @.str.3648, i64 3, i64 0 }, ptr %a186
call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186)
%t187 = load { ptr, i64, i64 }, ptr %a184
%t188 = load { ptr, i64, i64 }, ptr %a155
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)
%t192 = load { ptr, i64, i64 }, ptr %a189
store { ptr, i64, i64 } %t192, ptr %a194
store { ptr, i64, i64 } { ptr @.str.3649, i64 3, 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 %a159
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)
%t201 = load { ptr, i64, i64 }, ptr %a198
store { ptr, i64, i64 } %t201, ptr %a203
store { ptr, i64, i64 } { ptr @.str.3650, i64 6, i64 0 }, ptr %a204
call void @finch_str_concat(ptr %a202, ptr %a203, ptr %a204)
%t205 = load { ptr, i64, i64 }, ptr %a202
%t206 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 0
%t207 = load { ptr, i64, i64 }, ptr %t206
store { ptr, i64, i64 } %t205, 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.3651, i64 3, i64 0 }, ptr %a214
call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214)
%t215 = load { ptr, i64, i64 }, ptr %a212
%t216 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } %t215, ptr %a218
store { ptr, i64, i64 } %t216, ptr %a219
call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219)
%t220 = load { ptr, i64, i64 }, ptr %a217
store { ptr, i64, i64 } %t220, ptr %a222
store { ptr, i64, i64 } { ptr @.str.3652, i64 2, i64 0 }, ptr %a223
call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223)
%t224 = load { ptr, i64, i64 }, ptr %a221
%t225 = call { ptr, i64, i64 } @finch.gen.op(ptr %t175, { ptr, i64, i64 } %t224)
%t226 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t225, 0
%t227 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1
%t228 = load %S.ast.Type, ptr %t227
store %S.ast.Type %t228, ptr %a229
call void @finch.copy.S_ast_Type(ptr %a230, ptr %a229)
%t231 = load %S.ast.Type, ptr %a230
%t232 = insertvalue %S.gen.Val %t226, %S.ast.Type %t231, 1
%t233 = load ptr, ptr %a1
%t234 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1
%t235 = load %S.ast.Type, ptr %t234
%t236 = call i1 @finch.gen.owning(ptr %t233, %S.ast.Type %t235)
%t237 = insertvalue %S.gen.Val %t232, i1 %t236, 2
ret %S.gen.Val %t237
}
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.3653, 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 %then5530, label %endif5532
then5530:
%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
endif5532:
%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.3654, 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 %then5533, label %endif5535
then5533:
%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
endif5535:
%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
%a203 = alloca %S.ast.Type, align 16
%a204 = alloca %S.ast.Type, align 16
%a208 = alloca { ptr, i64, i64 }, align 16
%a209 = alloca { ptr, i64, i64 }, align 16
%a216 = alloca { ptr, i64, i64 }, align 16
%a217 = alloca { ptr, i64, i64 }, align 16
%a224 = alloca { ptr, i64, i64 }, align 16
%a225 = alloca { ptr, i64, i64 }, align 16
%a232 = alloca { ptr, i64, i64 }, align 16
%a233 = alloca { ptr, i64, i64 }, align 16
%a240 = alloca { ptr, i64, i64 }, align 16
%a241 = alloca { ptr, i64, i64 }, align 16
%a248 = alloca { ptr, i64, i64 }, align 16
%a249 = alloca { ptr, i64, i64 }, align 16
%a256 = alloca { ptr, i64, i64 }, align 16
%a257 = alloca { ptr, i64, i64 }, align 16
%a264 = alloca { ptr, i64, i64 }, align 16
%a265 = alloca { ptr, i64, i64 }, align 16
%a273 = alloca { ptr, i64, i64 }, align 16
%a274 = 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
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.3655, 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 %then5536, label %endif5538
then5536:
%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.3657, 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.from5539
logic.from5539:
br i1 %t20, label %logic.end5541, label %logic.rhs5540
logic.rhs5540:
%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.3659, 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.rend5542
logic.rend5542:
br label %logic.end5541
logic.end5541:
%t28 = phi i1 [ true, %logic.from5539 ], [ %t27, %logic.rend5542 ]
br i1 %t28, label %then5543, label %endif5545
then5543:
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.3660, i64 2946)
%t37 = load { ptr, i64, i64 }, ptr %a33
store { ptr, i64, i64 } %t37, ptr %a38
store i64 0, ptr %a39
br label %each.cond5546
each.cond5546:
%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.body5547, label %each.end5549
each.body5547:
%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.from5550
logic.from5550:
br i1 %t54, label %logic.rhs5551, label %logic.end5552
logic.rhs5551:
%t55 = load i8, ptr %a47
%t56 = icmp ule i8 %t55, 102
br label %logic.rend5553
logic.rend5553:
br label %logic.end5552
logic.end5552:
%t57 = phi i1 [ false, %logic.from5550 ], [ %t56, %logic.rend5553 ]
br i1 %t57, label %then5554, label %endif5556
then5554:
%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 %endif5556
endif5556:
%t63 = load i8, ptr %a47
%t64 = icmp uge i8 %t63, 65
br label %logic.from5557
logic.from5557:
br i1 %t64, label %logic.rhs5558, label %logic.end5559
logic.rhs5558:
%t65 = load i8, ptr %a47
%t66 = icmp ule i8 %t65, 70
br label %logic.rend5560
logic.rend5560:
br label %logic.end5559
logic.end5559:
%t67 = phi i1 [ false, %logic.from5557 ], [ %t66, %logic.rend5560 ]
br i1 %t67, label %then5561, label %endif5563
then5561:
%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 %endif5563
endif5563:
%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.step5548
each.step5548:
%t77 = load i64, ptr %a39
%t78 = add i64 %t77, 1
store i64 %t78, ptr %a39
br label %each.cond5546
each.end5549:
%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.3661, i64 3, i64 0 })
%t84 = insertvalue %S.gen.Val %t82, %S.ast.Type %t83, 1
%t85 = insertvalue %S.gen.Val %t84, i1 true, 3
ret %S.gen.Val %t85
endif5545:
%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.3662, i64 2958)
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.3663, i64 3, i64 0 })
%t94 = insertvalue %S.gen.Val %t92, %S.ast.Type %t93, 1
%t95 = insertvalue %S.gen.Val %t94, i1 true, 3
ret %S.gen.Val %t95
endif5538:
%t96 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t96, ptr %a97
store { ptr, i64, i64 } { ptr @.str.3664, 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 %then5564, label %endif5566
then5564:
%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.3665, i64 5, i64 0 })
%t108 = insertvalue %S.gen.Val %t106, %S.ast.Type %t107, 1
%t109 = insertvalue %S.gen.Val %t108, i1 true, 3
ret %S.gen.Val %t109
endif5566:
%t110 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t110, ptr %a111
store { ptr, i64, i64 } { ptr @.str.3666, 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 %then5567, label %endif5569
then5567:
%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.3667, i64 4, i64 0 })
%t122 = insertvalue %S.gen.Val %t120, %S.ast.Type %t121, 1
ret %S.gen.Val %t122
endif5569:
%t123 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t123, ptr %a124
store { ptr, i64, i64 } { ptr @.str.3668, 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 %then5570, label %endif5572
then5570:
%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 %range5573, label %inrange5574
range5573:
call void @finch_panic_index(ptr @.str.3669, i64 2967, i64 0, i64 %t130)
unreachable
inrange5574:
%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.3670, i64 4, i64 0 })
%t142 = insertvalue %S.gen.Val %t140, %S.ast.Type %t141, 1
ret %S.gen.Val %t142
endif5572:
%t143 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t143, ptr %a144
store { ptr, i64, i64 } { ptr @.str.3671, 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 %then5575, label %endif5577
then5575:
%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)
ret %S.gen.Val %t151
endif5577:
%t152 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t152, ptr %a153
store { ptr, i64, i64 } { ptr @.str.3672, 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 %then5578, label %endif5580
then5578:
%t157 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } { ptr @.str.3673, i64 4, i64 0 }, 0
%t158 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3674, i64 4, i64 0 })
%t159 = insertvalue %S.gen.Val %t157, %S.ast.Type %t158, 1
ret %S.gen.Val %t159
endif5580:
%t160 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t160, ptr %a161
store { ptr, i64, i64 } { ptr @.str.3675, 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.from5581
logic.from5581:
br i1 %t164, label %logic.end5583, label %logic.rhs5582
logic.rhs5582:
%t165 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t165, ptr %a166
store { ptr, i64, i64 } { ptr @.str.3676, 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.rend5584
logic.rend5584:
br label %logic.end5583
logic.end5583:
%t170 = phi i1 [ true, %logic.from5581 ], [ %t169, %logic.rend5584 ]
br label %logic.from5585
logic.from5585:
br i1 %t170, label %logic.end5587, label %logic.rhs5586
logic.rhs5586:
%t171 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t171, ptr %a172
store { ptr, i64, i64 } { ptr @.str.3677, 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.rend5588
logic.rend5588:
br label %logic.end5587
logic.end5587:
%t176 = phi i1 [ true, %logic.from5585 ], [ %t175, %logic.rend5588 ]
br i1 %t176, label %then5589, label %endif5591
then5589:
%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 %then5592, label %endif5594
then5592:
%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
ret %S.gen.Val %t188
endif5594:
%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)
%t199 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t198, 0
%t200 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1
%t201 = getelementptr inbounds %S.gen.Place, ptr %t200, i32 0, i32 1
%t202 = load %S.ast.Type, ptr %t201
store %S.ast.Type %t202, ptr %a203
call void @finch.copy.S_ast_Type(ptr %a204, ptr %a203)
%t205 = load %S.ast.Type, ptr %a204
%t206 = insertvalue %S.gen.Val %t199, %S.ast.Type %t205, 1
ret %S.gen.Val %t206
endif5591:
%t207 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t207, ptr %a208
store { ptr, i64, i64 } { ptr @.str.3678, i64 5, i64 0 }, ptr %a209
%t210 = call i32 @finch_str_eq(ptr %a208, ptr %a209)
%t211 = icmp ne i32 %t210, 0
br i1 %t211, label %then5595, label %endif5597
then5595:
%t212 = load ptr, ptr %a1
%t213 = load %S.ast.Node, ptr %a2
%t214 = call %S.gen.Val @finch.gen.matchGen(ptr %t212, %S.ast.Node %t213, i1 true)
ret %S.gen.Val %t214
endif5597:
%t215 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t215, ptr %a216
store { ptr, i64, i64 } { ptr @.str.3679, i64 3, i64 0 }, ptr %a217
%t218 = call i32 @finch_str_eq(ptr %a216, ptr %a217)
%t219 = icmp ne i32 %t218, 0
br i1 %t219, label %then5598, label %endif5600
then5598:
%t220 = load ptr, ptr %a1
%t221 = load %S.ast.Node, ptr %a2
%t222 = call %S.gen.Val @finch.gen.tryExpr(ptr %t220, %S.ast.Node %t221)
ret %S.gen.Val %t222
endif5600:
%t223 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t223, ptr %a224
store { ptr, i64, i64 } { ptr @.str.3680, i64 2, i64 0 }, ptr %a225
%t226 = call i32 @finch_str_eq(ptr %a224, ptr %a225)
%t227 = icmp ne i32 %t226, 0
br i1 %t227, label %then5601, label %endif5603
then5601:
%t228 = load ptr, ptr %a1
%t229 = load %S.ast.Node, ptr %a2
%t230 = call %S.gen.Val @finch.gen.orElse(ptr %t228, %S.ast.Node %t229, i1 false)
ret %S.gen.Val %t230
endif5603:
%t231 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t231, ptr %a232
store { ptr, i64, i64 } { ptr @.str.3681, i64 5, i64 0 }, ptr %a233
%t234 = call i32 @finch_str_eq(ptr %a232, ptr %a233)
%t235 = icmp ne i32 %t234, 0
br i1 %t235, label %then5604, label %endif5606
then5604:
%t236 = load ptr, ptr %a1
%t237 = load %S.ast.Node, ptr %a2
%t238 = call %S.gen.Val @finch.gen.unary(ptr %t236, %S.ast.Node %t237)
ret %S.gen.Val %t238
endif5606:
%t239 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t239, ptr %a240
store { ptr, i64, i64 } { ptr @.str.3682, i64 6, i64 0 }, ptr %a241
%t242 = call i32 @finch_str_eq(ptr %a240, ptr %a241)
%t243 = icmp ne i32 %t242, 0
br i1 %t243, label %then5607, label %endif5609
then5607:
%t244 = load ptr, ptr %a1
%t245 = load %S.ast.Node, ptr %a2
%t246 = call %S.gen.Val @finch.gen.binary(ptr %t244, %S.ast.Node %t245)
ret %S.gen.Val %t246
endif5609:
%t247 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t247, ptr %a248
store { ptr, i64, i64 } { ptr @.str.3683, i64 4, i64 0 }, ptr %a249
%t250 = call i32 @finch_str_eq(ptr %a248, ptr %a249)
%t251 = icmp ne i32 %t250, 0
br i1 %t251, label %then5610, label %endif5612
then5610:
%t252 = load ptr, ptr %a1
%t253 = load %S.ast.Node, ptr %a2
%t254 = call %S.gen.Val @finch.gen.call(ptr %t252, %S.ast.Node %t253)
ret %S.gen.Val %t254
endif5612:
%t255 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t255, ptr %a256
store { ptr, i64, i64 } { ptr @.str.3684, i64 6, i64 0 }, ptr %a257
%t258 = call i32 @finch_str_eq(ptr %a256, ptr %a257)
%t259 = icmp ne i32 %t258, 0
br i1 %t259, label %then5613, label %endif5615
then5613:
%t260 = load ptr, ptr %a1
%t261 = load %S.ast.Node, ptr %a2
%t262 = call %S.gen.Val @finch.gen.method(ptr %t260, %S.ast.Node %t261)
ret %S.gen.Val %t262
endif5615:
%t263 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t263, ptr %a264
store { ptr, i64, i64 } { ptr @.str.3685, i64 5, i64 0 }, ptr %a265
%t266 = call i32 @finch_str_eq(ptr %a264, ptr %a265)
%t267 = icmp ne i32 %t266, 0
br i1 %t267, label %then5616, label %endif5618
then5616:
%t268 = load ptr, ptr %a1
%t269 = load %S.ast.Node, ptr %a2
%t270 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3686, i64 4, i64 0 })
%t271 = call %S.gen.Val @finch.gen.arrayLit(ptr %t268, %S.ast.Node %t269, %S.ast.Type %t270)
ret %S.gen.Val %t271
endif5618:
%t272 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t272, ptr %a273
store { ptr, i64, i64 } { ptr @.str.3687, i64 3, i64 0 }, ptr %a274
%t275 = call i32 @finch_str_eq(ptr %a273, ptr %a274)
%t276 = icmp ne i32 %t275, 0
br i1 %t276, label %then5619, label %endif5621
then5619:
%t277 = load ptr, ptr %a1
%t278 = load %S.ast.Node, ptr %a2
%t279 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3688, i64 4, i64 0 })
%t280 = call %S.gen.Val @finch.gen.mapLit(ptr %t277, %S.ast.Node %t278, %S.ast.Type %t279)
ret %S.gen.Val %t280
endif5621:
%t281 = load ptr, ptr %a1
%t282 = load %S.ast.Node, ptr %a2
%t283 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } { ptr @.str.3689, i64 19, 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
call void @finch.gen.fail(ptr %t281, %S.ast.Node %t282, { ptr, i64, i64 } %t287)
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.gen.Val, 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
%a48 = 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
%a63 = 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
%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
%a92 = alloca %S.ast.Type, align 16
%a93 = alloca %S.ast.Type, align 16
%a104 = alloca { ptr, i64, i64 }, 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
%a117 = alloca { ptr, i64, i64 }, align 16
%a122 = alloca { ptr, i64, i64 }, align 16
%a123 = alloca { ptr, i64, i64 }, align 16
%a131 = alloca %S.ast.Type, align 16
%a132 = alloca %S.ast.Type, align 16
%a138 = alloca { ptr, i64, i64 }, align 16
%a139 = alloca { ptr, i64, i64 }, align 16
%a140 = alloca { ptr, i64, i64 }, align 16
%a145 = alloca %S.ast.Type, align 16
%a146 = alloca %S.ast.Type, 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
%a165 = alloca { ptr, i64, i64 }, align 16
%a166 = alloca { ptr, i64, i64 }, align 16
%a167 = alloca { ptr, i64, i64 }, align 16
%a173 = alloca %S.ast.Type, align 16
%a174 = alloca %S.ast.Type, 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
%a195 = alloca { ptr, i64, i64 }, align 16
%a196 = alloca { ptr, i64, i64 }, align 16
%a197 = alloca { ptr, i64, i64 }, align 16
%a203 = alloca %S.ast.Type, align 16
%a204 = alloca %S.ast.Type, align 16
%a212 = alloca { ptr, i64, i64 }, align 16
%a213 = alloca { ptr, i64, i64 }, align 16
%a214 = alloca { ptr, i64, i64 }, align 16
%a217 = alloca %S.gen.Val, align 16
%a218 = alloca %S.gen.Val, 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 %range5622, label %inrange5623
range5622:
call void @finch_panic_index(ptr @.str.3690, i64 3015, i64 0, i64 %t6)
unreachable
inrange5623:
%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.3691, 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 %then5624, label %endif5626
then5624:
%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.3692, 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 %range5627, label %inrange5628
range5627:
call void @finch_panic_index(ptr @.str.3693, i64 3017, i64 0, i64 %t24)
unreachable
inrange5628:
%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.3694, i64 19, i64 0 })
store %S.gen.Val %t29, ptr %a30
%t31 = load ptr, ptr %a1
%t32 = getelementptr inbounds %S.gen.Val, ptr %a30, i32 0, i32 0
%t33 = load { ptr, i64, i64 }, ptr %t32
store { ptr, i64, i64 } { ptr @.str.3695, i64 7, i64 0 }, ptr %a35
store { ptr, i64, i64 } %t33, ptr %a36
call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36)
%t37 = load { ptr, i64, i64 }, ptr %a34
store { ptr, i64, i64 } %t37, ptr %a39
store { ptr, i64, i64 } { ptr @.str.3696, i64 6, i64 0 }, ptr %a40
call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40)
%t41 = load { ptr, i64, i64 }, ptr %a38
%t42 = call { ptr, i64, i64 } @finch.gen.op(ptr %t31, { ptr, i64, i64 } %t41)
%t43 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t42, 0
%t44 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3697, i64 4, i64 0 })
%t45 = insertvalue %S.gen.Val %t43, %S.ast.Type %t44, 1
ret %S.gen.Val %t45
endif5626:
%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 %a48
store { ptr, i64, i64 } { ptr @.str.3698, i64 1, i64 0 }, ptr %a49
%t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49)
%t51 = icmp ne i32 %t50, 0
br i1 %t51, label %then5629, label %endif5631
then5629:
%t52 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1
%t53 = load %S.ast.Type, ptr %t52
%t54 = call i1 @finch.gen.isInt(%S.ast.Type %t53)
%t55 = xor i1 %t54, true
br i1 %t55, label %then5632, label %endif5634
then5632:
%t56 = load ptr, ptr %a1
%t57 = load %S.ast.Node, ptr %a2
%t58 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1
%t59 = load %S.ast.Type, ptr %t58
%t60 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t59)
store { ptr, i64, i64 } { ptr @.str.3699, i64 45, i64 0 }, ptr %a62
store { ptr, i64, i64 } %t60, ptr %a63
call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63)
%t64 = load { ptr, i64, i64 }, ptr %a61
call void @finch.gen.fail(ptr %t56, %S.ast.Node %t57, { ptr, i64, i64 } %t64)
br label %endif5634
endif5634:
%t65 = load ptr, ptr %a1
%t66 = load ptr, ptr %a1
%t67 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1
%t68 = load %S.ast.Type, ptr %t67
%t69 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t66, %S.ast.Type %t68)
store { ptr, i64, i64 } { ptr @.str.3700, i64 4, 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
store { ptr, i64, i64 } %t73, ptr %a75
store { ptr, i64, i64 } { ptr @.str.3701, i64 1, i64 0 }, ptr %a76
call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76)
%t77 = load { ptr, i64, i64 }, ptr %a74
%t78 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0
%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)
%t83 = load { ptr, i64, i64 }, ptr %a80
store { ptr, i64, i64 } %t83, ptr %a85
store { ptr, i64, i64 } { ptr @.str.3702, i64 4, i64 0 }, ptr %a86
call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86)
%t87 = load { ptr, i64, i64 }, ptr %a84
%t88 = call { ptr, i64, i64 } @finch.gen.op(ptr %t65, { ptr, i64, i64 } %t87)
%t89 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t88, 0
%t90 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1
%t91 = load %S.ast.Type, ptr %t90
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 %t89, %S.ast.Type %t94, 1
ret %S.gen.Val %t95
endif5631:
%t96 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1
%t97 = load %S.ast.Type, ptr %t96
%t98 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t97)
br i1 %t98, label %then5635, label %endif5637
then5635:
%t99 = load ptr, ptr %a1
%t100 = load %S.ast.Node, ptr %a2
%t101 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1
%t102 = load %S.ast.Type, ptr %t101
%t103 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t102)
store { ptr, i64, i64 } %t103, ptr %a105
store { ptr, i64, i64 } { ptr @.str.3703, i64 34, i64 0 }, ptr %a106
call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106)
%t107 = load { ptr, i64, i64 }, ptr %a104
call void @finch.gen.fail(ptr %t99, %S.ast.Node %t100, { ptr, i64, i64 } %t107)
br label %endif5637
endif5637:
%t108 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1
%t109 = load %S.ast.Type, ptr %t108
%t110 = call i1 @finch.gen.isSigned(%S.ast.Type %t109)
br i1 %t110, label %then5638, label %endif5640
then5638:
%t111 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 3
%t112 = load i1, ptr %t111
br i1 %t112, label %then5641, label %endif5643
then5641:
%t113 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0
%t114 = load { ptr, i64, i64 }, ptr %t113
store { ptr, i64, i64 } %t114, ptr %a115
store { ptr, i64, i64 } { ptr @.str.3705, i64 1, i64 0 }, ptr %a117
%t118 = call i32 @finch_str_starts(ptr %a115, ptr %a117)
%t119 = icmp ne i32 %t118, 0
br i1 %t119, label %then5644, label %endif5646
then5644:
%t120 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0
%t121 = load { ptr, i64, i64 }, ptr %t120
store { ptr, i64, i64 } %t121, ptr %a122
%t124 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0
%t125 = getelementptr inbounds { ptr, i64, i64 }, ptr %t124, i32 0, i32 1
%t126 = load i64, ptr %t125
call void @finch_str_sub(ptr %a123, ptr %a122, i64 1, i64 %t126, ptr @.str.3706, i64 3032)
%t127 = load { ptr, i64, i64 }, ptr %a123
%t128 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t127, 0
%t129 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1
%t130 = load %S.ast.Type, ptr %t129
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 = insertvalue %S.gen.Val %t128, %S.ast.Type %t133, 1
%t135 = insertvalue %S.gen.Val %t134, i1 true, 3
ret %S.gen.Val %t135
endif5646:
%t136 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0
%t137 = load { ptr, i64, i64 }, ptr %t136
store { ptr, i64, i64 } { ptr @.str.3707, i64 1, i64 0 }, ptr %a139
store { ptr, i64, i64 } %t137, ptr %a140
call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140)
%t141 = load { ptr, i64, i64 }, ptr %a138
%t142 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t141, 0
%t143 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1
%t144 = load %S.ast.Type, ptr %t143
store %S.ast.Type %t144, ptr %a145
call void @finch.copy.S_ast_Type(ptr %a146, ptr %a145)
%t147 = load %S.ast.Type, ptr %a146
%t148 = insertvalue %S.gen.Val %t142, %S.ast.Type %t147, 1
%t149 = insertvalue %S.gen.Val %t148, i1 true, 3
ret %S.gen.Val %t149
endif5643:
%t150 = load ptr, ptr %a1
%t151 = load ptr, ptr %a1
%t152 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1
%t153 = load %S.ast.Type, ptr %t152
%t154 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t151, %S.ast.Type %t153)
store { ptr, i64, i64 } { ptr @.str.3708, i64 4, 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.3709, i64 4, i64 0 }, ptr %a161
call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161)
%t162 = load { ptr, i64, i64 }, ptr %a159
%t163 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0
%t164 = load { ptr, i64, i64 }, ptr %t163
store { ptr, i64, i64 } %t162, ptr %a166
store { ptr, i64, i64 } %t164, ptr %a167
call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167)
%t168 = load { ptr, i64, i64 }, ptr %a165
%t169 = call { ptr, i64, i64 } @finch.gen.op(ptr %t150, { ptr, i64, i64 } %t168)
%t170 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t169, 0
%t171 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1
%t172 = load %S.ast.Type, ptr %t171
store %S.ast.Type %t172, ptr %a173
call void @finch.copy.S_ast_Type(ptr %a174, ptr %a173)
%t175 = load %S.ast.Type, ptr %a174
%t176 = insertvalue %S.gen.Val %t170, %S.ast.Type %t175, 1
ret %S.gen.Val %t176
endif5640:
%t177 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1
%t178 = load %S.ast.Type, ptr %t177
%t179 = call i1 @finch.gen.isFloat(%S.ast.Type %t178)
br i1 %t179, label %then5647, label %endif5649
then5647:
%t180 = load ptr, ptr %a1
%t181 = load ptr, ptr %a1
%t182 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1
%t183 = load %S.ast.Type, ptr %t182
%t184 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t181, %S.ast.Type %t183)
store { ptr, i64, i64 } { ptr @.str.3710, i64 5, i64 0 }, ptr %a186
store { ptr, i64, i64 } %t184, ptr %a187
call void @finch_str_concat(ptr %a185, ptr %a186, ptr %a187)
%t188 = load { ptr, i64, i64 }, ptr %a185
store { ptr, i64, i64 } %t188, ptr %a190
store { ptr, i64, i64 } { ptr @.str.3711, i64 1, i64 0 }, ptr %a191
call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191)
%t192 = load { ptr, i64, i64 }, ptr %a189
%t193 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0
%t194 = load { ptr, i64, i64 }, ptr %t193
store { ptr, i64, i64 } %t192, ptr %a196
store { ptr, i64, i64 } %t194, ptr %a197
call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197)
%t198 = load { ptr, i64, i64 }, ptr %a195
%t199 = call { ptr, i64, i64 } @finch.gen.op(ptr %t180, { ptr, i64, i64 } %t198)
%t200 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t199, 0
%t201 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1
%t202 = load %S.ast.Type, ptr %t201
store %S.ast.Type %t202, ptr %a203
call void @finch.copy.S_ast_Type(ptr %a204, ptr %a203)
%t205 = load %S.ast.Type, ptr %a204
%t206 = insertvalue %S.gen.Val %t200, %S.ast.Type %t205, 1
ret %S.gen.Val %t206
endif5649:
%t207 = load ptr, ptr %a1
%t208 = load %S.ast.Node, ptr %a2
%t209 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1
%t210 = load %S.ast.Type, ptr %t209
%t211 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t210)
store { ptr, i64, i64 } { ptr @.str.3712, i64 26, 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
call void @finch.gen.fail(ptr %t207, %S.ast.Node %t208, { ptr, i64, i64 } %t215)
%t216 = load %S.gen.Val, ptr %a12
store %S.gen.Val %t216, ptr %a217
call void @finch.copy.S_gen_Val(ptr %a218, ptr %a217)
%t219 = load %S.gen.Val, ptr %a218
ret %S.gen.Val %t219
}
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
%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
%a30 = alloca { ptr, i64, i64 }, align 16
%a31 = alloca { ptr, i64, i64 }, align 16
%a32 = 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
%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
%a65 = alloca { ptr, i64, i64 }, align 16
%a68 = alloca { ptr, i64, i64 }, align 16
%a69 = alloca { ptr, i64, i64 }, align 16
%a73 = alloca { ptr, i64, i64 }, align 16
%a74 = 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
%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
%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
%a119 = alloca { ptr, i64, i64 }, align 16
%a120 = alloca { ptr, i64, i64 }, align 16
%a125 = alloca { ptr, i64, i64 }, align 16
%a126 = 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
%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
%a156 = alloca { ptr, i64, i64 }, align 16
%a157 = 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
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.3713, 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.3714, i64 5, i64 0 }, ptr %a13
call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13)
%t14 = load { ptr, i64, i64 }, ptr %a11
%t15 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1
%t16 = load %S.ast.Type, ptr %t15
%t17 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %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)
%t21 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t21, ptr %a22
%t23 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1
%t24 = load %S.ast.Type, ptr %t23
%t25 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1
%t26 = load %S.ast.Type, ptr %t25
%t27 = call i1 @finch.ast.same(%S.ast.Type %t24, %S.ast.Type %t26)
%t28 = xor i1 %t27, true
br i1 %t28, label %then5650, label %endif5652
then5650:
%t29 = load { ptr, i64, i64 }, ptr %a22
store { ptr, i64, i64 } %t29, ptr %a31
store { ptr, i64, i64 } { ptr @.str.3715, i64 5, i64 0 }, ptr %a32
call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32)
%t33 = load { ptr, i64, i64 }, ptr %a30
%t34 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1
%t35 = load %S.ast.Type, ptr %t34
%t36 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t35)
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)
%t40 = load { ptr, i64, i64 }, ptr %a37
store { ptr, i64, i64 } %t40, ptr %a22
br label %endif5652
endif5652:
%t41 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t41, ptr %a42
store { ptr, i64, i64 } { ptr @.str.3716, i64 1, i64 0 }, ptr %a43
%t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43)
%t45 = icmp ne i32 %t44, 0
br label %logic.from5653
logic.from5653:
br i1 %t45, label %logic.rhs5654, label %logic.end5655
logic.rhs5654:
%t46 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1
%t47 = getelementptr inbounds %S.ast.Type, ptr %t46, i32 0, i32 0
%t48 = load { ptr, i64, i64 }, ptr %t47
store { ptr, i64, i64 } %t48, ptr %a49
store { ptr, i64, i64 } { ptr @.str.3717, i64 3, i64 0 }, ptr %a50
%t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50)
%t52 = icmp ne i32 %t51, 0
br label %logic.from5656
logic.from5656:
br i1 %t52, label %logic.end5658, label %logic.rhs5657
logic.rhs5657:
%t53 = getelementptr inbounds %S.gen.Val, ptr %a4, 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.3718, 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.rend5659
logic.rend5659:
br label %logic.end5658
logic.end5658:
%t60 = phi i1 [ true, %logic.from5656 ], [ %t59, %logic.rend5659 ]
br label %logic.rend5660
logic.rend5660:
br label %logic.end5655
logic.end5655:
%t61 = phi i1 [ false, %logic.from5653 ], [ %t60, %logic.rend5660 ]
br i1 %t61, label %then5661, label %endif5663
then5661:
%t62 = load { ptr, i64, i64 }, ptr %a22
store { ptr, i64, i64 } %t62, ptr %a64
store { ptr, i64, i64 } { ptr @.str.3719, i64 48, i64 0 }, 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 %a22
br label %endif5663
endif5663:
%t67 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t67, ptr %a68
store { ptr, i64, i64 } { ptr @.str.3720, i64 1, i64 0 }, ptr %a69
%t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69)
%t71 = icmp ne i32 %t70, 0
br label %logic.from5664
logic.from5664:
br i1 %t71, label %logic.end5666, label %logic.rhs5665
logic.rhs5665:
%t72 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t72, ptr %a73
store { ptr, i64, i64 } { ptr @.str.3721, i64 1, i64 0 }, ptr %a74
%t75 = call i32 @finch_str_eq(ptr %a73, ptr %a74)
%t76 = icmp ne i32 %t75, 0
br label %logic.rend5667
logic.rend5667:
br label %logic.end5666
logic.end5666:
%t77 = phi i1 [ true, %logic.from5664 ], [ %t76, %logic.rend5667 ]
br label %logic.from5668
logic.from5668:
br i1 %t77, label %logic.rhs5669, label %logic.end5670
logic.rhs5669:
%t78 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1
%t79 = getelementptr inbounds %S.ast.Type, ptr %t78, i32 0, i32 0
%t80 = load { ptr, i64, i64 }, ptr %t79
store { ptr, i64, i64 } %t80, ptr %a81
store { ptr, i64, i64 } { ptr @.str.3722, i64 4, i64 0 }, ptr %a82
%t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82)
%t84 = icmp ne i32 %t83, 0
br label %logic.rend5671
logic.rend5671:
br label %logic.end5670
logic.end5670:
%t85 = phi i1 [ false, %logic.from5668 ], [ %t84, %logic.rend5671 ]
br i1 %t85, label %then5672, label %else5673
then5672:
%t86 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t86, ptr %a87
store { ptr, i64, i64 } { ptr @.str.3723, i64 1, i64 0 }, ptr %a88
%t89 = call i32 @finch_str_eq(ptr %a87, ptr %a88)
%t90 = icmp ne i32 %t89, 0
br i1 %t90, label %then5675, label %else5676
then5675:
%t91 = load { ptr, i64, i64 }, ptr %a22
store { ptr, i64, i64 } %t91, ptr %a93
store { ptr, i64, i64 } { ptr @.str.3724, i64 26, i64 0 }, 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 %a22
br label %endif5677
else5676:
%t96 = load { ptr, i64, i64 }, ptr %a22
store { ptr, i64, i64 } %t96, ptr %a98
store { ptr, i64, i64 } { ptr @.str.3725, i64 26, i64 0 }, ptr %a99
call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99)
%t100 = load { ptr, i64, i64 }, ptr %a97
store { ptr, i64, i64 } %t100, ptr %a22
br label %endif5677
endif5677:
br label %endif5674
else5673:
%t101 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t101, ptr %a102
store { ptr, i64, i64 } { ptr @.str.3726, i64 1, i64 0 }, ptr %a103
%t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103)
%t105 = icmp ne i32 %t104, 0
br label %logic.from5678
logic.from5678:
br i1 %t105, label %logic.end5680, label %logic.rhs5679
logic.rhs5679:
%t106 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t106, ptr %a107
store { ptr, i64, i64 } { ptr @.str.3727, i64 1, i64 0 }, ptr %a108
%t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108)
%t110 = icmp ne i32 %t109, 0
br label %logic.rend5681
logic.rend5681:
br label %logic.end5680
logic.end5680:
%t111 = phi i1 [ true, %logic.from5678 ], [ %t110, %logic.rend5681 ]
br label %logic.from5682
logic.from5682:
br i1 %t111, label %logic.end5684, label %logic.rhs5683
logic.rhs5683:
%t112 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t112, ptr %a113
store { ptr, i64, i64 } { ptr @.str.3728, i64 1, i64 0 }, ptr %a114
%t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114)
%t116 = icmp ne i32 %t115, 0
br label %logic.rend5685
logic.rend5685:
br label %logic.end5684
logic.end5684:
%t117 = phi i1 [ true, %logic.from5682 ], [ %t116, %logic.rend5685 ]
br label %logic.from5686
logic.from5686:
br i1 %t117, label %logic.end5688, label %logic.rhs5687
logic.rhs5687:
%t118 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t118, ptr %a119
store { ptr, i64, i64 } { ptr @.str.3729, i64 2, i64 0 }, ptr %a120
%t121 = call i32 @finch_str_eq(ptr %a119, ptr %a120)
%t122 = icmp ne i32 %t121, 0
br label %logic.rend5689
logic.rend5689:
br label %logic.end5688
logic.end5688:
%t123 = phi i1 [ true, %logic.from5686 ], [ %t122, %logic.rend5689 ]
br label %logic.from5690
logic.from5690:
br i1 %t123, label %logic.end5692, label %logic.rhs5691
logic.rhs5691:
%t124 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t124, ptr %a125
store { ptr, i64, i64 } { ptr @.str.3730, i64 2, i64 0 }, ptr %a126
%t127 = call i32 @finch_str_eq(ptr %a125, ptr %a126)
%t128 = icmp ne i32 %t127, 0
br label %logic.rend5693
logic.rend5693:
br label %logic.end5692
logic.end5692:
%t129 = phi i1 [ true, %logic.from5690 ], [ %t128, %logic.rend5693 ]
br i1 %t129, label %then5694, label %endif5696
then5694:
%t130 = load { ptr, i64, i64 }, ptr %a22
store { ptr, i64, i64 } %t130, ptr %a132
store { ptr, i64, i64 } { ptr @.str.3731, i64 43, i64 0 }, ptr %a133
call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133)
%t134 = load { ptr, i64, i64 }, ptr %a131
store { ptr, i64, i64 } %t134, ptr %a22
br label %endif5696
endif5696:
br label %endif5674
endif5674:
%t135 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1
%t136 = getelementptr inbounds %S.ast.Type, ptr %t135, i32 0, i32 0
%t137 = load { ptr, i64, i64 }, ptr %t136
store { ptr, i64, i64 } %t137, ptr %a138
store { ptr, i64, i64 } { ptr @.str.3732, i64 6, i64 0 }, ptr %a139
%t140 = call i32 @finch_str_eq(ptr %a138, ptr %a139)
%t141 = icmp ne i32 %t140, 0
br label %logic.from5697
logic.from5697:
br i1 %t141, label %logic.end5699, label %logic.rhs5698
logic.rhs5698:
%t142 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1
%t143 = getelementptr inbounds %S.ast.Type, ptr %t142, i32 0, i32 0
%t144 = load { ptr, i64, i64 }, ptr %t143
store { ptr, i64, i64 } %t144, ptr %a145
store { ptr, i64, i64 } { ptr @.str.3733, i64 5, i64 0 }, ptr %a146
%t147 = call i32 @finch_str_eq(ptr %a145, ptr %a146)
%t148 = icmp ne i32 %t147, 0
br label %logic.rend5700
logic.rend5700:
br label %logic.end5699
logic.end5699:
%t149 = phi i1 [ true, %logic.from5697 ], [ %t148, %logic.rend5700 ]
br label %logic.from5701
logic.from5701:
br i1 %t149, label %logic.rhs5702, label %logic.end5703
logic.rhs5702:
%t150 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t150, ptr %a151
store { ptr, i64, i64 } { ptr @.str.3734, i64 2, i64 0 }, ptr %a152
%t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152)
%t154 = icmp ne i32 %t153, 0
br label %logic.from5704
logic.from5704:
br i1 %t154, label %logic.end5706, label %logic.rhs5705
logic.rhs5705:
%t155 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t155, ptr %a156
store { ptr, i64, i64 } { ptr @.str.3735, i64 2, i64 0 }, ptr %a157
%t158 = call i32 @finch_str_eq(ptr %a156, ptr %a157)
%t159 = icmp ne i32 %t158, 0
br label %logic.rend5707
logic.rend5707:
br label %logic.end5706
logic.end5706:
%t160 = phi i1 [ true, %logic.from5704 ], [ %t159, %logic.rend5707 ]
br label %logic.rend5708
logic.rend5708:
br label %logic.end5703
logic.end5703:
%t161 = phi i1 [ false, %logic.from5701 ], [ %t160, %logic.rend5708 ]
br i1 %t161, label %then5709, label %endif5711
then5709:
%t162 = load { ptr, i64, i64 }, ptr %a22
store { ptr, i64, i64 } %t162, ptr %a164
store { ptr, i64, i64 } { ptr @.str.3736, i64 31, i64 0 }, ptr %a165
call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165)
%t166 = load { ptr, i64, i64 }, ptr %a163
store { ptr, i64, i64 } %t166, ptr %a22
br label %endif5711
endif5711:
%t167 = load ptr, ptr %a1
%t168 = load %S.ast.Node, ptr %a5
%t169 = load { ptr, i64, i64 }, ptr %a22
call void @finch.gen.fail(ptr %t167, %S.ast.Node %t168, { ptr, i64, i64 } %t169)
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
%a95 = alloca { ptr, i64, i64 }, align 16
%a96 = alloca { ptr, i64, i64 }, align 16
%a103 = alloca %S.ast.Type, align 16
%a104 = alloca %S.ast.Type, align 16
%a138 = alloca %S.ast.Type, align 16
%a139 = alloca %S.ast.Type, align 16
%a172 = alloca %S.ast.Type, align 16
%a173 = alloca %S.ast.Type, align 16
%a240 = 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
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 %panic5712, label %ok5713
panic5712:
call void @finch_panic(ptr @.str.3737, i64 3069, ptr @.str.3738)
unreachable
ok5713:
%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 %panic5714, label %ok5715
panic5714:
call void @finch_panic(ptr @.str.3739, i64 3069, ptr @.str.3740)
unreachable
ok5715:
%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 %then5716, label %endif5718
then5716:
ret i1 true
endif5718:
%t13 = load ptr, ptr %a2
%t14 = icmp eq ptr %t13, null
br i1 %t14, label %panic5719, label %ok5720
panic5719:
call void @finch_panic(ptr @.str.3741, i64 3072, ptr @.str.3742)
unreachable
ok5720:
%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.from5721
logic.from5721:
br i1 %t17, label %logic.rhs5722, label %logic.end5723
logic.rhs5722:
%t18 = load ptr, ptr %a3
%t19 = icmp eq ptr %t18, null
br i1 %t19, label %panic5724, label %ok5725
panic5724:
call void @finch_panic(ptr @.str.3743, i64 3072, ptr @.str.3744)
unreachable
ok5725:
%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.rend5726
logic.rend5726:
br label %logic.end5723
logic.end5723:
%t23 = phi i1 [ false, %logic.from5721 ], [ %t22, %logic.rend5726 ]
br i1 %t23, label %then5727, label %endif5729
then5727:
%t24 = load ptr, ptr %a2
%t25 = icmp eq ptr %t24, null
br i1 %t25, label %panic5730, label %ok5731
panic5730:
call void @finch_panic(ptr @.str.3745, i64 3075, ptr @.str.3746)
unreachable
ok5731:
%t26 = getelementptr inbounds %S.gen.Val, ptr %t24, i32 0, i32 3
%t27 = load i1, ptr %t26
br label %logic.from5732
logic.from5732:
br i1 %t27, label %logic.rhs5733, label %logic.end5734
logic.rhs5733:
%t28 = load ptr, ptr %a3
%t29 = icmp eq ptr %t28, null
br i1 %t29, label %panic5735, label %ok5736
panic5735:
call void @finch_panic(ptr @.str.3747, i64 3075, ptr @.str.3748)
unreachable
ok5736:
%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.rend5737
logic.rend5737:
br label %logic.end5734
logic.end5734:
%t33 = phi i1 [ false, %logic.from5732 ], [ %t32, %logic.rend5737 ]
br label %logic.from5738
logic.from5738:
br i1 %t33, label %logic.rhs5739, label %logic.end5740
logic.rhs5739:
%t34 = load ptr, ptr %a2
%t35 = icmp eq ptr %t34, null
br i1 %t35, label %panic5741, label %ok5742
panic5741:
call void @finch_panic(ptr @.str.3749, i64 3075, ptr @.str.3750)
unreachable
ok5742:
%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 %panic5743, label %ok5744
panic5743:
call void @finch_panic(ptr @.str.3751, i64 3075, ptr @.str.3752)
unreachable
ok5744:
%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 %panic5745, label %ok5746
panic5745:
call void @finch_panic(ptr @.str.3753, i64 3075, ptr @.str.3754)
unreachable
ok5746:
%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.rend5747
logic.rend5747:
br label %logic.end5740
logic.end5740:
%t47 = phi i1 [ false, %logic.from5738 ], [ %t46, %logic.rend5747 ]
br i1 %t47, label %then5748, label %endif5750
then5748:
%t48 = load ptr, ptr %a2
%t49 = icmp eq ptr %t48, null
br i1 %t49, label %panic5751, label %ok5752
panic5751:
call void @finch_panic(ptr @.str.3755, i64 3076, ptr @.str.3756)
unreachable
ok5752:
%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 %panic5753, label %ok5754
panic5753:
call void @finch_panic(ptr @.str.3757, i64 3076, ptr @.str.3758)
unreachable
ok5754:
%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 %panic5755, label %ok5756
panic5755:
call void @finch_panic(ptr @.str.3759, i64 3076, ptr @.str.3760)
unreachable
ok5756:
store %S.gen.Val %t64, ptr %t65
ret i1 true
endif5750:
%t67 = load ptr, ptr %a3
%t68 = icmp eq ptr %t67, null
br i1 %t68, label %panic5757, label %ok5758
panic5757:
call void @finch_panic(ptr @.str.3761, i64 3079, ptr @.str.3762)
unreachable
ok5758:
%t69 = getelementptr inbounds %S.gen.Val, ptr %t67, i32 0, i32 3
%t70 = load i1, ptr %t69
br label %logic.from5759
logic.from5759:
br i1 %t70, label %logic.rhs5760, label %logic.end5761
logic.rhs5760:
%t71 = load ptr, ptr %a2
%t72 = icmp eq ptr %t71, null
br i1 %t72, label %panic5762, label %ok5763
panic5762:
call void @finch_panic(ptr @.str.3763, i64 3079, ptr @.str.3764)
unreachable
ok5763:
%t73 = getelementptr inbounds %S.gen.Val, ptr %t71, i32 0, i32 3
%t74 = load i1, ptr %t73
%t75 = xor i1 %t74, true
br label %logic.rend5764
logic.rend5764:
br label %logic.end5761
logic.end5761:
%t76 = phi i1 [ false, %logic.from5759 ], [ %t75, %logic.rend5764 ]
br label %logic.from5765
logic.from5765:
br i1 %t76, label %logic.rhs5766, label %logic.end5767
logic.rhs5766:
%t77 = load ptr, ptr %a3
%t78 = icmp eq ptr %t77, null
br i1 %t78, label %panic5768, label %ok5769
panic5768:
call void @finch_panic(ptr @.str.3765, i64 3079, ptr @.str.3766)
unreachable
ok5769:
%t79 = getelementptr inbounds %S.gen.Val, ptr %t77, i32 0, i32 0
%t80 = load { ptr, i64, i64 }, ptr %t79
%t81 = load ptr, ptr %a3
%t82 = icmp eq ptr %t81, null
br i1 %t82, label %panic5770, label %ok5771
panic5770:
call void @finch_panic(ptr @.str.3767, i64 3079, ptr @.str.3768)
unreachable
ok5771:
%t83 = getelementptr inbounds %S.gen.Val, ptr %t81, i32 0, i32 1
%t84 = load %S.ast.Type, ptr %t83
%t85 = load ptr, ptr %a2
%t86 = icmp eq ptr %t85, null
br i1 %t86, label %panic5772, label %ok5773
panic5772:
call void @finch_panic(ptr @.str.3769, i64 3079, ptr @.str.3770)
unreachable
ok5773:
%t87 = getelementptr inbounds %S.gen.Val, ptr %t85, i32 0, i32 1
%t88 = load %S.ast.Type, ptr %t87
%t89 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t80, %S.ast.Type %t84, %S.ast.Type %t88)
br label %logic.rend5774
logic.rend5774:
br label %logic.end5767
logic.end5767:
%t90 = phi i1 [ false, %logic.from5765 ], [ %t89, %logic.rend5774 ]
br i1 %t90, label %then5775, label %endif5777
then5775:
%t91 = load ptr, ptr %a3
%t92 = icmp eq ptr %t91, null
br i1 %t92, label %panic5778, label %ok5779
panic5778:
call void @finch_panic(ptr @.str.3771, i64 3080, ptr @.str.3772)
unreachable
ok5779:
%t93 = getelementptr inbounds %S.gen.Val, ptr %t91, i32 0, i32 0
%t94 = load { ptr, i64, i64 }, ptr %t93
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.Val zeroinitializer, { ptr, i64, i64 } %t97, 0
%t99 = load ptr, ptr %a2
%t100 = icmp eq ptr %t99, null
br i1 %t100, label %panic5780, label %ok5781
panic5780:
call void @finch_panic(ptr @.str.3773, i64 3080, ptr @.str.3774)
unreachable
ok5781:
%t101 = getelementptr inbounds %S.gen.Val, ptr %t99, i32 0, i32 1
%t102 = load %S.ast.Type, ptr %t101
store %S.ast.Type %t102, ptr %a103
call void @finch.copy.S_ast_Type(ptr %a104, ptr %a103)
%t105 = load %S.ast.Type, ptr %a104
%t106 = insertvalue %S.gen.Val %t98, %S.ast.Type %t105, 1
%t107 = insertvalue %S.gen.Val %t106, i1 true, 3
%t108 = load ptr, ptr %a3
%t109 = icmp eq ptr %t108, null
br i1 %t109, label %panic5782, label %ok5783
panic5782:
call void @finch_panic(ptr @.str.3775, i64 3080, ptr @.str.3776)
unreachable
ok5783:
store %S.gen.Val %t107, ptr %t108
ret i1 true
endif5777:
%t110 = load ptr, ptr %a2
%t111 = icmp eq ptr %t110, null
br i1 %t111, label %panic5784, label %ok5785
panic5784:
call void @finch_panic(ptr @.str.3777, i64 3083, ptr @.str.3778)
unreachable
ok5785:
%t112 = getelementptr inbounds %S.gen.Val, ptr %t110, i32 0, i32 1
%t113 = load %S.ast.Type, ptr %t112
%t114 = load ptr, ptr %a3
%t115 = icmp eq ptr %t114, null
br i1 %t115, label %panic5786, label %ok5787
panic5786:
call void @finch_panic(ptr @.str.3779, i64 3083, ptr @.str.3780)
unreachable
ok5787:
%t116 = getelementptr inbounds %S.gen.Val, ptr %t114, i32 0, i32 1
%t117 = load %S.ast.Type, ptr %t116
%t118 = call i1 @finch.gen.widens(%S.ast.Type %t113, %S.ast.Type %t117)
br i1 %t118, label %then5788, label %endif5790
then5788:
%t119 = load ptr, ptr %a1
%t120 = load ptr, ptr %a2
%t121 = icmp eq ptr %t120, null
br i1 %t121, label %panic5791, label %ok5792
panic5791:
call void @finch_panic(ptr @.str.3781, i64 3084, ptr @.str.3782)
unreachable
ok5792:
%t122 = getelementptr inbounds %S.gen.Val, ptr %t120, i32 0, i32 0
%t123 = load { ptr, i64, i64 }, ptr %t122
%t124 = load ptr, ptr %a2
%t125 = icmp eq ptr %t124, null
br i1 %t125, label %panic5793, label %ok5794
panic5793:
call void @finch_panic(ptr @.str.3783, i64 3084, ptr @.str.3784)
unreachable
ok5794:
%t126 = getelementptr inbounds %S.gen.Val, ptr %t124, i32 0, i32 1
%t127 = load %S.ast.Type, ptr %t126
%t128 = load ptr, ptr %a3
%t129 = icmp eq ptr %t128, null
br i1 %t129, label %panic5795, label %ok5796
panic5795:
call void @finch_panic(ptr @.str.3785, i64 3084, ptr @.str.3786)
unreachable
ok5796:
%t130 = getelementptr inbounds %S.gen.Val, ptr %t128, i32 0, i32 1
%t131 = load %S.ast.Type, ptr %t130
%t132 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t119, { ptr, i64, i64 } %t123, %S.ast.Type %t127, %S.ast.Type %t131)
%t133 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t132, 0
%t134 = load ptr, ptr %a3
%t135 = icmp eq ptr %t134, null
br i1 %t135, label %panic5797, label %ok5798
panic5797:
call void @finch_panic(ptr @.str.3787, i64 3084, ptr @.str.3788)
unreachable
ok5798:
%t136 = getelementptr inbounds %S.gen.Val, ptr %t134, i32 0, i32 1
%t137 = load %S.ast.Type, ptr %t136
store %S.ast.Type %t137, ptr %a138
call void @finch.copy.S_ast_Type(ptr %a139, ptr %a138)
%t140 = load %S.ast.Type, ptr %a139
%t141 = insertvalue %S.gen.Val %t133, %S.ast.Type %t140, 1
%t142 = load ptr, ptr %a2
%t143 = icmp eq ptr %t142, null
br i1 %t143, label %panic5799, label %ok5800
panic5799:
call void @finch_panic(ptr @.str.3789, i64 3084, ptr @.str.3790)
unreachable
ok5800:
store %S.gen.Val %t141, ptr %t142
ret i1 true
endif5790:
%t144 = load ptr, ptr %a3
%t145 = icmp eq ptr %t144, null
br i1 %t145, label %panic5801, label %ok5802
panic5801:
call void @finch_panic(ptr @.str.3791, i64 3087, ptr @.str.3792)
unreachable
ok5802:
%t146 = getelementptr inbounds %S.gen.Val, ptr %t144, i32 0, i32 1
%t147 = load %S.ast.Type, ptr %t146
%t148 = load ptr, ptr %a2
%t149 = icmp eq ptr %t148, null
br i1 %t149, label %panic5803, label %ok5804
panic5803:
call void @finch_panic(ptr @.str.3793, i64 3087, ptr @.str.3794)
unreachable
ok5804:
%t150 = getelementptr inbounds %S.gen.Val, ptr %t148, i32 0, i32 1
%t151 = load %S.ast.Type, ptr %t150
%t152 = call i1 @finch.gen.widens(%S.ast.Type %t147, %S.ast.Type %t151)
br i1 %t152, label %then5805, label %endif5807
then5805:
%t153 = load ptr, ptr %a1
%t154 = load ptr, ptr %a3
%t155 = icmp eq ptr %t154, null
br i1 %t155, label %panic5808, label %ok5809
panic5808:
call void @finch_panic(ptr @.str.3795, i64 3088, ptr @.str.3796)
unreachable
ok5809:
%t156 = getelementptr inbounds %S.gen.Val, ptr %t154, i32 0, i32 0
%t157 = load { ptr, i64, i64 }, ptr %t156
%t158 = load ptr, ptr %a3
%t159 = icmp eq ptr %t158, null
br i1 %t159, label %panic5810, label %ok5811
panic5810:
call void @finch_panic(ptr @.str.3797, i64 3088, ptr @.str.3798)
unreachable
ok5811:
%t160 = getelementptr inbounds %S.gen.Val, ptr %t158, i32 0, i32 1
%t161 = load %S.ast.Type, ptr %t160
%t162 = load ptr, ptr %a2
%t163 = icmp eq ptr %t162, null
br i1 %t163, label %panic5812, label %ok5813
panic5812:
call void @finch_panic(ptr @.str.3799, i64 3088, ptr @.str.3800)
unreachable
ok5813:
%t164 = getelementptr inbounds %S.gen.Val, ptr %t162, i32 0, i32 1
%t165 = load %S.ast.Type, ptr %t164
%t166 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t153, { ptr, i64, i64 } %t157, %S.ast.Type %t161, %S.ast.Type %t165)
%t167 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t166, 0
%t168 = load ptr, ptr %a2
%t169 = icmp eq ptr %t168, null
br i1 %t169, label %panic5814, label %ok5815
panic5814:
call void @finch_panic(ptr @.str.3801, i64 3088, ptr @.str.3802)
unreachable
ok5815:
%t170 = getelementptr inbounds %S.gen.Val, ptr %t168, i32 0, i32 1
%t171 = load %S.ast.Type, ptr %t170
store %S.ast.Type %t171, ptr %a172
call void @finch.copy.S_ast_Type(ptr %a173, ptr %a172)
%t174 = load %S.ast.Type, ptr %a173
%t175 = insertvalue %S.gen.Val %t167, %S.ast.Type %t174, 1
%t176 = load ptr, ptr %a3
%t177 = icmp eq ptr %t176, null
br i1 %t177, label %panic5816, label %ok5817
panic5816:
call void @finch_panic(ptr @.str.3803, i64 3088, ptr @.str.3804)
unreachable
ok5817:
store %S.gen.Val %t175, ptr %t176
ret i1 true
endif5807:
ret i1 false
endif5729:
%t178 = load ptr, ptr %a2
%t179 = icmp eq ptr %t178, null
br i1 %t179, label %panic5818, label %ok5819
panic5818:
call void @finch_panic(ptr @.str.3805, i64 3093, ptr @.str.3806)
unreachable
ok5819:
%t180 = getelementptr inbounds %S.gen.Val, ptr %t178, i32 0, i32 1
%t181 = load %S.ast.Type, ptr %t180
%t182 = call i1 @finch.gen.isInt(%S.ast.Type %t181)
br label %logic.from5820
logic.from5820:
br i1 %t182, label %logic.rhs5821, label %logic.end5822
logic.rhs5821:
%t183 = load ptr, ptr %a3
%t184 = icmp eq ptr %t183, null
br i1 %t184, label %panic5823, label %ok5824
panic5823:
call void @finch_panic(ptr @.str.3807, i64 3093, ptr @.str.3808)
unreachable
ok5824:
%t185 = getelementptr inbounds %S.gen.Val, ptr %t183, i32 0, i32 1
%t186 = load %S.ast.Type, ptr %t185
%t187 = call i1 @finch.gen.isFloat(%S.ast.Type %t186)
br label %logic.rend5825
logic.rend5825:
br label %logic.end5822
logic.end5822:
%t188 = phi i1 [ false, %logic.from5820 ], [ %t187, %logic.rend5825 ]
br i1 %t188, label %then5826, label %endif5828
then5826:
%t189 = load ptr, ptr %a1
%t190 = load ptr, ptr %a2
%t191 = icmp eq ptr %t190, null
br i1 %t191, label %panic5829, label %ok5830
panic5829:
call void @finch_panic(ptr @.str.3809, i64 3094, ptr @.str.3810)
unreachable
ok5830:
%t192 = load %S.gen.Val, ptr %t190
%t193 = load ptr, ptr %a3
%t194 = icmp eq ptr %t193, null
br i1 %t194, label %panic5831, label %ok5832
panic5831:
call void @finch_panic(ptr @.str.3811, i64 3094, ptr @.str.3812)
unreachable
ok5832:
%t195 = getelementptr inbounds %S.gen.Val, ptr %t193, i32 0, i32 1
%t196 = load %S.ast.Type, ptr %t195
%t197 = call %S.ast.Node @finch.gen.Node0()
%t198 = call %S.gen.Val @finch.gen.coerce(ptr %t189, %S.gen.Val %t192, %S.ast.Type %t196, %S.ast.Node %t197, { ptr, i64, i64 } { ptr @.str.3813, i64 0, i64 0 })
%t199 = load ptr, ptr %a2
%t200 = icmp eq ptr %t199, null
br i1 %t200, label %panic5833, label %ok5834
panic5833:
call void @finch_panic(ptr @.str.3814, i64 3094, ptr @.str.3815)
unreachable
ok5834:
store %S.gen.Val %t198, ptr %t199
ret i1 true
endif5828:
%t201 = load ptr, ptr %a2
%t202 = icmp eq ptr %t201, null
br i1 %t202, label %panic5835, label %ok5836
panic5835:
call void @finch_panic(ptr @.str.3816, i64 3097, ptr @.str.3817)
unreachable
ok5836:
%t203 = getelementptr inbounds %S.gen.Val, ptr %t201, i32 0, i32 1
%t204 = load %S.ast.Type, ptr %t203
%t205 = call i1 @finch.gen.isFloat(%S.ast.Type %t204)
br label %logic.from5837
logic.from5837:
br i1 %t205, label %logic.rhs5838, label %logic.end5839
logic.rhs5838:
%t206 = load ptr, ptr %a3
%t207 = icmp eq ptr %t206, null
br i1 %t207, label %panic5840, label %ok5841
panic5840:
call void @finch_panic(ptr @.str.3818, i64 3097, ptr @.str.3819)
unreachable
ok5841:
%t208 = getelementptr inbounds %S.gen.Val, ptr %t206, i32 0, i32 1
%t209 = load %S.ast.Type, ptr %t208
%t210 = call i1 @finch.gen.isInt(%S.ast.Type %t209)
br label %logic.rend5842
logic.rend5842:
br label %logic.end5839
logic.end5839:
%t211 = phi i1 [ false, %logic.from5837 ], [ %t210, %logic.rend5842 ]
br i1 %t211, label %then5843, label %endif5845
then5843:
%t212 = load ptr, ptr %a1
%t213 = load ptr, ptr %a3
%t214 = icmp eq ptr %t213, null
br i1 %t214, label %panic5846, label %ok5847
panic5846:
call void @finch_panic(ptr @.str.3820, i64 3098, ptr @.str.3821)
unreachable
ok5847:
%t215 = load %S.gen.Val, ptr %t213
%t216 = load ptr, ptr %a2
%t217 = icmp eq ptr %t216, null
br i1 %t217, label %panic5848, label %ok5849
panic5848:
call void @finch_panic(ptr @.str.3822, i64 3098, ptr @.str.3823)
unreachable
ok5849:
%t218 = getelementptr inbounds %S.gen.Val, ptr %t216, i32 0, i32 1
%t219 = load %S.ast.Type, ptr %t218
%t220 = call %S.ast.Node @finch.gen.Node0()
%t221 = call %S.gen.Val @finch.gen.coerce(ptr %t212, %S.gen.Val %t215, %S.ast.Type %t219, %S.ast.Node %t220, { ptr, i64, i64 } { ptr @.str.3824, i64 0, i64 0 })
%t222 = load ptr, ptr %a3
%t223 = icmp eq ptr %t222, null
br i1 %t223, label %panic5850, label %ok5851
panic5850:
call void @finch_panic(ptr @.str.3825, i64 3098, ptr @.str.3826)
unreachable
ok5851:
store %S.gen.Val %t221, ptr %t222
ret i1 true
endif5845:
%t224 = load ptr, ptr %a2
%t225 = icmp eq ptr %t224, null
br i1 %t225, label %panic5852, label %ok5853
panic5852:
call void @finch_panic(ptr @.str.3827, i64 3101, ptr @.str.3828)
unreachable
ok5853:
%t226 = getelementptr inbounds %S.gen.Val, ptr %t224, i32 0, i32 1
%t227 = load %S.ast.Type, ptr %t226
%t228 = call i1 @finch.gen.isFloat(%S.ast.Type %t227)
br label %logic.from5854
logic.from5854:
br i1 %t228, label %logic.rhs5855, label %logic.end5856
logic.rhs5855:
%t229 = load ptr, ptr %a3
%t230 = icmp eq ptr %t229, null
br i1 %t230, label %panic5857, label %ok5858
panic5857:
call void @finch_panic(ptr @.str.3829, i64 3101, ptr @.str.3830)
unreachable
ok5858:
%t231 = getelementptr inbounds %S.gen.Val, ptr %t229, i32 0, i32 1
%t232 = load %S.ast.Type, ptr %t231
%t233 = call i1 @finch.gen.isFloat(%S.ast.Type %t232)
br label %logic.rend5859
logic.rend5859:
br label %logic.end5856
logic.end5856:
%t234 = phi i1 [ false, %logic.from5854 ], [ %t233, %logic.rend5859 ]
br i1 %t234, label %then5860, label %endif5862
then5860:
%t235 = load ptr, ptr %a2
%t236 = icmp eq ptr %t235, null
br i1 %t236, label %panic5863, label %ok5864
panic5863:
call void @finch_panic(ptr @.str.3831, i64 3102, ptr @.str.3832)
unreachable
ok5864:
%t237 = getelementptr inbounds %S.gen.Val, ptr %t235, i32 0, i32 1
%t238 = getelementptr inbounds %S.ast.Type, ptr %t237, i32 0, i32 0
%t239 = load { ptr, i64, i64 }, ptr %t238
store { ptr, i64, i64 } %t239, ptr %a240
store { ptr, i64, i64 } { ptr @.str.3833, i64 3, i64 0 }, ptr %a241
%t242 = call i32 @finch_str_eq(ptr %a240, ptr %a241)
%t243 = icmp ne i32 %t242, 0
br i1 %t243, label %then5865, label %endif5867
then5865:
%t244 = load ptr, ptr %a1
%t245 = load ptr, ptr %a2
%t246 = icmp eq ptr %t245, null
br i1 %t246, label %panic5868, label %ok5869
panic5868:
call void @finch_panic(ptr @.str.3834, i64 3103, ptr @.str.3835)
unreachable
ok5869:
%t247 = getelementptr inbounds %S.gen.Val, ptr %t245, i32 0, i32 0
%t248 = load { ptr, i64, i64 }, ptr %t247
%t249 = load ptr, ptr %a2
%t250 = icmp eq ptr %t249, null
br i1 %t250, label %panic5870, label %ok5871
panic5870:
call void @finch_panic(ptr @.str.3836, i64 3103, ptr @.str.3837)
unreachable
ok5871:
%t251 = getelementptr inbounds %S.gen.Val, ptr %t249, i32 0, i32 1
%t252 = load %S.ast.Type, ptr %t251
%t253 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3838, i64 5, i64 0 })
%t254 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t244, { ptr, i64, i64 } %t248, %S.ast.Type %t252, %S.ast.Type %t253)
%t255 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t254, 0
%t256 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3839, i64 5, i64 0 })
%t257 = insertvalue %S.gen.Val %t255, %S.ast.Type %t256, 1
%t258 = load ptr, ptr %a2
%t259 = icmp eq ptr %t258, null
br i1 %t259, label %panic5872, label %ok5873
panic5872:
call void @finch_panic(ptr @.str.3840, i64 3103, ptr @.str.3841)
unreachable
ok5873:
store %S.gen.Val %t257, ptr %t258
br label %endif5867
endif5867:
%t260 = load ptr, ptr %a3
%t261 = icmp eq ptr %t260, null
br i1 %t261, label %panic5874, label %ok5875
panic5874:
call void @finch_panic(ptr @.str.3842, i64 3105, ptr @.str.3843)
unreachable
ok5875:
%t262 = getelementptr inbounds %S.gen.Val, ptr %t260, i32 0, i32 1
%t263 = getelementptr inbounds %S.ast.Type, ptr %t262, i32 0, i32 0
%t264 = load { ptr, i64, i64 }, ptr %t263
store { ptr, i64, i64 } %t264, ptr %a265
store { ptr, i64, i64 } { ptr @.str.3844, i64 3, i64 0 }, ptr %a266
%t267 = call i32 @finch_str_eq(ptr %a265, ptr %a266)
%t268 = icmp ne i32 %t267, 0
br i1 %t268, label %then5876, label %endif5878
then5876:
%t269 = load ptr, ptr %a1
%t270 = load ptr, ptr %a3
%t271 = icmp eq ptr %t270, null
br i1 %t271, label %panic5879, label %ok5880
panic5879:
call void @finch_panic(ptr @.str.3845, i64 3106, ptr @.str.3846)
unreachable
ok5880:
%t272 = getelementptr inbounds %S.gen.Val, ptr %t270, i32 0, i32 0
%t273 = load { ptr, i64, i64 }, ptr %t272
%t274 = load ptr, ptr %a3
%t275 = icmp eq ptr %t274, null
br i1 %t275, label %panic5881, label %ok5882
panic5881:
call void @finch_panic(ptr @.str.3847, i64 3106, ptr @.str.3848)
unreachable
ok5882:
%t276 = getelementptr inbounds %S.gen.Val, ptr %t274, i32 0, i32 1
%t277 = load %S.ast.Type, ptr %t276
%t278 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3849, i64 5, i64 0 })
%t279 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t269, { ptr, i64, i64 } %t273, %S.ast.Type %t277, %S.ast.Type %t278)
%t280 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t279, 0
%t281 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3850, i64 5, i64 0 })
%t282 = insertvalue %S.gen.Val %t280, %S.ast.Type %t281, 1
%t283 = load ptr, ptr %a3
%t284 = icmp eq ptr %t283, null
br i1 %t284, label %panic5883, label %ok5884
panic5883:
call void @finch_panic(ptr @.str.3851, i64 3106, ptr @.str.3852)
unreachable
ok5884:
store %S.gen.Val %t282, ptr %t283
br label %endif5878
endif5878:
ret i1 true
endif5862:
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
%a49 = alloca { ptr, i64, i64 }, align 16
%a50 = alloca { ptr, i64, i64 }, align 16
%a51 = 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
%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
%a101 = alloca { ptr, i64, i64 }, align 16
%a117 = alloca { ptr, i64, i64 }, align 16
%a138 = alloca i64, align 16
%a141 = alloca i64, align 16
%a146 = alloca { ptr, i64, i64 }, align 16
%a147 = alloca { ptr, i64, i64 }, align 16
%a152 = alloca i64, align 16
%a164 = 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
%a180 = alloca { ptr, i64, i64 }, align 16
%a181 = 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
%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
%a207 = alloca { ptr, i64, i64 }, align 16
%a208 = alloca { ptr, i64, i64 }, align 16
%a209 = 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
%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
%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
%a246 = alloca { ptr, i64, i64 }, align 16
%a247 = alloca { ptr, i64, i64 }, align 16
%a248 = alloca { ptr, i64, i64 }, align 16
%a254 = alloca %S.ast.Type, align 16
%a255 = alloca %S.ast.Type, align 16
%a271 = alloca { ptr, i64, i64 }, align 16
%a282 = alloca { ptr, i64, i64 }, align 16
%a285 = alloca i64, align 16
%a288 = alloca i64, align 16
%a293 = alloca { ptr, i64, i64 }, align 16
%a294 = alloca { ptr, i64, i64 }, align 16
%a299 = alloca i64, align 16
%a315 = alloca { ptr, i64, i64 }, align 16
%a316 = alloca { ptr, i64, i64 }, align 16
%a317 = 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
%a328 = alloca { ptr, i64, i64 }, align 16
%a329 = 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
%a343 = alloca { ptr, i64, i64 }, align 16
%a344 = alloca { ptr, i64, i64 }, align 16
%a345 = alloca { ptr, i64, i64 }, align 16
%a351 = alloca %S.ast.Type, align 16
%a352 = alloca %S.ast.Type, align 16
%a361 = alloca %S.gen.Val, align 16
%a362 = alloca %S.gen.Val, 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.3853, 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.from5885
logic.from5885:
br i1 %t16, label %logic.rhs5886, label %logic.end5887
logic.rhs5886:
%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.3854, 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.rend5888
logic.rend5888:
br label %logic.end5887
logic.end5887:
%t24 = phi i1 [ false, %logic.from5885 ], [ %t23, %logic.rend5888 ]
br label %logic.from5889
logic.from5889:
br i1 %t24, label %logic.rhs5890, label %logic.end5891
logic.rhs5890:
%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.3855, 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.rend5892
logic.rend5892:
br label %logic.end5891
logic.end5891:
%t32 = phi i1 [ false, %logic.from5889 ], [ %t31, %logic.rend5892 ]
br i1 %t32, label %then5893, label %endif5895
then5893:
%t33 = load ptr, ptr %a1
%t34 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t33, { ptr, i64, i64 } { ptr @.str.3856, 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.3857, 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.3858, i64 6, i64 0 }, ptr %a44
call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44)
%t45 = load { ptr, i64, i64 }, ptr %a42
%t46 = load ptr, ptr %a1
%t47 = load %S.gen.Val, ptr %a6
%t48 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t46, %S.gen.Val %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)
%t52 = load { ptr, i64, i64 }, ptr %a49
store { ptr, i64, i64 } %t52, ptr %a54
store { ptr, i64, i64 } { ptr @.str.3859, i64 6, i64 0 }, ptr %a55
call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55)
%t56 = load { ptr, i64, i64 }, ptr %a53
%t57 = load ptr, ptr %a1
%t58 = load %S.gen.Val, ptr %a10
%t59 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t57, %S.gen.Val %t58)
store { ptr, i64, i64 } %t56, 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.3860, i64 1, i64 0 }, ptr %a66
call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66)
%t67 = load { ptr, i64, i64 }, ptr %a64
call void @finch.gen.emit(ptr %t36, { ptr, i64, i64 } %t67)
%t68 = load ptr, ptr %a1
%t69 = load { ptr, i64, i64 }, ptr %a35
%t70 = call { ptr, i64, i64 } @finch.gen.load(ptr %t68, { ptr, i64, i64 } { ptr @.str.3861, i64 17, i64 0 }, { ptr, i64, i64 } %t69)
%t71 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t70, 0
%t72 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3862, i64 3, i64 0 })
%t73 = insertvalue %S.gen.Val %t71, %S.ast.Type %t72, 1
%t74 = insertvalue %S.gen.Val %t73, i1 true, 2
ret %S.gen.Val %t74
endif5895:
%t75 = load ptr, ptr %a1
%t76 = call i1 @finch.gen.unify(ptr %t75, ptr %a6, ptr %a10)
%t77 = xor i1 %t76, true
br i1 %t77, label %then5896, label %endif5898
then5896:
%t78 = load ptr, ptr %a1
%t79 = load { ptr, i64, i64 }, ptr %a2
%t80 = load %S.gen.Val, ptr %a6
%t81 = load %S.gen.Val, ptr %a10
%t82 = load %S.ast.Node, ptr %a11
call void @finch.gen.badOperands(ptr %t78, { ptr, i64, i64 } %t79, %S.gen.Val %t80, %S.gen.Val %t81, %S.ast.Node %t82)
br label %endif5898
endif5898:
%t83 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1
%t84 = load %S.ast.Type, ptr %t83
%t85 = call i1 @finch.gen.isInt(%S.ast.Type %t84)
br i1 %t85, label %then5899, label %endif5901
then5899:
%t86 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)
%t87 = call ptr @finch_alloc(i64 %t86)
%t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 0
store { ptr, i64, i64 } { ptr @.str.3863, i64 1, i64 0 }, ptr %t88
%t89 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 1
store { ptr, i64, i64 } { ptr @.str.3864, i64 1, i64 0 }, ptr %t89
%t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 2
store { ptr, i64, i64 } { ptr @.str.3865, i64 1, i64 0 }, ptr %t90
%t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 3
store { ptr, i64, i64 } { ptr @.str.3866, i64 1, i64 0 }, ptr %t91
%t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 4
store { ptr, i64, i64 } { ptr @.str.3867, i64 1, i64 0 }, ptr %t92
%t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 5
store { ptr, i64, i64 } { ptr @.str.3868, i64 1, i64 0 }, ptr %t93
%t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 6
store { ptr, i64, i64 } { ptr @.str.3869, i64 1, i64 0 }, ptr %t94
%t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 7
store { ptr, i64, i64 } { ptr @.str.3870, i64 1, i64 0 }, ptr %t95
%t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 8
store { ptr, i64, i64 } { ptr @.str.3871, i64 2, i64 0 }, ptr %t96
%t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 9
store { ptr, i64, i64 } { ptr @.str.3872, i64 2, i64 0 }, ptr %t97
%t98 = insertvalue { ptr, i64, i64 } undef, ptr %t87, 0
%t99 = insertvalue { ptr, i64, i64 } %t98, i64 10, 1
%t100 = insertvalue { ptr, i64, i64 } %t99, i64 10, 2
store { ptr, i64, i64 } %t100, ptr %a101
%t102 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)
%t103 = call ptr @finch_alloc(i64 %t102)
%t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 0
store { ptr, i64, i64 } { ptr @.str.3873, i64 3, i64 0 }, ptr %t104
%t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 1
store { ptr, i64, i64 } { ptr @.str.3874, i64 3, i64 0 }, ptr %t105
%t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 2
store { ptr, i64, i64 } { ptr @.str.3875, i64 3, i64 0 }, ptr %t106
%t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 3
store { ptr, i64, i64 } { ptr @.str.3876, i64 4, i64 0 }, ptr %t107
%t108 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 4
store { ptr, i64, i64 } { ptr @.str.3877, i64 4, i64 0 }, ptr %t108
%t109 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 5
store { ptr, i64, i64 } { ptr @.str.3878, i64 3, i64 0 }, ptr %t109
%t110 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 6
store { ptr, i64, i64 } { ptr @.str.3879, i64 2, i64 0 }, ptr %t110
%t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 7
store { ptr, i64, i64 } { ptr @.str.3880, i64 3, i64 0 }, ptr %t111
%t112 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 8
store { ptr, i64, i64 } { ptr @.str.3881, i64 3, i64 0 }, ptr %t112
%t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 9
store { ptr, i64, i64 } { ptr @.str.3882, i64 4, i64 0 }, ptr %t113
%t114 = insertvalue { ptr, i64, i64 } undef, ptr %t103, 0
%t115 = insertvalue { ptr, i64, i64 } %t114, i64 10, 1
%t116 = insertvalue { ptr, i64, i64 } %t115, i64 10, 2
store { ptr, i64, i64 } %t116, ptr %a117
%t118 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1
%t119 = load %S.ast.Type, ptr %t118
%t120 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t119)
br i1 %t120, label %then5902, label %endif5904
then5902:
%t121 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)
%t122 = call ptr @finch_alloc(i64 %t121)
%t123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 0
store { ptr, i64, i64 } { ptr @.str.3883, i64 3, i64 0 }, ptr %t123
%t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 1
store { ptr, i64, i64 } { ptr @.str.3884, i64 3, i64 0 }, ptr %t124
%t125 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 2
store { ptr, i64, i64 } { ptr @.str.3885, i64 3, i64 0 }, ptr %t125
%t126 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 3
store { ptr, i64, i64 } { ptr @.str.3886, i64 4, i64 0 }, ptr %t126
%t127 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 4
store { ptr, i64, i64 } { ptr @.str.3887, i64 4, i64 0 }, ptr %t127
%t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 5
store { ptr, i64, i64 } { ptr @.str.3888, i64 3, i64 0 }, ptr %t128
%t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 6
store { ptr, i64, i64 } { ptr @.str.3889, i64 2, i64 0 }, ptr %t129
%t130 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 7
store { ptr, i64, i64 } { ptr @.str.3890, i64 3, i64 0 }, ptr %t130
%t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 8
store { ptr, i64, i64 } { ptr @.str.3891, i64 3, i64 0 }, ptr %t131
%t132 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 9
store { ptr, i64, i64 } { ptr @.str.3892, i64 4, i64 0 }, ptr %t132
%t133 = insertvalue { ptr, i64, i64 } undef, ptr %t122, 0
%t134 = insertvalue { ptr, i64, i64 } %t133, i64 10, 1
%t135 = insertvalue { ptr, i64, i64 } %t134, i64 10, 2
store { ptr, i64, i64 } %t135, ptr %a117
br label %endif5904
endif5904:
%t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %a101, i32 0, i32 1
%t137 = load { ptr, i64, i64 }, ptr %a2
store i64 -1, ptr %a138
%t139 = load i64, ptr %t136
%t140 = load ptr, ptr %a101
store i64 0, ptr %a141
br label %find.cond5905
find.cond5905:
%t142 = load i64, ptr %a141
%t143 = icmp slt i64 %t142, %t139
br i1 %t143, label %find.body5906, label %find.end5909
find.body5906:
%t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t140, i64 %t142
%t145 = load { ptr, i64, i64 }, ptr %t144
store { ptr, i64, i64 } %t145, ptr %a146
store { ptr, i64, i64 } %t137, ptr %a147
%t148 = call i32 @finch_str_eq(ptr %a146, ptr %a147)
%t149 = icmp ne i32 %t148, 0
br i1 %t149, label %find.hit5907, label %find.next5908
find.hit5907:
store i64 %t142, ptr %a138
br label %find.end5909
find.next5908:
%t150 = add i64 %t142, 1
store i64 %t150, ptr %a141
br label %find.cond5905
find.end5909:
%t151 = load i64, ptr %a138
store i64 %t151, ptr %a152
%t153 = load i64, ptr %a152
%t154 = icmp slt i64 %t153, 0
br i1 %t154, label %then5910, label %endif5912
then5910:
%t155 = load ptr, ptr %a1
%t156 = load { ptr, i64, i64 }, ptr %a2
%t157 = load %S.gen.Val, ptr %a6
%t158 = load %S.gen.Val, ptr %a10
%t159 = load %S.ast.Node, ptr %a11
call void @finch.gen.badOperands(ptr %t155, { ptr, i64, i64 } %t156, %S.gen.Val %t157, %S.gen.Val %t158, %S.ast.Node %t159)
br label %endif5912
endif5912:
%t160 = load ptr, ptr %a1
%t161 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1
%t162 = load %S.ast.Type, ptr %t161
%t163 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t160, %S.ast.Type %t162)
store { ptr, i64, i64 } %t163, ptr %a164
%t165 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t165, ptr %a166
store { ptr, i64, i64 } { ptr @.str.3893, i64 1, i64 0 }, ptr %a167
%t168 = call i32 @finch_str_eq(ptr %a166, ptr %a167)
%t169 = icmp ne i32 %t168, 0
br label %logic.from5913
logic.from5913:
br i1 %t169, label %logic.end5915, label %logic.rhs5914
logic.rhs5914:
%t170 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t170, ptr %a171
store { ptr, i64, i64 } { ptr @.str.3894, i64 1, i64 0 }, ptr %a172
%t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172)
%t174 = icmp ne i32 %t173, 0
br label %logic.rend5916
logic.rend5916:
br label %logic.end5915
logic.end5915:
%t175 = phi i1 [ true, %logic.from5913 ], [ %t174, %logic.rend5916 ]
br i1 %t175, label %then5917, label %endif5919
then5917:
%t176 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 3
%t177 = load i1, ptr %t176
br label %logic.from5920
logic.from5920:
br i1 %t177, label %logic.rhs5921, label %logic.end5922
logic.rhs5921:
%t178 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0
%t179 = load { ptr, i64, i64 }, ptr %t178
store { ptr, i64, i64 } %t179, ptr %a180
store { ptr, i64, i64 } { ptr @.str.3895, 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.rend5923
logic.rend5923:
br label %logic.end5922
logic.end5922:
%t184 = phi i1 [ false, %logic.from5920 ], [ %t183, %logic.rend5923 ]
br i1 %t184, label %then5924, label %endif5926
then5924:
%t185 = load ptr, ptr %a1
%t186 = load %S.ast.Node, ptr %a11
call void @finch.gen.fail(ptr %t185, %S.ast.Node %t186, { ptr, i64, i64 } { ptr @.str.3896, i64 16, i64 0 })
br label %endif5926
endif5926:
%t187 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 3
%t188 = load i1, ptr %t187
%t189 = xor i1 %t188, true
br i1 %t189, label %then5927, label %endif5929
then5927:
%t190 = load ptr, ptr %a1
%t191 = load ptr, ptr %a1
%t192 = load { ptr, i64, i64 }, ptr %a164
store { ptr, i64, i64 } { ptr @.str.3897, i64 8, i64 0 }, ptr %a194
store { ptr, i64, i64 } %t192, ptr %a195
call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195)
%t196 = load { ptr, i64, i64 }, ptr %a193
store { ptr, i64, i64 } %t196, ptr %a198
store { ptr, i64, i64 } { ptr @.str.3898, i64 1, i64 0 }, ptr %a199
call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199)
%t200 = load { ptr, i64, i64 }, ptr %a197
%t201 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0
%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)
%t206 = load { ptr, i64, i64 }, ptr %a203
store { ptr, i64, i64 } %t206, ptr %a208
store { ptr, i64, i64 } { ptr @.str.3899, i64 3, i64 0 }, ptr %a209
call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209)
%t210 = load { ptr, i64, i64 }, ptr %a207
%t211 = call { ptr, i64, i64 } @finch.gen.op(ptr %t191, { ptr, i64, i64 } %t210)
%t212 = load %S.ast.Node, ptr %a11
call void @finch.gen.panicIf(ptr %t190, { ptr, i64, i64 } %t211, { ptr, i64, i64 } { ptr @.str.3900, i64 16, i64 0 }, %S.ast.Node %t212)
br label %endif5929
endif5929:
br label %endif5919
endif5919:
%t213 = load ptr, ptr %a1
%t214 = load i64, ptr %a152
%t215 = load { ptr, i64, i64 }, ptr %a117
%t216 = extractvalue { ptr, i64, i64 } %t215, 1
%t217 = icmp uge i64 %t214, %t216
br i1 %t217, label %range5930, label %inrange5931
range5930:
call void @finch_panic_index(ptr @.str.3901, i64 3145, i64 %t214, i64 %t216)
unreachable
inrange5931:
%t218 = extractvalue { ptr, i64, i64 } %t215, 0
%t219 = getelementptr inbounds { ptr, i64, i64 }, ptr %t218, i64 %t214
%t220 = load { ptr, i64, i64 }, ptr %t219
store { ptr, i64, i64 } %t220, ptr %a222
store { ptr, i64, i64 } { ptr @.str.3902, i64 1, i64 0 }, ptr %a223
call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223)
%t224 = load { ptr, i64, i64 }, ptr %a221
%t225 = load { ptr, i64, i64 }, ptr %a164
store { ptr, i64, i64 } %t224, ptr %a227
store { ptr, i64, i64 } %t225, ptr %a228
call void @finch_str_concat(ptr %a226, ptr %a227, ptr %a228)
%t229 = load { ptr, i64, i64 }, ptr %a226
store { ptr, i64, i64 } %t229, ptr %a231
store { ptr, i64, i64 } { ptr @.str.3903, i64 1, i64 0 }, ptr %a232
call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232)
%t233 = load { ptr, i64, i64 }, ptr %a230
%t234 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0
%t235 = load { ptr, i64, i64 }, ptr %t234
store { ptr, i64, i64 } %t233, ptr %a237
store { ptr, i64, i64 } %t235, ptr %a238
call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238)
%t239 = load { ptr, i64, i64 }, ptr %a236
store { ptr, i64, i64 } %t239, ptr %a241
store { ptr, i64, i64 } { ptr @.str.3904, i64 2, i64 0 }, ptr %a242
call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242)
%t243 = load { ptr, i64, i64 }, ptr %a240
%t244 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0
%t245 = load { ptr, i64, i64 }, 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)
%t249 = load { ptr, i64, i64 }, ptr %a246
%t250 = call { ptr, i64, i64 } @finch.gen.op(ptr %t213, { ptr, i64, i64 } %t249)
%t251 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t250, 0
%t252 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1
%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 %t251, %S.ast.Type %t256, 1
ret %S.gen.Val %t257
endif5901:
%t258 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1
%t259 = load %S.ast.Type, ptr %t258
%t260 = call i1 @finch.gen.isFloat(%S.ast.Type %t259)
br i1 %t260, label %then5932, label %endif5934
then5932:
%t261 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)
%t262 = call ptr @finch_alloc(i64 %t261)
%t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 0
store { ptr, i64, i64 } { ptr @.str.3905, i64 1, i64 0 }, ptr %t263
%t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 1
store { ptr, i64, i64 } { ptr @.str.3906, i64 1, i64 0 }, ptr %t264
%t265 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 2
store { ptr, i64, i64 } { ptr @.str.3907, i64 1, i64 0 }, ptr %t265
%t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 3
store { ptr, i64, i64 } { ptr @.str.3908, i64 1, i64 0 }, ptr %t266
%t267 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 4
store { ptr, i64, i64 } { ptr @.str.3909, i64 1, i64 0 }, ptr %t267
%t268 = insertvalue { ptr, i64, i64 } undef, ptr %t262, 0
%t269 = insertvalue { ptr, i64, i64 } %t268, i64 5, 1
%t270 = insertvalue { ptr, i64, i64 } %t269, i64 5, 2
store { ptr, i64, i64 } %t270, ptr %a271
%t272 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)
%t273 = call ptr @finch_alloc(i64 %t272)
%t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 0
store { ptr, i64, i64 } { ptr @.str.3910, i64 4, i64 0 }, ptr %t274
%t275 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 1
store { ptr, i64, i64 } { ptr @.str.3911, i64 4, i64 0 }, ptr %t275
%t276 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 2
store { ptr, i64, i64 } { ptr @.str.3912, i64 4, i64 0 }, ptr %t276
%t277 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 3
store { ptr, i64, i64 } { ptr @.str.3913, i64 4, i64 0 }, ptr %t277
%t278 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 4
store { ptr, i64, i64 } { ptr @.str.3914, i64 4, i64 0 }, ptr %t278
%t279 = insertvalue { ptr, i64, i64 } undef, ptr %t273, 0
%t280 = insertvalue { ptr, i64, i64 } %t279, i64 5, 1
%t281 = insertvalue { ptr, i64, i64 } %t280, i64 5, 2
store { ptr, i64, i64 } %t281, ptr %a282
%t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %a271, i32 0, i32 1
%t284 = load { ptr, i64, i64 }, ptr %a2
store i64 -1, ptr %a285
%t286 = load i64, ptr %t283
%t287 = load ptr, ptr %a271
store i64 0, ptr %a288
br label %find.cond5935
find.cond5935:
%t289 = load i64, ptr %a288
%t290 = icmp slt i64 %t289, %t286
br i1 %t290, label %find.body5936, label %find.end5939
find.body5936:
%t291 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 %t289
%t292 = load { ptr, i64, i64 }, ptr %t291
store { ptr, i64, i64 } %t292, ptr %a293
store { ptr, i64, i64 } %t284, ptr %a294
%t295 = call i32 @finch_str_eq(ptr %a293, ptr %a294)
%t296 = icmp ne i32 %t295, 0
br i1 %t296, label %find.hit5937, label %find.next5938
find.hit5937:
store i64 %t289, ptr %a285
br label %find.end5939
find.next5938:
%t297 = add i64 %t289, 1
store i64 %t297, ptr %a288
br label %find.cond5935
find.end5939:
%t298 = load i64, ptr %a285
store i64 %t298, ptr %a299
%t300 = load i64, ptr %a299
%t301 = icmp slt i64 %t300, 0
br i1 %t301, label %then5940, label %endif5942
then5940:
%t302 = load ptr, ptr %a1
%t303 = load { ptr, i64, i64 }, ptr %a2
%t304 = load %S.gen.Val, ptr %a6
%t305 = load %S.gen.Val, ptr %a10
%t306 = load %S.ast.Node, ptr %a11
call void @finch.gen.badOperands(ptr %t302, { ptr, i64, i64 } %t303, %S.gen.Val %t304, %S.gen.Val %t305, %S.ast.Node %t306)
br label %endif5942
endif5942:
%t307 = load ptr, ptr %a1
%t308 = load i64, ptr %a299
%t309 = load { ptr, i64, i64 }, ptr %a282
%t310 = extractvalue { ptr, i64, i64 } %t309, 1
%t311 = icmp uge i64 %t308, %t310
br i1 %t311, label %range5943, label %inrange5944
range5943:
call void @finch_panic_index(ptr @.str.3915, i64 3154, i64 %t308, i64 %t310)
unreachable
inrange5944:
%t312 = extractvalue { ptr, i64, i64 } %t309, 0
%t313 = getelementptr inbounds { ptr, i64, i64 }, ptr %t312, i64 %t308
%t314 = load { ptr, i64, i64 }, ptr %t313
store { ptr, i64, i64 } %t314, ptr %a316
store { ptr, i64, i64 } { ptr @.str.3916, i64 1, i64 0 }, ptr %a317
call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317)
%t318 = load { ptr, i64, i64 }, ptr %a315
%t319 = load ptr, ptr %a1
%t320 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1
%t321 = load %S.ast.Type, ptr %t320
%t322 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t319, %S.ast.Type %t321)
store { ptr, i64, i64 } %t318, ptr %a324
store { ptr, i64, i64 } %t322, ptr %a325
call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325)
%t326 = load { ptr, i64, i64 }, ptr %a323
store { ptr, i64, i64 } %t326, ptr %a328
store { ptr, i64, i64 } { ptr @.str.3917, i64 1, i64 0 }, ptr %a329
call void @finch_str_concat(ptr %a327, ptr %a328, ptr %a329)
%t330 = load { ptr, i64, i64 }, ptr %a327
%t331 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0
%t332 = load { ptr, i64, i64 }, ptr %t331
store { ptr, i64, i64 } %t330, 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.3918, i64 2, i64 0 }, ptr %a339
call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339)
%t340 = load { ptr, i64, i64 }, ptr %a337
%t341 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0
%t342 = load { ptr, i64, i64 }, ptr %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)
%t346 = load { ptr, i64, i64 }, ptr %a343
%t347 = call { ptr, i64, i64 } @finch.gen.op(ptr %t307, { ptr, i64, i64 } %t346)
%t348 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t347, 0
%t349 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1
%t350 = load %S.ast.Type, ptr %t349
store %S.ast.Type %t350, ptr %a351
call void @finch.copy.S_ast_Type(ptr %a352, ptr %a351)
%t353 = load %S.ast.Type, ptr %a352
%t354 = insertvalue %S.gen.Val %t348, %S.ast.Type %t353, 1
ret %S.gen.Val %t354
endif5934:
%t355 = load ptr, ptr %a1
%t356 = load { ptr, i64, i64 }, ptr %a2
%t357 = load %S.gen.Val, ptr %a6
%t358 = load %S.gen.Val, ptr %a10
%t359 = load %S.ast.Node, ptr %a11
call void @finch.gen.badOperands(ptr %t355, { ptr, i64, i64 } %t356, %S.gen.Val %t357, %S.gen.Val %t358, %S.ast.Node %t359)
%t360 = load %S.gen.Val, ptr %a6
store %S.gen.Val %t360, ptr %a361
call void @finch.copy.S_gen_Val(ptr %a362, ptr %a361)
%t363 = load %S.gen.Val, ptr %a362
ret %S.gen.Val %t363
}
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
%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
%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
%a107 = alloca { ptr, i64, i64 }, align 16
%a108 = alloca { ptr, i64, i64 }, align 16
%a109 = alloca { ptr, i64, i64 }, align 16
%a118 = alloca { ptr, i64, i64 }, align 16
%a119 = alloca { ptr, i64, i64 }, align 16
%a125 = alloca { ptr, i64, i64 }, align 16
%a126 = 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
%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
%a150 = alloca { ptr, i64, i64 }, align 16
%a151 = alloca { ptr, i64, i64 }, align 16
%a152 = 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
%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
%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
%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
%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
%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
%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
%a226 = alloca { ptr, i64, i64 }, align 16
%a227 = alloca { ptr, i64, i64 }, align 16
%a228 = alloca { ptr, i64, i64 }, align 16
%a245 = alloca { ptr, i64, i64 }, align 16
%a246 = alloca { ptr, i64, i64 }, align 16
%a248 = alloca { ptr, i64, i64 }, align 16
%a263 = alloca { ptr, i64, i64 }, align 16
%a275 = alloca { ptr, i64, i64 }, align 16
%a279 = alloca i64, align 16
%a282 = alloca i64, align 16
%a287 = alloca { ptr, i64, i64 }, align 16
%a288 = 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
%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
%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
%a331 = alloca { ptr, i64, i64 }, align 16
%a332 = alloca { ptr, i64, i64 }, align 16
%a333 = alloca { ptr, i64, i64 }, align 16
%a340 = alloca { ptr, i64, i64 }, align 16
%a341 = 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
%a356 = alloca { ptr, i64, i64 }, align 16
%a357 = alloca { ptr, i64, i64 }, align 16
%a358 = 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
%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
%a376 = alloca { ptr, i64, i64 }, align 16
%a377 = alloca { ptr, i64, i64 }, align 16
%a378 = alloca { ptr, i64, i64 }, align 16
%a385 = alloca { ptr, i64, i64 }, align 16
%a386 = alloca { ptr, i64, i64 }, align 16
%a402 = alloca { ptr, i64, i64 }, align 16
%a403 = 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
%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
%a436 = alloca { ptr, i64, i64 }, align 16
%a437 = alloca { ptr, i64, i64 }, align 16
%a438 = 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
%a446 = alloca { ptr, i64, i64 }, align 16
%a447 = alloca { ptr, i64, i64 }, align 16
%a448 = 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
%a456 = alloca { ptr, i64, i64 }, align 16
%a457 = alloca { ptr, i64, i64 }, align 16
%a458 = 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.3919, 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.from5945
logic.from5945:
br i1 %t16, label %logic.end5947, label %logic.rhs5946
logic.rhs5946:
%t17 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t17, ptr %a18
store { ptr, i64, i64 } { ptr @.str.3920, 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.rend5948
logic.rend5948:
br label %logic.end5947
logic.end5947:
%t22 = phi i1 [ true, %logic.from5945 ], [ %t21, %logic.rend5948 ]
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.3921, 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.from5949
logic.from5949:
br i1 %t30, label %logic.end5951, label %logic.rhs5950
logic.rhs5950:
%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.3922, 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.rend5952
logic.rend5952:
br label %logic.end5951
logic.end5951:
%t38 = phi i1 [ true, %logic.from5949 ], [ %t37, %logic.rend5952 ]
br label %logic.from5953
logic.from5953:
br i1 %t38, label %logic.end5955, label %logic.rhs5954
logic.rhs5954:
%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.3923, 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.rend5956
logic.rend5956:
br label %logic.end5955
logic.end5955:
%t46 = phi i1 [ true, %logic.from5953 ], [ %t45, %logic.rend5956 ]
br label %logic.from5957
logic.from5957:
br i1 %t46, label %logic.end5959, label %logic.rhs5958
logic.rhs5958:
%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.3924, 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.rend5960
logic.rend5960:
br label %logic.end5959
logic.end5959:
%t54 = phi i1 [ true, %logic.from5957 ], [ %t53, %logic.rend5960 ]
br i1 %t54, label %then5961, label %endif5963
then5961:
%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.3925, 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.from5964
logic.from5964:
br i1 %t61, label %logic.end5966, label %logic.rhs5965
logic.rhs5965:
%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.3926, 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.rend5967
logic.rend5967:
br label %logic.end5966
logic.end5966:
%t69 = phi i1 [ true, %logic.from5964 ], [ %t68, %logic.rend5967 ]
br i1 %t69, label %then5968, label %endif5970
then5968:
%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.3927, i64 59, i64 0 })
br label %endif5970
endif5970:
%t72 = load i1, ptr %a23
%t73 = xor i1 %t72, true
br i1 %t73, label %then5971, label %endif5973
then5971:
%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 %endif5973
endif5973:
store { ptr, i64, i64 } { ptr @.str.3928, 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.3929, 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 %then5974, label %endif5976
then5974:
store { ptr, i64, i64 } { ptr @.str.3930, i64 2, i64 0 }, ptr %a79
br label %endif5976
endif5976:
%t85 = load ptr, ptr %a1
%t86 = load { ptr, i64, i64 }, ptr %a79
store { ptr, i64, i64 } { ptr @.str.3931, i64 5, i64 0 }, ptr %a88
store { ptr, i64, i64 } %t86, ptr %a89
call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89)
%t90 = load { ptr, i64, i64 }, ptr %a87
store { ptr, i64, i64 } %t90, ptr %a92
store { ptr, i64, i64 } { ptr @.str.3932, i64 5, i64 0 }, ptr %a93
call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93)
%t94 = load { ptr, i64, i64 }, ptr %a91
%t95 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0
%t96 = load { ptr, i64, i64 }, ptr %t95
store { ptr, i64, i64 } %t94, 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
store { ptr, i64, i64 } %t100, ptr %a102
store { ptr, i64, i64 } { ptr @.str.3933, i64 2, i64 0 }, ptr %a103
call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103)
%t104 = load { ptr, i64, i64 }, ptr %a101
%t105 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0
%t106 = load { ptr, i64, i64 }, ptr %t105
store { ptr, i64, i64 } %t104, ptr %a108
store { ptr, i64, i64 } %t106, ptr %a109
call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109)
%t110 = load { ptr, i64, i64 }, ptr %a107
%t111 = call { ptr, i64, i64 } @finch.gen.op(ptr %t85, { ptr, i64, i64 } %t110)
%t112 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t111, 0
%t113 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3934, i64 4, i64 0 })
%t114 = insertvalue %S.gen.Val %t112, %S.ast.Type %t113, 1
ret %S.gen.Val %t114
endif5963:
%t115 = getelementptr inbounds %S.gen.Val, ptr %a6, 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.3935, 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.from5977
logic.from5977:
br i1 %t121, label %logic.rhs5978, label %logic.end5979
logic.rhs5978:
%t122 = getelementptr inbounds %S.gen.Val, ptr %a10, 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.3936, 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.rend5980
logic.rend5980:
br label %logic.end5979
logic.end5979:
%t129 = phi i1 [ false, %logic.from5977 ], [ %t128, %logic.rend5980 ]
br i1 %t129, label %then5981, label %endif5983
then5981:
%t130 = load i1, ptr %a23
br i1 %t130, label %then5984, label %endif5986
then5984:
%t131 = load ptr, ptr %a1
%t132 = load ptr, ptr %a1
%t133 = load %S.gen.Val, ptr %a6
%t134 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t132, %S.gen.Val %t133)
store { ptr, i64, i64 } { ptr @.str.3937, i64 27, 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.3938, i64 6, i64 0 }, ptr %a141
call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141)
%t142 = load { ptr, i64, i64 }, ptr %a139
%t143 = load ptr, ptr %a1
%t144 = load %S.gen.Val, ptr %a10
%t145 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t143, %S.gen.Val %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)
%t149 = load { ptr, i64, i64 }, ptr %a146
store { ptr, i64, i64 } %t149, ptr %a151
store { ptr, i64, i64 } { ptr @.str.3939, i64 1, i64 0 }, ptr %a152
call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152)
%t153 = load { ptr, i64, i64 }, ptr %a150
%t154 = call { ptr, i64, i64 } @finch.gen.op(ptr %t131, { ptr, i64, i64 } %t153)
store { ptr, i64, i64 } %t154, ptr %a155
store { ptr, i64, i64 } { ptr @.str.3940, i64 2, i64 0 }, ptr %a156
%t157 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t157, ptr %a158
store { ptr, i64, i64 } { ptr @.str.3941, i64 2, i64 0 }, ptr %a159
%t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159)
%t161 = icmp ne i32 %t160, 0
br i1 %t161, label %then5987, label %endif5989
then5987:
store { ptr, i64, i64 } { ptr @.str.3942, i64 2, i64 0 }, ptr %a156
br label %endif5989
endif5989:
%t162 = load ptr, ptr %a1
%t163 = load { ptr, i64, i64 }, ptr %a156
store { ptr, i64, i64 } { ptr @.str.3943, i64 5, i64 0 }, ptr %a165
store { ptr, i64, i64 } %t163, ptr %a166
call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166)
%t167 = load { ptr, i64, i64 }, ptr %a164
store { ptr, i64, i64 } %t167, ptr %a169
store { ptr, i64, i64 } { ptr @.str.3944, i64 5, i64 0 }, ptr %a170
call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170)
%t171 = load { ptr, i64, i64 }, ptr %a168
%t172 = load { ptr, i64, i64 }, ptr %a155
store { ptr, i64, i64 } %t171, 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.3945, i64 3, i64 0 }, ptr %a179
call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179)
%t180 = load { ptr, i64, i64 }, ptr %a177
%t181 = call { ptr, i64, i64 } @finch.gen.op(ptr %t162, { ptr, i64, i64 } %t180)
%t182 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t181, 0
%t183 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3946, i64 4, i64 0 })
%t184 = insertvalue %S.gen.Val %t182, %S.ast.Type %t183, 1
ret %S.gen.Val %t184
endif5986:
%t185 = load ptr, ptr %a1
%t186 = load ptr, ptr %a1
%t187 = load %S.gen.Val, ptr %a6
%t188 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t186, %S.gen.Val %t187)
store { ptr, i64, i64 } { ptr @.str.3947, i64 28, 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.3948, i64 6, 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, ptr %a1
%t198 = load %S.gen.Val, ptr %a10
%t199 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t197, %S.gen.Val %t198)
store { ptr, i64, i64 } %t196, ptr %a201
store { ptr, i64, i64 } %t199, ptr %a202
call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202)
%t203 = load { ptr, i64, i64 }, ptr %a200
store { ptr, i64, i64 } %t203, ptr %a205
store { ptr, i64, i64 } { ptr @.str.3949, i64 1, i64 0 }, ptr %a206
call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206)
%t207 = load { ptr, i64, i64 }, ptr %a204
%t208 = call { ptr, i64, i64 } @finch.gen.op(ptr %t185, { ptr, i64, i64 } %t207)
store { ptr, i64, i64 } %t208, ptr %a209
%t210 = load ptr, ptr %a1
%t211 = load { ptr, i64, i64 }, ptr %a2
%t212 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } %t211, i1 true)
store { ptr, i64, i64 } { ptr @.str.3950, i64 5, i64 0 }, 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
store { ptr, i64, i64 } %t216, ptr %a218
store { ptr, i64, i64 } { ptr @.str.3951, i64 5, i64 0 }, ptr %a219
call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219)
%t220 = load { ptr, i64, i64 }, ptr %a217
%t221 = load { ptr, i64, i64 }, ptr %a209
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)
%t225 = load { ptr, i64, i64 }, ptr %a222
store { ptr, i64, i64 } %t225, ptr %a227
store { ptr, i64, i64 } { ptr @.str.3952, i64 3, i64 0 }, ptr %a228
call void @finch_str_concat(ptr %a226, ptr %a227, ptr %a228)
%t229 = load { ptr, i64, i64 }, ptr %a226
%t230 = call { ptr, i64, i64 } @finch.gen.op(ptr %t210, { ptr, i64, i64 } %t229)
%t231 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t230, 0
%t232 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3953, i64 4, i64 0 })
%t233 = insertvalue %S.gen.Val %t231, %S.ast.Type %t232, 1
ret %S.gen.Val %t233
endif5983:
%t234 = load ptr, ptr %a1
%t235 = call i1 @finch.gen.unify(ptr %t234, ptr %a6, ptr %a10)
%t236 = xor i1 %t235, true
br i1 %t236, label %then5990, label %endif5992
then5990:
%t237 = load ptr, ptr %a1
%t238 = load { ptr, i64, i64 }, ptr %a2
%t239 = load %S.gen.Val, ptr %a6
%t240 = load %S.gen.Val, ptr %a10
%t241 = load %S.ast.Node, ptr %a11
call void @finch.gen.badOperands(ptr %t237, { ptr, i64, i64 } %t238, %S.gen.Val %t239, %S.gen.Val %t240, %S.ast.Node %t241)
br label %endif5992
endif5992:
%t242 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1
%t243 = getelementptr inbounds %S.ast.Type, ptr %t242, i32 0, i32 0
%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
store { ptr, i64, i64 } %t247, ptr %a248
%t249 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1
%t250 = load %S.ast.Type, ptr %t249
%t251 = call i1 @finch.gen.isFloat(%S.ast.Type %t250)
br i1 %t251, label %then5993, label %endif5995
then5993:
%t252 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)
%t253 = call ptr @finch_alloc(i64 %t252)
%t254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i64 0
store { ptr, i64, i64 } { ptr @.str.3954, i64 2, i64 0 }, ptr %t254
%t255 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i64 1
store { ptr, i64, i64 } { ptr @.str.3955, i64 2, i64 0 }, ptr %t255
%t256 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i64 2
store { ptr, i64, i64 } { ptr @.str.3956, i64 1, i64 0 }, ptr %t256
%t257 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i64 3
store { ptr, i64, i64 } { ptr @.str.3957, i64 2, i64 0 }, ptr %t257
%t258 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i64 4
store { ptr, i64, i64 } { ptr @.str.3958, i64 1, i64 0 }, ptr %t258
%t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i64 5
store { ptr, i64, i64 } { ptr @.str.3959, i64 2, i64 0 }, ptr %t259
%t260 = insertvalue { ptr, i64, i64 } undef, ptr %t253, 0
%t261 = insertvalue { ptr, i64, i64 } %t260, i64 6, 1
%t262 = insertvalue { ptr, i64, i64 } %t261, i64 6, 2
store { ptr, i64, i64 } %t262, ptr %a263
%t264 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)
%t265 = call ptr @finch_alloc(i64 %t264)
%t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i64 0
store { ptr, i64, i64 } { ptr @.str.3960, i64 3, i64 0 }, ptr %t266
%t267 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i64 1
store { ptr, i64, i64 } { ptr @.str.3961, i64 3, i64 0 }, ptr %t267
%t268 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i64 2
store { ptr, i64, i64 } { ptr @.str.3962, i64 3, i64 0 }, ptr %t268
%t269 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i64 3
store { ptr, i64, i64 } { ptr @.str.3963, i64 3, i64 0 }, ptr %t269
%t270 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i64 4
store { ptr, i64, i64 } { ptr @.str.3964, i64 3, i64 0 }, ptr %t270
%t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i64 5
store { ptr, i64, i64 } { ptr @.str.3965, i64 3, i64 0 }, ptr %t271
%t272 = insertvalue { ptr, i64, i64 } undef, ptr %t265, 0
%t273 = insertvalue { ptr, i64, i64 } %t272, i64 6, 1
%t274 = insertvalue { ptr, i64, i64 } %t273, i64 6, 2
store { ptr, i64, i64 } %t274, ptr %a275
%t276 = load ptr, ptr %a1
%t277 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1
%t278 = load { ptr, i64, i64 }, ptr %a2
store i64 -1, ptr %a279
%t280 = load i64, ptr %t277
%t281 = load ptr, ptr %a263
store i64 0, ptr %a282
br label %find.cond5996
find.cond5996:
%t283 = load i64, ptr %a282
%t284 = icmp slt i64 %t283, %t280
br i1 %t284, label %find.body5997, label %find.end6000
find.body5997:
%t285 = getelementptr inbounds { ptr, i64, i64 }, ptr %t281, i64 %t283
%t286 = load { ptr, i64, i64 }, ptr %t285
store { ptr, i64, i64 } %t286, ptr %a287
store { ptr, i64, i64 } %t278, ptr %a288
%t289 = call i32 @finch_str_eq(ptr %a287, ptr %a288)
%t290 = icmp ne i32 %t289, 0
br i1 %t290, label %find.hit5998, label %find.next5999
find.hit5998:
store i64 %t283, ptr %a279
br label %find.end6000
find.next5999:
%t291 = add i64 %t283, 1
store i64 %t291, ptr %a282
br label %find.cond5996
find.end6000:
%t292 = load i64, ptr %a279
%t293 = load { ptr, i64, i64 }, ptr %a275
%t294 = extractvalue { ptr, i64, i64 } %t293, 1
%t295 = icmp uge i64 %t292, %t294
br i1 %t295, label %range6001, label %inrange6002
range6001:
call void @finch_panic_index(ptr @.str.3967, i64 3194, i64 %t292, i64 %t294)
unreachable
inrange6002:
%t296 = extractvalue { ptr, i64, i64 } %t293, 0
%t297 = getelementptr inbounds { ptr, i64, i64 }, ptr %t296, i64 %t292
%t298 = load { ptr, i64, i64 }, ptr %t297
store { ptr, i64, i64 } { ptr @.str.3966, i64 5, i64 0 }, ptr %a300
store { ptr, i64, i64 } %t298, ptr %a301
call void @finch_str_concat(ptr %a299, ptr %a300, ptr %a301)
%t302 = load { ptr, i64, i64 }, ptr %a299
store { ptr, i64, i64 } %t302, ptr %a304
store { ptr, i64, i64 } { ptr @.str.3968, i64 1, i64 0 }, ptr %a305
call void @finch_str_concat(ptr %a303, ptr %a304, ptr %a305)
%t306 = load { ptr, i64, i64 }, ptr %a303
%t307 = load ptr, ptr %a1
%t308 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1
%t309 = load %S.ast.Type, ptr %t308
%t310 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t307, %S.ast.Type %t309)
store { ptr, i64, i64 } %t306, ptr %a312
store { ptr, i64, i64 } %t310, ptr %a313
call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313)
%t314 = load { ptr, i64, i64 }, ptr %a311
store { ptr, i64, i64 } %t314, ptr %a316
store { ptr, i64, i64 } { ptr @.str.3969, i64 1, i64 0 }, ptr %a317
call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317)
%t318 = load { ptr, i64, i64 }, ptr %a315
%t319 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0
%t320 = load { ptr, i64, i64 }, ptr %t319
store { ptr, i64, i64 } %t318, 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.3970, i64 2, i64 0 }, ptr %a327
call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327)
%t328 = load { ptr, i64, i64 }, ptr %a325
%t329 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0
%t330 = load { ptr, i64, i64 }, ptr %t329
store { ptr, i64, i64 } %t328, ptr %a332
store { ptr, i64, i64 } %t330, ptr %a333
call void @finch_str_concat(ptr %a331, ptr %a332, ptr %a333)
%t334 = load { ptr, i64, i64 }, ptr %a331
%t335 = call { ptr, i64, i64 } @finch.gen.op(ptr %t276, { ptr, i64, i64 } %t334)
%t336 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t335, 0
%t337 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3971, i64 4, i64 0 })
%t338 = insertvalue %S.gen.Val %t336, %S.ast.Type %t337, 1
ret %S.gen.Val %t338
endif5995:
%t339 = load { ptr, i64, i64 }, ptr %a248
store { ptr, i64, i64 } %t339, ptr %a340
store { ptr, i64, i64 } { ptr @.str.3972, i64 4, i64 0 }, ptr %a341
%t342 = call i32 @finch_str_eq(ptr %a340, ptr %a341)
%t343 = icmp ne i32 %t342, 0
br i1 %t343, label %then6003, label %endif6005
then6003:
%t344 = load i1, ptr %a23
%t345 = xor i1 %t344, true
br i1 %t345, label %then6006, label %endif6008
then6006:
%t346 = load ptr, ptr %a1
%t347 = load %S.ast.Node, ptr %a11
call void @finch.gen.fail(ptr %t346, %S.ast.Node %t347, { ptr, i64, i64 } { ptr @.str.3973, i64 115, i64 0 })
br label %endif6008
endif6008:
store { ptr, i64, i64 } { ptr @.str.3974, i64 2, i64 0 }, ptr %a348
%t349 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t349, ptr %a350
store { ptr, i64, i64 } { ptr @.str.3975, i64 2, i64 0 }, ptr %a351
%t352 = call i32 @finch_str_eq(ptr %a350, ptr %a351)
%t353 = icmp ne i32 %t352, 0
br i1 %t353, label %then6009, label %endif6011
then6009:
store { ptr, i64, i64 } { ptr @.str.3976, i64 2, i64 0 }, ptr %a348
br label %endif6011
endif6011:
%t354 = load ptr, ptr %a1
%t355 = load { ptr, i64, i64 }, ptr %a348
store { ptr, i64, i64 } { ptr @.str.3977, i64 5, i64 0 }, ptr %a357
store { ptr, i64, i64 } %t355, ptr %a358
call void @finch_str_concat(ptr %a356, ptr %a357, ptr %a358)
%t359 = load { ptr, i64, i64 }, ptr %a356
store { ptr, i64, i64 } %t359, ptr %a361
store { ptr, i64, i64 } { ptr @.str.3978, i64 5, i64 0 }, ptr %a362
call void @finch_str_concat(ptr %a360, ptr %a361, ptr %a362)
%t363 = load { ptr, i64, i64 }, ptr %a360
%t364 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0
%t365 = load { ptr, i64, i64 }, ptr %t364
store { ptr, i64, i64 } %t363, 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.3979, i64 2, i64 0 }, ptr %a372
call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372)
%t373 = load { ptr, i64, i64 }, ptr %a370
%t374 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0
%t375 = load { ptr, i64, i64 }, ptr %t374
store { ptr, i64, i64 } %t373, 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
%t380 = call { ptr, i64, i64 } @finch.gen.op(ptr %t354, { ptr, i64, i64 } %t379)
%t381 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t380, 0
%t382 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3980, i64 4, i64 0 })
%t383 = insertvalue %S.gen.Val %t381, %S.ast.Type %t382, 1
ret %S.gen.Val %t383
endif6005:
%t384 = load { ptr, i64, i64 }, ptr %a248
store { ptr, i64, i64 } %t384, ptr %a385
store { ptr, i64, i64 } { ptr @.str.3981, i64 4, i64 0 }, ptr %a386
%t387 = call i32 @finch_str_eq(ptr %a385, ptr %a386)
%t388 = icmp ne i32 %t387, 0
br label %logic.from6012
logic.from6012:
br i1 %t388, label %logic.rhs6013, label %logic.end6014
logic.rhs6013:
%t389 = load i1, ptr %a23
%t390 = xor i1 %t389, true
br label %logic.rend6015
logic.rend6015:
br label %logic.end6014
logic.end6014:
%t391 = phi i1 [ false, %logic.from6012 ], [ %t390, %logic.rend6015 ]
br i1 %t391, label %then6016, label %endif6018
then6016:
%t392 = load ptr, ptr %a1
%t393 = load { ptr, i64, i64 }, ptr %a2
%t394 = load %S.gen.Val, ptr %a6
%t395 = load %S.gen.Val, ptr %a10
%t396 = load %S.ast.Node, ptr %a11
call void @finch.gen.badOperands(ptr %t392, { ptr, i64, i64 } %t393, %S.gen.Val %t394, %S.gen.Val %t395, %S.ast.Node %t396)
br label %endif6018
endif6018:
%t397 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1
%t398 = load %S.ast.Type, ptr %t397
%t399 = call i1 @finch.gen.isInt(%S.ast.Type %t398)
%t400 = xor i1 %t399, true
br label %logic.from6019
logic.from6019:
br i1 %t400, label %logic.rhs6020, label %logic.end6021
logic.rhs6020:
%t401 = load { ptr, i64, i64 }, ptr %a248
store { ptr, i64, i64 } %t401, ptr %a402
store { ptr, i64, i64 } { ptr @.str.3982, i64 4, i64 0 }, ptr %a403
%t404 = call i32 @finch_str_eq(ptr %a402, ptr %a403)
%t405 = icmp eq i32 %t404, 0
br label %logic.rend6022
logic.rend6022:
br label %logic.end6021
logic.end6021:
%t406 = phi i1 [ false, %logic.from6019 ], [ %t405, %logic.rend6022 ]
br label %logic.from6023
logic.from6023:
br i1 %t406, label %logic.rhs6024, label %logic.end6025
logic.rhs6024:
%t407 = load { ptr, i64, i64 }, ptr %a248
store { ptr, i64, i64 } %t407, ptr %a408
store { ptr, i64, i64 } { ptr @.str.3983, i64 4, i64 0 }, ptr %a409
%t410 = call i32 @finch_str_eq(ptr %a408, ptr %a409)
%t411 = icmp eq i32 %t410, 0
br label %logic.rend6026
logic.rend6026:
br label %logic.end6025
logic.end6025:
%t412 = phi i1 [ false, %logic.from6023 ], [ %t411, %logic.rend6026 ]
br i1 %t412, label %then6027, label %endif6029
then6027:
%t413 = load ptr, ptr %a1
%t414 = load { ptr, i64, i64 }, ptr %a2
%t415 = load %S.gen.Val, ptr %a6
%t416 = load %S.gen.Val, ptr %a10
%t417 = load %S.ast.Node, ptr %a11
call void @finch.gen.badOperands(ptr %t413, { ptr, i64, i64 } %t414, %S.gen.Val %t415, %S.gen.Val %t416, %S.ast.Node %t417)
br label %endif6029
endif6029:
%t418 = load ptr, ptr %a1
%t419 = load { ptr, i64, i64 }, ptr %a2
%t420 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1
%t421 = load %S.ast.Type, ptr %t420
%t422 = call i1 @finch.gen.isSigned(%S.ast.Type %t421)
%t423 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } %t419, i1 %t422)
store { ptr, i64, i64 } { ptr @.str.3984, i64 5, i64 0 }, ptr %a425
store { ptr, i64, i64 } %t423, ptr %a426
call void @finch_str_concat(ptr %a424, ptr %a425, ptr %a426)
%t427 = load { ptr, i64, i64 }, ptr %a424
store { ptr, i64, i64 } %t427, ptr %a429
store { ptr, i64, i64 } { ptr @.str.3985, i64 1, i64 0 }, ptr %a430
call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430)
%t431 = load { ptr, i64, i64 }, ptr %a428
%t432 = load ptr, ptr %a1
%t433 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1
%t434 = load %S.ast.Type, ptr %t433
%t435 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t432, %S.ast.Type %t434)
store { ptr, i64, i64 } %t431, ptr %a437
store { ptr, i64, i64 } %t435, ptr %a438
call void @finch_str_concat(ptr %a436, ptr %a437, ptr %a438)
%t439 = load { ptr, i64, i64 }, ptr %a436
store { ptr, i64, i64 } %t439, ptr %a441
store { ptr, i64, i64 } { ptr @.str.3986, i64 1, i64 0 }, ptr %a442
call void @finch_str_concat(ptr %a440, ptr %a441, ptr %a442)
%t443 = load { ptr, i64, i64 }, ptr %a440
%t444 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0
%t445 = load { ptr, i64, i64 }, ptr %t444
store { ptr, i64, i64 } %t443, ptr %a447
store { ptr, i64, i64 } %t445, ptr %a448
call void @finch_str_concat(ptr %a446, ptr %a447, ptr %a448)
%t449 = load { ptr, i64, i64 }, ptr %a446
store { ptr, i64, i64 } %t449, ptr %a451
store { ptr, i64, i64 } { ptr @.str.3987, i64 2, i64 0 }, ptr %a452
call void @finch_str_concat(ptr %a450, ptr %a451, ptr %a452)
%t453 = load { ptr, i64, i64 }, ptr %a450
%t454 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0
%t455 = load { ptr, i64, i64 }, ptr %t454
store { ptr, i64, i64 } %t453, ptr %a457
store { ptr, i64, i64 } %t455, ptr %a458
call void @finch_str_concat(ptr %a456, ptr %a457, ptr %a458)
%t459 = load { ptr, i64, i64 }, ptr %a456
%t460 = call { ptr, i64, i64 } @finch.gen.op(ptr %t418, { ptr, i64, i64 } %t459)
%t461 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t460, 0
%t462 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3988, i64 4, i64 0 })
%t463 = insertvalue %S.gen.Val %t461, %S.ast.Type %t462, 1
ret %S.gen.Val %t463
}
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
%a41 = alloca i64, align 16
%a44 = alloca i64, align 16
%a49 = alloca { ptr, i64, i64 }, align 16
%a50 = alloca { ptr, i64, i64 }, align 16
%a61 = alloca { ptr, i64, i64 }, align 16
%a62 = 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.3989, i64 2, i64 0 }, ptr %t5
%t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 1
store { ptr, i64, i64 } { ptr @.str.3990, i64 2, i64 0 }, ptr %t6
%t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 2
store { ptr, i64, i64 } { ptr @.str.3991, i64 1, i64 0 }, ptr %t7
%t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 3
store { ptr, i64, i64 } { ptr @.str.3992, i64 2, i64 0 }, ptr %t8
%t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 4
store { ptr, i64, i64 } { ptr @.str.3993, i64 1, i64 0 }, ptr %t9
%t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 5
store { ptr, i64, i64 } { ptr @.str.3994, 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.3995, i64 2, i64 0 }, ptr %t17
%t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 1
store { ptr, i64, i64 } { ptr @.str.3996, i64 2, i64 0 }, ptr %t18
%t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 2
store { ptr, i64, i64 } { ptr @.str.3997, i64 3, i64 0 }, ptr %t19
%t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 3
store { ptr, i64, i64 } { ptr @.str.3998, i64 3, i64 0 }, ptr %t20
%t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 4
store { ptr, i64, i64 } { ptr @.str.3999, i64 3, i64 0 }, ptr %t21
%t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 5
store { ptr, i64, i64 } { ptr @.str.4000, 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 %then6030, label %endif6032
then6030:
%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.4001, i64 2, i64 0 }, ptr %t30
%t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 1
store { ptr, i64, i64 } { ptr @.str.4002, i64 2, i64 0 }, ptr %t31
%t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 2
store { ptr, i64, i64 } { ptr @.str.4003, i64 3, i64 0 }, ptr %t32
%t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 3
store { ptr, i64, i64 } { ptr @.str.4004, i64 3, i64 0 }, ptr %t33
%t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 4
store { ptr, i64, i64 } { ptr @.str.4005, i64 3, i64 0 }, ptr %t34
%t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 5
store { ptr, i64, i64 } { ptr @.str.4006, 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
store { ptr, i64, i64 } %t38, ptr %a26
br label %endif6032
endif6032:
%t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1
%t40 = load { ptr, i64, i64 }, ptr %a1
store i64 -1, ptr %a41
%t42 = load i64, ptr %t39
%t43 = load ptr, ptr %a14
store i64 0, ptr %a44
br label %find.cond6033
find.cond6033:
%t45 = load i64, ptr %a44
%t46 = icmp slt i64 %t45, %t42
br i1 %t46, label %find.body6034, label %find.end6037
find.body6034:
%t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t45
%t48 = load { ptr, i64, i64 }, ptr %t47
store { ptr, i64, i64 } %t48, ptr %a49
store { ptr, i64, i64 } %t40, ptr %a50
%t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50)
%t52 = icmp ne i32 %t51, 0
br i1 %t52, label %find.hit6035, label %find.next6036
find.hit6035:
store i64 %t45, ptr %a41
br label %find.end6037
find.next6036:
%t53 = add i64 %t45, 1
store i64 %t53, ptr %a44
br label %find.cond6033
find.end6037:
%t54 = load i64, ptr %a41
%t55 = load { ptr, i64, i64 }, ptr %a26
%t56 = extractvalue { ptr, i64, i64 } %t55, 1
%t57 = icmp uge i64 %t54, %t56
br i1 %t57, label %range6038, label %inrange6039
range6038:
call void @finch_panic_index(ptr @.str.4007, i64 3221, i64 %t54, i64 %t56)
unreachable
inrange6039:
%t58 = extractvalue { ptr, i64, i64 } %t55, 0
%t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t58, i64 %t54
%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
ret { ptr, i64, i64 } %t63
}
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
%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
%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
%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
%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
%a135 = alloca %S.gen.Val, align 16
%a145 = alloca %S.gen.Val, 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
%a158 = alloca { ptr, i64, i64 }, align 16
%a159 = alloca { ptr, i64, i64 }, align 16
%a164 = alloca { ptr, i64, i64 }, align 16
%a165 = alloca { ptr, i64, i64 }, align 16
%a170 = alloca { ptr, i64, i64 }, align 16
%a171 = alloca { ptr, i64, i64 }, align 16
%a176 = alloca { ptr, i64, i64 }, align 16
%a177 = 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.4008, 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.from6040
logic.from6040:
br i1 %t13, label %logic.end6042, label %logic.rhs6041
logic.rhs6041:
%t14 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t14, ptr %a15
store { ptr, i64, i64 } { ptr @.str.4009, 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.rend6043
logic.rend6043:
br label %logic.end6042
logic.end6042:
%t19 = phi i1 [ true, %logic.from6040 ], [ %t18, %logic.rend6043 ]
br i1 %t19, label %then6044, label %endif6046
then6044:
%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 %range6047, label %inrange6048
range6047:
call void @finch_panic_index(ptr @.str.4010, i64 3227, i64 0, i64 %t23)
unreachable
inrange6048:
%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.4011, 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.4012, 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.4013, 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.4014, 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 %then6049, label %else6050
then6049:
%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 %endif6051
else6050:
%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 %endif6051
endif6051:
%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 %range6052, label %inrange6053
range6052:
call void @finch_panic_index(ptr @.str.4015, i64 3239, i64 1, i64 %t61)
unreachable
inrange6053:
%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.4016, 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.4017, 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.4018, 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 %then6054, label %endif6056
then6054:
store { ptr, i64, i64 } { ptr @.str.4019, i64 5, i64 0 }, ptr %a79
br label %endif6056
endif6056:
%t85 = load ptr, ptr %a1
%t86 = load { ptr, i64, i64 }, ptr %a79
store { ptr, i64, i64 } { ptr @.str.4020, i64 9, i64 0 }, ptr %a88
store { ptr, i64, i64 } %t86, ptr %a89
call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89)
%t90 = load { ptr, i64, i64 }, ptr %a87
store { ptr, i64, i64 } %t90, ptr %a92
store { ptr, i64, i64 } { ptr @.str.4021, i64 3, i64 0 }, ptr %a93
call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93)
%t94 = load { ptr, i64, i64 }, ptr %a91
%t95 = load { ptr, i64, i64 }, ptr %a32
store { ptr, i64, i64 } %t94, 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.4022, i64 6, i64 0 }, 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 %a67
store { ptr, i64, i64 } %t103, ptr %a106
store { ptr, i64, i64 } %t104, 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 %a110
store { ptr, i64, i64 } { ptr @.str.4023, i64 3, 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 %a70
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)
%t117 = load { ptr, i64, i64 }, ptr %a114
store { ptr, i64, i64 } %t117, ptr %a119
store { ptr, i64, i64 } { ptr @.str.4024, i64 2, i64 0 }, ptr %a120
call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120)
%t121 = load { ptr, i64, i64 }, ptr %a118
%t122 = call { ptr, i64, i64 } @finch.gen.op(ptr %t85, { ptr, i64, i64 } %t121)
%t123 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t122, 0
%t124 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4025, i64 4, i64 0 })
%t125 = insertvalue %S.gen.Val %t123, %S.ast.Type %t124, 1
ret %S.gen.Val %t125
endif6046:
%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 %range6057, label %inrange6058
range6057:
call void @finch_panic_index(ptr @.str.4026, i64 3251, i64 0, i64 %t129)
unreachable
inrange6058:
%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 %S.gen.Val @finch.gen.expr(ptr %t126, %S.ast.Node %t133)
store %S.gen.Val %t134, ptr %a135
%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 1, %t139
br i1 %t140, label %range6059, label %inrange6060
range6059:
call void @finch_panic_index(ptr @.str.4027, i64 3252, i64 1, i64 %t139)
unreachable
inrange6060:
%t141 = extractvalue { ptr, i64, i64 } %t138, 0
%t142 = getelementptr inbounds %S.ast.Node, ptr %t141, i64 1
%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, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t146, ptr %a147
store { ptr, i64, i64 } { ptr @.str.4028, i64 2, i64 0 }, ptr %a148
%t149 = call i32 @finch_str_eq(ptr %a147, ptr %a148)
%t150 = icmp ne i32 %t149, 0
br label %logic.from6061
logic.from6061:
br i1 %t150, label %logic.end6063, label %logic.rhs6062
logic.rhs6062:
%t151 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t151, ptr %a152
store { ptr, i64, i64 } { ptr @.str.4029, i64 2, i64 0 }, ptr %a153
%t154 = call i32 @finch_str_eq(ptr %a152, ptr %a153)
%t155 = icmp ne i32 %t154, 0
br label %logic.rend6064
logic.rend6064:
br label %logic.end6063
logic.end6063:
%t156 = phi i1 [ true, %logic.from6061 ], [ %t155, %logic.rend6064 ]
br label %logic.from6065
logic.from6065:
br i1 %t156, label %logic.end6067, label %logic.rhs6066
logic.rhs6066:
%t157 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t157, ptr %a158
store { ptr, i64, i64 } { ptr @.str.4030, i64 1, i64 0 }, ptr %a159
%t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159)
%t161 = icmp ne i32 %t160, 0
br label %logic.rend6068
logic.rend6068:
br label %logic.end6067
logic.end6067:
%t162 = phi i1 [ true, %logic.from6065 ], [ %t161, %logic.rend6068 ]
br label %logic.from6069
logic.from6069:
br i1 %t162, label %logic.end6071, label %logic.rhs6070
logic.rhs6070:
%t163 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t163, ptr %a164
store { ptr, i64, i64 } { ptr @.str.4031, i64 2, i64 0 }, ptr %a165
%t166 = call i32 @finch_str_eq(ptr %a164, ptr %a165)
%t167 = icmp ne i32 %t166, 0
br label %logic.rend6072
logic.rend6072:
br label %logic.end6071
logic.end6071:
%t168 = phi i1 [ true, %logic.from6069 ], [ %t167, %logic.rend6072 ]
br label %logic.from6073
logic.from6073:
br i1 %t168, label %logic.end6075, label %logic.rhs6074
logic.rhs6074:
%t169 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t169, ptr %a170
store { ptr, i64, i64 } { ptr @.str.4032, i64 1, i64 0 }, ptr %a171
%t172 = call i32 @finch_str_eq(ptr %a170, ptr %a171)
%t173 = icmp ne i32 %t172, 0
br label %logic.rend6076
logic.rend6076:
br label %logic.end6075
logic.end6075:
%t174 = phi i1 [ true, %logic.from6073 ], [ %t173, %logic.rend6076 ]
br label %logic.from6077
logic.from6077:
br i1 %t174, label %logic.end6079, label %logic.rhs6078
logic.rhs6078:
%t175 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t175, ptr %a176
store { ptr, i64, i64 } { ptr @.str.4033, i64 2, i64 0 }, ptr %a177
%t178 = call i32 @finch_str_eq(ptr %a176, ptr %a177)
%t179 = icmp ne i32 %t178, 0
br label %logic.rend6080
logic.rend6080:
br label %logic.end6079
logic.end6079:
%t180 = phi i1 [ true, %logic.from6077 ], [ %t179, %logic.rend6080 ]
br i1 %t180, label %then6081, label %endif6083
then6081:
%t181 = load ptr, ptr %a1
%t182 = load { ptr, i64, i64 }, ptr %a8
%t183 = load %S.gen.Val, ptr %a135
%t184 = load %S.gen.Val, ptr %a145
%t185 = load %S.ast.Node, ptr %a2
%t186 = call %S.gen.Val @finch.gen.compare(ptr %t181, { ptr, i64, i64 } %t182, %S.gen.Val %t183, %S.gen.Val %t184, %S.ast.Node %t185)
ret %S.gen.Val %t186
endif6083:
%t187 = load ptr, ptr %a1
%t188 = load { ptr, i64, i64 }, ptr %a8
%t189 = load %S.gen.Val, ptr %a135
%t190 = load %S.gen.Val, ptr %a145
%t191 = load %S.ast.Node, ptr %a2
%t192 = call %S.gen.Val @finch.gen.arith(ptr %t187, { ptr, i64, i64 } %t188, %S.gen.Val %t189, %S.gen.Val %t190, %S.ast.Node %t191)
ret %S.gen.Val %t192
}
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
%a28 = alloca { ptr, i64, i64 }, align 16
%a30 = alloca i64, align 16
%a38 = alloca %S.ast.Node, align 16
%a39 = alloca %S.gen.Val, align 16
%a42 = alloca { ptr, i64, i64 }, align 16
%a43 = alloca { ptr, i64, i64 }, align 16
%a51 = alloca %S.ast.Type, align 16
%a52 = alloca %S.ast.Type, align 16
%a75 = alloca %S.ast.Type, align 16
%a78 = alloca { ptr, i64, i64 }, align 16
%a80 = alloca { ptr, i64, i64 }, align 16
%a81 = 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
%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
%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
%a117 = alloca 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
%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
%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
%a149 = 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
%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
%a182 = alloca { ptr, i64, i64 }, align 16
%a183 = alloca { ptr, i64, i64 }, align 16
%a184 = 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
%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
%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
%a217 = alloca { ptr, i64, i64 }, align 16
%a219 = alloca { ptr, i64, i64 }, align 16
%a220 = alloca { ptr, i64, i64 }, align 16
%a224 = alloca %S.ast.Type, align 16
%a225 = 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.4034, 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.4035, 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 %then6084, label %else6085
then6084:
%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 %range6087, label %inrange6088
range6087:
call void @finch_panic_index(ptr @.str.4036, i64 3262, i64 0, i64 %t14)
unreachable
inrange6088:
%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
store %S.ast.Type %t21, ptr %a5
br label %endif6086
else6085:
%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 eq i64 %t24, 0
br i1 %t25, label %then6089, label %endif6091
then6089:
%t26 = load ptr, ptr %a1
%t27 = load %S.ast.Node, ptr %a2
call void @finch.gen.fail(ptr %t26, %S.ast.Node %t27, { ptr, i64, i64 } { ptr @.str.4037, i64 47, i64 0 })
br label %endif6091
endif6091:
br label %endif6086
endif6086:
store { ptr, i64, i64 } zeroinitializer, ptr %a28
%t29 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
store i64 0, ptr %a30
br label %each.cond6092
each.cond6092:
%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.body6093, label %each.end6095
each.body6093:
%t35 = load ptr, ptr %t29
%t36 = getelementptr inbounds %S.ast.Node, ptr %t35, i64 %t33
%t37 = load %S.ast.Node, ptr %t36
store %S.ast.Node %t37, ptr %a38
store %S.gen.Val zeroinitializer, ptr %a39
%t40 = getelementptr inbounds %S.ast.Type, ptr %a5, i32 0, i32 0
%t41 = load { ptr, i64, i64 }, ptr %t40
store { ptr, i64, i64 } %t41, ptr %a42
store { ptr, i64, i64 } { ptr @.str.4038, i64 4, i64 0 }, ptr %a43
%t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43)
%t45 = icmp ne i32 %t44, 0
br i1 %t45, label %then6096, label %else6097
then6096:
%t46 = load ptr, ptr %a1
%t47 = load %S.ast.Node, ptr %a38
%t48 = call %S.gen.Val @finch.gen.expr(ptr %t46, %S.ast.Node %t47)
store %S.gen.Val %t48, ptr %a39
%t49 = getelementptr inbounds %S.gen.Val, ptr %a39, i32 0, i32 1
%t50 = load %S.ast.Type, ptr %t49
store %S.ast.Type %t50, ptr %a51
call void @finch.copy.S_ast_Type(ptr %a52, ptr %a51)
%t53 = load %S.ast.Type, ptr %a52
store %S.ast.Type %t53, ptr %a5
br label %endif6098
else6097:
%t54 = load ptr, ptr %a1
%t55 = load %S.ast.Node, ptr %a38
%t56 = load %S.ast.Type, ptr %a5
%t57 = call %S.gen.Val @finch.gen.exprWant(ptr %t54, %S.ast.Node %t55, %S.ast.Type %t56)
store %S.gen.Val %t57, ptr %a39
br label %endif6098
endif6098:
%t58 = load ptr, ptr %a1
%t59 = load %S.gen.Val, ptr %a39
%t60 = load %S.ast.Type, ptr %a5
%t61 = load %S.ast.Node, ptr %a38
%t62 = call %S.gen.Val @finch.gen.coerce(ptr %t58, %S.gen.Val %t59, %S.ast.Type %t60, %S.ast.Node %t61, { ptr, i64, i64 } { ptr @.str.4039, i64 27, i64 0 })
store %S.gen.Val %t62, ptr %a39
%t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1
%t64 = load ptr, ptr %a1
%t65 = load %S.gen.Val, ptr %a39
%t66 = call { ptr, i64, i64 } @finch.gen.own(ptr %t64, %S.gen.Val %t65)
%t67 = load i64, ptr %t63
%t68 = add i64 %t67, 1
call void @finch_arr_reserve(ptr %a28, i64 %t68, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t69 = load ptr, ptr %a28
%t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i64 %t67
store { ptr, i64, i64 } %t66, ptr %t70
store i64 %t68, ptr %t63
br label %each.step6094
each.step6094:
%t71 = load i64, ptr %a30
%t72 = add i64 %t71, 1
store i64 %t72, ptr %a30
br label %each.cond6092
each.end6095:
%t73 = load %S.ast.Type, ptr %a5
%t74 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t73)
store %S.ast.Type %t74, ptr %a75
%t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1
%t77 = load i64, ptr %t76
call void @finch_str_from_int(ptr %a78, i64 %t77)
%t79 = load { ptr, i64, i64 }, ptr %a78
store { ptr, i64, i64 } %t79, ptr %a80
store { ptr, i64, i64 } { ptr @.str.4040, i64 4, i64 0 }, ptr %a81
%t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1
%t83 = load i64, ptr %t82
%t84 = icmp sgt i64 %t83, 0
br i1 %t84, label %then6099, label %endif6101
then6099:
%t85 = load ptr, ptr %a1
%t86 = load { ptr, i64, i64 }, ptr %a80
store { ptr, i64, i64 } { ptr @.str.4041, i64 8, i64 0 }, ptr %a88
store { ptr, i64, i64 } %t86, ptr %a89
call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89)
%t90 = load { ptr, i64, i64 }, ptr %a87
store { ptr, i64, i64 } %t90, ptr %a92
store { ptr, i64, i64 } { ptr @.str.4042, i64 2, i64 0 }, ptr %a93
call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93)
%t94 = load { ptr, i64, i64 }, ptr %a91
%t95 = load ptr, ptr %a1
%t96 = load %S.ast.Type, ptr %a5
%t97 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t95, %S.ast.Type %t96)
store { ptr, i64, i64 } %t94, ptr %a99
store { ptr, i64, i64 } %t97, ptr %a100
call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100)
%t101 = load { ptr, i64, i64 }, ptr %a98
%t102 = call { ptr, i64, i64 } @finch.gen.op(ptr %t85, { ptr, i64, i64 } %t101)
store { ptr, i64, i64 } %t102, ptr %a103
%t104 = load ptr, ptr %a1
%t105 = load { ptr, i64, i64 }, ptr %a103
store { ptr, i64, i64 } { ptr @.str.4043, i64 26, i64 0 }, ptr %a107
store { ptr, i64, i64 } %t105, ptr %a108
call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108)
%t109 = load { ptr, i64, i64 }, ptr %a106
store { ptr, i64, i64 } %t109, ptr %a111
store { ptr, i64, i64 } { ptr @.str.4044, 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 = call { ptr, i64, i64 } @finch.gen.op(ptr %t104, { ptr, i64, i64 } %t113)
store { ptr, i64, i64 } %t114, ptr %a81
br label %endif6101
endif6101:
%t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1
%t116 = load i64, ptr %t115
store i64 0, ptr %a117
br label %for.cond6102
for.cond6102:
%t118 = load i64, ptr %a117
%t119 = icmp slt i64 %t118, %t116
br i1 %t119, label %for.body6103, label %for.end6105
for.body6103:
%t120 = load ptr, ptr %a1
%t121 = load ptr, ptr %a1
%t122 = load %S.ast.Type, ptr %a5
%t123 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t121, %S.ast.Type %t122)
store { ptr, i64, i64 } { ptr @.str.4045, i64 23, i64 0 }, ptr %a125
store { ptr, i64, i64 } %t123, ptr %a126
call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126)
%t127 = load { ptr, i64, i64 }, ptr %a124
store { ptr, i64, i64 } %t127, ptr %a129
store { ptr, i64, i64 } { ptr @.str.4046, i64 6, i64 0 }, ptr %a130
call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130)
%t131 = load { ptr, i64, i64 }, ptr %a128
%t132 = load { ptr, i64, i64 }, ptr %a81
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)
%t136 = load { ptr, i64, i64 }, ptr %a133
store { ptr, i64, i64 } %t136, ptr %a138
store { ptr, i64, i64 } { ptr @.str.4047, i64 6, i64 0 }, ptr %a139
call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139)
%t140 = load { ptr, i64, i64 }, ptr %a137
%t141 = load i64, ptr %a117
call void @finch_str_from_int(ptr %a142, i64 %t141)
%t143 = load { ptr, i64, i64 }, ptr %a142
store { ptr, i64, i64 } %t140, 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
%t148 = call { ptr, i64, i64 } @finch.gen.op(ptr %t120, { ptr, i64, i64 } %t147)
store { ptr, i64, i64 } %t148, ptr %a149
%t150 = load ptr, ptr %a1
%t151 = load ptr, ptr %a1
%t152 = load %S.ast.Type, ptr %a5
%t153 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t151, %S.ast.Type %t152)
%t154 = load i64, ptr %a117
%t155 = load { ptr, i64, i64 }, ptr %a28
%t156 = extractvalue { ptr, i64, i64 } %t155, 1
%t157 = icmp uge i64 %t154, %t156
br i1 %t157, label %range6106, label %inrange6107
range6106:
call void @finch_panic_index(ptr @.str.4048, i64 3287, i64 %t154, i64 %t156)
unreachable
inrange6107:
%t158 = extractvalue { ptr, i64, i64 } %t155, 0
%t159 = getelementptr inbounds { ptr, i64, i64 }, ptr %t158, i64 %t154
%t160 = load { ptr, i64, i64 }, ptr %t159
%t161 = load { ptr, i64, i64 }, ptr %a149
call void @finch.gen.store(ptr %t150, { ptr, i64, i64 } %t153, { ptr, i64, i64 } %t160, { ptr, i64, i64 } %t161)
br label %for.step6104
for.step6104:
%t162 = load i64, ptr %a117
%t163 = add i64 %t162, 1
store i64 %t163, ptr %a117
br label %for.cond6102
for.end6105:
%t164 = load ptr, ptr %a1
%t165 = load { ptr, i64, i64 }, ptr %a81
store { ptr, i64, i64 } { ptr @.str.4049, i64 41, 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.4050, i64 3, i64 0 }, ptr %a172
call void @finch_str_concat(ptr %a170, ptr %a171, ptr %a172)
%t173 = load { ptr, i64, i64 }, ptr %a170
%t174 = call { ptr, i64, i64 } @finch.gen.op(ptr %t164, { ptr, i64, i64 } %t173)
store { ptr, i64, i64 } %t174, ptr %a175
%t176 = load ptr, ptr %a1
%t177 = load { ptr, i64, i64 }, ptr %a175
store { ptr, i64, i64 } { ptr @.str.4051, i64 30, 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.4052, i64 6, i64 0 }, ptr %a184
call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184)
%t185 = load { ptr, i64, i64 }, ptr %a182
%t186 = load { ptr, i64, i64 }, ptr %a80
store { ptr, i64, i64 } %t185, ptr %a188
store { ptr, i64, i64 } %t186, ptr %a189
call void @finch_str_concat(ptr %a187, ptr %a188, ptr %a189)
%t190 = load { ptr, i64, i64 }, ptr %a187
store { ptr, i64, i64 } %t190, ptr %a192
store { ptr, i64, i64 } { ptr @.str.4053, i64 3, i64 0 }, ptr %a193
call void @finch_str_concat(ptr %a191, ptr %a192, ptr %a193)
%t194 = load { ptr, i64, i64 }, ptr %a191
%t195 = call { ptr, i64, i64 } @finch.gen.op(ptr %t176, { ptr, i64, i64 } %t194)
store { ptr, i64, i64 } %t195, ptr %a196
%t197 = load ptr, ptr %a1
%t198 = load { ptr, i64, i64 }, ptr %a196
store { ptr, i64, i64 } { ptr @.str.4054, i64 30, 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.4055, i64 6, i64 0 }, ptr %a205
call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205)
%t206 = load { ptr, i64, i64 }, ptr %a203
%t207 = load { ptr, i64, i64 }, ptr %a80
store { ptr, i64, i64 } %t206, 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.4056, i64 3, i64 0 }, ptr %a214
call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214)
%t215 = load { ptr, i64, i64 }, ptr %a212
%t216 = call { ptr, i64, i64 } @finch.gen.op(ptr %t197, { ptr, i64, i64 } %t215)
store { ptr, i64, i64 } %t216, ptr %a217
%t218 = load { ptr, i64, i64 }, ptr %a217
store { ptr, i64, i64 } %t218, ptr %a219
call void @finch_str_copy(ptr %a220, ptr %a219)
%t221 = load { ptr, i64, i64 }, ptr %a220
%t222 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t221, 0
%t223 = load %S.ast.Type, ptr %a75
store %S.ast.Type %t223, ptr %a224
call void @finch.copy.S_ast_Type(ptr %a225, ptr %a224)
%t226 = load %S.ast.Type, ptr %a225
%t227 = insertvalue %S.gen.Val %t222, %S.ast.Type %t226, 1
%t228 = insertvalue %S.gen.Val %t227, i1 true, 2
ret %S.gen.Val %t228
}
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
%a32 = alloca %S.gen.Ref, align 16
%a40 = alloca %S.gen.Place, align 16
%a41 = 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.4057, 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.from6108
logic.from6108:
br i1 %t9, label %logic.rhs6109, label %logic.end6110
logic.rhs6109:
%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.rend6111
logic.rend6111:
br label %logic.end6110
logic.end6110:
%t15 = phi i1 [ false, %logic.from6108 ], [ %t14, %logic.rend6111 ]
br i1 %t15, label %then6112, label %endif6114
then6112:
%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.4058, 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.4059, i64 1, i64 0 }, ptr %a26
call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26)
%t27 = load { ptr, i64, i64 }, ptr %a24
call void @finch.gen.fail(ptr %t16, %S.ast.Node %t17, { ptr, i64, i64 } %t27)
br label %endif6114
endif6114:
%t28 = load ptr, ptr %a1
%t29 = load %S.ast.Node, ptr %a2
%t30 = load i1, ptr %a3
%t31 = call %S.gen.Ref @finch.gen.ref(ptr %t28, %S.ast.Node %t29, i1 %t30)
store %S.gen.Ref %t31, ptr %a32
%t33 = getelementptr inbounds %S.gen.Ref, ptr %a32, i32 0, i32 0
%t34 = load i1, ptr %t33
%t35 = xor i1 %t34, true
br i1 %t35, label %then6115, label %endif6117
then6115:
%t36 = load ptr, ptr %a1
%t37 = load %S.ast.Node, ptr %a2
call void @finch.gen.fail(ptr %t36, %S.ast.Node %t37, { ptr, i64, i64 } { ptr @.str.4060, i64 60, i64 0 })
br label %endif6117
endif6117:
%t38 = getelementptr inbounds %S.gen.Ref, ptr %a32, i32 0, i32 1
%t39 = load %S.gen.Place, ptr %t38
store %S.gen.Place %t39, ptr %a40
call void @finch.copy.S_gen_Place(ptr %a41, ptr %a40)
%t42 = load %S.gen.Place, ptr %a41
ret %S.gen.Place %t42
}
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
%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
%a147 = alloca { ptr, i64, i64 }, align 16
%a158 = alloca { ptr, i64, i64 }, align 16
%a161 = alloca { ptr, i64, i64 }, align 16
%a162 = alloca { ptr, i64, i64 }, align 16
%a170 = alloca %S.ast.Type, align 16
%a177 = alloca { ptr, i64, i64 }, align 16
%a178 = alloca { ptr, i64, i64 }, align 16
%a179 = alloca { ptr, i64, i64 }, 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
%a203 = alloca { ptr, i64, i64 }, align 16
%a204 = alloca { ptr, i64, i64 }, align 16
%a205 = 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
%a223 = 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
%a241 = alloca { ptr, i64, i64 }, align 16
%a245 = alloca %S.ast.Type, align 16
%a246 = alloca %S.ast.Type, 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
%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
%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
%a293 = alloca %S.gen.Var, 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
%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
%a319 = alloca { ptr, i64, i64 }, align 16
%a320 = alloca { ptr, i64, i64 }, align 16
%a331 = alloca { ptr, i64, i64 }, align 16
%a332 = alloca { ptr, i64, i64 }, align 16
%a337 = alloca %S.ast.Type, align 16
%a338 = alloca %S.ast.Type, align 16
%a344 = alloca { ptr, i64, i64 }, align 16
%a345 = alloca { ptr, i64, i64 }, align 16
%a354 = alloca { ptr, i64, i64 }, align 16
%a355 = 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.4061, 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 %then6118, label %endif6120
then6118:
%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.from6121
logic.from6121:
br i1 %t16, label %logic.rhs6122, label %logic.end6123
logic.rhs6122:
%t17 = load ptr, ptr %a1
%t18 = icmp eq ptr %t17, null
br i1 %t18, label %panic6124, label %ok6125
panic6124:
call void @finch_panic(ptr @.str.4062, i64 3311, ptr @.str.4063)
unreachable
ok6125:
%t19 = getelementptr inbounds %S.gen.Gen, ptr %t17, i32 0, i32 24
%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.rend6126
logic.rend6126:
br label %logic.end6123
logic.end6123:
%t26 = phi i1 [ false, %logic.from6121 ], [ %t25, %logic.rend6126 ]
br i1 %t26, label %then6127, label %endif6129
then6127:
%t27 = load ptr, ptr %a1
%t28 = icmp eq ptr %t27, null
br i1 %t28, label %panic6130, label %ok6131
panic6130:
call void @finch_panic(ptr @.str.4064, i64 3312, ptr @.str.4065)
unreachable
ok6131:
%t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 24
%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.missing6132, label %map.found6133
map.missing6132:
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.4066, i64 3312, ptr %a36)
unreachable
map.found6133:
%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 %then6134, label %endif6136
then6134:
%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.4067, 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
ret %S.gen.Ref %t57
endif6136:
%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.4068, 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
ret %S.gen.Ref %t67
endif6129:
%t68 = load i64, ptr %a14
%t69 = icmp slt i64 %t68, 0
br label %logic.from6137
logic.from6137:
br i1 %t69, label %logic.rhs6138, label %logic.end6139
logic.rhs6138:
%t70 = load ptr, ptr %a1
%t71 = icmp eq ptr %t70, null
br i1 %t71, label %panic6140, label %ok6141
panic6140:
call void @finch_panic(ptr @.str.4069, i64 3319, ptr @.str.4070)
unreachable
ok6141:
%t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 24
%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.rend6142
logic.rend6142:
br label %logic.end6139
logic.end6139:
%t80 = phi i1 [ false, %logic.from6137 ], [ %t79, %logic.rend6142 ]
br label %logic.from6143
logic.from6143:
br i1 %t80, label %logic.rhs6144, label %logic.end6145
logic.rhs6144:
%t81 = load ptr, ptr %a1
%t82 = icmp eq ptr %t81, null
br i1 %t82, label %panic6146, label %ok6147
panic6146:
call void @finch_panic(ptr @.str.4071, i64 3319, ptr @.str.4072)
unreachable
ok6147:
%t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 24
%t84 = getelementptr inbounds %S.cimport.CImports, ptr %t83, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.4073, 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.rend6148
logic.rend6148:
br label %logic.end6145
logic.end6145:
%t88 = phi i1 [ false, %logic.from6143 ], [ %t87, %logic.rend6148 ]
br label %logic.from6149
logic.from6149:
br i1 %t88, label %logic.rhs6150, label %logic.end6151
logic.rhs6150:
%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.4074, 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.from6152
logic.from6152:
br i1 %t94, label %logic.end6154, label %logic.rhs6153
logic.rhs6153:
%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.4075, 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.rend6155
logic.rend6155:
br label %logic.end6154
logic.end6154:
%t101 = phi i1 [ true, %logic.from6152 ], [ %t100, %logic.rend6155 ]
br label %logic.from6156
logic.from6156:
br i1 %t101, label %logic.end6158, label %logic.rhs6157
logic.rhs6157:
%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.4076, 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.rend6159
logic.rend6159:
br label %logic.end6158
logic.end6158:
%t108 = phi i1 [ true, %logic.from6156 ], [ %t107, %logic.rend6159 ]
br label %logic.rend6160
logic.rend6160:
br label %logic.end6151
logic.end6151:
%t109 = phi i1 [ false, %logic.from6149 ], [ %t108, %logic.rend6160 ]
br i1 %t109, label %then6161, label %endif6163
then6161:
store { ptr, i64, i64 } { ptr @.str.4077, 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.4078, 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 %then6164, label %else6165
then6164:
store { ptr, i64, i64 } { ptr @.str.4079, i64 1, i64 0 }, ptr %a110
br label %endif6166
else6165:
%t117 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t118 = load { ptr, i64, i64 }, ptr %t117
store { ptr, i64, i64 } %t118, ptr %a119
store { ptr, i64, i64 } { ptr @.str.4080, i64 6, i64 0 }, ptr %a120
%t121 = call i32 @finch_str_eq(ptr %a119, ptr %a120)
%t122 = icmp ne i32 %t121, 0
br i1 %t122, label %then6167, label %endif6169
then6167:
store { ptr, i64, i64 } { ptr @.str.4081, i64 1, i64 0 }, ptr %a110
br label %endif6169
endif6169:
br label %endif6166
endif6166:
%t123 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0
%t124 = load ptr, ptr %a1
%t125 = load { ptr, i64, i64 }, ptr %a110
store { ptr, i64, i64 } { ptr @.str.4082, i64 31, 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.4083, i64 1, i64 0 }, ptr %a132
call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132)
%t133 = load { ptr, i64, i64 }, ptr %a130
%t134 = call { ptr, i64, i64 } @finch.gen.op(ptr %t124, { ptr, i64, i64 } %t133)
%t135 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t134, 0
%t136 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4084, i64 3, i64 0 })
%t137 = insertvalue %S.gen.Val %t135, %S.ast.Type %t136, 1
%t138 = insertvalue %S.gen.Ref %t123, %S.gen.Val %t137, 2
ret %S.gen.Ref %t138
endif6163:
%t139 = load i64, ptr %a14
%t140 = icmp slt i64 %t139, 0
br label %logic.from6170
logic.from6170:
br i1 %t140, label %logic.rhs6171, label %logic.end6172
logic.rhs6171:
%t141 = load ptr, ptr %a1
%t142 = icmp eq ptr %t141, null
br i1 %t142, label %panic6173, label %ok6174
panic6173:
call void @finch_panic(ptr @.str.4085, i64 3328, ptr @.str.4086)
unreachable
ok6174:
%t143 = getelementptr inbounds %S.gen.Gen, ptr %t141, i32 0, i32 24
%t144 = getelementptr inbounds %S.cimport.CImports, ptr %t143, i32 0, i32 2
%t145 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t146 = load { ptr, i64, i64 }, ptr %t145
store { ptr, i64, i64 } %t146, ptr %a147
%t148 = call i64 @finch_map_find(ptr %t144, ptr %a147, 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)
%t149 = icmp sge i64 %t148, 0
br label %logic.rend6175
logic.rend6175:
br label %logic.end6172
logic.end6172:
%t150 = phi i1 [ false, %logic.from6170 ], [ %t149, %logic.rend6175 ]
br i1 %t150, label %then6176, label %endif6178
then6176:
%t151 = load ptr, ptr %a1
%t152 = load ptr, ptr %a1
%t153 = icmp eq ptr %t152, null
br i1 %t153, label %panic6179, label %ok6180
panic6179:
call void @finch_panic(ptr @.str.4087, i64 3329, ptr @.str.4088)
unreachable
ok6180:
%t154 = getelementptr inbounds %S.gen.Gen, ptr %t152, i32 0, i32 24
%t155 = getelementptr inbounds %S.cimport.CImports, ptr %t154, i32 0, i32 2
%t156 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t157 = load { ptr, i64, i64 }, ptr %t156
store { ptr, i64, i64 } %t157, ptr %a158
%t159 = call i64 @finch_map_find(ptr %t155, ptr %a158, 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)
%t160 = icmp slt i64 %t159, 0
br i1 %t160, label %map.missing6181, label %map.found6182
map.missing6181:
store { ptr, i64, i64 } zeroinitializer, ptr %a161
store { ptr, i64, i64 } %t157, ptr %a162
call void @finch_buf_str(ptr %a161, ptr %a162, i32 1)
call void @finch_map_missing(ptr @.str.4089, i64 3329, ptr %a161)
unreachable
map.found6182:
%t163 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t155, i32 0, i32 0
%t164 = load ptr, ptr %t163
%t165 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t164, i64 %t159
%t166 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t165, i32 0, i32 2
%t167 = load %S.ast.Type, ptr %t166
%t168 = load %S.ast.Node, ptr %a2
%t169 = call %S.ast.Type @finch.gen.resolve(ptr %t151, %S.ast.Type %t167, %S.ast.Node %t168)
store %S.ast.Type %t169, ptr %a170
%t171 = load ptr, ptr %a1
%t172 = icmp eq ptr %t171, null
br i1 %t172, label %panic6183, label %ok6184
panic6183:
call void @finch_panic(ptr @.str.4090, i64 3330, ptr @.str.4091)
unreachable
ok6184:
%t173 = getelementptr inbounds %S.gen.Gen, ptr %t171, i32 0, i32 38
%t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i32 0, i32 1
%t175 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t176 = load { ptr, i64, i64 }, ptr %t175
store { ptr, i64, i64 } { ptr @.str.4092, i64 2, i64 0 }, ptr %a178
store { ptr, i64, i64 } %t176, ptr %a179
call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179)
%t180 = load { ptr, i64, i64 }, ptr %a177
store i64 -1, ptr %a181
%t182 = load i64, ptr %t174
%t183 = load ptr, ptr %t173
store i64 0, ptr %a184
br label %find.cond6185
find.cond6185:
%t185 = load i64, ptr %a184
%t186 = icmp slt i64 %t185, %t182
br i1 %t186, label %find.body6186, label %find.end6189
find.body6186:
%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.hit6187, label %find.next6188
find.hit6187:
store i64 %t185, ptr %a181
br label %find.end6189
find.next6188:
%t193 = add i64 %t185, 1
store i64 %t193, ptr %a184
br label %find.cond6185
find.end6189:
%t194 = load i64, ptr %a181
%t195 = icmp sge i64 %t194, 0
%t196 = xor i1 %t195, true
br i1 %t196, label %then6190, label %endif6192
then6190:
%t197 = load ptr, ptr %a1
%t198 = icmp eq ptr %t197, null
br i1 %t198, label %panic6193, label %ok6194
panic6193:
call void @finch_panic(ptr @.str.4093, i64 3331, ptr @.str.4094)
unreachable
ok6194:
%t199 = getelementptr inbounds %S.gen.Gen, ptr %t197, i32 0, i32 38
%t200 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i32 0, i32 1
%t201 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t202 = load { ptr, i64, i64 }, ptr %t201
store { ptr, i64, i64 } { ptr @.str.4095, i64 2, 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
%t207 = load i64, ptr %t200
%t208 = add i64 %t207, 1
call void @finch_arr_reserve(ptr %t199, i64 %t208, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t209 = load ptr, ptr %t199
%t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i64 %t207
store { ptr, i64, i64 } %t206, ptr %t210
store i64 %t208, ptr %t200
%t211 = load ptr, ptr %a1
%t212 = icmp eq ptr %t211, null
br i1 %t212, label %panic6195, label %ok6196
panic6195:
call void @finch_panic(ptr @.str.4096, i64 3332, ptr @.str.4097)
unreachable
ok6196:
%t213 = getelementptr inbounds %S.gen.Gen, ptr %t211, i32 0, i32 2
%t214 = getelementptr inbounds { ptr, i64, i64 }, ptr %t213, i32 0, i32 1
%t215 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t216 = load { ptr, i64, i64 }, ptr %t215
store { ptr, i64, i64 } { ptr @.str.4098, i64 1, i64 0 }, ptr %a218
store { ptr, i64, i64 } %t216, ptr %a219
call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219)
%t220 = load { ptr, i64, i64 }, ptr %a217
store { ptr, i64, i64 } %t220, ptr %a222
store { ptr, i64, i64 } { ptr @.str.4099, i64 19, i64 0 }, ptr %a223
call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223)
%t224 = load { ptr, i64, i64 }, ptr %a221
%t225 = load ptr, ptr %a1
%t226 = load %S.ast.Type, ptr %a170
%t227 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t225, %S.ast.Type %t226)
store { ptr, i64, i64 } %t224, 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
%t232 = load i64, ptr %t214
%t233 = add i64 %t232, 1
call void @finch_arr_reserve(ptr %t213, i64 %t233, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t234 = load ptr, ptr %t213
%t235 = getelementptr inbounds { ptr, i64, i64 }, ptr %t234, i64 %t232
store { ptr, i64, i64 } %t231, ptr %t235
store i64 %t233, ptr %t214
br label %endif6192
endif6192:
%t236 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0
%t237 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t238 = load { ptr, i64, i64 }, ptr %t237
store { ptr, i64, i64 } { ptr @.str.4100, i64 1, i64 0 }, ptr %a240
store { ptr, i64, i64 } %t238, ptr %a241
call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241)
%t242 = load { ptr, i64, i64 }, ptr %a239
%t243 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t242, 0
%t244 = load %S.ast.Type, ptr %a170
store %S.ast.Type %t244, ptr %a245
call void @finch.copy.S_ast_Type(ptr %a246, ptr %a245)
%t247 = load %S.ast.Type, ptr %a246
%t248 = insertvalue %S.gen.Place %t243, %S.ast.Type %t247, 1
%t249 = insertvalue %S.gen.Ref %t236, %S.gen.Place %t248, 1
ret %S.gen.Ref %t249
endif6178:
%t250 = load i64, ptr %a14
%t251 = icmp slt i64 %t250, 0
br i1 %t251, label %then6197, label %endif6199
then6197:
%t252 = load ptr, ptr %a1
%t253 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t254 = load { ptr, i64, i64 }, ptr %t253
%t255 = call i1 @finch.gen.imports(ptr %t252, { ptr, i64, i64 } %t254)
br i1 %t255, label %then6200, label %endif6202
then6200:
%t256 = load ptr, ptr %a1
%t257 = load %S.ast.Node, ptr %a2
%t258 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t259 = load { ptr, i64, i64 }, ptr %t258
store { ptr, i64, i64 } { ptr @.str.4101, i64 1, 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.4102, i64 43, i64 0 }, ptr %a266
call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266)
%t267 = load { ptr, i64, i64 }, ptr %a264
%t268 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t269 = load { ptr, i64, i64 }, ptr %t268
store { ptr, i64, i64 } %t267, 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.4103, i64 10, i64 0 }, ptr %a276
call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276)
%t277 = load { ptr, i64, i64 }, ptr %a274
call void @finch.gen.fail(ptr %t256, %S.ast.Node %t257, { ptr, i64, i64 } %t277)
br label %endif6202
endif6202:
%t278 = load ptr, ptr %a1
%t279 = load %S.ast.Node, ptr %a2
%t280 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t281 = load { ptr, i64, i64 }, ptr %t280
store { ptr, i64, i64 } { ptr @.str.4104, i64 28, i64 0 }, ptr %a283
store { ptr, i64, i64 } %t281, ptr %a284
call void @finch_str_concat(ptr %a282, ptr %a283, ptr %a284)
%t285 = load { ptr, i64, i64 }, ptr %a282
store { ptr, i64, i64 } %t285, ptr %a287
store { ptr, i64, i64 } { ptr @.str.4105, i64 1, i64 0 }, ptr %a288
call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288)
%t289 = load { ptr, i64, i64 }, ptr %a286
call void @finch.gen.fail(ptr %t278, %S.ast.Node %t279, { ptr, i64, i64 } %t289)
br label %endif6199
endif6199:
%t290 = load ptr, ptr %a1
%t291 = load i64, ptr %a14
%t292 = call %S.gen.Var @finch.gen.varAt(ptr %t290, i64 %t291)
store %S.gen.Var %t292, ptr %a293
%t294 = load ptr, ptr %a1
%t295 = load %S.ast.Node, ptr %a2
%t296 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12
%t297 = load i64, ptr %t296
%t298 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i32 0, i32 1
%t300 = load i64, ptr %t299
%t301 = getelementptr inbounds %S.gen.Var, ptr %a293, i32 0, i32 1
%t302 = load %S.ast.Type, ptr %t301
%t303 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t302)
store { ptr, i64, i64 } { ptr @.str.4106, i64 9, i64 0 }, ptr %a305
store { ptr, i64, i64 } %t303, ptr %a306
call void @finch_str_concat(ptr %a304, ptr %a305, ptr %a306)
%t307 = load { ptr, i64, i64 }, ptr %a304
store { ptr, i64, i64 } %t307, ptr %a309
store { ptr, i64, i64 } { ptr @.str.4107, i64 1, i64 0 }, ptr %a310
call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310)
%t311 = load { ptr, i64, i64 }, ptr %a308
%t312 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t313 = load { ptr, i64, i64 }, ptr %t312
store { ptr, i64, i64 } %t311, ptr %a315
store { ptr, i64, i64 } %t313, ptr %a316
call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316)
%t317 = load { ptr, i64, i64 }, ptr %a314
store { ptr, i64, i64 } %t317, ptr %a319
store { ptr, i64, i64 } { ptr @.str.4108, i64 4, i64 0 }, ptr %a320
call void @finch_str_concat(ptr %a318, ptr %a319, ptr %a320)
%t321 = load { ptr, i64, i64 }, ptr %a318
%t322 = getelementptr inbounds %S.gen.Var, ptr %a293, i32 0, i32 5
%t323 = load { ptr, i64, i64 }, ptr %t322
%t324 = getelementptr inbounds %S.gen.Var, ptr %a293, i32 0, i32 6
%t325 = load i64, ptr %t324
%t326 = getelementptr inbounds %S.gen.Var, ptr %a293, i32 0, i32 7
%t327 = load i64, ptr %t326
call void @finch.gen.noteRef(ptr %t294, %S.ast.Node %t295, i64 %t297, i64 %t300, { ptr, i64, i64 } %t321, { ptr, i64, i64 } %t323, i64 %t325, i64 %t327)
%t328 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0
%t329 = getelementptr inbounds %S.gen.Var, ptr %a293, i32 0, i32 2
%t330 = load { ptr, i64, i64 }, ptr %t329
store { ptr, i64, i64 } %t330, ptr %a331
call void @finch_str_copy(ptr %a332, ptr %a331)
%t333 = load { ptr, i64, i64 }, ptr %a332
%t334 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t333, 0
%t335 = getelementptr inbounds %S.gen.Var, ptr %a293, i32 0, i32 1
%t336 = load %S.ast.Type, ptr %t335
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 = insertvalue %S.gen.Place %t334, %S.ast.Type %t339, 1
%t341 = insertvalue %S.gen.Ref %t328, %S.gen.Place %t340, 1
ret %S.gen.Ref %t341
endif6120:
%t342 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0
%t343 = load { ptr, i64, i64 }, ptr %t342
store { ptr, i64, i64 } %t343, ptr %a344
store { ptr, i64, i64 } { ptr @.str.4109, i64 6, i64 0 }, ptr %a345
%t346 = call i32 @finch_str_eq(ptr %a344, ptr %a345)
%t347 = icmp ne i32 %t346, 0
br i1 %t347, label %then6203, label %endif6205
then6203:
%t348 = load ptr, ptr %a1
%t349 = load %S.ast.Node, ptr %a2
%t350 = load i1, ptr %a3
%t351 = call %S.gen.Ref @finch.gen.member(ptr %t348, %S.ast.Node %t349, i1 %t350)
ret %S.gen.Ref %t351
endif6205:
%t352 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0
%t353 = load { ptr, i64, i64 }, ptr %t352
store { ptr, i64, i64 } %t353, ptr %a354
store { ptr, i64, i64 } { ptr @.str.4110, i64 5, i64 0 }, ptr %a355
%t356 = call i32 @finch_str_eq(ptr %a354, ptr %a355)
%t357 = icmp ne i32 %t356, 0
br i1 %t357, label %then6206, label %endif6208
then6206:
%t358 = load ptr, ptr %a1
%t359 = load %S.ast.Node, ptr %a2
%t360 = load i1, ptr %a3
%t361 = call %S.gen.Ref @finch.gen.index(ptr %t358, %S.ast.Node %t359, i1 %t360)
ret %S.gen.Ref %t361
endif6208:
%t362 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0
%t363 = load ptr, ptr %a1
%t364 = load %S.ast.Node, ptr %a2
%t365 = call %S.gen.Val @finch.gen.expr(ptr %t363, %S.ast.Node %t364)
%t366 = insertvalue %S.gen.Ref %t362, %S.gen.Val %t365, 2
ret %S.gen.Ref %t366
}
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
%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
%a28 = alloca { ptr, i64, i64 }, align 16
%a30 = alloca i64, align 16
%a34 = alloca { ptr, i64, i64 }, align 16
%a35 = alloca { ptr, i64, i64 }, align 16
%a36 = 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
%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
%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
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.4112, 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 %then6209, label %endif6211
then6209:
%t13 = load { ptr, i64, i64 }, ptr %a6
store { ptr, i64, i64 } { ptr @.str.4113, 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
store { ptr, i64, i64 } %t17, ptr %a6
br label %endif6211
endif6211:
%t18 = load { ptr, i64, i64 }, ptr %a6
store { ptr, i64, i64 } %t18, ptr %a19
store { ptr, i64, i64 } { ptr @.str.4115, i64 1, i64 0 }, ptr %a21
%t22 = call i64 @finch_str_find(ptr %a19, ptr %a21)
%t23 = icmp sge i64 %t22, 0
%t24 = xor i1 %t23, true
br i1 %t24, label %then6212, label %endif6214
then6212:
%t25 = load { ptr, i64, i64 }, ptr %a6
store { ptr, i64, i64 } %t25, ptr %a26
store { ptr, i64, i64 } { ptr @.str.4117, i64 1, i64 0 }, ptr %a28
%t29 = call i64 @finch_str_find(ptr %a26, ptr %a28)
store i64 %t29, ptr %a30
%t31 = load i64, ptr %a30
%t32 = icmp slt i64 %t31, 0
br i1 %t32, label %then6215, label %endif6217
then6215:
%t33 = load { ptr, i64, i64 }, ptr %a6
store { ptr, i64, i64 } %t33, ptr %a34
store { ptr, i64, i64 } { ptr @.str.4119, i64 1, i64 0 }, ptr %a36
%t37 = call i64 @finch_str_find(ptr %a34, ptr %a36)
store i64 %t37, ptr %a30
br label %endif6217
endif6217:
%t38 = load i64, ptr %a30
%t39 = icmp slt i64 %t38, 0
br i1 %t39, label %then6218, label %endif6220
then6218:
%t40 = load { ptr, i64, i64 }, ptr %a6
store { ptr, i64, i64 } %t40, ptr %a42
store { ptr, i64, i64 } { ptr @.str.4120, i64 2, i64 0 }, ptr %a43
call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43)
%t44 = load { ptr, i64, i64 }, ptr %a41
ret { ptr, i64, i64 } %t44
endif6220:
%t45 = load { ptr, i64, i64 }, ptr %a6
store { ptr, i64, i64 } %t45, ptr %a46
%t48 = load i64, ptr %a30
call void @finch_str_sub(ptr %a47, ptr %a46, i64 0, i64 %t48, ptr @.str.4121, i64 3369)
%t49 = load { ptr, i64, i64 }, ptr %a47
store { ptr, i64, i64 } %t49, ptr %a51
store { ptr, i64, i64 } { ptr @.str.4122, i64 2, i64 0 }, ptr %a52
call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52)
%t53 = load { ptr, i64, i64 }, ptr %a50
%t54 = load { ptr, i64, i64 }, ptr %a6
store { ptr, i64, i64 } %t54, ptr %a55
%t57 = load i64, ptr %a30
%t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1
%t59 = load i64, ptr %t58
call void @finch_str_sub(ptr %a56, ptr %a55, i64 %t57, i64 %t59, ptr @.str.4123, i64 3369)
%t60 = load { ptr, i64, i64 }, ptr %a56
store { ptr, i64, i64 } %t53, ptr %a62
store { ptr, i64, i64 } %t60, ptr %a63
call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63)
%t64 = load { ptr, i64, i64 }, ptr %a61
ret { ptr, i64, i64 } %t64
endif6214:
%t65 = load { ptr, i64, i64 }, ptr %a6
store { ptr, i64, i64 } %t65, ptr %a66
call void @finch_str_copy(ptr %a67, ptr %a66)
%t68 = load { ptr, i64, i64 }, ptr %a67
ret { ptr, i64, i64 } %t68
}
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.4124, 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.from6221
logic.from6221:
br i1 %t8, label %logic.rhs6222, label %logic.end6223
logic.rhs6222:
%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.rend6224
logic.rend6224:
br label %logic.end6223
logic.end6223:
%t14 = phi i1 [ false, %logic.from6221 ], [ %t13, %logic.rend6224 ]
br i1 %t14, label %then6225, label %endif6227
then6225:
%t15 = load ptr, ptr %a1
%t16 = load ptr, ptr %a1
%t17 = icmp eq ptr %t16, null
br i1 %t17, label %panic6228, label %ok6229
panic6228:
call void @finch_panic(ptr @.str.4125, i64 3377, ptr @.str.4126)
unreachable
ok6229:
%t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 13
%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
endif6227:
%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.4127, 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.from6230
logic.from6230:
br i1 %t28, label %logic.rhs6231, label %logic.end6232
logic.rhs6231:
%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 %range6233, label %inrange6234
range6233:
call void @finch_panic_index(ptr @.str.4128, i64 3379, i64 0, i64 %t31)
unreachable
inrange6234:
%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.4129, 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.rend6235
logic.rend6235:
br label %logic.end6232
logic.end6232:
%t41 = phi i1 [ false, %logic.from6230 ], [ %t40, %logic.rend6235 ]
br label %logic.from6236
logic.from6236:
br i1 %t41, label %logic.rhs6237, label %logic.end6238
logic.rhs6237:
%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 %range6239, label %inrange6240
range6239:
call void @finch_panic_index(ptr @.str.4130, i64 3379, i64 0, i64 %t45)
unreachable
inrange6240:
%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.rend6241
logic.rend6241:
br label %logic.end6238
logic.end6238:
%t53 = phi i1 [ false, %logic.from6236 ], [ %t52, %logic.rend6241 ]
br label %logic.from6242
logic.from6242:
br i1 %t53, label %logic.rhs6243, label %logic.end6244
logic.rhs6243:
%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 %range6245, label %inrange6246
range6245:
call void @finch_panic_index(ptr @.str.4131, i64 3379, i64 0, i64 %t57)
unreachable
inrange6246:
%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.rend6247
logic.rend6247:
br label %logic.end6244
logic.end6244:
%t64 = phi i1 [ false, %logic.from6242 ], [ %t63, %logic.rend6247 ]
br i1 %t64, label %then6248, label %endif6250
then6248:
%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 %range6251, label %inrange6252
range6251:
call void @finch_panic_index(ptr @.str.4132, i64 3380, i64 0, i64 %t68)
unreachable
inrange6252:
%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
endif6250:
ret i64 -1
}
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
%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
%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
%a70 = alloca { ptr, i64, i64 }, align 16
%a71 = alloca { ptr, i64, i64 }, align 16
%a72 = 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
%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
%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
%a116 = alloca { ptr, i64, i64 }, align 16
%a117 = alloca { ptr, i64, i64 }, align 16
%a118 = 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
%a140 = alloca { ptr, i64, i64 }, align 16
%a141 = 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 %panic6253, label %ok6254
panic6253:
call void @finch_panic(ptr @.str.4133, i64 3387, ptr @.str.4134)
unreachable
ok6254:
%t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 20
%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 %range6255, label %inrange6256
range6255:
call void @finch_panic_index(ptr @.str.4135, i64 3387, i64 %t7, i64 %t9)
unreachable
inrange6256:
%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.cond6257
find.cond6257:
%t26 = load i64, ptr %a25
%t27 = icmp slt i64 %t26, %t23
br i1 %t27, label %find.body6258, label %find.end6261
find.body6258:
%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.hit6259, label %find.next6260
find.hit6259:
store i64 %t26, ptr %a22
br label %find.end6261
find.next6260:
%t34 = add i64 %t26, 1
store i64 %t34, ptr %a25
br label %find.cond6257
find.end6261:
%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 %then6262, label %endif6264
then6262:
%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.4136, 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.4137, i64 17, i64 0 }, ptr %a49
call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49)
%t50 = load { ptr, i64, i64 }, ptr %a47
%t51 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t52 = load { ptr, i64, i64 }, ptr %t51
store { ptr, i64, i64 } %t50, 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.4138, i64 11, i64 0 }, ptr %a59
call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59)
%t60 = load { ptr, i64, i64 }, ptr %a57
%t61 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 2
%t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t61, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.4139, i64 2, i64 0 }, ptr %a63
call void @finch_str_join(ptr %a64, ptr %t61, ptr %a63)
%t65 = load { ptr, i64, i64 }, ptr %a64
store { ptr, i64, i64 } %t60, ptr %a67
store { ptr, i64, i64 } %t65, ptr %a68
call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68)
%t69 = load { ptr, i64, i64 }, ptr %a66
store { ptr, i64, i64 } %t69, ptr %a71
store { ptr, i64, i64 } { ptr @.str.4140, i64 1, i64 0 }, ptr %a72
call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72)
%t73 = load { ptr, i64, i64 }, ptr %a70
call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t73)
br label %endif6264
endif6264:
%t74 = load ptr, ptr %a1
%t75 = load %S.ast.Node, ptr %a2
%t76 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12
%t77 = load i64, ptr %t76
%t78 = add i64 %t77, 1
%t79 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %t79, i32 0, i32 1
%t81 = load i64, ptr %t80
%t82 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1
%t83 = load { ptr, i64, i64 }, ptr %t82
store { ptr, i64, i64 } { ptr @.str.4141, i64 9, i64 0 }, ptr %a85
store { ptr, i64, i64 } %t83, ptr %a86
call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86)
%t87 = load { ptr, i64, i64 }, ptr %a84
store { ptr, i64, i64 } %t87, ptr %a89
store { ptr, i64, i64 } { ptr @.str.4142, i64 1, i64 0 }, ptr %a90
call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90)
%t91 = load { ptr, i64, i64 }, ptr %a88
%t92 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t93 = load { ptr, i64, i64 }, ptr %t92
store { ptr, i64, i64 } %t91, ptr %a95
store { ptr, i64, i64 } %t93, ptr %a96
call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96)
%t97 = load { ptr, i64, i64 }, ptr %a94
store { ptr, i64, i64 } %t97, ptr %a99
store { ptr, i64, i64 } { ptr @.str.4143, i64 3, i64 0 }, ptr %a100
call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100)
%t101 = load { ptr, i64, i64 }, ptr %a98
%t102 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3
%t103 = load i64, ptr %a36
%t104 = load { ptr, i64, i64 }, ptr %t102
%t105 = extractvalue { ptr, i64, i64 } %t104, 1
%t106 = icmp uge i64 %t103, %t105
br i1 %t106, label %range6265, label %inrange6266
range6265:
call void @finch_panic_index(ptr @.str.4144, i64 3392, i64 %t103, i64 %t105)
unreachable
inrange6266:
%t107 = extractvalue { ptr, i64, i64 } %t104, 0
%t108 = getelementptr inbounds i64, ptr %t107, i64 %t103
%t109 = load i64, ptr %t108
call void @finch_str_from_int(ptr %a110, i64 %t109)
%t111 = load { ptr, i64, i64 }, ptr %a110
store { ptr, i64, i64 } %t101, 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.4145, i64 4, i64 0 }, ptr %a118
call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118)
%t119 = load { ptr, i64, i64 }, ptr %a116
call void @finch.gen.noteRef(ptr %t74, %S.ast.Node %t75, i64 %t78, i64 %t81, { ptr, i64, i64 } %t119, { ptr, i64, i64 } { ptr @.str.4146, i64 0, i64 0 }, i64 0, i64 0)
%t120 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3
%t121 = load i64, ptr %a36
%t122 = load { ptr, i64, i64 }, ptr %t120
%t123 = extractvalue { ptr, i64, i64 } %t122, 1
%t124 = icmp uge i64 %t121, %t123
br i1 %t124, label %range6267, label %inrange6268
range6267:
call void @finch_panic_index(ptr @.str.4147, i64 3393, i64 %t121, i64 %t123)
unreachable
inrange6268:
%t125 = extractvalue { ptr, i64, i64 } %t122, 0
%t126 = getelementptr inbounds i64, ptr %t125, i64 %t121
%t127 = load i64, ptr %t126
call void @finch_str_from_int(ptr %a128, i64 %t127)
%t129 = load { ptr, i64, i64 }, ptr %a128
%t130 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t129, 0
%t131 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.4148, i64 4, i64 0 }, 0
%t132 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1
%t133 = load { ptr, i64, i64 }, ptr %t132
store { ptr, i64, i64 } %t133, ptr %a134
call void @finch_str_copy(ptr %a135, ptr %a134)
%t136 = load { ptr, i64, i64 }, ptr %a135
%t137 = insertvalue %S.ast.Type %t131, { ptr, i64, i64 } %t136, 2
%t138 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 0
%t139 = load { ptr, i64, i64 }, ptr %t138
store { ptr, i64, i64 } %t139, ptr %a140
call void @finch_str_copy(ptr %a141, ptr %a140)
%t142 = load { ptr, i64, i64 }, ptr %a141
%t143 = insertvalue %S.ast.Type %t137, { ptr, i64, i64 } %t142, 3
%t144 = insertvalue %S.gen.Val %t130, %S.ast.Type %t143, 1
ret %S.gen.Val %t144
}
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
%a35 = alloca %S.gen.Ref, align 16
%a39 = alloca %S.ast.Type, align 16
%a40 = alloca %S.ast.Type, align 16
%a42 = alloca %S.ast.Type, align 16
%a48 = alloca %S.ast.Type, align 16
%a49 = alloca %S.ast.Type, align 16
%a53 = alloca { ptr, i64, i64 }, align 16
%a54 = 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
%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
%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
%a107 = alloca %S.ast.Type, align 16
%a108 = alloca %S.ast.Type, align 16
%a110 = alloca %S.ast.Type, align 16
%a111 = alloca i1, align 16
%a114 = alloca { ptr, i64, i64 }, align 16
%a115 = alloca { ptr, i64, i64 }, align 16
%a134 = alloca i64, align 16
%a137 = alloca i64, align 16
%a142 = alloca { ptr, i64, i64 }, align 16
%a143 = alloca { ptr, i64, i64 }, align 16
%a151 = alloca { ptr, i64, i64 }, align 16
%a152 = alloca { ptr, i64, i64 }, align 16
%a160 = alloca { ptr, i64, i64 }, align 16
%a161 = alloca { ptr, i64, i64 }, align 16
%a165 = alloca %S.ast.Type, align 16
%a166 = alloca %S.ast.Type, align 16
%a172 = alloca { ptr, i64, i64 }, align 16
%a173 = 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
%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
%a195 = alloca %S.ast.Type, align 16
%a196 = alloca %S.ast.Type, align 16
%a201 = alloca %S.ast.Type, align 16
%a202 = alloca %S.ast.Type, align 16
%a206 = alloca { ptr, i64, i64 }, align 16
%a207 = 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
%a225 = alloca { ptr, i64, i64 }, align 16
%a226 = alloca { ptr, i64, i64 }, align 16
%a232 = 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
%a251 = 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
%a266 = alloca { ptr, i64, i64 }, align 16
%a267 = alloca { ptr, i64, i64 }, align 16
%a282 = alloca { ptr, i64, i64 }, align 16
%a283 = alloca { ptr, i64, i64 }, align 16
%a288 = alloca { ptr, i64, i64 }, align 16
%a289 = alloca { ptr, i64, i64 }, align 16
%a295 = alloca { ptr, i64, i64 }, align 16
%a296 = 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
%a324 = alloca { ptr, i64, i64 }, align 16
%a325 = alloca { ptr, i64, i64 }, align 16
%a327 = alloca { ptr, i64, i64 }, align 16
%a340 = alloca { ptr, i64, i64 }, align 16
%a341 = 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
%a360 = alloca { ptr, i64, i64 }, align 16
%a361 = alloca { ptr, i64, i64 }, align 16
%a362 = alloca { ptr, i64, i64 }, align 16
%a378 = alloca { ptr, i64, i64 }, align 16
%a379 = alloca { ptr, i64, i64 }, align 16
%a384 = alloca { ptr, i64, i64 }, align 16
%a385 = alloca { ptr, i64, i64 }, align 16
%a391 = alloca { ptr, i64, i64 }, align 16
%a392 = alloca { ptr, i64, i64 }, align 16
%a398 = alloca { ptr, i64, i64 }, align 16
%a399 = 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
%a410 = alloca { ptr, i64, i64 }, align 16
%a411 = alloca { ptr, i64, i64 }, align 16
%a412 = 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
%a427 = alloca { ptr, i64, i64 }, align 16
%a428 = alloca { ptr, i64, i64 }, align 16
%a429 = 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
%a443 = 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
%a461 = alloca { ptr, i64, i64 }, align 16
%a462 = alloca { ptr, i64, i64 }, align 16
%a463 = 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
%a472 = alloca { ptr, i64, i64 }, align 16
%a473 = alloca { ptr, i64, i64 }, align 16
%a474 = alloca { ptr, i64, i64 }, align 16
%a483 = alloca { ptr, i64, i64 }, align 16
%a484 = 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
%a497 = alloca { ptr, i64, i64 }, align 16
%a498 = alloca { ptr, i64, i64 }, align 16
%a499 = 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
%a520 = alloca %S.gen.StructDef, align 16
%a521 = alloca %S.gen.StructDef, align 16
%a523 = alloca %S.gen.StructDef, align 16
%a528 = alloca i64, align 16
%a531 = alloca i64, align 16
%a536 = alloca { ptr, i64, i64 }, align 16
%a537 = alloca { ptr, i64, i64 }, align 16
%a542 = alloca 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
%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
%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
%a576 = alloca { ptr, i64, i64 }, align 16
%a577 = alloca { ptr, i64, i64 }, align 16
%a578 = alloca { ptr, i64, i64 }, align 16
%a588 = alloca %S.ast.Type, align 16
%a589 = alloca %S.ast.Type, align 16
%a591 = alloca %S.ast.Type, 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 { ptr, i64, i64 }, align 16
%a608 = 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
%a626 = alloca { ptr, i64, i64 }, align 16
%a627 = 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
%a632 = 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
%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
%a660 = alloca { ptr, i64, i64 }, align 16
%a663 = alloca { ptr, i64, i64 }, align 16
%a664 = alloca { ptr, i64, i64 }, align 16
%a668 = alloca %S.ast.Type, align 16
%a669 = alloca %S.ast.Type, 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
%a688 = alloca { ptr, i64, i64 }, align 16
%a689 = alloca { ptr, i64, i64 }, align 16
%a690 = 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
%a704 = alloca { ptr, i64, i64 }, align 16
%a706 = alloca { ptr, i64, i64 }, align 16
%a707 = alloca { ptr, i64, i64 }, align 16
%a708 = 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
%a718 = alloca %S.ast.Type, align 16
%a719 = alloca %S.ast.Type, align 16
%a722 = alloca %S.gen.Val, align 16
%a736 = alloca %S.ast.Type, align 16
%a737 = alloca %S.ast.Type, align 16
%a743 = alloca %S.gen.Val, align 16
%a744 = 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 %range6269, label %inrange6270
range6269:
call void @finch_panic_index(ptr @.str.4149, i64 3397, i64 0, i64 %t7)
unreachable
inrange6270:
%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.enumNamed(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 %then6271, label %endif6273
then6271:
%t16 = load i1, ptr %a3
br i1 %t16, label %then6274, label %endif6276
then6274:
%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.4150, i64 37, i64 0 })
br label %endif6276
endif6276:
%t19 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0
%t20 = load ptr, ptr %a1
%t21 = load %S.ast.Node, ptr %a2
%t22 = load i64, ptr %a13
%t23 = call %S.gen.Val @finch.gen.enumValue(ptr %t20, %S.ast.Node %t21, i64 %t22)
%t24 = insertvalue %S.gen.Ref %t19, %S.gen.Val %t23, 2
ret %S.gen.Ref %t24
endif6273:
%t25 = load ptr, ptr %a1
%t26 = getelementptr inbounds %S.ast.Node, ptr %a2, 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 %range6277, label %inrange6278
range6277:
call void @finch_panic_index(ptr @.str.4151, i64 3404, i64 0, i64 %t28)
unreachable
inrange6278:
%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 = load i1, ptr %a3
%t34 = call %S.gen.Ref @finch.gen.ref(ptr %t25, %S.ast.Node %t32, i1 %t33)
store %S.gen.Ref %t34, ptr %a35
%t36 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 2
%t37 = getelementptr inbounds %S.gen.Val, ptr %t36, i32 0, i32 1
%t38 = load %S.ast.Type, ptr %t37
store %S.ast.Type %t38, ptr %a39
call void @finch.copy.S_ast_Type(ptr %a40, ptr %a39)
%t41 = load %S.ast.Type, ptr %a40
store %S.ast.Type %t41, ptr %a42
%t43 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 0
%t44 = load i1, ptr %t43
br i1 %t44, label %then6279, label %endif6281
then6279:
%t45 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 1
%t46 = getelementptr inbounds %S.gen.Place, ptr %t45, i32 0, i32 1
%t47 = load %S.ast.Type, ptr %t46
store %S.ast.Type %t47, ptr %a48
call void @finch.copy.S_ast_Type(ptr %a49, ptr %a48)
%t50 = load %S.ast.Type, ptr %a49
store %S.ast.Type %t50, ptr %a42
br label %endif6281
endif6281:
%t51 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0
%t52 = load { ptr, i64, i64 }, ptr %t51
store { ptr, i64, i64 } %t52, ptr %a53
store { ptr, i64, i64 } { ptr @.str.4152, 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 %then6282, label %endif6284
then6282:
%t57 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 2
%t58 = getelementptr inbounds %S.gen.Val, ptr %t57, i32 0, i32 0
%t59 = load { ptr, i64, i64 }, ptr %t58
store { ptr, i64, i64 } %t59, ptr %a60
call void @finch_str_copy(ptr %a61, ptr %a60)
%t62 = load { ptr, i64, i64 }, ptr %a61
store { ptr, i64, i64 } %t62, ptr %a63
%t64 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 0
%t65 = load i1, ptr %t64
br i1 %t65, label %then6285, label %endif6287
then6285:
%t66 = load ptr, ptr %a1
%t67 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 1
%t68 = getelementptr inbounds %S.gen.Place, ptr %t67, i32 0, i32 0
%t69 = load { ptr, i64, i64 }, ptr %t68
%t70 = call { ptr, i64, i64 } @finch.gen.load(ptr %t66, { ptr, i64, i64 } { ptr @.str.4153, i64 3, i64 0 }, { ptr, i64, i64 } %t69)
store { ptr, i64, i64 } %t70, ptr %a63
br label %endif6287
endif6287:
%t71 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 1
%t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i32 0, i32 1
%t73 = load i64, ptr %t72
%t74 = icmp eq i64 %t73, 0
br i1 %t74, label %then6288, label %endif6290
then6288:
%t75 = load ptr, ptr %a1
%t76 = load %S.ast.Node, ptr %a2
call void @finch.gen.fail(ptr %t75, %S.ast.Node %t76, { ptr, i64, i64 } { ptr @.str.4154, i64 57, i64 0 })
br label %endif6290
endif6290:
%t77 = load ptr, ptr %a1
%t78 = load ptr, ptr %a1
%t79 = load { ptr, i64, i64 }, ptr %a63
store { ptr, i64, i64 } { ptr @.str.4155, i64 12, i64 0 }, ptr %a81
store { ptr, i64, i64 } %t79, 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 %a85
store { ptr, i64, i64 } { ptr @.str.4156, i64 6, i64 0 }, ptr %a86
call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86)
%t87 = load { ptr, i64, i64 }, ptr %a84
%t88 = call { ptr, i64, i64 } @finch.gen.op(ptr %t78, { ptr, i64, i64 } %t87)
%t89 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t90 = load { ptr, i64, i64 }, ptr %t89
store { ptr, i64, i64 } { ptr @.str.4157, i64 6, 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.4158, i64 18, i64 0 }, ptr %a97
call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97)
%t98 = load { ptr, i64, i64 }, ptr %a95
%t99 = load %S.ast.Node, ptr %a2
call void @finch.gen.panicIf(ptr %t77, { ptr, i64, i64 } %t88, { ptr, i64, i64 } %t98, %S.ast.Node %t99)
%t100 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 1
%t101 = load { ptr, i64, i64 }, ptr %t100
%t102 = extractvalue { ptr, i64, i64 } %t101, 1
%t103 = icmp uge i64 0, %t102
br i1 %t103, label %range6291, label %inrange6292
range6291:
call void @finch_panic_index(ptr @.str.4159, i64 3418, i64 0, i64 %t102)
unreachable
inrange6292:
%t104 = extractvalue { ptr, i64, i64 } %t101, 0
%t105 = getelementptr inbounds %S.ast.Type, ptr %t104, i64 0
%t106 = load %S.ast.Type, ptr %t105
store %S.ast.Type %t106, ptr %a107
call void @finch.copy.S_ast_Type(ptr %a108, ptr %a107)
%t109 = load %S.ast.Type, ptr %a108
store %S.ast.Type %t109, ptr %a110
store i1 false, ptr %a111
%t112 = getelementptr inbounds %S.ast.Type, ptr %a110, i32 0, i32 0
%t113 = load { ptr, i64, i64 }, ptr %t112
store { ptr, i64, i64 } %t113, ptr %a114
store { ptr, i64, i64 } { ptr @.str.4160, i64 6, i64 0 }, ptr %a115
%t116 = call i32 @finch_str_eq(ptr %a114, ptr %a115)
%t117 = icmp ne i32 %t116, 0
br i1 %t117, label %then6293, label %endif6295
then6293:
%t118 = load ptr, ptr %a1
%t119 = icmp eq ptr %t118, null
br i1 %t119, label %panic6296, label %ok6297
panic6296:
call void @finch_panic(ptr @.str.4161, i64 3421, ptr @.str.4162)
unreachable
ok6297:
%t120 = getelementptr inbounds %S.gen.Gen, ptr %t118, i32 0, i32 15
%t121 = load ptr, ptr %a1
%t122 = getelementptr inbounds %S.ast.Type, ptr %a110, i32 0, i32 3
%t123 = load { ptr, i64, i64 }, ptr %t122
%t124 = getelementptr inbounds %S.ast.Type, ptr %a110, i32 0, i32 2
%t125 = load { ptr, i64, i64 }, ptr %t124
%t126 = call i64 @finch.gen.findStruct(ptr %t121, { ptr, i64, i64 } %t123, { ptr, i64, i64 } %t125)
%t127 = load { ptr, i64, i64 }, ptr %t120
%t128 = extractvalue { ptr, i64, i64 } %t127, 1
%t129 = icmp uge i64 %t126, %t128
br i1 %t129, label %range6298, label %inrange6299
range6298:
call void @finch_panic_index(ptr @.str.4163, i64 3421, i64 %t126, i64 %t128)
unreachable
inrange6299:
%t130 = extractvalue { ptr, i64, i64 } %t127, 0
%t131 = getelementptr inbounds %S.gen.StructDef, ptr %t130, i64 %t126
%t132 = getelementptr inbounds %S.gen.StructDef, ptr %t131, i32 0, i32 11
%t133 = getelementptr inbounds { ptr, i64, i64 }, ptr %t132, i32 0, i32 1
store i64 -1, ptr %a134
%t135 = load i64, ptr %t133
%t136 = load ptr, ptr %t132
store i64 0, ptr %a137
br label %find.cond6300
find.cond6300:
%t138 = load i64, ptr %a137
%t139 = icmp slt i64 %t138, %t135
br i1 %t139, label %find.body6301, label %find.end6304
find.body6301:
%t140 = getelementptr inbounds { ptr, i64, i64 }, ptr %t136, i64 %t138
%t141 = load { ptr, i64, i64 }, ptr %t140
store { ptr, i64, i64 } %t141, ptr %a142
store { ptr, i64, i64 } { ptr @.str.4164, i64 5, i64 0 }, ptr %a143
%t144 = call i32 @finch_str_eq(ptr %a142, ptr %a143)
%t145 = icmp ne i32 %t144, 0
br i1 %t145, label %find.hit6302, label %find.next6303
find.hit6302:
store i64 %t138, ptr %a134
br label %find.end6304
find.next6303:
%t146 = add i64 %t138, 1
store i64 %t146, ptr %a137
br label %find.cond6300
find.end6304:
%t147 = load i64, ptr %a134
%t148 = icmp sge i64 %t147, 0
store i1 %t148, ptr %a111
br label %endif6295
endif6295:
%t149 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t150 = load { ptr, i64, i64 }, ptr %t149
store { ptr, i64, i64 } %t150, ptr %a151
store { ptr, i64, i64 } { ptr @.str.4165, 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.from6305
logic.from6305:
br i1 %t154, label %logic.rhs6306, label %logic.end6307
logic.rhs6306:
%t155 = load i1, ptr %a111
%t156 = xor i1 %t155, true
br label %logic.rend6308
logic.rend6308:
br label %logic.end6307
logic.end6307:
%t157 = phi i1 [ false, %logic.from6305 ], [ %t156, %logic.rend6308 ]
br i1 %t157, label %then6309, label %endif6311
then6309:
%t158 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0
%t159 = load { ptr, i64, i64 }, ptr %a63
store { ptr, i64, i64 } %t159, ptr %a160
call void @finch_str_copy(ptr %a161, ptr %a160)
%t162 = load { ptr, i64, i64 }, ptr %a161
%t163 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t162, 0
%t164 = load %S.ast.Type, ptr %a110
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.Place %t163, %S.ast.Type %t167, 1
%t169 = insertvalue %S.gen.Ref %t158, %S.gen.Place %t168, 1
ret %S.gen.Ref %t169
endif6311:
%t170 = getelementptr inbounds %S.ast.Type, ptr %a110, i32 0, i32 0
%t171 = load { ptr, i64, i64 }, ptr %t170
store { ptr, i64, i64 } %t171, ptr %a172
store { ptr, i64, i64 } { ptr @.str.4166, i64 6, i64 0 }, ptr %a173
%t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173)
%t175 = icmp eq i32 %t174, 0
br i1 %t175, label %then6312, label %endif6314
then6312:
%t176 = load ptr, ptr %a1
%t177 = load %S.ast.Node, ptr %a2
%t178 = load %S.ast.Type, ptr %a42
%t179 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t178)
store { ptr, i64, i64 } { ptr @.str.4167, i64 2, i64 0 }, ptr %a181
store { ptr, i64, i64 } %t179, ptr %a182
call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182)
%t183 = load { ptr, i64, i64 }, ptr %a180
store { ptr, i64, i64 } %t183, ptr %a185
store { ptr, i64, i64 } { ptr @.str.4168, i64 43, i64 0 }, ptr %a186
call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186)
%t187 = load { ptr, i64, i64 }, ptr %a184
call void @finch.gen.fail(ptr %t176, %S.ast.Node %t177, { ptr, i64, i64 } %t187)
br label %endif6314
endif6314:
%t188 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0
%t189 = load { ptr, i64, i64 }, ptr %a63
store { ptr, i64, i64 } %t189, ptr %a190
call void @finch_str_copy(ptr %a191, ptr %a190)
%t192 = load { ptr, i64, i64 }, ptr %a191
%t193 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t192, 0
%t194 = load %S.ast.Type, ptr %a110
store %S.ast.Type %t194, ptr %a195
call void @finch.copy.S_ast_Type(ptr %a196, ptr %a195)
%t197 = load %S.ast.Type, ptr %a196
%t198 = insertvalue %S.gen.Place %t193, %S.ast.Type %t197, 1
%t199 = insertvalue %S.gen.Ref %t188, %S.gen.Place %t198, 1
store %S.gen.Ref %t199, ptr %a35
%t200 = load %S.ast.Type, ptr %a110
store %S.ast.Type %t200, ptr %a201
call void @finch.copy.S_ast_Type(ptr %a202, ptr %a201)
%t203 = load %S.ast.Type, ptr %a202
store %S.ast.Type %t203, ptr %a42
br label %endif6284
endif6284:
%t204 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0
%t205 = load { ptr, i64, i64 }, ptr %t204
store { ptr, i64, i64 } %t205, ptr %a206
store { ptr, i64, i64 } { ptr @.str.4169, i64 5, i64 0 }, ptr %a207
%t208 = call i32 @finch_str_eq(ptr %a206, ptr %a207)
%t209 = icmp ne i32 %t208, 0
br i1 %t209, label %then6315, label %endif6317
then6315:
%t210 = load i1, ptr %a3
br i1 %t210, label %then6318, label %endif6320
then6318:
%t211 = load ptr, ptr %a1
%t212 = load %S.ast.Node, ptr %a2
%t213 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t214 = load { ptr, i64, i64 }, ptr %t213
store { ptr, i64, i64 } { ptr @.str.4170, i64 1, i64 0 }, ptr %a216
store { ptr, i64, i64 } %t214, ptr %a217
call void @finch_str_concat(ptr %a215, ptr %a216, ptr %a217)
%t218 = load { ptr, i64, i64 }, ptr %a215
store { ptr, i64, i64 } %t218, ptr %a220
store { ptr, i64, i64 } { ptr @.str.4171, i64 26, i64 0 }, ptr %a221
call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221)
%t222 = load { ptr, i64, i64 }, ptr %a219
call void @finch.gen.fail(ptr %t211, %S.ast.Node %t212, { ptr, i64, i64 } %t222)
br label %endif6320
endif6320:
%t223 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t224 = load { ptr, i64, i64 }, ptr %t223
store { ptr, i64, i64 } %t224, ptr %a225
store { ptr, i64, i64 } { ptr @.str.4172, i64 3, i64 0 }, ptr %a226
%t227 = call i32 @finch_str_eq(ptr %a225, ptr %a226)
%t228 = icmp ne i32 %t227, 0
br i1 %t228, label %then6321, label %endif6323
then6321:
%t229 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0
%t230 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 4
%t231 = load i64, ptr %t230
call void @finch_str_from_int(ptr %a232, i64 %t231)
%t233 = load { ptr, i64, i64 }, ptr %a232
%t234 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t233, 0
%t235 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4173, i64 3, i64 0 })
%t236 = insertvalue %S.gen.Val %t234, %S.ast.Type %t235, 1
%t237 = insertvalue %S.gen.Val %t236, i1 true, 3
%t238 = insertvalue %S.gen.Ref %t229, %S.gen.Val %t237, 2
ret %S.gen.Ref %t238
endif6323:
%t239 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t240 = load { ptr, i64, i64 }, ptr %t239
store { ptr, i64, i64 } %t240, ptr %a241
store { ptr, i64, i64 } { ptr @.str.4174, i64 3, i64 0 }, ptr %a242
%t243 = call i32 @finch_str_eq(ptr %a241, ptr %a242)
%t244 = icmp eq i32 %t243, 0
br i1 %t244, label %then6324, label %endif6326
then6324:
%t245 = load ptr, ptr %a1
%t246 = load %S.ast.Node, ptr %a2
%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.4175, i64 34, 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
store { ptr, i64, i64 } %t252, ptr %a254
store { ptr, i64, i64 } { ptr @.str.4176, i64 1, i64 0 }, ptr %a255
call void @finch_str_concat(ptr %a253, ptr %a254, ptr %a255)
%t256 = load { ptr, i64, i64 }, ptr %a253
call void @finch.gen.fail(ptr %t245, %S.ast.Node %t246, { ptr, i64, i64 } %t256)
br label %endif6326
endif6326:
%t257 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 0
%t258 = load i1, ptr %t257
%t259 = xor i1 %t258, true
br i1 %t259, label %then6327, label %endif6329
then6327:
%t260 = load ptr, ptr %a1
%t261 = load %S.ast.Node, ptr %a2
call void @finch.gen.fail(ptr %t260, %S.ast.Node %t261, { ptr, i64, i64 } { ptr @.str.4177, i64 48, i64 0 })
br label %endif6329
endif6329:
%t262 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0
%t263 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 1
%t264 = getelementptr inbounds %S.gen.Place, ptr %t263, i32 0, i32 0
%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 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t268, 0
%t270 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 1
%t271 = load { ptr, i64, i64 }, ptr %t270
%t272 = extractvalue { ptr, i64, i64 } %t271, 1
%t273 = icmp uge i64 0, %t272
br i1 %t273, label %range6330, label %inrange6331
range6330:
call void @finch_panic_index(ptr @.str.4178, i64 3445, i64 0, i64 %t272)
unreachable
inrange6331:
%t274 = extractvalue { ptr, i64, i64 } %t271, 0
%t275 = getelementptr inbounds %S.ast.Type, ptr %t274, i64 0
%t276 = load %S.ast.Type, ptr %t275
%t277 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t276)
%t278 = insertvalue %S.gen.Val %t269, %S.ast.Type %t277, 1
%t279 = insertvalue %S.gen.Ref %t262, %S.gen.Val %t278, 2
ret %S.gen.Ref %t279
endif6317:
%t280 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0
%t281 = load { ptr, i64, i64 }, ptr %t280
store { ptr, i64, i64 } %t281, ptr %a282
store { ptr, i64, i64 } { ptr @.str.4179, 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.from6332
logic.from6332:
br i1 %t285, label %logic.end6334, label %logic.rhs6333
logic.rhs6333:
%t286 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0
%t287 = load { ptr, i64, i64 }, ptr %t286
store { ptr, i64, i64 } %t287, ptr %a288
store { ptr, i64, i64 } { ptr @.str.4180, i64 3, i64 0 }, ptr %a289
%t290 = call i32 @finch_str_eq(ptr %a288, ptr %a289)
%t291 = icmp ne i32 %t290, 0
br label %logic.rend6335
logic.rend6335:
br label %logic.end6334
logic.end6334:
%t292 = phi i1 [ true, %logic.from6332 ], [ %t291, %logic.rend6335 ]
br label %logic.from6336
logic.from6336:
br i1 %t292, label %logic.rhs6337, label %logic.end6338
logic.rhs6337:
%t293 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t294 = load { ptr, i64, i64 }, ptr %t293
store { ptr, i64, i64 } %t294, ptr %a295
store { ptr, i64, i64 } { ptr @.str.4181, i64 3, i64 0 }, ptr %a296
%t297 = call i32 @finch_str_eq(ptr %a295, ptr %a296)
%t298 = icmp ne i32 %t297, 0
br label %logic.rend6339
logic.rend6339:
br label %logic.end6338
logic.end6338:
%t299 = phi i1 [ false, %logic.from6336 ], [ %t298, %logic.rend6339 ]
br i1 %t299, label %then6340, label %endif6342
then6340:
%t300 = load i1, ptr %a3
br i1 %t300, label %then6343, label %endif6345
then6343:
%t301 = load ptr, ptr %a1
%t302 = load %S.ast.Node, ptr %a2
call void @finch.gen.fail(ptr %t301, %S.ast.Node %t302, { ptr, i64, i64 } { ptr @.str.4182, i64 30, i64 0 })
br label %endif6345
endif6345:
%t303 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 0
%t304 = load i1, ptr %t303
%t305 = xor i1 %t304, true
br label %logic.from6346
logic.from6346:
br i1 %t305, label %logic.rhs6347, label %logic.end6348
logic.rhs6347:
%t306 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 2
%t307 = getelementptr inbounds %S.gen.Val, ptr %t306, i32 0, i32 2
%t308 = load i1, ptr %t307
br label %logic.rend6349
logic.rend6349:
br label %logic.end6348
logic.end6348:
%t309 = phi i1 [ false, %logic.from6346 ], [ %t308, %logic.rend6349 ]
br label %logic.from6350
logic.from6350:
br i1 %t309, label %logic.rhs6351, label %logic.end6352
logic.rhs6351:
%t310 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 2
%t311 = getelementptr inbounds %S.gen.Val, ptr %t310, i32 0, i32 0
%t312 = load { ptr, i64, i64 }, ptr %t311
store { ptr, i64, i64 } %t312, ptr %a313
store { ptr, i64, i64 } { ptr @.str.4184, i64 1, i64 0 }, ptr %a315
%t316 = call i32 @finch_str_starts(ptr %a313, ptr %a315)
%t317 = icmp ne i32 %t316, 0
br label %logic.rend6353
logic.rend6353:
br label %logic.end6352
logic.end6352:
%t318 = phi i1 [ false, %logic.from6350 ], [ %t317, %logic.rend6353 ]
br i1 %t318, label %then6354, label %endif6356
then6354:
%t319 = load ptr, ptr %a1
%t320 = load %S.ast.Node, ptr %a2
call void @finch.gen.fail(ptr %t319, %S.ast.Node %t320, { ptr, i64, i64 } { ptr @.str.4185, i64 53, i64 0 })
br label %endif6356
endif6356:
%t321 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 2
%t322 = getelementptr inbounds %S.gen.Val, ptr %t321, i32 0, i32 0
%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
store { ptr, i64, i64 } %t326, ptr %a327
%t328 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 0
%t329 = load i1, ptr %t328
br i1 %t329, label %then6357, label %endif6359
then6357:
%t330 = load ptr, ptr %a1
%t331 = load ptr, ptr %a1
%t332 = load %S.ast.Type, ptr %a42
%t333 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t331, %S.ast.Type %t332)
%t334 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 1
%t335 = getelementptr inbounds %S.gen.Place, ptr %t334, i32 0, i32 0
%t336 = load { ptr, i64, i64 }, ptr %t335
%t337 = call { ptr, i64, i64 } @finch.gen.load(ptr %t330, { ptr, i64, i64 } %t333, { ptr, i64, i64 } %t336)
store { ptr, i64, i64 } %t337, ptr %a327
br label %endif6359
endif6359:
%t338 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0
%t339 = load { ptr, i64, i64 }, ptr %t338
store { ptr, i64, i64 } %t339, ptr %a340
store { ptr, i64, i64 } { ptr @.str.4186, i64 3, i64 0 }, ptr %a341
%t342 = call i32 @finch_str_eq(ptr %a340, ptr %a341)
%t343 = icmp ne i32 %t342, 0
br i1 %t343, label %then6360, label %endif6362
then6360:
%t344 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0
%t345 = load ptr, ptr %a1
%t346 = load { ptr, i64, i64 }, ptr %a327
%t347 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t345, { ptr, i64, i64 } %t346)
%t348 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t347, 0
%t349 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4187, i64 4, i64 0 })
%t350 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t349)
%t351 = insertvalue %S.gen.Val %t348, %S.ast.Type %t350, 1
%t352 = insertvalue %S.gen.Ref %t344, %S.gen.Val %t351, 2
ret %S.gen.Ref %t352
endif6362:
%t353 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0
%t354 = load ptr, ptr %a1
%t355 = load { ptr, i64, i64 }, ptr %a327
store { ptr, i64, i64 } { ptr @.str.4188, i64 31, i64 0 }, ptr %a357
store { ptr, i64, i64 } %t355, ptr %a358
call void @finch_str_concat(ptr %a356, ptr %a357, ptr %a358)
%t359 = load { ptr, i64, i64 }, ptr %a356
store { ptr, i64, i64 } %t359, ptr %a361
store { ptr, i64, i64 } { ptr @.str.4189, i64 3, i64 0 }, ptr %a362
call void @finch_str_concat(ptr %a360, ptr %a361, ptr %a362)
%t363 = load { ptr, i64, i64 }, ptr %a360
%t364 = call { ptr, i64, i64 } @finch.gen.op(ptr %t354, { ptr, i64, i64 } %t363)
%t365 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t364, 0
%t366 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 1
%t367 = load { ptr, i64, i64 }, ptr %t366
%t368 = extractvalue { ptr, i64, i64 } %t367, 1
%t369 = icmp uge i64 0, %t368
br i1 %t369, label %range6363, label %inrange6364
range6363:
call void @finch_panic_index(ptr @.str.4190, i64 3463, i64 0, i64 %t368)
unreachable
inrange6364:
%t370 = extractvalue { ptr, i64, i64 } %t367, 0
%t371 = getelementptr inbounds %S.ast.Type, ptr %t370, i64 0
%t372 = load %S.ast.Type, ptr %t371
%t373 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t372)
%t374 = insertvalue %S.gen.Val %t365, %S.ast.Type %t373, 1
%t375 = insertvalue %S.gen.Ref %t353, %S.gen.Val %t374, 2
ret %S.gen.Ref %t375
endif6342:
%t376 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0
%t377 = load { ptr, i64, i64 }, ptr %t376
store { ptr, i64, i64 } %t377, ptr %a378
store { ptr, i64, i64 } { ptr @.str.4191, i64 5, i64 0 }, ptr %a379
%t380 = call i32 @finch_str_eq(ptr %a378, ptr %a379)
%t381 = icmp ne i32 %t380, 0
br label %logic.from6365
logic.from6365:
br i1 %t381, label %logic.end6367, label %logic.rhs6366
logic.rhs6366:
%t382 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0
%t383 = load { ptr, i64, i64 }, ptr %t382
store { ptr, i64, i64 } %t383, ptr %a384
store { ptr, i64, i64 } { ptr @.str.4192, i64 3, i64 0 }, ptr %a385
%t386 = call i32 @finch_str_eq(ptr %a384, ptr %a385)
%t387 = icmp ne i32 %t386, 0
br label %logic.rend6368
logic.rend6368:
br label %logic.end6367
logic.end6367:
%t388 = phi i1 [ true, %logic.from6365 ], [ %t387, %logic.rend6368 ]
br label %logic.from6369
logic.from6369:
br i1 %t388, label %logic.end6371, label %logic.rhs6370
logic.rhs6370:
%t389 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0
%t390 = load { ptr, i64, i64 }, ptr %t389
store { ptr, i64, i64 } %t390, ptr %a391
store { ptr, i64, i64 } { ptr @.str.4193, i64 3, i64 0 }, ptr %a392
%t393 = call i32 @finch_str_eq(ptr %a391, ptr %a392)
%t394 = icmp ne i32 %t393, 0
br label %logic.rend6372
logic.rend6372:
br label %logic.end6371
logic.end6371:
%t395 = phi i1 [ true, %logic.from6369 ], [ %t394, %logic.rend6372 ]
br i1 %t395, label %then6373, label %endif6375
then6373:
%t396 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t397 = load { ptr, i64, i64 }, ptr %t396
store { ptr, i64, i64 } %t397, ptr %a398
store { ptr, i64, i64 } { ptr @.str.4194, i64 3, i64 0 }, ptr %a399
%t400 = call i32 @finch_str_eq(ptr %a398, ptr %a399)
%t401 = icmp eq i32 %t400, 0
br i1 %t401, label %then6376, label %endif6378
then6376:
%t402 = load ptr, ptr %a1
%t403 = load %S.ast.Node, ptr %a2
%t404 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t405 = load { ptr, i64, i64 }, ptr %t404
store { ptr, i64, i64 } { ptr @.str.4195, i64 37, i64 0 }, ptr %a407
store { ptr, i64, i64 } %t405, ptr %a408
call void @finch_str_concat(ptr %a406, ptr %a407, ptr %a408)
%t409 = load { ptr, i64, i64 }, ptr %a406
store { ptr, i64, i64 } %t409, ptr %a411
store { ptr, i64, i64 } { ptr @.str.4196, i64 1, i64 0 }, ptr %a412
call void @finch_str_concat(ptr %a410, ptr %a411, ptr %a412)
%t413 = load { ptr, i64, i64 }, ptr %a410
call void @finch.gen.fail(ptr %t402, %S.ast.Node %t403, { ptr, i64, i64 } %t413)
br label %endif6378
endif6378:
%t414 = load i1, ptr %a3
br i1 %t414, label %then6379, label %endif6381
then6379:
%t415 = load ptr, ptr %a1
%t416 = load %S.ast.Node, ptr %a2
call void @finch.gen.fail(ptr %t415, %S.ast.Node %t416, { ptr, i64, i64 } { ptr @.str.4197, i64 48, i64 0 })
br label %endif6381
endif6381:
%t417 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 0
%t418 = load i1, ptr %t417
br i1 %t418, label %then6382, label %endif6384
then6382:
%t419 = load ptr, ptr %a1
%t420 = load ptr, ptr %a1
%t421 = load %S.ast.Type, ptr %a42
%t422 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t420, %S.ast.Type %t421)
store { ptr, i64, i64 } { ptr @.str.4198, i64 23, i64 0 }, ptr %a424
store { ptr, i64, i64 } %t422, ptr %a425
call void @finch_str_concat(ptr %a423, ptr %a424, ptr %a425)
%t426 = load { ptr, i64, i64 }, ptr %a423
store { ptr, i64, i64 } %t426, ptr %a428
store { ptr, i64, i64 } { ptr @.str.4199, i64 6, i64 0 }, ptr %a429
call void @finch_str_concat(ptr %a427, ptr %a428, ptr %a429)
%t430 = load { ptr, i64, i64 }, ptr %a427
%t431 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 1
%t432 = getelementptr inbounds %S.gen.Place, ptr %t431, i32 0, i32 0
%t433 = load { ptr, i64, i64 }, ptr %t432
store { ptr, i64, i64 } %t430, 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.4200, i64 14, i64 0 }, ptr %a440
call void @finch_str_concat(ptr %a438, ptr %a439, ptr %a440)
%t441 = load { ptr, i64, i64 }, ptr %a438
%t442 = call { ptr, i64, i64 } @finch.gen.op(ptr %t419, { ptr, i64, i64 } %t441)
store { ptr, i64, i64 } %t442, ptr %a443
%t444 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0
%t445 = load ptr, ptr %a1
%t446 = load { ptr, i64, i64 }, ptr %a443
%t447 = call { ptr, i64, i64 } @finch.gen.load(ptr %t445, { ptr, i64, i64 } { ptr @.str.4201, i64 3, i64 0 }, { ptr, i64, i64 } %t446)
%t448 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t447, 0
%t449 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4202, i64 3, i64 0 })
%t450 = insertvalue %S.gen.Val %t448, %S.ast.Type %t449, 1
%t451 = insertvalue %S.gen.Ref %t444, %S.gen.Val %t450, 2
ret %S.gen.Ref %t451
endif6384:
%t452 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0
%t453 = load ptr, ptr %a1
%t454 = load ptr, ptr %a1
%t455 = load %S.ast.Type, ptr %a42
%t456 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t454, %S.ast.Type %t455)
store { ptr, i64, i64 } { ptr @.str.4203, i64 13, i64 0 }, ptr %a458
store { ptr, i64, i64 } %t456, ptr %a459
call void @finch_str_concat(ptr %a457, ptr %a458, ptr %a459)
%t460 = load { ptr, i64, i64 }, ptr %a457
store { ptr, i64, i64 } %t460, ptr %a462
store { ptr, i64, i64 } { ptr @.str.4204, i64 1, i64 0 }, ptr %a463
call void @finch_str_concat(ptr %a461, ptr %a462, ptr %a463)
%t464 = load { ptr, i64, i64 }, ptr %a461
%t465 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 2
%t466 = getelementptr inbounds %S.gen.Val, ptr %t465, i32 0, i32 0
%t467 = load { ptr, i64, i64 }, ptr %t466
store { ptr, i64, i64 } %t464, 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
store { ptr, i64, i64 } %t471, ptr %a473
store { ptr, i64, i64 } { ptr @.str.4205, i64 3, i64 0 }, ptr %a474
call void @finch_str_concat(ptr %a472, ptr %a473, ptr %a474)
%t475 = load { ptr, i64, i64 }, ptr %a472
%t476 = call { ptr, i64, i64 } @finch.gen.op(ptr %t453, { ptr, i64, i64 } %t475)
%t477 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t476, 0
%t478 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4206, i64 3, i64 0 })
%t479 = insertvalue %S.gen.Val %t477, %S.ast.Type %t478, 1
%t480 = insertvalue %S.gen.Ref %t452, %S.gen.Val %t479, 2
ret %S.gen.Ref %t480
endif6375:
%t481 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0
%t482 = load { ptr, i64, i64 }, ptr %t481
store { ptr, i64, i64 } %t482, ptr %a483
store { ptr, i64, i64 } { ptr @.str.4207, i64 6, i64 0 }, ptr %a484
%t485 = call i32 @finch_str_eq(ptr %a483, ptr %a484)
%t486 = icmp eq i32 %t485, 0
br i1 %t486, label %then6385, label %endif6387
then6385:
%t487 = load ptr, ptr %a1
%t488 = load %S.ast.Node, ptr %a2
%t489 = load %S.ast.Type, ptr %a42
%t490 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t489)
store { ptr, i64, i64 } %t490, ptr %a492
store { ptr, i64, i64 } { ptr @.str.4208, i64 21, i64 0 }, ptr %a493
call void @finch_str_concat(ptr %a491, ptr %a492, ptr %a493)
%t494 = load { ptr, i64, i64 }, ptr %a491
%t495 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t496 = load { ptr, i64, i64 }, ptr %t495
store { ptr, i64, i64 } %t494, ptr %a498
store { ptr, i64, i64 } %t496, ptr %a499
call void @finch_str_concat(ptr %a497, ptr %a498, ptr %a499)
%t500 = load { ptr, i64, i64 }, ptr %a497
store { ptr, i64, i64 } %t500, ptr %a502
store { ptr, i64, i64 } { ptr @.str.4209, i64 2, i64 0 }, ptr %a503
call void @finch_str_concat(ptr %a501, ptr %a502, ptr %a503)
%t504 = load { ptr, i64, i64 }, ptr %a501
call void @finch.gen.fail(ptr %t487, %S.ast.Node %t488, { ptr, i64, i64 } %t504)
br label %endif6387
endif6387:
%t505 = load ptr, ptr %a1
%t506 = icmp eq ptr %t505, null
br i1 %t506, label %panic6388, label %ok6389
panic6388:
call void @finch_panic(ptr @.str.4210, i64 3481, ptr @.str.4211)
unreachable
ok6389:
%t507 = getelementptr inbounds %S.gen.Gen, ptr %t505, i32 0, i32 15
%t508 = load ptr, ptr %a1
%t509 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 3
%t510 = load { ptr, i64, i64 }, ptr %t509
%t511 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 2
%t512 = load { ptr, i64, i64 }, ptr %t511
%t513 = call i64 @finch.gen.findStruct(ptr %t508, { ptr, i64, i64 } %t510, { ptr, i64, i64 } %t512)
%t514 = load { ptr, i64, i64 }, ptr %t507
%t515 = extractvalue { ptr, i64, i64 } %t514, 1
%t516 = icmp uge i64 %t513, %t515
br i1 %t516, label %range6390, label %inrange6391
range6390:
call void @finch_panic_index(ptr @.str.4212, i64 3481, i64 %t513, i64 %t515)
unreachable
inrange6391:
%t517 = extractvalue { ptr, i64, i64 } %t514, 0
%t518 = getelementptr inbounds %S.gen.StructDef, ptr %t517, i64 %t513
%t519 = load %S.gen.StructDef, ptr %t518
store %S.gen.StructDef %t519, ptr %a520
call void @finch.copy.S_gen_StructDef(ptr %a521, ptr %a520)
%t522 = load %S.gen.StructDef, ptr %a521
store %S.gen.StructDef %t522, ptr %a523
%t524 = getelementptr inbounds %S.gen.StructDef, ptr %a523, i32 0, i32 11
%t525 = getelementptr inbounds { ptr, i64, i64 }, ptr %t524, i32 0, i32 1
%t526 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t527 = load { ptr, i64, i64 }, ptr %t526
store i64 -1, ptr %a528
%t529 = load i64, ptr %t525
%t530 = load ptr, ptr %t524
store i64 0, ptr %a531
br label %find.cond6392
find.cond6392:
%t532 = load i64, ptr %a531
%t533 = icmp slt i64 %t532, %t529
br i1 %t533, label %find.body6393, label %find.end6396
find.body6393:
%t534 = getelementptr inbounds { ptr, i64, i64 }, ptr %t530, i64 %t532
%t535 = load { ptr, i64, i64 }, ptr %t534
store { ptr, i64, i64 } %t535, ptr %a536
store { ptr, i64, i64 } %t527, ptr %a537
%t538 = call i32 @finch_str_eq(ptr %a536, ptr %a537)
%t539 = icmp ne i32 %t538, 0
br i1 %t539, label %find.hit6394, label %find.next6395
find.hit6394:
store i64 %t532, ptr %a528
br label %find.end6396
find.next6395:
%t540 = add i64 %t532, 1
store i64 %t540, ptr %a531
br label %find.cond6392
find.end6396:
%t541 = load i64, ptr %a528
store i64 %t541, ptr %a542
%t543 = load i64, ptr %a542
%t544 = icmp slt i64 %t543, 0
br i1 %t544, label %then6397, label %endif6399
then6397:
%t545 = load ptr, ptr %a1
%t546 = load %S.ast.Node, ptr %a2
%t547 = load %S.ast.Type, ptr %a42
%t548 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t547)
store { ptr, i64, i64 } { ptr @.str.4213, i64 11, i64 0 }, ptr %a550
store { ptr, i64, i64 } %t548, ptr %a551
call void @finch_str_concat(ptr %a549, ptr %a550, ptr %a551)
%t552 = load { ptr, i64, i64 }, ptr %a549
store { ptr, i64, i64 } %t552, ptr %a554
store { ptr, i64, i64 } { ptr @.str.4214, i64 15, i64 0 }, ptr %a555
call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555)
%t556 = load { ptr, i64, i64 }, ptr %a553
%t557 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t558 = load { ptr, i64, i64 }, ptr %t557
store { ptr, i64, i64 } %t556, 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.4215, i64 11, i64 0 }, ptr %a565
call void @finch_str_concat(ptr %a563, ptr %a564, ptr %a565)
%t566 = load { ptr, i64, i64 }, ptr %a563
%t567 = getelementptr inbounds %S.gen.StructDef, ptr %a523, i32 0, i32 11
%t568 = getelementptr inbounds { ptr, i64, i64 }, ptr %t567, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.4216, i64 2, i64 0 }, ptr %a569
call void @finch_str_join(ptr %a570, ptr %t567, ptr %a569)
%t571 = load { ptr, i64, i64 }, ptr %a570
store { ptr, i64, i64 } %t566, ptr %a573
store { ptr, i64, i64 } %t571, ptr %a574
call void @finch_str_concat(ptr %a572, ptr %a573, ptr %a574)
%t575 = load { ptr, i64, i64 }, ptr %a572
store { ptr, i64, i64 } %t575, ptr %a577
store { ptr, i64, i64 } { ptr @.str.4217, i64 1, i64 0 }, ptr %a578
call void @finch_str_concat(ptr %a576, ptr %a577, ptr %a578)
%t579 = load { ptr, i64, i64 }, ptr %a576
call void @finch.gen.fail(ptr %t545, %S.ast.Node %t546, { ptr, i64, i64 } %t579)
br label %endif6399
endif6399:
%t580 = getelementptr inbounds %S.gen.StructDef, ptr %a523, i32 0, i32 12
%t581 = load i64, ptr %a542
%t582 = load { ptr, i64, i64 }, ptr %t580
%t583 = extractvalue { ptr, i64, i64 } %t582, 1
%t584 = icmp uge i64 %t581, %t583
br i1 %t584, label %range6400, label %inrange6401
range6400:
call void @finch_panic_index(ptr @.str.4218, i64 3486, i64 %t581, i64 %t583)
unreachable
inrange6401:
%t585 = extractvalue { ptr, i64, i64 } %t582, 0
%t586 = getelementptr inbounds %S.ast.Type, ptr %t585, i64 %t581
%t587 = load %S.ast.Type, ptr %t586
store %S.ast.Type %t587, ptr %a588
call void @finch.copy.S_ast_Type(ptr %a589, ptr %a588)
%t590 = load %S.ast.Type, ptr %a589
store %S.ast.Type %t590, ptr %a591
%t592 = load ptr, ptr %a1
%t593 = load %S.ast.Node, ptr %a2
%t594 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12
%t595 = load i64, ptr %t594
%t596 = add i64 %t595, 1
%t597 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t598 = getelementptr inbounds { ptr, i64, i64 }, ptr %t597, i32 0, i32 1
%t599 = load i64, ptr %t598
%t600 = load %S.ast.Type, ptr %a591
%t601 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t600)
store { ptr, i64, i64 } { ptr @.str.4219, i64 9, i64 0 }, ptr %a603
store { ptr, i64, i64 } %t601, ptr %a604
call void @finch_str_concat(ptr %a602, ptr %a603, ptr %a604)
%t605 = load { ptr, i64, i64 }, ptr %a602
store { ptr, i64, i64 } %t605, ptr %a607
store { ptr, i64, i64 } { ptr @.str.4220, i64 1, i64 0 }, ptr %a608
call void @finch_str_concat(ptr %a606, ptr %a607, ptr %a608)
%t609 = load { ptr, i64, i64 }, ptr %a606
%t610 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t611 = load { ptr, i64, i64 }, ptr %t610
store { ptr, i64, i64 } %t609, ptr %a613
store { ptr, i64, i64 } %t611, ptr %a614
call void @finch_str_concat(ptr %a612, ptr %a613, ptr %a614)
%t615 = load { ptr, i64, i64 }, ptr %a612
store { ptr, i64, i64 } %t615, ptr %a617
store { ptr, i64, i64 } { ptr @.str.4221, i64 4, i64 0 }, ptr %a618
call void @finch_str_concat(ptr %a616, ptr %a617, ptr %a618)
%t619 = load { ptr, i64, i64 }, ptr %a616
call void @finch.gen.noteRef(ptr %t592, %S.ast.Node %t593, i64 %t596, i64 %t599, { ptr, i64, i64 } %t619, { ptr, i64, i64 } { ptr @.str.4222, i64 0, i64 0 }, i64 0, i64 0)
%t620 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 0
%t621 = load i1, ptr %t620
br i1 %t621, label %then6402, label %endif6404
then6402:
%t622 = load ptr, ptr %a1
%t623 = load ptr, ptr %a1
%t624 = load %S.ast.Type, ptr %a42
%t625 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t623, %S.ast.Type %t624)
store { ptr, i64, i64 } { ptr @.str.4223, i64 23, i64 0 }, ptr %a627
store { ptr, i64, i64 } %t625, ptr %a628
call void @finch_str_concat(ptr %a626, ptr %a627, ptr %a628)
%t629 = load { ptr, i64, i64 }, ptr %a626
store { ptr, i64, i64 } %t629, ptr %a631
store { ptr, i64, i64 } { ptr @.str.4224, i64 6, i64 0 }, ptr %a632
call void @finch_str_concat(ptr %a630, ptr %a631, ptr %a632)
%t633 = load { ptr, i64, i64 }, ptr %a630
%t634 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 1
%t635 = getelementptr inbounds %S.gen.Place, ptr %t634, i32 0, i32 0
%t636 = load { ptr, i64, i64 }, ptr %t635
store { ptr, i64, i64 } %t633, ptr %a638
store { ptr, i64, i64 } %t636, ptr %a639
call void @finch_str_concat(ptr %a637, ptr %a638, ptr %a639)
%t640 = load { ptr, i64, i64 }, ptr %a637
store { ptr, i64, i64 } %t640, ptr %a642
store { ptr, i64, i64 } { ptr @.str.4225, i64 13, i64 0 }, ptr %a643
call void @finch_str_concat(ptr %a641, ptr %a642, ptr %a643)
%t644 = load { ptr, i64, i64 }, ptr %a641
%t645 = getelementptr inbounds %S.gen.StructDef, ptr %a523, i32 0, i32 3
%t646 = load i64, ptr %a542
%t647 = load { ptr, i64, i64 }, ptr %t645
%t648 = extractvalue { ptr, i64, i64 } %t647, 1
%t649 = icmp uge i64 %t646, %t648
br i1 %t649, label %range6405, label %inrange6406
range6405:
call void @finch_panic_index(ptr @.str.4226, i64 3489, i64 %t646, i64 %t648)
unreachable
inrange6406:
%t650 = extractvalue { ptr, i64, i64 } %t647, 0
%t651 = getelementptr inbounds i64, ptr %t650, i64 %t646
%t652 = load i64, ptr %t651
call void @finch_str_from_int(ptr %a653, i64 %t652)
%t654 = load { ptr, i64, i64 }, ptr %a653
store { ptr, i64, i64 } %t644, ptr %a656
store { ptr, i64, i64 } %t654, ptr %a657
call void @finch_str_concat(ptr %a655, ptr %a656, ptr %a657)
%t658 = load { ptr, i64, i64 }, ptr %a655
%t659 = call { ptr, i64, i64 } @finch.gen.op(ptr %t622, { ptr, i64, i64 } %t658)
store { ptr, i64, i64 } %t659, ptr %a660
%t661 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0
%t662 = load { ptr, i64, i64 }, ptr %a660
store { ptr, i64, i64 } %t662, ptr %a663
call void @finch_str_copy(ptr %a664, ptr %a663)
%t665 = load { ptr, i64, i64 }, ptr %a664
%t666 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t665, 0
%t667 = load %S.ast.Type, ptr %a591
store %S.ast.Type %t667, ptr %a668
call void @finch.copy.S_ast_Type(ptr %a669, ptr %a668)
%t670 = load %S.ast.Type, ptr %a669
%t671 = insertvalue %S.gen.Place %t666, %S.ast.Type %t670, 1
%t672 = insertvalue %S.gen.Ref %t661, %S.gen.Place %t671, 1
ret %S.gen.Ref %t672
endif6404:
%t673 = load ptr, ptr %a1
%t674 = load ptr, ptr %a1
%t675 = load %S.ast.Type, ptr %a42
%t676 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t674, %S.ast.Type %t675)
store { ptr, i64, i64 } { ptr @.str.4227, i64 13, i64 0 }, ptr %a678
store { ptr, i64, i64 } %t676, ptr %a679
call void @finch_str_concat(ptr %a677, ptr %a678, ptr %a679)
%t680 = load { ptr, i64, i64 }, ptr %a677
store { ptr, i64, i64 } %t680, ptr %a682
store { ptr, i64, i64 } { ptr @.str.4228, i64 1, i64 0 }, ptr %a683
call void @finch_str_concat(ptr %a681, ptr %a682, ptr %a683)
%t684 = load { ptr, i64, i64 }, ptr %a681
%t685 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 2
%t686 = getelementptr inbounds %S.gen.Val, ptr %t685, i32 0, i32 0
%t687 = load { ptr, i64, i64 }, ptr %t686
store { ptr, i64, i64 } %t684, ptr %a689
store { ptr, i64, i64 } %t687, ptr %a690
call void @finch_str_concat(ptr %a688, ptr %a689, ptr %a690)
%t691 = load { ptr, i64, i64 }, ptr %a688
store { ptr, i64, i64 } %t691, ptr %a693
store { ptr, i64, i64 } { ptr @.str.4229, i64 2, i64 0 }, ptr %a694
call void @finch_str_concat(ptr %a692, ptr %a693, ptr %a694)
%t695 = load { ptr, i64, i64 }, ptr %a692
%t696 = getelementptr inbounds %S.gen.StructDef, ptr %a523, i32 0, i32 3
%t697 = load i64, ptr %a542
%t698 = load { ptr, i64, i64 }, ptr %t696
%t699 = extractvalue { ptr, i64, i64 } %t698, 1
%t700 = icmp uge i64 %t697, %t699
br i1 %t700, label %range6407, label %inrange6408
range6407:
call void @finch_panic_index(ptr @.str.4230, i64 3492, i64 %t697, i64 %t699)
unreachable
inrange6408:
%t701 = extractvalue { ptr, i64, i64 } %t698, 0
%t702 = getelementptr inbounds i64, ptr %t701, i64 %t697
%t703 = load i64, ptr %t702
call void @finch_str_from_int(ptr %a704, i64 %t703)
%t705 = load { ptr, i64, i64 }, ptr %a704
store { ptr, i64, i64 } %t695, 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
%t710 = call { ptr, i64, i64 } @finch.gen.op(ptr %t673, { ptr, i64, i64 } %t709)
store { ptr, i64, i64 } %t710, ptr %a711
%t712 = load { ptr, i64, i64 }, ptr %a711
store { ptr, i64, i64 } %t712, ptr %a713
call void @finch_str_copy(ptr %a714, ptr %a713)
%t715 = load { ptr, i64, i64 }, ptr %a714
%t716 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t715, 0
%t717 = load %S.ast.Type, ptr %a591
store %S.ast.Type %t717, ptr %a718
call void @finch.copy.S_ast_Type(ptr %a719, ptr %a718)
%t720 = load %S.ast.Type, ptr %a719
%t721 = insertvalue %S.gen.Val %t716, %S.ast.Type %t720, 1
store %S.gen.Val %t721, ptr %a722
%t723 = load ptr, ptr %a1
%t724 = load %S.ast.Type, ptr %a591
%t725 = call i1 @finch.gen.owning(ptr %t723, %S.ast.Type %t724)
br label %logic.from6409
logic.from6409:
br i1 %t725, label %logic.rhs6410, label %logic.end6411
logic.rhs6410:
%t726 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 2
%t727 = getelementptr inbounds %S.gen.Val, ptr %t726, i32 0, i32 2
%t728 = load i1, ptr %t727
br label %logic.rend6412
logic.rend6412:
br label %logic.end6411
logic.end6411:
%t729 = phi i1 [ false, %logic.from6409 ], [ %t728, %logic.rend6412 ]
br i1 %t729, label %then6413, label %endif6415
then6413:
%t730 = load ptr, ptr %a1
%t731 = load { ptr, i64, i64 }, ptr %a711
%t732 = load %S.ast.Type, ptr %a591
%t733 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t730, { ptr, i64, i64 } %t731, %S.ast.Type %t732)
%t734 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t733, 0
%t735 = load %S.ast.Type, ptr %a591
store %S.ast.Type %t735, ptr %a736
call void @finch.copy.S_ast_Type(ptr %a737, ptr %a736)
%t738 = load %S.ast.Type, ptr %a737
%t739 = insertvalue %S.gen.Val %t734, %S.ast.Type %t738, 1
%t740 = insertvalue %S.gen.Val %t739, i1 true, 2
store %S.gen.Val %t740, ptr %a722
br label %endif6415
endif6415:
%t741 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0
%t742 = load %S.gen.Val, ptr %a722
store %S.gen.Val %t742, ptr %a743
call void @finch.copy.S_gen_Val(ptr %a744, ptr %a743)
%t745 = load %S.gen.Val, ptr %a744
%t746 = insertvalue %S.gen.Ref %t741, %S.gen.Val %t745, 2
ret %S.gen.Ref %t746
}
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
%a18 = alloca %S.ast.Type, align 16
%a19 = alloca %S.ast.Type, align 16
%a21 = alloca %S.ast.Type, align 16
%a27 = alloca %S.ast.Type, align 16
%a28 = alloca %S.ast.Type, align 16
%a32 = alloca { ptr, i64, i64 }, align 16
%a33 = 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
%a72 = alloca { ptr, i64, i64 }, align 16
%a78 = alloca { ptr, i64, i64 }, align 16
%a79 = alloca { ptr, i64, i64 }, align 16
%a89 = 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
%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
%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
%a122 = alloca { ptr, i64, i64 }, align 16
%a123 = alloca { ptr, i64, i64 }, align 16
%a133 = alloca %S.ast.Type, align 16
%a134 = alloca %S.ast.Type, align 16
%a140 = alloca { ptr, i64, i64 }, align 16
%a141 = 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
%a171 = alloca %S.ast.Type, align 16
%a172 = alloca %S.ast.Type, align 16
%a174 = alloca %S.ast.Type, align 16
%a180 = alloca { ptr, i64, i64 }, align 16
%a181 = alloca { ptr, i64, i64 }, align 16
%a182 = 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
%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
%a205 = alloca %S.ast.Type, align 16
%a206 = alloca %S.ast.Type, 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
%a227 = alloca { ptr, i64, i64 }, align 16
%a228 = alloca { ptr, i64, i64 }, align 16
%a229 = alloca { ptr, i64, i64 }, align 16
%a232 = alloca %S.ast.Type, align 16
%a235 = alloca { ptr, i64, i64 }, align 16
%a236 = alloca { ptr, i64, i64 }, align 16
%a246 = alloca %S.ast.Type, align 16
%a247 = alloca %S.ast.Type, align 16
%a251 = alloca { ptr, i64, i64 }, align 16
%a252 = 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
%a277 = alloca { ptr, i64, i64 }, align 16
%a278 = alloca { ptr, i64, i64 }, align 16
%a280 = 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
%a295 = alloca { ptr, i64, i64 }, align 16
%a296 = alloca { ptr, i64, i64 }, align 16
%a299 = 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
%a310 = alloca { ptr, i64, i64 }, align 16
%a311 = alloca { ptr, i64, i64 }, align 16
%a312 = alloca { ptr, i64, i64 }, align 16
%a315 = 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
%a325 = alloca { ptr, i64, i64 }, align 16
%a326 = 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
%a338 = 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
%a348 = alloca { ptr, i64, i64 }, align 16
%a349 = alloca { ptr, i64, i64 }, align 16
%a353 = alloca %S.ast.Type, align 16
%a354 = alloca %S.ast.Type, align 16
%a364 = alloca { ptr, i64, i64 }, align 16
%a366 = alloca { ptr, i64, i64 }, align 16
%a367 = alloca { ptr, i64, i64 }, align 16
%a371 = alloca %S.ast.Type, align 16
%a372 = alloca %S.ast.Type, align 16
%a375 = alloca %S.gen.Val, align 16
%a389 = alloca %S.ast.Type, align 16
%a390 = alloca %S.ast.Type, align 16
%a396 = alloca %S.gen.Val, align 16
%a397 = 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 %range6416, label %inrange6417
range6416:
call void @finch_panic_index(ptr @.str.4231, i64 3501, i64 0, i64 %t7)
unreachable
inrange6417:
%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 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 2
%t16 = getelementptr inbounds %S.gen.Val, ptr %t15, i32 0, i32 1
%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.gen.Ref, ptr %a14, i32 0, i32 0
%t23 = load i1, ptr %t22
br i1 %t23, label %then6418, label %endif6420
then6418:
%t24 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 1
%t25 = getelementptr inbounds %S.gen.Place, ptr %t24, i32 0, i32 1
%t26 = load %S.ast.Type, ptr %t25
store %S.ast.Type %t26, ptr %a27
call void @finch.copy.S_ast_Type(ptr %a28, ptr %a27)
%t29 = load %S.ast.Type, ptr %a28
store %S.ast.Type %t29, ptr %a21
br label %endif6420
endif6420:
%t30 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 0
%t31 = load { ptr, i64, i64 }, ptr %t30
store { ptr, i64, i64 } %t31, ptr %a32
store { ptr, i64, i64 } { ptr @.str.4232, i64 3, i64 0 }, ptr %a33
%t34 = call i32 @finch_str_eq(ptr %a32, ptr %a33)
%t35 = icmp ne i32 %t34, 0
br i1 %t35, label %then6421, label %endif6423
then6421:
%t36 = load ptr, ptr %a1
%t37 = load %S.ast.Node, ptr %a2
%t38 = load %S.gen.Ref, ptr %a14
%t39 = load %S.ast.Type, ptr %a21
%t40 = load i1, ptr %a3
%t41 = call %S.gen.Ref @finch.gen.mapIndex(ptr %t36, %S.ast.Node %t37, %S.gen.Ref %t38, %S.ast.Type %t39, i1 %t40)
ret %S.gen.Ref %t41
endif6423:
%t42 = load ptr, ptr %a1
%t43 = load ptr, ptr %a1
%t44 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t45 = load { ptr, i64, i64 }, ptr %t44
%t46 = extractvalue { ptr, i64, i64 } %t45, 1
%t47 = icmp uge i64 1, %t46
br i1 %t47, label %range6424, label %inrange6425
range6424:
call void @finch_panic_index(ptr @.str.4233, i64 3509, i64 1, i64 %t46)
unreachable
inrange6425:
%t48 = extractvalue { ptr, i64, i64 } %t45, 0
%t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i64 1
%t50 = load %S.ast.Node, ptr %t49
%t51 = call %S.gen.Val @finch.gen.expr(ptr %t43, %S.ast.Node %t50)
%t52 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4234, i64 3, i64 0 })
%t53 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t54 = load { ptr, i64, i64 }, ptr %t53
%t55 = extractvalue { ptr, i64, i64 } %t54, 1
%t56 = icmp uge i64 1, %t55
br i1 %t56, label %range6426, label %inrange6427
range6426:
call void @finch_panic_index(ptr @.str.4235, i64 3509, i64 1, i64 %t55)
unreachable
inrange6427:
%t57 = extractvalue { ptr, i64, i64 } %t54, 0
%t58 = getelementptr inbounds %S.ast.Node, ptr %t57, i64 1
%t59 = load %S.ast.Node, ptr %t58
%t60 = call %S.gen.Val @finch.gen.coerce(ptr %t42, %S.gen.Val %t51, %S.ast.Type %t52, %S.ast.Node %t59, { ptr, i64, i64 } { ptr @.str.4236, i64 8, i64 0 })
%t61 = extractvalue %S.gen.Val %t60, 0
store { ptr, i64, i64 } %t61, ptr %a62
call void @finch_str_copy(ptr %a63, ptr %a62)
%t64 = load { ptr, i64, i64 }, ptr %a63
store { ptr, i64, i64 } %t64, ptr %a65
%t66 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 0
%t67 = load { ptr, i64, i64 }, ptr %t66
store { ptr, i64, i64 } %t67, ptr %a68
store { ptr, i64, i64 } { ptr @.str.4237, i64 5, i64 0 }, ptr %a69
%t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69)
%t71 = icmp ne i32 %t70, 0
br i1 %t71, label %then6428, label %endif6430
then6428:
store { ptr, i64, i64 } { ptr @.str.4238, i64 0, i64 0 }, ptr %a72
%t73 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 0
%t74 = load i1, ptr %t73
br i1 %t74, label %then6431, label %else6432
then6431:
%t75 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 1
%t76 = getelementptr inbounds %S.gen.Place, ptr %t75, i32 0, i32 0
%t77 = load { ptr, i64, i64 }, ptr %t76
store { ptr, i64, i64 } %t77, ptr %a78
call void @finch_str_copy(ptr %a79, ptr %a78)
%t80 = load { ptr, i64, i64 }, ptr %a79
store { ptr, i64, i64 } %t80, ptr %a72
br label %endif6433
else6432:
%t81 = load ptr, ptr %a1
%t82 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 2
%t83 = load %S.gen.Val, ptr %t82
%t84 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t81, %S.gen.Val %t83)
store { ptr, i64, i64 } %t84, ptr %a72
br label %endif6433
endif6433:
%t85 = load ptr, ptr %a1
%t86 = load { ptr, i64, i64 }, ptr %a65
%t87 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 4
%t88 = load i64, ptr %t87
call void @finch_str_from_int(ptr %a89, i64 %t88)
%t90 = load { ptr, i64, i64 }, ptr %a89
%t91 = load %S.ast.Node, ptr %a2
call void @finch.gen.boundsCheck(ptr %t85, { ptr, i64, i64 } %t86, { ptr, i64, i64 } %t90, %S.ast.Node %t91)
%t92 = load ptr, ptr %a1
%t93 = load ptr, ptr %a1
%t94 = load %S.ast.Type, ptr %a21
%t95 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t93, %S.ast.Type %t94)
store { ptr, i64, i64 } { ptr @.str.4239, i64 23, 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.4240, i64 6, i64 0 }, 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 %a72
store { ptr, i64, i64 } %t103, ptr %a106
store { ptr, i64, i64 } %t104, 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 %a110
store { ptr, i64, i64 } { ptr @.str.4241, i64 13, 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 %a65
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)
%t117 = load { ptr, i64, i64 }, ptr %a114
%t118 = call { ptr, i64, i64 } @finch.gen.op(ptr %t92, { ptr, i64, i64 } %t117)
store { ptr, i64, i64 } %t118, ptr %a119
%t120 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0
%t121 = load { ptr, i64, i64 }, ptr %a119
store { ptr, i64, i64 } %t121, ptr %a122
call void @finch_str_copy(ptr %a123, ptr %a122)
%t124 = load { ptr, i64, i64 }, ptr %a123
%t125 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t124, 0
%t126 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 1
%t127 = load { ptr, i64, i64 }, ptr %t126
%t128 = extractvalue { ptr, i64, i64 } %t127, 1
%t129 = icmp uge i64 0, %t128
br i1 %t129, label %range6434, label %inrange6435
range6434:
call void @finch_panic_index(ptr @.str.4242, i64 3519, i64 0, i64 %t128)
unreachable
inrange6435:
%t130 = extractvalue { ptr, i64, i64 } %t127, 0
%t131 = getelementptr inbounds %S.ast.Type, ptr %t130, i64 0
%t132 = load %S.ast.Type, ptr %t131
store %S.ast.Type %t132, ptr %a133
call void @finch.copy.S_ast_Type(ptr %a134, ptr %a133)
%t135 = load %S.ast.Type, ptr %a134
%t136 = insertvalue %S.gen.Place %t125, %S.ast.Type %t135, 1
%t137 = insertvalue %S.gen.Ref %t120, %S.gen.Place %t136, 1
ret %S.gen.Ref %t137
endif6430:
%t138 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 0
%t139 = load { ptr, i64, i64 }, ptr %t138
store { ptr, i64, i64 } %t139, ptr %a140
store { ptr, i64, i64 } { ptr @.str.4243, 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 %then6436, label %endif6438
then6436:
%t144 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 1
%t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1
%t146 = load i64, ptr %t145
%t147 = icmp eq i64 %t146, 0
br i1 %t147, label %then6439, label %endif6441
then6439:
%t148 = load ptr, ptr %a1
%t149 = load %S.ast.Node, ptr %a2
call void @finch.gen.fail(ptr %t148, %S.ast.Node %t149, { ptr, i64, i64 } { ptr @.str.4244, i64 57, i64 0 })
br label %endif6441
endif6441:
%t150 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 2
%t151 = getelementptr inbounds %S.gen.Val, ptr %t150, i32 0, i32 0
%t152 = load { ptr, i64, i64 }, ptr %t151
store { ptr, i64, i64 } %t152, ptr %a153
call void @finch_str_copy(ptr %a154, ptr %a153)
%t155 = load { ptr, i64, i64 }, ptr %a154
store { ptr, i64, i64 } %t155, ptr %a156
%t157 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 0
%t158 = load i1, ptr %t157
br i1 %t158, label %then6442, label %endif6444
then6442:
%t159 = load ptr, ptr %a1
%t160 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 1
%t161 = getelementptr inbounds %S.gen.Place, ptr %t160, i32 0, i32 0
%t162 = load { ptr, i64, i64 }, ptr %t161
%t163 = call { ptr, i64, i64 } @finch.gen.load(ptr %t159, { ptr, i64, i64 } { ptr @.str.4245, i64 3, i64 0 }, { ptr, i64, i64 } %t162)
store { ptr, i64, i64 } %t163, ptr %a156
br label %endif6444
endif6444:
%t164 = getelementptr inbounds %S.ast.Type, ptr %a21, 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 %range6445, label %inrange6446
range6445:
call void @finch_panic_index(ptr @.str.4246, i64 3529, i64 0, i64 %t166)
unreachable
inrange6446:
%t168 = extractvalue { ptr, i64, i64 } %t165, 0
%t169 = getelementptr inbounds %S.ast.Type, ptr %t168, i64 0
%t170 = load %S.ast.Type, ptr %t169
store %S.ast.Type %t170, ptr %a171
call void @finch.copy.S_ast_Type(ptr %a172, ptr %a171)
%t173 = load %S.ast.Type, ptr %a172
store %S.ast.Type %t173, ptr %a174
%t175 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0
%t176 = load ptr, ptr %a1
%t177 = load ptr, ptr %a1
%t178 = load %S.ast.Type, ptr %a174
%t179 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t177, %S.ast.Type %t178)
store { ptr, i64, i64 } { ptr @.str.4247, i64 23, i64 0 }, ptr %a181
store { ptr, i64, i64 } %t179, ptr %a182
call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182)
%t183 = load { ptr, i64, i64 }, ptr %a180
store { ptr, i64, i64 } %t183, ptr %a185
store { ptr, i64, i64 } { ptr @.str.4248, i64 6, i64 0 }, ptr %a186
call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186)
%t187 = load { ptr, i64, i64 }, ptr %a184
%t188 = load { ptr, i64, i64 }, ptr %a156
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)
%t192 = load { ptr, i64, i64 }, ptr %a189
store { ptr, i64, i64 } %t192, ptr %a194
store { ptr, i64, i64 } { ptr @.str.4249, i64 6, 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 %a65
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)
%t201 = load { ptr, i64, i64 }, ptr %a198
%t202 = call { ptr, i64, i64 } @finch.gen.op(ptr %t176, { ptr, i64, i64 } %t201)
%t203 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t202, 0
%t204 = load %S.ast.Type, ptr %a174
store %S.ast.Type %t204, ptr %a205
call void @finch.copy.S_ast_Type(ptr %a206, ptr %a205)
%t207 = load %S.ast.Type, ptr %a206
%t208 = insertvalue %S.gen.Place %t203, %S.ast.Type %t207, 1
%t209 = insertvalue %S.gen.Ref %t175, %S.gen.Place %t208, 1
ret %S.gen.Ref %t209
endif6438:
%t210 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 0
%t211 = load { ptr, i64, i64 }, ptr %t210
store { ptr, i64, i64 } %t211, ptr %a212
store { ptr, i64, i64 } { ptr @.str.4250, i64 5, i64 0 }, ptr %a213
%t214 = call i32 @finch_str_eq(ptr %a212, ptr %a213)
%t215 = icmp eq i32 %t214, 0
br label %logic.from6447
logic.from6447:
br i1 %t215, label %logic.rhs6448, label %logic.end6449
logic.rhs6448:
%t216 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 0
%t217 = load { ptr, i64, i64 }, ptr %t216
store { ptr, i64, i64 } %t217, ptr %a218
store { ptr, i64, i64 } { ptr @.str.4251, i64 3, i64 0 }, ptr %a219
%t220 = call i32 @finch_str_eq(ptr %a218, ptr %a219)
%t221 = icmp eq i32 %t220, 0
br label %logic.rend6450
logic.rend6450:
br label %logic.end6449
logic.end6449:
%t222 = phi i1 [ false, %logic.from6447 ], [ %t221, %logic.rend6450 ]
br i1 %t222, label %then6451, label %endif6453
then6451:
%t223 = load ptr, ptr %a1
%t224 = load %S.ast.Node, ptr %a2
%t225 = load %S.ast.Type, ptr %a21
%t226 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t225)
store { ptr, i64, i64 } { ptr @.str.4252, i64 46, i64 0 }, ptr %a228
store { ptr, i64, i64 } %t226, ptr %a229
call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229)
%t230 = load { ptr, i64, i64 }, ptr %a227
call void @finch.gen.fail(ptr %t223, %S.ast.Node %t224, { ptr, i64, i64 } %t230)
br label %endif6453
endif6453:
%t231 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4253, i64 4, i64 0 })
store %S.ast.Type %t231, ptr %a232
%t233 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 0
%t234 = load { ptr, i64, i64 }, ptr %t233
store { ptr, i64, i64 } %t234, ptr %a235
store { ptr, i64, i64 } { ptr @.str.4254, i64 5, i64 0 }, ptr %a236
%t237 = call i32 @finch_str_eq(ptr %a235, ptr %a236)
%t238 = icmp ne i32 %t237, 0
br i1 %t238, label %then6454, label %endif6456
then6454:
%t239 = getelementptr inbounds %S.ast.Type, ptr %a21, 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 %range6457, label %inrange6458
range6457:
call void @finch_panic_index(ptr @.str.4255, i64 3537, i64 0, i64 %t241)
unreachable
inrange6458:
%t243 = extractvalue { ptr, i64, i64 } %t240, 0
%t244 = getelementptr inbounds %S.ast.Type, ptr %t243, i64 0
%t245 = load %S.ast.Type, ptr %t244
store %S.ast.Type %t245, ptr %a246
call void @finch.copy.S_ast_Type(ptr %a247, ptr %a246)
%t248 = load %S.ast.Type, ptr %a247
store %S.ast.Type %t248, ptr %a232
br label %endif6456
endif6456:
%t249 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 0
%t250 = load { ptr, i64, i64 }, ptr %t249
store { ptr, i64, i64 } %t250, ptr %a251
store { ptr, i64, i64 } { ptr @.str.4256, i64 3, i64 0 }, ptr %a252
%t253 = call i32 @finch_str_eq(ptr %a251, ptr %a252)
%t254 = icmp ne i32 %t253, 0
br label %logic.from6459
logic.from6459:
br i1 %t254, label %logic.rhs6460, label %logic.end6461
logic.rhs6460:
%t255 = load i1, ptr %a3
br label %logic.rend6462
logic.rend6462:
br label %logic.end6461
logic.end6461:
%t256 = phi i1 [ false, %logic.from6459 ], [ %t255, %logic.rend6462 ]
br i1 %t256, label %then6463, label %endif6465
then6463:
%t257 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 0
%t258 = load i1, ptr %t257
%t259 = xor i1 %t258, true
br i1 %t259, label %then6466, label %endif6468
then6466:
%t260 = load ptr, ptr %a1
%t261 = load %S.ast.Node, ptr %a2
call void @finch.gen.fail(ptr %t260, %S.ast.Node %t261, { ptr, i64, i64 } { ptr @.str.4257, i64 44, i64 0 })
br label %endif6468
endif6468:
%t262 = load ptr, ptr %a1
%t263 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 1
%t264 = getelementptr inbounds %S.gen.Place, ptr %t263, i32 0, i32 0
%t265 = load { ptr, i64, i64 }, ptr %t264
store { ptr, i64, i64 } { ptr @.str.4258, i64 29, 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.4259, i64 1, i64 0 }, ptr %a272
call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272)
%t273 = load { ptr, i64, i64 }, ptr %a270
call void @finch.gen.emit(ptr %t262, { ptr, i64, i64 } %t273)
br label %endif6465
endif6465:
%t274 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 2
%t275 = getelementptr inbounds %S.gen.Val, ptr %t274, i32 0, i32 0
%t276 = load { ptr, i64, i64 }, ptr %t275
store { ptr, i64, i64 } %t276, ptr %a277
call void @finch_str_copy(ptr %a278, ptr %a277)
%t279 = load { ptr, i64, i64 }, ptr %a278
store { ptr, i64, i64 } %t279, ptr %a280
%t281 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 0
%t282 = load i1, ptr %t281
br i1 %t282, label %then6469, label %endif6471
then6469:
%t283 = load ptr, ptr %a1
%t284 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 1
%t285 = getelementptr inbounds %S.gen.Place, ptr %t284, i32 0, i32 0
%t286 = load { ptr, i64, i64 }, ptr %t285
%t287 = call { ptr, i64, i64 } @finch.gen.load(ptr %t283, { ptr, i64, i64 } { ptr @.str.4260, i64 17, i64 0 }, { ptr, i64, i64 } %t286)
store { ptr, i64, i64 } %t287, ptr %a280
br label %endif6471
endif6471:
%t288 = load ptr, ptr %a1
%t289 = load { ptr, i64, i64 }, ptr %a280
store { ptr, i64, i64 } { ptr @.str.4261, i64 31, i64 0 }, ptr %a291
store { ptr, i64, i64 } %t289, ptr %a292
call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292)
%t293 = load { ptr, i64, i64 }, ptr %a290
store { ptr, i64, i64 } %t293, ptr %a295
store { ptr, i64, i64 } { ptr @.str.4262, i64 3, i64 0 }, ptr %a296
call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296)
%t297 = load { ptr, i64, i64 }, ptr %a294
%t298 = call { ptr, i64, i64 } @finch.gen.op(ptr %t288, { ptr, i64, i64 } %t297)
store { ptr, i64, i64 } %t298, ptr %a299
%t300 = load ptr, ptr %a1
%t301 = load { ptr, i64, i64 }, ptr %a65
%t302 = load { ptr, i64, i64 }, ptr %a299
%t303 = load %S.ast.Node, ptr %a2
call void @finch.gen.boundsCheck(ptr %t300, { ptr, i64, i64 } %t301, { ptr, i64, i64 } %t302, %S.ast.Node %t303)
%t304 = load ptr, ptr %a1
%t305 = load { ptr, i64, i64 }, ptr %a280
store { ptr, i64, i64 } { ptr @.str.4263, i64 31, i64 0 }, ptr %a307
store { ptr, i64, i64 } %t305, ptr %a308
call void @finch_str_concat(ptr %a306, ptr %a307, ptr %a308)
%t309 = load { ptr, i64, i64 }, ptr %a306
store { ptr, i64, i64 } %t309, ptr %a311
store { ptr, i64, i64 } { ptr @.str.4264, i64 3, i64 0 }, ptr %a312
call void @finch_str_concat(ptr %a310, ptr %a311, ptr %a312)
%t313 = load { ptr, i64, i64 }, ptr %a310
%t314 = call { ptr, i64, i64 } @finch.gen.op(ptr %t304, { ptr, i64, i64 } %t313)
store { ptr, i64, i64 } %t314, ptr %a315
%t316 = load ptr, ptr %a1
%t317 = load ptr, ptr %a1
%t318 = load %S.ast.Type, ptr %a232
%t319 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t317, %S.ast.Type %t318)
store { ptr, i64, i64 } { ptr @.str.4265, i64 23, i64 0 }, ptr %a321
store { ptr, i64, i64 } %t319, ptr %a322
call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322)
%t323 = load { ptr, i64, i64 }, ptr %a320
store { ptr, i64, i64 } %t323, ptr %a325
store { ptr, i64, i64 } { ptr @.str.4266, i64 6, i64 0 }, ptr %a326
call void @finch_str_concat(ptr %a324, ptr %a325, ptr %a326)
%t327 = load { ptr, i64, i64 }, ptr %a324
%t328 = load { ptr, i64, i64 }, ptr %a315
store { ptr, i64, i64 } %t327, ptr %a330
store { ptr, i64, i64 } %t328, ptr %a331
call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331)
%t332 = load { ptr, i64, i64 }, ptr %a329
store { ptr, i64, i64 } %t332, ptr %a334
store { ptr, i64, i64 } { ptr @.str.4267, i64 6, i64 0 }, ptr %a335
call void @finch_str_concat(ptr %a333, ptr %a334, ptr %a335)
%t336 = load { ptr, i64, i64 }, ptr %a333
%t337 = load { ptr, i64, i64 }, ptr %a65
store { ptr, i64, i64 } %t336, ptr %a339
store { ptr, i64, i64 } %t337, ptr %a340
call void @finch_str_concat(ptr %a338, ptr %a339, ptr %a340)
%t341 = load { ptr, i64, i64 }, ptr %a338
%t342 = call { ptr, i64, i64 } @finch.gen.op(ptr %t316, { ptr, i64, i64 } %t341)
store { ptr, i64, i64 } %t342, ptr %a343
%t344 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 0
%t345 = load i1, ptr %t344
br i1 %t345, label %then6472, label %endif6474
then6472:
%t346 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0
%t347 = load { ptr, i64, i64 }, ptr %a343
store { ptr, i64, i64 } %t347, ptr %a348
call void @finch_str_copy(ptr %a349, ptr %a348)
%t350 = load { ptr, i64, i64 }, ptr %a349
%t351 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t350, 0
%t352 = load %S.ast.Type, ptr %a232
store %S.ast.Type %t352, ptr %a353
call void @finch.copy.S_ast_Type(ptr %a354, ptr %a353)
%t355 = load %S.ast.Type, ptr %a354
%t356 = insertvalue %S.gen.Place %t351, %S.ast.Type %t355, 1
%t357 = insertvalue %S.gen.Ref %t346, %S.gen.Place %t356, 1
ret %S.gen.Ref %t357
endif6474:
%t358 = load ptr, ptr %a1
%t359 = load ptr, ptr %a1
%t360 = load %S.ast.Type, ptr %a232
%t361 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t359, %S.ast.Type %t360)
%t362 = load { ptr, i64, i64 }, ptr %a343
%t363 = call { ptr, i64, i64 } @finch.gen.load(ptr %t358, { ptr, i64, i64 } %t361, { ptr, i64, i64 } %t362)
store { ptr, i64, i64 } %t363, ptr %a364
%t365 = load { ptr, i64, i64 }, ptr %a364
store { ptr, i64, i64 } %t365, ptr %a366
call void @finch_str_copy(ptr %a367, ptr %a366)
%t368 = load { ptr, i64, i64 }, ptr %a367
%t369 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t368, 0
%t370 = load %S.ast.Type, ptr %a232
store %S.ast.Type %t370, ptr %a371
call void @finch.copy.S_ast_Type(ptr %a372, ptr %a371)
%t373 = load %S.ast.Type, ptr %a372
%t374 = insertvalue %S.gen.Val %t369, %S.ast.Type %t373, 1
store %S.gen.Val %t374, ptr %a375
%t376 = load ptr, ptr %a1
%t377 = load %S.ast.Type, ptr %a232
%t378 = call i1 @finch.gen.owning(ptr %t376, %S.ast.Type %t377)
br label %logic.from6475
logic.from6475:
br i1 %t378, label %logic.rhs6476, label %logic.end6477
logic.rhs6476:
%t379 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 2
%t380 = getelementptr inbounds %S.gen.Val, ptr %t379, i32 0, i32 2
%t381 = load i1, ptr %t380
br label %logic.rend6478
logic.rend6478:
br label %logic.end6477
logic.end6477:
%t382 = phi i1 [ false, %logic.from6475 ], [ %t381, %logic.rend6478 ]
br i1 %t382, label %then6479, label %endif6481
then6479:
%t383 = load ptr, ptr %a1
%t384 = load { ptr, i64, i64 }, ptr %a364
%t385 = load %S.ast.Type, ptr %a232
%t386 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t383, { ptr, i64, i64 } %t384, %S.ast.Type %t385)
%t387 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t386, 0
%t388 = load %S.ast.Type, ptr %a232
store %S.ast.Type %t388, ptr %a389
call void @finch.copy.S_ast_Type(ptr %a390, ptr %a389)
%t391 = load %S.ast.Type, ptr %a390
%t392 = insertvalue %S.gen.Val %t387, %S.ast.Type %t391, 1
%t393 = insertvalue %S.gen.Val %t392, i1 true, 2
store %S.gen.Val %t393, ptr %a375
br label %endif6481
endif6481:
%t394 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0
%t395 = load %S.gen.Val, ptr %a375
store %S.gen.Val %t395, ptr %a396
call void @finch.copy.S_gen_Val(ptr %a397, ptr %a396)
%t398 = load %S.gen.Val, ptr %a397
%t399 = insertvalue %S.gen.Ref %t394, %S.gen.Val %t398, 2
ret %S.gen.Ref %t399
}
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
%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
%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
%a59 = 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
%a66 = alloca { ptr, i64, i64 }, align 16
%a67 = alloca { ptr, i64, i64 }, align 16
%a68 = 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.cond6482
each.cond6482:
%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.body6483, label %each.end6485
each.body6483:
%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 %then6486, label %endif6488
then6486:
%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.4268, 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.4269, i64 36, i64 0 }, ptr %a34
call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34)
%t35 = load { ptr, i64, i64 }, ptr %a32
call void @finch.gen.fail(ptr %t25, %S.ast.Node %t26, { ptr, i64, i64 } %t35)
br label %endif6488
endif6488:
br label %each.step6484
each.step6484:
%t36 = load i64, ptr %a13
%t37 = add i64 %t36, 1
store i64 %t37, ptr %a13
br label %each.cond6482
each.end6485:
%t38 = load i64, ptr %a11
%t39 = load i64, ptr %a4
%t40 = icmp ne i64 %t38, %t39
br i1 %t40, label %then6489, label %endif6491
then6489:
%t41 = load ptr, ptr %a1
%t42 = load %S.ast.Node, ptr %a2
%t43 = load { ptr, i64, i64 }, ptr %a5
store { ptr, i64, i64 } { ptr @.str.4270, i64 1, 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.4271, i64 8, i64 0 }, ptr %a50
call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50)
%t51 = load { ptr, i64, i64 }, ptr %a48
%t52 = load i64, ptr %a4
call void @finch_str_from_int(ptr %a53, i64 %t52)
%t54 = load { ptr, i64, i64 }, ptr %a53
store { ptr, i64, i64 } %t51, ptr %a56
store { ptr, i64, i64 } %t54, ptr %a57
call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57)
%t58 = load { ptr, i64, i64 }, ptr %a55
store { ptr, i64, i64 } %t58, ptr %a60
store { ptr, i64, i64 } { ptr @.str.4272, i64 22, i64 0 }, ptr %a61
call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61)
%t62 = load { ptr, i64, i64 }, ptr %a59
%t63 = load i64, ptr %a11
call void @finch_str_from_int(ptr %a64, i64 %t63)
%t65 = load { ptr, i64, i64 }, ptr %a64
store { ptr, i64, i64 } %t62, ptr %a67
store { ptr, i64, i64 } %t65, ptr %a68
call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68)
%t69 = load { ptr, i64, i64 }, ptr %a66
call void @finch.gen.fail(ptr %t41, %S.ast.Node %t42, { ptr, i64, i64 } %t69)
br label %endif6491
endif6491:
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
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.4273, 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)
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.4274, 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.4275, 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 %then6492, label %endif6494
then6492:
ret { ptr, i64, i64 } { ptr @.str.4276, i64 3, i64 0 }
endif6494:
%t7 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t7, ptr %a8
store { ptr, i64, i64 } { ptr @.str.4277, 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 %then6495, label %endif6497
then6495:
ret { ptr, i64, i64 } { ptr @.str.4278, i64 5, i64 0 }
endif6497:
%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.4279, i64 3, i64 0 }, ptr %t14
%t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 1
store { ptr, i64, i64 } { ptr @.str.4280, i64 5, i64 0 }, ptr %t15
%t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 2
store { ptr, i64, i64 } { ptr @.str.4281, i64 4, i64 0 }, ptr %t16
%t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 3
store { ptr, i64, i64 } { ptr @.str.4282, i64 4, i64 0 }, ptr %t17
%t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 4
store { ptr, i64, i64 } { ptr @.str.4283, i64 2, i64 0 }, ptr %t18
%t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 5
store { ptr, i64, i64 } { ptr @.str.4284, i64 3, i64 0 }, ptr %t19
%t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 6
store { ptr, i64, i64 } { ptr @.str.4285, i64 3, i64 0 }, ptr %t20
%t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 7
store { ptr, i64, i64 } { ptr @.str.4286, i64 2, i64 0 }, ptr %t21
%t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 8
store { ptr, i64, i64 } { ptr @.str.4287, i64 3, i64 0 }, ptr %t22
%t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 9
store { ptr, i64, i64 } { ptr @.str.4288, i64 3, i64 0 }, ptr %t23
%t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 10
store { ptr, i64, i64 } { ptr @.str.4289, i64 3, i64 0 }, ptr %t24
%t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 11
store { ptr, i64, i64 } { ptr @.str.4290, i64 3, i64 0 }, ptr %t25
%t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 12
store { ptr, i64, i64 } { ptr @.str.4291, 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.cond6498
find.cond6498:
%t37 = load i64, ptr %a36
%t38 = icmp slt i64 %t37, %t34
br i1 %t38, label %find.body6499, label %find.end6502
find.body6499:
%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.hit6500, label %find.next6501
find.hit6500:
store i64 %t37, ptr %a33
br label %find.end6502
find.next6501:
%t45 = add i64 %t37, 1
store i64 %t45, ptr %a36
br label %find.cond6498
find.end6502:
%t46 = load i64, ptr %a33
%t47 = icmp sge i64 %t46, 0
br i1 %t47, label %then6503, label %endif6505
then6503:
%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
ret { ptr, i64, i64 } %t51
endif6505:
ret { ptr, i64, i64 } { ptr @.str.4292, 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
%a28 = alloca %S.gen.Val, align 16
%a29 = alloca %S.gen.Val, align 16
%a33 = alloca { ptr, i64, i64 }, align 16
%a34 = alloca { ptr, i64, i64 }, align 16
%a46 = alloca { ptr, i64, i64 }, align 16
%a47 = alloca { ptr, i64, i64 }, align 16
%a53 = alloca { ptr, i64, i64 }, align 16
%a60 = 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
%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
%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
%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
%a101 = alloca { ptr, i64, i64 }, align 16
%a102 = alloca { ptr, i64, i64 }, align 16
%a103 = alloca { ptr, i64, i64 }, align 16
%a124 = alloca %S.ast.Type, align 16
%a125 = alloca %S.ast.Type, align 16
%a130 = 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
%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
%a150 = alloca { ptr, i64, i64 }, align 16
%a151 = alloca { ptr, i64, i64 }, align 16
%a152 = 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
%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
%a173 = alloca { ptr, i64, i64 }, align 16
%a194 = alloca %S.ast.Type, align 16
%a195 = alloca %S.ast.Type, align 16
%a200 = alloca { ptr, i64, i64 }, align 16
%a201 = alloca { ptr, i64, i64 }, align 16
%a220 = 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
%a231 = alloca { ptr, i64, i64 }, align 16
%a232 = alloca { ptr, i64, i64 }, align 16
%a233 = 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
%a246 = 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
%a257 = alloca { ptr, i64, i64 }, align 16
%a265 = alloca %S.ast.Type, align 16
%a266 = alloca %S.ast.Type, 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
%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
%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
%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
%a311 = alloca %S.ast.Type, align 16
%a312 = alloca %S.ast.Type, align 16
%a319 = alloca { ptr, i64, i64 }, align 16
%a320 = alloca { ptr, i64, i64 }, align 16
%a332 = alloca %S.ast.Type, align 16
%a333 = alloca %S.ast.Type, 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
%a362 = alloca %S.ast.Type, align 16
%a363 = alloca %S.ast.Type, align 16
%a368 = alloca { ptr, i64, i64 }, align 16
%a369 = 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
%a379 = alloca { ptr, i64, i64 }, align 16
%a380 = alloca { ptr, i64, i64 }, align 16
%a381 = 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
%a393 = alloca %S.ast.Type, align 16
%a394 = alloca %S.ast.Type, align 16
%a402 = 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
%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
%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
%a435 = alloca { ptr, i64, i64 }, align 16
%a436 = alloca { ptr, i64, i64 }, align 16
%a437 = alloca { ptr, i64, i64 }, align 16
%a442 = alloca %S.ast.Type, align 16
%a443 = alloca %S.ast.Type, align 16
%a458 = alloca %S.ast.Type, align 16
%a459 = alloca %S.ast.Type, align 16
%a472 = alloca %S.ast.Type, align 16
%a473 = alloca %S.ast.Type, align 16
%a478 = alloca { ptr, i64, i64 }, align 16
%a479 = 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
%a499 = alloca { ptr, i64, i64 }, align 16
%a500 = alloca { ptr, i64, i64 }, align 16
%a501 = 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
%a510 = alloca %S.ast.Type, align 16
%a511 = alloca %S.ast.Type, 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
%a528 = 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
%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
%a561 = 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
%a572 = alloca %S.ast.Type, align 16
%a573 = alloca %S.ast.Type, align 16
%a580 = alloca { ptr, i64, i64 }, align 16
%a581 = 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
%a592 = alloca { ptr, i64, i64 }, align 16
%a593 = alloca { ptr, i64, i64 }, align 16
%a594 = 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
%a606 = alloca %S.ast.Type, align 16
%a607 = alloca %S.ast.Type, align 16
%a612 = alloca { ptr, i64, i64 }, align 16
%a613 = alloca { ptr, i64, i64 }, align 16
%a618 = alloca { ptr, i64, i64 }, align 16
%a619 = 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
%a651 = alloca { ptr, i64, i64 }, align 16
%a652 = alloca { ptr, i64, i64 }, align 16
%a653 = alloca { ptr, i64, i64 }, align 16
%a656 = alloca %S.gen.Val, align 16
%a657 = 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 = 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 %range6506, label %inrange6507
range6506:
call void @finch_panic_index(ptr @.str.4293, i64 3606, i64 0, i64 %t11)
unreachable
inrange6507:
%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 %then6508, label %endif6510
then6508:
%t27 = load %S.gen.Val, ptr %a17
store %S.gen.Val %t27, ptr %a28
call void @finch.copy.S_gen_Val(ptr %a29, ptr %a28)
%t30 = load %S.gen.Val, ptr %a29
ret %S.gen.Val %t30
endif6510:
%t31 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0
%t32 = load { ptr, i64, i64 }, ptr %t31
store { ptr, i64, i64 } %t32, ptr %a33
store { ptr, i64, i64 } { ptr @.str.4294, i64 3, i64 0 }, ptr %a34
%t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34)
%t36 = icmp ne i32 %t35, 0
br label %logic.from6511
logic.from6511:
br i1 %t36, label %logic.rhs6512, label %logic.end6513
logic.rhs6512:
%t37 = load %S.ast.Type, ptr %a3
%t38 = call i1 @finch.gen.isNumber(%S.ast.Type %t37)
br label %logic.rend6514
logic.rend6514:
br label %logic.end6513
logic.end6513:
%t39 = phi i1 [ false, %logic.from6511 ], [ %t38, %logic.rend6514 ]
br label %logic.from6515
logic.from6515:
br i1 %t39, label %logic.rhs6516, label %logic.end6517
logic.rhs6516:
%t40 = load ptr, ptr %a1
%t41 = icmp eq ptr %t40, null
br i1 %t41, label %panic6518, label %ok6519
panic6518:
call void @finch_panic(ptr @.str.4295, i64 3611, ptr @.str.4296)
unreachable
ok6519:
%t42 = getelementptr inbounds %S.gen.Gen, ptr %t40, i32 0, i32 39
%t43 = load { ptr, i64, i64 }, ptr %t42
%t44 = load %S.ast.Node, ptr %a2
%t45 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t44)
store { ptr, i64, i64 } %t43, 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.rend6520
logic.rend6520:
br label %logic.end6517
logic.end6517:
%t50 = phi i1 [ false, %logic.from6515 ], [ %t49, %logic.rend6520 ]
br i1 %t50, label %then6521, label %endif6523
then6521:
%t51 = load ptr, ptr %a1
%t52 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t51, { ptr, i64, i64 } { ptr @.str.4297, i64 17, i64 0 })
store { ptr, i64, i64 } %t52, ptr %a53
%t54 = load ptr, ptr %a1
%t55 = load { ptr, i64, i64 }, ptr %a53
call void @finch.gen.store(ptr %t54, { ptr, i64, i64 } { ptr @.str.4298, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4299, i64 15, i64 0 }, { ptr, i64, i64 } %t55)
%t56 = load %S.ast.Type, ptr %a3
%t57 = call i1 @finch.gen.isInt(%S.ast.Type %t56)
br i1 %t57, label %then6524, label %endif6526
then6524:
%t58 = load ptr, ptr %a1
%t59 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t58, { ptr, i64, i64 } { ptr @.str.4300, i64 3, i64 0 })
store { ptr, i64, i64 } %t59, ptr %a60
%t61 = load ptr, ptr %a1
%t62 = load { ptr, i64, i64 }, ptr %a60
call void @finch.gen.store(ptr %t61, { ptr, i64, i64 } { ptr @.str.4301, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.4302, i64 1, i64 0 }, { ptr, i64, i64 } %t62)
%t63 = load ptr, ptr %a1
%t64 = load ptr, ptr %a1
%t65 = load %S.gen.Val, ptr %a17
%t66 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t64, %S.gen.Val %t65)
store { ptr, i64, i64 } { ptr @.str.4303, i64 32, 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.4304, i64 6, i64 0 }, ptr %a73
call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73)
%t74 = load { ptr, i64, i64 }, ptr %a71
%t75 = load { ptr, i64, i64 }, ptr %a60
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)
%t79 = load { ptr, i64, i64 }, ptr %a76
store { ptr, i64, i64 } %t79, ptr %a81
store { ptr, i64, i64 } { ptr @.str.4305, i64 6, i64 0 }, ptr %a82
call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82)
%t83 = load { ptr, i64, i64 }, ptr %a80
%t84 = load { ptr, i64, i64 }, ptr %a53
store { ptr, i64, i64 } %t83, 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.4306, i64 1, i64 0 }, ptr %a91
call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91)
%t92 = load { ptr, i64, i64 }, ptr %a89
%t93 = call { ptr, i64, i64 } @finch.gen.op(ptr %t63, { ptr, i64, i64 } %t92)
store { ptr, i64, i64 } %t93, ptr %a94
%t95 = load ptr, ptr %a1
%t96 = load { ptr, i64, i64 }, ptr %a94
store { ptr, i64, i64 } { ptr @.str.4307, i64 12, 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
store { ptr, i64, i64 } %t100, ptr %a102
store { ptr, i64, i64 } { ptr @.str.4308, i64 3, i64 0 }, ptr %a103
call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103)
%t104 = load { ptr, i64, i64 }, ptr %a101
%t105 = call { ptr, i64, i64 } @finch.gen.op(ptr %t95, { ptr, i64, i64 } %t104)
%t106 = load ptr, ptr %a1
%t107 = icmp eq ptr %t106, null
br i1 %t107, label %panic6527, label %ok6528
panic6527:
call void @finch_panic(ptr @.str.4309, i64 3619, ptr @.str.4310)
unreachable
ok6528:
%t108 = getelementptr inbounds %S.gen.Gen, ptr %t106, i32 0, i32 40
store { ptr, i64, i64 } %t105, ptr %t108
%t109 = load ptr, ptr %a1
%t110 = load { ptr, i64, i64 }, ptr %a53
%t111 = call { ptr, i64, i64 } @finch.gen.load(ptr %t109, { ptr, i64, i64 } { ptr @.str.4311, i64 17, i64 0 }, { ptr, i64, i64 } %t110)
%t112 = load ptr, ptr %a1
%t113 = icmp eq ptr %t112, null
br i1 %t113, label %panic6529, label %ok6530
panic6529:
call void @finch_panic(ptr @.str.4312, i64 3620, ptr @.str.4313)
unreachable
ok6530:
%t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 41
store { ptr, i64, i64 } %t111, ptr %t114
%t115 = load ptr, ptr %a1
%t116 = load ptr, ptr %a1
%t117 = load { ptr, i64, i64 }, ptr %a60
%t118 = call { ptr, i64, i64 } @finch.gen.load(ptr %t116, { ptr, i64, i64 } { ptr @.str.4314, i64 3, i64 0 }, { ptr, i64, i64 } %t117)
%t119 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4315, i64 3, i64 0 })
%t120 = load %S.ast.Type, ptr %a3
%t121 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t115, { ptr, i64, i64 } %t118, %S.ast.Type %t119, %S.ast.Type %t120)
%t122 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t121, 0
%t123 = load %S.ast.Type, ptr %a3
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
ret %S.gen.Val %t127
endif6526:
%t128 = load ptr, ptr %a1
%t129 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t128, { ptr, i64, i64 } { ptr @.str.4316, i64 6, i64 0 })
store { ptr, i64, i64 } %t129, ptr %a130
%t131 = load ptr, ptr %a1
%t132 = load { ptr, i64, i64 }, ptr %a130
call void @finch.gen.store(ptr %t131, { ptr, i64, i64 } { ptr @.str.4317, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.4318, i64 3, i64 0 }, { ptr, i64, i64 } %t132)
%t133 = load ptr, ptr %a1
%t134 = load ptr, ptr %a1
%t135 = load %S.gen.Val, ptr %a17
%t136 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t134, %S.gen.Val %t135)
store { ptr, i64, i64 } { ptr @.str.4319, i64 34, 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.4320, i64 6, i64 0 }, ptr %a143
call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143)
%t144 = load { ptr, i64, i64 }, ptr %a141
%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)
%t149 = load { ptr, i64, i64 }, ptr %a146
store { ptr, i64, i64 } %t149, ptr %a151
store { ptr, i64, i64 } { ptr @.str.4321, i64 6, i64 0 }, ptr %a152
call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152)
%t153 = load { ptr, i64, i64 }, ptr %a150
%t154 = load { ptr, i64, i64 }, ptr %a53
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.4322, i64 1, i64 0 }, ptr %a161
call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161)
%t162 = load { ptr, i64, i64 }, ptr %a159
%t163 = call { ptr, i64, i64 } @finch.gen.op(ptr %t133, { ptr, i64, i64 } %t162)
store { ptr, i64, i64 } %t163, ptr %a164
%t165 = load ptr, ptr %a1
%t166 = load { ptr, i64, i64 }, ptr %a164
store { ptr, i64, i64 } { ptr @.str.4323, i64 12, i64 0 }, ptr %a168
store { ptr, i64, i64 } %t166, ptr %a169
call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169)
%t170 = load { ptr, i64, i64 }, ptr %a167
store { ptr, i64, i64 } %t170, ptr %a172
store { ptr, i64, i64 } { ptr @.str.4324, i64 3, i64 0 }, ptr %a173
call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173)
%t174 = load { ptr, i64, i64 }, ptr %a171
%t175 = call { ptr, i64, i64 } @finch.gen.op(ptr %t165, { ptr, i64, i64 } %t174)
%t176 = load ptr, ptr %a1
%t177 = icmp eq ptr %t176, null
br i1 %t177, label %panic6531, label %ok6532
panic6531:
call void @finch_panic(ptr @.str.4325, i64 3626, ptr @.str.4326)
unreachable
ok6532:
%t178 = getelementptr inbounds %S.gen.Gen, ptr %t176, i32 0, i32 40
store { ptr, i64, i64 } %t175, ptr %t178
%t179 = load ptr, ptr %a1
%t180 = load { ptr, i64, i64 }, ptr %a53
%t181 = call { ptr, i64, i64 } @finch.gen.load(ptr %t179, { ptr, i64, i64 } { ptr @.str.4327, i64 17, i64 0 }, { ptr, i64, i64 } %t180)
%t182 = load ptr, ptr %a1
%t183 = icmp eq ptr %t182, null
br i1 %t183, label %panic6533, label %ok6534
panic6533:
call void @finch_panic(ptr @.str.4328, i64 3627, ptr @.str.4329)
unreachable
ok6534:
%t184 = getelementptr inbounds %S.gen.Gen, ptr %t182, i32 0, i32 41
store { ptr, i64, i64 } %t181, ptr %t184
%t185 = load ptr, ptr %a1
%t186 = load ptr, ptr %a1
%t187 = load { ptr, i64, i64 }, ptr %a130
%t188 = call { ptr, i64, i64 } @finch.gen.load(ptr %t186, { ptr, i64, i64 } { ptr @.str.4330, i64 6, i64 0 }, { ptr, i64, i64 } %t187)
%t189 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4331, i64 5, i64 0 })
%t190 = load %S.ast.Type, ptr %a3
%t191 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t185, { ptr, i64, i64 } %t188, %S.ast.Type %t189, %S.ast.Type %t190)
%t192 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t191, 0
%t193 = load %S.ast.Type, ptr %a3
store %S.ast.Type %t193, ptr %a194
call void @finch.copy.S_ast_Type(ptr %a195, ptr %a194)
%t196 = load %S.ast.Type, ptr %a195
%t197 = insertvalue %S.gen.Val %t192, %S.ast.Type %t196, 1
ret %S.gen.Val %t197
endif6523:
%t198 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0
%t199 = load { ptr, i64, i64 }, ptr %t198
store { ptr, i64, i64 } %t199, ptr %a200
store { ptr, i64, i64 } { ptr @.str.4332, i64 3, i64 0 }, ptr %a201
%t202 = call i32 @finch_str_eq(ptr %a200, ptr %a201)
%t203 = icmp ne i32 %t202, 0
br label %logic.from6535
logic.from6535:
br i1 %t203, label %logic.rhs6536, label %logic.end6537
logic.rhs6536:
%t204 = load %S.ast.Type, ptr %a3
%t205 = call i1 @finch.gen.isNumber(%S.ast.Type %t204)
br label %logic.rend6538
logic.rend6538:
br label %logic.end6537
logic.end6537:
%t206 = phi i1 [ false, %logic.from6535 ], [ %t205, %logic.rend6538 ]
br i1 %t206, label %then6539, label %endif6541
then6539:
%t207 = load ptr, ptr %a1
%t208 = load ptr, ptr %a1
%t209 = icmp eq ptr %t208, null
br i1 %t209, label %panic6542, label %ok6543
panic6542:
call void @finch_panic(ptr @.str.4333, i64 3631, ptr @.str.4334)
unreachable
ok6543:
%t210 = getelementptr inbounds %S.gen.Gen, ptr %t208, i32 0, i32 1
%t211 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13
%t212 = load i64, ptr %t211
%t213 = load { ptr, i64, i64 }, ptr %t210
%t214 = extractvalue { ptr, i64, i64 } %t213, 1
%t215 = icmp uge i64 %t212, %t214
br i1 %t215, label %range6544, label %inrange6545
range6544:
call void @finch_panic_index(ptr @.str.4335, i64 3631, i64 %t212, i64 %t214)
unreachable
inrange6545:
%t216 = extractvalue { ptr, i64, i64 } %t213, 0
%t217 = getelementptr inbounds { ptr, i64, i64 }, ptr %t216, i64 %t212
%t218 = load { ptr, i64, i64 }, ptr %t217
%t219 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t207, { ptr, i64, i64 } %t218)
store { ptr, i64, i64 } %t219, ptr %a220
%t221 = load %S.ast.Type, ptr %a3
%t222 = call i1 @finch.gen.isInt(%S.ast.Type %t221)
br i1 %t222, label %then6546, label %endif6548
then6546:
%t223 = load ptr, ptr %a1
%t224 = load ptr, ptr %a1
%t225 = load %S.gen.Val, ptr %a17
%t226 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t224, %S.gen.Val %t225)
store { ptr, i64, i64 } { ptr @.str.4336, i64 31, i64 0 }, ptr %a228
store { ptr, i64, i64 } %t226, ptr %a229
call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229)
%t230 = load { ptr, i64, i64 }, ptr %a227
store { ptr, i64, i64 } %t230, ptr %a232
store { ptr, i64, i64 } { ptr @.str.4337, i64 6, i64 0 }, ptr %a233
call void @finch_str_concat(ptr %a231, ptr %a232, ptr %a233)
%t234 = load { ptr, i64, i64 }, ptr %a231
%t235 = load { ptr, i64, i64 }, ptr %a220
store { ptr, i64, i64 } %t234, ptr %a237
store { ptr, i64, i64 } %t235, ptr %a238
call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238)
%t239 = load { ptr, i64, i64 }, ptr %a236
store { ptr, i64, i64 } %t239, ptr %a241
store { ptr, i64, i64 } { ptr @.str.4338, i64 6, i64 0 }, ptr %a242
call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242)
%t243 = load { ptr, i64, i64 }, ptr %a240
%t244 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11
%t245 = load i64, ptr %t244
call void @finch_str_from_int(ptr %a246, i64 %t245)
%t247 = load { ptr, i64, i64 }, ptr %a246
store { ptr, i64, i64 } %t243, 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.4339, i64 1, i64 0 }, ptr %a254
call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254)
%t255 = load { ptr, i64, i64 }, ptr %a252
%t256 = call { ptr, i64, i64 } @finch.gen.op(ptr %t223, { ptr, i64, i64 } %t255)
store { ptr, i64, i64 } %t256, ptr %a257
%t258 = load ptr, ptr %a1
%t259 = load { ptr, i64, i64 }, ptr %a257
%t260 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4340, i64 3, i64 0 })
%t261 = load %S.ast.Type, ptr %a3
%t262 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t258, { ptr, i64, i64 } %t259, %S.ast.Type %t260, %S.ast.Type %t261)
%t263 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t262, 0
%t264 = load %S.ast.Type, ptr %a3
store %S.ast.Type %t264, ptr %a265
call void @finch.copy.S_ast_Type(ptr %a266, ptr %a265)
%t267 = load %S.ast.Type, ptr %a266
%t268 = insertvalue %S.gen.Val %t263, %S.ast.Type %t267, 1
ret %S.gen.Val %t268
endif6548:
%t269 = load ptr, ptr %a1
%t270 = load ptr, ptr %a1
%t271 = load %S.gen.Val, ptr %a17
%t272 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t270, %S.gen.Val %t271)
store { ptr, i64, i64 } { ptr @.str.4341, i64 36, 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.4342, i64 6, i64 0 }, ptr %a279
call void @finch_str_concat(ptr %a277, ptr %a278, ptr %a279)
%t280 = load { ptr, i64, i64 }, ptr %a277
%t281 = load { ptr, i64, i64 }, ptr %a220
store { ptr, i64, i64 } %t280, ptr %a283
store { ptr, i64, i64 } %t281, ptr %a284
call void @finch_str_concat(ptr %a282, ptr %a283, ptr %a284)
%t285 = load { ptr, i64, i64 }, ptr %a282
store { ptr, i64, i64 } %t285, ptr %a287
store { ptr, i64, i64 } { ptr @.str.4343, i64 6, i64 0 }, ptr %a288
call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288)
%t289 = load { ptr, i64, i64 }, ptr %a286
%t290 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11
%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 } %t289, 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.4344, i64 1, i64 0 }, ptr %a300
call void @finch_str_concat(ptr %a298, ptr %a299, ptr %a300)
%t301 = load { ptr, i64, i64 }, ptr %a298
%t302 = call { ptr, i64, i64 } @finch.gen.op(ptr %t269, { ptr, i64, i64 } %t301)
store { ptr, i64, i64 } %t302, ptr %a303
%t304 = load ptr, ptr %a1
%t305 = load { ptr, i64, i64 }, ptr %a303
%t306 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4345, i64 5, i64 0 })
%t307 = load %S.ast.Type, ptr %a3
%t308 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t304, { ptr, i64, i64 } %t305, %S.ast.Type %t306, %S.ast.Type %t307)
%t309 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t308, 0
%t310 = load %S.ast.Type, ptr %a3
store %S.ast.Type %t310, ptr %a311
call void @finch.copy.S_ast_Type(ptr %a312, ptr %a311)
%t313 = load %S.ast.Type, ptr %a312
%t314 = insertvalue %S.gen.Val %t309, %S.ast.Type %t313, 1
ret %S.gen.Val %t314
endif6541:
%t315 = load %S.ast.Type, ptr %a3
%t316 = call i1 @finch.gen.isInt(%S.ast.Type %t315)
br label %logic.from6549
logic.from6549:
br i1 %t316, label %logic.rhs6550, label %logic.end6551
logic.rhs6550:
%t317 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0
%t318 = load { ptr, i64, i64 }, ptr %t317
store { ptr, i64, i64 } %t318, ptr %a319
store { ptr, i64, i64 } { ptr @.str.4346, i64 4, i64 0 }, ptr %a320
%t321 = call i32 @finch_str_eq(ptr %a319, ptr %a320)
%t322 = icmp ne i32 %t321, 0
br label %logic.rend6552
logic.rend6552:
br label %logic.end6551
logic.end6551:
%t323 = phi i1 [ false, %logic.from6549 ], [ %t322, %logic.rend6552 ]
br i1 %t323, label %then6553, label %endif6555
then6553:
%t324 = load ptr, ptr %a1
%t325 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0
%t326 = load { ptr, i64, i64 }, ptr %t325
%t327 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4347, i64 3, i64 0 })
%t328 = load %S.ast.Type, ptr %a3
%t329 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t324, { ptr, i64, i64 } %t326, %S.ast.Type %t327, %S.ast.Type %t328)
%t330 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t329, 0
%t331 = load %S.ast.Type, ptr %a3
store %S.ast.Type %t331, ptr %a332
call void @finch.copy.S_ast_Type(ptr %a333, ptr %a332)
%t334 = load %S.ast.Type, ptr %a333
%t335 = insertvalue %S.gen.Val %t330, %S.ast.Type %t334, 1
ret %S.gen.Val %t335
endif6555:
%t336 = load %S.ast.Type, ptr %a3
%t337 = call i1 @finch.gen.isInt(%S.ast.Type %t336)
br label %logic.from6556
logic.from6556:
br i1 %t337, label %logic.end6558, label %logic.rhs6557
logic.rhs6557:
%t338 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0
%t339 = load { ptr, i64, i64 }, ptr %t338
store { ptr, i64, i64 } %t339, ptr %a340
store { ptr, i64, i64 } { ptr @.str.4348, i64 4, i64 0 }, ptr %a341
%t342 = call i32 @finch_str_eq(ptr %a340, ptr %a341)
%t343 = icmp ne i32 %t342, 0
br label %logic.rend6559
logic.rend6559:
br label %logic.end6558
logic.end6558:
%t344 = phi i1 [ true, %logic.from6556 ], [ %t343, %logic.rend6559 ]
br i1 %t344, label %then6560, label %endif6562
then6560:
%t345 = load %S.ast.Type, ptr %a23
%t346 = call i1 @finch.gen.isInt(%S.ast.Type %t345)
br label %logic.from6563
logic.from6563:
br i1 %t346, label %logic.end6565, label %logic.rhs6564
logic.rhs6564:
%t347 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0
%t348 = load { ptr, i64, i64 }, ptr %t347
store { ptr, i64, i64 } %t348, ptr %a349
store { ptr, i64, i64 } { ptr @.str.4349, i64 4, i64 0 }, ptr %a350
%t351 = call i32 @finch_str_eq(ptr %a349, ptr %a350)
%t352 = icmp ne i32 %t351, 0
br label %logic.rend6566
logic.rend6566:
br label %logic.end6565
logic.end6565:
%t353 = phi i1 [ true, %logic.from6563 ], [ %t352, %logic.rend6566 ]
br i1 %t353, label %then6567, label %endif6569
then6567:
%t354 = load ptr, ptr %a1
%t355 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0
%t356 = load { ptr, i64, i64 }, ptr %t355
%t357 = load %S.ast.Type, ptr %a23
%t358 = load %S.ast.Type, ptr %a3
%t359 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t354, { ptr, i64, i64 } %t356, %S.ast.Type %t357, %S.ast.Type %t358)
%t360 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t359, 0
%t361 = load %S.ast.Type, ptr %a3
store %S.ast.Type %t361, ptr %a362
call void @finch.copy.S_ast_Type(ptr %a363, ptr %a362)
%t364 = load %S.ast.Type, ptr %a363
%t365 = insertvalue %S.gen.Val %t360, %S.ast.Type %t364, 1
ret %S.gen.Val %t365
endif6569:
%t366 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0
%t367 = load { ptr, i64, i64 }, ptr %t366
store { ptr, i64, i64 } %t367, ptr %a368
store { ptr, i64, i64 } { ptr @.str.4350, i64 4, i64 0 }, ptr %a369
%t370 = call i32 @finch_str_eq(ptr %a368, ptr %a369)
%t371 = icmp ne i32 %t370, 0
br i1 %t371, label %then6570, label %endif6572
then6570:
%t372 = load ptr, ptr %a1
%t373 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0
%t374 = load { ptr, i64, i64 }, ptr %t373
store { ptr, i64, i64 } { ptr @.str.4351, i64 8, i64 0 }, ptr %a376
store { ptr, i64, i64 } %t374, ptr %a377
call void @finch_str_concat(ptr %a375, ptr %a376, ptr %a377)
%t378 = load { ptr, i64, i64 }, ptr %a375
store { ptr, i64, i64 } %t378, ptr %a380
store { ptr, i64, i64 } { ptr @.str.4352, i64 4, 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, ptr %a1
%t384 = load %S.ast.Type, ptr %a3
%t385 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t383, %S.ast.Type %t384)
store { ptr, i64, i64 } %t382, ptr %a387
store { ptr, i64, i64 } %t385, ptr %a388
call void @finch_str_concat(ptr %a386, ptr %a387, ptr %a388)
%t389 = load { ptr, i64, i64 }, ptr %a386
%t390 = call { ptr, i64, i64 } @finch.gen.op(ptr %t372, { ptr, i64, i64 } %t389)
%t391 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t390, 0
%t392 = load %S.ast.Type, ptr %a3
store %S.ast.Type %t392, ptr %a393
call void @finch.copy.S_ast_Type(ptr %a394, ptr %a393)
%t395 = load %S.ast.Type, ptr %a394
%t396 = insertvalue %S.gen.Val %t391, %S.ast.Type %t395, 1
ret %S.gen.Val %t396
endif6572:
%t397 = load %S.ast.Type, ptr %a23
%t398 = call i1 @finch.gen.isFloat(%S.ast.Type %t397)
br label %logic.from6573
logic.from6573:
br i1 %t398, label %logic.rhs6574, label %logic.end6575
logic.rhs6574:
%t399 = load %S.ast.Type, ptr %a3
%t400 = call i1 @finch.gen.isInt(%S.ast.Type %t399)
br label %logic.rend6576
logic.rend6576:
br label %logic.end6575
logic.end6575:
%t401 = phi i1 [ false, %logic.from6573 ], [ %t400, %logic.rend6576 ]
br i1 %t401, label %then6577, label %endif6579
then6577:
store { ptr, i64, i64 } { ptr @.str.4353, i64 6, i64 0 }, ptr %a402
%t403 = load %S.ast.Type, ptr %a3
%t404 = call i1 @finch.gen.isSigned(%S.ast.Type %t403)
br i1 %t404, label %then6580, label %endif6582
then6580:
store { ptr, i64, i64 } { ptr @.str.4354, i64 6, i64 0 }, ptr %a402
br label %endif6582
endif6582:
%t405 = load ptr, ptr %a1
%t406 = load { ptr, i64, i64 }, ptr %a402
store { ptr, i64, i64 } %t406, ptr %a408
store { ptr, i64, i64 } { ptr @.str.4355, i64 1, i64 0 }, ptr %a409
call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409)
%t410 = load { ptr, i64, i64 }, ptr %a407
%t411 = load ptr, ptr %a1
%t412 = load %S.ast.Type, ptr %a23
%t413 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t411, %S.ast.Type %t412)
store { ptr, i64, i64 } %t410, 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.4356, i64 1, i64 0 }, ptr %a420
call void @finch_str_concat(ptr %a418, ptr %a419, ptr %a420)
%t421 = load { ptr, i64, i64 }, ptr %a418
%t422 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0
%t423 = load { ptr, i64, i64 }, ptr %t422
store { ptr, i64, i64 } %t421, ptr %a425
store { ptr, i64, i64 } %t423, ptr %a426
call void @finch_str_concat(ptr %a424, ptr %a425, ptr %a426)
%t427 = load { ptr, i64, i64 }, ptr %a424
store { ptr, i64, i64 } %t427, ptr %a429
store { ptr, i64, i64 } { ptr @.str.4357, i64 4, i64 0 }, ptr %a430
call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430)
%t431 = load { ptr, i64, i64 }, ptr %a428
%t432 = load ptr, ptr %a1
%t433 = load %S.ast.Type, ptr %a3
%t434 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t432, %S.ast.Type %t433)
store { ptr, i64, i64 } %t431, ptr %a436
store { ptr, i64, i64 } %t434, ptr %a437
call void @finch_str_concat(ptr %a435, ptr %a436, ptr %a437)
%t438 = load { ptr, i64, i64 }, ptr %a435
%t439 = call { ptr, i64, i64 } @finch.gen.op(ptr %t405, { ptr, i64, i64 } %t438)
%t440 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t439, 0
%t441 = load %S.ast.Type, ptr %a3
store %S.ast.Type %t441, ptr %a442
call void @finch.copy.S_ast_Type(ptr %a443, ptr %a442)
%t444 = load %S.ast.Type, ptr %a443
%t445 = insertvalue %S.gen.Val %t440, %S.ast.Type %t444, 1
ret %S.gen.Val %t445
endif6579:
br label %endif6562
endif6562:
%t446 = load %S.ast.Type, ptr %a3
%t447 = call i1 @finch.gen.isFloat(%S.ast.Type %t446)
br i1 %t447, label %then6583, label %endif6585
then6583:
%t448 = load %S.ast.Type, ptr %a23
%t449 = call i1 @finch.gen.isInt(%S.ast.Type %t448)
br i1 %t449, label %then6586, label %endif6588
then6586:
%t450 = load ptr, ptr %a1
%t451 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0
%t452 = load { ptr, i64, i64 }, ptr %t451
%t453 = load %S.ast.Type, ptr %a23
%t454 = load %S.ast.Type, ptr %a3
%t455 = call { ptr, i64, i64 } @finch.gen.intToFloat(ptr %t450, { ptr, i64, i64 } %t452, %S.ast.Type %t453, %S.ast.Type %t454)
%t456 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t455, 0
%t457 = load %S.ast.Type, ptr %a3
store %S.ast.Type %t457, ptr %a458
call void @finch.copy.S_ast_Type(ptr %a459, ptr %a458)
%t460 = load %S.ast.Type, ptr %a459
%t461 = insertvalue %S.gen.Val %t456, %S.ast.Type %t460, 1
ret %S.gen.Val %t461
endif6588:
%t462 = load %S.ast.Type, ptr %a23
%t463 = call i1 @finch.gen.isFloat(%S.ast.Type %t462)
br i1 %t463, label %then6589, label %endif6591
then6589:
%t464 = load ptr, ptr %a1
%t465 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0
%t466 = load { ptr, i64, i64 }, ptr %t465
%t467 = load %S.ast.Type, ptr %a23
%t468 = load %S.ast.Type, ptr %a3
%t469 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t464, { ptr, i64, i64 } %t466, %S.ast.Type %t467, %S.ast.Type %t468)
%t470 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t469, 0
%t471 = load %S.ast.Type, ptr %a3
store %S.ast.Type %t471, ptr %a472
call void @finch.copy.S_ast_Type(ptr %a473, ptr %a472)
%t474 = load %S.ast.Type, ptr %a473
%t475 = insertvalue %S.gen.Val %t470, %S.ast.Type %t474, 1
ret %S.gen.Val %t475
endif6591:
br label %endif6585
endif6585:
%t476 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0
%t477 = load { ptr, i64, i64 }, ptr %t476
store { ptr, i64, i64 } %t477, ptr %a478
store { ptr, i64, i64 } { ptr @.str.4358, i64 4, i64 0 }, ptr %a479
%t480 = call i32 @finch_str_eq(ptr %a478, ptr %a479)
%t481 = icmp ne i32 %t480, 0
br label %logic.from6592
logic.from6592:
br i1 %t481, label %logic.rhs6593, label %logic.end6594
logic.rhs6593:
%t482 = load %S.ast.Type, ptr %a23
%t483 = call i1 @finch.gen.isInt(%S.ast.Type %t482)
br label %logic.rend6595
logic.rend6595:
br label %logic.end6594
logic.end6594:
%t484 = phi i1 [ false, %logic.from6592 ], [ %t483, %logic.rend6595 ]
br i1 %t484, label %then6596, label %endif6598
then6596:
%t485 = load ptr, ptr %a1
%t486 = load ptr, ptr %a1
%t487 = load %S.ast.Type, ptr %a23
%t488 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t486, %S.ast.Type %t487)
store { ptr, i64, i64 } { ptr @.str.4359, i64 8, i64 0 }, ptr %a490
store { ptr, i64, i64 } %t488, ptr %a491
call void @finch_str_concat(ptr %a489, ptr %a490, ptr %a491)
%t492 = load { ptr, i64, i64 }, ptr %a489
store { ptr, i64, i64 } %t492, ptr %a494
store { ptr, i64, i64 } { ptr @.str.4360, i64 1, i64 0 }, ptr %a495
call void @finch_str_concat(ptr %a493, ptr %a494, ptr %a495)
%t496 = load { ptr, i64, i64 }, ptr %a493
%t497 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0
%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)
%t502 = load { ptr, i64, i64 }, ptr %a499
store { ptr, i64, i64 } %t502, ptr %a504
store { ptr, i64, i64 } { ptr @.str.4361, i64 3, i64 0 }, ptr %a505
call void @finch_str_concat(ptr %a503, ptr %a504, ptr %a505)
%t506 = load { ptr, i64, i64 }, ptr %a503
%t507 = call { ptr, i64, i64 } @finch.gen.op(ptr %t485, { ptr, i64, i64 } %t506)
%t508 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t507, 0
%t509 = load %S.ast.Type, ptr %a3
store %S.ast.Type %t509, ptr %a510
call void @finch.copy.S_ast_Type(ptr %a511, ptr %a510)
%t512 = load %S.ast.Type, ptr %a511
%t513 = insertvalue %S.gen.Val %t508, %S.ast.Type %t512, 1
ret %S.gen.Val %t513
endif6598:
%t514 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0
%t515 = load { ptr, i64, i64 }, ptr %t514
store { ptr, i64, i64 } %t515, ptr %a516
store { ptr, i64, i64 } { ptr @.str.4362, i64 3, i64 0 }, ptr %a517
%t518 = call i32 @finch_str_eq(ptr %a516, ptr %a517)
%t519 = icmp ne i32 %t518, 0
br label %logic.from6599
logic.from6599:
br i1 %t519, label %logic.rhs6600, label %logic.end6601
logic.rhs6600:
%t520 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0
%t521 = load { ptr, i64, i64 }, ptr %t520
store { ptr, i64, i64 } %t521, ptr %a522
store { ptr, i64, i64 } { ptr @.str.4363, i64 3, i64 0 }, ptr %a523
%t524 = call i32 @finch_str_eq(ptr %a522, ptr %a523)
%t525 = icmp ne i32 %t524, 0
br label %logic.from6602
logic.from6602:
br i1 %t525, label %logic.end6604, label %logic.rhs6603
logic.rhs6603:
%t526 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0
%t527 = load { ptr, i64, i64 }, ptr %t526
store { ptr, i64, i64 } %t527, ptr %a528
store { ptr, i64, i64 } { ptr @.str.4364, i64 4, i64 0 }, ptr %a529
%t530 = call i32 @finch_str_eq(ptr %a528, ptr %a529)
%t531 = icmp ne i32 %t530, 0
br label %logic.rend6605
logic.rend6605:
br label %logic.end6604
logic.end6604:
%t532 = phi i1 [ true, %logic.from6602 ], [ %t531, %logic.rend6605 ]
br label %logic.rend6606
logic.rend6606:
br label %logic.end6601
logic.end6601:
%t533 = phi i1 [ false, %logic.from6599 ], [ %t532, %logic.rend6606 ]
br i1 %t533, label %then6607, label %endif6609
then6607:
%t534 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0
%t535 = load { ptr, i64, i64 }, ptr %t534
store { ptr, i64, i64 } %t535, ptr %a536
call void @finch_str_copy(ptr %a537, ptr %a536)
%t538 = load { ptr, i64, i64 }, ptr %a537
%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
ret %S.gen.Val %t544
endif6609:
%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.4365, i64 3, i64 0 }, ptr %a548
%t549 = call i32 @finch_str_eq(ptr %a547, ptr %a548)
%t550 = icmp ne i32 %t549, 0
br label %logic.from6610
logic.from6610:
br i1 %t550, label %logic.rhs6611, label %logic.end6612
logic.rhs6611:
%t551 = load %S.ast.Type, ptr %a23
%t552 = call i1 @finch.gen.isInt(%S.ast.Type %t551)
br label %logic.rend6613
logic.rend6613:
br label %logic.end6612
logic.end6612:
%t553 = phi i1 [ false, %logic.from6610 ], [ %t552, %logic.rend6613 ]
br i1 %t553, label %then6614, label %endif6616
then6614:
%t554 = load ptr, ptr %a1
%t555 = load ptr, ptr %a1
%t556 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0
%t557 = load { ptr, i64, i64 }, ptr %t556
%t558 = load %S.ast.Type, ptr %a23
%t559 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4367, i64 3, i64 0 })
%t560 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t555, { ptr, i64, i64 } %t557, %S.ast.Type %t558, %S.ast.Type %t559)
store { ptr, i64, i64 } { ptr @.str.4366, i64 13, i64 0 }, ptr %a562
store { ptr, i64, i64 } %t560, ptr %a563
call void @finch_str_concat(ptr %a561, ptr %a562, ptr %a563)
%t564 = load { ptr, i64, i64 }, ptr %a561
store { ptr, i64, i64 } %t564, ptr %a566
store { ptr, i64, i64 } { ptr @.str.4368, i64 7, i64 0 }, ptr %a567
call void @finch_str_concat(ptr %a565, ptr %a566, ptr %a567)
%t568 = load { ptr, i64, i64 }, ptr %a565
%t569 = call { ptr, i64, i64 } @finch.gen.op(ptr %t554, { ptr, i64, i64 } %t568)
%t570 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t569, 0
%t571 = load %S.ast.Type, ptr %a3
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 = insertvalue %S.gen.Val %t570, %S.ast.Type %t574, 1
ret %S.gen.Val %t575
endif6616:
%t576 = load %S.ast.Type, ptr %a3
%t577 = call i1 @finch.gen.isInt(%S.ast.Type %t576)
br label %logic.from6617
logic.from6617:
br i1 %t577, label %logic.rhs6618, label %logic.end6619
logic.rhs6618:
%t578 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0
%t579 = load { ptr, i64, i64 }, ptr %t578
store { ptr, i64, i64 } %t579, ptr %a580
store { ptr, i64, i64 } { ptr @.str.4369, i64 3, i64 0 }, ptr %a581
%t582 = call i32 @finch_str_eq(ptr %a580, ptr %a581)
%t583 = icmp ne i32 %t582, 0
br label %logic.rend6620
logic.rend6620:
br label %logic.end6619
logic.end6619:
%t584 = phi i1 [ false, %logic.from6617 ], [ %t583, %logic.rend6620 ]
br i1 %t584, label %then6621, label %endif6623
then6621:
%t585 = load ptr, ptr %a1
%t586 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0
%t587 = load { ptr, i64, i64 }, ptr %t586
store { ptr, i64, i64 } { ptr @.str.4370, i64 13, i64 0 }, ptr %a589
store { ptr, i64, i64 } %t587, ptr %a590
call void @finch_str_concat(ptr %a588, ptr %a589, ptr %a590)
%t591 = load { ptr, i64, i64 }, ptr %a588
store { ptr, i64, i64 } %t591, ptr %a593
store { ptr, i64, i64 } { ptr @.str.4371, i64 4, i64 0 }, ptr %a594
call void @finch_str_concat(ptr %a592, ptr %a593, ptr %a594)
%t595 = load { ptr, i64, i64 }, ptr %a592
%t596 = load ptr, ptr %a1
%t597 = load %S.ast.Type, ptr %a3
%t598 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t596, %S.ast.Type %t597)
store { ptr, i64, i64 } %t595, ptr %a600
store { ptr, i64, i64 } %t598, ptr %a601
call void @finch_str_concat(ptr %a599, ptr %a600, ptr %a601)
%t602 = load { ptr, i64, i64 }, ptr %a599
%t603 = call { ptr, i64, i64 } @finch.gen.op(ptr %t585, { ptr, i64, i64 } %t602)
%t604 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t603, 0
%t605 = load %S.ast.Type, ptr %a3
store %S.ast.Type %t605, ptr %a606
call void @finch.copy.S_ast_Type(ptr %a607, ptr %a606)
%t608 = load %S.ast.Type, ptr %a607
%t609 = insertvalue %S.gen.Val %t604, %S.ast.Type %t608, 1
ret %S.gen.Val %t609
endif6623:
%t610 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0
%t611 = load { ptr, i64, i64 }, ptr %t610
store { ptr, i64, i64 } %t611, ptr %a612
store { ptr, i64, i64 } { ptr @.str.4372, i64 3, i64 0 }, ptr %a613
%t614 = call i32 @finch_str_eq(ptr %a612, ptr %a613)
%t615 = icmp ne i32 %t614, 0
br label %logic.from6624
logic.from6624:
br i1 %t615, label %logic.rhs6625, label %logic.end6626
logic.rhs6625:
%t616 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0
%t617 = load { ptr, i64, i64 }, ptr %t616
store { ptr, i64, i64 } %t617, ptr %a618
store { ptr, i64, i64 } { ptr @.str.4373, i64 3, i64 0 }, ptr %a619
%t620 = call i32 @finch_str_eq(ptr %a618, ptr %a619)
%t621 = icmp ne i32 %t620, 0
br label %logic.rend6627
logic.rend6627:
br label %logic.end6626
logic.end6626:
%t622 = phi i1 [ false, %logic.from6624 ], [ %t621, %logic.rend6627 ]
br i1 %t622, label %then6628, label %endif6630
then6628:
%t623 = load ptr, ptr %a1
%t624 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t625 = load { ptr, i64, i64 }, ptr %t624
%t626 = extractvalue { ptr, i64, i64 } %t625, 1
%t627 = icmp uge i64 0, %t626
br i1 %t627, label %range6631, label %inrange6632
range6631:
call void @finch_panic_index(ptr @.str.4374, i64 3678, i64 0, i64 %t626)
unreachable
inrange6632:
%t628 = extractvalue { ptr, i64, i64 } %t625, 0
%t629 = getelementptr inbounds %S.ast.Node, ptr %t628, i64 0
%t630 = load %S.ast.Node, ptr %t629
call void @finch.gen.fail(ptr %t623, %S.ast.Node %t630, { ptr, i64, i64 } { ptr @.str.4375, i64 70, i64 0 })
br label %endif6630
endif6630:
%t631 = load ptr, ptr %a1
%t632 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t633 = load { ptr, i64, i64 }, ptr %t632
%t634 = extractvalue { ptr, i64, i64 } %t633, 1
%t635 = icmp uge i64 0, %t634
br i1 %t635, label %range6633, label %inrange6634
range6633:
call void @finch_panic_index(ptr @.str.4376, i64 3680, i64 0, i64 %t634)
unreachable
inrange6634:
%t636 = extractvalue { ptr, i64, i64 } %t633, 0
%t637 = getelementptr inbounds %S.ast.Node, ptr %t636, i64 0
%t638 = load %S.ast.Node, ptr %t637
%t639 = load %S.ast.Type, ptr %a23
%t640 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t639)
store { ptr, i64, i64 } { ptr @.str.4377, i64 11, i64 0 }, ptr %a642
store { ptr, i64, i64 } %t640, ptr %a643
call void @finch_str_concat(ptr %a641, ptr %a642, ptr %a643)
%t644 = load { ptr, i64, i64 }, ptr %a641
store { ptr, i64, i64 } %t644, ptr %a646
store { ptr, i64, i64 } { ptr @.str.4378, i64 6, i64 0 }, ptr %a647
call void @finch_str_concat(ptr %a645, ptr %a646, ptr %a647)
%t648 = load { ptr, i64, i64 }, ptr %a645
%t649 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t650 = load { ptr, i64, i64 }, ptr %t649
store { ptr, i64, i64 } %t648, 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
call void @finch.gen.fail(ptr %t631, %S.ast.Node %t638, { ptr, i64, i64 } %t654)
%t655 = load %S.gen.Val, ptr %a17
store %S.gen.Val %t655, ptr %a656
call void @finch.copy.S_gen_Val(ptr %a657, ptr %a656)
%t658 = load %S.gen.Val, ptr %a657
ret %S.gen.Val %t658
}
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.4379, 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 %then6635, label %endif6637
then6635:
%t9 = load ptr, ptr %a1
%t10 = icmp eq ptr %t9, null
br i1 %t10, label %panic6638, label %ok6639
panic6638:
call void @finch_panic(ptr @.str.4380, i64 3713, ptr @.str.4381)
unreachable
ok6639:
%t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 15
%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 %range6640, label %inrange6641
range6640:
call void @finch_panic_index(ptr @.str.4382, i64 3713, i64 %t17, i64 %t19)
unreachable
inrange6641:
%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
endif6637:
%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.4383, 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 %then6642, label %endif6644
then6642:
%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 %range6645, label %inrange6646
range6645:
call void @finch_panic_index(ptr @.str.4384, i64 3716, i64 0, i64 %t36)
unreachable
inrange6646:
%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
endif6644:
%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.4385, 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.from6647
logic.from6647:
br i1 %t48, label %logic.end6649, label %logic.rhs6648
logic.rhs6648:
%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.4386, 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.rend6650
logic.rend6650:
br label %logic.end6649
logic.end6649:
%t55 = phi i1 [ true, %logic.from6647 ], [ %t54, %logic.rend6650 ]
br i1 %t55, label %then6651, label %endif6653
then6651:
ret i64 8
endif6653:
%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.4387, 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 %then6654, label %endif6656
then6654:
ret i64 8
endif6656:
%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.4388, 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 %then6657, label %endif6659
then6657:
ret i64 4
endif6659:
%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.4389, 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 %then6660, label %endif6662
then6660:
ret i64 1
endif6662:
%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.copy.arr_S_gen_Leaf(ptr %dst, ptr %src) {
entry:
call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.gen.Leaf, ptr null, i32 1) to i64))
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
%a153 = alloca { ptr, i64, i64 }, align 16
%a154 = 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.4390, 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 %then6663, label %else6664
then6663:
%t11 = load ptr, ptr %a1
%t12 = icmp eq ptr %t11, null
br i1 %t12, label %panic6666, label %ok6667
panic6666:
call void @finch_panic(ptr @.str.4391, i64 3737, ptr @.str.4392)
unreachable
ok6667:
%t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 15
%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 %range6668, label %inrange6669
range6668:
call void @finch_panic_index(ptr @.str.4393, i64 3737, i64 %t19, i64 %t21)
unreachable
inrange6669:
%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.cond6670
for.cond6670:
%t34 = load i64, ptr %a33
%t35 = icmp slt i64 %t34, %t32
br i1 %t35, label %for.body6671, label %for.end6673
for.body6671:
%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 %range6674, label %inrange6675
range6674:
call void @finch_panic_index(ptr @.str.4394, i64 3739, i64 %t38, i64 %t40)
unreachable
inrange6675:
%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 %range6676, label %inrange6677
range6676:
call void @finch_panic_index(ptr @.str.4395, i64 3739, i64 %t47, i64 %t49)
unreachable
inrange6677:
%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.cond6678
each.cond6678:
%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.body6679, label %each.end6681
each.body6679:
%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.step6680
each.step6680:
%t72 = load i64, ptr %a57
%t73 = add i64 %t72, 1
store i64 %t73, ptr %a57
br label %each.cond6678
each.end6681:
br label %for.step6672
for.step6672:
%t74 = load i64, ptr %a33
%t75 = add i64 %t74, 1
store i64 %t75, ptr %a33
br label %for.cond6670
for.end6673:
br label %endif6665
else6664:
%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.4396, 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 %then6682, label %else6683
then6682:
%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 %range6685, label %inrange6686
range6685:
call void @finch_panic_index(ptr @.str.4397, i64 3744, i64 0, i64 %t85)
unreachable
inrange6686:
%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.cond6687
for.cond6687:
%t95 = load i64, ptr %a94
%t96 = icmp slt i64 %t95, %t93
br i1 %t96, label %for.body6688, label %for.end6690
for.body6688:
%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 %range6691, label %inrange6692
range6691:
call void @finch_panic_index(ptr @.str.4398, i64 3746, i64 0, i64 %t100)
unreachable
inrange6692:
%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.cond6693
each.cond6693:
%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.body6694, label %each.end6696
each.body6694:
%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.step6695
each.step6695:
%t127 = load i64, ptr %a112
%t128 = add i64 %t127, 1
store i64 %t128, ptr %a112
br label %each.cond6693
each.end6696:
br label %for.step6689
for.step6689:
%t129 = load i64, ptr %a94
%t130 = add i64 %t129, 1
store i64 %t130, ptr %a94
br label %for.cond6687
for.end6690:
br label %endif6684
else6683:
%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.4399, 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 %endif6684
endif6684:
br label %endif6665
endif6665:
%t152 = load { ptr, i64, i64 }, ptr %a4
store { ptr, i64, i64 } %t152, ptr %a153
call void @finch.copy.arr_S_gen_Leaf(ptr %a154, ptr %a153)
%t155 = load { ptr, i64, i64 }, ptr %a154
ret { ptr, i64, i64 } %t155
}
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
%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
%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
%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 i64, align 16
%a94 = alloca %S.gen.Leaf, align 16
%a97 = alloca { ptr, i64, i64 }, align 16
%a98 = 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
%a114 = alloca { ptr, i64, i64 }, align 16
%a115 = alloca { ptr, i64, i64 }, align 16
%a116 = alloca { ptr, i64, i64 }, align 16
%a120 = alloca %S.gen.Abi, align 16
%a121 = alloca %S.gen.Abi, align 16
%a127 = alloca %S.gen.Abi, align 16
%a128 = alloca %S.gen.Abi, 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
%a165 = alloca %S.gen.Abi, align 16
%a166 = alloca %S.gen.Abi, 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.from6697
logic.from6697:
br i1 %t17, label %logic.rhs6698, label %logic.end6699
logic.rhs6698:
%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.rend6700
logic.rend6700:
br label %logic.end6699
logic.end6699:
%t21 = phi i1 [ false, %logic.from6697 ], [ %t20, %logic.rend6700 ]
store i1 %t21, ptr %a22
store i64 0, ptr %a23
br label %each.cond6701
each.cond6701:
%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.body6702, label %each.end6704
each.body6702:
%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.from6705
logic.from6705:
br i1 %t34, label %logic.end6707, label %logic.rhs6706
logic.rhs6706:
%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 %range6708, label %inrange6709
range6708:
call void @finch_panic_index(ptr @.str.4400, i64 3763, i64 0, i64 %t38)
unreachable
inrange6709:
%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.rend6710
logic.rend6710:
br label %logic.end6707
logic.end6707:
%t45 = phi i1 [ true, %logic.from6705 ], [ %t44, %logic.rend6710 ]
br i1 %t45, label %then6711, label %endif6713
then6711:
store i1 false, ptr %a22
br label %endif6713
endif6713:
br label %each.step6703
each.step6703:
%t46 = load i64, ptr %a23
%t47 = add i64 %t46, 1
store i64 %t47, ptr %a23
br label %each.cond6701
each.end6704:
%t48 = load i1, ptr %a22
br i1 %t48, label %then6714, label %endif6716
then6714:
store { ptr, i64, i64 } { ptr @.str.4401, 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 %range6717, label %inrange6718
range6717:
call void @finch_panic_index(ptr @.str.4402, i64 3769, i64 0, i64 %t51)
unreachable
inrange6718:
%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 %then6719, label %endif6721
then6719:
store { ptr, i64, i64 } { ptr @.str.4403, i64 6, i64 0 }, ptr %a49
br label %endif6721
endif6721:
%t57 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.4404, i64 6, i64 0 }, ptr %t57
%t58 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1
%t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t58, i32 0, i32 1
%t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1
%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 } { ptr @.str.4405, i64 1, 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.4406, i64 3, i64 0 }, ptr %a70
call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70)
%t71 = load { ptr, i64, i64 }, ptr %a68
%t72 = load { ptr, i64, i64 }, ptr %a49
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)
%t76 = load { ptr, i64, i64 }, ptr %a73
store { ptr, i64, i64 } %t76, ptr %a78
store { ptr, i64, i64 } { ptr @.str.4407, i64 1, i64 0 }, ptr %a79
call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79)
%t80 = load { ptr, i64, i64 }, ptr %a77
%t81 = load i64, ptr %t59
%t82 = add i64 %t81, 1
call void @finch_arr_reserve(ptr %t58, i64 %t82, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t83 = load ptr, ptr %t58
%t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i64 %t81
store { ptr, i64, i64 } %t80, ptr %t84
store i64 %t82, ptr %t59
store { ptr, i64, i64 } zeroinitializer, ptr %a85
store i64 0, ptr %a86
br label %each.cond6722
each.cond6722:
%t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1
%t88 = load i64, ptr %t87
%t89 = load i64, ptr %a86
%t90 = icmp slt i64 %t89, %t88
br i1 %t90, label %each.body6723, label %each.end6725
each.body6723:
%t91 = load ptr, ptr %a14
%t92 = getelementptr inbounds %S.gen.Leaf, ptr %t91, i64 %t89
%t93 = load %S.gen.Leaf, ptr %t92
store %S.gen.Leaf %t93, ptr %a94
%t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a85, i32 0, i32 1
%t96 = load { ptr, i64, i64 }, ptr %a49
store { ptr, i64, i64 } %t96, ptr %a97
call void @finch_str_copy(ptr %a98, ptr %a97)
%t99 = load { ptr, i64, i64 }, ptr %a98
%t100 = load i64, ptr %t95
%t101 = add i64 %t100, 1
call void @finch_arr_reserve(ptr %a85, i64 %t101, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t102 = load ptr, ptr %a85
%t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i64 %t100
store { ptr, i64, i64 } %t99, ptr %t103
store i64 %t101, ptr %t95
br label %each.step6724
each.step6724:
%t104 = load i64, ptr %a86
%t105 = add i64 %t104, 1
store i64 %t105, ptr %a86
br label %each.cond6722
each.end6725:
%t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %a85, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.4409, i64 2, i64 0 }, ptr %a107
call void @finch_str_join(ptr %a108, ptr %a85, ptr %a107)
%t109 = load { ptr, i64, i64 }, ptr %a108
store { ptr, i64, i64 } { ptr @.str.4408, 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
store { ptr, i64, i64 } %t113, ptr %a115
store { ptr, i64, i64 } { ptr @.str.4410, i64 2, i64 0 }, ptr %a116
call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116)
%t117 = load { ptr, i64, i64 }, ptr %a114
%t118 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2
store { ptr, i64, i64 } %t117, ptr %t118
%t119 = load %S.gen.Abi, ptr %a10
store %S.gen.Abi %t119, ptr %a120
call void @finch.copy.S_gen_Abi(ptr %a121, ptr %a120)
%t122 = load %S.gen.Abi, ptr %a121
ret %S.gen.Abi %t122
endif6716:
%t123 = load i64, ptr %a4
%t124 = icmp sgt i64 %t123, 16
br i1 %t124, label %then6726, label %endif6728
then6726:
%t125 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.4411, i64 8, i64 0 }, ptr %t125
%t126 = load %S.gen.Abi, ptr %a10
store %S.gen.Abi %t126, ptr %a127
call void @finch.copy.S_gen_Abi(ptr %a128, ptr %a127)
%t129 = load %S.gen.Abi, ptr %a128
ret %S.gen.Abi %t129
endif6728:
%t130 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.4412, i64 6, i64 0 }, ptr %t130
%t131 = load i64, ptr %a5
%t132 = icmp sge i64 %t131, 16
br i1 %t132, label %then6729, label %else6730
then6729:
%t133 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1
%t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1
%t135 = load i64, ptr %t134
%t136 = add i64 %t135, 1
call void @finch_arr_reserve(ptr %t133, i64 %t136, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t137 = load ptr, ptr %t133
%t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i64 %t135
store { ptr, i64, i64 } { ptr @.str.4413, i64 4, i64 0 }, ptr %t138
store i64 %t136, ptr %t134
%t139 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2
store { ptr, i64, i64 } { ptr @.str.4414, i64 4, i64 0 }, ptr %t139
br label %endif6731
else6730:
%t140 = load i64, ptr %a4
%t141 = icmp sle i64 %t140, 8
br i1 %t141, label %then6732, label %else6733
then6732:
%t142 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1
%t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t142, i32 0, i32 1
%t144 = load i64, ptr %t143
%t145 = add i64 %t144, 1
call void @finch_arr_reserve(ptr %t142, i64 %t145, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t146 = load ptr, ptr %t142
%t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i64 %t144
store { ptr, i64, i64 } { ptr @.str.4415, i64 3, i64 0 }, ptr %t147
store i64 %t145, ptr %t143
%t148 = load i64, ptr %a4
%t149 = mul i64 %t148, 8
call void @finch_str_from_int(ptr %a150, i64 %t149)
%t151 = load { ptr, i64, i64 }, ptr %a150
store { ptr, i64, i64 } { ptr @.str.4416, i64 1, i64 0 }, ptr %a153
store { ptr, i64, i64 } %t151, ptr %a154
call void @finch_str_concat(ptr %a152, ptr %a153, ptr %a154)
%t155 = load { ptr, i64, i64 }, ptr %a152
%t156 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2
store { ptr, i64, i64 } %t155, ptr %t156
br label %endif6734
else6733:
%t157 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1
%t158 = getelementptr inbounds { ptr, i64, i64 }, ptr %t157, i32 0, i32 1
%t159 = load i64, ptr %t158
%t160 = add i64 %t159, 1
call void @finch_arr_reserve(ptr %t157, i64 %t160, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t161 = load ptr, ptr %t157
%t162 = getelementptr inbounds { ptr, i64, i64 }, ptr %t161, i64 %t159
store { ptr, i64, i64 } { ptr @.str.4417, i64 9, i64 0 }, ptr %t162
store i64 %t160, ptr %t158
%t163 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2
store { ptr, i64, i64 } { ptr @.str.4418, i64 9, i64 0 }, ptr %t163
br label %endif6734
endif6734:
br label %endif6731
endif6731:
%t164 = load %S.gen.Abi, ptr %a10
store %S.gen.Abi %t164, ptr %a165
call void @finch.copy.S_gen_Abi(ptr %a166, ptr %a165)
%t167 = load %S.gen.Abi, ptr %a166
ret %S.gen.Abi %t167
}
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
%a12 = alloca %S.gen.Abi, align 16
%a13 = alloca %S.gen.Abi, align 16
%a30 = alloca %S.gen.StructDef, align 16
%a31 = alloca %S.gen.StructDef, align 16
%a33 = alloca %S.gen.StructDef, align 16
%a36 = alloca 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
%a95 = alloca { ptr, i64, i64 }, align 16
%a96 = alloca { ptr, i64, i64 }, align 16
%a100 = alloca %S.gen.Abi, align 16
%a101 = alloca %S.gen.Abi, align 16
%a110 = alloca %S.gen.Abi, align 16
%a111 = alloca %S.gen.Abi, 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 %S.gen.Abi, align 16
%a160 = alloca %S.gen.Abi, align 16
%a165 = alloca i64, align 16
%a202 = alloca i64, align 16
%a209 = alloca i64, align 16
%a251 = 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
%a275 = alloca { ptr, i64, i64 }, align 16
%a276 = 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
%a287 = alloca { ptr, i64, i64 }, align 16
%a288 = alloca { ptr, i64, i64 }, align 16
%a289 = alloca { ptr, i64, i64 }, align 16
%a293 = alloca %S.gen.Abi, align 16
%a294 = alloca %S.gen.Abi, 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.4419, 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.4420, 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 %then6735, label %endif6737
then6735:
%t11 = load %S.gen.Abi, ptr %a4
store %S.gen.Abi %t11, ptr %a12
call void @finch.copy.S_gen_Abi(ptr %a13, ptr %a12)
%t14 = load %S.gen.Abi, ptr %a13
ret %S.gen.Abi %t14
endif6737:
%t15 = load ptr, ptr %a1
%t16 = icmp eq ptr %t15, null
br i1 %t16, label %panic6738, label %ok6739
panic6738:
call void @finch_panic(ptr @.str.4421, i64 3804, ptr @.str.4422)
unreachable
ok6739:
%t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 15
%t18 = load ptr, ptr %a1
%t19 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3
%t20 = load { ptr, i64, i64 }, ptr %t19
%t21 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2
%t22 = load { ptr, i64, i64 }, ptr %t21
%t23 = call i64 @finch.gen.findStruct(ptr %t18, { ptr, i64, i64 } %t20, { ptr, i64, i64 } %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 %range6740, label %inrange6741
range6740:
call void @finch_panic_index(ptr @.str.4423, i64 3804, i64 %t23, i64 %t25)
unreachable
inrange6741:
%t27 = extractvalue { ptr, i64, i64 } %t24, 0
%t28 = getelementptr inbounds %S.gen.StructDef, ptr %t27, i64 %t23
%t29 = load %S.gen.StructDef, ptr %t28
store %S.gen.StructDef %t29, ptr %a30
call void @finch.copy.S_gen_StructDef(ptr %a31, ptr %a30)
%t32 = load %S.gen.StructDef, ptr %a31
store %S.gen.StructDef %t32, ptr %a33
%t34 = getelementptr inbounds %S.gen.StructDef, ptr %a33, i32 0, i32 9
%t35 = load i64, ptr %t34
store i64 %t35, ptr %a36
%t37 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 3
store i64 8, ptr %t37
%t38 = getelementptr inbounds %S.gen.StructDef, ptr %a33, i32 0, i32 10
%t39 = load i64, ptr %t38
%t40 = icmp sgt i64 %t39, 8
br i1 %t40, label %then6742, label %endif6744
then6742:
%t41 = getelementptr inbounds %S.gen.StructDef, ptr %a33, i32 0, i32 10
%t42 = load i64, ptr %t41
%t43 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 3
store i64 %t42, ptr %t43
br label %endif6744
endif6744:
%t44 = load ptr, ptr %a1
%t45 = icmp eq ptr %t44, null
br i1 %t45, label %panic6745, label %ok6746
panic6745:
call void @finch_panic(ptr @.str.4424, i64 3810, ptr @.str.4425)
unreachable
ok6746:
%t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 29
%t47 = getelementptr inbounds %S.platform.Target, ptr %t46, i32 0, i32 4
%t48 = load i1, ptr %t47
br i1 %t48, label %then6747, label %endif6749
then6747:
%t49 = load ptr, ptr %a1
%t50 = load %S.ast.Type, ptr %a2
%t51 = load %S.gen.Abi, ptr %a4
%t52 = load i64, ptr %a36
%t53 = getelementptr inbounds %S.gen.StructDef, ptr %a33, i32 0, i32 10
%t54 = load i64, ptr %t53
%t55 = call %S.gen.Abi @finch.gen.classifyArm64(ptr %t49, %S.ast.Type %t50, %S.gen.Abi %t51, i64 %t52, i64 %t54)
ret %S.gen.Abi %t55
endif6749:
%t56 = load ptr, ptr %a1
%t57 = icmp eq ptr %t56, null
br i1 %t57, label %panic6750, label %ok6751
panic6750:
call void @finch_panic(ptr @.str.4426, i64 3813, ptr @.str.4427)
unreachable
ok6751:
%t58 = getelementptr inbounds %S.gen.Gen, ptr %t56, i32 0, i32 29
%t59 = getelementptr inbounds %S.platform.Target, ptr %t58, i32 0, i32 1
%t60 = load i1, ptr %t59
br i1 %t60, label %then6752, label %endif6754
then6752:
%t61 = load i64, ptr %a36
%t62 = icmp eq i64 %t61, 1
br label %logic.from6755
logic.from6755:
br i1 %t62, label %logic.end6757, label %logic.rhs6756
logic.rhs6756:
%t63 = load i64, ptr %a36
%t64 = icmp eq i64 %t63, 2
br label %logic.rend6758
logic.rend6758:
br label %logic.end6757
logic.end6757:
%t65 = phi i1 [ true, %logic.from6755 ], [ %t64, %logic.rend6758 ]
br label %logic.from6759
logic.from6759:
br i1 %t65, label %logic.end6761, label %logic.rhs6760
logic.rhs6760:
%t66 = load i64, ptr %a36
%t67 = icmp eq i64 %t66, 4
br label %logic.rend6762
logic.rend6762:
br label %logic.end6761
logic.end6761:
%t68 = phi i1 [ true, %logic.from6759 ], [ %t67, %logic.rend6762 ]
br label %logic.from6763
logic.from6763:
br i1 %t68, label %logic.end6765, label %logic.rhs6764
logic.rhs6764:
%t69 = load i64, ptr %a36
%t70 = icmp eq i64 %t69, 8
br label %logic.rend6766
logic.rend6766:
br label %logic.end6765
logic.end6765:
%t71 = phi i1 [ true, %logic.from6763 ], [ %t70, %logic.rend6766 ]
br i1 %t71, label %then6767, label %else6768
then6767:
%t72 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.4428, i64 6, i64 0 }, ptr %t72
%t73 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1
%t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1
%t75 = load i64, ptr %a36
%t76 = mul i64 %t75, 8
call void @finch_str_from_int(ptr %a77, i64 %t76)
%t78 = load { ptr, i64, i64 }, ptr %a77
store { ptr, i64, i64 } { ptr @.str.4429, i64 1, i64 0 }, ptr %a80
store { ptr, i64, i64 } %t78, ptr %a81
call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81)
%t82 = load { ptr, i64, i64 }, ptr %a79
%t83 = load i64, ptr %t74
%t84 = add i64 %t83, 1
call void @finch_arr_reserve(ptr %t73, i64 %t84, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t85 = load ptr, ptr %t73
%t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i64 %t83
store { ptr, i64, i64 } %t82, ptr %t86
store i64 %t84, ptr %t74
%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 %range6770, label %inrange6771
range6770:
call void @finch_panic_index(ptr @.str.4430, i64 3819, i64 0, i64 %t89)
unreachable
inrange6771:
%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
store { ptr, i64, i64 } %t97, ptr %t94
br label %endif6769
else6768:
%t98 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.4431, i64 8, i64 0 }, ptr %t98
br label %endif6769
endif6769:
%t99 = load %S.gen.Abi, ptr %a4
store %S.gen.Abi %t99, ptr %a100
call void @finch.copy.S_gen_Abi(ptr %a101, ptr %a100)
%t102 = load %S.gen.Abi, ptr %a101
ret %S.gen.Abi %t102
endif6754:
%t103 = load i64, ptr %a36
%t104 = icmp sgt i64 %t103, 16
br label %logic.from6772
logic.from6772:
br i1 %t104, label %logic.end6774, label %logic.rhs6773
logic.rhs6773:
%t105 = load i64, ptr %a36
%t106 = icmp eq i64 %t105, 0
br label %logic.rend6775
logic.rend6775:
br label %logic.end6774
logic.end6774:
%t107 = phi i1 [ true, %logic.from6772 ], [ %t106, %logic.rend6775 ]
br i1 %t107, label %then6776, label %endif6778
then6776:
%t108 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.4432, i64 6, i64 0 }, ptr %t108
%t109 = load %S.gen.Abi, ptr %a4
store %S.gen.Abi %t109, ptr %a110
call void @finch.copy.S_gen_Abi(ptr %a111, ptr %a110)
%t112 = load %S.gen.Abi, ptr %a111
ret %S.gen.Abi %t112
endif6778:
%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 %a36
%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.cond6779
each.cond6779:
%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.body6780, label %each.end6782
each.body6780:
%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 %then6783, label %endif6785
then6783:
store i64 8, ptr %a148
br label %endif6785
endif6785:
%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 %panic6786, label %ok6787
panic6786:
call void @finch_panic(ptr @.str.4433, i64 3838, ptr @.str.4434)
unreachable
ok6787:
%t155 = srem i64 %t152, %t153
%t156 = icmp ne i64 %t155, 0
br i1 %t156, label %then6788, label %endif6790
then6788:
%t157 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.4435, i64 6, i64 0 }, ptr %t157
%t158 = load %S.gen.Abi, ptr %a4
store %S.gen.Abi %t158, ptr %a159
call void @finch.copy.S_gen_Abi(ptr %a160, ptr %a159)
%t161 = load %S.gen.Abi, ptr %a160
ret %S.gen.Abi %t161
endif6790:
%t162 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 0
%t163 = load i64, ptr %t162
%t164 = sdiv i64 %t163, 8
store i64 %t164, ptr %a165
%t166 = load i64, ptr %a165
%t167 = load { ptr, i64, i64 }, ptr %a128
%t168 = extractvalue { ptr, i64, i64 } %t167, 1
%t169 = icmp uge i64 %t166, %t168
br i1 %t169, label %range6791, label %inrange6792
range6791:
call void @finch_panic_index(ptr @.str.4436, i64 3843, i64 %t166, i64 %t168)
unreachable
inrange6792:
%t170 = extractvalue { ptr, i64, i64 } %t167, 0
%t171 = getelementptr inbounds i64, ptr %t170, i64 %t166
%t172 = load i64, ptr %t171
%t173 = icmp eq i64 %t172, 1
br label %logic.from6793
logic.from6793:
br i1 %t173, label %logic.end6795, label %logic.rhs6794
logic.rhs6794:
%t174 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 2
%t175 = load i1, ptr %t174
%t176 = xor i1 %t175, true
br label %logic.rend6796
logic.rend6796:
br label %logic.end6795
logic.end6795:
%t177 = phi i1 [ true, %logic.from6793 ], [ %t176, %logic.rend6796 ]
br i1 %t177, label %then6797, label %else6798
then6797:
%t178 = load i64, ptr %a165
%t179 = load { ptr, i64, i64 }, ptr %a128
%t180 = extractvalue { ptr, i64, i64 } %t179, 1
%t181 = icmp uge i64 %t178, %t180
br i1 %t181, label %range6800, label %inrange6801
range6800:
call void @finch_panic_index(ptr @.str.4437, i64 3844, i64 %t178, i64 %t180)
unreachable
inrange6801:
%t182 = extractvalue { ptr, i64, i64 } %t179, 0
%t183 = getelementptr inbounds i64, ptr %t182, i64 %t178
store i64 1, ptr %t183
br label %endif6799
else6798:
%t184 = load i64, ptr %a165
%t185 = load { ptr, i64, i64 }, ptr %a128
%t186 = extractvalue { ptr, i64, i64 } %t185, 1
%t187 = icmp uge i64 %t184, %t186
br i1 %t187, label %range6802, label %inrange6803
range6802:
call void @finch_panic_index(ptr @.str.4438, i64 3846, i64 %t184, i64 %t186)
unreachable
inrange6803:
%t188 = extractvalue { ptr, i64, i64 } %t185, 0
%t189 = getelementptr inbounds i64, ptr %t188, i64 %t184
store i64 2, ptr %t189
br label %endif6799
endif6799:
%t190 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 3
%t191 = load i1, ptr %t190
br i1 %t191, label %then6804, label %endif6806
then6804:
%t192 = load i64, ptr %a165
%t193 = load { ptr, i64, i64 }, ptr %a136
%t194 = extractvalue { ptr, i64, i64 } %t193, 1
%t195 = icmp uge i64 %t192, %t194
br i1 %t195, label %range6807, label %inrange6808
range6807:
call void @finch_panic_index(ptr @.str.4439, i64 3849, i64 %t192, i64 %t194)
unreachable
inrange6808:
%t196 = extractvalue { ptr, i64, i64 } %t193, 0
%t197 = getelementptr inbounds i1, ptr %t196, i64 %t192
store i1 true, ptr %t197
br label %endif6806
endif6806:
br label %each.step6781
each.step6781:
%t198 = load i64, ptr %a137
%t199 = add i64 %t198, 1
store i64 %t199, ptr %a137
br label %each.cond6779
each.end6782:
%t200 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.4440, i64 6, i64 0 }, ptr %t200
%t201 = load i64, ptr %a120
store i64 0, ptr %a202
br label %for.cond6809
for.cond6809:
%t203 = load i64, ptr %a202
%t204 = icmp slt i64 %t203, %t201
br i1 %t204, label %for.body6810, label %for.end6812
for.body6810:
%t205 = load i64, ptr %a36
%t206 = load i64, ptr %a202
%t207 = mul i64 8, %t206
%t208 = sub i64 %t205, %t207
store i64 %t208, ptr %a209
%t210 = load i64, ptr %a209
%t211 = icmp sgt i64 %t210, 8
br i1 %t211, label %then6813, label %endif6815
then6813:
store i64 8, ptr %a209
br label %endif6815
endif6815:
%t212 = load i64, ptr %a202
%t213 = load { ptr, i64, i64 }, ptr %a128
%t214 = extractvalue { ptr, i64, i64 } %t213, 1
%t215 = icmp uge i64 %t212, %t214
br i1 %t215, label %range6816, label %inrange6817
range6816:
call void @finch_panic_index(ptr @.str.4441, i64 3858, i64 %t212, i64 %t214)
unreachable
inrange6817:
%t216 = extractvalue { ptr, i64, i64 } %t213, 0
%t217 = getelementptr inbounds i64, ptr %t216, i64 %t212
%t218 = load i64, ptr %t217
%t219 = icmp eq i64 %t218, 2
br i1 %t219, label %then6818, label %else6819
then6818:
%t220 = load i64, ptr %a202
%t221 = load { ptr, i64, i64 }, ptr %a136
%t222 = extractvalue { ptr, i64, i64 } %t221, 1
%t223 = icmp uge i64 %t220, %t222
br i1 %t223, label %range6821, label %inrange6822
range6821:
call void @finch_panic_index(ptr @.str.4442, i64 3859, i64 %t220, i64 %t222)
unreachable
inrange6822:
%t224 = extractvalue { ptr, i64, i64 } %t221, 0
%t225 = getelementptr inbounds i1, ptr %t224, i64 %t220
%t226 = load i1, ptr %t225
br i1 %t226, label %then6823, label %else6824
then6823:
%t227 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1
%t228 = getelementptr inbounds { ptr, i64, i64 }, ptr %t227, i32 0, i32 1
%t229 = load i64, ptr %t228
%t230 = add i64 %t229, 1
call void @finch_arr_reserve(ptr %t227, i64 %t230, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t231 = load ptr, ptr %t227
%t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t231, i64 %t229
store { ptr, i64, i64 } { ptr @.str.4443, i64 6, i64 0 }, ptr %t232
store i64 %t230, ptr %t228
br label %endif6825
else6824:
%t233 = load i64, ptr %a209
%t234 = icmp sgt i64 %t233, 4
br i1 %t234, label %then6826, label %else6827
then6826:
%t235 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1
%t236 = getelementptr inbounds { ptr, i64, i64 }, ptr %t235, i32 0, i32 1
%t237 = load i64, ptr %t236
%t238 = add i64 %t237, 1
call void @finch_arr_reserve(ptr %t235, i64 %t238, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t239 = load ptr, ptr %t235
%t240 = getelementptr inbounds { ptr, i64, i64 }, ptr %t239, i64 %t237
store { ptr, i64, i64 } { ptr @.str.4444, i64 11, i64 0 }, ptr %t240
store i64 %t238, ptr %t236
br label %endif6828
else6827:
%t241 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1
%t242 = getelementptr inbounds { ptr, i64, i64 }, ptr %t241, i32 0, i32 1
%t243 = load i64, ptr %t242
%t244 = add i64 %t243, 1
call void @finch_arr_reserve(ptr %t241, i64 %t244, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t245 = load ptr, ptr %t241
%t246 = getelementptr inbounds { ptr, i64, i64 }, ptr %t245, i64 %t243
store { ptr, i64, i64 } { ptr @.str.4445, i64 5, i64 0 }, ptr %t246
store i64 %t244, ptr %t242
br label %endif6828
endif6828:
br label %endif6825
endif6825:
br label %endif6820
else6819:
%t247 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1
%t248 = getelementptr inbounds { ptr, i64, i64 }, ptr %t247, i32 0, i32 1
%t249 = load i64, ptr %a209
%t250 = mul i64 %t249, 8
call void @finch_str_from_int(ptr %a251, i64 %t250)
%t252 = load { ptr, i64, i64 }, ptr %a251
store { ptr, i64, i64 } { ptr @.str.4446, 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
%t257 = load i64, ptr %t248
%t258 = add i64 %t257, 1
call void @finch_arr_reserve(ptr %t247, i64 %t258, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t259 = load ptr, ptr %t247
%t260 = getelementptr inbounds { ptr, i64, i64 }, ptr %t259, i64 %t257
store { ptr, i64, i64 } %t256, ptr %t260
store i64 %t258, ptr %t248
br label %endif6820
endif6820:
br label %for.step6811
for.step6811:
%t261 = load i64, ptr %a202
%t262 = add i64 %t261, 1
store i64 %t262, ptr %a202
br label %for.cond6809
for.end6812:
%t263 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1
%t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1
%t265 = load i64, ptr %t264
%t266 = icmp eq i64 %t265, 1
br i1 %t266, label %then6829, label %else6830
then6829:
%t267 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1
%t268 = load { ptr, i64, i64 }, ptr %t267
%t269 = extractvalue { ptr, i64, i64 } %t268, 1
%t270 = icmp uge i64 0, %t269
br i1 %t270, label %range6832, label %inrange6833
range6832:
call void @finch_panic_index(ptr @.str.4447, i64 3871, i64 0, i64 %t269)
unreachable
inrange6833:
%t271 = extractvalue { ptr, i64, i64 } %t268, 0
%t272 = getelementptr inbounds { ptr, i64, i64 }, ptr %t271, i64 0
%t273 = load { ptr, i64, i64 }, ptr %t272
%t274 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 2
store { ptr, i64, i64 } %t273, ptr %a275
call void @finch_str_copy(ptr %a276, ptr %a275)
%t277 = load { ptr, i64, i64 }, ptr %a276
store { ptr, i64, i64 } %t277, ptr %t274
br label %endif6831
else6830:
%t278 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1
%t279 = getelementptr inbounds { ptr, i64, i64 }, ptr %t278, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.4449, i64 2, i64 0 }, ptr %a280
call void @finch_str_join(ptr %a281, ptr %t278, ptr %a280)
%t282 = load { ptr, i64, i64 }, ptr %a281
store { ptr, i64, i64 } { ptr @.str.4448, i64 2, i64 0 }, ptr %a284
store { ptr, i64, i64 } %t282, ptr %a285
call void @finch_str_concat(ptr %a283, ptr %a284, ptr %a285)
%t286 = load { ptr, i64, i64 }, ptr %a283
store { ptr, i64, i64 } %t286, ptr %a288
store { ptr, i64, i64 } { ptr @.str.4450, i64 2, i64 0 }, ptr %a289
call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289)
%t290 = load { ptr, i64, i64 }, ptr %a287
%t291 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 2
store { ptr, i64, i64 } %t290, ptr %t291
br label %endif6831
endif6831:
%t292 = load %S.gen.Abi, ptr %a4
store %S.gen.Abi %t292, ptr %a293
call void @finch.copy.S_gen_Abi(ptr %a294, ptr %a293)
%t295 = load %S.gen.Abi, ptr %a294
ret %S.gen.Abi %t295
}
define internal void @finch.copy.arr_S_gen_Abi(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.Abi, 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.cond6885
n.cond6885:
%t6 = load i64, ptr %a5
%t7 = icmp slt i64 %t6, %t4
br i1 %t7, label %n.body6886, label %n.end6887
n.body6886:
%t8 = getelementptr inbounds %S.gen.Abi, ptr %t1, i64 %t6
%t9 = getelementptr inbounds %S.gen.Abi, ptr %t2, i64 %t6
call void @finch.copy.S_gen_Abi(ptr %t8, ptr %t9)
%t10 = load i64, ptr %a5
%t11 = add i64 %t10, 1
store i64 %t11, ptr %a5
br label %n.cond6885
n.end6887:
ret void
}
define internal void @finch.copy.S_gen_Plan(ptr %dst, ptr %src) {
entry:
%t1 = load %S.gen.Plan, ptr %src
store %S.gen.Plan %t1, ptr %dst
%t2 = getelementptr inbounds %S.gen.Plan, ptr %dst, i32 0, i32 0
%t3 = getelementptr inbounds %S.gen.Plan, ptr %src, i32 0, i32 0
call void @finch.copy.S_gen_Abi(ptr %t2, ptr %t3)
%t4 = getelementptr inbounds %S.gen.Plan, ptr %dst, i32 0, i32 1
%t5 = getelementptr inbounds %S.gen.Plan, ptr %src, i32 0, i32 1
call void @finch.copy.arr_S_gen_Abi(ptr %t4, ptr %t5)
%t6 = getelementptr inbounds %S.gen.Plan, ptr %dst, i32 0, i32 2
%t7 = getelementptr inbounds %S.gen.Plan, ptr %src, i32 0, i32 2
call void @finch_str_copy(ptr %t6, ptr %t7)
ret void
}
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
%a14 = alloca { ptr, i64, i64 }, align 16
%a15 = alloca { ptr, i64, i64 }, align 16
%a25 = alloca { ptr, i64, i64 }, align 16
%a26 = 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
%a53 = alloca { ptr, i64, i64 }, align 16
%a54 = alloca { ptr, i64, i64 }, align 16
%a56 = alloca i64, align 16
%a64 = alloca %S.ast.Type, align 16
%a68 = alloca %S.gen.Abi, align 16
%a71 = alloca { ptr, i64, i64 }, align 16
%a72 = alloca { ptr, i64, i64 }, align 16
%a75 = alloca i64, align 16
%a76 = alloca i64, align 16
%a78 = alloca 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
%a127 = alloca { ptr, i64, i64 }, align 16
%a128 = alloca { ptr, i64, i64 }, align 16
%a140 = alloca %S.gen.Abi, align 16
%a141 = alloca %S.gen.Abi, align 16
%a150 = alloca %S.gen.Plan, align 16
%a151 = alloca %S.gen.Plan, 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
store %S.gen.Abi %t9, ptr %t10
%t11 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2
store { ptr, i64, i64 } { ptr @.str.4451, i64 4, i64 0 }, ptr %t11
%t12 = getelementptr inbounds %S.ast.Type, 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.4452, 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 %then6834, label %endif6836
then6834:
%t18 = load ptr, ptr %a1
%t19 = load %S.ast.Type, ptr %a2
%t20 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t18, %S.ast.Type %t19)
%t21 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2
store { ptr, i64, i64 } %t20, ptr %t21
br label %endif6836
endif6836:
%t22 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0
%t23 = getelementptr inbounds %S.gen.Abi, ptr %t22, i32 0, i32 0
%t24 = load { ptr, i64, i64 }, ptr %t23
store { ptr, i64, i64 } %t24, ptr %a25
store { ptr, i64, i64 } { ptr @.str.4453, i64 8, i64 0 }, ptr %a26
%t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26)
%t28 = icmp ne i32 %t27, 0
br i1 %t28, label %then6837, label %endif6839
then6837:
%t29 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0
%t30 = getelementptr inbounds %S.gen.Abi, ptr %t29, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.4454, i64 6, i64 0 }, ptr %t30
br label %endif6839
endif6839:
%t31 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0
%t32 = getelementptr inbounds %S.gen.Abi, 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.4455, 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 %then6840, label %else6841
then6840:
%t38 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 3
store i1 true, ptr %t38
%t39 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2
store { ptr, i64, i64 } { ptr @.str.4456, i64 4, i64 0 }, ptr %t39
%t40 = load i64, ptr %a5
%t41 = sub i64 %t40, 1
store i64 %t41, ptr %a5
br label %endif6842
else6841:
%t42 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0
%t43 = getelementptr inbounds %S.gen.Abi, ptr %t42, i32 0, i32 0
%t44 = load { ptr, i64, i64 }, ptr %t43
store { ptr, i64, i64 } %t44, ptr %a45
store { ptr, i64, i64 } { ptr @.str.4457, i64 6, i64 0 }, ptr %a46
%t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46)
%t48 = icmp ne i32 %t47, 0
br i1 %t48, label %then6843, label %endif6845
then6843:
%t49 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0
%t50 = getelementptr inbounds %S.gen.Abi, ptr %t49, i32 0, i32 2
%t51 = load { ptr, i64, i64 }, ptr %t50
%t52 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2
store { ptr, i64, i64 } %t51, ptr %a53
call void @finch_str_copy(ptr %a54, ptr %a53)
%t55 = load { ptr, i64, i64 }, ptr %a54
store { ptr, i64, i64 } %t55, ptr %t52
br label %endif6845
endif6845:
br label %endif6842
endif6842:
store i64 0, ptr %a56
br label %each.cond6846
each.cond6846:
%t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1
%t58 = load i64, ptr %t57
%t59 = load i64, ptr %a56
%t60 = icmp slt i64 %t59, %t58
br i1 %t60, label %each.body6847, label %each.end6849
each.body6847:
%t61 = load ptr, ptr %a3
%t62 = getelementptr inbounds %S.ast.Type, ptr %t61, i64 %t59
%t63 = load %S.ast.Type, ptr %t62
store %S.ast.Type %t63, ptr %a64
%t65 = load ptr, ptr %a1
%t66 = load %S.ast.Type, ptr %a64
%t67 = call %S.gen.Abi @finch.gen.classify(ptr %t65, %S.ast.Type %t66)
store %S.gen.Abi %t67, ptr %a68
%t69 = getelementptr inbounds %S.gen.Abi, ptr %a68, i32 0, i32 0
%t70 = load { ptr, i64, i64 }, ptr %t69
store { ptr, i64, i64 } %t70, ptr %a71
store { ptr, i64, i64 } { ptr @.str.4458, i64 6, i64 0 }, ptr %a72
%t73 = call i32 @finch_str_eq(ptr %a71, ptr %a72)
%t74 = icmp ne i32 %t73, 0
br i1 %t74, label %then6850, label %else6851
then6850:
store i64 0, ptr %a75
store i64 0, ptr %a76
%t77 = getelementptr inbounds %S.gen.Abi, ptr %a68, i32 0, i32 1
store i64 0, ptr %a78
br label %each.cond6853
each.cond6853:
%t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1
%t80 = load i64, ptr %t79
%t81 = load i64, ptr %a78
%t82 = icmp slt i64 %t81, %t80
br i1 %t82, label %each.body6854, label %each.end6856
each.body6854:
%t83 = load ptr, ptr %t77
%t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i64 %t81
%t85 = load { ptr, i64, i64 }, ptr %t84
store { ptr, i64, i64 } %t85, ptr %a86
%t87 = load { ptr, i64, i64 }, ptr %a86
store { ptr, i64, i64 } %t87, ptr %a88
store { ptr, i64, i64 } { ptr @.str.4460, i64 1, i64 0 }, ptr %a90
%t91 = call i32 @finch_str_starts(ptr %a88, ptr %a90)
%t92 = icmp ne i32 %t91, 0
br i1 %t92, label %then6857, label %else6858
then6857:
%t93 = load i64, ptr %a75
%t94 = add i64 %t93, 1
store i64 %t94, ptr %a75
br label %endif6859
else6858:
%t95 = load i64, ptr %a76
%t96 = add i64 %t95, 1
store i64 %t96, ptr %a76
br label %endif6859
endif6859:
br label %each.step6855
each.step6855:
%t97 = load i64, ptr %a78
%t98 = add i64 %t97, 1
store i64 %t98, ptr %a78
br label %each.cond6853
each.end6856:
%t99 = load ptr, ptr %a1
%t100 = icmp eq ptr %t99, null
br i1 %t100, label %panic6860, label %ok6861
panic6860:
call void @finch_panic(ptr @.str.4461, i64 3911, ptr @.str.4462)
unreachable
ok6861:
%t101 = getelementptr inbounds %S.gen.Gen, ptr %t99, i32 0, i32 29
%t102 = getelementptr inbounds %S.platform.Target, ptr %t101, i32 0, i32 1
%t103 = load i1, ptr %t102
br label %logic.from6862
logic.from6862:
br i1 %t103, label %logic.end6864, label %logic.rhs6863
logic.rhs6863:
%t104 = load ptr, ptr %a1
%t105 = icmp eq ptr %t104, null
br i1 %t105, label %panic6865, label %ok6866
panic6865:
call void @finch_panic(ptr @.str.4463, i64 3911, ptr @.str.4464)
unreachable
ok6866:
%t106 = getelementptr inbounds %S.gen.Gen, ptr %t104, i32 0, i32 29
%t107 = getelementptr inbounds %S.platform.Target, ptr %t106, i32 0, i32 4
%t108 = load i1, ptr %t107
br label %logic.rend6867
logic.rend6867:
br label %logic.end6864
logic.end6864:
%t109 = phi i1 [ true, %logic.from6862 ], [ %t108, %logic.rend6867 ]
br label %logic.from6868
logic.from6868:
br i1 %t109, label %logic.end6870, label %logic.rhs6869
logic.rhs6869:
%t110 = load i64, ptr %a75
%t111 = load i64, ptr %a5
%t112 = icmp sle i64 %t110, %t111
br label %logic.from6871
logic.from6871:
br i1 %t112, label %logic.rhs6872, label %logic.end6873
logic.rhs6872:
%t113 = load i64, ptr %a76
%t114 = load i64, ptr %a6
%t115 = icmp sle i64 %t113, %t114
br label %logic.rend6874
logic.rend6874:
br label %logic.end6873
logic.end6873:
%t116 = phi i1 [ false, %logic.from6871 ], [ %t115, %logic.rend6874 ]
br label %logic.rend6875
logic.rend6875:
br label %logic.end6870
logic.end6870:
%t117 = phi i1 [ true, %logic.from6868 ], [ %t116, %logic.rend6875 ]
br i1 %t117, label %then6876, label %else6877
then6876:
%t118 = load i64, ptr %a75
%t119 = load i64, ptr %a5
%t120 = sub i64 %t119, %t118
store i64 %t120, ptr %a5
%t121 = load i64, ptr %a76
%t122 = load i64, ptr %a6
%t123 = sub i64 %t122, %t121
store i64 %t123, ptr %a6
br label %endif6878
else6877:
%t124 = getelementptr inbounds %S.gen.Abi, ptr %a68, i32 0, i32 0
store { ptr, i64, i64 } { ptr @.str.4465, i64 6, i64 0 }, ptr %t124
br label %endif6878
endif6878:
br label %endif6852
else6851:
%t125 = getelementptr inbounds %S.gen.Abi, ptr %a68, i32 0, i32 0
%t126 = load { ptr, i64, i64 }, ptr %t125
store { ptr, i64, i64 } %t126, ptr %a127
store { ptr, i64, i64 } { ptr @.str.4466, i64 6, i64 0 }, ptr %a128
%t129 = call i32 @finch_str_eq(ptr %a127, ptr %a128)
%t130 = icmp ne i32 %t129, 0
br i1 %t130, label %then6879, label %endif6881
then6879:
%t131 = load %S.ast.Type, ptr %a64
%t132 = call i1 @finch.gen.isFloat(%S.ast.Type %t131)
br i1 %t132, label %then6882, label %else6883
then6882:
%t133 = load i64, ptr %a6
%t134 = sub i64 %t133, 1
store i64 %t134, ptr %a6
br label %endif6884
else6883:
%t135 = load i64, ptr %a5
%t136 = sub i64 %t135, 1
store i64 %t136, ptr %a5
br label %endif6884
endif6884:
br label %endif6881
endif6881:
br label %endif6852
endif6852:
%t137 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 1
%t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1
%t139 = load %S.gen.Abi, ptr %a68
store %S.gen.Abi %t139, ptr %a140
call void @finch.copy.S_gen_Abi(ptr %a141, ptr %a140)
%t142 = load %S.gen.Abi, ptr %a141
%t143 = load i64, ptr %t138
%t144 = add i64 %t143, 1
call void @finch_arr_reserve(ptr %t137, i64 %t144, i64 ptrtoint (ptr getelementptr (%S.gen.Abi, ptr null, i32 1) to i64))
%t145 = load ptr, ptr %t137
%t146 = getelementptr inbounds %S.gen.Abi, ptr %t145, i64 %t143
store %S.gen.Abi %t142, ptr %t146
store i64 %t144, ptr %t138
br label %each.step6848
each.step6848:
%t147 = load i64, ptr %a56
%t148 = add i64 %t147, 1
store i64 %t148, ptr %a56
br label %each.cond6846
each.end6849:
%t149 = load %S.gen.Plan, ptr %a4
store %S.gen.Plan %t149, ptr %a150
call void @finch.copy.S_gen_Plan(ptr %a151, ptr %a150)
%t152 = load %S.gen.Plan, ptr %a151
ret %S.gen.Plan %t152
}
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
%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
%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
%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
%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
%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
%a100 = alloca { ptr, i64, i64 }, align 16
%a101 = alloca { ptr, i64, i64 }, align 16
%a102 = 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.4467, 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 %then6888, label %endif6890
then6888:
ret void
endif6890:
%t12 = load ptr, ptr %a1
%t13 = icmp eq ptr %t12, null
br i1 %t13, label %panic6891, label %ok6892
panic6891:
call void @finch_panic(ptr @.str.4468, i64 3933, ptr @.str.4469)
unreachable
ok6892:
%t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 15
%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 %range6893, label %inrange6894
range6893:
call void @finch_panic_index(ptr @.str.4470, i64 3933, i64 %t20, i64 %t22)
unreachable
inrange6894:
%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 %then6895, label %endif6897
then6895:
%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.4471, 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.4472, i64 2, i64 0 }, ptr %a43
call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43)
%t44 = load { ptr, i64, i64 }, ptr %a41
%t45 = load { ptr, i64, i64 }, ptr %a5
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)
%t49 = load { ptr, i64, i64 }, ptr %a46
store { ptr, i64, i64 } %t49, ptr %a51
store { ptr, i64, i64 } { ptr @.str.4473, i64 18, i64 0 }, ptr %a52
call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52)
%t53 = load { ptr, i64, i64 }, ptr %a50
%t54 = load %S.ast.Type, ptr %a4
%t55 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t54)
store { ptr, i64, i64 } %t53, 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
store { ptr, i64, i64 } %t59, ptr %a61
store { ptr, i64, i64 } { ptr @.str.4474, i64 20, i64 0 }, ptr %a62
call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62)
%t63 = load { ptr, i64, i64 }, ptr %a60
call void @finch.gen.fail(ptr %t34, %S.ast.Node %t35, { ptr, i64, i64 } %t63)
br label %endif6897
endif6897:
%t64 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 8
%t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i32 0, i32 1
%t66 = load i64, ptr %t65
%t67 = icmp sgt i64 %t66, 0
br i1 %t67, label %then6898, label %endif6900
then6898:
%t68 = load ptr, ptr %a1
%t69 = load %S.ast.Node, ptr %a2
%t70 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } { ptr @.str.4475, i64 16, i64 0 }, ptr %a72
store { ptr, i64, i64 } %t70, ptr %a73
call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73)
%t74 = load { ptr, i64, i64 }, ptr %a71
store { ptr, i64, i64 } %t74, ptr %a76
store { ptr, i64, i64 } { ptr @.str.4476, i64 2, i64 0 }, ptr %a77
call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77)
%t78 = load { ptr, i64, i64 }, ptr %a75
%t79 = load { ptr, i64, i64 }, ptr %a5
store { ptr, i64, i64 } %t78, ptr %a81
store { ptr, i64, i64 } %t79, 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 %a85
store { ptr, i64, i64 } { ptr @.str.4477, i64 12, i64 0 }, ptr %a86
call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86)
%t87 = load { ptr, i64, i64 }, ptr %a84
%t88 = load %S.ast.Type, ptr %a4
%t89 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t88)
store { ptr, i64, i64 } %t87, 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.4478, i64 40, i64 0 }, ptr %a96
call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96)
%t97 = load { ptr, i64, i64 }, ptr %a94
%t98 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 8
%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)
%t103 = load { ptr, i64, i64 }, ptr %a100
call void @finch.gen.fail(ptr %t68, %S.ast.Node %t69, { ptr, i64, i64 } %t103)
br label %endif6900
endif6900:
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.from6901
logic.from6901:
br i1 %t3, label %logic.end6903, label %logic.rhs6902
logic.rhs6902:
%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.4479, 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.rend6904
logic.rend6904:
br label %logic.end6903
logic.end6903:
%t10 = phi i1 [ true, %logic.from6901 ], [ %t9, %logic.rend6904 ]
br label %logic.from6905
logic.from6905:
br i1 %t10, label %logic.end6907, label %logic.rhs6906
logic.rhs6906:
%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.4480, 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.rend6908
logic.rend6908:
br label %logic.end6907
logic.end6907:
%t17 = phi i1 [ true, %logic.from6905 ], [ %t16, %logic.rend6908 ]
br label %logic.from6909
logic.from6909:
br i1 %t17, label %logic.end6911, label %logic.rhs6910
logic.rhs6910:
%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.4481, 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.rend6912
logic.rend6912:
br label %logic.end6911
logic.end6911:
%t24 = phi i1 [ true, %logic.from6909 ], [ %t23, %logic.rend6912 ]
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
%a58 = alloca { ptr, i64, i64 }, align 16
%a59 = alloca { ptr, i64, i64 }, align 16
%a60 = 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
%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
%a92 = alloca i64, align 16
%a100 = alloca %S.gen.FnSig, align 16
%a107 = alloca { ptr, i64, i64 }, align 16
%a108 = 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
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 %then6913, label %endif6915
then6913:
%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.4482, i64 59, i64 0 })
br label %endif6915
endif6915:
%t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 7
%t11 = load i1, ptr %t10
br i1 %t11, label %then6916, label %endif6918
then6916:
%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.4483, i64 74, i64 0 })
br label %endif6918
endif6918:
%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 %then6919, label %endif6921
then6919:
%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.4484, i64 29, i64 0 })
br label %endif6921
endif6921:
%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.cond6922
for.cond6922:
%t24 = load i64, ptr %a23
%t25 = icmp slt i64 %t24, %t22
br i1 %t25, label %for.body6923, label %for.end6925
for.body6923:
%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 %range6926, label %inrange6927
range6926:
call void @finch_panic_index(ptr @.str.4485, i64 3958, i64 %t27, i64 %t29)
unreachable
inrange6927:
%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 %then6928, label %endif6930
then6928:
%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 %range6931, label %inrange6932
range6931:
call void @finch_panic_index(ptr @.str.4486, i64 3959, i64 %t38, i64 %t40)
unreachable
inrange6932:
%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 %range6933, label %inrange6934
range6933:
call void @finch_panic_index(ptr @.str.4488, i64 3959, i64 %t46, i64 %t48)
unreachable
inrange6934:
%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.4487, i64 66, i64 0 }, ptr %a55
store { ptr, i64, i64 } %t53, ptr %a56
call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56)
%t57 = load { ptr, i64, i64 }, ptr %a54
store { ptr, i64, i64 } %t57, ptr %a59
store { ptr, i64, i64 } { ptr @.str.4489, i64 50, i64 0 }, ptr %a60
call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60)
%t61 = load { ptr, i64, i64 }, ptr %a58
call void @finch.gen.fail(ptr %t36, %S.ast.Node %t44, { ptr, i64, i64 } %t61)
br label %endif6930
endif6930:
br label %for.step6924
for.step6924:
%t62 = load i64, ptr %a23
%t63 = add i64 %t62, 1
store i64 %t63, ptr %a23
br label %for.cond6922
for.end6925:
%t64 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12
%t65 = getelementptr inbounds %S.ast.Type, ptr %t64, i32 0, i32 0
%t66 = load { ptr, i64, i64 }, ptr %t65
store { ptr, i64, i64 } %t66, ptr %a67
store { ptr, i64, i64 } { ptr @.str.4490, i64 4, i64 0 }, ptr %a68
%t69 = call i32 @finch_str_eq(ptr %a67, ptr %a68)
%t70 = icmp eq i32 %t69, 0
br label %logic.from6935
logic.from6935:
br i1 %t70, label %logic.rhs6936, label %logic.end6937
logic.rhs6936:
%t71 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12
%t72 = load %S.ast.Type, ptr %t71
%t73 = call i1 @finch.gen.cPlain(%S.ast.Type %t72)
%t74 = xor i1 %t73, true
br label %logic.rend6938
logic.rend6938:
br label %logic.end6937
logic.end6937:
%t75 = phi i1 [ false, %logic.from6935 ], [ %t74, %logic.rend6938 ]
br i1 %t75, label %then6939, label %endif6941
then6939:
%t76 = load ptr, ptr %a1
%t77 = load %S.ast.Node, ptr %a2
%t78 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12
%t79 = load %S.ast.Type, ptr %t78
%t80 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t79)
store { ptr, i64, i64 } { ptr @.str.4491, i64 69, 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.4492, i64 1, i64 0 }, ptr %a87
call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87)
%t88 = load { ptr, i64, i64 }, ptr %a85
call void @finch.gen.fail(ptr %t76, %S.ast.Node %t77, { ptr, i64, i64 } %t88)
br label %endif6941
endif6941:
%t89 = load ptr, ptr %a1
%t90 = icmp eq ptr %t89, null
br i1 %t90, label %panic6942, label %ok6943
panic6942:
call void @finch_panic(ptr @.str.4493, i64 3965, ptr @.str.4494)
unreachable
ok6943:
%t91 = getelementptr inbounds %S.gen.Gen, ptr %t89, i32 0, i32 14
store i64 0, ptr %a92
br label %each.cond6944
each.cond6944:
%t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i32 0, i32 1
%t94 = load i64, ptr %t93
%t95 = load i64, ptr %a92
%t96 = icmp slt i64 %t95, %t94
br i1 %t96, label %each.body6945, label %each.end6947
each.body6945:
%t97 = load ptr, ptr %t91
%t98 = getelementptr inbounds %S.gen.FnSig, ptr %t97, i64 %t95
%t99 = load %S.gen.FnSig, ptr %t98
store %S.gen.FnSig %t99, ptr %a100
%t101 = getelementptr inbounds %S.gen.FnSig, ptr %a100, i32 0, i32 5
%t102 = load i1, ptr %t101
br label %logic.from6948
logic.from6948:
br i1 %t102, label %logic.rhs6949, label %logic.end6950
logic.rhs6949:
%t103 = getelementptr inbounds %S.gen.FnSig, ptr %a100, i32 0, i32 1
%t104 = load { ptr, i64, i64 }, ptr %t103
%t105 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1
%t106 = load { ptr, i64, i64 }, ptr %t105
store { ptr, i64, i64 } %t104, 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 label %logic.rend6951
logic.rend6951:
br label %logic.end6950
logic.end6950:
%t111 = phi i1 [ false, %logic.from6948 ], [ %t110, %logic.rend6951 ]
br i1 %t111, label %then6952, label %endif6954
then6952:
%t112 = load ptr, ptr %a1
%t113 = load %S.ast.Node, ptr %a2
%t114 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1
%t115 = load { ptr, i64, i64 }, ptr %t114
store { ptr, i64, i64 } { ptr @.str.4495, i64 1, 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.4496, i64 38, i64 0 }, ptr %a122
call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122)
%t123 = load { ptr, i64, i64 }, ptr %a120
call void @finch.gen.fail(ptr %t112, %S.ast.Node %t113, { ptr, i64, i64 } %t123)
br label %endif6954
endif6954:
br label %each.step6946
each.step6946:
%t124 = load i64, ptr %a92
%t125 = add i64 %t124, 1
store i64 %t125, ptr %a92
br label %each.cond6944
each.end6947:
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
%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
%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
%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
%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
%a96 = alloca { ptr, i64, i64 }, align 16
%a97 = alloca { ptr, i64, i64 }, align 16
%a98 = 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
%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
%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
%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
%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
%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
%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
%a181 = alloca { ptr, i64, i64 }, align 16
%a182 = alloca { ptr, i64, i64 }, align 16
%a183 = 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
%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
%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
%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
%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
%a243 = alloca { ptr, i64, i64 }, align 16
%a244 = alloca { ptr, i64, i64 }, align 16
%a245 = 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
%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
%a265 = alloca { ptr, i64, i64 }, align 16
%a266 = 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.cond6955
for.cond6955:
%t12 = load i64, ptr %a11
%t13 = icmp slt i64 %t12, %t10
br i1 %t13, label %for.body6956, label %for.end6958
for.body6956:
%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 %range6959, label %inrange6960
range6959:
call void @finch_panic_index(ptr @.str.4497, i64 3978, i64 %t15, i64 %t17)
unreachable
inrange6960:
%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.4498, 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 %then6961, label %else6962
then6961:
%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.4499, i64 13, 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
%t40 = load i64, ptr %t32
%t41 = add i64 %t40, 1
call void @finch_arr_reserve(ptr %a3, i64 %t41, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t42 = load ptr, ptr %a3
%t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i64 %t40
store { ptr, i64, i64 } %t39, ptr %t43
store i64 %t41, ptr %t32
%t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1
%t45 = load ptr, ptr %a1
%t46 = load i64, ptr %a11
call void @finch_str_from_int(ptr %a47, i64 %t46)
%t48 = load { ptr, i64, i64 }, ptr %a47
store { ptr, i64, i64 } { ptr @.str.4501, i64 13, i64 0 }, ptr %a50
store { ptr, i64, i64 } %t48, ptr %a51
call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51)
%t52 = load { ptr, i64, i64 }, ptr %a49
store { ptr, i64, i64 } %t52, ptr %a54
store { ptr, i64, i64 } { ptr @.str.4502, i64 3, i64 0 }, ptr %a55
call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55)
%t56 = load { ptr, i64, i64 }, ptr %a53
%t57 = call { ptr, i64, i64 } @finch.gen.op(ptr %t45, { ptr, i64, i64 } %t56)
store { ptr, i64, i64 } { ptr @.str.4500, i64 3, i64 0 }, ptr %a59
store { ptr, i64, i64 } %t57, ptr %a60
call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60)
%t61 = load { ptr, i64, i64 }, ptr %a58
%t62 = load i64, ptr %t44
%t63 = add i64 %t62, 1
call void @finch_arr_reserve(ptr %a4, i64 %t63, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t64 = load ptr, ptr %a4
%t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i64 %t62
store { ptr, i64, i64 } %t61, ptr %t65
store i64 %t63, ptr %t44
br label %endif6963
else6962:
%t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1
%t67 = load ptr, ptr %a1
%t68 = load %S.ast.Type, ptr %a25
%t69 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t67, %S.ast.Type %t68)
%t70 = load ptr, ptr %a1
%t71 = load %S.ast.Type, ptr %a25
%t72 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t70, %S.ast.Type %t71)
store { ptr, i64, i64 } %t69, ptr %a74
store { ptr, i64, i64 } %t72, 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 %a78
store { ptr, i64, i64 } { ptr @.str.4503, i64 3, i64 0 }, ptr %a79
call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79)
%t80 = load { ptr, i64, i64 }, ptr %a77
%t81 = load i64, ptr %a11
call void @finch_str_from_int(ptr %a82, i64 %t81)
%t83 = load { ptr, i64, i64 }, ptr %a82
store { ptr, i64, i64 } %t80, ptr %a85
store { ptr, i64, i64 } %t83, ptr %a86
call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86)
%t87 = load { ptr, i64, i64 }, ptr %a84
%t88 = load i64, ptr %t66
%t89 = add i64 %t88, 1
call void @finch_arr_reserve(ptr %a3, i64 %t89, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t90 = load ptr, ptr %a3
%t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t90, i64 %t88
store { ptr, i64, i64 } %t87, ptr %t91
store i64 %t89, ptr %t66
%t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1
%t93 = load ptr, ptr %a1
%t94 = load %S.ast.Type, ptr %a25
%t95 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t93, %S.ast.Type %t94)
store { ptr, i64, i64 } %t95, ptr %a97
store { ptr, i64, i64 } { ptr @.str.4504, i64 3, i64 0 }, ptr %a98
call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98)
%t99 = load { ptr, i64, i64 }, ptr %a96
%t100 = load i64, ptr %a11
call void @finch_str_from_int(ptr %a101, i64 %t100)
%t102 = load { ptr, i64, i64 }, ptr %a101
store { ptr, i64, i64 } %t99, 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
%t107 = load i64, ptr %t92
%t108 = add i64 %t107, 1
call void @finch_arr_reserve(ptr %a4, i64 %t108, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t109 = load ptr, ptr %a4
%t110 = getelementptr inbounds { ptr, i64, i64 }, ptr %t109, i64 %t107
store { ptr, i64, i64 } %t106, ptr %t110
store i64 %t108, ptr %t92
br label %endif6963
endif6963:
br label %for.step6957
for.step6957:
%t111 = load i64, ptr %a11
%t112 = add i64 %t111, 1
store i64 %t112, ptr %a11
br label %for.cond6955
for.end6958:
%t113 = load ptr, ptr %a1
%t114 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12
%t115 = load %S.ast.Type, ptr %t114
%t116 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t113, %S.ast.Type %t115)
store { ptr, i64, i64 } { ptr @.str.4505, i64 5, i64 0 }, ptr %a118
store { ptr, i64, i64 } %t116, ptr %a119
call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119)
%t120 = load { ptr, i64, i64 }, ptr %a117
store { ptr, i64, i64 } %t120, ptr %a122
store { ptr, i64, i64 } { ptr @.str.4506, i64 1, i64 0 }, ptr %a123
call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123)
%t124 = load { ptr, i64, i64 }, ptr %a121
%t125 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 11
%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)
%t130 = load { ptr, i64, i64 }, ptr %a127
store { ptr, i64, i64 } %t130, ptr %a132
store { ptr, i64, i64 } { ptr @.str.4507, i64 1, i64 0 }, ptr %a133
call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133)
%t134 = load { ptr, i64, i64 }, ptr %a131
%t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.4508, i64 2, i64 0 }, ptr %a136
call void @finch_str_join(ptr %a137, ptr %a4, ptr %a136)
%t138 = load { ptr, i64, i64 }, ptr %a137
store { ptr, i64, i64 } %t134, ptr %a140
store { ptr, i64, i64 } %t138, ptr %a141
call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141)
%t142 = load { ptr, i64, i64 }, ptr %a139
store { ptr, i64, i64 } %t142, ptr %a144
store { ptr, i64, i64 } { ptr @.str.4509, i64 1, i64 0 }, 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 %a147
store { ptr, i64, i64 } { ptr @.str.4510, i64 4, i64 0 }, ptr %a148
store { ptr, i64, i64 } { ptr @.str.4511, i64 0, i64 0 }, ptr %a149
%t150 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12
%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.4512, 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 %then6964, label %else6965
then6964:
%t157 = load ptr, ptr %a1
%t158 = load { ptr, i64, i64 }, ptr %a147
call void @finch.gen.emit(ptr %t157, { ptr, i64, i64 } %t158)
%t159 = load ptr, ptr %a1
call void @finch.gen.emit(ptr %t159, { ptr, i64, i64 } { ptr @.str.4513, i64 8, i64 0 })
br label %endif6966
else6965:
%t160 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12
%t161 = getelementptr inbounds %S.ast.Type, ptr %t160, i32 0, i32 0
%t162 = load { ptr, i64, i64 }, ptr %t161
store { ptr, i64, i64 } %t162, ptr %a163
store { ptr, i64, i64 } { ptr @.str.4514, i64 4, i64 0 }, ptr %a164
%t165 = call i32 @finch_str_eq(ptr %a163, ptr %a164)
%t166 = icmp ne i32 %t165, 0
br i1 %t166, label %then6967, label %else6968
then6967:
store { ptr, i64, i64 } { ptr @.str.4515, i64 2, i64 0 }, ptr %a148
store { ptr, i64, i64 } { ptr @.str.4516, i64 8, i64 0 }, ptr %a149
%t167 = load ptr, ptr %a1
%t168 = load ptr, ptr %a1
%t169 = load ptr, ptr %a1
%t170 = load { ptr, i64, i64 }, ptr %a147
%t171 = call { ptr, i64, i64 } @finch.gen.op(ptr %t169, { ptr, i64, i64 } %t170)
store { ptr, i64, i64 } { ptr @.str.4518, i64 8, i64 0 }, ptr %a173
store { ptr, i64, i64 } %t171, ptr %a174
call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174)
%t175 = load { ptr, i64, i64 }, ptr %a172
store { ptr, i64, i64 } %t175, ptr %a177
store { ptr, i64, i64 } { ptr @.str.4519, i64 6, i64 0 }, ptr %a178
call void @finch_str_concat(ptr %a176, ptr %a177, ptr %a178)
%t179 = load { ptr, i64, i64 }, ptr %a176
%t180 = call { ptr, i64, i64 } @finch.gen.op(ptr %t168, { ptr, i64, i64 } %t179)
store { ptr, i64, i64 } { ptr @.str.4517, i64 7, i64 0 }, ptr %a182
store { ptr, i64, i64 } %t180, ptr %a183
call void @finch_str_concat(ptr %a181, ptr %a182, ptr %a183)
%t184 = load { ptr, i64, i64 }, ptr %a181
call void @finch.gen.emit(ptr %t167, { ptr, i64, i64 } %t184)
br label %endif6969
else6968:
%t185 = load ptr, ptr %a1
%t186 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12
%t187 = load %S.ast.Type, ptr %t186
%t188 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t185, %S.ast.Type %t187)
store { ptr, i64, i64 } %t188, ptr %a148
%t189 = load ptr, ptr %a1
%t190 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12
%t191 = load %S.ast.Type, ptr %t190
%t192 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t189, %S.ast.Type %t191)
store { ptr, i64, i64 } %t192, ptr %a149
%t193 = load ptr, ptr %a1
%t194 = load { ptr, i64, i64 }, ptr %a148
store { ptr, i64, i64 } { ptr @.str.4520, i64 4, i64 0 }, ptr %a196
store { ptr, i64, i64 } %t194, ptr %a197
call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197)
%t198 = load { ptr, i64, i64 }, ptr %a195
store { ptr, i64, i64 } %t198, ptr %a200
store { ptr, i64, i64 } { ptr @.str.4521, i64 1, i64 0 }, ptr %a201
call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201)
%t202 = load { ptr, i64, i64 }, ptr %a199
%t203 = load ptr, ptr %a1
%t204 = load { ptr, i64, i64 }, ptr %a147
%t205 = call { ptr, i64, i64 } @finch.gen.op(ptr %t203, { ptr, i64, i64 } %t204)
store { ptr, i64, i64 } %t202, 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
call void @finch.gen.emit(ptr %t193, { ptr, i64, i64 } %t209)
br label %endif6969
endif6969:
br label %endif6966
endif6966:
store { ptr, i64, i64 } { ptr @.str.4522, i64 0, i64 0 }, ptr %a210
%t211 = load ptr, ptr %a1
%t212 = icmp eq ptr %t211, null
br i1 %t212, label %panic6970, label %ok6971
panic6970:
call void @finch_panic(ptr @.str.4523, i64 4003, ptr @.str.4524)
unreachable
ok6971:
%t213 = getelementptr inbounds %S.gen.Gen, ptr %t211, i32 0, i32 29
%t214 = getelementptr inbounds %S.platform.Target, ptr %t213, i32 0, i32 1
%t215 = load i1, ptr %t214
br i1 %t215, label %then6972, label %endif6974
then6972:
store { ptr, i64, i64 } { ptr @.str.4525, i64 10, i64 0 }, ptr %a210
br label %endif6974
endif6974:
%t216 = load ptr, ptr %a1
%t217 = load %S.gen.Saved, ptr %a7
%t218 = load { ptr, i64, i64 }, ptr %a210
store { ptr, i64, i64 } { ptr @.str.4526, 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
%t223 = load { ptr, i64, i64 }, ptr %a149
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)
%t227 = load { ptr, i64, i64 }, ptr %a224
store { ptr, i64, i64 } %t227, ptr %a229
store { ptr, i64, i64 } { ptr @.str.4527, i64 1, i64 0 }, ptr %a230
call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230)
%t231 = load { ptr, i64, i64 }, ptr %a228
%t232 = load { ptr, i64, i64 }, ptr %a148
store { ptr, i64, i64 } %t231, 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.4528, i64 2, i64 0 }, ptr %a239
call void @finch_str_concat(ptr %a237, ptr %a238, ptr %a239)
%t240 = load { ptr, i64, i64 }, ptr %a237
%t241 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 1
%t242 = load { ptr, i64, i64 }, ptr %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)
%t246 = load { ptr, i64, i64 }, ptr %a243
store { ptr, i64, i64 } %t246, ptr %a248
store { ptr, i64, i64 } { ptr @.str.4529, i64 1, i64 0 }, ptr %a249
call void @finch_str_concat(ptr %a247, ptr %a248, ptr %a249)
%t250 = load { ptr, i64, i64 }, ptr %a247
%t251 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.4530, i64 2, i64 0 }, ptr %a252
call void @finch_str_join(ptr %a253, ptr %a3, ptr %a252)
%t254 = load { ptr, i64, i64 }, ptr %a253
store { ptr, i64, i64 } %t250, 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.4531, i64 1, i64 0 }, ptr %a261
call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261)
%t262 = load { ptr, i64, i64 }, ptr %a259
call void @finch.gen.endHelper(ptr %t216, %S.gen.Saved %t217, { ptr, i64, i64 } %t262)
%t263 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 1
%t264 = load { ptr, i64, i64 }, ptr %t263
store { ptr, i64, i64 } %t264, ptr %a265
call void @finch_str_copy(ptr %a266, ptr %a265)
%t267 = load { ptr, i64, i64 }, ptr %a266
ret { ptr, i64, i64 } %t267
}
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
%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
%a32 = alloca { ptr, i64, i64 }, align 16
%a33 = 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
%a43 = alloca { ptr, i64, i64 }, align 16
%a45 = alloca i64, align 16
%a48 = alloca i64, align 16
%a53 = 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
%a69 = alloca { ptr, i64, i64 }, align 16
%a70 = alloca { ptr, i64, i64 }, align 16
%a71 = 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
%a97 = alloca i64, align 16
%a105 = alloca %S.ast.Type, 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
%a131 = alloca { ptr, i64, i64 }, align 16
%a132 = 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
%a168 = alloca { ptr, i64, i64 }, align 16
%a169 = alloca { ptr, i64, i64 }, align 16
%a170 = alloca { ptr, i64, i64 }, 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
%a196 = alloca { ptr, i64, i64 }, align 16
%a197 = alloca { ptr, i64, i64 }, align 16
%a204 = alloca { ptr, i64, i64 }, align 16
%a205 = alloca { ptr, i64, i64 }, align 16
%a212 = alloca { ptr, i64, i64 }, align 16
%a213 = 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
%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
%a262 = alloca %S.gen.Plan, align 16
%a265 = alloca %S.gen.Saved, align 16
%a266 = alloca { ptr, i64, i64 }, align 16
%a267 = alloca i64, align 16
%a268 = 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
%a288 = alloca { ptr, i64, i64 }, align 16
%a292 = alloca i64, align 16
%a303 = alloca %S.ast.Type, align 16
%a304 = alloca %S.ast.Type, align 16
%a306 = alloca %S.ast.Type, align 16
%a315 = alloca %S.gen.Abi, align 16
%a316 = alloca %S.gen.Abi, align 16
%a318 = alloca %S.gen.Abi, align 16
%a321 = alloca { ptr, i64, i64 }, align 16
%a322 = 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
%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
%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
%a352 = alloca { ptr, i64, i64 }, align 16
%a353 = alloca { ptr, i64, i64 }, align 16
%a354 = 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
%a373 = 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
%a380 = alloca { ptr, i64, i64 }, align 16
%a381 = alloca { ptr, i64, i64 }, align 16
%a382 = alloca { ptr, i64, i64 }, align 16
%a392 = alloca { ptr, i64, i64 }, align 16
%a393 = 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
%a412 = alloca { ptr, i64, i64 }, align 16
%a413 = alloca { ptr, i64, i64 }, align 16
%a414 = 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
%a428 = alloca { ptr, i64, i64 }, align 16
%a429 = alloca { ptr, i64, i64 }, align 16
%a430 = alloca { ptr, i64, i64 }, align 16
%a440 = alloca { ptr, i64, i64 }, align 16
%a441 = alloca { ptr, i64, i64 }, align 16
%a446 = alloca { ptr, i64, i64 }, align 16
%a450 = alloca i64, align 16
%a462 = alloca { ptr, i64, i64 }, align 16
%a463 = alloca { ptr, i64, i64 }, align 16
%a464 = alloca { ptr, i64, i64 }, align 16
%a467 = 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
%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
%a495 = alloca { ptr, i64, i64 }, align 16
%a496 = 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
%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
%a520 = alloca { ptr, i64, i64 }, align 16
%a521 = alloca { ptr, i64, i64 }, align 16
%a522 = 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
%a545 = alloca { ptr, i64, i64 }, align 16
%a546 = 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
%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
%a568 = alloca { ptr, i64, i64 }, align 16
%a569 = alloca { ptr, i64, i64 }, align 16
%a570 = 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
%a591 = alloca { ptr, i64, i64 }, align 16
%a592 = alloca { ptr, i64, i64 }, align 16
%a593 = 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
%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
%a610 = alloca { ptr, i64, i64 }, align 16
%a611 = alloca { ptr, i64, i64 }, align 16
%a613 = alloca { ptr, i64, i64 }, align 16
%a614 = alloca { ptr, i64, i64 }, align 16
%a615 = 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
%a621 = alloca { ptr, i64, i64 }, align 16
%a622 = alloca { ptr, i64, i64 }, align 16
%a626 = alloca { ptr, i64, i64 }, align 16
%a627 = alloca { ptr, i64, i64 }, align 16
%a648 = alloca { ptr, i64, i64 }, align 16
%a649 = alloca { ptr, i64, i64 }, align 16
%a654 = 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
%a682 = alloca { ptr, i64, i64 }, align 16
%a683 = alloca { ptr, i64, i64 }, align 16
%a684 = 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
%a699 = alloca { ptr, i64, i64 }, align 16
%a700 = alloca { ptr, i64, i64 }, align 16
%a701 = alloca { ptr, i64, i64 }, align 16
%a706 = 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
%a715 = alloca { ptr, i64, i64 }, align 16
%a717 = alloca { ptr, i64, i64 }, align 16
%a718 = alloca { ptr, i64, i64 }, align 16
%a719 = 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
%a727 = alloca { ptr, i64, i64 }, align 16
%a728 = alloca { ptr, i64, i64 }, align 16
%a729 = 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
%a736 = alloca { ptr, i64, i64 }, align 16
%a737 = alloca { ptr, i64, i64 }, align 16
%a738 = alloca { ptr, i64, i64 }, align 16
%a741 = alloca { ptr, i64, i64 }, align 16
%a742 = 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
%a748 = alloca { ptr, i64, i64 }, align 16
%a749 = 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
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 %panic6975, label %ok6976
panic6975:
call void @finch_panic(ptr @.str.4532, i64 4012, ptr @.str.4533)
unreachable
ok6976:
%t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 14
%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 %range6977, label %inrange6978
range6977:
call void @finch_panic_index(ptr @.str.4534, i64 4012, i64 %t7, i64 %t9)
unreachable
inrange6978:
%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.4535, i64 9, 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.4536, i64 1, i64 0 }, ptr %a27
call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27)
%t28 = load { ptr, i64, i64 }, ptr %a25
%t29 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1
%t30 = load { ptr, i64, i64 }, ptr %t29
store { ptr, i64, i64 } %t28, 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
store { ptr, i64, i64 } %t34, ptr %a35
%t36 = load ptr, ptr %a1
%t37 = icmp eq ptr %t36, null
br i1 %t37, label %panic6979, label %ok6980
panic6979:
call void @finch_panic(ptr @.str.4537, i64 4014, ptr @.str.4538)
unreachable
ok6980:
%t38 = getelementptr inbounds %S.gen.Gen, ptr %t36, i32 0, i32 38
%t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i32 0, i32 1
%t40 = load { ptr, i64, i64 }, ptr %a35
store { ptr, i64, i64 } { ptr @.str.4539, i64 2, i64 0 }, ptr %a42
store { ptr, i64, i64 } %t40, ptr %a43
call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43)
%t44 = load { ptr, i64, i64 }, ptr %a41
store i64 -1, ptr %a45
%t46 = load i64, ptr %t39
%t47 = load ptr, ptr %t38
store i64 0, ptr %a48
br label %find.cond6981
find.cond6981:
%t49 = load i64, ptr %a48
%t50 = icmp slt i64 %t49, %t46
br i1 %t50, label %find.body6982, label %find.end6985
find.body6982:
%t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i64 %t49
%t52 = load { ptr, i64, i64 }, ptr %t51
store { ptr, i64, i64 } %t52, ptr %a53
store { ptr, i64, i64 } %t44, ptr %a54
%t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54)
%t56 = icmp ne i32 %t55, 0
br i1 %t56, label %find.hit6983, label %find.next6984
find.hit6983:
store i64 %t49, ptr %a45
br label %find.end6985
find.next6984:
%t57 = add i64 %t49, 1
store i64 %t57, ptr %a48
br label %find.cond6981
find.end6985:
%t58 = load i64, ptr %a45
%t59 = icmp sge i64 %t58, 0
br i1 %t59, label %then6986, label %endif6988
then6986:
%t60 = load { ptr, i64, i64 }, ptr %a35
store { ptr, i64, i64 } %t60, ptr %a61
call void @finch_str_copy(ptr %a62, ptr %a61)
%t63 = load { ptr, i64, i64 }, ptr %a62
ret { ptr, i64, i64 } %t63
endif6988:
%t64 = load ptr, ptr %a1
%t65 = icmp eq ptr %t64, null
br i1 %t65, label %panic6989, label %ok6990
panic6989:
call void @finch_panic(ptr @.str.4540, i64 4017, ptr @.str.4541)
unreachable
ok6990:
%t66 = getelementptr inbounds %S.gen.Gen, ptr %t64, i32 0, i32 38
%t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t66, i32 0, i32 1
%t68 = load { ptr, i64, i64 }, ptr %a35
store { ptr, i64, i64 } { ptr @.str.4542, i64 2, 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
%t73 = load i64, ptr %t67
%t74 = add i64 %t73, 1
call void @finch_arr_reserve(ptr %t66, i64 %t74, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t75 = load ptr, ptr %t66
%t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %t75, i64 %t73
store { ptr, i64, i64 } %t72, ptr %t76
store i64 %t74, ptr %t67
%t77 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 2
%t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1
%t79 = load i64, ptr %t78
%t80 = icmp sgt i64 %t79, 0
br label %logic.from6991
logic.from6991:
br i1 %t80, label %logic.end6993, label %logic.rhs6992
logic.rhs6992:
%t81 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 9
%t82 = load i1, ptr %t81
br label %logic.rend6994
logic.rend6994:
br label %logic.end6993
logic.end6993:
%t83 = phi i1 [ true, %logic.from6991 ], [ %t82, %logic.rend6994 ]
br i1 %t83, label %then6995, label %endif6997
then6995:
%t84 = load ptr, ptr %a1
%t85 = load %S.ast.Node, ptr %a3
%t86 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1
%t87 = load { ptr, i64, i64 }, ptr %t86
store { ptr, i64, i64 } { ptr @.str.4543, i64 5, 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.4544, i64 81, i64 0 }, ptr %a94
call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94)
%t95 = load { ptr, i64, i64 }, ptr %a92
call void @finch.gen.fail(ptr %t84, %S.ast.Node %t85, { ptr, i64, i64 } %t95)
br label %endif6997
endif6997:
%t96 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13
store i64 0, ptr %a97
br label %each.cond6998
each.cond6998:
%t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %t96, i32 0, i32 1
%t99 = load i64, ptr %t98
%t100 = load i64, ptr %a97
%t101 = icmp slt i64 %t100, %t99
br i1 %t101, label %each.body6999, label %each.end7001
each.body6999:
%t102 = load ptr, ptr %t96
%t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i64 %t100
%t104 = load %S.ast.Type, ptr %t103
store %S.ast.Type %t104, ptr %a105
%t106 = load %S.ast.Type, ptr %a105
%t107 = call i1 @finch.gen.isNumber(%S.ast.Type %t106)
br label %logic.from7002
logic.from7002:
br i1 %t107, label %logic.end7004, label %logic.rhs7003
logic.rhs7003:
%t108 = getelementptr inbounds %S.ast.Type, ptr %a105, i32 0, i32 0
%t109 = load { ptr, i64, i64 }, ptr %t108
store { ptr, i64, i64 } %t109, ptr %a110
store { ptr, i64, i64 } { ptr @.str.4545, i64 4, i64 0 }, ptr %a111
%t112 = call i32 @finch_str_eq(ptr %a110, ptr %a111)
%t113 = icmp ne i32 %t112, 0
br label %logic.rend7005
logic.rend7005:
br label %logic.end7004
logic.end7004:
%t114 = phi i1 [ true, %logic.from7002 ], [ %t113, %logic.rend7005 ]
br label %logic.from7006
logic.from7006:
br i1 %t114, label %logic.end7008, label %logic.rhs7007
logic.rhs7007:
%t115 = getelementptr inbounds %S.ast.Type, ptr %a105, i32 0, i32 0
%t116 = load { ptr, i64, i64 }, ptr %t115
store { ptr, i64, i64 } %t116, ptr %a117
store { ptr, i64, i64 } { ptr @.str.4546, i64 4, i64 0 }, ptr %a118
%t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118)
%t120 = icmp ne i32 %t119, 0
br label %logic.rend7009
logic.rend7009:
br label %logic.end7008
logic.end7008:
%t121 = phi i1 [ true, %logic.from7006 ], [ %t120, %logic.rend7009 ]
br label %logic.from7010
logic.from7010:
br i1 %t121, label %logic.end7012, label %logic.rhs7011
logic.rhs7011:
%t122 = getelementptr inbounds %S.ast.Type, ptr %a105, i32 0, i32 0
%t123 = load { ptr, i64, i64 }, ptr %t122
store { ptr, i64, i64 } %t123, ptr %a124
store { ptr, i64, i64 } { ptr @.str.4547, i64 3, i64 0 }, ptr %a125
%t126 = call i32 @finch_str_eq(ptr %a124, ptr %a125)
%t127 = icmp ne i32 %t126, 0
br label %logic.rend7013
logic.rend7013:
br label %logic.end7012
logic.end7012:
%t128 = phi i1 [ true, %logic.from7010 ], [ %t127, %logic.rend7013 ]
br label %logic.from7014
logic.from7014:
br i1 %t128, label %logic.end7016, label %logic.rhs7015
logic.rhs7015:
%t129 = getelementptr inbounds %S.ast.Type, ptr %a105, i32 0, i32 0
%t130 = load { ptr, i64, i64 }, ptr %t129
store { ptr, i64, i64 } %t130, ptr %a131
store { ptr, i64, i64 } { ptr @.str.4548, i64 6, i64 0 }, ptr %a132
%t133 = call i32 @finch_str_eq(ptr %a131, ptr %a132)
%t134 = icmp ne i32 %t133, 0
br label %logic.from7017
logic.from7017:
br i1 %t134, label %logic.rhs7018, label %logic.end7019
logic.rhs7018:
%t135 = load ptr, ptr %a1
%t136 = icmp eq ptr %t135, null
br i1 %t136, label %panic7020, label %ok7021
panic7020:
call void @finch_panic(ptr @.str.4549, i64 4022, ptr @.str.4550)
unreachable
ok7021:
%t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 15
%t138 = load ptr, ptr %a1
%t139 = getelementptr inbounds %S.ast.Type, ptr %a105, i32 0, i32 3
%t140 = load { ptr, i64, i64 }, ptr %t139
%t141 = getelementptr inbounds %S.ast.Type, ptr %a105, i32 0, i32 2
%t142 = load { ptr, i64, i64 }, ptr %t141
%t143 = call i64 @finch.gen.findStruct(ptr %t138, { ptr, i64, i64 } %t140, { ptr, i64, i64 } %t142)
%t144 = load { ptr, i64, i64 }, ptr %t137
%t145 = extractvalue { ptr, i64, i64 } %t144, 1
%t146 = icmp uge i64 %t143, %t145
br i1 %t146, label %range7022, label %inrange7023
range7022:
call void @finch_panic_index(ptr @.str.4551, i64 4022, i64 %t143, i64 %t145)
unreachable
inrange7023:
%t147 = extractvalue { ptr, i64, i64 } %t144, 0
%t148 = getelementptr inbounds %S.gen.StructDef, ptr %t147, i64 %t143
%t149 = getelementptr inbounds %S.gen.StructDef, ptr %t148, i32 0, i32 2
%t150 = load i1, ptr %t149
br label %logic.rend7024
logic.rend7024:
br label %logic.end7019
logic.end7019:
%t151 = phi i1 [ false, %logic.from7017 ], [ %t150, %logic.rend7024 ]
br label %logic.rend7025
logic.rend7025:
br label %logic.end7016
logic.end7016:
%t152 = phi i1 [ true, %logic.from7014 ], [ %t151, %logic.rend7025 ]
%t153 = xor i1 %t152, true
br i1 %t153, label %then7026, label %endif7028
then7026:
%t154 = load ptr, ptr %a1
%t155 = load %S.ast.Node, ptr %a3
%t156 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1
%t157 = load { ptr, i64, i64 }, ptr %t156
store { ptr, i64, i64 } { ptr @.str.4552, i64 5, i64 0 }, ptr %a159
store { ptr, i64, i64 } %t157, ptr %a160
call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160)
%t161 = load { ptr, i64, i64 }, ptr %a158
store { ptr, i64, i64 } %t161, ptr %a163
store { ptr, i64, i64 } { ptr @.str.4553, i64 95, i64 0 }, ptr %a164
call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164)
%t165 = load { ptr, i64, i64 }, ptr %a162
%t166 = load %S.ast.Type, ptr %a105
%t167 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %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)
%t171 = load { ptr, i64, i64 }, ptr %a168
call void @finch.gen.fail(ptr %t154, %S.ast.Node %t155, { ptr, i64, i64 } %t171)
br label %endif7028
endif7028:
br label %each.step7000
each.step7000:
%t172 = load i64, ptr %a97
%t173 = add i64 %t172, 1
store i64 %t173, ptr %a97
br label %each.cond6998
each.end7001:
%t174 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12
%t175 = load %S.ast.Type, ptr %t174
%t176 = call i1 @finch.gen.isNumber(%S.ast.Type %t175)
br label %logic.from7029
logic.from7029:
br i1 %t176, label %logic.end7031, label %logic.rhs7030
logic.rhs7030:
%t177 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12
%t178 = getelementptr inbounds %S.ast.Type, ptr %t177, i32 0, i32 0
%t179 = load { ptr, i64, i64 }, ptr %t178
store { ptr, i64, i64 } %t179, ptr %a180
store { ptr, i64, i64 } { ptr @.str.4554, i64 4, i64 0 }, ptr %a181
%t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181)
%t183 = icmp ne i32 %t182, 0
br label %logic.rend7032
logic.rend7032:
br label %logic.end7031
logic.end7031:
%t184 = phi i1 [ true, %logic.from7029 ], [ %t183, %logic.rend7032 ]
br label %logic.from7033
logic.from7033:
br i1 %t184, label %logic.end7035, label %logic.rhs7034
logic.rhs7034:
%t185 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12
%t186 = getelementptr inbounds %S.ast.Type, ptr %t185, i32 0, i32 0
%t187 = load { ptr, i64, i64 }, ptr %t186
store { ptr, i64, i64 } %t187, ptr %a188
store { ptr, i64, i64 } { ptr @.str.4555, i64 4, i64 0 }, ptr %a189
%t190 = call i32 @finch_str_eq(ptr %a188, ptr %a189)
%t191 = icmp ne i32 %t190, 0
br label %logic.rend7036
logic.rend7036:
br label %logic.end7035
logic.end7035:
%t192 = phi i1 [ true, %logic.from7033 ], [ %t191, %logic.rend7036 ]
br label %logic.from7037
logic.from7037:
br i1 %t192, label %logic.end7039, label %logic.rhs7038
logic.rhs7038:
%t193 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12
%t194 = getelementptr inbounds %S.ast.Type, ptr %t193, i32 0, i32 0
%t195 = load { ptr, i64, i64 }, ptr %t194
store { ptr, i64, i64 } %t195, ptr %a196
store { ptr, i64, i64 } { ptr @.str.4556, i64 3, i64 0 }, ptr %a197
%t198 = call i32 @finch_str_eq(ptr %a196, ptr %a197)
%t199 = icmp ne i32 %t198, 0
br label %logic.rend7040
logic.rend7040:
br label %logic.end7039
logic.end7039:
%t200 = phi i1 [ true, %logic.from7037 ], [ %t199, %logic.rend7040 ]
br label %logic.from7041
logic.from7041:
br i1 %t200, label %logic.end7043, label %logic.rhs7042
logic.rhs7042:
%t201 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12
%t202 = getelementptr inbounds %S.ast.Type, ptr %t201, i32 0, i32 0
%t203 = load { ptr, i64, i64 }, ptr %t202
store { ptr, i64, i64 } %t203, ptr %a204
store { ptr, i64, i64 } { ptr @.str.4557, i64 4, i64 0 }, ptr %a205
%t206 = call i32 @finch_str_eq(ptr %a204, ptr %a205)
%t207 = icmp ne i32 %t206, 0
br label %logic.rend7044
logic.rend7044:
br label %logic.end7043
logic.end7043:
%t208 = phi i1 [ true, %logic.from7041 ], [ %t207, %logic.rend7044 ]
br label %logic.from7045
logic.from7045:
br i1 %t208, label %logic.end7047, label %logic.rhs7046
logic.rhs7046:
%t209 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12
%t210 = getelementptr inbounds %S.ast.Type, ptr %t209, i32 0, i32 0
%t211 = load { ptr, i64, i64 }, ptr %t210
store { ptr, i64, i64 } %t211, ptr %a212
store { ptr, i64, i64 } { ptr @.str.4558, i64 6, i64 0 }, ptr %a213
%t214 = call i32 @finch_str_eq(ptr %a212, ptr %a213)
%t215 = icmp ne i32 %t214, 0
br label %logic.from7048
logic.from7048:
br i1 %t215, label %logic.rhs7049, label %logic.end7050
logic.rhs7049:
%t216 = load ptr, ptr %a1
%t217 = icmp eq ptr %t216, null
br i1 %t217, label %panic7051, label %ok7052
panic7051:
call void @finch_panic(ptr @.str.4559, i64 4026, ptr @.str.4560)
unreachable
ok7052:
%t218 = getelementptr inbounds %S.gen.Gen, ptr %t216, i32 0, i32 15
%t219 = load ptr, ptr %a1
%t220 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12
%t221 = getelementptr inbounds %S.ast.Type, ptr %t220, i32 0, i32 3
%t222 = load { ptr, i64, i64 }, ptr %t221
%t223 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12
%t224 = getelementptr inbounds %S.ast.Type, ptr %t223, i32 0, i32 2
%t225 = load { ptr, i64, i64 }, ptr %t224
%t226 = call i64 @finch.gen.findStruct(ptr %t219, { ptr, i64, i64 } %t222, { ptr, i64, i64 } %t225)
%t227 = load { ptr, i64, i64 }, ptr %t218
%t228 = extractvalue { ptr, i64, i64 } %t227, 1
%t229 = icmp uge i64 %t226, %t228
br i1 %t229, label %range7053, label %inrange7054
range7053:
call void @finch_panic_index(ptr @.str.4561, i64 4026, i64 %t226, i64 %t228)
unreachable
inrange7054:
%t230 = extractvalue { ptr, i64, i64 } %t227, 0
%t231 = getelementptr inbounds %S.gen.StructDef, ptr %t230, i64 %t226
%t232 = getelementptr inbounds %S.gen.StructDef, ptr %t231, i32 0, i32 2
%t233 = load i1, ptr %t232
br label %logic.rend7055
logic.rend7055:
br label %logic.end7050
logic.end7050:
%t234 = phi i1 [ false, %logic.from7048 ], [ %t233, %logic.rend7055 ]
br label %logic.rend7056
logic.rend7056:
br label %logic.end7047
logic.end7047:
%t235 = phi i1 [ true, %logic.from7045 ], [ %t234, %logic.rend7056 ]
%t236 = xor i1 %t235, true
br i1 %t236, label %then7057, label %endif7059
then7057:
%t237 = load ptr, ptr %a1
%t238 = load %S.ast.Node, ptr %a3
%t239 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1
%t240 = load { ptr, i64, i64 }, ptr %t239
store { ptr, i64, i64 } { ptr @.str.4562, i64 5, 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
store { ptr, i64, i64 } %t244, ptr %a246
store { ptr, i64, i64 } { ptr @.str.4563, i64 38, i64 0 }, ptr %a247
call void @finch_str_concat(ptr %a245, ptr %a246, ptr %a247)
%t248 = load { ptr, i64, i64 }, ptr %a245
%t249 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12
%t250 = load %S.ast.Type, ptr %t249
%t251 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t250)
store { ptr, i64, i64 } %t248, ptr %a253
store { ptr, i64, i64 } %t251, ptr %a254
call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254)
%t255 = load { ptr, i64, i64 }, ptr %a252
call void @finch.gen.fail(ptr %t237, %S.ast.Node %t238, { ptr, i64, i64 } %t255)
br label %endif7059
endif7059:
%t256 = load ptr, ptr %a1
%t257 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12
%t258 = load %S.ast.Type, ptr %t257
%t259 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13
%t260 = load { ptr, i64, i64 }, ptr %t259
%t261 = call %S.gen.Plan @finch.gen.makePlan(ptr %t256, %S.ast.Type %t258, { ptr, i64, i64 } %t260)
store %S.gen.Plan %t261, ptr %a262
%t263 = load ptr, ptr %a1
%t264 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t263)
store %S.gen.Saved %t264, ptr %a265
store { ptr, i64, i64 } zeroinitializer, ptr %a266
store i64 0, ptr %a267
store { ptr, i64, i64 } { ptr @.str.4564, i64 0, i64 0 }, ptr %a268
%t269 = getelementptr inbounds %S.gen.Plan, ptr %a262, i32 0, i32 3
%t270 = load i1, ptr %t269
br i1 %t270, label %then7060, label %endif7062
then7060:
%t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %a266, i32 0, i32 1
%t272 = load ptr, ptr %a1
%t273 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12
%t274 = load %S.ast.Type, ptr %t273
%t275 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t272, %S.ast.Type %t274)
store { ptr, i64, i64 } { ptr @.str.4565, i64 9, 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.4566, i64 14, i64 0 }, ptr %a282
call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282)
%t283 = load { ptr, i64, i64 }, ptr %a280
%t284 = load i64, ptr %t271
%t285 = add i64 %t284, 1
call void @finch_arr_reserve(ptr %a266, i64 %t285, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t286 = load ptr, ptr %a266
%t287 = getelementptr inbounds { ptr, i64, i64 }, ptr %t286, i64 %t284
store { ptr, i64, i64 } %t283, ptr %t287
store i64 %t285, ptr %t271
store { ptr, i64, i64 } { ptr @.str.4567, i64 3, i64 0 }, ptr %a268
store i64 1, ptr %a267
br label %endif7062
endif7062:
store { ptr, i64, i64 } zeroinitializer, ptr %a288
%t289 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13
%t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t289, i32 0, i32 1
%t291 = load i64, ptr %t290
store i64 0, ptr %a292
br label %for.cond7063
for.cond7063:
%t293 = load i64, ptr %a292
%t294 = icmp slt i64 %t293, %t291
br i1 %t294, label %for.body7064, label %for.end7066
for.body7064:
%t295 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13
%t296 = load i64, ptr %a292
%t297 = load { ptr, i64, i64 }, ptr %t295
%t298 = extractvalue { ptr, i64, i64 } %t297, 1
%t299 = icmp uge i64 %t296, %t298
br i1 %t299, label %range7067, label %inrange7068
range7067:
call void @finch_panic_index(ptr @.str.4568, i64 4041, i64 %t296, i64 %t298)
unreachable
inrange7068:
%t300 = extractvalue { ptr, i64, i64 } %t297, 0
%t301 = getelementptr inbounds %S.ast.Type, ptr %t300, i64 %t296
%t302 = load %S.ast.Type, ptr %t301
store %S.ast.Type %t302, ptr %a303
call void @finch.copy.S_ast_Type(ptr %a304, ptr %a303)
%t305 = load %S.ast.Type, ptr %a304
store %S.ast.Type %t305, ptr %a306
%t307 = getelementptr inbounds %S.gen.Plan, ptr %a262, i32 0, i32 1
%t308 = load i64, ptr %a292
%t309 = load { ptr, i64, i64 }, ptr %t307
%t310 = extractvalue { ptr, i64, i64 } %t309, 1
%t311 = icmp uge i64 %t308, %t310
br i1 %t311, label %range7069, label %inrange7070
range7069:
call void @finch_panic_index(ptr @.str.4569, i64 4042, i64 %t308, i64 %t310)
unreachable
inrange7070:
%t312 = extractvalue { ptr, i64, i64 } %t309, 0
%t313 = getelementptr inbounds %S.gen.Abi, ptr %t312, i64 %t308
%t314 = load %S.gen.Abi, ptr %t313
store %S.gen.Abi %t314, ptr %a315
call void @finch.copy.S_gen_Abi(ptr %a316, ptr %a315)
%t317 = load %S.gen.Abi, ptr %a316
store %S.gen.Abi %t317, ptr %a318
%t319 = getelementptr inbounds %S.gen.Abi, ptr %a318, i32 0, i32 0
%t320 = load { ptr, i64, i64 }, ptr %t319
store { ptr, i64, i64 } %t320, ptr %a321
store { ptr, i64, i64 } { ptr @.str.4570, i64 6, i64 0 }, ptr %a322
%t323 = call i32 @finch_str_eq(ptr %a321, ptr %a322)
%t324 = icmp ne i32 %t323, 0
br i1 %t324, label %then7071, label %else7072
then7071:
%t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %a266, i32 0, i32 1
%t326 = load ptr, ptr %a1
%t327 = load %S.ast.Type, ptr %a306
%t328 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t326, %S.ast.Type %t327)
store { ptr, i64, i64 } { ptr @.str.4571, i64 10, i64 0 }, ptr %a330
store { ptr, i64, i64 } %t328, ptr %a331
call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331)
%t332 = load { ptr, i64, i64 }, ptr %a329
store { ptr, i64, i64 } %t332, ptr %a334
store { ptr, i64, i64 } { ptr @.str.4572, i64 8, i64 0 }, ptr %a335
call void @finch_str_concat(ptr %a333, ptr %a334, ptr %a335)
%t336 = load { ptr, i64, i64 }, ptr %a333
%t337 = getelementptr inbounds %S.gen.Abi, ptr %a318, i32 0, i32 3
%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)
%t344 = load { ptr, i64, i64 }, ptr %a341
store { ptr, i64, i64 } %t344, ptr %a346
store { ptr, i64, i64 } { ptr @.str.4573, i64 3, i64 0 }, ptr %a347
call void @finch_str_concat(ptr %a345, ptr %a346, ptr %a347)
%t348 = load { ptr, i64, i64 }, ptr %a345
%t349 = load i64, ptr %a267
call void @finch_str_from_int(ptr %a350, i64 %t349)
%t351 = load { ptr, i64, i64 }, ptr %a350
store { ptr, i64, i64 } %t348, ptr %a353
store { ptr, i64, i64 } %t351, ptr %a354
call void @finch_str_concat(ptr %a352, ptr %a353, ptr %a354)
%t355 = load { ptr, i64, i64 }, ptr %a352
%t356 = load i64, ptr %t325
%t357 = add i64 %t356, 1
call void @finch_arr_reserve(ptr %a266, i64 %t357, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t358 = load ptr, ptr %a266
%t359 = getelementptr inbounds { ptr, i64, i64 }, ptr %t358, i64 %t356
store { ptr, i64, i64 } %t355, ptr %t359
store i64 %t357, ptr %t325
%t360 = getelementptr inbounds { ptr, i64, i64 }, ptr %a288, i32 0, i32 1
%t361 = load ptr, ptr %a1
%t362 = load %S.ast.Type, ptr %a306
%t363 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t361, %S.ast.Type %t362)
store { ptr, i64, i64 } %t363, ptr %a365
store { ptr, i64, i64 } { ptr @.str.4574, i64 1, i64 0 }, ptr %a366
call void @finch_str_concat(ptr %a364, ptr %a365, ptr %a366)
%t367 = load { ptr, i64, i64 }, ptr %a364
%t368 = load ptr, ptr %a1
%t369 = load ptr, ptr %a1
%t370 = load %S.ast.Type, ptr %a306
%t371 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t369, %S.ast.Type %t370)
%t372 = load i64, ptr %a267
call void @finch_str_from_int(ptr %a373, i64 %t372)
%t374 = load { ptr, i64, i64 }, ptr %a373
store { ptr, i64, i64 } { ptr @.str.4575, i64 2, i64 0 }, ptr %a376
store { ptr, i64, i64 } %t374, ptr %a377
call void @finch_str_concat(ptr %a375, ptr %a376, ptr %a377)
%t378 = load { ptr, i64, i64 }, ptr %a375
%t379 = call { ptr, i64, i64 } @finch.gen.load(ptr %t368, { ptr, i64, i64 } %t371, { ptr, i64, i64 } %t378)
store { ptr, i64, i64 } %t367, 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
%t384 = load i64, ptr %t360
%t385 = add i64 %t384, 1
call void @finch_arr_reserve(ptr %a288, i64 %t385, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t386 = load ptr, ptr %a288
%t387 = getelementptr inbounds { ptr, i64, i64 }, ptr %t386, i64 %t384
store { ptr, i64, i64 } %t383, ptr %t387
store i64 %t385, ptr %t360
%t388 = load i64, ptr %a267
%t389 = add i64 %t388, 1
store i64 %t389, ptr %a267
br label %endif7073
else7072:
%t390 = getelementptr inbounds %S.gen.Abi, ptr %a318, i32 0, i32 0
%t391 = load { ptr, i64, i64 }, ptr %t390
store { ptr, i64, i64 } %t391, ptr %a392
store { ptr, i64, i64 } { ptr @.str.4576, i64 8, i64 0 }, ptr %a393
%t394 = call i32 @finch_str_eq(ptr %a392, ptr %a393)
%t395 = icmp ne i32 %t394, 0
br i1 %t395, label %then7074, label %else7075
then7074:
%t396 = getelementptr inbounds { ptr, i64, i64 }, ptr %a266, i32 0, i32 1
%t397 = load i64, ptr %a267
call void @finch_str_from_int(ptr %a398, i64 %t397)
%t399 = load { ptr, i64, i64 }, ptr %a398
store { ptr, i64, i64 } { ptr @.str.4577, i64 6, i64 0 }, ptr %a401
store { ptr, i64, i64 } %t399, ptr %a402
call void @finch_str_concat(ptr %a400, ptr %a401, ptr %a402)
%t403 = load { ptr, i64, i64 }, ptr %a400
%t404 = load i64, ptr %t396
%t405 = add i64 %t404, 1
call void @finch_arr_reserve(ptr %a266, i64 %t405, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t406 = load ptr, ptr %a266
%t407 = getelementptr inbounds { ptr, i64, i64 }, ptr %t406, i64 %t404
store { ptr, i64, i64 } %t403, ptr %t407
store i64 %t405, ptr %t396
%t408 = getelementptr inbounds { ptr, i64, i64 }, ptr %a288, i32 0, i32 1
%t409 = load ptr, ptr %a1
%t410 = load %S.ast.Type, ptr %a306
%t411 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t409, %S.ast.Type %t410)
store { ptr, i64, i64 } %t411, ptr %a413
store { ptr, i64, i64 } { ptr @.str.4578, i64 1, i64 0 }, ptr %a414
call void @finch_str_concat(ptr %a412, ptr %a413, ptr %a414)
%t415 = load { ptr, i64, i64 }, ptr %a412
%t416 = load ptr, ptr %a1
%t417 = load ptr, ptr %a1
%t418 = load %S.ast.Type, ptr %a306
%t419 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t417, %S.ast.Type %t418)
%t420 = load i64, ptr %a267
call void @finch_str_from_int(ptr %a421, i64 %t420)
%t422 = load { ptr, i64, i64 }, ptr %a421
store { ptr, i64, i64 } { ptr @.str.4579, i64 2, i64 0 }, ptr %a424
store { ptr, i64, i64 } %t422, ptr %a425
call void @finch_str_concat(ptr %a423, ptr %a424, ptr %a425)
%t426 = load { ptr, i64, i64 }, ptr %a423
%t427 = call { ptr, i64, i64 } @finch.gen.load(ptr %t416, { ptr, i64, i64 } %t419, { ptr, i64, i64 } %t426)
store { ptr, i64, i64 } %t415, ptr %a429
store { ptr, i64, i64 } %t427, ptr %a430
call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430)
%t431 = load { ptr, i64, i64 }, ptr %a428
%t432 = load i64, ptr %t408
%t433 = add i64 %t432, 1
call void @finch_arr_reserve(ptr %a288, i64 %t433, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t434 = load ptr, ptr %a288
%t435 = getelementptr inbounds { ptr, i64, i64 }, ptr %t434, i64 %t432
store { ptr, i64, i64 } %t431, ptr %t435
store i64 %t433, ptr %t408
%t436 = load i64, ptr %a267
%t437 = add i64 %t436, 1
store i64 %t437, ptr %a267
br label %endif7076
else7075:
%t438 = getelementptr inbounds %S.gen.Abi, ptr %a318, i32 0, i32 0
%t439 = load { ptr, i64, i64 }, ptr %t438
store { ptr, i64, i64 } %t439, ptr %a440
store { ptr, i64, i64 } { ptr @.str.4580, i64 6, i64 0 }, ptr %a441
%t442 = call i32 @finch_str_eq(ptr %a440, ptr %a441)
%t443 = icmp ne i32 %t442, 0
br i1 %t443, label %then7077, label %else7078
then7077:
%t444 = load ptr, ptr %a1
%t445 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t444, { ptr, i64, i64 } { ptr @.str.4581, i64 9, i64 0 })
store { ptr, i64, i64 } %t445, ptr %a446
%t447 = getelementptr inbounds %S.gen.Abi, ptr %a318, i32 0, i32 1
%t448 = getelementptr inbounds { ptr, i64, i64 }, ptr %t447, i32 0, i32 1
%t449 = load i64, ptr %t448
store i64 0, ptr %a450
br label %for.cond7080
for.cond7080:
%t451 = load i64, ptr %a450
%t452 = icmp slt i64 %t451, %t449
br i1 %t452, label %for.body7081, label %for.end7083
for.body7081:
%t453 = getelementptr inbounds { ptr, i64, i64 }, ptr %a266, i32 0, i32 1
%t454 = getelementptr inbounds %S.gen.Abi, ptr %a318, i32 0, i32 1
%t455 = load i64, ptr %a450
%t456 = load { ptr, i64, i64 }, ptr %t454
%t457 = extractvalue { ptr, i64, i64 } %t456, 1
%t458 = icmp uge i64 %t455, %t457
br i1 %t458, label %range7084, label %inrange7085
range7084:
call void @finch_panic_index(ptr @.str.4582, i64 4054, i64 %t455, i64 %t457)
unreachable
inrange7085:
%t459 = extractvalue { ptr, i64, i64 } %t456, 0
%t460 = getelementptr inbounds { ptr, i64, i64 }, ptr %t459, i64 %t455
%t461 = load { ptr, i64, i64 }, ptr %t460
store { ptr, i64, i64 } %t461, ptr %a463
store { ptr, i64, i64 } { ptr @.str.4583, i64 3, i64 0 }, ptr %a464
call void @finch_str_concat(ptr %a462, ptr %a463, ptr %a464)
%t465 = load { ptr, i64, i64 }, ptr %a462
%t466 = load i64, ptr %a267
call void @finch_str_from_int(ptr %a467, i64 %t466)
%t468 = load { ptr, i64, i64 }, ptr %a467
store { ptr, i64, i64 } %t465, ptr %a470
store { ptr, i64, i64 } %t468, ptr %a471
call void @finch_str_concat(ptr %a469, ptr %a470, ptr %a471)
%t472 = load { ptr, i64, i64 }, ptr %a469
%t473 = load i64, ptr %t453
%t474 = add i64 %t473, 1
call void @finch_arr_reserve(ptr %a266, i64 %t474, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t475 = load ptr, ptr %a266
%t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i64 %t473
store { ptr, i64, i64 } %t472, ptr %t476
store i64 %t474, ptr %t453
%t477 = load ptr, ptr %a1
%t478 = getelementptr inbounds %S.gen.Abi, ptr %a318, i32 0, i32 1
%t479 = load i64, ptr %a450
%t480 = load { ptr, i64, i64 }, ptr %t478
%t481 = extractvalue { ptr, i64, i64 } %t480, 1
%t482 = icmp uge i64 %t479, %t481
br i1 %t482, label %range7086, label %inrange7087
range7086:
call void @finch_panic_index(ptr @.str.4584, i64 4055, i64 %t479, i64 %t481)
unreachable
inrange7087:
%t483 = extractvalue { ptr, i64, i64 } %t480, 0
%t484 = getelementptr inbounds { ptr, i64, i64 }, ptr %t483, i64 %t479
%t485 = load { ptr, i64, i64 }, ptr %t484
%t486 = load i64, ptr %a267
call void @finch_str_from_int(ptr %a487, i64 %t486)
%t488 = load { ptr, i64, i64 }, ptr %a487
store { ptr, i64, i64 } { ptr @.str.4585, i64 2, i64 0 }, ptr %a490
store { ptr, i64, i64 } %t488, ptr %a491
call void @finch_str_concat(ptr %a489, ptr %a490, ptr %a491)
%t492 = load { ptr, i64, i64 }, ptr %a489
%t493 = load ptr, ptr %a1
%t494 = load { ptr, i64, i64 }, ptr %a446
store { ptr, i64, i64 } { ptr @.str.4586, i64 31, i64 0 }, ptr %a496
store { ptr, i64, i64 } %t494, ptr %a497
call void @finch_str_concat(ptr %a495, ptr %a496, ptr %a497)
%t498 = load { ptr, i64, i64 }, ptr %a495
store { ptr, i64, i64 } %t498, ptr %a500
store { ptr, i64, i64 } { ptr @.str.4587, i64 6, i64 0 }, ptr %a501
call void @finch_str_concat(ptr %a499, ptr %a500, ptr %a501)
%t502 = load { ptr, i64, i64 }, ptr %a499
%t503 = load i64, ptr %a450
%t504 = mul i64 8, %t503
call void @finch_str_from_int(ptr %a505, i64 %t504)
%t506 = load { ptr, i64, i64 }, ptr %a505
store { ptr, i64, i64 } %t502, ptr %a508
store { ptr, i64, i64 } %t506, ptr %a509
call void @finch_str_concat(ptr %a507, ptr %a508, ptr %a509)
%t510 = load { ptr, i64, i64 }, ptr %a507
%t511 = call { ptr, i64, i64 } @finch.gen.op(ptr %t493, { ptr, i64, i64 } %t510)
call void @finch.gen.store(ptr %t477, { ptr, i64, i64 } %t485, { ptr, i64, i64 } %t492, { ptr, i64, i64 } %t511)
%t512 = load i64, ptr %a267
%t513 = add i64 %t512, 1
store i64 %t513, ptr %a267
br label %for.step7082
for.step7082:
%t514 = load i64, ptr %a450
%t515 = add i64 %t514, 1
store i64 %t515, ptr %a450
br label %for.cond7080
for.end7083:
%t516 = getelementptr inbounds { ptr, i64, i64 }, ptr %a288, i32 0, i32 1
%t517 = load ptr, ptr %a1
%t518 = load %S.ast.Type, ptr %a306
%t519 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t517, %S.ast.Type %t518)
store { ptr, i64, i64 } %t519, ptr %a521
store { ptr, i64, i64 } { ptr @.str.4588, i64 1, i64 0 }, ptr %a522
call void @finch_str_concat(ptr %a520, ptr %a521, ptr %a522)
%t523 = load { ptr, i64, i64 }, ptr %a520
%t524 = load ptr, ptr %a1
%t525 = load ptr, ptr %a1
%t526 = load %S.ast.Type, ptr %a306
%t527 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t525, %S.ast.Type %t526)
%t528 = load { ptr, i64, i64 }, ptr %a446
%t529 = call { ptr, i64, i64 } @finch.gen.load(ptr %t524, { ptr, i64, i64 } %t527, { ptr, i64, i64 } %t528)
store { ptr, i64, i64 } %t523, ptr %a531
store { ptr, i64, i64 } %t529, ptr %a532
call void @finch_str_concat(ptr %a530, ptr %a531, ptr %a532)
%t533 = load { ptr, i64, i64 }, ptr %a530
%t534 = load i64, ptr %t516
%t535 = add i64 %t534, 1
call void @finch_arr_reserve(ptr %a288, i64 %t535, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t536 = load ptr, ptr %a288
%t537 = getelementptr inbounds { ptr, i64, i64 }, ptr %t536, i64 %t534
store { ptr, i64, i64 } %t533, ptr %t537
store i64 %t535, ptr %t516
br label %endif7079
else7078:
%t538 = getelementptr inbounds { ptr, i64, i64 }, ptr %a266, i32 0, i32 1
%t539 = load ptr, ptr %a1
%t540 = load %S.ast.Type, ptr %a306
%t541 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t539, %S.ast.Type %t540)
%t542 = load ptr, ptr %a1
%t543 = load %S.ast.Type, ptr %a306
%t544 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t542, %S.ast.Type %t543)
store { ptr, i64, i64 } %t541, ptr %a546
store { ptr, i64, i64 } %t544, ptr %a547
call void @finch_str_concat(ptr %a545, ptr %a546, ptr %a547)
%t548 = load { ptr, i64, i64 }, ptr %a545
store { ptr, i64, i64 } %t548, ptr %a550
store { ptr, i64, i64 } { ptr @.str.4589, i64 3, i64 0 }, ptr %a551
call void @finch_str_concat(ptr %a549, ptr %a550, ptr %a551)
%t552 = load { ptr, i64, i64 }, ptr %a549
%t553 = load i64, ptr %a267
call void @finch_str_from_int(ptr %a554, i64 %t553)
%t555 = load { ptr, i64, i64 }, ptr %a554
store { ptr, i64, i64 } %t552, ptr %a557
store { ptr, i64, i64 } %t555, ptr %a558
call void @finch_str_concat(ptr %a556, ptr %a557, ptr %a558)
%t559 = load { ptr, i64, i64 }, ptr %a556
%t560 = load i64, ptr %t538
%t561 = add i64 %t560, 1
call void @finch_arr_reserve(ptr %a266, i64 %t561, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t562 = load ptr, ptr %a266
%t563 = getelementptr inbounds { ptr, i64, i64 }, ptr %t562, i64 %t560
store { ptr, i64, i64 } %t559, ptr %t563
store i64 %t561, ptr %t538
%t564 = getelementptr inbounds { ptr, i64, i64 }, ptr %a288, i32 0, i32 1
%t565 = load ptr, ptr %a1
%t566 = load %S.ast.Type, ptr %a306
%t567 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t565, %S.ast.Type %t566)
store { ptr, i64, i64 } %t567, ptr %a569
store { ptr, i64, i64 } { ptr @.str.4590, i64 3, i64 0 }, ptr %a570
call void @finch_str_concat(ptr %a568, ptr %a569, ptr %a570)
%t571 = load { ptr, i64, i64 }, ptr %a568
%t572 = load i64, ptr %a267
call void @finch_str_from_int(ptr %a573, i64 %t572)
%t574 = load { ptr, i64, i64 }, ptr %a573
store { ptr, i64, i64 } %t571, ptr %a576
store { ptr, i64, i64 } %t574, ptr %a577
call void @finch_str_concat(ptr %a575, ptr %a576, ptr %a577)
%t578 = load { ptr, i64, i64 }, ptr %a575
%t579 = load i64, ptr %t564
%t580 = add i64 %t579, 1
call void @finch_arr_reserve(ptr %a288, i64 %t580, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t581 = load ptr, ptr %a288
%t582 = getelementptr inbounds { ptr, i64, i64 }, ptr %t581, i64 %t579
store { ptr, i64, i64 } %t578, ptr %t582
store i64 %t580, ptr %t564
%t583 = load i64, ptr %a267
%t584 = add i64 %t583, 1
store i64 %t584, ptr %a267
br label %endif7079
endif7079:
br label %endif7076
endif7076:
br label %endif7073
endif7073:
br label %for.step7065
for.step7065:
%t585 = load i64, ptr %a292
%t586 = add i64 %t585, 1
store i64 %t586, ptr %a292
br label %for.cond7063
for.end7066:
%t587 = load ptr, ptr %a1
%t588 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12
%t589 = load %S.ast.Type, ptr %t588
%t590 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t587, %S.ast.Type %t589)
store { ptr, i64, i64 } { ptr @.str.4591, i64 5, i64 0 }, ptr %a592
store { ptr, i64, i64 } %t590, ptr %a593
call void @finch_str_concat(ptr %a591, ptr %a592, ptr %a593)
%t594 = load { ptr, i64, i64 }, ptr %a591
store { ptr, i64, i64 } %t594, ptr %a596
store { ptr, i64, i64 } { ptr @.str.4592, i64 1, i64 0 }, ptr %a597
call void @finch_str_concat(ptr %a595, ptr %a596, ptr %a597)
%t598 = load { ptr, i64, i64 }, ptr %a595
%t599 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 11
%t600 = load { ptr, i64, i64 }, ptr %t599
store { ptr, i64, i64 } %t598, ptr %a602
store { ptr, i64, i64 } %t600, ptr %a603
call void @finch_str_concat(ptr %a601, ptr %a602, ptr %a603)
%t604 = load { ptr, i64, i64 }, ptr %a601
store { ptr, i64, i64 } %t604, ptr %a606
store { ptr, i64, i64 } { ptr @.str.4593, i64 1, i64 0 }, ptr %a607
call void @finch_str_concat(ptr %a605, ptr %a606, ptr %a607)
%t608 = load { ptr, i64, i64 }, ptr %a605
%t609 = getelementptr inbounds { ptr, i64, i64 }, ptr %a288, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.4594, i64 2, i64 0 }, ptr %a610
call void @finch_str_join(ptr %a611, ptr %a288, ptr %a610)
%t612 = load { ptr, i64, i64 }, ptr %a611
store { ptr, i64, i64 } %t608, ptr %a614
store { ptr, i64, i64 } %t612, ptr %a615
call void @finch_str_concat(ptr %a613, ptr %a614, ptr %a615)
%t616 = load { ptr, i64, i64 }, ptr %a613
store { ptr, i64, i64 } %t616, ptr %a618
store { ptr, i64, i64 } { ptr @.str.4595, i64 1, i64 0 }, ptr %a619
call void @finch_str_concat(ptr %a617, ptr %a618, ptr %a619)
%t620 = load { ptr, i64, i64 }, ptr %a617
store { ptr, i64, i64 } %t620, ptr %a621
store { ptr, i64, i64 } { ptr @.str.4596, i64 0, i64 0 }, ptr %a622
%t623 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12
%t624 = getelementptr inbounds %S.ast.Type, ptr %t623, i32 0, i32 0
%t625 = load { ptr, i64, i64 }, ptr %t624
store { ptr, i64, i64 } %t625, ptr %a626
store { ptr, i64, i64 } { ptr @.str.4597, i64 4, i64 0 }, ptr %a627
%t628 = call i32 @finch_str_eq(ptr %a626, ptr %a627)
%t629 = icmp ne i32 %t628, 0
br i1 %t629, label %then7088, label %else7089
then7088:
%t630 = load ptr, ptr %a1
%t631 = load { ptr, i64, i64 }, ptr %a621
call void @finch.gen.emit(ptr %t630, { ptr, i64, i64 } %t631)
%t632 = load ptr, ptr %a1
call void @finch.gen.emit(ptr %t632, { ptr, i64, i64 } { ptr @.str.4598, i64 8, i64 0 })
br label %endif7090
else7089:
%t633 = getelementptr inbounds %S.gen.Plan, ptr %a262, i32 0, i32 3
%t634 = load i1, ptr %t633
br i1 %t634, label %then7091, label %else7092
then7091:
%t635 = load ptr, ptr %a1
%t636 = load ptr, ptr %a1
%t637 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12
%t638 = load %S.ast.Type, ptr %t637
%t639 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t636, %S.ast.Type %t638)
%t640 = load ptr, ptr %a1
%t641 = load { ptr, i64, i64 }, ptr %a621
%t642 = call { ptr, i64, i64 } @finch.gen.op(ptr %t640, { ptr, i64, i64 } %t641)
%t643 = load { ptr, i64, i64 }, ptr %a268
call void @finch.gen.store(ptr %t635, { ptr, i64, i64 } %t639, { ptr, i64, i64 } %t642, { ptr, i64, i64 } %t643)
%t644 = load ptr, ptr %a1
call void @finch.gen.emit(ptr %t644, { ptr, i64, i64 } { ptr @.str.4599, i64 8, i64 0 })
br label %endif7093
else7092:
%t645 = getelementptr inbounds %S.gen.Plan, ptr %a262, i32 0, i32 0
%t646 = getelementptr inbounds %S.gen.Abi, ptr %t645, i32 0, i32 0
%t647 = load { ptr, i64, i64 }, ptr %t646
store { ptr, i64, i64 } %t647, ptr %a648
store { ptr, i64, i64 } { ptr @.str.4600, i64 6, i64 0 }, ptr %a649
%t650 = call i32 @finch_str_eq(ptr %a648, ptr %a649)
%t651 = icmp ne i32 %t650, 0
br i1 %t651, label %then7094, label %else7095
then7094:
%t652 = load ptr, ptr %a1
%t653 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t652, { ptr, i64, i64 } { ptr @.str.4601, i64 9, i64 0 })
store { ptr, i64, i64 } %t653, ptr %a654
%t655 = load ptr, ptr %a1
%t656 = load ptr, ptr %a1
%t657 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12
%t658 = load %S.ast.Type, ptr %t657
%t659 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t656, %S.ast.Type %t658)
%t660 = load ptr, ptr %a1
%t661 = load { ptr, i64, i64 }, ptr %a621
%t662 = call { ptr, i64, i64 } @finch.gen.op(ptr %t660, { ptr, i64, i64 } %t661)
%t663 = load { ptr, i64, i64 }, ptr %a654
call void @finch.gen.store(ptr %t655, { ptr, i64, i64 } %t659, { ptr, i64, i64 } %t662, { ptr, i64, i64 } %t663)
%t664 = load ptr, ptr %a1
%t665 = getelementptr inbounds %S.gen.Plan, ptr %a262, i32 0, i32 0
%t666 = getelementptr inbounds %S.gen.Abi, ptr %t665, i32 0, i32 2
%t667 = load { ptr, i64, i64 }, ptr %t666
store { ptr, i64, i64 } { ptr @.str.4602, i64 4, 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.4603, i64 1, i64 0 }, ptr %a674
call void @finch_str_concat(ptr %a672, ptr %a673, ptr %a674)
%t675 = load { ptr, i64, i64 }, ptr %a672
%t676 = load ptr, ptr %a1
%t677 = getelementptr inbounds %S.gen.Plan, ptr %a262, i32 0, i32 0
%t678 = getelementptr inbounds %S.gen.Abi, ptr %t677, i32 0, i32 2
%t679 = load { ptr, i64, i64 }, ptr %t678
%t680 = load { ptr, i64, i64 }, ptr %a654
%t681 = call { ptr, i64, i64 } @finch.gen.load(ptr %t676, { ptr, i64, i64 } %t679, { ptr, i64, i64 } %t680)
store { ptr, i64, i64 } %t675, ptr %a683
store { ptr, i64, i64 } %t681, ptr %a684
call void @finch_str_concat(ptr %a682, ptr %a683, ptr %a684)
%t685 = load { ptr, i64, i64 }, ptr %a682
call void @finch.gen.emit(ptr %t664, { ptr, i64, i64 } %t685)
br label %endif7096
else7095:
%t686 = load ptr, ptr %a1
%t687 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12
%t688 = load %S.ast.Type, ptr %t687
%t689 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t686, %S.ast.Type %t688)
store { ptr, i64, i64 } %t689, ptr %a622
%t690 = load ptr, ptr %a1
%t691 = load ptr, ptr %a1
%t692 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12
%t693 = load %S.ast.Type, ptr %t692
%t694 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t691, %S.ast.Type %t693)
store { ptr, i64, i64 } { ptr @.str.4604, i64 4, i64 0 }, ptr %a696
store { ptr, i64, i64 } %t694, ptr %a697
call void @finch_str_concat(ptr %a695, ptr %a696, ptr %a697)
%t698 = load { ptr, i64, i64 }, ptr %a695
store { ptr, i64, i64 } %t698, ptr %a700
store { ptr, i64, i64 } { ptr @.str.4605, i64 1, i64 0 }, ptr %a701
call void @finch_str_concat(ptr %a699, ptr %a700, ptr %a701)
%t702 = load { ptr, i64, i64 }, ptr %a699
%t703 = load ptr, ptr %a1
%t704 = load { ptr, i64, i64 }, ptr %a621
%t705 = call { ptr, i64, i64 } @finch.gen.op(ptr %t703, { ptr, i64, i64 } %t704)
store { ptr, i64, i64 } %t702, 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
call void @finch.gen.emit(ptr %t690, { ptr, i64, i64 } %t709)
br label %endif7096
endif7096:
br label %endif7093
endif7093:
br label %endif7090
endif7090:
%t710 = load ptr, ptr %a1
%t711 = load %S.gen.Saved, ptr %a265
%t712 = load { ptr, i64, i64 }, ptr %a622
store { ptr, i64, i64 } { ptr @.str.4606, i64 15, i64 0 }, ptr %a714
store { ptr, i64, i64 } %t712, ptr %a715
call void @finch_str_concat(ptr %a713, ptr %a714, ptr %a715)
%t716 = load { ptr, i64, i64 }, ptr %a713
store { ptr, i64, i64 } %t716, ptr %a718
store { ptr, i64, i64 } { ptr @.str.4607, i64 1, i64 0 }, ptr %a719
call void @finch_str_concat(ptr %a717, ptr %a718, ptr %a719)
%t720 = load { ptr, i64, i64 }, ptr %a717
%t721 = getelementptr inbounds %S.gen.Plan, ptr %a262, i32 0, i32 2
%t722 = load { ptr, i64, i64 }, ptr %t721
store { ptr, i64, i64 } %t720, ptr %a724
store { ptr, i64, i64 } %t722, ptr %a725
call void @finch_str_concat(ptr %a723, ptr %a724, ptr %a725)
%t726 = load { ptr, i64, i64 }, ptr %a723
store { ptr, i64, i64 } %t726, ptr %a728
store { ptr, i64, i64 } { ptr @.str.4608, i64 1, i64 0 }, ptr %a729
call void @finch_str_concat(ptr %a727, ptr %a728, ptr %a729)
%t730 = load { ptr, i64, i64 }, ptr %a727
%t731 = load { ptr, i64, i64 }, ptr %a35
store { ptr, i64, i64 } %t730, ptr %a733
store { ptr, i64, i64 } %t731, ptr %a734
call void @finch_str_concat(ptr %a732, ptr %a733, ptr %a734)
%t735 = load { ptr, i64, i64 }, ptr %a732
store { ptr, i64, i64 } %t735, ptr %a737
store { ptr, i64, i64 } { ptr @.str.4609, i64 1, i64 0 }, ptr %a738
call void @finch_str_concat(ptr %a736, ptr %a737, ptr %a738)
%t739 = load { ptr, i64, i64 }, ptr %a736
%t740 = getelementptr inbounds { ptr, i64, i64 }, ptr %a266, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.4610, i64 2, i64 0 }, ptr %a741
call void @finch_str_join(ptr %a742, ptr %a266, ptr %a741)
%t743 = load { ptr, i64, i64 }, ptr %a742
store { ptr, i64, i64 } %t739, ptr %a745
store { ptr, i64, i64 } %t743, ptr %a746
call void @finch_str_concat(ptr %a744, ptr %a745, ptr %a746)
%t747 = load { ptr, i64, i64 }, ptr %a744
store { ptr, i64, i64 } %t747, ptr %a749
store { ptr, i64, i64 } { ptr @.str.4611, i64 1, i64 0 }, ptr %a750
call void @finch_str_concat(ptr %a748, ptr %a749, ptr %a750)
%t751 = load { ptr, i64, i64 }, ptr %a748
call void @finch.gen.endHelper(ptr %t710, %S.gen.Saved %t711, { ptr, i64, i64 } %t751)
%t752 = load { ptr, i64, i64 }, ptr %a35
store { ptr, i64, i64 } %t752, ptr %a753
call void @finch_str_copy(ptr %a754, ptr %a753)
%t755 = load { ptr, i64, i64 }, ptr %a754
ret { ptr, i64, i64 } %t755
}
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
%a60 = alloca { ptr, i64, i64 }, align 16
%a61 = alloca { ptr, i64, i64 }, align 16
%a66 = alloca { ptr, i64, i64 }, align 16
%a67 = alloca { ptr, i64, i64 }, align 16
%a70 = alloca %S.ast.Type, align 16
%a77 = alloca { ptr, i64, i64 }, align 16
%a79 = alloca i64, align 16
%a82 = alloca i64, align 16
%a102 = alloca { ptr, i64, i64 }, align 16
%a103 = alloca { ptr, i64, i64 }, align 16
%a104 = 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
%a119 = alloca %S.ast.Type, align 16
%a120 = alloca %S.ast.Type, align 16
%a130 = alloca { ptr, i64, i64 }, align 16
%a131 = alloca { ptr, i64, i64 }, align 16
%a135 = alloca 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
%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
%a163 = 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
%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
%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
%a202 = alloca { ptr, i64, i64 }, align 16
%a203 = alloca { ptr, i64, i64 }, align 16
%a204 = 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
%a220 = alloca %S.ast.Type, align 16
%a221 = 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 %panic7097, label %ok7098
panic7097:
call void @finch_panic(ptr @.str.4612, i64 4087, ptr @.str.4613)
unreachable
ok7098:
%t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 20
%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 %range7099, label %inrange7100
range7099:
call void @finch_panic_index(ptr @.str.4614, i64 4087, i64 %t7, i64 %t9)
unreachable
inrange7100:
%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 %range7101, label %inrange7102
range7101:
call void @finch_panic_index(ptr @.str.4615, i64 4089, i64 0, i64 %t25)
unreachable
inrange7102:
%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 %then7103, label %endif7105
then7103:
%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 %range7106, label %inrange7107
range7106:
call void @finch_panic_index(ptr @.str.4616, i64 4091, i64 0, i64 %t39)
unreachable
inrange7107:
%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.4617, 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)
%t56 = load { ptr, i64, i64 }, ptr %a53
call void @finch.gen.fail(ptr %t36, %S.ast.Node %t43, { ptr, i64, i64 } %t56)
br label %endif7105
endif7105:
%t57 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.4618, i64 4, i64 0 }, 0
%t58 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1
%t59 = load { ptr, i64, i64 }, ptr %t58
store { ptr, i64, i64 } %t59, ptr %a60
call void @finch_str_copy(ptr %a61, ptr %a60)
%t62 = load { ptr, i64, i64 }, ptr %a61
%t63 = insertvalue %S.ast.Type %t57, { ptr, i64, i64 } %t62, 2
%t64 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 0
%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
%t69 = insertvalue %S.ast.Type %t63, { ptr, i64, i64 } %t68, 3
store %S.ast.Type %t69, ptr %a70
%t71 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 3
%t72 = load i1, ptr %t71
br i1 %t72, label %then7108, label %endif7110
then7108:
%t73 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3
%t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1
%t75 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0
%t76 = load { ptr, i64, i64 }, ptr %t75
store { ptr, i64, i64 } %t76, ptr %a77
%t78 = call i64 @finch_str_to_int(ptr %a77, ptr @.str.4619, i64 4095)
store i64 -1, ptr %a79
%t80 = load i64, ptr %t74
%t81 = load ptr, ptr %t73
store i64 0, ptr %a82
br label %find.cond7111
find.cond7111:
%t83 = load i64, ptr %a82
%t84 = icmp slt i64 %t83, %t80
br i1 %t84, label %find.body7112, label %find.end7115
find.body7112:
%t85 = getelementptr inbounds i64, ptr %t81, i64 %t83
%t86 = load i64, ptr %t85
%t87 = icmp eq i64 %t86, %t78
br i1 %t87, label %find.hit7113, label %find.next7114
find.hit7113:
store i64 %t83, ptr %a79
br label %find.end7115
find.next7114:
%t88 = add i64 %t83, 1
store i64 %t88, ptr %a82
br label %find.cond7111
find.end7115:
%t89 = load i64, ptr %a79
%t90 = icmp sge i64 %t89, 0
%t91 = xor i1 %t90, true
br i1 %t91, label %then7116, label %endif7118
then7116:
%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 %range7119, label %inrange7120
range7119:
call void @finch_panic_index(ptr @.str.4620, i64 4096, i64 0, i64 %t95)
unreachable
inrange7120:
%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 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0
%t101 = load { ptr, i64, i64 }, ptr %t100
store { ptr, i64, i64 } %t101, ptr %a103
store { ptr, i64, i64 } { ptr @.str.4621, i64 37, i64 0 }, ptr %a104
call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104)
%t105 = load { ptr, i64, i64 }, ptr %a102
%t106 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1
%t107 = load { ptr, i64, i64 }, ptr %t106
store { ptr, i64, i64 } %t105, 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
call void @finch.gen.fail(ptr %t92, %S.ast.Node %t99, { ptr, i64, i64 } %t111)
br label %endif7118
endif7118:
%t112 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0
%t113 = load { ptr, i64, i64 }, ptr %t112
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 = load %S.ast.Type, ptr %a70
store %S.ast.Type %t118, ptr %a119
call void @finch.copy.S_ast_Type(ptr %a120, ptr %a119)
%t121 = load %S.ast.Type, ptr %a120
%t122 = insertvalue %S.gen.Val %t117, %S.ast.Type %t121, 1
ret %S.gen.Val %t122
endif7110:
%t123 = load ptr, ptr %a1
%t124 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0
%t125 = load { ptr, i64, i64 }, ptr %t124
%t126 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 1
%t127 = load %S.ast.Type, ptr %t126
%t128 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4622, i64 3, i64 0 })
%t129 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t123, { ptr, i64, i64 } %t125, %S.ast.Type %t127, %S.ast.Type %t128)
store { ptr, i64, i64 } %t129, ptr %a130
store { ptr, i64, i64 } { ptr @.str.4623, i64 0, i64 0 }, ptr %a131
%t132 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3
%t133 = getelementptr inbounds { ptr, i64, i64 }, ptr %t132, i32 0, i32 1
%t134 = load i64, ptr %t133
store i64 0, ptr %a135
br label %for.cond7121
for.cond7121:
%t136 = load i64, ptr %a135
%t137 = icmp slt i64 %t136, %t134
br i1 %t137, label %for.body7122, label %for.end7124
for.body7122:
%t138 = load ptr, ptr %a1
%t139 = load { ptr, i64, i64 }, ptr %a130
store { ptr, i64, i64 } { ptr @.str.4624, i64 12, i64 0 }, ptr %a141
store { ptr, i64, i64 } %t139, ptr %a142
call void @finch_str_concat(ptr %a140, ptr %a141, ptr %a142)
%t143 = load { ptr, i64, i64 }, ptr %a140
store { ptr, i64, i64 } %t143, ptr %a145
store { ptr, i64, i64 } { ptr @.str.4625, i64 2, i64 0 }, ptr %a146
call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146)
%t147 = load { ptr, i64, i64 }, ptr %a144
%t148 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3
%t149 = load i64, ptr %a135
%t150 = load { ptr, i64, i64 }, ptr %t148
%t151 = extractvalue { ptr, i64, i64 } %t150, 1
%t152 = icmp uge i64 %t149, %t151
br i1 %t152, label %range7125, label %inrange7126
range7125:
call void @finch_panic_index(ptr @.str.4626, i64 4103, i64 %t149, i64 %t151)
unreachable
inrange7126:
%t153 = extractvalue { ptr, i64, i64 } %t150, 0
%t154 = getelementptr inbounds i64, ptr %t153, i64 %t149
%t155 = load i64, ptr %t154
call void @finch_str_from_int(ptr %a156, i64 %t155)
%t157 = load { ptr, i64, i64 }, ptr %a156
store { ptr, i64, i64 } %t147, ptr %a159
store { ptr, i64, i64 } %t157, ptr %a160
call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160)
%t161 = load { ptr, i64, i64 }, ptr %a158
%t162 = call { ptr, i64, i64 } @finch.gen.op(ptr %t138, { ptr, i64, i64 } %t161)
store { ptr, i64, i64 } %t162, ptr %a163
%t164 = load i64, ptr %a135
%t165 = icmp eq i64 %t164, 0
br i1 %t165, label %then7127, label %else7128
then7127:
%t166 = load { ptr, i64, i64 }, ptr %a163
store { ptr, i64, i64 } %t166, ptr %a167
call void @finch_str_copy(ptr %a168, ptr %a167)
%t169 = load { ptr, i64, i64 }, ptr %a168
store { ptr, i64, i64 } %t169, ptr %a131
br label %endif7129
else7128:
%t170 = load ptr, ptr %a1
%t171 = load { ptr, i64, i64 }, ptr %a131
store { ptr, i64, i64 } { ptr @.str.4627, i64 6, i64 0 }, ptr %a173
store { ptr, i64, i64 } %t171, ptr %a174
call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174)
%t175 = load { ptr, i64, i64 }, ptr %a172
store { ptr, i64, i64 } %t175, ptr %a177
store { ptr, i64, i64 } { ptr @.str.4628, i64 2, i64 0 }, ptr %a178
call void @finch_str_concat(ptr %a176, ptr %a177, ptr %a178)
%t179 = load { ptr, i64, i64 }, ptr %a176
%t180 = load { ptr, i64, i64 }, ptr %a163
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)
%t184 = load { ptr, i64, i64 }, ptr %a181
%t185 = call { ptr, i64, i64 } @finch.gen.op(ptr %t170, { ptr, i64, i64 } %t184)
store { ptr, i64, i64 } %t185, ptr %a131
br label %endif7129
endif7129:
br label %for.step7123
for.step7123:
%t186 = load i64, ptr %a135
%t187 = add i64 %t186, 1
store i64 %t187, ptr %a135
br label %for.cond7121
for.end7124:
%t188 = load ptr, ptr %a1
%t189 = load ptr, ptr %a1
%t190 = load { ptr, i64, i64 }, ptr %a131
store { ptr, i64, i64 } { ptr @.str.4629, i64 7, 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.4630, i64 6, i64 0 }, ptr %a197
call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197)
%t198 = load { ptr, i64, i64 }, ptr %a195
%t199 = call { ptr, i64, i64 } @finch.gen.op(ptr %t189, { ptr, i64, i64 } %t198)
%t200 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1
%t201 = load { ptr, i64, i64 }, ptr %t200
store { ptr, i64, i64 } { ptr @.str.4631, i64 32, i64 0 }, ptr %a203
store { ptr, i64, i64 } %t201, ptr %a204
call void @finch_str_concat(ptr %a202, ptr %a203, ptr %a204)
%t205 = load { ptr, i64, i64 }, ptr %a202
%t206 = load %S.ast.Node, ptr %a2
call void @finch.gen.panicIf(ptr %t188, { ptr, i64, i64 } %t199, { ptr, i64, i64 } %t205, %S.ast.Node %t206)
%t207 = load ptr, ptr %a1
%t208 = load { ptr, i64, i64 }, ptr %a130
store { ptr, i64, i64 } { ptr @.str.4632, i64 10, i64 0 }, ptr %a210
store { ptr, i64, i64 } %t208, ptr %a211
call void @finch_str_concat(ptr %a209, ptr %a210, ptr %a211)
%t212 = load { ptr, i64, i64 }, ptr %a209
store { ptr, i64, i64 } %t212, ptr %a214
store { ptr, i64, i64 } { ptr @.str.4633, i64 7, i64 0 }, ptr %a215
call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215)
%t216 = load { ptr, i64, i64 }, ptr %a213
%t217 = call { ptr, i64, i64 } @finch.gen.op(ptr %t207, { ptr, i64, i64 } %t216)
%t218 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t217, 0
%t219 = load %S.ast.Type, ptr %a70
store %S.ast.Type %t219, ptr %a220
call void @finch.copy.S_ast_Type(ptr %a221, ptr %a220)
%t222 = load %S.ast.Type, ptr %a221
%t223 = insertvalue %S.gen.Val %t218, %S.ast.Type %t222, 1
ret %S.gen.Val %t223
}
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.4634, 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.from7130
logic.from7130:
br i1 %t8, label %logic.end7132, label %logic.rhs7131
logic.rhs7131:
%t9 = load %S.ast.Type, ptr %a2
%t10 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t9)
br label %logic.rend7133
logic.rend7133:
br label %logic.end7132
logic.end7132:
%t11 = phi i1 [ true, %logic.from7130 ], [ %t10, %logic.rend7133 ]
br i1 %t11, label %then7134, label %endif7136
then7134:
%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 %then7137, label %endif7139
then7137:
ret { ptr, i64, i64 } { ptr @.str.4635, i64 8, i64 0 }
endif7139:
br label %endif7136
endif7136:
%t15 = load %S.ast.Type, ptr %a2
%t16 = call i1 @finch.gen.isSigned(%S.ast.Type %t15)
br label %logic.from7140
logic.from7140:
br i1 %t16, label %logic.end7142, label %logic.rhs7141
logic.rhs7141:
%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.4636, 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.from7143
logic.from7143:
br i1 %t22, label %logic.rhs7144, label %logic.end7145
logic.rhs7144:
%t23 = load ptr, ptr %a1
%t24 = icmp eq ptr %t23, null
br i1 %t24, label %panic7146, label %ok7147
panic7146:
call void @finch_panic(ptr @.str.4637, i64 4123, ptr @.str.4638)
unreachable
ok7147:
%t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 29
%t26 = load %S.platform.Target, ptr %t25
%t27 = call i1 @finch.platform.charIsSigned(%S.platform.Target %t26)
br label %logic.rend7148
logic.rend7148:
br label %logic.end7145
logic.end7145:
%t28 = phi i1 [ false, %logic.from7143 ], [ %t27, %logic.rend7148 ]
br label %logic.rend7149
logic.rend7149:
br label %logic.end7142
logic.end7142:
%t29 = phi i1 [ true, %logic.from7140 ], [ %t28, %logic.rend7149 ]
br label %logic.from7150
logic.from7150:
br i1 %t29, label %logic.rhs7151, label %logic.end7152
logic.rhs7151:
%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.rend7153
logic.rend7153:
br label %logic.end7152
logic.end7152:
%t33 = phi i1 [ false, %logic.from7150 ], [ %t32, %logic.rend7153 ]
br i1 %t33, label %then7154, label %endif7156
then7154:
ret { ptr, i64, i64 } { ptr @.str.4639, i64 8, i64 0 }
endif7156:
%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.4640, 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.from7157
logic.from7157:
br i1 %t39, label %logic.rhs7158, label %logic.end7159
logic.rhs7158:
%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.rend7160
logic.rend7160:
br label %logic.end7159
logic.end7159:
%t43 = phi i1 [ false, %logic.from7157 ], [ %t42, %logic.rend7160 ]
br i1 %t43, label %then7161, label %endif7163
then7161:
ret { ptr, i64, i64 } { ptr @.str.4641, i64 8, i64 0 }
endif7163:
ret { ptr, i64, i64 } { ptr @.str.4642, 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.4643, 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 %then7164, label %endif7166
then7164:
ret { ptr, i64, i64 } { ptr @.str.4644, i64 3, i64 0 }
endif7166:
%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
%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
%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
%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
%a81 = alloca { ptr, i64, i64 }, align 16
%a82 = alloca { ptr, i64, i64 }, align 16
%a83 = 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
%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 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
%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
%a139 = alloca { ptr, i64, i64 }, align 16
%a140 = alloca { ptr, i64, i64 }, align 16
%a141 = alloca { ptr, i64, i64 }, align 16
%a144 = 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
%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
%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
%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
%a184 = alloca { ptr, i64, i64 }, align 16
%a185 = alloca { ptr, i64, i64 }, align 16
%a192 = alloca %S.ast.Type, align 16
%a198 = alloca { ptr, i64, i64 }, align 16
%a200 = alloca i64, align 16
%a208 = alloca %S.ast.Type, align 16
%a213 = alloca %S.ast.Type, align 16
%a221 = alloca %S.ast.Type, align 16
%a222 = alloca %S.ast.Type, align 16
%a234 = alloca %S.gen.Plan, align 16
%a235 = alloca { ptr, i64, i64 }, align 16
%a236 = alloca { ptr, i64, i64 }, align 16
%a237 = 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
%a253 = alloca { ptr, i64, i64 }, 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
%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
%a274 = alloca { ptr, i64, i64 }, align 16
%a275 = alloca { ptr, i64, i64 }, align 16
%a276 = alloca { ptr, i64, i64 }, align 16
%a285 = alloca i64, align 16
%a300 = alloca %S.ast.Type, align 16
%a301 = alloca %S.ast.Type, align 16
%a303 = alloca %S.ast.Type, align 16
%a312 = alloca %S.gen.Abi, align 16
%a313 = alloca %S.gen.Abi, align 16
%a315 = alloca %S.gen.Abi, 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
%a345 = alloca { ptr, i64, i64 }, align 16
%a346 = alloca { ptr, i64, i64 }, align 16
%a347 = 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
%a356 = alloca %S.gen.Val, align 16
%a359 = alloca { ptr, i64, i64 }, align 16
%a360 = alloca { ptr, i64, i64 }, align 16
%a368 = 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
%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
%a398 = alloca { ptr, i64, i64 }, align 16
%a399 = 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
%a412 = alloca { ptr, i64, i64 }, align 16
%a413 = alloca { ptr, i64, i64 }, align 16
%a414 = alloca { ptr, i64, i64 }, align 16
%a422 = alloca { ptr, i64, i64 }, align 16
%a423 = alloca { ptr, i64, i64 }, align 16
%a431 = 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
%a456 = alloca { ptr, i64, i64 }, align 16
%a457 = alloca { ptr, i64, i64 }, align 16
%a462 = alloca { ptr, i64, i64 }, align 16
%a473 = alloca 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
%a492 = alloca { ptr, i64, i64 }, align 16
%a493 = 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
%a505 = alloca { ptr, i64, i64 }, align 16
%a515 = alloca { ptr, i64, i64 }, align 16
%a516 = alloca { ptr, i64, i64 }, align 16
%a531 = alloca { ptr, i64, i64 }, align 16
%a532 = alloca { ptr, i64, i64 }, align 16
%a533 = 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
%a553 = alloca { ptr, i64, i64 }, align 16
%a554 = alloca { ptr, i64, i64 }, align 16
%a555 = alloca { ptr, i64, i64 }, align 16
%a563 = alloca { ptr, i64, i64 }, align 16
%a564 = 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
%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
%a597 = alloca { ptr, i64, i64 }, align 16
%a598 = alloca { ptr, i64, i64 }, align 16
%a599 = alloca { ptr, i64, i64 }, align 16
%a615 = alloca %S.gen.Val, align 16
%a618 = alloca %S.ast.Type, align 16
%a619 = alloca %S.ast.Type, align 16
%a621 = alloca %S.ast.Type, align 16
%a624 = alloca { ptr, i64, i64 }, align 16
%a625 = alloca { ptr, i64, i64 }, align 16
%a639 = alloca { ptr, i64, i64 }, align 16
%a640 = alloca { ptr, i64, i64 }, align 16
%a645 = alloca { ptr, i64, i64 }, align 16
%a646 = 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
%a667 = alloca { ptr, i64, i64 }, align 16
%a668 = alloca { ptr, i64, i64 }, align 16
%a679 = alloca { ptr, i64, i64 }, align 16
%a680 = alloca { ptr, i64, i64 }, align 16
%a689 = alloca { ptr, i64, i64 }, align 16
%a690 = 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
%a700 = alloca { ptr, i64, i64 }, align 16
%a701 = alloca { ptr, i64, i64 }, align 16
%a702 = alloca { ptr, i64, i64 }, align 16
%a710 = alloca { ptr, i64, i64 }, align 16
%a711 = 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
%a734 = alloca { ptr, i64, i64 }, align 16
%a735 = alloca { ptr, i64, i64 }, align 16
%a736 = 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
%a754 = alloca { ptr, i64, i64 }, align 16
%a755 = alloca { ptr, i64, i64 }, align 16
%a761 = 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
%a777 = alloca i64, align 16
%a780 = alloca i64, align 16
%a785 = alloca { ptr, i64, i64 }, align 16
%a786 = 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
%a816 = alloca { ptr, i64, i64 }, align 16
%a817 = alloca { ptr, i64, i64 }, align 16
%a818 = 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
%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
%a835 = alloca { ptr, i64, i64 }, align 16
%a836 = alloca { ptr, i64, i64 }, align 16
%a837 = 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
%a844 = alloca { ptr, i64, i64 }, align 16
%a845 = 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
%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
%a857 = alloca { ptr, i64, i64 }, align 16
%a858 = 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
%a871 = alloca { ptr, i64, i64 }, align 16
%a872 = alloca { ptr, i64, i64 }, align 16
%a873 = 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
%a880 = alloca { ptr, i64, i64 }, align 16
%a881 = alloca { ptr, i64, i64 }, align 16
%a882 = alloca { ptr, i64, i64 }, align 16
%a885 = alloca { ptr, i64, i64 }, align 16
%a886 = alloca { ptr, i64, i64 }, align 16
%a887 = 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
%a899 = alloca { ptr, i64, i64 }, align 16
%a900 = alloca { ptr, i64, i64 }, align 16
%a901 = 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
%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
%a918 = alloca { ptr, i64, i64 }, align 16
%a919 = 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
%a925 = alloca { ptr, i64, i64 }, align 16
%a926 = alloca { ptr, i64, i64 }, align 16
%a927 = alloca { ptr, i64, i64 }, align 16
%a929 = alloca { ptr, i64, i64 }, align 16
%a932 = alloca { ptr, i64, i64 }, align 16
%a933 = alloca { ptr, i64, i64 }, align 16
%a939 = alloca %S.ast.Type, align 16
%a940 = alloca %S.ast.Type, align 16
%a955 = alloca %S.ast.Type, align 16
%a956 = alloca %S.ast.Type, align 16
%a962 = alloca { ptr, i64, i64 }, align 16
%a966 = alloca { ptr, i64, i64 }, align 16
%a967 = alloca { ptr, i64, i64 }, align 16
%a972 = alloca { ptr, i64, i64 }, align 16
%a987 = alloca %S.ast.Type, align 16
%a988 = alloca %S.ast.Type, align 16
%a993 = alloca { ptr, i64, i64 }, align 16
%a994 = alloca { ptr, i64, i64 }, align 16
%a999 = 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
%a1008 = alloca { ptr, i64, i64 }, align 16
%a1009 = alloca { ptr, i64, i64 }, align 16
%a1010 = 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
%a1017 = alloca { ptr, i64, i64 }, align 16
%a1018 = alloca { ptr, i64, i64 }, align 16
%a1019 = alloca { ptr, i64, i64 }, align 16
%a1026 = alloca %S.ast.Type, align 16
%a1027 = alloca %S.ast.Type, align 16
%a1031 = alloca { ptr, i64, i64 }, align 16
%a1032 = alloca { ptr, i64, i64 }, align 16
%a1036 = alloca %S.ast.Type, align 16
%a1037 = 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 %panic7167, label %ok7168
panic7167:
call void @finch_panic(ptr @.str.4645, i64 4140, ptr @.str.4646)
unreachable
ok7168:
%t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 26
%t7 = load i1, ptr %t6
br i1 %t7, label %then7169, label %endif7171
then7169:
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.cond7172
each.cond7172:
%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.body7173, label %each.end7175
each.body7173:
%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.step7174
each.step7174:
%t26 = load i64, ptr %a10
%t27 = add i64 %t26, 1
store i64 %t27, ptr %a10
br label %each.cond7172
each.end7175:
%t28 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4
%t29 = load i1, ptr %t28
br i1 %t29, label %then7176, label %endif7178
then7176:
%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.4647, i64 3, i64 0 }, ptr %t34
store i64 %t32, ptr %t30
br label %endif7178
endif7178:
%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.4648, 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.4649, 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 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 2
%t53 = load %S.ast.Type, ptr %t52
%t54 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t53)
store { ptr, i64, i64 } %t51, ptr %a56
store { ptr, i64, i64 } %t54, ptr %a57
call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57)
%t58 = load { ptr, i64, i64 }, ptr %a55
store { ptr, i64, i64 } %t58, ptr %a60
store { ptr, i64, i64 } { ptr @.str.4650, i64 1, i64 0 }, ptr %a61
call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61)
%t62 = load { ptr, i64, i64 }, ptr %a59
%t63 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0
%t64 = load { ptr, i64, i64 }, ptr %t63
store { ptr, i64, i64 } %t62, ptr %a66
store { ptr, i64, i64 } %t64, ptr %a67
call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67)
%t68 = load { ptr, i64, i64 }, ptr %a65
store { ptr, i64, i64 } %t68, ptr %a70
store { ptr, i64, i64 } { ptr @.str.4651, i64 1, i64 0 }, ptr %a71
call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71)
%t72 = load { ptr, i64, i64 }, ptr %a69
%t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.4652, i64 2, i64 0 }, ptr %a74
call void @finch_str_join(ptr %a75, ptr %a8, ptr %a74)
%t76 = load { ptr, i64, i64 }, ptr %a75
store { ptr, i64, i64 } %t72, 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.4653, i64 5, i64 0 }, ptr %a83
call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83)
%t84 = load { ptr, i64, i64 }, ptr %a81
call void @finch.gen.noteRef(ptr %t35, %S.ast.Node %t36, i64 %t38, i64 %t41, { ptr, i64, i64 } %t84, { ptr, i64, i64 } { ptr @.str.4654, i64 0, i64 0 }, i64 0, i64 0)
br label %endif7171
endif7171:
%t85 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 5
%t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1
%t87 = load i64, ptr %t86
%t88 = icmp sgt i64 %t87, 0
br i1 %t88, label %then7179, label %endif7181
then7179:
%t89 = load ptr, ptr %a1
%t90 = load %S.ast.Node, ptr %a2
%t91 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0
%t92 = load { ptr, i64, i64 }, ptr %t91
store { ptr, i64, i64 } { ptr @.str.4655, i64 16, i64 0 }, ptr %a94
store { ptr, i64, i64 } %t92, 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 %a98
store { ptr, i64, i64 } { ptr @.str.4656, i64 35, i64 0 }, ptr %a99
call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99)
%t100 = load { ptr, i64, i64 }, ptr %a97
%t101 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 5
%t102 = load { ptr, i64, i64 }, ptr %t101
store { ptr, i64, i64 } %t100, 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
call void @finch.gen.fail(ptr %t89, %S.ast.Node %t90, { ptr, i64, i64 } %t106)
br label %endif7181
endif7181:
%t107 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t108 = getelementptr inbounds { ptr, i64, i64 }, ptr %t107, i32 0, i32 1
%t109 = load i64, ptr %t108
store i64 %t109, ptr %a110
%t111 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4
%t112 = load i1, ptr %t111
br i1 %t112, label %then7182, label %else7183
then7182:
%t113 = load i64, ptr %a110
%t114 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3
%t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1
%t116 = load i64, ptr %t115
%t117 = icmp slt i64 %t113, %t116
br i1 %t117, label %then7185, label %endif7187
then7185:
%t118 = load ptr, ptr %a1
%t119 = load %S.ast.Node, ptr %a2
%t120 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0
%t121 = load { ptr, i64, i64 }, ptr %t120
store { ptr, i64, i64 } { ptr @.str.4657, 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.4658, i64 17, i64 0 }, ptr %a128
call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128)
%t129 = load { ptr, i64, i64 }, ptr %a126
%t130 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3
%t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t130, i32 0, i32 1
%t132 = load i64, ptr %t131
call void @finch_str_from_int(ptr %a133, i64 %t132)
%t134 = load { ptr, i64, i64 }, ptr %a133
store { ptr, i64, i64 } %t129, 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.4659, i64 22, i64 0 }, ptr %a141
call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141)
%t142 = load { ptr, i64, i64 }, ptr %a139
%t143 = load i64, ptr %a110
call void @finch_str_from_int(ptr %a144, i64 %t143)
%t145 = load { ptr, i64, i64 }, ptr %a144
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)
%t149 = load { ptr, i64, i64 }, ptr %a146
call void @finch.gen.fail(ptr %t118, %S.ast.Node %t119, { ptr, i64, i64 } %t149)
br label %endif7187
endif7187:
br label %endif7184
else7183:
%t150 = load i64, ptr %a110
%t151 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3
%t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1
%t153 = load i64, ptr %t152
%t154 = icmp ne i64 %t150, %t153
br i1 %t154, label %then7188, label %endif7190
then7188:
%t155 = load ptr, ptr %a1
%t156 = load %S.ast.Node, ptr %a2
%t157 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0
%t158 = load { ptr, i64, i64 }, ptr %t157
store { ptr, i64, i64 } { ptr @.str.4660, i64 1, 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.4661, i64 8, i64 0 }, ptr %a165
call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165)
%t166 = load { ptr, i64, i64 }, ptr %a163
%t167 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3
%t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1
%t169 = load i64, ptr %t168
call void @finch_str_from_int(ptr %a170, i64 %t169)
%t171 = load { ptr, i64, i64 }, ptr %a170
store { ptr, i64, i64 } %t166, ptr %a173
store { ptr, i64, i64 } %t171, ptr %a174
call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174)
%t175 = load { ptr, i64, i64 }, ptr %a172
store { ptr, i64, i64 } %t175, ptr %a177
store { ptr, i64, i64 } { ptr @.str.4662, i64 22, i64 0 }, ptr %a178
call void @finch_str_concat(ptr %a176, ptr %a177, ptr %a178)
%t179 = load { ptr, i64, i64 }, ptr %a176
%t180 = load i64, ptr %a110
call void @finch_str_from_int(ptr %a181, i64 %t180)
%t182 = load { ptr, i64, i64 }, ptr %a181
store { ptr, i64, i64 } %t179, 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
call void @finch.gen.fail(ptr %t155, %S.ast.Node %t156, { ptr, i64, i64 } %t186)
br label %endif7190
endif7190:
br label %endif7184
endif7184:
%t187 = load ptr, ptr %a1
%t188 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 2
%t189 = load %S.ast.Type, ptr %t188
%t190 = load %S.ast.Node, ptr %a2
%t191 = call %S.ast.Type @finch.gen.resolve(ptr %t187, %S.ast.Type %t189, %S.ast.Node %t190)
store %S.ast.Type %t191, ptr %a192
%t193 = load ptr, ptr %a1
%t194 = load %S.ast.Node, ptr %a2
%t195 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0
%t196 = load { ptr, i64, i64 }, ptr %t195
%t197 = load %S.ast.Type, ptr %a192
call void @finch.gen.checkByValue(ptr %t193, %S.ast.Node %t194, { ptr, i64, i64 } %t196, %S.ast.Type %t197, { ptr, i64, i64 } { ptr @.str.4663, i64 7, i64 0 })
store { ptr, i64, i64 } zeroinitializer, ptr %a198
%t199 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3
store i64 0, ptr %a200
br label %each.cond7191
each.cond7191:
%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.body7192, label %each.end7194
each.body7192:
%t205 = load ptr, ptr %t199
%t206 = getelementptr inbounds %S.ast.Type, ptr %t205, i64 %t203
%t207 = load %S.ast.Type, ptr %t206
store %S.ast.Type %t207, ptr %a208
%t209 = load ptr, ptr %a1
%t210 = load %S.ast.Type, ptr %a208
%t211 = load %S.ast.Node, ptr %a2
%t212 = call %S.ast.Type @finch.gen.resolve(ptr %t209, %S.ast.Type %t210, %S.ast.Node %t211)
store %S.ast.Type %t212, ptr %a213
%t214 = load ptr, ptr %a1
%t215 = load %S.ast.Node, ptr %a2
%t216 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0
%t217 = load { ptr, i64, i64 }, ptr %t216
%t218 = load %S.ast.Type, ptr %a213
call void @finch.gen.checkByValue(ptr %t214, %S.ast.Node %t215, { ptr, i64, i64 } %t217, %S.ast.Type %t218, { ptr, i64, i64 } { ptr @.str.4664, i64 5, i64 0 })
%t219 = getelementptr inbounds { ptr, i64, i64 }, ptr %a198, i32 0, i32 1
%t220 = load %S.ast.Type, ptr %a213
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 %a198, i64 %t225, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64))
%t226 = load ptr, ptr %a198
%t227 = getelementptr inbounds %S.ast.Type, ptr %t226, i64 %t224
store %S.ast.Type %t223, ptr %t227
store i64 %t225, ptr %t219
br label %each.step7193
each.step7193:
%t228 = load i64, ptr %a200
%t229 = add i64 %t228, 1
store i64 %t229, ptr %a200
br label %each.cond7191
each.end7194:
%t230 = load ptr, ptr %a1
%t231 = load %S.ast.Type, ptr %a192
%t232 = load { ptr, i64, i64 }, ptr %a198
%t233 = call %S.gen.Plan @finch.gen.makePlan(ptr %t230, %S.ast.Type %t231, { ptr, i64, i64 } %t232)
store %S.gen.Plan %t233, ptr %a234
store { ptr, i64, i64 } zeroinitializer, ptr %a235
store { ptr, i64, i64 } zeroinitializer, ptr %a236
store { ptr, i64, i64 } { ptr @.str.4665, i64 0, i64 0 }, ptr %a237
%t238 = getelementptr inbounds %S.gen.Plan, ptr %a234, i32 0, i32 3
%t239 = load i1, ptr %t238
br i1 %t239, label %then7195, label %endif7197
then7195:
%t240 = load ptr, ptr %a1
%t241 = load ptr, ptr %a1
%t242 = load %S.ast.Type, ptr %a192
%t243 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t241, %S.ast.Type %t242)
%t244 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t240, { ptr, i64, i64 } %t243)
store { ptr, i64, i64 } %t244, ptr %a237
%t245 = getelementptr inbounds { ptr, i64, i64 }, ptr %a235, i32 0, i32 1
%t246 = load ptr, ptr %a1
%t247 = load %S.ast.Type, ptr %a192
%t248 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t246, %S.ast.Type %t247)
store { ptr, i64, i64 } { ptr @.str.4666, i64 9, 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
store { ptr, i64, i64 } %t252, ptr %a254
store { ptr, i64, i64 } { ptr @.str.4667, i64 10, i64 0 }, ptr %a255
call void @finch_str_concat(ptr %a253, ptr %a254, ptr %a255)
%t256 = load { ptr, i64, i64 }, ptr %a253
%t257 = load i64, ptr %t245
%t258 = add i64 %t257, 1
call void @finch_arr_reserve(ptr %a235, i64 %t258, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t259 = load ptr, ptr %a235
%t260 = getelementptr inbounds { ptr, i64, i64 }, ptr %t259, i64 %t257
store { ptr, i64, i64 } %t256, ptr %t260
store i64 %t258, ptr %t245
%t261 = getelementptr inbounds { ptr, i64, i64 }, ptr %a236, i32 0, i32 1
%t262 = load ptr, ptr %a1
%t263 = load %S.ast.Type, ptr %a192
%t264 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t262, %S.ast.Type %t263)
store { ptr, i64, i64 } { ptr @.str.4668, i64 9, 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.4669, i64 11, i64 0 }, ptr %a271
call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271)
%t272 = load { ptr, i64, i64 }, ptr %a269
%t273 = load { ptr, i64, i64 }, ptr %a237
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)
%t277 = load { ptr, i64, i64 }, ptr %a274
%t278 = load i64, ptr %t261
%t279 = add i64 %t278, 1
call void @finch_arr_reserve(ptr %a236, i64 %t279, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t280 = load ptr, ptr %a236
%t281 = getelementptr inbounds { ptr, i64, i64 }, ptr %t280, i64 %t278
store { ptr, i64, i64 } %t277, ptr %t281
store i64 %t279, ptr %t261
br label %endif7197
endif7197:
%t282 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1
%t284 = load i64, ptr %t283
store i64 0, ptr %a285
br label %for.cond7198
for.cond7198:
%t286 = load i64, ptr %a285
%t287 = icmp slt i64 %t286, %t284
br i1 %t287, label %for.body7199, label %for.end7201
for.body7199:
%t288 = load i64, ptr %a285
%t289 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3
%t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t289, i32 0, i32 1
%t291 = load i64, ptr %t290
%t292 = icmp slt i64 %t288, %t291
br i1 %t292, label %then7202, label %endif7204
then7202:
%t293 = load i64, ptr %a285
%t294 = load { ptr, i64, i64 }, ptr %a198
%t295 = extractvalue { ptr, i64, i64 } %t294, 1
%t296 = icmp uge i64 %t293, %t295
br i1 %t296, label %range7205, label %inrange7206
range7205:
call void @finch_panic_index(ptr @.str.4670, i64 4180, i64 %t293, i64 %t295)
unreachable
inrange7206:
%t297 = extractvalue { ptr, i64, i64 } %t294, 0
%t298 = getelementptr inbounds %S.ast.Type, ptr %t297, i64 %t293
%t299 = load %S.ast.Type, ptr %t298
store %S.ast.Type %t299, ptr %a300
call void @finch.copy.S_ast_Type(ptr %a301, ptr %a300)
%t302 = load %S.ast.Type, ptr %a301
store %S.ast.Type %t302, ptr %a303
%t304 = getelementptr inbounds %S.gen.Plan, ptr %a234, i32 0, i32 1
%t305 = load i64, ptr %a285
%t306 = load { ptr, i64, i64 }, ptr %t304
%t307 = extractvalue { ptr, i64, i64 } %t306, 1
%t308 = icmp uge i64 %t305, %t307
br i1 %t308, label %range7207, label %inrange7208
range7207:
call void @finch_panic_index(ptr @.str.4671, i64 4181, i64 %t305, i64 %t307)
unreachable
inrange7208:
%t309 = extractvalue { ptr, i64, i64 } %t306, 0
%t310 = getelementptr inbounds %S.gen.Abi, ptr %t309, i64 %t305
%t311 = load %S.gen.Abi, ptr %t310
store %S.gen.Abi %t311, ptr %a312
call void @finch.copy.S_gen_Abi(ptr %a313, ptr %a312)
%t314 = load %S.gen.Abi, ptr %a313
store %S.gen.Abi %t314, ptr %a315
%t316 = load ptr, ptr %a1
%t317 = load ptr, ptr %a1
%t318 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t319 = load i64, ptr %a285
%t320 = load { ptr, i64, i64 }, ptr %t318
%t321 = extractvalue { ptr, i64, i64 } %t320, 1
%t322 = icmp uge i64 %t319, %t321
br i1 %t322, label %range7209, label %inrange7210
range7209:
call void @finch_panic_index(ptr @.str.4672, i64 4182, i64 %t319, i64 %t321)
unreachable
inrange7210:
%t323 = extractvalue { ptr, i64, i64 } %t320, 0
%t324 = getelementptr inbounds %S.ast.Node, ptr %t323, i64 %t319
%t325 = load %S.ast.Node, ptr %t324
%t326 = load %S.ast.Type, ptr %a303
%t327 = call %S.gen.Val @finch.gen.exprWant(ptr %t317, %S.ast.Node %t325, %S.ast.Type %t326)
%t328 = load %S.ast.Type, ptr %a303
%t329 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t330 = load i64, ptr %a285
%t331 = load { ptr, i64, i64 }, ptr %t329
%t332 = extractvalue { ptr, i64, i64 } %t331, 1
%t333 = icmp uge i64 %t330, %t332
br i1 %t333, label %range7211, label %inrange7212
range7211:
call void @finch_panic_index(ptr @.str.4673, i64 4182, i64 %t330, i64 %t332)
unreachable
inrange7212:
%t334 = extractvalue { ptr, i64, i64 } %t331, 0
%t335 = getelementptr inbounds %S.ast.Node, ptr %t334, i64 %t330
%t336 = load %S.ast.Node, ptr %t335
%t337 = load i64, ptr %a285
%t338 = add i64 %t337, 1
call void @finch_str_from_int(ptr %a339, i64 %t338)
%t340 = load { ptr, i64, i64 }, ptr %a339
store { ptr, i64, i64 } { ptr @.str.4674, i64 9, i64 0 }, ptr %a342
store { ptr, i64, i64 } %t340, ptr %a343
call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343)
%t344 = load { ptr, i64, i64 }, ptr %a341
store { ptr, i64, i64 } %t344, ptr %a346
store { ptr, i64, i64 } { ptr @.str.4675, i64 4, i64 0 }, ptr %a347
call void @finch_str_concat(ptr %a345, ptr %a346, ptr %a347)
%t348 = load { ptr, i64, i64 }, ptr %a345
%t349 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0
%t350 = load { ptr, i64, i64 }, ptr %t349
store { ptr, i64, i64 } %t348, ptr %a352
store { ptr, i64, i64 } %t350, ptr %a353
call void @finch_str_concat(ptr %a351, ptr %a352, ptr %a353)
%t354 = load { ptr, i64, i64 }, ptr %a351
%t355 = call %S.gen.Val @finch.gen.coerce(ptr %t316, %S.gen.Val %t327, %S.ast.Type %t328, %S.ast.Node %t336, { ptr, i64, i64 } %t354)
store %S.gen.Val %t355, ptr %a356
%t357 = getelementptr inbounds %S.gen.Abi, ptr %a315, i32 0, i32 0
%t358 = load { ptr, i64, i64 }, ptr %t357
store { ptr, i64, i64 } %t358, ptr %a359
store { ptr, i64, i64 } { ptr @.str.4676, i64 6, i64 0 }, ptr %a360
%t361 = call i32 @finch_str_eq(ptr %a359, ptr %a360)
%t362 = icmp ne i32 %t361, 0
br i1 %t362, label %then7213, label %else7214
then7213:
%t363 = load ptr, ptr %a1
%t364 = load ptr, ptr %a1
%t365 = load %S.ast.Type, ptr %a303
%t366 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t364, %S.ast.Type %t365)
%t367 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t363, { ptr, i64, i64 } %t366)
store { ptr, i64, i64 } %t367, ptr %a368
%t369 = load ptr, ptr %a1
%t370 = load ptr, ptr %a1
%t371 = load %S.ast.Type, ptr %a303
%t372 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t370, %S.ast.Type %t371)
%t373 = getelementptr inbounds %S.gen.Val, ptr %a356, i32 0, i32 0
%t374 = load { ptr, i64, i64 }, ptr %t373
%t375 = load { ptr, i64, i64 }, ptr %a368
call void @finch.gen.store(ptr %t369, { ptr, i64, i64 } %t372, { ptr, i64, i64 } %t374, { ptr, i64, i64 } %t375)
%t376 = load ptr, ptr %a1
%t377 = load %S.ast.Type, ptr %a303
%t378 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t376, %S.ast.Type %t377)
store { ptr, i64, i64 } { ptr @.str.4677, i64 10, i64 0 }, ptr %a380
store { ptr, i64, i64 } %t378, ptr %a381
call void @finch_str_concat(ptr %a379, ptr %a380, ptr %a381)
%t382 = load { ptr, i64, i64 }, ptr %a379
store { ptr, i64, i64 } %t382, ptr %a384
store { ptr, i64, i64 } { ptr @.str.4678, i64 8, i64 0 }, ptr %a385
call void @finch_str_concat(ptr %a383, ptr %a384, ptr %a385)
%t386 = load { ptr, i64, i64 }, ptr %a383
%t387 = getelementptr inbounds %S.gen.Abi, ptr %a315, i32 0, i32 3
%t388 = load i64, ptr %t387
call void @finch_str_from_int(ptr %a389, i64 %t388)
%t390 = load { ptr, i64, i64 }, ptr %a389
store { ptr, i64, i64 } %t386, ptr %a392
store { ptr, i64, i64 } %t390, ptr %a393
call void @finch_str_concat(ptr %a391, ptr %a392, ptr %a393)
%t394 = load { ptr, i64, i64 }, ptr %a391
store { ptr, i64, i64 } %t394, ptr %a395
%t396 = getelementptr inbounds { ptr, i64, i64 }, ptr %a235, i32 0, i32 1
%t397 = load { ptr, i64, i64 }, ptr %a395
store { ptr, i64, i64 } %t397, ptr %a398
call void @finch_str_copy(ptr %a399, ptr %a398)
%t400 = load { ptr, i64, i64 }, ptr %a399
%t401 = load i64, ptr %t396
%t402 = add i64 %t401, 1
call void @finch_arr_reserve(ptr %a235, i64 %t402, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t403 = load ptr, ptr %a235
%t404 = getelementptr inbounds { ptr, i64, i64 }, ptr %t403, i64 %t401
store { ptr, i64, i64 } %t400, ptr %t404
store i64 %t402, ptr %t396
%t405 = getelementptr inbounds { ptr, i64, i64 }, ptr %a236, i32 0, i32 1
%t406 = load { ptr, i64, i64 }, ptr %a395
store { ptr, i64, i64 } %t406, ptr %a408
store { ptr, i64, i64 } { ptr @.str.4679, i64 1, i64 0 }, ptr %a409
call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409)
%t410 = load { ptr, i64, i64 }, ptr %a407
%t411 = load { ptr, i64, i64 }, ptr %a368
store { ptr, i64, i64 } %t410, ptr %a413
store { ptr, i64, i64 } %t411, ptr %a414
call void @finch_str_concat(ptr %a412, ptr %a413, ptr %a414)
%t415 = load { ptr, i64, i64 }, ptr %a412
%t416 = load i64, ptr %t405
%t417 = add i64 %t416, 1
call void @finch_arr_reserve(ptr %a236, i64 %t417, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t418 = load ptr, ptr %a236
%t419 = getelementptr inbounds { ptr, i64, i64 }, ptr %t418, i64 %t416
store { ptr, i64, i64 } %t415, ptr %t419
store i64 %t417, ptr %t405
br label %endif7215
else7214:
%t420 = getelementptr inbounds %S.gen.Abi, ptr %a315, i32 0, i32 0
%t421 = load { ptr, i64, i64 }, ptr %t420
store { ptr, i64, i64 } %t421, ptr %a422
store { ptr, i64, i64 } { ptr @.str.4680, i64 8, i64 0 }, ptr %a423
%t424 = call i32 @finch_str_eq(ptr %a422, ptr %a423)
%t425 = icmp ne i32 %t424, 0
br i1 %t425, label %then7216, label %else7217
then7216:
%t426 = load ptr, ptr %a1
%t427 = load ptr, ptr %a1
%t428 = load %S.ast.Type, ptr %a303
%t429 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t427, %S.ast.Type %t428)
%t430 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t426, { ptr, i64, i64 } %t429)
store { ptr, i64, i64 } %t430, ptr %a431
%t432 = load ptr, ptr %a1
%t433 = load ptr, ptr %a1
%t434 = load %S.ast.Type, ptr %a303
%t435 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t433, %S.ast.Type %t434)
%t436 = getelementptr inbounds %S.gen.Val, ptr %a356, i32 0, i32 0
%t437 = load { ptr, i64, i64 }, ptr %t436
%t438 = load { ptr, i64, i64 }, ptr %a431
call void @finch.gen.store(ptr %t432, { ptr, i64, i64 } %t435, { ptr, i64, i64 } %t437, { ptr, i64, i64 } %t438)
%t439 = getelementptr inbounds { ptr, i64, i64 }, ptr %a235, i32 0, i32 1
%t440 = load i64, ptr %t439
%t441 = add i64 %t440, 1
call void @finch_arr_reserve(ptr %a235, i64 %t441, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t442 = load ptr, ptr %a235
%t443 = getelementptr inbounds { ptr, i64, i64 }, ptr %t442, i64 %t440
store { ptr, i64, i64 } { ptr @.str.4681, i64 3, i64 0 }, ptr %t443
store i64 %t441, ptr %t439
%t444 = getelementptr inbounds { ptr, i64, i64 }, ptr %a236, i32 0, i32 1
%t445 = load { ptr, i64, i64 }, ptr %a431
store { ptr, i64, i64 } { ptr @.str.4682, i64 4, i64 0 }, ptr %a447
store { ptr, i64, i64 } %t445, ptr %a448
call void @finch_str_concat(ptr %a446, ptr %a447, ptr %a448)
%t449 = load { ptr, i64, i64 }, ptr %a446
%t450 = load i64, ptr %t444
%t451 = add i64 %t450, 1
call void @finch_arr_reserve(ptr %a236, i64 %t451, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t452 = load ptr, ptr %a236
%t453 = getelementptr inbounds { ptr, i64, i64 }, ptr %t452, i64 %t450
store { ptr, i64, i64 } %t449, ptr %t453
store i64 %t451, ptr %t444
br label %endif7218
else7217:
%t454 = getelementptr inbounds %S.gen.Abi, ptr %a315, i32 0, i32 0
%t455 = load { ptr, i64, i64 }, ptr %t454
store { ptr, i64, i64 } %t455, ptr %a456
store { ptr, i64, i64 } { ptr @.str.4683, i64 6, i64 0 }, ptr %a457
%t458 = call i32 @finch_str_eq(ptr %a456, ptr %a457)
%t459 = icmp ne i32 %t458, 0
br i1 %t459, label %then7219, label %else7220
then7219:
%t460 = load ptr, ptr %a1
%t461 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t460, { ptr, i64, i64 } { ptr @.str.4684, i64 9, i64 0 })
store { ptr, i64, i64 } %t461, ptr %a462
%t463 = load ptr, ptr %a1
%t464 = load ptr, ptr %a1
%t465 = load %S.ast.Type, ptr %a303
%t466 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t464, %S.ast.Type %t465)
%t467 = getelementptr inbounds %S.gen.Val, ptr %a356, i32 0, i32 0
%t468 = load { ptr, i64, i64 }, ptr %t467
%t469 = load { ptr, i64, i64 }, ptr %a462
call void @finch.gen.store(ptr %t463, { ptr, i64, i64 } %t466, { ptr, i64, i64 } %t468, { ptr, i64, i64 } %t469)
%t470 = getelementptr inbounds %S.gen.Abi, ptr %a315, i32 0, i32 1
%t471 = getelementptr inbounds { ptr, i64, i64 }, ptr %t470, i32 0, i32 1
%t472 = load i64, ptr %t471
store i64 0, ptr %a473
br label %for.cond7222
for.cond7222:
%t474 = load i64, ptr %a473
%t475 = icmp slt i64 %t474, %t472
br i1 %t475, label %for.body7223, label %for.end7225
for.body7223:
%t476 = load ptr, ptr %a1
%t477 = getelementptr inbounds %S.gen.Abi, ptr %a315, i32 0, i32 1
%t478 = load i64, ptr %a473
%t479 = load { ptr, i64, i64 }, ptr %t477
%t480 = extractvalue { ptr, i64, i64 } %t479, 1
%t481 = icmp uge i64 %t478, %t480
br i1 %t481, label %range7226, label %inrange7227
range7226:
call void @finch_panic_index(ptr @.str.4685, i64 4198, i64 %t478, i64 %t480)
unreachable
inrange7227:
%t482 = extractvalue { ptr, i64, i64 } %t479, 0
%t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i64 %t478
%t484 = load { ptr, i64, i64 }, ptr %t483
%t485 = load ptr, ptr %a1
%t486 = load { ptr, i64, i64 }, ptr %a462
store { ptr, i64, i64 } { ptr @.str.4686, i64 31, i64 0 }, ptr %a488
store { ptr, i64, i64 } %t486, ptr %a489
call void @finch_str_concat(ptr %a487, ptr %a488, ptr %a489)
%t490 = load { ptr, i64, i64 }, ptr %a487
store { ptr, i64, i64 } %t490, ptr %a492
store { ptr, i64, i64 } { ptr @.str.4687, i64 6, i64 0 }, ptr %a493
call void @finch_str_concat(ptr %a491, ptr %a492, ptr %a493)
%t494 = load { ptr, i64, i64 }, ptr %a491
%t495 = load i64, ptr %a473
%t496 = mul i64 8, %t495
call void @finch_str_from_int(ptr %a497, i64 %t496)
%t498 = load { ptr, i64, i64 }, ptr %a497
store { ptr, i64, i64 } %t494, ptr %a500
store { ptr, i64, i64 } %t498, ptr %a501
call void @finch_str_concat(ptr %a499, ptr %a500, ptr %a501)
%t502 = load { ptr, i64, i64 }, ptr %a499
%t503 = call { ptr, i64, i64 } @finch.gen.op(ptr %t485, { ptr, i64, i64 } %t502)
%t504 = call { ptr, i64, i64 } @finch.gen.load(ptr %t476, { ptr, i64, i64 } %t484, { ptr, i64, i64 } %t503)
store { ptr, i64, i64 } %t504, ptr %a505
%t506 = getelementptr inbounds { ptr, i64, i64 }, ptr %a235, i32 0, i32 1
%t507 = getelementptr inbounds %S.gen.Abi, ptr %a315, i32 0, i32 1
%t508 = load i64, ptr %a473
%t509 = load { ptr, i64, i64 }, ptr %t507
%t510 = extractvalue { ptr, i64, i64 } %t509, 1
%t511 = icmp uge i64 %t508, %t510
br i1 %t511, label %range7228, label %inrange7229
range7228:
call void @finch_panic_index(ptr @.str.4688, i64 4199, i64 %t508, i64 %t510)
unreachable
inrange7229:
%t512 = extractvalue { ptr, i64, i64 } %t509, 0
%t513 = getelementptr inbounds { ptr, i64, i64 }, ptr %t512, i64 %t508
%t514 = load { ptr, i64, i64 }, ptr %t513
store { ptr, i64, i64 } %t514, ptr %a515
call void @finch_str_copy(ptr %a516, ptr %a515)
%t517 = load { ptr, i64, i64 }, ptr %a516
%t518 = load i64, ptr %t506
%t519 = add i64 %t518, 1
call void @finch_arr_reserve(ptr %a235, i64 %t519, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t520 = load ptr, ptr %a235
%t521 = getelementptr inbounds { ptr, i64, i64 }, ptr %t520, i64 %t518
store { ptr, i64, i64 } %t517, ptr %t521
store i64 %t519, ptr %t506
%t522 = getelementptr inbounds { ptr, i64, i64 }, ptr %a236, i32 0, i32 1
%t523 = getelementptr inbounds %S.gen.Abi, ptr %a315, i32 0, i32 1
%t524 = load i64, ptr %a473
%t525 = load { ptr, i64, i64 }, ptr %t523
%t526 = extractvalue { ptr, i64, i64 } %t525, 1
%t527 = icmp uge i64 %t524, %t526
br i1 %t527, label %range7230, label %inrange7231
range7230:
call void @finch_panic_index(ptr @.str.4689, i64 4200, i64 %t524, i64 %t526)
unreachable
inrange7231:
%t528 = extractvalue { ptr, i64, i64 } %t525, 0
%t529 = getelementptr inbounds { ptr, i64, i64 }, ptr %t528, i64 %t524
%t530 = load { ptr, i64, i64 }, ptr %t529
store { ptr, i64, i64 } %t530, ptr %a532
store { ptr, i64, i64 } { ptr @.str.4690, i64 1, i64 0 }, ptr %a533
call void @finch_str_concat(ptr %a531, ptr %a532, ptr %a533)
%t534 = load { ptr, i64, i64 }, ptr %a531
%t535 = load { ptr, i64, i64 }, ptr %a505
store { ptr, i64, i64 } %t534, 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
%t540 = load i64, ptr %t522
%t541 = add i64 %t540, 1
call void @finch_arr_reserve(ptr %a236, i64 %t541, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t542 = load ptr, ptr %a236
%t543 = getelementptr inbounds { ptr, i64, i64 }, ptr %t542, i64 %t540
store { ptr, i64, i64 } %t539, ptr %t543
store i64 %t541, ptr %t522
br label %for.step7224
for.step7224:
%t544 = load i64, ptr %a473
%t545 = add i64 %t544, 1
store i64 %t545, ptr %a473
br label %for.cond7222
for.end7225:
br label %endif7221
else7220:
%t546 = getelementptr inbounds { ptr, i64, i64 }, ptr %a235, i32 0, i32 1
%t547 = load ptr, ptr %a1
%t548 = load %S.ast.Type, ptr %a303
%t549 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t547, %S.ast.Type %t548)
%t550 = load ptr, ptr %a1
%t551 = load %S.ast.Type, ptr %a303
%t552 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t550, %S.ast.Type %t551)
store { ptr, i64, i64 } %t549, ptr %a554
store { ptr, i64, i64 } %t552, ptr %a555
call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555)
%t556 = load { ptr, i64, i64 }, ptr %a553
%t557 = load i64, ptr %t546
%t558 = add i64 %t557, 1
call void @finch_arr_reserve(ptr %a235, i64 %t558, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t559 = load ptr, ptr %a235
%t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %t559, i64 %t557
store { ptr, i64, i64 } %t556, ptr %t560
store i64 %t558, ptr %t546
%t561 = getelementptr inbounds %S.ast.Type, ptr %a303, i32 0, i32 0
%t562 = load { ptr, i64, i64 }, ptr %t561
store { ptr, i64, i64 } %t562, ptr %a563
store { ptr, i64, i64 } { ptr @.str.4691, i64 3, i64 0 }, ptr %a564
%t565 = call i32 @finch_str_eq(ptr %a563, ptr %a564)
%t566 = icmp ne i32 %t565, 0
br i1 %t566, label %then7232, label %else7233
then7232:
%t567 = getelementptr inbounds { ptr, i64, i64 }, ptr %a236, i32 0, i32 1
%t568 = load ptr, ptr %a1
%t569 = getelementptr inbounds %S.gen.Val, ptr %a356, i32 0, i32 0
%t570 = load { ptr, i64, i64 }, ptr %t569
%t571 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t568, { ptr, i64, i64 } %t570)
store { ptr, i64, i64 } { ptr @.str.4692, i64 4, i64 0 }, ptr %a573
store { ptr, i64, i64 } %t571, ptr %a574
call void @finch_str_concat(ptr %a572, ptr %a573, ptr %a574)
%t575 = load { ptr, i64, i64 }, ptr %a572
%t576 = load i64, ptr %t567
%t577 = add i64 %t576, 1
call void @finch_arr_reserve(ptr %a236, i64 %t577, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t578 = load ptr, ptr %a236
%t579 = getelementptr inbounds { ptr, i64, i64 }, ptr %t578, i64 %t576
store { ptr, i64, i64 } %t575, ptr %t579
store i64 %t577, ptr %t567
br label %endif7234
else7233:
%t580 = getelementptr inbounds { ptr, i64, i64 }, ptr %a236, i32 0, i32 1
%t581 = load ptr, ptr %a1
%t582 = load %S.ast.Type, ptr %a303
%t583 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t581, %S.ast.Type %t582)
%t584 = load ptr, ptr %a1
%t585 = load %S.ast.Type, ptr %a303
%t586 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t584, %S.ast.Type %t585)
store { ptr, i64, i64 } %t583, ptr %a588
store { ptr, i64, i64 } %t586, ptr %a589
call void @finch_str_concat(ptr %a587, ptr %a588, ptr %a589)
%t590 = load { ptr, i64, i64 }, ptr %a587
store { ptr, i64, i64 } %t590, ptr %a592
store { ptr, i64, i64 } { ptr @.str.4693, i64 1, i64 0 }, ptr %a593
call void @finch_str_concat(ptr %a591, ptr %a592, ptr %a593)
%t594 = load { ptr, i64, i64 }, ptr %a591
%t595 = getelementptr inbounds %S.gen.Val, ptr %a356, i32 0, i32 0
%t596 = load { ptr, i64, i64 }, ptr %t595
store { ptr, i64, i64 } %t594, ptr %a598
store { ptr, i64, i64 } %t596, ptr %a599
call void @finch_str_concat(ptr %a597, ptr %a598, ptr %a599)
%t600 = load { ptr, i64, i64 }, ptr %a597
%t601 = load i64, ptr %t580
%t602 = add i64 %t601, 1
call void @finch_arr_reserve(ptr %a236, i64 %t602, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t603 = load ptr, ptr %a236
%t604 = getelementptr inbounds { ptr, i64, i64 }, ptr %t603, i64 %t601
store { ptr, i64, i64 } %t600, ptr %t604
store i64 %t602, ptr %t580
br label %endif7234
endif7234:
br label %endif7221
endif7221:
br label %endif7218
endif7218:
br label %endif7215
endif7215:
br label %for.step7200
endif7204:
%t605 = load ptr, ptr %a1
%t606 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t607 = load i64, ptr %a285
%t608 = load { ptr, i64, i64 }, ptr %t606
%t609 = extractvalue { ptr, i64, i64 } %t608, 1
%t610 = icmp uge i64 %t607, %t609
br i1 %t610, label %range7235, label %inrange7236
range7235:
call void @finch_panic_index(ptr @.str.4694, i64 4213, i64 %t607, i64 %t609)
unreachable
inrange7236:
%t611 = extractvalue { ptr, i64, i64 } %t608, 0
%t612 = getelementptr inbounds %S.ast.Node, ptr %t611, i64 %t607
%t613 = load %S.ast.Node, ptr %t612
%t614 = call %S.gen.Val @finch.gen.expr(ptr %t605, %S.ast.Node %t613)
store %S.gen.Val %t614, ptr %a615
%t616 = getelementptr inbounds %S.gen.Val, ptr %a615, i32 0, i32 1
%t617 = load %S.ast.Type, ptr %t616
store %S.ast.Type %t617, ptr %a618
call void @finch.copy.S_ast_Type(ptr %a619, ptr %a618)
%t620 = load %S.ast.Type, ptr %a619
store %S.ast.Type %t620, ptr %a621
%t622 = getelementptr inbounds %S.ast.Type, ptr %a621, i32 0, i32 0
%t623 = load { ptr, i64, i64 }, ptr %t622
store { ptr, i64, i64 } %t623, ptr %a624
store { ptr, i64, i64 } { ptr @.str.4695, i64 4, i64 0 }, ptr %a625
%t626 = call i32 @finch_str_eq(ptr %a624, ptr %a625)
%t627 = icmp ne i32 %t626, 0
br i1 %t627, label %then7237, label %endif7239
then7237:
%t628 = load ptr, ptr %a1
%t629 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t630 = load i64, ptr %a285
%t631 = load { ptr, i64, i64 }, ptr %t629
%t632 = extractvalue { ptr, i64, i64 } %t631, 1
%t633 = icmp uge i64 %t630, %t632
br i1 %t633, label %range7240, label %inrange7241
range7240:
call void @finch_panic_index(ptr @.str.4696, i64 4216, i64 %t630, i64 %t632)
unreachable
inrange7241:
%t634 = extractvalue { ptr, i64, i64 } %t631, 0
%t635 = getelementptr inbounds %S.ast.Node, ptr %t634, i64 %t630
%t636 = load %S.ast.Node, ptr %t635
call void @finch.gen.fail(ptr %t628, %S.ast.Node %t636, { ptr, i64, i64 } { ptr @.str.4697, i64 23, i64 0 })
br label %endif7239
endif7239:
%t637 = getelementptr inbounds %S.ast.Type, ptr %a621, i32 0, i32 0
%t638 = load { ptr, i64, i64 }, ptr %t637
store { ptr, i64, i64 } %t638, ptr %a639
store { ptr, i64, i64 } { ptr @.str.4698, i64 6, i64 0 }, ptr %a640
%t641 = call i32 @finch_str_eq(ptr %a639, ptr %a640)
%t642 = icmp ne i32 %t641, 0
br label %logic.from7242
logic.from7242:
br i1 %t642, label %logic.end7244, label %logic.rhs7243
logic.rhs7243:
%t643 = getelementptr inbounds %S.ast.Type, ptr %a621, i32 0, i32 0
%t644 = load { ptr, i64, i64 }, ptr %t643
store { ptr, i64, i64 } %t644, ptr %a645
store { ptr, i64, i64 } { ptr @.str.4699, i64 5, i64 0 }, ptr %a646
%t647 = call i32 @finch_str_eq(ptr %a645, ptr %a646)
%t648 = icmp ne i32 %t647, 0
br label %logic.rend7245
logic.rend7245:
br label %logic.end7244
logic.end7244:
%t649 = phi i1 [ true, %logic.from7242 ], [ %t648, %logic.rend7245 ]
br i1 %t649, label %then7246, label %endif7248
then7246:
%t650 = load ptr, ptr %a1
%t651 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t652 = load i64, ptr %a285
%t653 = load { ptr, i64, i64 }, ptr %t651
%t654 = extractvalue { ptr, i64, i64 } %t653, 1
%t655 = icmp uge i64 %t652, %t654
br i1 %t655, label %range7249, label %inrange7250
range7249:
call void @finch_panic_index(ptr @.str.4700, i64 4219, i64 %t652, i64 %t654)
unreachable
inrange7250:
%t656 = extractvalue { ptr, i64, i64 } %t653, 0
%t657 = getelementptr inbounds %S.ast.Node, ptr %t656, i64 %t652
%t658 = load %S.ast.Node, ptr %t657
call void @finch.gen.fail(ptr %t650, %S.ast.Node %t658, { ptr, i64, i64 } { ptr @.str.4701, i64 68, i64 0 })
br label %endif7248
endif7248:
%t659 = getelementptr inbounds %S.gen.Val, ptr %a615, i32 0, i32 0
%t660 = load { ptr, i64, i64 }, ptr %t659
store { ptr, i64, i64 } %t660, ptr %a661
call void @finch_str_copy(ptr %a662, ptr %a661)
%t663 = load { ptr, i64, i64 }, ptr %a662
store { ptr, i64, i64 } %t663, ptr %a664
%t665 = getelementptr inbounds %S.ast.Type, ptr %a621, i32 0, i32 0
%t666 = load { ptr, i64, i64 }, ptr %t665
store { ptr, i64, i64 } %t666, ptr %a667
store { ptr, i64, i64 } { ptr @.str.4702, i64 3, i64 0 }, ptr %a668
%t669 = call i32 @finch_str_eq(ptr %a667, ptr %a668)
%t670 = icmp ne i32 %t669, 0
br i1 %t670, label %then7251, label %else7252
then7251:
%t671 = load ptr, ptr %a1
%t672 = load { ptr, i64, i64 }, ptr %a664
%t673 = load %S.ast.Type, ptr %a621
%t674 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4703, i64 5, i64 0 })
%t675 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t671, { ptr, i64, i64 } %t672, %S.ast.Type %t673, %S.ast.Type %t674)
store { ptr, i64, i64 } %t675, ptr %a664
%t676 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4704, i64 5, i64 0 })
store %S.ast.Type %t676, ptr %a621
br label %endif7253
else7252:
%t677 = getelementptr inbounds %S.ast.Type, ptr %a621, i32 0, i32 0
%t678 = load { ptr, i64, i64 }, ptr %t677
store { ptr, i64, i64 } %t678, ptr %a679
store { ptr, i64, i64 } { ptr @.str.4705, i64 3, i64 0 }, ptr %a680
%t681 = call i32 @finch_str_eq(ptr %a679, ptr %a680)
%t682 = icmp ne i32 %t681, 0
br i1 %t682, label %then7254, label %else7255
then7254:
%t683 = load ptr, ptr %a1
%t684 = load { ptr, i64, i64 }, ptr %a664
%t685 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t683, { ptr, i64, i64 } %t684)
store { ptr, i64, i64 } %t685, ptr %a664
%t686 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4706, i64 3, i64 0 })
store %S.ast.Type %t686, ptr %a621
br label %endif7256
else7255:
%t687 = getelementptr inbounds %S.ast.Type, ptr %a621, i32 0, i32 0
%t688 = load { ptr, i64, i64 }, ptr %t687
store { ptr, i64, i64 } %t688, ptr %a689
store { ptr, i64, i64 } { ptr @.str.4707, 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 %then7257, label %else7258
then7257:
%t693 = load ptr, ptr %a1
%t694 = getelementptr inbounds %S.gen.Val, ptr %a615, i32 0, i32 0
%t695 = load { ptr, i64, i64 }, ptr %t694
store { ptr, i64, i64 } { ptr @.str.4708, i64 8, i64 0 }, ptr %a697
store { ptr, i64, i64 } %t695, ptr %a698
call void @finch_str_concat(ptr %a696, ptr %a697, ptr %a698)
%t699 = load { ptr, i64, i64 }, ptr %a696
store { ptr, i64, i64 } %t699, ptr %a701
store { ptr, i64, i64 } { ptr @.str.4709, i64 7, i64 0 }, ptr %a702
call void @finch_str_concat(ptr %a700, ptr %a701, ptr %a702)
%t703 = load { ptr, i64, i64 }, ptr %a700
%t704 = call { ptr, i64, i64 } @finch.gen.op(ptr %t693, { ptr, i64, i64 } %t703)
store { ptr, i64, i64 } %t704, ptr %a664
%t705 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4710, i64 3, i64 0 })
store %S.ast.Type %t705, ptr %a621
br label %endif7259
else7258:
%t706 = load %S.ast.Type, ptr %a621
%t707 = call i1 @finch.gen.isInt(%S.ast.Type %t706)
br label %logic.from7260
logic.from7260:
br i1 %t707, label %logic.end7262, label %logic.rhs7261
logic.rhs7261:
%t708 = getelementptr inbounds %S.ast.Type, ptr %a621, i32 0, i32 0
%t709 = load { ptr, i64, i64 }, ptr %t708
store { ptr, i64, i64 } %t709, ptr %a710
store { ptr, i64, i64 } { ptr @.str.4711, i64 4, i64 0 }, ptr %a711
%t712 = call i32 @finch_str_eq(ptr %a710, ptr %a711)
%t713 = icmp ne i32 %t712, 0
br label %logic.rend7263
logic.rend7263:
br label %logic.end7262
logic.end7262:
%t714 = phi i1 [ true, %logic.from7260 ], [ %t713, %logic.rend7263 ]
br label %logic.from7264
logic.from7264:
br i1 %t714, label %logic.rhs7265, label %logic.end7266
logic.rhs7265:
%t715 = load %S.ast.Type, ptr %a621
%t716 = call i64 @finch.gen.bitsOf(%S.ast.Type %t715)
%t717 = icmp slt i64 %t716, 32
br label %logic.rend7267
logic.rend7267:
br label %logic.end7266
logic.end7266:
%t718 = phi i1 [ false, %logic.from7264 ], [ %t717, %logic.rend7267 ]
br i1 %t718, label %then7268, label %endif7270
then7268:
%t719 = load ptr, ptr %a1
%t720 = load { ptr, i64, i64 }, ptr %a664
%t721 = load %S.ast.Type, ptr %a621
%t722 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4712, i64 3, i64 0 })
%t723 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t719, { ptr, i64, i64 } %t720, %S.ast.Type %t721, %S.ast.Type %t722)
store { ptr, i64, i64 } %t723, ptr %a664
%t724 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4713, i64 3, i64 0 })
store %S.ast.Type %t724, ptr %a621
br label %endif7270
endif7270:
br label %endif7259
endif7259:
br label %endif7256
endif7256:
br label %endif7253
endif7253:
%t725 = getelementptr inbounds { ptr, i64, i64 }, ptr %a236, i32 0, i32 1
%t726 = load ptr, ptr %a1
%t727 = load %S.ast.Type, ptr %a621
%t728 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t726, %S.ast.Type %t727)
store { ptr, i64, i64 } %t728, ptr %a730
store { ptr, i64, i64 } { ptr @.str.4714, i64 1, i64 0 }, ptr %a731
call void @finch_str_concat(ptr %a729, ptr %a730, ptr %a731)
%t732 = load { ptr, i64, i64 }, ptr %a729
%t733 = load { ptr, i64, i64 }, ptr %a664
store { ptr, i64, i64 } %t732, 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
%t738 = load i64, ptr %t725
%t739 = add i64 %t738, 1
call void @finch_arr_reserve(ptr %a236, i64 %t739, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t740 = load ptr, ptr %a236
%t741 = getelementptr inbounds { ptr, i64, i64 }, ptr %t740, i64 %t738
store { ptr, i64, i64 } %t737, ptr %t741
store i64 %t739, ptr %t725
br label %for.step7200
for.step7200:
%t742 = load i64, ptr %a285
%t743 = add i64 %t742, 1
store i64 %t743, ptr %a285
br label %for.cond7198
for.end7201:
%t744 = getelementptr inbounds %S.gen.Plan, ptr %a234, i32 0, i32 2
%t745 = load { ptr, i64, i64 }, ptr %t744
store { ptr, i64, i64 } %t745, ptr %a746
call void @finch_str_copy(ptr %a747, ptr %a746)
%t748 = load { ptr, i64, i64 }, ptr %a747
store { ptr, i64, i64 } %t748, ptr %a749
store { ptr, i64, i64 } { ptr @.str.4715, i64 0, i64 0 }, ptr %a750
%t751 = getelementptr inbounds %S.gen.Plan, ptr %a234, i32 0, i32 0
%t752 = getelementptr inbounds %S.gen.Abi, ptr %t751, i32 0, i32 0
%t753 = load { ptr, i64, i64 }, ptr %t752
store { ptr, i64, i64 } %t753, ptr %a754
store { ptr, i64, i64 } { ptr @.str.4716, i64 6, i64 0 }, ptr %a755
%t756 = call i32 @finch_str_eq(ptr %a754, ptr %a755)
%t757 = icmp ne i32 %t756, 0
br i1 %t757, label %then7271, label %endif7273
then7271:
%t758 = load ptr, ptr %a1
%t759 = load %S.ast.Type, ptr %a192
%t760 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t758, %S.ast.Type %t759)
store { ptr, i64, i64 } %t760, ptr %a750
br label %endif7273
endif7273:
store { ptr, i64, i64 } { ptr @.str.4717, i64 0, i64 0 }, ptr %a761
%t762 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4
%t763 = load i1, ptr %t762
br i1 %t763, label %then7274, label %endif7276
then7274:
store { ptr, i64, i64 } { ptr @.str.4718, i64 5, i64 0 }, ptr %a761
%t764 = getelementptr inbounds { ptr, i64, i64 }, ptr %a235, i32 0, i32 1
%t765 = load i64, ptr %t764
%t766 = icmp eq i64 %t765, 0
br i1 %t766, label %then7277, label %endif7279
then7277:
store { ptr, i64, i64 } { ptr @.str.4719, i64 3, i64 0 }, ptr %a761
br label %endif7279
endif7279:
br label %endif7276
endif7276:
%t767 = load ptr, ptr %a1
%t768 = icmp eq ptr %t767, null
br i1 %t768, label %panic7280, label %ok7281
panic7280:
call void @finch_panic(ptr @.str.4720, i64 4250, ptr @.str.4721)
unreachable
ok7281:
%t769 = getelementptr inbounds %S.gen.Gen, ptr %t767, i32 0, i32 38
%t770 = getelementptr inbounds { ptr, i64, i64 }, ptr %t769, i32 0, i32 1
%t771 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0
%t772 = load { ptr, i64, i64 }, ptr %t771
store { ptr, i64, i64 } { ptr @.str.4722, i64 2, i64 0 }, ptr %a774
store { ptr, i64, i64 } %t772, ptr %a775
call void @finch_str_concat(ptr %a773, ptr %a774, ptr %a775)
%t776 = load { ptr, i64, i64 }, ptr %a773
store i64 -1, ptr %a777
%t778 = load i64, ptr %t770
%t779 = load ptr, ptr %t769
store i64 0, ptr %a780
br label %find.cond7282
find.cond7282:
%t781 = load i64, ptr %a780
%t782 = icmp slt i64 %t781, %t778
br i1 %t782, label %find.body7283, label %find.end7286
find.body7283:
%t783 = getelementptr inbounds { ptr, i64, i64 }, ptr %t779, i64 %t781
%t784 = load { ptr, i64, i64 }, ptr %t783
store { ptr, i64, i64 } %t784, ptr %a785
store { ptr, i64, i64 } %t776, ptr %a786
%t787 = call i32 @finch_str_eq(ptr %a785, ptr %a786)
%t788 = icmp ne i32 %t787, 0
br i1 %t788, label %find.hit7284, label %find.next7285
find.hit7284:
store i64 %t781, ptr %a777
br label %find.end7286
find.next7285:
%t789 = add i64 %t781, 1
store i64 %t789, ptr %a780
br label %find.cond7282
find.end7286:
%t790 = load i64, ptr %a777
%t791 = icmp sge i64 %t790, 0
%t792 = xor i1 %t791, true
br i1 %t792, label %then7287, label %endif7289
then7287:
%t793 = load ptr, ptr %a1
%t794 = icmp eq ptr %t793, null
br i1 %t794, label %panic7290, label %ok7291
panic7290:
call void @finch_panic(ptr @.str.4723, i64 4251, ptr @.str.4724)
unreachable
ok7291:
%t795 = getelementptr inbounds %S.gen.Gen, ptr %t793, i32 0, i32 38
%t796 = getelementptr inbounds { ptr, i64, i64 }, ptr %t795, i32 0, i32 1
%t797 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0
%t798 = load { ptr, i64, i64 }, ptr %t797
store { ptr, i64, i64 } { ptr @.str.4725, i64 2, i64 0 }, ptr %a800
store { ptr, i64, i64 } %t798, ptr %a801
call void @finch_str_concat(ptr %a799, ptr %a800, ptr %a801)
%t802 = load { ptr, i64, i64 }, ptr %a799
%t803 = load i64, ptr %t796
%t804 = add i64 %t803, 1
call void @finch_arr_reserve(ptr %t795, i64 %t804, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t805 = load ptr, ptr %t795
%t806 = getelementptr inbounds { ptr, i64, i64 }, ptr %t805, i64 %t803
store { ptr, i64, i64 } %t802, ptr %t806
store i64 %t804, ptr %t796
%t807 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0
%t808 = load { ptr, i64, i64 }, ptr %t807
%t809 = call i1 @finch.gen.runtimeDeclares({ ptr, i64, i64 } %t808)
%t810 = xor i1 %t809, true
br i1 %t810, label %then7292, label %endif7294
then7292:
%t811 = load ptr, ptr %a1
%t812 = icmp eq ptr %t811, null
br i1 %t812, label %panic7295, label %ok7296
panic7295:
call void @finch_panic(ptr @.str.4726, i64 4253, ptr @.str.4727)
unreachable
ok7296:
%t813 = getelementptr inbounds %S.gen.Gen, ptr %t811, i32 0, i32 2
%t814 = getelementptr inbounds { ptr, i64, i64 }, ptr %t813, i32 0, i32 1
%t815 = load { ptr, i64, i64 }, ptr %a750
store { ptr, i64, i64 } { ptr @.str.4728, i64 7, i64 0 }, ptr %a817
store { ptr, i64, i64 } %t815, ptr %a818
call void @finch_str_concat(ptr %a816, ptr %a817, ptr %a818)
%t819 = load { ptr, i64, i64 }, ptr %a816
store { ptr, i64, i64 } %t819, ptr %a821
store { ptr, i64, i64 } { ptr @.str.4729, i64 1, i64 0 }, ptr %a822
call void @finch_str_concat(ptr %a820, ptr %a821, ptr %a822)
%t823 = load { ptr, i64, i64 }, ptr %a820
%t824 = load { ptr, i64, i64 }, ptr %a749
store { ptr, i64, i64 } %t823, ptr %a826
store { ptr, i64, i64 } %t824, ptr %a827
call void @finch_str_concat(ptr %a825, ptr %a826, ptr %a827)
%t828 = load { ptr, i64, i64 }, ptr %a825
store { ptr, i64, i64 } %t828, ptr %a830
store { ptr, i64, i64 } { ptr @.str.4730, i64 2, i64 0 }, ptr %a831
call void @finch_str_concat(ptr %a829, ptr %a830, ptr %a831)
%t832 = load { ptr, i64, i64 }, ptr %a829
%t833 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0
%t834 = load { ptr, i64, i64 }, ptr %t833
store { ptr, i64, i64 } %t832, ptr %a836
store { ptr, i64, i64 } %t834, ptr %a837
call void @finch_str_concat(ptr %a835, ptr %a836, ptr %a837)
%t838 = load { ptr, i64, i64 }, ptr %a835
store { ptr, i64, i64 } %t838, ptr %a840
store { ptr, i64, i64 } { ptr @.str.4731, i64 1, i64 0 }, ptr %a841
call void @finch_str_concat(ptr %a839, ptr %a840, ptr %a841)
%t842 = load { ptr, i64, i64 }, ptr %a839
%t843 = getelementptr inbounds { ptr, i64, i64 }, ptr %a235, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.4732, i64 2, i64 0 }, ptr %a844
call void @finch_str_join(ptr %a845, ptr %a235, ptr %a844)
%t846 = load { ptr, i64, i64 }, ptr %a845
store { ptr, i64, i64 } %t842, 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
%t851 = load { ptr, i64, i64 }, ptr %a761
store { ptr, i64, i64 } %t850, ptr %a853
store { ptr, i64, i64 } %t851, ptr %a854
call void @finch_str_concat(ptr %a852, ptr %a853, ptr %a854)
%t855 = load { ptr, i64, i64 }, ptr %a852
store { ptr, i64, i64 } %t855, ptr %a857
store { ptr, i64, i64 } { ptr @.str.4733, i64 1, i64 0 }, ptr %a858
call void @finch_str_concat(ptr %a856, ptr %a857, ptr %a858)
%t859 = load { ptr, i64, i64 }, ptr %a856
%t860 = load i64, ptr %t814
%t861 = add i64 %t860, 1
call void @finch_arr_reserve(ptr %t813, i64 %t861, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t862 = load ptr, ptr %t813
%t863 = getelementptr inbounds { ptr, i64, i64 }, ptr %t862, i64 %t860
store { ptr, i64, i64 } %t859, ptr %t863
store i64 %t861, ptr %t814
br label %endif7294
endif7294:
br label %endif7289
endif7289:
store { ptr, i64, i64 } { ptr @.str.4734, i64 0, i64 0 }, ptr %a864
%t865 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4
%t866 = load i1, ptr %t865
br i1 %t866, label %then7297, label %endif7299
then7297:
%t867 = getelementptr inbounds { ptr, i64, i64 }, ptr %a235, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.4736, i64 2, i64 0 }, ptr %a868
call void @finch_str_join(ptr %a869, ptr %a235, ptr %a868)
%t870 = load { ptr, i64, i64 }, ptr %a869
store { ptr, i64, i64 } { ptr @.str.4735, i64 2, i64 0 }, ptr %a872
store { ptr, i64, i64 } %t870, ptr %a873
call void @finch_str_concat(ptr %a871, ptr %a872, ptr %a873)
%t874 = load { ptr, i64, i64 }, ptr %a871
%t875 = load { ptr, i64, i64 }, ptr %a761
store { ptr, i64, i64 } %t874, ptr %a877
store { ptr, i64, i64 } %t875, ptr %a878
call void @finch_str_concat(ptr %a876, ptr %a877, ptr %a878)
%t879 = load { ptr, i64, i64 }, ptr %a876
store { ptr, i64, i64 } %t879, ptr %a881
store { ptr, i64, i64 } { ptr @.str.4737, i64 1, i64 0 }, ptr %a882
call void @finch_str_concat(ptr %a880, ptr %a881, ptr %a882)
%t883 = load { ptr, i64, i64 }, ptr %a880
store { ptr, i64, i64 } %t883, ptr %a864
br label %endif7299
endif7299:
%t884 = load { ptr, i64, i64 }, ptr %a750
store { ptr, i64, i64 } { ptr @.str.4738, i64 4, i64 0 }, ptr %a886
store { ptr, i64, i64 } %t884, ptr %a887
call void @finch_str_concat(ptr %a885, ptr %a886, ptr %a887)
%t888 = load { ptr, i64, i64 }, ptr %a885
store { ptr, i64, i64 } %t888, ptr %a890
store { ptr, i64, i64 } { ptr @.str.4739, i64 1, i64 0 }, ptr %a891
call void @finch_str_concat(ptr %a889, ptr %a890, ptr %a891)
%t892 = load { ptr, i64, i64 }, ptr %a889
%t893 = load { ptr, i64, i64 }, ptr %a749
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)
%t897 = load { ptr, i64, i64 }, ptr %a894
%t898 = load { ptr, i64, i64 }, ptr %a864
store { ptr, i64, i64 } %t897, ptr %a900
store { ptr, i64, i64 } %t898, ptr %a901
call void @finch_str_concat(ptr %a899, ptr %a900, ptr %a901)
%t902 = load { ptr, i64, i64 }, ptr %a899
store { ptr, i64, i64 } %t902, ptr %a904
store { ptr, i64, i64 } { ptr @.str.4740, i64 2, i64 0 }, ptr %a905
call void @finch_str_concat(ptr %a903, ptr %a904, ptr %a905)
%t906 = load { ptr, i64, i64 }, ptr %a903
%t907 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0
%t908 = load { ptr, i64, i64 }, ptr %t907
store { ptr, i64, i64 } %t906, 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.4741, i64 1, i64 0 }, ptr %a915
call void @finch_str_concat(ptr %a913, ptr %a914, ptr %a915)
%t916 = load { ptr, i64, i64 }, ptr %a913
%t917 = getelementptr inbounds { ptr, i64, i64 }, ptr %a236, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.4742, i64 2, i64 0 }, ptr %a918
call void @finch_str_join(ptr %a919, ptr %a236, ptr %a918)
%t920 = load { ptr, i64, i64 }, ptr %a919
store { ptr, i64, i64 } %t916, ptr %a922
store { ptr, i64, i64 } %t920, ptr %a923
call void @finch_str_concat(ptr %a921, ptr %a922, ptr %a923)
%t924 = load { ptr, i64, i64 }, ptr %a921
store { ptr, i64, i64 } %t924, ptr %a926
store { ptr, i64, i64 } { ptr @.str.4743, i64 1, i64 0 }, ptr %a927
call void @finch_str_concat(ptr %a925, ptr %a926, ptr %a927)
%t928 = load { ptr, i64, i64 }, ptr %a925
store { ptr, i64, i64 } %t928, ptr %a929
%t930 = getelementptr inbounds %S.ast.Type, ptr %a192, i32 0, i32 0
%t931 = load { ptr, i64, i64 }, ptr %t930
store { ptr, i64, i64 } %t931, ptr %a932
store { ptr, i64, i64 } { ptr @.str.4744, i64 4, i64 0 }, ptr %a933
%t934 = call i32 @finch_str_eq(ptr %a932, ptr %a933)
%t935 = icmp ne i32 %t934, 0
br i1 %t935, label %then7300, label %endif7302
then7300:
%t936 = load ptr, ptr %a1
%t937 = load { ptr, i64, i64 }, ptr %a929
call void @finch.gen.emit(ptr %t936, { ptr, i64, i64 } %t937)
%t938 = load %S.ast.Type, ptr %a192
store %S.ast.Type %t938, ptr %a939
call void @finch.copy.S_ast_Type(ptr %a940, ptr %a939)
%t941 = load %S.ast.Type, ptr %a940
%t942 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t941, 1
ret %S.gen.Val %t942
endif7302:
%t943 = getelementptr inbounds %S.gen.Plan, ptr %a234, i32 0, i32 3
%t944 = load i1, ptr %t943
br i1 %t944, label %then7303, label %endif7305
then7303:
%t945 = load ptr, ptr %a1
%t946 = load { ptr, i64, i64 }, ptr %a929
call void @finch.gen.emit(ptr %t945, { ptr, i64, i64 } %t946)
%t947 = load ptr, ptr %a1
%t948 = load ptr, ptr %a1
%t949 = load %S.ast.Type, ptr %a192
%t950 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t948, %S.ast.Type %t949)
%t951 = load { ptr, i64, i64 }, ptr %a237
%t952 = call { ptr, i64, i64 } @finch.gen.load(ptr %t947, { ptr, i64, i64 } %t950, { ptr, i64, i64 } %t951)
%t953 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t952, 0
%t954 = load %S.ast.Type, ptr %a192
store %S.ast.Type %t954, ptr %a955
call void @finch.copy.S_ast_Type(ptr %a956, ptr %a955)
%t957 = load %S.ast.Type, ptr %a956
%t958 = insertvalue %S.gen.Val %t953, %S.ast.Type %t957, 1
ret %S.gen.Val %t958
endif7305:
%t959 = load ptr, ptr %a1
%t960 = load { ptr, i64, i64 }, ptr %a929
%t961 = call { ptr, i64, i64 } @finch.gen.op(ptr %t959, { ptr, i64, i64 } %t960)
store { ptr, i64, i64 } %t961, ptr %a962
%t963 = getelementptr inbounds %S.gen.Plan, ptr %a234, i32 0, i32 0
%t964 = getelementptr inbounds %S.gen.Abi, ptr %t963, i32 0, i32 0
%t965 = load { ptr, i64, i64 }, ptr %t964
store { ptr, i64, i64 } %t965, ptr %a966
store { ptr, i64, i64 } { ptr @.str.4745, i64 6, i64 0 }, ptr %a967
%t968 = call i32 @finch_str_eq(ptr %a966, ptr %a967)
%t969 = icmp ne i32 %t968, 0
br i1 %t969, label %then7306, label %endif7308
then7306:
%t970 = load ptr, ptr %a1
%t971 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t970, { ptr, i64, i64 } { ptr @.str.4746, i64 9, i64 0 })
store { ptr, i64, i64 } %t971, ptr %a972
%t973 = load ptr, ptr %a1
%t974 = getelementptr inbounds %S.gen.Plan, ptr %a234, i32 0, i32 0
%t975 = getelementptr inbounds %S.gen.Abi, ptr %t974, i32 0, i32 2
%t976 = load { ptr, i64, i64 }, ptr %t975
%t977 = load { ptr, i64, i64 }, ptr %a962
%t978 = load { ptr, i64, i64 }, ptr %a972
call void @finch.gen.store(ptr %t973, { ptr, i64, i64 } %t976, { ptr, i64, i64 } %t977, { ptr, i64, i64 } %t978)
%t979 = load ptr, ptr %a1
%t980 = load ptr, ptr %a1
%t981 = load %S.ast.Type, ptr %a192
%t982 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t980, %S.ast.Type %t981)
%t983 = load { ptr, i64, i64 }, ptr %a972
%t984 = call { ptr, i64, i64 } @finch.gen.load(ptr %t979, { ptr, i64, i64 } %t982, { ptr, i64, i64 } %t983)
%t985 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t984, 0
%t986 = load %S.ast.Type, ptr %a192
store %S.ast.Type %t986, ptr %a987
call void @finch.copy.S_ast_Type(ptr %a988, ptr %a987)
%t989 = load %S.ast.Type, ptr %a988
%t990 = insertvalue %S.gen.Val %t985, %S.ast.Type %t989, 1
ret %S.gen.Val %t990
endif7308:
%t991 = getelementptr inbounds %S.ast.Type, ptr %a192, i32 0, i32 0
%t992 = load { ptr, i64, i64 }, ptr %t991
store { ptr, i64, i64 } %t992, ptr %a993
store { ptr, i64, i64 } { ptr @.str.4747, i64 3, i64 0 }, ptr %a994
%t995 = call i32 @finch_str_eq(ptr %a993, ptr %a994)
%t996 = icmp ne i32 %t995, 0
br i1 %t996, label %then7309, label %endif7311
then7309:
%t997 = load ptr, ptr %a1
%t998 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t997)
store { ptr, i64, i64 } %t998, ptr %a999
%t1000 = load ptr, ptr %a1
%t1001 = load { ptr, i64, i64 }, ptr %a999
call void @finch.gen.store(ptr %t1000, { ptr, i64, i64 } { ptr @.str.4748, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4749, i64 15, i64 0 }, { ptr, i64, i64 } %t1001)
%t1002 = load ptr, ptr %a1
%t1003 = load { ptr, i64, i64 }, ptr %a999
store { ptr, i64, i64 } { ptr @.str.4750, i64 32, i64 0 }, ptr %a1005
store { ptr, i64, i64 } %t1003, ptr %a1006
call void @finch_str_concat(ptr %a1004, ptr %a1005, ptr %a1006)
%t1007 = load { ptr, i64, i64 }, ptr %a1004
store { ptr, i64, i64 } %t1007, ptr %a1009
store { ptr, i64, i64 } { ptr @.str.4751, i64 6, i64 0 }, ptr %a1010
call void @finch_str_concat(ptr %a1008, ptr %a1009, ptr %a1010)
%t1011 = load { ptr, i64, i64 }, ptr %a1008
%t1012 = load { ptr, i64, i64 }, ptr %a962
store { ptr, i64, i64 } %t1011, ptr %a1014
store { ptr, i64, i64 } %t1012, ptr %a1015
call void @finch_str_concat(ptr %a1013, ptr %a1014, ptr %a1015)
%t1016 = load { ptr, i64, i64 }, ptr %a1013
store { ptr, i64, i64 } %t1016, ptr %a1018
store { ptr, i64, i64 } { ptr @.str.4752, i64 1, i64 0 }, ptr %a1019
call void @finch_str_concat(ptr %a1017, ptr %a1018, ptr %a1019)
%t1020 = load { ptr, i64, i64 }, ptr %a1017
call void @finch.gen.emit(ptr %t1002, { ptr, i64, i64 } %t1020)
%t1021 = load ptr, ptr %a1
%t1022 = load { ptr, i64, i64 }, ptr %a999
%t1023 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1021, { ptr, i64, i64 } { ptr @.str.4753, i64 17, i64 0 }, { ptr, i64, i64 } %t1022)
%t1024 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1023, 0
%t1025 = load %S.ast.Type, ptr %a192
store %S.ast.Type %t1025, ptr %a1026
call void @finch.copy.S_ast_Type(ptr %a1027, ptr %a1026)
%t1028 = load %S.ast.Type, ptr %a1027
%t1029 = insertvalue %S.gen.Val %t1024, %S.ast.Type %t1028, 1
ret %S.gen.Val %t1029
endif7311:
%t1030 = load { ptr, i64, i64 }, ptr %a962
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.Val zeroinitializer, { ptr, i64, i64 } %t1033, 0
%t1035 = load %S.ast.Type, ptr %a192
store %S.ast.Type %t1035, ptr %a1036
call void @finch.copy.S_ast_Type(ptr %a1037, ptr %a1036)
%t1038 = load %S.ast.Type, ptr %a1037
%t1039 = insertvalue %S.gen.Val %t1034, %S.ast.Type %t1038, 1
ret %S.gen.Val %t1039
}
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.4754, i64 6, i64 0 }, ptr %t4
%t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1
store { ptr, i64, i64 } { ptr @.str.4755, i64 6, i64 0 }, ptr %t5
%t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2
store { ptr, i64, i64 } { ptr @.str.4756, i64 4, i64 0 }, ptr %t6
%t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3
store { ptr, i64, i64 } { ptr @.str.4757, i64 4, i64 0 }, ptr %t7
%t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4
store { ptr, i64, i64 } { ptr @.str.4758, 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.cond7312
find.cond7312:
%t19 = load i64, ptr %a18
%t20 = icmp slt i64 %t19, %t16
br i1 %t20, label %find.body7313, label %find.end7316
find.body7313:
%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.hit7314, label %find.next7315
find.hit7314:
store i64 %t19, ptr %a15
br label %find.end7316
find.next7315:
%t27 = add i64 %t19, 1
store i64 %t27, ptr %a18
br label %find.cond7312
find.end7316:
%t28 = load i64, ptr %a15
%t29 = icmp sge i64 %t28, 0
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
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.4759, i64 6, i64 0 }, ptr %t4
%t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1
store { ptr, i64, i64 } { ptr @.str.4760, i64 4, i64 0 }, ptr %t5
%t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2
store { ptr, i64, i64 } { ptr @.str.4761, i64 7, i64 0 }, ptr %t6
%t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3
store { ptr, i64, i64 } { ptr @.str.4762, i64 5, i64 0 }, ptr %t7
%t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4
store { ptr, i64, i64 } { ptr @.str.4763, i64 5, i64 0 }, ptr %t8
%t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5
store { ptr, i64, i64 } { ptr @.str.4764, i64 7, i64 0 }, ptr %t9
%t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6
store { ptr, i64, i64 } { ptr @.str.4765, i64 4, i64 0 }, ptr %t10
%t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7
store { ptr, i64, i64 } { ptr @.str.4766, i64 3, i64 0 }, ptr %t11
%t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8
store { ptr, i64, i64 } { ptr @.str.4767, i64 3, i64 0 }, ptr %t12
%t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9
store { ptr, i64, i64 } { ptr @.str.4768, i64 3, i64 0 }, ptr %t13
%t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10
store { ptr, i64, i64 } { ptr @.str.4769, i64 5, i64 0 }, ptr %t14
%t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11
store { ptr, i64, i64 } { ptr @.str.4770, i64 4, i64 0 }, ptr %t15
%t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12
store { ptr, i64, i64 } { ptr @.str.4771, i64 6, i64 0 }, ptr %t16
%t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13
store { ptr, i64, i64 } { ptr @.str.4772, i64 4, i64 0 }, ptr %t17
%t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14
store { ptr, i64, i64 } { ptr @.str.4773, i64 5, i64 0 }, ptr %t18
%t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15
store { ptr, i64, i64 } { ptr @.str.4774, i64 3, i64 0 }, ptr %t19
%t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16
store { ptr, i64, i64 } { ptr @.str.4775, i64 4, i64 0 }, ptr %t20
%t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17
store { ptr, i64, i64 } { ptr @.str.4776, i64 6, i64 0 }, ptr %t21
%t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18
store { ptr, i64, i64 } { ptr @.str.4777, i64 6, i64 0 }, ptr %t22
%t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19
store { ptr, i64, i64 } { ptr @.str.4778, i64 6, i64 0 }, ptr %t23
%t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20
store { ptr, i64, i64 } { ptr @.str.4779, i64 4, i64 0 }, ptr %t24
%t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 21
store { ptr, i64, i64 } { ptr @.str.4780, i64 5, i64 0 }, ptr %t25
%t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 22
store { ptr, i64, i64 } { ptr @.str.4781, 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.4782, i64 7, i64 0 }, ptr %t33
%t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 1
store { ptr, i64, i64 } { ptr @.str.4783, i64 7, i64 0 }, ptr %t34
%t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 2
store { ptr, i64, i64 } { ptr @.str.4784, i64 7, i64 0 }, ptr %t35
%t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 3
store { ptr, i64, i64 } { ptr @.str.4785, i64 7, i64 0 }, ptr %t36
%t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 4
store { ptr, i64, i64 } { ptr @.str.4786, i64 7, i64 0 }, ptr %t37
%t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 5
store { ptr, i64, i64 } { ptr @.str.4787, i64 7, i64 0 }, ptr %t38
%t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 6
store { ptr, i64, i64 } { ptr @.str.4788, i64 6, i64 0 }, ptr %t39
%t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 7
store { ptr, i64, i64 } { ptr @.str.4789, i64 6, i64 0 }, ptr %t40
%t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 8
store { ptr, i64, i64 } { ptr @.str.4790, i64 6, i64 0 }, ptr %t41
%t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 9
store { ptr, i64, i64 } { ptr @.str.4791, i64 6, i64 0 }, ptr %t42
%t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 10
store { ptr, i64, i64 } { ptr @.str.4792, i64 6, i64 0 }, ptr %t43
%t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 11
store { ptr, i64, i64 } { ptr @.str.4793, i64 6, i64 0 }, ptr %t44
%t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 12
store { ptr, i64, i64 } { ptr @.str.4794, i64 8, i64 0 }, ptr %t45
%t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 13
store { ptr, i64, i64 } { ptr @.str.4795, i64 8, i64 0 }, ptr %t46
%t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 14
store { ptr, i64, i64 } { ptr @.str.4796, i64 8, i64 0 }, ptr %t47
%t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 15
store { ptr, i64, i64 } { ptr @.str.4797, i64 8, i64 0 }, ptr %t48
%t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 16
store { ptr, i64, i64 } { ptr @.str.4798, i64 8, i64 0 }, ptr %t49
%t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 17
store { ptr, i64, i64 } { ptr @.str.4799, i64 8, i64 0 }, ptr %t50
%t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 18
store { ptr, i64, i64 } { ptr @.str.4800, i64 8, i64 0 }, ptr %t51
%t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 19
store { ptr, i64, i64 } { ptr @.str.4801, i64 8, i64 0 }, ptr %t52
%t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 20
store { ptr, i64, i64 } { ptr @.str.4802, i64 6, i64 0 }, ptr %t53
%t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 21
store { ptr, i64, i64 } { ptr @.str.4803, i64 8, i64 0 }, ptr %t54
%t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 22
store { ptr, i64, i64 } { ptr @.str.4804, 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.cond7317
find.cond7317:
%t66 = load i64, ptr %a65
%t67 = icmp slt i64 %t66, %t63
br i1 %t67, label %find.body7318, label %find.end7321
find.body7318:
%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.hit7319, label %find.next7320
find.hit7319:
store i64 %t66, ptr %a62
br label %find.end7321
find.next7320:
%t74 = add i64 %t66, 1
store i64 %t74, ptr %a65
br label %find.cond7317
find.end7321:
%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 %then7322, label %endif7324
then7322:
ret { ptr, i64, i64 } { ptr @.str.4805, i64 0, i64 0 }
endif7324:
%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 %range7325, label %inrange7326
range7325:
call void @finch_panic_index(ptr @.str.4807, i64 4299, i64 %t79, i64 %t81)
unreachable
inrange7326:
%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.4806, 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.4808, i64 14, i64 0 }, ptr %a92
call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92)
%t93 = load { ptr, i64, i64 }, ptr %a90
ret { ptr, i64, i64 } %t93
}
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 %S.docs.Doc, 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
%a47 = alloca i64, align 16
%a60 = alloca %S.gen.Val, align 16
%a64 = alloca { ptr, i64, i64 }, align 16
%a65 = alloca { ptr, i64, i64 }, align 16
%a91 = alloca { ptr, i64, i64 }, align 16
%a92 = alloca { ptr, i64, i64 }, align 16
%a105 = alloca %S.ast.Node, align 16
%a106 = alloca %S.ast.Node, align 16
%a108 = alloca %S.ast.Node, align 16
%a111 = alloca { ptr, i64, i64 }, align 16
%a112 = alloca { ptr, i64, i64 }, align 16
%a129 = alloca i64, align 16
%a141 = alloca { ptr, i64, i64 }, align 16
%a142 = alloca { ptr, i64, i64 }, align 16
%a147 = 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
%a164 = alloca %S.gen.Place, align 16
%a167 = alloca { ptr, i64, i64 }, align 16
%a168 = alloca { ptr, i64, i64 }, align 16
%a176 = alloca { ptr, i64, i64 }, align 16
%a177 = alloca { ptr, i64, i64 }, align 16
%a192 = alloca %S.gen.Val, align 16
%a195 = 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
%a204 = alloca { ptr, i64, i64 }, align 16
%a205 = alloca { ptr, i64, i64 }, align 16
%a217 = alloca %S.ast.Type, align 16
%a218 = alloca %S.ast.Type, align 16
%a227 = alloca { ptr, i64, i64 }, align 16
%a228 = alloca { ptr, i64, i64 }, align 16
%a229 = 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
%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
%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
%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
%a283 = 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
%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
%a307 = alloca { ptr, i64, i64 }, align 16
%a308 = 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
%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
%a327 = alloca { ptr, i64, i64 }, align 16
%a328 = alloca { ptr, i64, i64 }, align 16
%a329 = alloca { ptr, i64, i64 }, align 16
%a332 = alloca { ptr, i64, i64 }, align 16
%a333 = 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
%a348 = 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
%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
%a369 = alloca { ptr, i64, i64 }, align 16
%a370 = 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
%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
%a396 = alloca { ptr, i64, i64 }, align 16
%a397 = alloca { ptr, i64, i64 }, align 16
%a409 = alloca { ptr, i64, i64 }, align 16
%a410 = alloca { ptr, i64, i64 }, align 16
%a422 = alloca { ptr, i64, i64 }, align 16
%a423 = 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
%a436 = 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
%a445 = 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
%a457 = alloca { ptr, i64, i64 }, align 16
%a458 = alloca { ptr, i64, i64 }, align 16
%a463 = alloca { ptr, i64, i64 }, align 16
%a464 = 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
%a481 = alloca { ptr, i64, i64 }, align 16
%a482 = 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
%a509 = alloca { ptr, i64, i64 }, align 16
%a510 = alloca { ptr, i64, i64 }, align 16
%a511 = alloca { ptr, i64, i64 }, align 16
%a522 = alloca { ptr, i64, i64 }, align 16
%a532 = alloca { ptr, i64, i64 }, align 16
%a533 = alloca { ptr, i64, i64 }, align 16
%a537 = alloca { ptr, i64, i64 }, align 16
%a538 = 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
%a564 = alloca { ptr, i64, i64 }, align 16
%a565 = 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
%a573 = 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
%a580 = alloca { ptr, i64, i64 }, align 16
%a581 = alloca { ptr, i64, i64 }, align 16
%a582 = alloca { ptr, i64, i64 }, align 16
%a590 = alloca { ptr, i64, i64 }, align 16
%a597 = alloca { ptr, i64, i64 }, align 16
%a598 = 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
%a612 = alloca { ptr, i64, i64 }, align 16
%a614 = alloca { ptr, i64, i64 }, align 16
%a615 = alloca { ptr, i64, i64 }, align 16
%a616 = 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
%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
%a629 = alloca { ptr, i64, i64 }, align 16
%a630 = alloca { ptr, i64, i64 }, align 16
%a632 = alloca { ptr, i64, i64 }, align 16
%a633 = alloca { ptr, i64, i64 }, align 16
%a634 = 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
%a644 = alloca { ptr, i64, i64 }, align 16
%a645 = alloca { ptr, i64, i64 }, align 16
%a646 = 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
%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
%a699 = alloca { ptr, i64, i64 }, align 16
%a700 = alloca { ptr, i64, i64 }, align 16
%a701 = alloca { ptr, i64, i64 }, align 16
%a703 = alloca { ptr, i64, i64 }, align 16
%a704 = alloca { ptr, i64, i64 }, align 16
%a705 = alloca { ptr, i64, i64 }, align 16
%a709 = 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
%a716 = alloca { ptr, i64, i64 }, align 16
%a717 = alloca { ptr, i64, i64 }, align 16
%a727 = alloca { ptr, i64, i64 }, align 16
%a728 = alloca { ptr, i64, i64 }, align 16
%a745 = alloca { ptr, i64, i64 }, align 16
%a757 = 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
%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
%a784 = alloca { ptr, i64, i64 }, align 16
%a785 = 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
%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
%a802 = 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
%a809 = alloca { ptr, i64, i64 }, align 16
%a810 = alloca { ptr, i64, i64 }, align 16
%a811 = 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
%a831 = alloca { ptr, i64, i64 }, align 16
%a832 = alloca { ptr, i64, i64 }, align 16
%a833 = 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
%a840 = alloca { ptr, i64, i64 }, align 16
%a841 = alloca { ptr, i64, i64 }, align 16
%a842 = alloca { ptr, i64, i64 }, align 16
%a845 = 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
%a852 = alloca { ptr, i64, i64 }, align 16
%a853 = 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
%a877 = alloca %S.gen.Val, 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
%a887 = alloca { ptr, i64, i64 }, align 16
%a888 = alloca { ptr, i64, i64 }, align 16
%a889 = 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
%a908 = alloca { ptr, i64, i64 }, align 16
%a909 = alloca { ptr, i64, i64 }, align 16
%a914 = alloca { ptr, i64, i64 }, align 16
%a919 = alloca { ptr, i64, i64 }, align 16
%a920 = alloca { ptr, i64, i64 }, align 16
%a921 = alloca { ptr, i64, i64 }, align 16
%a923 = alloca { ptr, i64, i64 }, align 16
%a924 = alloca { ptr, i64, i64 }, align 16
%a925 = alloca { ptr, i64, i64 }, 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
%a937 = 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
%a944 = alloca { ptr, i64, i64 }, align 16
%a945 = alloca { ptr, i64, i64 }, align 16
%a946 = alloca { ptr, i64, i64 }, align 16
%a962 = alloca { ptr, i64, i64 }, align 16
%a963 = alloca { ptr, i64, i64 }, align 16
%a964 = 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
%a971 = 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
%a978 = alloca { ptr, i64, i64 }, align 16
%a979 = alloca { ptr, i64, i64 }, align 16
%a980 = alloca { ptr, i64, i64 }, align 16
%a987 = alloca { ptr, i64, i64 }, align 16
%a988 = alloca { ptr, i64, i64 }, align 16
%a1003 = alloca %S.gen.Val, align 16
%a1006 = alloca { ptr, i64, i64 }, align 16
%a1009 = alloca { ptr, i64, i64 }, align 16
%a1010 = alloca { ptr, i64, i64 }, align 16
%a1011 = 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
%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
%a1030 = alloca { ptr, i64, i64 }, align 16
%a1031 = alloca { ptr, i64, i64 }, align 16
%a1032 = 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
%a1043 = alloca { ptr, i64, i64 }, align 16
%a1044 = alloca { ptr, i64, i64 }, align 16
%a1069 = alloca %S.gen.Val, align 16
%a1073 = alloca { ptr, i64, i64 }, align 16
%a1074 = alloca { ptr, i64, i64 }, align 16
%a1075 = alloca { ptr, i64, i64 }, align 16
%a1077 = 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
%a1085 = 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
%a1092 = alloca { ptr, i64, i64 }, align 16
%a1093 = alloca { ptr, i64, i64 }, align 16
%a1094 = alloca { ptr, i64, i64 }, align 16
%a1099 = alloca { ptr, i64, i64 }, align 16
%a1100 = alloca { ptr, i64, i64 }, align 16
%a1105 = alloca %S.gen.Val, align 16
%a1124 = alloca { ptr, i64, i64 }, align 16
%a1127 = alloca { ptr, i64, i64 }, align 16
%a1128 = alloca { ptr, i64, i64 }, align 16
%a1129 = alloca { ptr, i64, i64 }, align 16
%a1131 = alloca { ptr, i64, i64 }, align 16
%a1132 = alloca { ptr, i64, i64 }, align 16
%a1133 = alloca { ptr, i64, i64 }, align 16
%a1138 = alloca { ptr, i64, i64 }, align 16
%a1139 = alloca { ptr, i64, i64 }, align 16
%a1140 = alloca { ptr, i64, i64 }, align 16
%a1142 = alloca { ptr, i64, i64 }, align 16
%a1143 = alloca { ptr, i64, i64 }, align 16
%a1144 = alloca { ptr, i64, i64 }, align 16
%a1154 = alloca { ptr, i64, i64 }, align 16
%a1155 = alloca { ptr, i64, i64 }, align 16
%a1170 = alloca %S.gen.Val, align 16
%a1176 = alloca { ptr, i64, i64 }, align 16
%a1177 = alloca { ptr, i64, i64 }, align 16
%a1178 = alloca { ptr, i64, i64 }, align 16
%a1180 = alloca { ptr, i64, i64 }, align 16
%a1181 = alloca { ptr, i64, i64 }, align 16
%a1182 = alloca { ptr, i64, i64 }, align 16
%a1185 = alloca { ptr, i64, i64 }, align 16
%a1196 = alloca { ptr, i64, i64 }, align 16
%a1197 = alloca { ptr, i64, i64 }, align 16
%a1205 = alloca { ptr, i64, i64 }, align 16
%a1206 = alloca { ptr, i64, i64 }, align 16
%a1221 = alloca %S.gen.Val, align 16
%a1225 = alloca { ptr, i64, i64 }, align 16
%a1226 = alloca { ptr, i64, i64 }, align 16
%a1240 = alloca { ptr, i64, i64 }, align 16
%a1241 = alloca { ptr, i64, i64 }, align 16
%a1242 = 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
%a1257 = alloca i64, align 16
%a1268 = alloca { ptr, i64, i64 }, align 16
%a1269 = alloca { ptr, i64, i64 }, align 16
%a1270 = 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
%a1288 = alloca i64, align 16
%a1312 = alloca { ptr, i64, i64 }, align 16
%a1313 = alloca { ptr, i64, i64 }, align 16
%a1314 = alloca { ptr, i64, i64 }, align 16
%a1316 = alloca { ptr, i64, i64 }, align 16
%a1317 = alloca { ptr, i64, i64 }, align 16
%a1318 = 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
%a1325 = alloca { ptr, i64, i64 }, align 16
%a1326 = alloca { ptr, i64, i64 }, align 16
%a1327 = alloca { ptr, i64, i64 }, align 16
%a1329 = alloca { ptr, i64, i64 }, align 16
%a1332 = alloca i64, align 16
%a1340 = alloca %S.ast.Type, align 16
%a1361 = alloca %S.ast.Type, align 16
%a1382 = alloca i64, align 16
%a1395 = alloca %S.gen.StructDef, align 16
%a1396 = alloca %S.gen.StructDef, align 16
%a1398 = alloca %S.gen.StructDef, align 16
%a1426 = alloca %S.ast.Node, align 16
%a1427 = alloca %S.ast.Node, align 16
%a1429 = alloca %S.ast.Node, align 16
%a1438 = alloca { ptr, i64, i64 }, align 16
%a1439 = alloca { ptr, i64, i64 }, align 16
%a1440 = alloca { ptr, i64, i64 }, align 16
%a1442 = alloca { ptr, i64, i64 }, align 16
%a1443 = alloca { ptr, i64, i64 }, align 16
%a1444 = alloca { ptr, i64, i64 }, align 16
%a1448 = alloca { ptr, i64, i64 }, align 16
%a1449 = alloca { ptr, i64, i64 }, align 16
%a1451 = alloca { ptr, i64, i64 }, align 16
%a1452 = alloca { ptr, i64, i64 }, align 16
%a1453 = alloca { ptr, i64, i64 }, align 16
%a1455 = alloca { ptr, i64, i64 }, align 16
%a1456 = alloca { ptr, i64, i64 }, align 16
%a1457 = alloca { ptr, i64, i64 }, align 16
%a1489 = alloca i64, align 16
%a1501 = alloca { ptr, i64, i64 }, align 16
%a1511 = alloca { ptr, i64, i64 }, align 16
%a1514 = alloca { ptr, i64, i64 }, align 16
%a1515 = alloca { ptr, i64, i64 }, align 16
%a1542 = alloca { ptr, i64, i64 }, align 16
%a1543 = alloca { ptr, i64, i64 }, align 16
%a1544 = 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
%a1553 = alloca { ptr, i64, i64 }, align 16
%a1554 = alloca { ptr, i64, i64 }, align 16
%a1555 = 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
%a1563 = alloca { ptr, i64, i64 }, align 16
%a1564 = alloca { ptr, i64, i64 }, align 16
%a1565 = 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 %panic7327, label %ok7328
panic7327:
call void @finch_panic(ptr @.str.4809, i64 4304, ptr @.str.4810)
unreachable
ok7328:
%t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 26
%t12 = load i1, ptr %t11
br label %logic.from7329
logic.from7329:
br i1 %t12, label %logic.rhs7330, label %logic.end7331
logic.rhs7330:
%t13 = load { ptr, i64, i64 }, ptr %a8
%t14 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t13)
br label %logic.rend7332
logic.rend7332:
br label %logic.end7331
logic.end7331:
%t15 = phi i1 [ false, %logic.from7329 ], [ %t14, %logic.rend7332 ]
br i1 %t15, label %then7333, label %endif7335
then7333:
%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 %S.docs.Doc %t18, ptr %a19
%t20 = getelementptr inbounds %S.docs.Doc, ptr %a19, i32 0, i32 0
%t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1
%t22 = load i64, ptr %t21
%t23 = icmp sgt i64 %t22, 0
br i1 %t23, label %then7336, label %endif7338
then7336:
%t24 = load ptr, ptr %a1
%t25 = load %S.ast.Node, ptr %a2
%t26 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12
%t27 = load i64, ptr %t26
%t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1
%t29 = load i64, ptr %t28
%t30 = load %S.docs.Doc, ptr %a19
%t31 = call { ptr, i64, i64 } @finch.docs.hover(%S.docs.Doc %t30)
call void @finch.gen.noteRef(ptr %t24, %S.ast.Node %t25, i64 %t27, i64 %t29, { ptr, i64, i64 } %t31, { ptr, i64, i64 } { ptr @.str.4811, i64 0, i64 0 }, i64 0, i64 0)
br label %endif7338
endif7338:
br label %endif7335
endif7335:
%t32 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t32, ptr %a33
store { ptr, i64, i64 } { ptr @.str.4812, i64 5, i64 0 }, ptr %a34
%t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34)
%t36 = icmp ne i32 %t35, 0
br i1 %t36, label %then7339, label %endif7341
then7339:
%t37 = load ptr, ptr %a1
%t38 = load %S.ast.Node, ptr %a2
call void @finch.gen.fail(ptr %t37, %S.ast.Node %t38, { ptr, i64, i64 } { ptr @.str.4813, i64 86, i64 0 })
br label %endif7341
endif7341:
%t39 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t39, ptr %a40
store { ptr, i64, i64 } { ptr @.str.4814, i64 5, i64 0 }, ptr %a41
%t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41)
%t43 = icmp ne i32 %t42, 0
br i1 %t43, label %then7342, label %endif7344
then7342:
%t44 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i32 0, i32 1
%t46 = load i64, ptr %t45
store i64 0, ptr %a47
br label %for.cond7345
for.cond7345:
%t48 = load i64, ptr %a47
%t49 = icmp slt i64 %t48, %t46
br i1 %t49, label %for.body7346, label %for.end7348
for.body7346:
%t50 = load ptr, ptr %a1
%t51 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t52 = load i64, ptr %a47
%t53 = load { ptr, i64, i64 }, ptr %t51
%t54 = extractvalue { ptr, i64, i64 } %t53, 1
%t55 = icmp uge i64 %t52, %t54
br i1 %t55, label %range7349, label %inrange7350
range7349:
call void @finch_panic_index(ptr @.str.4815, i64 4315, i64 %t52, i64 %t54)
unreachable
inrange7350:
%t56 = extractvalue { ptr, i64, i64 } %t53, 0
%t57 = getelementptr inbounds %S.ast.Node, ptr %t56, i64 %t52
%t58 = load %S.ast.Node, ptr %t57
%t59 = call %S.gen.Val @finch.gen.expr(ptr %t50, %S.ast.Node %t58)
store %S.gen.Val %t59, ptr %a60
%t61 = getelementptr inbounds %S.gen.Val, ptr %a60, i32 0, i32 1
%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.4816, i64 4, i64 0 }, ptr %a65
%t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65)
%t67 = icmp ne i32 %t66, 0
br i1 %t67, label %then7351, label %endif7353
then7351:
%t68 = load ptr, ptr %a1
%t69 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t70 = load i64, ptr %a47
%t71 = load { ptr, i64, i64 }, ptr %t69
%t72 = extractvalue { ptr, i64, i64 } %t71, 1
%t73 = icmp uge i64 %t70, %t72
br i1 %t73, label %range7354, label %inrange7355
range7354:
call void @finch_panic_index(ptr @.str.4817, i64 4317, i64 %t70, i64 %t72)
unreachable
inrange7355:
%t74 = extractvalue { ptr, i64, i64 } %t71, 0
%t75 = getelementptr inbounds %S.ast.Node, ptr %t74, i64 %t70
%t76 = load %S.ast.Node, ptr %t75
call void @finch.gen.fail(ptr %t68, %S.ast.Node %t76, { ptr, i64, i64 } { ptr @.str.4818, i64 53, i64 0 })
br label %endif7353
endif7353:
%t77 = load i64, ptr %a47
%t78 = icmp sgt i64 %t77, 0
br i1 %t78, label %then7356, label %endif7358
then7356:
%t79 = load ptr, ptr %a1
call void @finch.gen.printf(ptr %t79, { ptr, i64, i64 } { ptr @.str.4819, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.4820, i64 0, i64 0 })
br label %endif7358
endif7358:
%t80 = load ptr, ptr %a1
%t81 = getelementptr inbounds %S.gen.Val, ptr %a60, i32 0, i32 0
%t82 = load { ptr, i64, i64 }, ptr %t81
%t83 = getelementptr inbounds %S.gen.Val, ptr %a60, i32 0, i32 1
%t84 = load %S.ast.Type, ptr %t83
call void @finch.gen.emitPrint(ptr %t80, { ptr, i64, i64 } %t82, %S.ast.Type %t84, i1 false)
br label %for.step7347
for.step7347:
%t85 = load i64, ptr %a47
%t86 = add i64 %t85, 1
store i64 %t86, ptr %a47
br label %for.cond7345
for.end7348:
%t87 = load ptr, ptr %a1
call void @finch.gen.printf(ptr %t87, { ptr, i64, i64 } { ptr @.str.4821, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.4822, i64 0, i64 0 })
%t88 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4823, i64 4, i64 0 })
%t89 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t88, 1
ret %S.gen.Val %t89
endif7344:
%t90 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t90, ptr %a91
store { ptr, i64, i64 } { ptr @.str.4824, 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 %then7359, label %endif7361
then7359:
%t95 = load ptr, ptr %a1
%t96 = load %S.ast.Node, ptr %a2
%t97 = load { ptr, i64, i64 }, ptr %a8
call void @finch.gen.checkArgs(ptr %t95, %S.ast.Node %t96, i64 0, i64 1, { ptr, i64, i64 } %t97)
%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 0, %t100
br i1 %t101, label %range7362, label %inrange7363
range7362:
call void @finch_panic_index(ptr @.str.4825, i64 4329, i64 0, i64 %t100)
unreachable
inrange7363:
%t102 = extractvalue { ptr, i64, i64 } %t99, 0
%t103 = getelementptr inbounds %S.ast.Node, ptr %t102, i64 0
%t104 = load %S.ast.Node, ptr %t103
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
store %S.ast.Node %t107, ptr %a108
%t109 = getelementptr inbounds %S.ast.Node, ptr %a108, i32 0, i32 0
%t110 = load { ptr, i64, i64 }, ptr %t109
store { ptr, i64, i64 } %t110, ptr %a111
store { ptr, i64, i64 } { ptr @.str.4826, i64 3, i64 0 }, ptr %a112
%t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112)
%t114 = icmp ne i32 %t113, 0
br label %logic.from7364
logic.from7364:
br i1 %t114, label %logic.rhs7365, label %logic.end7366
logic.rhs7365:
%t115 = load ptr, ptr %a1
%t116 = getelementptr inbounds %S.ast.Node, ptr %a108, i32 0, i32 1
%t117 = load { ptr, i64, i64 }, ptr %t116
%t118 = call i64 @finch.gen.lookup(ptr %t115, { ptr, i64, i64 } %t117)
%t119 = icmp slt i64 %t118, 0
br label %logic.rend7367
logic.rend7367:
br label %logic.end7366
logic.end7366:
%t120 = phi i1 [ false, %logic.from7364 ], [ %t119, %logic.rend7367 ]
br i1 %t120, label %then7368, label %endif7370
then7368:
%t121 = load ptr, ptr %a1
%t122 = load ptr, ptr %a1
%t123 = icmp eq ptr %t122, null
br i1 %t123, label %panic7371, label %ok7372
panic7371:
call void @finch_panic(ptr @.str.4827, i64 4331, ptr @.str.4828)
unreachable
ok7372:
%t124 = getelementptr inbounds %S.gen.Gen, ptr %t122, i32 0, i32 13
%t125 = load { ptr, i64, i64 }, ptr %t124
%t126 = getelementptr inbounds %S.ast.Node, ptr %a108, i32 0, i32 1
%t127 = load { ptr, i64, i64 }, ptr %t126
%t128 = call i64 @finch.gen.findFn(ptr %t121, { ptr, i64, i64 } %t125, { ptr, i64, i64 } %t127)
store i64 %t128, ptr %a129
%t130 = load i64, ptr %a129
%t131 = icmp sge i64 %t130, 0
br i1 %t131, label %then7373, label %endif7375
then7373:
%t132 = load ptr, ptr %a1
%t133 = load i64, ptr %a129
%t134 = load %S.ast.Node, ptr %a108
%t135 = call { ptr, i64, i64 } @finch.gen.cThunk(ptr %t132, i64 %t133, %S.ast.Node %t134)
%t136 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t135, 0
%t137 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4829, i64 3, i64 0 })
%t138 = insertvalue %S.gen.Val %t136, %S.ast.Type %t137, 1
ret %S.gen.Val %t138
endif7375:
br label %endif7370
endif7370:
%t139 = getelementptr inbounds %S.ast.Node, ptr %a108, i32 0, i32 0
%t140 = load { ptr, i64, i64 }, ptr %t139
store { ptr, i64, i64 } %t140, ptr %a141
store { ptr, i64, i64 } { ptr @.str.4830, i64 3, i64 0 }, ptr %a142
%t143 = call i32 @finch_str_eq(ptr %a141, ptr %a142)
%t144 = icmp eq i32 %t143, 0
br label %logic.from7376
logic.from7376:
br i1 %t144, label %logic.rhs7377, label %logic.end7378
logic.rhs7377:
%t145 = getelementptr inbounds %S.ast.Node, ptr %a108, i32 0, i32 0
%t146 = load { ptr, i64, i64 }, ptr %t145
store { ptr, i64, i64 } %t146, ptr %a147
store { ptr, i64, i64 } { ptr @.str.4831, i64 6, i64 0 }, ptr %a148
%t149 = call i32 @finch_str_eq(ptr %a147, ptr %a148)
%t150 = icmp eq i32 %t149, 0
br label %logic.rend7379
logic.rend7379:
br label %logic.end7378
logic.end7378:
%t151 = phi i1 [ false, %logic.from7376 ], [ %t150, %logic.rend7379 ]
br label %logic.from7380
logic.from7380:
br i1 %t151, label %logic.rhs7381, label %logic.end7382
logic.rhs7381:
%t152 = getelementptr inbounds %S.ast.Node, ptr %a108, i32 0, i32 0
%t153 = load { ptr, i64, i64 }, ptr %t152
store { ptr, i64, i64 } %t153, ptr %a154
store { ptr, i64, i64 } { ptr @.str.4832, i64 5, i64 0 }, ptr %a155
%t156 = call i32 @finch_str_eq(ptr %a154, ptr %a155)
%t157 = icmp eq i32 %t156, 0
br label %logic.rend7383
logic.rend7383:
br label %logic.end7382
logic.end7382:
%t158 = phi i1 [ false, %logic.from7380 ], [ %t157, %logic.rend7383 ]
br i1 %t158, label %then7384, label %endif7386
then7384:
%t159 = load ptr, ptr %a1
%t160 = load %S.ast.Node, ptr %a108
call void @finch.gen.fail(ptr %t159, %S.ast.Node %t160, { ptr, i64, i64 } { ptr @.str.4833, i64 63, i64 0 })
br label %endif7386
endif7386:
%t161 = load ptr, ptr %a1
%t162 = load %S.ast.Node, ptr %a108
%t163 = call %S.gen.Place @finch.gen.place(ptr %t161, %S.ast.Node %t162, i1 true)
store %S.gen.Place %t163, ptr %a164
%t165 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 0
%t166 = load { ptr, i64, i64 }, ptr %t165
store { ptr, i64, i64 } %t166, ptr %a167
call void @finch_str_copy(ptr %a168, ptr %a167)
%t169 = load { ptr, i64, i64 }, ptr %a168
%t170 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t169, 0
%t171 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1
%t172 = load %S.ast.Type, ptr %t171
%t173 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t172)
%t174 = insertvalue %S.gen.Val %t170, %S.ast.Type %t173, 1
ret %S.gen.Val %t174
endif7361:
%t175 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t175, ptr %a176
store { ptr, i64, i64 } { ptr @.str.4834, i64 3, i64 0 }, ptr %a177
%t178 = call i32 @finch_str_eq(ptr %a176, ptr %a177)
%t179 = icmp ne i32 %t178, 0
br i1 %t179, label %then7387, label %endif7389
then7387:
%t180 = load ptr, ptr %a1
%t181 = load %S.ast.Node, ptr %a2
%t182 = load { ptr, i64, i64 }, ptr %a8
call void @finch.gen.checkArgs(ptr %t180, %S.ast.Node %t181, i64 0, i64 1, { ptr, i64, i64 } %t182)
%t183 = load ptr, ptr %a1
%t184 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t185 = load { ptr, i64, i64 }, ptr %t184
%t186 = extractvalue { ptr, i64, i64 } %t185, 1
%t187 = icmp uge i64 0, %t186
br i1 %t187, label %range7390, label %inrange7391
range7390:
call void @finch_panic_index(ptr @.str.4835, i64 4344, i64 0, i64 %t186)
unreachable
inrange7391:
%t188 = extractvalue { ptr, i64, i64 } %t185, 0
%t189 = getelementptr inbounds %S.ast.Node, ptr %t188, i64 0
%t190 = load %S.ast.Node, ptr %t189
%t191 = call %S.gen.Val @finch.gen.expr(ptr %t183, %S.ast.Node %t190)
store %S.gen.Val %t191, ptr %a192
%t193 = load ptr, ptr %a1
%t194 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t193)
store { ptr, i64, i64 } %t194, ptr %a195
%t196 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1
%t197 = getelementptr inbounds %S.ast.Type, ptr %t196, i32 0, i32 0
%t198 = load { ptr, i64, i64 }, ptr %t197
store { ptr, i64, i64 } %t198, ptr %a199
call void @finch_str_copy(ptr %a200, ptr %a199)
%t201 = load { ptr, i64, i64 }, ptr %a200
store { ptr, i64, i64 } %t201, ptr %a202
%t203 = load { ptr, i64, i64 }, ptr %a202
store { ptr, i64, i64 } %t203, ptr %a204
store { ptr, i64, i64 } { ptr @.str.4836, i64 3, i64 0 }, ptr %a205
%t206 = call i32 @finch_str_eq(ptr %a204, ptr %a205)
%t207 = icmp ne i32 %t206, 0
br i1 %t207, label %then7392, label %else7393
then7392:
%t208 = load ptr, ptr %a1
%t209 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 0
%t210 = load { ptr, i64, i64 }, ptr %t209
%t211 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1
%t212 = load %S.ast.Type, ptr %t211
%t213 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t208, { ptr, i64, i64 } %t210, %S.ast.Type %t212)
%t214 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t213, 0
%t215 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1
%t216 = load %S.ast.Type, ptr %t215
store %S.ast.Type %t216, ptr %a217
call void @finch.copy.S_ast_Type(ptr %a218, ptr %a217)
%t219 = load %S.ast.Type, ptr %a218
%t220 = insertvalue %S.gen.Val %t214, %S.ast.Type %t219, 1
%t221 = insertvalue %S.gen.Val %t220, i1 true, 2
ret %S.gen.Val %t221
else7393:
%t222 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1
%t223 = load %S.ast.Type, ptr %t222
%t224 = call i1 @finch.gen.isSigned(%S.ast.Type %t223)
br i1 %t224, label %then7395, label %else7396
then7395:
%t225 = load ptr, ptr %a1
%t226 = load { ptr, i64, i64 }, ptr %a195
store { ptr, i64, i64 } { ptr @.str.4837, i64 34, i64 0 }, ptr %a228
store { ptr, i64, i64 } %t226, ptr %a229
call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229)
%t230 = load { ptr, i64, i64 }, ptr %a227
store { ptr, i64, i64 } %t230, ptr %a232
store { ptr, i64, i64 } { ptr @.str.4838, i64 6, i64 0 }, ptr %a233
call void @finch_str_concat(ptr %a231, ptr %a232, ptr %a233)
%t234 = load { ptr, i64, i64 }, ptr %a231
%t235 = load ptr, ptr %a1
%t236 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 0
%t237 = load { ptr, i64, i64 }, ptr %t236
%t238 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1
%t239 = load %S.ast.Type, ptr %t238
%t240 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4839, i64 3, i64 0 })
%t241 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t235, { ptr, i64, i64 } %t237, %S.ast.Type %t239, %S.ast.Type %t240)
store { ptr, i64, i64 } %t234, 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.4840, i64 1, i64 0 }, ptr %a248
call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248)
%t249 = load { ptr, i64, i64 }, ptr %a246
call void @finch.gen.emit(ptr %t225, { ptr, i64, i64 } %t249)
br label %endif7397
else7396:
%t250 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1
%t251 = load %S.ast.Type, ptr %t250
%t252 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t251)
br i1 %t252, label %then7398, label %else7399
then7398:
%t253 = load ptr, ptr %a1
%t254 = load { ptr, i64, i64 }, ptr %a195
store { ptr, i64, i64 } { ptr @.str.4841, i64 35, 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.4842, i64 6, i64 0 }, ptr %a261
call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261)
%t262 = load { ptr, i64, i64 }, ptr %a259
%t263 = load ptr, ptr %a1
%t264 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 0
%t265 = load { ptr, i64, i64 }, ptr %t264
%t266 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1
%t267 = load %S.ast.Type, ptr %t266
%t268 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4843, i64 3, i64 0 })
%t269 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t263, { ptr, i64, i64 } %t265, %S.ast.Type %t267, %S.ast.Type %t268)
store { ptr, i64, i64 } %t262, 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.4844, i64 1, i64 0 }, ptr %a276
call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276)
%t277 = load { ptr, i64, i64 }, ptr %a274
call void @finch.gen.emit(ptr %t253, { ptr, i64, i64 } %t277)
br label %endif7400
else7399:
%t278 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1
%t279 = load %S.ast.Type, ptr %t278
%t280 = call i1 @finch.gen.isFloat(%S.ast.Type %t279)
br i1 %t280, label %then7401, label %else7402
then7401:
%t281 = load ptr, ptr %a1
%t282 = load { ptr, i64, i64 }, ptr %a195
store { ptr, i64, i64 } { ptr @.str.4845, i64 36, i64 0 }, ptr %a284
store { ptr, i64, i64 } %t282, ptr %a285
call void @finch_str_concat(ptr %a283, ptr %a284, ptr %a285)
%t286 = load { ptr, i64, i64 }, ptr %a283
store { ptr, i64, i64 } %t286, ptr %a288
store { ptr, i64, i64 } { ptr @.str.4846, i64 9, i64 0 }, ptr %a289
call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289)
%t290 = load { ptr, i64, i64 }, ptr %a287
%t291 = load ptr, ptr %a1
%t292 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 0
%t293 = load { ptr, i64, i64 }, ptr %t292
%t294 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1
%t295 = load %S.ast.Type, ptr %t294
%t296 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4847, i64 5, i64 0 })
%t297 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t291, { ptr, i64, i64 } %t293, %S.ast.Type %t295, %S.ast.Type %t296)
store { ptr, i64, i64 } %t290, ptr %a299
store { ptr, i64, i64 } %t297, ptr %a300
call void @finch_str_concat(ptr %a298, ptr %a299, ptr %a300)
%t301 = load { ptr, i64, i64 }, ptr %a298
store { ptr, i64, i64 } %t301, ptr %a303
store { ptr, i64, i64 } { ptr @.str.4848, i64 1, i64 0 }, ptr %a304
call void @finch_str_concat(ptr %a302, ptr %a303, ptr %a304)
%t305 = load { ptr, i64, i64 }, ptr %a302
call void @finch.gen.emit(ptr %t281, { ptr, i64, i64 } %t305)
br label %endif7403
else7402:
%t306 = load { ptr, i64, i64 }, ptr %a202
store { ptr, i64, i64 } %t306, ptr %a307
store { ptr, i64, i64 } { ptr @.str.4849, i64 4, i64 0 }, ptr %a308
%t309 = call i32 @finch_str_eq(ptr %a307, ptr %a308)
%t310 = icmp ne i32 %t309, 0
br i1 %t310, label %then7404, label %else7405
then7404:
%t311 = load ptr, ptr %a1
%t312 = load { ptr, i64, i64 }, ptr %a195
store { ptr, i64, i64 } { ptr @.str.4850, i64 35, i64 0 }, ptr %a314
store { ptr, i64, i64 } %t312, ptr %a315
call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315)
%t316 = load { ptr, i64, i64 }, ptr %a313
store { ptr, i64, i64 } %t316, ptr %a318
store { ptr, i64, i64 } { ptr @.str.4851, i64 13, i64 0 }, ptr %a319
call void @finch_str_concat(ptr %a317, ptr %a318, ptr %a319)
%t320 = load { ptr, i64, i64 }, ptr %a317
%t321 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 0
%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)
%t326 = load { ptr, i64, i64 }, ptr %a323
store { ptr, i64, i64 } %t326, ptr %a328
store { ptr, i64, i64 } { ptr @.str.4852, i64 1, i64 0 }, ptr %a329
call void @finch_str_concat(ptr %a327, ptr %a328, ptr %a329)
%t330 = load { ptr, i64, i64 }, ptr %a327
call void @finch.gen.emit(ptr %t311, { ptr, i64, i64 } %t330)
br label %endif7406
else7405:
%t331 = load { ptr, i64, i64 }, ptr %a202
store { ptr, i64, i64 } %t331, ptr %a332
store { ptr, i64, i64 } { ptr @.str.4853, i64 4, i64 0 }, ptr %a333
%t334 = call i32 @finch_str_eq(ptr %a332, ptr %a333)
%t335 = icmp ne i32 %t334, 0
br i1 %t335, label %then7407, label %else7408
then7407:
%t336 = load ptr, ptr %a1
%t337 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 0
%t338 = load { ptr, i64, i64 }, ptr %t337
store { ptr, i64, i64 } { ptr @.str.4854, i64 8, i64 0 }, ptr %a340
store { ptr, i64, i64 } %t338, ptr %a341
call void @finch_str_concat(ptr %a339, ptr %a340, ptr %a341)
%t342 = load { ptr, i64, i64 }, ptr %a339
store { ptr, i64, i64 } %t342, ptr %a344
store { ptr, i64, i64 } { ptr @.str.4855, i64 7, i64 0 }, ptr %a345
call void @finch_str_concat(ptr %a343, ptr %a344, ptr %a345)
%t346 = load { ptr, i64, i64 }, ptr %a343
%t347 = call { ptr, i64, i64 } @finch.gen.op(ptr %t336, { ptr, i64, i64 } %t346)
store { ptr, i64, i64 } %t347, ptr %a348
%t349 = load ptr, ptr %a1
%t350 = load { ptr, i64, i64 }, ptr %a195
store { ptr, i64, i64 } { ptr @.str.4856, i64 35, i64 0 }, ptr %a352
store { ptr, i64, i64 } %t350, ptr %a353
call void @finch_str_concat(ptr %a351, ptr %a352, ptr %a353)
%t354 = load { ptr, i64, i64 }, ptr %a351
store { ptr, i64, i64 } %t354, ptr %a356
store { ptr, i64, i64 } { ptr @.str.4857, i64 6, 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 %a348
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)
%t363 = load { ptr, i64, i64 }, ptr %a360
store { ptr, i64, i64 } %t363, ptr %a365
store { ptr, i64, i64 } { ptr @.str.4858, i64 1, i64 0 }, ptr %a366
call void @finch_str_concat(ptr %a364, ptr %a365, ptr %a366)
%t367 = load { ptr, i64, i64 }, ptr %a364
call void @finch.gen.emit(ptr %t349, { ptr, i64, i64 } %t367)
br label %endif7409
else7408:
%t368 = load { ptr, i64, i64 }, ptr %a202
store { ptr, i64, i64 } %t368, ptr %a369
store { ptr, i64, i64 } { ptr @.str.4859, i64 3, i64 0 }, ptr %a370
%t371 = call i32 @finch_str_eq(ptr %a369, ptr %a370)
%t372 = icmp ne i32 %t371, 0
br i1 %t372, label %then7410, label %else7411
then7410:
%t373 = load ptr, ptr %a1
%t374 = load { ptr, i64, i64 }, ptr %a195
call void @finch.gen.store(ptr %t373, { ptr, i64, i64 } { ptr @.str.4860, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4861, i64 15, i64 0 }, { ptr, i64, i64 } %t374)
%t375 = load ptr, ptr %a1
%t376 = load { ptr, i64, i64 }, ptr %a195
store { ptr, i64, i64 } { ptr @.str.4862, i64 32, 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.4863, i64 6, i64 0 }, ptr %a383
call void @finch_str_concat(ptr %a381, ptr %a382, ptr %a383)
%t384 = load { ptr, i64, i64 }, ptr %a381
%t385 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 0
%t386 = load { ptr, i64, i64 }, ptr %t385
store { ptr, i64, i64 } %t384, 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.4864, i64 1, i64 0 }, ptr %a393
call void @finch_str_concat(ptr %a391, ptr %a392, ptr %a393)
%t394 = load { ptr, i64, i64 }, ptr %a391
call void @finch.gen.emit(ptr %t375, { ptr, i64, i64 } %t394)
br label %endif7412
else7411:
%t395 = load { ptr, i64, i64 }, ptr %a202
store { ptr, i64, i64 } %t395, ptr %a396
store { ptr, i64, i64 } { ptr @.str.4865, i64 5, i64 0 }, ptr %a397
%t398 = call i32 @finch_str_eq(ptr %a396, ptr %a397)
%t399 = icmp ne i32 %t398, 0
br label %logic.from7413
logic.from7413:
br i1 %t399, label %logic.rhs7414, label %logic.end7415
logic.rhs7414:
%t400 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1
%t401 = getelementptr inbounds %S.ast.Type, ptr %t400, i32 0, i32 1
%t402 = load { ptr, i64, i64 }, ptr %t401
%t403 = extractvalue { ptr, i64, i64 } %t402, 1
%t404 = icmp uge i64 0, %t403
br i1 %t404, label %range7416, label %inrange7417
range7416:
call void @finch_panic_index(ptr @.str.4866, i64 4364, i64 0, i64 %t403)
unreachable
inrange7417:
%t405 = extractvalue { ptr, i64, i64 } %t402, 0
%t406 = getelementptr inbounds %S.ast.Type, ptr %t405, i64 0
%t407 = getelementptr inbounds %S.ast.Type, ptr %t406, i32 0, i32 0
%t408 = load { ptr, i64, i64 }, ptr %t407
store { ptr, i64, i64 } %t408, ptr %a409
store { ptr, i64, i64 } { ptr @.str.4867, i64 2, i64 0 }, ptr %a410
%t411 = call i32 @finch_str_eq(ptr %a409, ptr %a410)
%t412 = icmp ne i32 %t411, 0
br label %logic.from7418
logic.from7418:
br i1 %t412, label %logic.end7420, label %logic.rhs7419
logic.rhs7419:
%t413 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1
%t414 = getelementptr inbounds %S.ast.Type, ptr %t413, i32 0, i32 1
%t415 = load { ptr, i64, i64 }, ptr %t414
%t416 = extractvalue { ptr, i64, i64 } %t415, 1
%t417 = icmp uge i64 0, %t416
br i1 %t417, label %range7421, label %inrange7422
range7421:
call void @finch_panic_index(ptr @.str.4868, i64 4364, i64 0, i64 %t416)
unreachable
inrange7422:
%t418 = extractvalue { ptr, i64, i64 } %t415, 0
%t419 = getelementptr inbounds %S.ast.Type, ptr %t418, i64 0
%t420 = getelementptr inbounds %S.ast.Type, ptr %t419, i32 0, i32 0
%t421 = load { ptr, i64, i64 }, ptr %t420
store { ptr, i64, i64 } %t421, ptr %a422
store { ptr, i64, i64 } { ptr @.str.4869, i64 4, i64 0 }, ptr %a423
%t424 = call i32 @finch_str_eq(ptr %a422, ptr %a423)
%t425 = icmp ne i32 %t424, 0
br label %logic.rend7423
logic.rend7423:
br label %logic.end7420
logic.end7420:
%t426 = phi i1 [ true, %logic.from7418 ], [ %t425, %logic.rend7423 ]
br label %logic.rend7424
logic.rend7424:
br label %logic.end7415
logic.end7415:
%t427 = phi i1 [ false, %logic.from7413 ], [ %t426, %logic.rend7424 ]
br i1 %t427, label %then7425, label %else7426
then7425:
%t428 = load ptr, ptr %a1
%t429 = load { ptr, i64, i64 }, ptr %a195
call void @finch.gen.store(ptr %t428, { ptr, i64, i64 } { ptr @.str.4870, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4871, i64 15, i64 0 }, { ptr, i64, i64 } %t429)
%t430 = load ptr, ptr %a1
%t431 = load { ptr, i64, i64 }, ptr %a195
store { ptr, i64, i64 } { ptr @.str.4872, i64 36, i64 0 }, ptr %a433
store { ptr, i64, i64 } %t431, ptr %a434
call void @finch_str_concat(ptr %a432, ptr %a433, ptr %a434)
%t435 = load { ptr, i64, i64 }, ptr %a432
store { ptr, i64, i64 } %t435, ptr %a437
store { ptr, i64, i64 } { ptr @.str.4873, i64 6, i64 0 }, ptr %a438
call void @finch_str_concat(ptr %a436, ptr %a437, ptr %a438)
%t439 = load { ptr, i64, i64 }, ptr %a436
%t440 = load ptr, ptr %a1
%t441 = load %S.gen.Val, ptr %a192
%t442 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t440, %S.gen.Val %t441)
store { ptr, i64, i64 } %t439, ptr %a444
store { ptr, i64, i64 } %t442, ptr %a445
call void @finch_str_concat(ptr %a443, ptr %a444, ptr %a445)
%t446 = load { ptr, i64, i64 }, ptr %a443
store { ptr, i64, i64 } %t446, ptr %a448
store { ptr, i64, i64 } { ptr @.str.4874, i64 1, i64 0 }, ptr %a449
call void @finch_str_concat(ptr %a447, ptr %a448, ptr %a449)
%t450 = load { ptr, i64, i64 }, ptr %a447
call void @finch.gen.emit(ptr %t430, { ptr, i64, i64 } %t450)
br label %endif7427
else7426:
%t451 = load { ptr, i64, i64 }, ptr %a202
store { ptr, i64, i64 } %t451, ptr %a452
store { ptr, i64, i64 } { ptr @.str.4875, i64 4, i64 0 }, ptr %a453
%t454 = call i32 @finch_str_eq(ptr %a452, ptr %a453)
%t455 = icmp ne i32 %t454, 0
br label %logic.from7428
logic.from7428:
br i1 %t455, label %logic.end7430, label %logic.rhs7429
logic.rhs7429:
%t456 = load { ptr, i64, i64 }, ptr %a202
store { ptr, i64, i64 } %t456, ptr %a457
store { ptr, i64, i64 } { ptr @.str.4876, i64 4, i64 0 }, ptr %a458
%t459 = call i32 @finch_str_eq(ptr %a457, ptr %a458)
%t460 = icmp ne i32 %t459, 0
br label %logic.rend7431
logic.rend7431:
br label %logic.end7430
logic.end7430:
%t461 = phi i1 [ true, %logic.from7428 ], [ %t460, %logic.rend7431 ]
br label %logic.from7432
logic.from7432:
br i1 %t461, label %logic.end7434, label %logic.rhs7433
logic.rhs7433:
%t462 = load { ptr, i64, i64 }, ptr %a202
store { ptr, i64, i64 } %t462, ptr %a463
store { ptr, i64, i64 } { ptr @.str.4877, i64 5, i64 0 }, ptr %a464
%t465 = call i32 @finch_str_eq(ptr %a463, ptr %a464)
%t466 = icmp ne i32 %t465, 0
br label %logic.rend7435
logic.rend7435:
br label %logic.end7434
logic.end7434:
%t467 = phi i1 [ true, %logic.from7432 ], [ %t466, %logic.rend7435 ]
br label %logic.from7436
logic.from7436:
br i1 %t467, label %logic.end7438, label %logic.rhs7437
logic.rhs7437:
%t468 = load { ptr, i64, i64 }, ptr %a202
store { ptr, i64, i64 } %t468, ptr %a469
store { ptr, i64, i64 } { ptr @.str.4878, i64 3, i64 0 }, ptr %a470
%t471 = call i32 @finch_str_eq(ptr %a469, ptr %a470)
%t472 = icmp ne i32 %t471, 0
br label %logic.rend7439
logic.rend7439:
br label %logic.end7438
logic.end7438:
%t473 = phi i1 [ true, %logic.from7436 ], [ %t472, %logic.rend7439 ]
br label %logic.from7440
logic.from7440:
br i1 %t473, label %logic.end7442, label %logic.rhs7441
logic.rhs7441:
%t474 = load { ptr, i64, i64 }, ptr %a202
store { ptr, i64, i64 } %t474, ptr %a475
store { ptr, i64, i64 } { ptr @.str.4879, i64 6, i64 0 }, ptr %a476
%t477 = call i32 @finch_str_eq(ptr %a475, ptr %a476)
%t478 = icmp ne i32 %t477, 0
br label %logic.rend7443
logic.rend7443:
br label %logic.end7442
logic.end7442:
%t479 = phi i1 [ true, %logic.from7440 ], [ %t478, %logic.rend7443 ]
br label %logic.from7444
logic.from7444:
br i1 %t479, label %logic.end7446, label %logic.rhs7445
logic.rhs7445:
%t480 = load { ptr, i64, i64 }, ptr %a202
store { ptr, i64, i64 } %t480, ptr %a481
store { ptr, i64, i64 } { ptr @.str.4880, i64 4, i64 0 }, ptr %a482
%t483 = call i32 @finch_str_eq(ptr %a481, ptr %a482)
%t484 = icmp ne i32 %t483, 0
br label %logic.rend7447
logic.rend7447:
br label %logic.end7446
logic.end7446:
%t485 = phi i1 [ true, %logic.from7444 ], [ %t484, %logic.rend7447 ]
br i1 %t485, label %then7448, label %else7449
then7448:
%t486 = load ptr, ptr %a1
%t487 = load { ptr, i64, i64 }, ptr %a195
call void @finch.gen.store(ptr %t486, { ptr, i64, i64 } { ptr @.str.4881, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4882, i64 15, i64 0 }, { ptr, i64, i64 } %t487)
%t488 = load ptr, ptr %a1
%t489 = load { ptr, i64, i64 }, ptr %a195
%t490 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 0
%t491 = load { ptr, i64, i64 }, ptr %t490
%t492 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1
%t493 = load %S.ast.Type, ptr %t492
call void @finch.gen.emitFormat(ptr %t488, { ptr, i64, i64 } %t489, { ptr, i64, i64 } %t491, %S.ast.Type %t493, i1 false)
br label %endif7450
else7449:
%t494 = load ptr, ptr %a1
%t495 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t496 = load { ptr, i64, i64 }, ptr %t495
%t497 = extractvalue { ptr, i64, i64 } %t496, 1
%t498 = icmp uge i64 0, %t497
br i1 %t498, label %range7451, label %inrange7452
range7451:
call void @finch_panic_index(ptr @.str.4883, i64 4372, i64 0, i64 %t497)
unreachable
inrange7452:
%t499 = extractvalue { ptr, i64, i64 } %t496, 0
%t500 = getelementptr inbounds %S.ast.Node, ptr %t499, i64 0
%t501 = load %S.ast.Node, ptr %t500
%t502 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1
%t503 = load %S.ast.Type, ptr %t502
%t504 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t503)
store { ptr, i64, i64 } { ptr @.str.4884, i64 11, i64 0 }, ptr %a506
store { ptr, i64, i64 } %t504, ptr %a507
call void @finch_str_concat(ptr %a505, ptr %a506, ptr %a507)
%t508 = load { ptr, i64, i64 }, ptr %a505
store { ptr, i64, i64 } %t508, ptr %a510
store { ptr, i64, i64 } { ptr @.str.4885, i64 9, i64 0 }, ptr %a511
call void @finch_str_concat(ptr %a509, ptr %a510, ptr %a511)
%t512 = load { ptr, i64, i64 }, ptr %a509
call void @finch.gen.fail(ptr %t494, %S.ast.Node %t501, { ptr, i64, i64 } %t512)
br label %endif7450
endif7450:
br label %endif7427
endif7427:
br label %endif7412
endif7412:
br label %endif7409
endif7409:
br label %endif7406
endif7406:
br label %endif7403
endif7403:
br label %endif7400
endif7400:
br label %endif7397
endif7397:
br label %endif7394
endif7394:
%t513 = load ptr, ptr %a1
%t514 = load { ptr, i64, i64 }, ptr %a195
%t515 = call { ptr, i64, i64 } @finch.gen.load(ptr %t513, { ptr, i64, i64 } { ptr @.str.4886, i64 17, i64 0 }, { ptr, i64, i64 } %t514)
%t516 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t515, 0
%t517 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4887, i64 3, i64 0 })
%t518 = insertvalue %S.gen.Val %t516, %S.ast.Type %t517, 1
%t519 = insertvalue %S.gen.Val %t518, i1 true, 2
ret %S.gen.Val %t519
endif7389:
%t520 = load { ptr, i64, i64 }, ptr %a8
%t521 = call { ptr, i64, i64 } @finch.gen.numType({ ptr, i64, i64 } %t520)
store { ptr, i64, i64 } %t521, ptr %a522
%t523 = getelementptr inbounds { ptr, i64, i64 }, ptr %a522, i32 0, i32 1
%t524 = load i64, ptr %t523
%t525 = icmp sgt i64 %t524, 0
br i1 %t525, label %then7453, label %endif7455
then7453:
%t526 = load ptr, ptr %a1
%t527 = load %S.ast.Node, ptr %a2
%t528 = load { ptr, i64, i64 }, ptr %a522
%t529 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } %t528)
%t530 = call %S.gen.Val @finch.gen.convert(ptr %t526, %S.ast.Node %t527, %S.ast.Type %t529)
ret %S.gen.Val %t530
endif7455:
%t531 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t531, ptr %a532
store { ptr, i64, i64 } { ptr @.str.4888, i64 9, i64 0 }, ptr %a533
%t534 = call i32 @finch_str_eq(ptr %a532, ptr %a533)
%t535 = icmp ne i32 %t534, 0
br label %logic.from7456
logic.from7456:
br i1 %t535, label %logic.end7458, label %logic.rhs7457
logic.rhs7457:
%t536 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t536, ptr %a537
store { ptr, i64, i64 } { ptr @.str.4889, i64 11, i64 0 }, ptr %a538
%t539 = call i32 @finch_str_eq(ptr %a537, ptr %a538)
%t540 = icmp ne i32 %t539, 0
br label %logic.rend7459
logic.rend7459:
br label %logic.end7458
logic.end7458:
%t541 = phi i1 [ true, %logic.from7456 ], [ %t540, %logic.rend7459 ]
br i1 %t541, label %then7460, label %endif7462
then7460:
%t542 = load ptr, ptr %a1
%t543 = load %S.ast.Node, ptr %a2
%t544 = load { ptr, i64, i64 }, ptr %a8
call void @finch.gen.checkArgs(ptr %t542, %S.ast.Node %t543, i64 0, i64 1, { ptr, i64, i64 } %t544)
%t545 = load ptr, ptr %a1
%t546 = load ptr, ptr %a1
%t547 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t548 = load { ptr, i64, i64 }, ptr %t547
%t549 = extractvalue { ptr, i64, i64 } %t548, 1
%t550 = icmp uge i64 0, %t549
br i1 %t550, label %range7463, label %inrange7464
range7463:
call void @finch_panic_index(ptr @.str.4890, i64 4382, i64 0, i64 %t549)
unreachable
inrange7464:
%t551 = extractvalue { ptr, i64, i64 } %t548, 0
%t552 = getelementptr inbounds %S.ast.Node, ptr %t551, i64 0
%t553 = load %S.ast.Node, ptr %t552
%t554 = call %S.gen.Val @finch.gen.strArg(ptr %t546, %S.ast.Node %t553, { ptr, i64, i64 } { ptr @.str.4891, i64 13, i64 0 })
%t555 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t545, %S.gen.Val %t554)
store { ptr, i64, i64 } %t555, ptr %a556
%t557 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t557, ptr %a558
store { ptr, i64, i64 } { ptr @.str.4892, i64 11, i64 0 }, ptr %a559
%t560 = call i32 @finch_str_eq(ptr %a558, ptr %a559)
%t561 = icmp ne i32 %t560, 0
br i1 %t561, label %then7465, label %endif7467
then7465:
%t562 = load ptr, ptr %a1
%t563 = load { ptr, i64, i64 }, ptr %a556
store { ptr, i64, i64 } { ptr @.str.4893, i64 32, i64 0 }, ptr %a565
store { ptr, i64, i64 } %t563, ptr %a566
call void @finch_str_concat(ptr %a564, ptr %a565, ptr %a566)
%t567 = load { ptr, i64, i64 }, ptr %a564
store { ptr, i64, i64 } %t567, ptr %a569
store { ptr, i64, i64 } { ptr @.str.4894, i64 1, i64 0 }, ptr %a570
call void @finch_str_concat(ptr %a568, ptr %a569, ptr %a570)
%t571 = load { ptr, i64, i64 }, ptr %a568
%t572 = call { ptr, i64, i64 } @finch.gen.op(ptr %t562, { ptr, i64, i64 } %t571)
store { ptr, i64, i64 } %t572, ptr %a573
%t574 = load ptr, ptr %a1
%t575 = load { ptr, i64, i64 }, ptr %a573
store { ptr, i64, i64 } { ptr @.str.4895, i64 12, i64 0 }, ptr %a577
store { ptr, i64, i64 } %t575, ptr %a578
call void @finch_str_concat(ptr %a576, ptr %a577, ptr %a578)
%t579 = load { ptr, i64, i64 }, ptr %a576
store { ptr, i64, i64 } %t579, ptr %a581
store { ptr, i64, i64 } { ptr @.str.4896, i64 3, i64 0 }, ptr %a582
call void @finch_str_concat(ptr %a580, ptr %a581, ptr %a582)
%t583 = load { ptr, i64, i64 }, ptr %a580
%t584 = call { ptr, i64, i64 } @finch.gen.op(ptr %t574, { 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.4897, i64 4, i64 0 })
%t587 = insertvalue %S.gen.Val %t585, %S.ast.Type %t586, 1
ret %S.gen.Val %t587
endif7467:
%t588 = load ptr, ptr %a1
%t589 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t588)
store { ptr, i64, i64 } %t589, ptr %a590
%t591 = load ptr, ptr %a1
%t592 = icmp eq ptr %t591, null
br i1 %t592, label %panic7468, label %ok7469
panic7468:
call void @finch_panic(ptr @.str.4898, i64 4388, ptr @.str.4899)
unreachable
ok7469:
%t593 = getelementptr inbounds %S.gen.Gen, ptr %t591, i32 0, i32 39
%t594 = load { ptr, i64, i64 }, ptr %t593
%t595 = load %S.ast.Node, ptr %a2
%t596 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t595)
store { ptr, i64, i64 } %t594, ptr %a597
store { ptr, i64, i64 } %t596, ptr %a598
%t599 = call i32 @finch_str_eq(ptr %a597, ptr %a598)
%t600 = icmp ne i32 %t599, 0
br i1 %t600, label %then7470, label %endif7472
then7470:
%t601 = load ptr, ptr %a1
%t602 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t601, { ptr, i64, i64 } { ptr @.str.4900, i64 17, i64 0 })
store { ptr, i64, i64 } %t602, ptr %a603
%t604 = load ptr, ptr %a1
%t605 = load { ptr, i64, i64 }, ptr %a590
call void @finch.gen.store(ptr %t604, { ptr, i64, i64 } { ptr @.str.4901, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4902, i64 15, i64 0 }, { ptr, i64, i64 } %t605)
%t606 = load ptr, ptr %a1
%t607 = load { ptr, i64, i64 }, ptr %a603
call void @finch.gen.store(ptr %t606, { ptr, i64, i64 } { ptr @.str.4903, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4904, i64 15, i64 0 }, { ptr, i64, i64 } %t607)
%t608 = load ptr, ptr %a1
%t609 = load { ptr, i64, i64 }, ptr %a590
store { ptr, i64, i64 } { ptr @.str.4905, i64 34, i64 0 }, ptr %a611
store { ptr, i64, i64 } %t609, ptr %a612
call void @finch_str_concat(ptr %a610, ptr %a611, ptr %a612)
%t613 = load { ptr, i64, i64 }, ptr %a610
store { ptr, i64, i64 } %t613, ptr %a615
store { ptr, i64, i64 } { ptr @.str.4906, i64 6, i64 0 }, ptr %a616
call void @finch_str_concat(ptr %a614, ptr %a615, ptr %a616)
%t617 = load { ptr, i64, i64 }, ptr %a614
%t618 = load { ptr, i64, i64 }, ptr %a556
store { ptr, i64, i64 } %t617, ptr %a620
store { ptr, i64, i64 } %t618, ptr %a621
call void @finch_str_concat(ptr %a619, ptr %a620, ptr %a621)
%t622 = load { ptr, i64, i64 }, ptr %a619
store { ptr, i64, i64 } %t622, ptr %a624
store { ptr, i64, i64 } { ptr @.str.4907, i64 6, i64 0 }, ptr %a625
call void @finch_str_concat(ptr %a623, ptr %a624, ptr %a625)
%t626 = load { ptr, i64, i64 }, ptr %a623
%t627 = load { ptr, i64, i64 }, ptr %a603
store { ptr, i64, i64 } %t626, ptr %a629
store { ptr, i64, i64 } %t627, ptr %a630
call void @finch_str_concat(ptr %a628, ptr %a629, ptr %a630)
%t631 = load { ptr, i64, i64 }, ptr %a628
store { ptr, i64, i64 } %t631, ptr %a633
store { ptr, i64, i64 } { ptr @.str.4908, i64 1, i64 0 }, ptr %a634
call void @finch_str_concat(ptr %a632, ptr %a633, ptr %a634)
%t635 = load { ptr, i64, i64 }, ptr %a632
%t636 = call { ptr, i64, i64 } @finch.gen.op(ptr %t608, { ptr, i64, i64 } %t635)
store { ptr, i64, i64 } %t636, ptr %a637
%t638 = load ptr, ptr %a1
%t639 = load { ptr, i64, i64 }, ptr %a637
store { ptr, i64, i64 } { ptr @.str.4909, i64 12, i64 0 }, ptr %a641
store { ptr, i64, i64 } %t639, ptr %a642
call void @finch_str_concat(ptr %a640, ptr %a641, ptr %a642)
%t643 = load { ptr, i64, i64 }, ptr %a640
store { ptr, i64, i64 } %t643, ptr %a645
store { ptr, i64, i64 } { ptr @.str.4910, i64 3, i64 0 }, ptr %a646
call void @finch_str_concat(ptr %a644, ptr %a645, ptr %a646)
%t647 = load { ptr, i64, i64 }, ptr %a644
%t648 = call { ptr, i64, i64 } @finch.gen.op(ptr %t638, { ptr, i64, i64 } %t647)
%t649 = load ptr, ptr %a1
%t650 = icmp eq ptr %t649, null
br i1 %t650, label %panic7473, label %ok7474
panic7473:
call void @finch_panic(ptr @.str.4911, i64 4393, ptr @.str.4912)
unreachable
ok7474:
%t651 = getelementptr inbounds %S.gen.Gen, ptr %t649, i32 0, i32 40
store { ptr, i64, i64 } %t648, ptr %t651
%t652 = load ptr, ptr %a1
%t653 = load { ptr, i64, i64 }, ptr %a603
%t654 = call { ptr, i64, i64 } @finch.gen.load(ptr %t652, { ptr, i64, i64 } { ptr @.str.4913, i64 17, i64 0 }, { ptr, i64, i64 } %t653)
%t655 = load ptr, ptr %a1
%t656 = icmp eq ptr %t655, null
br i1 %t656, label %panic7475, label %ok7476
panic7475:
call void @finch_panic(ptr @.str.4914, i64 4394, ptr @.str.4915)
unreachable
ok7476:
%t657 = getelementptr inbounds %S.gen.Gen, ptr %t655, i32 0, i32 41
store { ptr, i64, i64 } %t654, ptr %t657
%t658 = load ptr, ptr %a1
%t659 = load { ptr, i64, i64 }, ptr %a590
%t660 = call { ptr, i64, i64 } @finch.gen.load(ptr %t658, { ptr, i64, i64 } { ptr @.str.4916, i64 17, i64 0 }, { ptr, i64, i64 } %t659)
%t661 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t660, 0
%t662 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4917, i64 3, i64 0 })
%t663 = insertvalue %S.gen.Val %t661, %S.ast.Type %t662, 1
%t664 = insertvalue %S.gen.Val %t663, i1 true, 2
ret %S.gen.Val %t664
endif7472:
%t665 = load ptr, ptr %a1
%t666 = load ptr, ptr %a1
%t667 = icmp eq ptr %t666, null
br i1 %t667, label %panic7477, label %ok7478
panic7477:
call void @finch_panic(ptr @.str.4918, i64 4397, ptr @.str.4919)
unreachable
ok7478:
%t668 = getelementptr inbounds %S.gen.Gen, ptr %t666, i32 0, i32 1
%t669 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13
%t670 = load i64, ptr %t669
%t671 = load { ptr, i64, i64 }, ptr %t668
%t672 = extractvalue { ptr, i64, i64 } %t671, 1
%t673 = icmp uge i64 %t670, %t672
br i1 %t673, label %range7479, label %inrange7480
range7479:
call void @finch_panic_index(ptr @.str.4920, i64 4397, i64 %t670, i64 %t672)
unreachable
inrange7480:
%t674 = extractvalue { ptr, i64, i64 } %t671, 0
%t675 = getelementptr inbounds { ptr, i64, i64 }, ptr %t674, i64 %t670
%t676 = load { ptr, i64, i64 }, ptr %t675
%t677 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t665, { ptr, i64, i64 } %t676)
store { ptr, i64, i64 } %t677, ptr %a678
%t679 = load ptr, ptr %a1
%t680 = load { ptr, i64, i64 }, ptr %a590
store { ptr, i64, i64 } { ptr @.str.4921, i64 31, 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.4922, i64 6, i64 0 }, ptr %a687
call void @finch_str_concat(ptr %a685, ptr %a686, ptr %a687)
%t688 = load { ptr, i64, i64 }, ptr %a685
%t689 = load { ptr, i64, i64 }, ptr %a556
store { ptr, i64, i64 } %t688, ptr %a691
store { ptr, i64, i64 } %t689, ptr %a692
call void @finch_str_concat(ptr %a690, ptr %a691, ptr %a692)
%t693 = load { ptr, i64, i64 }, ptr %a690
store { ptr, i64, i64 } %t693, ptr %a695
store { ptr, i64, i64 } { ptr @.str.4923, i64 6, i64 0 }, ptr %a696
call void @finch_str_concat(ptr %a694, ptr %a695, ptr %a696)
%t697 = load { ptr, i64, i64 }, ptr %a694
%t698 = load { ptr, i64, i64 }, ptr %a678
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)
%t702 = load { ptr, i64, i64 }, ptr %a699
store { ptr, i64, i64 } %t702, ptr %a704
store { ptr, i64, i64 } { ptr @.str.4924, i64 6, i64 0 }, ptr %a705
call void @finch_str_concat(ptr %a703, ptr %a704, ptr %a705)
%t706 = load { ptr, i64, i64 }, ptr %a703
%t707 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11
%t708 = load i64, ptr %t707
call void @finch_str_from_int(ptr %a709, i64 %t708)
%t710 = load { ptr, i64, i64 }, ptr %a709
store { ptr, i64, i64 } %t706, ptr %a712
store { ptr, i64, i64 } %t710, ptr %a713
call void @finch_str_concat(ptr %a711, ptr %a712, ptr %a713)
%t714 = load { ptr, i64, i64 }, ptr %a711
store { ptr, i64, i64 } %t714, ptr %a716
store { ptr, i64, i64 } { ptr @.str.4925, i64 1, i64 0 }, ptr %a717
call void @finch_str_concat(ptr %a715, ptr %a716, ptr %a717)
%t718 = load { ptr, i64, i64 }, ptr %a715
call void @finch.gen.emit(ptr %t679, { ptr, i64, i64 } %t718)
%t719 = load ptr, ptr %a1
%t720 = load { ptr, i64, i64 }, ptr %a590
%t721 = call { ptr, i64, i64 } @finch.gen.load(ptr %t719, { ptr, i64, i64 } { ptr @.str.4926, i64 17, i64 0 }, { ptr, i64, i64 } %t720)
%t722 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t721, 0
%t723 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4927, i64 3, i64 0 })
%t724 = insertvalue %S.gen.Val %t722, %S.ast.Type %t723, 1
%t725 = insertvalue %S.gen.Val %t724, i1 true, 2
ret %S.gen.Val %t725
endif7462:
%t726 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t726, ptr %a727
store { ptr, i64, i64 } { ptr @.str.4928, i64 10, i64 0 }, ptr %a728
%t729 = call i32 @finch_str_eq(ptr %a727, ptr %a728)
%t730 = icmp ne i32 %t729, 0
br i1 %t730, label %then7481, label %endif7483
then7481:
%t731 = load ptr, ptr %a1
%t732 = load %S.ast.Node, ptr %a2
%t733 = load { ptr, i64, i64 }, ptr %a8
call void @finch.gen.checkArgs(ptr %t731, %S.ast.Node %t732, i64 0, i64 2, { ptr, i64, i64 } %t733)
%t734 = load ptr, ptr %a1
%t735 = load ptr, ptr %a1
%t736 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t737 = load { ptr, i64, i64 }, ptr %t736
%t738 = extractvalue { ptr, i64, i64 } %t737, 1
%t739 = icmp uge i64 0, %t738
br i1 %t739, label %range7484, label %inrange7485
range7484:
call void @finch_panic_index(ptr @.str.4929, i64 4403, i64 0, i64 %t738)
unreachable
inrange7485:
%t740 = extractvalue { ptr, i64, i64 } %t737, 0
%t741 = getelementptr inbounds %S.ast.Node, ptr %t740, i64 0
%t742 = load %S.ast.Node, ptr %t741
%t743 = call %S.gen.Val @finch.gen.strArg(ptr %t735, %S.ast.Node %t742, { ptr, i64, i64 } { ptr @.str.4930, i64 13, i64 0 })
%t744 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t734, %S.gen.Val %t743)
store { ptr, i64, i64 } %t744, ptr %a745
%t746 = load ptr, ptr %a1
%t747 = load ptr, ptr %a1
%t748 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t749 = load { ptr, i64, i64 }, ptr %t748
%t750 = extractvalue { ptr, i64, i64 } %t749, 1
%t751 = icmp uge i64 1, %t750
br i1 %t751, label %range7486, label %inrange7487
range7486:
call void @finch_panic_index(ptr @.str.4931, i64 4404, i64 1, i64 %t750)
unreachable
inrange7487:
%t752 = extractvalue { ptr, i64, i64 } %t749, 0
%t753 = getelementptr inbounds %S.ast.Node, ptr %t752, i64 1
%t754 = load %S.ast.Node, ptr %t753
%t755 = call %S.gen.Val @finch.gen.strArg(ptr %t747, %S.ast.Node %t754, { ptr, i64, i64 } { ptr @.str.4932, i64 8, i64 0 })
%t756 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t746, %S.gen.Val %t755)
store { ptr, i64, i64 } %t756, ptr %a757
%t758 = load ptr, ptr %a1
%t759 = icmp eq ptr %t758, null
br i1 %t759, label %panic7488, label %ok7489
panic7488:
call void @finch_panic(ptr @.str.4933, i64 4405, ptr @.str.4934)
unreachable
ok7489:
%t760 = getelementptr inbounds %S.gen.Gen, ptr %t758, i32 0, i32 39
%t761 = load { ptr, i64, i64 }, ptr %t760
%t762 = load %S.ast.Node, ptr %a2
%t763 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t762)
store { ptr, i64, i64 } %t761, ptr %a764
store { ptr, i64, i64 } %t763, ptr %a765
%t766 = call i32 @finch_str_eq(ptr %a764, ptr %a765)
%t767 = icmp ne i32 %t766, 0
br i1 %t767, label %then7490, label %endif7492
then7490:
%t768 = load ptr, ptr %a1
%t769 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t768, { ptr, i64, i64 } { ptr @.str.4935, i64 17, i64 0 })
store { ptr, i64, i64 } %t769, ptr %a770
%t771 = load ptr, ptr %a1
%t772 = load { ptr, i64, i64 }, ptr %a770
call void @finch.gen.store(ptr %t771, { ptr, i64, i64 } { ptr @.str.4936, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4937, i64 15, i64 0 }, { ptr, i64, i64 } %t772)
%t773 = load ptr, ptr %a1
%t774 = load { ptr, i64, i64 }, ptr %a745
store { ptr, i64, i64 } { ptr @.str.4938, i64 35, i64 0 }, ptr %a776
store { ptr, i64, i64 } %t774, ptr %a777
call void @finch_str_concat(ptr %a775, ptr %a776, ptr %a777)
%t778 = load { ptr, i64, i64 }, ptr %a775
store { ptr, i64, i64 } %t778, ptr %a780
store { ptr, i64, i64 } { ptr @.str.4939, i64 6, i64 0 }, ptr %a781
call void @finch_str_concat(ptr %a779, ptr %a780, ptr %a781)
%t782 = load { ptr, i64, i64 }, ptr %a779
%t783 = load { ptr, i64, i64 }, ptr %a757
store { ptr, i64, i64 } %t782, ptr %a785
store { ptr, i64, i64 } %t783, ptr %a786
call void @finch_str_concat(ptr %a784, ptr %a785, ptr %a786)
%t787 = load { ptr, i64, i64 }, ptr %a784
store { ptr, i64, i64 } %t787, ptr %a789
store { ptr, i64, i64 } { ptr @.str.4940, i64 6, i64 0 }, ptr %a790
call void @finch_str_concat(ptr %a788, ptr %a789, ptr %a790)
%t791 = load { ptr, i64, i64 }, ptr %a788
%t792 = load { ptr, i64, i64 }, ptr %a770
store { ptr, i64, i64 } %t791, ptr %a794
store { ptr, i64, i64 } %t792, ptr %a795
call void @finch_str_concat(ptr %a793, ptr %a794, ptr %a795)
%t796 = load { ptr, i64, i64 }, ptr %a793
store { ptr, i64, i64 } %t796, ptr %a798
store { ptr, i64, i64 } { ptr @.str.4941, i64 1, i64 0 }, ptr %a799
call void @finch_str_concat(ptr %a797, ptr %a798, ptr %a799)
%t800 = load { ptr, i64, i64 }, ptr %a797
%t801 = call { ptr, i64, i64 } @finch.gen.op(ptr %t773, { ptr, i64, i64 } %t800)
store { ptr, i64, i64 } %t801, ptr %a802
%t803 = load ptr, ptr %a1
%t804 = load { ptr, i64, i64 }, ptr %a802
store { ptr, i64, i64 } { ptr @.str.4942, i64 12, i64 0 }, ptr %a806
store { ptr, i64, i64 } %t804, ptr %a807
call void @finch_str_concat(ptr %a805, ptr %a806, ptr %a807)
%t808 = load { ptr, i64, i64 }, ptr %a805
store { ptr, i64, i64 } %t808, ptr %a810
store { ptr, i64, i64 } { ptr @.str.4943, i64 3, i64 0 }, ptr %a811
call void @finch_str_concat(ptr %a809, ptr %a810, ptr %a811)
%t812 = load { ptr, i64, i64 }, ptr %a809
%t813 = call { ptr, i64, i64 } @finch.gen.op(ptr %t803, { ptr, i64, i64 } %t812)
%t814 = load ptr, ptr %a1
%t815 = icmp eq ptr %t814, null
br i1 %t815, label %panic7493, label %ok7494
panic7493:
call void @finch_panic(ptr @.str.4944, i64 4409, ptr @.str.4945)
unreachable
ok7494:
%t816 = getelementptr inbounds %S.gen.Gen, ptr %t814, i32 0, i32 40
store { ptr, i64, i64 } %t813, ptr %t816
%t817 = load ptr, ptr %a1
%t818 = load { ptr, i64, i64 }, ptr %a770
%t819 = call { ptr, i64, i64 } @finch.gen.load(ptr %t817, { ptr, i64, i64 } { ptr @.str.4946, i64 17, i64 0 }, { ptr, i64, i64 } %t818)
%t820 = load ptr, ptr %a1
%t821 = icmp eq ptr %t820, null
br i1 %t821, label %panic7495, label %ok7496
panic7495:
call void @finch_panic(ptr @.str.4947, i64 4410, ptr @.str.4948)
unreachable
ok7496:
%t822 = getelementptr inbounds %S.gen.Gen, ptr %t820, i32 0, i32 41
store { ptr, i64, i64 } %t819, ptr %t822
%t823 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4949, i64 4, i64 0 })
%t824 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t823, 1
ret %S.gen.Val %t824
endif7492:
%t825 = load ptr, ptr %a1
%t826 = load { ptr, i64, i64 }, ptr %a745
store { ptr, i64, i64 } { ptr @.str.4950, i64 31, i64 0 }, ptr %a828
store { ptr, i64, i64 } %t826, ptr %a829
call void @finch_str_concat(ptr %a827, ptr %a828, ptr %a829)
%t830 = load { ptr, i64, i64 }, ptr %a827
store { ptr, i64, i64 } %t830, ptr %a832
store { ptr, i64, i64 } { ptr @.str.4951, i64 6, i64 0 }, ptr %a833
call void @finch_str_concat(ptr %a831, ptr %a832, ptr %a833)
%t834 = load { ptr, i64, i64 }, ptr %a831
%t835 = load { ptr, i64, i64 }, ptr %a757
store { ptr, i64, i64 } %t834, ptr %a837
store { ptr, i64, i64 } %t835, ptr %a838
call void @finch_str_concat(ptr %a836, ptr %a837, ptr %a838)
%t839 = load { ptr, i64, i64 }, ptr %a836
store { ptr, i64, i64 } %t839, ptr %a841
store { ptr, i64, i64 } { ptr @.str.4952, i64 1, i64 0 }, ptr %a842
call void @finch_str_concat(ptr %a840, ptr %a841, ptr %a842)
%t843 = load { ptr, i64, i64 }, ptr %a840
%t844 = call { ptr, i64, i64 } @finch.gen.op(ptr %t825, { ptr, i64, i64 } %t843)
store { ptr, i64, i64 } %t844, ptr %a845
%t846 = load ptr, ptr %a1
%t847 = load { ptr, i64, i64 }, ptr %a845
store { ptr, i64, i64 } { ptr @.str.4953, i64 12, i64 0 }, ptr %a849
store { ptr, i64, i64 } %t847, ptr %a850
call void @finch_str_concat(ptr %a848, ptr %a849, ptr %a850)
%t851 = load { ptr, i64, i64 }, ptr %a848
store { ptr, i64, i64 } %t851, ptr %a853
store { ptr, i64, i64 } { ptr @.str.4954, i64 3, i64 0 }, ptr %a854
call void @finch_str_concat(ptr %a852, ptr %a853, ptr %a854)
%t855 = load { ptr, i64, i64 }, ptr %a852
%t856 = call { ptr, i64, i64 } @finch.gen.op(ptr %t846, { ptr, i64, i64 } %t855)
%t857 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t856, 0
%t858 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4955, i64 4, i64 0 })
%t859 = insertvalue %S.gen.Val %t857, %S.ast.Type %t858, 1
ret %S.gen.Val %t859
endif7483:
%t860 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t860, ptr %a861
store { ptr, i64, i64 } { ptr @.str.4956, i64 11, i64 0 }, ptr %a862
%t863 = call i32 @finch_str_eq(ptr %a861, ptr %a862)
%t864 = icmp ne i32 %t863, 0
br i1 %t864, label %then7497, label %endif7499
then7497:
%t865 = load ptr, ptr %a1
%t866 = load %S.ast.Node, ptr %a2
%t867 = load { ptr, i64, i64 }, ptr %a8
call void @finch.gen.checkArgs(ptr %t865, %S.ast.Node %t866, i64 0, i64 1, { ptr, i64, i64 } %t867)
%t868 = load ptr, ptr %a1
%t869 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t870 = load { ptr, i64, i64 }, ptr %t869
%t871 = extractvalue { ptr, i64, i64 } %t870, 1
%t872 = icmp uge i64 0, %t871
br i1 %t872, label %range7500, label %inrange7501
range7500:
call void @finch_panic_index(ptr @.str.4957, i64 4418, i64 0, i64 %t871)
unreachable
inrange7501:
%t873 = extractvalue { ptr, i64, i64 } %t870, 0
%t874 = getelementptr inbounds %S.ast.Node, ptr %t873, i64 0
%t875 = load %S.ast.Node, ptr %t874
%t876 = call %S.gen.Val @finch.gen.strArg(ptr %t868, %S.ast.Node %t875, { ptr, i64, i64 } { ptr @.str.4958, i64 13, i64 0 })
store %S.gen.Val %t876, ptr %a877
%t878 = load ptr, ptr %a1
%t879 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t878)
store { ptr, i64, i64 } %t879, ptr %a880
%t881 = load ptr, ptr %a1
%t882 = load { ptr, i64, i64 }, ptr %a880
store { ptr, i64, i64 } { ptr @.str.4959, i64 30, i64 0 }, ptr %a884
store { ptr, i64, i64 } %t882, ptr %a885
call void @finch_str_concat(ptr %a883, ptr %a884, ptr %a885)
%t886 = load { ptr, i64, i64 }, ptr %a883
store { ptr, i64, i64 } %t886, ptr %a888
store { ptr, i64, i64 } { ptr @.str.4960, i64 6, i64 0 }, ptr %a889
call void @finch_str_concat(ptr %a887, ptr %a888, ptr %a889)
%t890 = load { ptr, i64, i64 }, ptr %a887
%t891 = load ptr, ptr %a1
%t892 = load %S.gen.Val, ptr %a877
%t893 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t891, %S.gen.Val %t892)
store { ptr, i64, i64 } %t890, 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.4961, i64 1, i64 0 }, ptr %a900
call void @finch_str_concat(ptr %a898, ptr %a899, ptr %a900)
%t901 = load { ptr, i64, i64 }, ptr %a898
call void @finch.gen.emit(ptr %t881, { ptr, i64, i64 } %t901)
%t902 = load ptr, ptr %a1
%t903 = icmp eq ptr %t902, null
br i1 %t903, label %panic7502, label %ok7503
panic7502:
call void @finch_panic(ptr @.str.4962, i64 4421, ptr @.str.4963)
unreachable
ok7503:
%t904 = getelementptr inbounds %S.gen.Gen, ptr %t902, i32 0, i32 39
%t905 = load { ptr, i64, i64 }, ptr %t904
%t906 = load %S.ast.Node, ptr %a2
%t907 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t906)
store { ptr, i64, i64 } %t905, ptr %a908
store { ptr, i64, i64 } %t907, ptr %a909
%t910 = call i32 @finch_str_eq(ptr %a908, ptr %a909)
%t911 = icmp ne i32 %t910, 0
br i1 %t911, label %then7504, label %endif7506
then7504:
%t912 = load ptr, ptr %a1
%t913 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t912, { ptr, i64, i64 } { ptr @.str.4964, i64 17, i64 0 })
store { ptr, i64, i64 } %t913, ptr %a914
%t915 = load ptr, ptr %a1
%t916 = load { ptr, i64, i64 }, ptr %a914
call void @finch.gen.store(ptr %t915, { ptr, i64, i64 } { ptr @.str.4965, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4966, i64 15, i64 0 }, { ptr, i64, i64 } %t916)
%t917 = load ptr, ptr %a1
%t918 = load { ptr, i64, i64 }, ptr %a880
store { ptr, i64, i64 } { ptr @.str.4967, i64 36, i64 0 }, ptr %a920
store { ptr, i64, i64 } %t918, ptr %a921
call void @finch_str_concat(ptr %a919, ptr %a920, ptr %a921)
%t922 = load { ptr, i64, i64 }, ptr %a919
store { ptr, i64, i64 } %t922, ptr %a924
store { ptr, i64, i64 } { ptr @.str.4968, i64 6, i64 0 }, ptr %a925
call void @finch_str_concat(ptr %a923, ptr %a924, ptr %a925)
%t926 = load { ptr, i64, i64 }, ptr %a923
%t927 = load { ptr, i64, i64 }, ptr %a914
store { ptr, i64, i64 } %t926, 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.4969, i64 1, i64 0 }, ptr %a934
call void @finch_str_concat(ptr %a932, ptr %a933, ptr %a934)
%t935 = load { ptr, i64, i64 }, ptr %a932
%t936 = call { ptr, i64, i64 } @finch.gen.op(ptr %t917, { ptr, i64, i64 } %t935)
store { ptr, i64, i64 } %t936, ptr %a937
%t938 = load ptr, ptr %a1
%t939 = load { ptr, i64, i64 }, ptr %a937
store { ptr, i64, i64 } { ptr @.str.4970, i64 12, i64 0 }, ptr %a941
store { ptr, i64, i64 } %t939, ptr %a942
call void @finch_str_concat(ptr %a940, ptr %a941, ptr %a942)
%t943 = load { ptr, i64, i64 }, ptr %a940
store { ptr, i64, i64 } %t943, ptr %a945
store { ptr, i64, i64 } { ptr @.str.4971, i64 3, i64 0 }, ptr %a946
call void @finch_str_concat(ptr %a944, ptr %a945, ptr %a946)
%t947 = load { ptr, i64, i64 }, ptr %a944
%t948 = call { ptr, i64, i64 } @finch.gen.op(ptr %t938, { ptr, i64, i64 } %t947)
%t949 = load ptr, ptr %a1
%t950 = icmp eq ptr %t949, null
br i1 %t950, label %panic7507, label %ok7508
panic7507:
call void @finch_panic(ptr @.str.4972, i64 4425, ptr @.str.4973)
unreachable
ok7508:
%t951 = getelementptr inbounds %S.gen.Gen, ptr %t949, i32 0, i32 40
store { ptr, i64, i64 } %t948, ptr %t951
%t952 = load ptr, ptr %a1
%t953 = load { ptr, i64, i64 }, ptr %a914
%t954 = call { ptr, i64, i64 } @finch.gen.load(ptr %t952, { ptr, i64, i64 } { ptr @.str.4974, i64 17, i64 0 }, { ptr, i64, i64 } %t953)
%t955 = load ptr, ptr %a1
%t956 = icmp eq ptr %t955, null
br i1 %t956, label %panic7509, label %ok7510
panic7509:
call void @finch_panic(ptr @.str.4975, i64 4426, ptr @.str.4976)
unreachable
ok7510:
%t957 = getelementptr inbounds %S.gen.Gen, ptr %t955, i32 0, i32 41
store { ptr, i64, i64 } %t954, ptr %t957
%t958 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4977, i64 4, i64 0 })
%t959 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t958, 1
ret %S.gen.Val %t959
endif7506:
%t960 = load ptr, ptr %a1
%t961 = load { ptr, i64, i64 }, ptr %a880
store { ptr, i64, i64 } { ptr @.str.4978, i64 32, i64 0 }, ptr %a963
store { ptr, i64, i64 } %t961, ptr %a964
call void @finch_str_concat(ptr %a962, ptr %a963, ptr %a964)
%t965 = load { ptr, i64, i64 }, ptr %a962
store { ptr, i64, i64 } %t965, ptr %a967
store { ptr, i64, i64 } { ptr @.str.4979, i64 1, i64 0 }, ptr %a968
call void @finch_str_concat(ptr %a966, ptr %a967, ptr %a968)
%t969 = load { ptr, i64, i64 }, ptr %a966
%t970 = call { ptr, i64, i64 } @finch.gen.op(ptr %t960, { ptr, i64, i64 } %t969)
store { ptr, i64, i64 } %t970, ptr %a971
%t972 = load ptr, ptr %a1
%t973 = load { ptr, i64, i64 }, ptr %a971
store { ptr, i64, i64 } { ptr @.str.4980, i64 12, i64 0 }, ptr %a975
store { ptr, i64, i64 } %t973, ptr %a976
call void @finch_str_concat(ptr %a974, ptr %a975, ptr %a976)
%t977 = load { ptr, i64, i64 }, ptr %a974
store { ptr, i64, i64 } %t977, ptr %a979
store { ptr, i64, i64 } { ptr @.str.4981, i64 3, i64 0 }, ptr %a980
call void @finch_str_concat(ptr %a978, ptr %a979, ptr %a980)
%t981 = load { ptr, i64, i64 }, ptr %a978
%t982 = call { ptr, i64, i64 } @finch.gen.op(ptr %t972, { ptr, i64, i64 } %t981)
%t983 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t982, 0
%t984 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4982, i64 4, i64 0 })
%t985 = insertvalue %S.gen.Val %t983, %S.ast.Type %t984, 1
ret %S.gen.Val %t985
endif7499:
%t986 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t986, ptr %a987
store { ptr, i64, i64 } { ptr @.str.4983, i64 5, i64 0 }, ptr %a988
%t989 = call i32 @finch_str_eq(ptr %a987, ptr %a988)
%t990 = icmp ne i32 %t989, 0
br i1 %t990, label %then7511, label %endif7513
then7511:
%t991 = load ptr, ptr %a1
%t992 = load %S.ast.Node, ptr %a2
%t993 = load { ptr, i64, i64 }, ptr %a8
call void @finch.gen.checkArgs(ptr %t991, %S.ast.Node %t992, i64 0, i64 1, { ptr, i64, i64 } %t993)
%t994 = load ptr, ptr %a1
%t995 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t996 = load { ptr, i64, i64 }, ptr %t995
%t997 = extractvalue { ptr, i64, i64 } %t996, 1
%t998 = icmp uge i64 0, %t997
br i1 %t998, label %range7514, label %inrange7515
range7514:
call void @finch_panic_index(ptr @.str.4984, i64 4434, i64 0, i64 %t997)
unreachable
inrange7515:
%t999 = extractvalue { ptr, i64, i64 } %t996, 0
%t1000 = getelementptr inbounds %S.ast.Node, ptr %t999, i64 0
%t1001 = load %S.ast.Node, ptr %t1000
%t1002 = call %S.gen.Val @finch.gen.strArg(ptr %t994, %S.ast.Node %t1001, { ptr, i64, i64 } { ptr @.str.4985, i64 11, i64 0 })
store %S.gen.Val %t1002, ptr %a1003
%t1004 = load ptr, ptr %a1
%t1005 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1004)
store { ptr, i64, i64 } %t1005, ptr %a1006
%t1007 = load ptr, ptr %a1
%t1008 = load { ptr, i64, i64 }, ptr %a1006
store { ptr, i64, i64 } { ptr @.str.4986, i64 30, i64 0 }, ptr %a1010
store { ptr, i64, i64 } %t1008, ptr %a1011
call void @finch_str_concat(ptr %a1009, ptr %a1010, ptr %a1011)
%t1012 = load { ptr, i64, i64 }, ptr %a1009
store { ptr, i64, i64 } %t1012, ptr %a1014
store { ptr, i64, i64 } { ptr @.str.4987, i64 6, i64 0 }, ptr %a1015
call void @finch_str_concat(ptr %a1013, ptr %a1014, ptr %a1015)
%t1016 = load { ptr, i64, i64 }, ptr %a1013
%t1017 = load ptr, ptr %a1
%t1018 = load %S.gen.Val, ptr %a1003
%t1019 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t1017, %S.gen.Val %t1018)
store { ptr, i64, i64 } %t1016, 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.4988, i64 1, i64 0 }, ptr %a1026
call void @finch_str_concat(ptr %a1024, ptr %a1025, ptr %a1026)
%t1027 = load { ptr, i64, i64 }, ptr %a1024
call void @finch.gen.emit(ptr %t1007, { ptr, i64, i64 } %t1027)
%t1028 = load ptr, ptr %a1
%t1029 = load { ptr, i64, i64 }, ptr %a1006
store { ptr, i64, i64 } { ptr @.str.4989, i64 26, i64 0 }, ptr %a1031
store { ptr, i64, i64 } %t1029, ptr %a1032
call void @finch_str_concat(ptr %a1030, ptr %a1031, ptr %a1032)
%t1033 = load { ptr, i64, i64 }, ptr %a1030
store { ptr, i64, i64 } %t1033, ptr %a1035
store { ptr, i64, i64 } { ptr @.str.4990, i64 1, i64 0 }, ptr %a1036
call void @finch_str_concat(ptr %a1034, ptr %a1035, ptr %a1036)
%t1037 = load { ptr, i64, i64 }, ptr %a1034
%t1038 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1028, { ptr, i64, i64 } %t1037)
%t1039 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1038, 0
%t1040 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4991, i64 3, i64 0 })
%t1041 = insertvalue %S.gen.Val %t1039, %S.ast.Type %t1040, 1
ret %S.gen.Val %t1041
endif7513:
%t1042 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t1042, ptr %a1043
store { ptr, i64, i64 } { ptr @.str.4992, i64 4, i64 0 }, ptr %a1044
%t1045 = call i32 @finch_str_eq(ptr %a1043, ptr %a1044)
%t1046 = icmp ne i32 %t1045, 0
br i1 %t1046, label %then7516, label %endif7518
then7516:
%t1047 = load ptr, ptr %a1
%t1048 = load %S.ast.Node, ptr %a2
%t1049 = load { ptr, i64, i64 }, ptr %a8
call void @finch.gen.checkArgs(ptr %t1047, %S.ast.Node %t1048, i64 0, i64 1, { ptr, i64, i64 } %t1049)
%t1050 = load ptr, ptr %a1
%t1051 = load ptr, ptr %a1
%t1052 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t1053 = load { ptr, i64, i64 }, ptr %t1052
%t1054 = extractvalue { ptr, i64, i64 } %t1053, 1
%t1055 = icmp uge i64 0, %t1054
br i1 %t1055, label %range7519, label %inrange7520
range7519:
call void @finch_panic_index(ptr @.str.4993, i64 4441, i64 0, i64 %t1054)
unreachable
inrange7520:
%t1056 = extractvalue { ptr, i64, i64 } %t1053, 0
%t1057 = getelementptr inbounds %S.ast.Node, ptr %t1056, i64 0
%t1058 = load %S.ast.Node, ptr %t1057
%t1059 = call %S.gen.Val @finch.gen.expr(ptr %t1051, %S.ast.Node %t1058)
%t1060 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4994, i64 3, i64 0 })
%t1061 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t1062 = load { ptr, i64, i64 }, ptr %t1061
%t1063 = extractvalue { ptr, i64, i64 } %t1062, 1
%t1064 = icmp uge i64 0, %t1063
br i1 %t1064, label %range7521, label %inrange7522
range7521:
call void @finch_panic_index(ptr @.str.4995, i64 4441, i64 0, i64 %t1063)
unreachable
inrange7522:
%t1065 = extractvalue { ptr, i64, i64 } %t1062, 0
%t1066 = getelementptr inbounds %S.ast.Node, ptr %t1065, i64 0
%t1067 = load %S.ast.Node, ptr %t1066
%t1068 = call %S.gen.Val @finch.gen.coerce(ptr %t1050, %S.gen.Val %t1059, %S.ast.Type %t1060, %S.ast.Node %t1067, { ptr, i64, i64 } { ptr @.str.4996, i64 13, i64 0 })
store %S.gen.Val %t1068, ptr %a1069
%t1070 = load ptr, ptr %a1
%t1071 = getelementptr inbounds %S.gen.Val, ptr %a1069, i32 0, i32 0
%t1072 = load { ptr, i64, i64 }, ptr %t1071
store { ptr, i64, i64 } { ptr @.str.4997, i64 10, i64 0 }, ptr %a1074
store { ptr, i64, i64 } %t1072, ptr %a1075
call void @finch_str_concat(ptr %a1073, ptr %a1074, ptr %a1075)
%t1076 = load { ptr, i64, i64 }, ptr %a1073
store { ptr, i64, i64 } %t1076, ptr %a1078
store { ptr, i64, i64 } { ptr @.str.4998, i64 7, i64 0 }, ptr %a1079
call void @finch_str_concat(ptr %a1077, ptr %a1078, ptr %a1079)
%t1080 = load { ptr, i64, i64 }, ptr %a1077
%t1081 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1070, { ptr, i64, i64 } %t1080)
store { ptr, i64, i64 } %t1081, ptr %a1082
%t1083 = load ptr, ptr %a1
%t1084 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1083, { ptr, i64, i64 } { ptr @.str.4999, i64 26, i64 0 })
store { ptr, i64, i64 } %t1084, ptr %a1085
%t1086 = load ptr, ptr %a1
%t1087 = load { ptr, i64, i64 }, ptr %a1082
store { ptr, i64, i64 } { ptr @.str.5000, i64 20, i64 0 }, ptr %a1089
store { ptr, i64, i64 } %t1087, ptr %a1090
call void @finch_str_concat(ptr %a1088, ptr %a1089, ptr %a1090)
%t1091 = load { ptr, i64, i64 }, ptr %a1088
store { ptr, i64, i64 } %t1091, ptr %a1093
store { ptr, i64, i64 } { ptr @.str.5001, i64 1, i64 0 }, ptr %a1094
call void @finch_str_concat(ptr %a1092, ptr %a1093, ptr %a1094)
%t1095 = load { ptr, i64, i64 }, ptr %a1092
call void @finch.gen.emit(ptr %t1086, { ptr, i64, i64 } %t1095)
%t1096 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5002, i64 4, i64 0 })
%t1097 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1096, 1
ret %S.gen.Val %t1097
endif7518:
%t1098 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t1098, ptr %a1099
store { ptr, i64, i64 } { ptr @.str.5003, i64 5, i64 0 }, ptr %a1100
%t1101 = call i32 @finch_str_eq(ptr %a1099, ptr %a1100)
%t1102 = icmp ne i32 %t1101, 0
br i1 %t1102, label %then7523, label %endif7525
then7523:
%t1103 = load ptr, ptr %a1
%t1104 = call %S.gen.Val @finch.gen.strConst(ptr %t1103, { ptr, i64, i64 } { ptr @.str.5004, i64 0, i64 0 })
store %S.gen.Val %t1104, ptr %a1105
%t1106 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t1107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1106, i32 0, i32 1
%t1108 = load i64, ptr %t1107
%t1109 = icmp sgt i64 %t1108, 0
br i1 %t1109, label %then7526, label %endif7528
then7526:
%t1110 = load ptr, ptr %a1
%t1111 = load %S.ast.Node, ptr %a2
%t1112 = load { ptr, i64, i64 }, ptr %a8
call void @finch.gen.checkArgs(ptr %t1110, %S.ast.Node %t1111, i64 0, i64 1, { ptr, i64, i64 } %t1112)
%t1113 = load ptr, ptr %a1
%t1114 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t1115 = load { ptr, i64, i64 }, ptr %t1114
%t1116 = extractvalue { ptr, i64, i64 } %t1115, 1
%t1117 = icmp uge i64 0, %t1116
br i1 %t1117, label %range7529, label %inrange7530
range7529:
call void @finch_panic_index(ptr @.str.5005, i64 4451, i64 0, i64 %t1116)
unreachable
inrange7530:
%t1118 = extractvalue { ptr, i64, i64 } %t1115, 0
%t1119 = getelementptr inbounds %S.ast.Node, ptr %t1118, i64 0
%t1120 = load %S.ast.Node, ptr %t1119
%t1121 = call %S.gen.Val @finch.gen.strArg(ptr %t1113, %S.ast.Node %t1120, { ptr, i64, i64 } { ptr @.str.5006, i64 12, i64 0 })
store %S.gen.Val %t1121, ptr %a1105
br label %endif7528
endif7528:
%t1122 = load ptr, ptr %a1
%t1123 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1122)
store { ptr, i64, i64 } %t1123, ptr %a1124
%t1125 = load ptr, ptr %a1
%t1126 = load { ptr, i64, i64 }, ptr %a1124
store { ptr, i64, i64 } { ptr @.str.5007, i64 27, i64 0 }, ptr %a1128
store { ptr, i64, i64 } %t1126, ptr %a1129
call void @finch_str_concat(ptr %a1127, ptr %a1128, ptr %a1129)
%t1130 = load { ptr, i64, i64 }, ptr %a1127
store { ptr, i64, i64 } %t1130, ptr %a1132
store { ptr, i64, i64 } { ptr @.str.5008, i64 6, i64 0 }, ptr %a1133
call void @finch_str_concat(ptr %a1131, ptr %a1132, ptr %a1133)
%t1134 = load { ptr, i64, i64 }, ptr %a1131
%t1135 = load ptr, ptr %a1
%t1136 = load %S.gen.Val, ptr %a1105
%t1137 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t1135, %S.gen.Val %t1136)
store { ptr, i64, i64 } %t1134, ptr %a1139
store { ptr, i64, i64 } %t1137, ptr %a1140
call void @finch_str_concat(ptr %a1138, ptr %a1139, ptr %a1140)
%t1141 = load { ptr, i64, i64 }, ptr %a1138
store { ptr, i64, i64 } %t1141, ptr %a1143
store { ptr, i64, i64 } { ptr @.str.5009, i64 1, i64 0 }, ptr %a1144
call void @finch_str_concat(ptr %a1142, ptr %a1143, ptr %a1144)
%t1145 = load { ptr, i64, i64 }, ptr %a1142
call void @finch.gen.emit(ptr %t1125, { ptr, i64, i64 } %t1145)
%t1146 = load ptr, ptr %a1
%t1147 = load { ptr, i64, i64 }, ptr %a1124
%t1148 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1146, { ptr, i64, i64 } { ptr @.str.5010, i64 17, i64 0 }, { ptr, i64, i64 } %t1147)
%t1149 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1148, 0
%t1150 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5011, i64 3, i64 0 })
%t1151 = insertvalue %S.gen.Val %t1149, %S.ast.Type %t1150, 1
%t1152 = insertvalue %S.gen.Val %t1151, i1 true, 2
ret %S.gen.Val %t1152
endif7525:
%t1153 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t1153, ptr %a1154
store { ptr, i64, i64 } { ptr @.str.5012, i64 3, i64 0 }, ptr %a1155
%t1156 = call i32 @finch_str_eq(ptr %a1154, ptr %a1155)
%t1157 = icmp ne i32 %t1156, 0
br i1 %t1157, label %then7531, label %endif7533
then7531:
%t1158 = load ptr, ptr %a1
%t1159 = load %S.ast.Node, ptr %a2
%t1160 = load { ptr, i64, i64 }, ptr %a8
call void @finch.gen.checkArgs(ptr %t1158, %S.ast.Node %t1159, i64 0, i64 1, { ptr, i64, i64 } %t1160)
%t1161 = load ptr, ptr %a1
%t1162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t1163 = load { ptr, i64, i64 }, ptr %t1162
%t1164 = extractvalue { ptr, i64, i64 } %t1163, 1
%t1165 = icmp uge i64 0, %t1164
br i1 %t1165, label %range7534, label %inrange7535
range7534:
call void @finch_panic_index(ptr @.str.5013, i64 4459, i64 0, i64 %t1164)
unreachable
inrange7535:
%t1166 = extractvalue { ptr, i64, i64 } %t1163, 0
%t1167 = getelementptr inbounds %S.ast.Node, ptr %t1166, i64 0
%t1168 = load %S.ast.Node, ptr %t1167
%t1169 = call %S.gen.Val @finch.gen.expr(ptr %t1161, %S.ast.Node %t1168)
store %S.gen.Val %t1169, ptr %a1170
%t1171 = load ptr, ptr %a1
%t1172 = load ptr, ptr %a1
%t1173 = getelementptr inbounds %S.gen.Val, ptr %a1170, i32 0, i32 1
%t1174 = load %S.ast.Type, ptr %t1173
%t1175 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1172, %S.ast.Type %t1174)
store { ptr, i64, i64 } { ptr @.str.5014, i64 26, i64 0 }, ptr %a1177
store { ptr, i64, i64 } %t1175, ptr %a1178
call void @finch_str_concat(ptr %a1176, ptr %a1177, ptr %a1178)
%t1179 = load { ptr, i64, i64 }, ptr %a1176
store { ptr, i64, i64 } %t1179, ptr %a1181
store { ptr, i64, i64 } { ptr @.str.5015, i64 1, i64 0 }, ptr %a1182
call void @finch_str_concat(ptr %a1180, ptr %a1181, ptr %a1182)
%t1183 = load { ptr, i64, i64 }, ptr %a1180
%t1184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1171, { ptr, i64, i64 } %t1183)
store { ptr, i64, i64 } %t1184, ptr %a1185
%t1186 = load ptr, ptr %a1
%t1187 = load ptr, ptr %a1
%t1188 = getelementptr inbounds %S.gen.Val, ptr %a1170, i32 0, i32 1
%t1189 = load %S.ast.Type, ptr %t1188
%t1190 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t1187, %S.ast.Type %t1189)
%t1191 = load ptr, ptr %a1
%t1192 = load %S.gen.Val, ptr %a1170
%t1193 = call { ptr, i64, i64 } @finch.gen.own(ptr %t1191, %S.gen.Val %t1192)
%t1194 = load { ptr, i64, i64 }, ptr %a1185
call void @finch.gen.store(ptr %t1186, { ptr, i64, i64 } %t1190, { ptr, i64, i64 } %t1193, { ptr, i64, i64 } %t1194)
%t1195 = load { ptr, i64, i64 }, ptr %a1185
store { ptr, i64, i64 } %t1195, ptr %a1196
call void @finch_str_copy(ptr %a1197, ptr %a1196)
%t1198 = load { ptr, i64, i64 }, ptr %a1197
%t1199 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1198, 0
%t1200 = getelementptr inbounds %S.gen.Val, ptr %a1170, i32 0, i32 1
%t1201 = load %S.ast.Type, ptr %t1200
%t1202 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t1201)
%t1203 = insertvalue %S.gen.Val %t1199, %S.ast.Type %t1202, 1
ret %S.gen.Val %t1203
endif7533:
%t1204 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t1204, ptr %a1205
store { ptr, i64, i64 } { ptr @.str.5016, i64 4, i64 0 }, ptr %a1206
%t1207 = call i32 @finch_str_eq(ptr %a1205, ptr %a1206)
%t1208 = icmp ne i32 %t1207, 0
br i1 %t1208, label %then7536, label %endif7538
then7536:
%t1209 = load ptr, ptr %a1
%t1210 = load %S.ast.Node, ptr %a2
%t1211 = load { ptr, i64, i64 }, ptr %a8
call void @finch.gen.checkArgs(ptr %t1209, %S.ast.Node %t1210, i64 0, i64 1, { ptr, i64, i64 } %t1211)
%t1212 = load ptr, ptr %a1
%t1213 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t1214 = load { ptr, i64, i64 }, ptr %t1213
%t1215 = extractvalue { ptr, i64, i64 } %t1214, 1
%t1216 = icmp uge i64 0, %t1215
br i1 %t1216, label %range7539, label %inrange7540
range7539:
call void @finch_panic_index(ptr @.str.5017, i64 4466, i64 0, i64 %t1215)
unreachable
inrange7540:
%t1217 = extractvalue { ptr, i64, i64 } %t1214, 0
%t1218 = getelementptr inbounds %S.ast.Node, ptr %t1217, i64 0
%t1219 = load %S.ast.Node, ptr %t1218
%t1220 = call %S.gen.Val @finch.gen.expr(ptr %t1212, %S.ast.Node %t1219)
store %S.gen.Val %t1220, ptr %a1221
%t1222 = getelementptr inbounds %S.gen.Val, ptr %a1221, i32 0, i32 1
%t1223 = getelementptr inbounds %S.ast.Type, ptr %t1222, i32 0, i32 0
%t1224 = load { ptr, i64, i64 }, ptr %t1223
store { ptr, i64, i64 } %t1224, ptr %a1225
store { ptr, i64, i64 } { ptr @.str.5018, i64 3, i64 0 }, ptr %a1226
%t1227 = call i32 @finch_str_eq(ptr %a1225, ptr %a1226)
%t1228 = icmp eq i32 %t1227, 0
br i1 %t1228, label %then7541, label %endif7543
then7541:
%t1229 = load ptr, ptr %a1
%t1230 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t1231 = load { ptr, i64, i64 }, ptr %t1230
%t1232 = extractvalue { ptr, i64, i64 } %t1231, 1
%t1233 = icmp uge i64 0, %t1232
br i1 %t1233, label %range7544, label %inrange7545
range7544:
call void @finch_panic_index(ptr @.str.5019, i64 4468, i64 0, i64 %t1232)
unreachable
inrange7545:
%t1234 = extractvalue { ptr, i64, i64 } %t1231, 0
%t1235 = getelementptr inbounds %S.ast.Node, ptr %t1234, i64 0
%t1236 = load %S.ast.Node, ptr %t1235
call void @finch.gen.fail(ptr %t1229, %S.ast.Node %t1236, { ptr, i64, i64 } { ptr @.str.5020, i64 119, i64 0 })
br label %endif7543
endif7543:
%t1237 = load ptr, ptr %a1
%t1238 = getelementptr inbounds %S.gen.Val, ptr %a1221, i32 0, i32 0
%t1239 = load { ptr, i64, i64 }, ptr %t1238
store { ptr, i64, i64 } { ptr @.str.5021, i64 20, i64 0 }, ptr %a1241
store { ptr, i64, i64 } %t1239, ptr %a1242
call void @finch_str_concat(ptr %a1240, ptr %a1241, ptr %a1242)
%t1243 = load { ptr, i64, i64 }, ptr %a1240
store { ptr, i64, i64 } %t1243, ptr %a1245
store { ptr, i64, i64 } { ptr @.str.5022, i64 1, i64 0 }, ptr %a1246
call void @finch_str_concat(ptr %a1244, ptr %a1245, ptr %a1246)
%t1247 = load { ptr, i64, i64 }, ptr %a1244
call void @finch.gen.emit(ptr %t1237, { ptr, i64, i64 } %t1247)
%t1248 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5023, i64 4, i64 0 })
%t1249 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1248, 1
ret %S.gen.Val %t1249
endif7538:
%t1250 = load ptr, ptr %a1
%t1251 = load ptr, ptr %a1
%t1252 = icmp eq ptr %t1251, null
br i1 %t1252, label %panic7546, label %ok7547
panic7546:
call void @finch_panic(ptr @.str.5024, i64 4473, ptr @.str.5025)
unreachable
ok7547:
%t1253 = getelementptr inbounds %S.gen.Gen, ptr %t1251, i32 0, i32 13
%t1254 = load { ptr, i64, i64 }, ptr %t1253
%t1255 = load { ptr, i64, i64 }, ptr %a8
%t1256 = call i64 @finch.gen.findFn(ptr %t1250, { ptr, i64, i64 } %t1254, { ptr, i64, i64 } %t1255)
store i64 %t1256, ptr %a1257
%t1258 = load i64, ptr %a1257
%t1259 = icmp sge i64 %t1258, 0
br i1 %t1259, label %then7548, label %endif7550
then7548:
%t1260 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5
%t1261 = getelementptr inbounds %S.ast.Type, ptr %t1260, i32 0, i32 1
%t1262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1261, i32 0, i32 1
%t1263 = load i64, ptr %t1262
%t1264 = icmp sgt i64 %t1263, 0
br i1 %t1264, label %then7551, label %endif7553
then7551:
%t1265 = load ptr, ptr %a1
%t1266 = load %S.ast.Node, ptr %a2
%t1267 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } { ptr @.str.5026, i64 1, i64 0 }, ptr %a1269
store { ptr, i64, i64 } %t1267, ptr %a1270
call void @finch_str_concat(ptr %a1268, ptr %a1269, ptr %a1270)
%t1271 = load { ptr, i64, i64 }, ptr %a1268
store { ptr, i64, i64 } %t1271, ptr %a1273
store { ptr, i64, i64 } { ptr @.str.5027, i64 47, i64 0 }, ptr %a1274
call void @finch_str_concat(ptr %a1272, ptr %a1273, ptr %a1274)
%t1275 = load { ptr, i64, i64 }, ptr %a1272
call void @finch.gen.fail(ptr %t1265, %S.ast.Node %t1266, { ptr, i64, i64 } %t1275)
br label %endif7553
endif7553:
%t1276 = load ptr, ptr %a1
%t1277 = load i64, ptr %a1257
%t1278 = load %S.ast.Node, ptr %a2
%t1279 = load { ptr, i64, i64 }, ptr %a8
%t1280 = call %S.gen.Val @finch.gen.callFn(ptr %t1276, i64 %t1277, %S.ast.Node %t1278, i64 0, { ptr, i64, i64 } %t1279, { ptr, i64, i64 } { ptr @.str.5028, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.5029, i64 0, i64 0 })
ret %S.gen.Val %t1280
endif7550:
%t1281 = load ptr, ptr %a1
%t1282 = load ptr, ptr %a1
%t1283 = icmp eq ptr %t1282, null
br i1 %t1283, label %panic7554, label %ok7555
panic7554:
call void @finch_panic(ptr @.str.5030, i64 4480, ptr @.str.5031)
unreachable
ok7555:
%t1284 = getelementptr inbounds %S.gen.Gen, ptr %t1282, i32 0, i32 13
%t1285 = load { ptr, i64, i64 }, ptr %t1284
%t1286 = load { ptr, i64, i64 }, ptr %a8
%t1287 = call i64 @finch.gen.findTemplate(ptr %t1281, { ptr, i64, i64 } %t1285, { ptr, i64, i64 } %t1286, { ptr, i64, i64 } { ptr @.str.5032, i64 0, i64 0 }, i1 false)
store i64 %t1287, ptr %a1288
%t1289 = load i64, ptr %a1288
%t1290 = icmp sge i64 %t1289, 0
br i1 %t1290, label %then7556, label %endif7558
then7556:
%t1291 = load ptr, ptr %a1
%t1292 = load %S.ast.Node, ptr %a2
%t1293 = load i64, ptr %a1288
%t1294 = load { ptr, i64, i64 }, ptr %a8
%t1295 = call %S.gen.Val @finch.gen.genericCall(ptr %t1291, %S.ast.Node %t1292, i64 %t1293, i64 0, { ptr, i64, i64 } %t1294)
ret %S.gen.Val %t1295
endif7558:
%t1296 = load ptr, ptr %a1
%t1297 = load ptr, ptr %a1
%t1298 = icmp eq ptr %t1297, null
br i1 %t1298, label %panic7559, label %ok7560
panic7559:
call void @finch_panic(ptr @.str.5033, i64 4484, ptr @.str.5034)
unreachable
ok7560:
%t1299 = getelementptr inbounds %S.gen.Gen, ptr %t1297, i32 0, i32 13
%t1300 = load { ptr, i64, i64 }, ptr %t1299
%t1301 = load { ptr, i64, i64 }, ptr %a8
%t1302 = call i64 @finch.gen.findTemplate(ptr %t1296, { ptr, i64, i64 } %t1300, { ptr, i64, i64 } %t1301, { ptr, i64, i64 } { ptr @.str.5035, i64 0, i64 0 }, i1 true)
%t1303 = icmp sge i64 %t1302, 0
br i1 %t1303, label %then7561, label %endif7563
then7561:
%t1304 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5
%t1305 = getelementptr inbounds %S.ast.Type, ptr %t1304, i32 0, i32 1
%t1306 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1305, i32 0, i32 1
%t1307 = load i64, ptr %t1306
%t1308 = icmp eq i64 %t1307, 0
br i1 %t1308, label %then7564, label %endif7566
then7564:
%t1309 = load ptr, ptr %a1
%t1310 = load %S.ast.Node, ptr %a2
%t1311 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } { ptr @.str.5036, i64 1, i64 0 }, ptr %a1313
store { ptr, i64, i64 } %t1311, ptr %a1314
call void @finch_str_concat(ptr %a1312, ptr %a1313, ptr %a1314)
%t1315 = load { ptr, i64, i64 }, ptr %a1312
store { ptr, i64, i64 } %t1315, ptr %a1317
store { ptr, i64, i64 } { ptr @.str.5037, i64 42, i64 0 }, ptr %a1318
call void @finch_str_concat(ptr %a1316, ptr %a1317, ptr %a1318)
%t1319 = load { ptr, i64, i64 }, ptr %a1316
%t1320 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t1319, ptr %a1322
store { ptr, i64, i64 } %t1320, ptr %a1323
call void @finch_str_concat(ptr %a1321, ptr %a1322, ptr %a1323)
%t1324 = load { ptr, i64, i64 }, ptr %a1321
store { ptr, i64, i64 } %t1324, ptr %a1326
store { ptr, i64, i64 } { ptr @.str.5038, i64 10, i64 0 }, ptr %a1327
call void @finch_str_concat(ptr %a1325, ptr %a1326, ptr %a1327)
%t1328 = load { ptr, i64, i64 }, ptr %a1325
call void @finch.gen.fail(ptr %t1309, %S.ast.Node %t1310, { ptr, i64, i64 } %t1328)
br label %endif7566
endif7566:
store { ptr, i64, i64 } zeroinitializer, ptr %a1329
%t1330 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5
%t1331 = getelementptr inbounds %S.ast.Type, ptr %t1330, i32 0, i32 1
store i64 0, ptr %a1332
br label %each.cond7567
each.cond7567:
%t1333 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1331, i32 0, i32 1
%t1334 = load i64, ptr %t1333
%t1335 = load i64, ptr %a1332
%t1336 = icmp slt i64 %t1335, %t1334
br i1 %t1336, label %each.body7568, label %each.end7570
each.body7568:
%t1337 = load ptr, ptr %t1331
%t1338 = getelementptr inbounds %S.ast.Type, ptr %t1337, i64 %t1335
%t1339 = load %S.ast.Type, ptr %t1338
store %S.ast.Type %t1339, ptr %a1340
%t1341 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1329, i32 0, i32 1
%t1342 = load ptr, ptr %a1
%t1343 = load %S.ast.Type, ptr %a1340
%t1344 = load %S.ast.Node, ptr %a2
%t1345 = call %S.ast.Type @finch.gen.resolve(ptr %t1342, %S.ast.Type %t1343, %S.ast.Node %t1344)
%t1346 = load i64, ptr %t1341
%t1347 = add i64 %t1346, 1
call void @finch_arr_reserve(ptr %a1329, i64 %t1347, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64))
%t1348 = load ptr, ptr %a1329
%t1349 = getelementptr inbounds %S.ast.Type, ptr %t1348, i64 %t1346
store %S.ast.Type %t1345, ptr %t1349
store i64 %t1347, ptr %t1341
br label %each.step7569
each.step7569:
%t1350 = load i64, ptr %a1332
%t1351 = add i64 %t1350, 1
store i64 %t1351, ptr %a1332
br label %each.cond7567
each.end7570:
%t1352 = load ptr, ptr %a1
%t1353 = load ptr, ptr %a1
%t1354 = icmp eq ptr %t1353, null
br i1 %t1354, label %panic7571, label %ok7572
panic7571:
call void @finch_panic(ptr @.str.5039, i64 4493, ptr @.str.5040)
unreachable
ok7572:
%t1355 = getelementptr inbounds %S.gen.Gen, ptr %t1353, i32 0, i32 13
%t1356 = load { ptr, i64, i64 }, ptr %t1355
%t1357 = load { ptr, i64, i64 }, ptr %a8
%t1358 = load { ptr, i64, i64 }, ptr %a1329
%t1359 = load %S.ast.Node, ptr %a2
%t1360 = call %S.ast.Type @finch.gen.instStruct(ptr %t1352, { ptr, i64, i64 } %t1356, { ptr, i64, i64 } %t1357, { ptr, i64, i64 } %t1358, %S.ast.Node %t1359)
store %S.ast.Type %t1360, ptr %a1361
%t1362 = load ptr, ptr %a1
%t1363 = load ptr, ptr %a1
%t1364 = getelementptr inbounds %S.ast.Type, ptr %a1361, i32 0, i32 3
%t1365 = load { ptr, i64, i64 }, ptr %t1364
%t1366 = getelementptr inbounds %S.ast.Type, ptr %a1361, i32 0, i32 2
%t1367 = load { ptr, i64, i64 }, ptr %t1366
%t1368 = call i64 @finch.gen.findStruct(ptr %t1363, { ptr, i64, i64 } %t1365, { ptr, i64, i64 } %t1367)
%t1369 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t1370 = load { ptr, i64, i64 }, ptr %t1369
%t1371 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10
%t1372 = load { ptr, i64, i64 }, ptr %t1371
%t1373 = load %S.ast.Node, ptr %a2
%t1374 = call %S.gen.Val @finch.gen.construct(ptr %t1362, i64 %t1368, { ptr, i64, i64 } %t1370, { ptr, i64, i64 } %t1372, %S.ast.Node %t1373)
ret %S.gen.Val %t1374
endif7563:
%t1375 = load ptr, ptr %a1
%t1376 = load ptr, ptr %a1
%t1377 = icmp eq ptr %t1376, null
br i1 %t1377, label %panic7573, label %ok7574
panic7573:
call void @finch_panic(ptr @.str.5041, i64 4496, ptr @.str.5042)
unreachable
ok7574:
%t1378 = getelementptr inbounds %S.gen.Gen, ptr %t1376, i32 0, i32 13
%t1379 = load { ptr, i64, i64 }, ptr %t1378
%t1380 = load { ptr, i64, i64 }, ptr %a8
%t1381 = call i64 @finch.gen.findStruct(ptr %t1375, { ptr, i64, i64 } %t1379, { ptr, i64, i64 } %t1380)
store i64 %t1381, ptr %a1382
%t1383 = load i64, ptr %a1382
%t1384 = icmp sge i64 %t1383, 0
br i1 %t1384, label %then7575, label %endif7577
then7575:
%t1385 = load ptr, ptr %a1
%t1386 = icmp eq ptr %t1385, null
br i1 %t1386, label %panic7578, label %ok7579
panic7578:
call void @finch_panic(ptr @.str.5043, i64 4498, ptr @.str.5044)
unreachable
ok7579:
%t1387 = getelementptr inbounds %S.gen.Gen, ptr %t1385, i32 0, i32 15
%t1388 = load i64, ptr %a1382
%t1389 = load { ptr, i64, i64 }, ptr %t1387
%t1390 = extractvalue { ptr, i64, i64 } %t1389, 1
%t1391 = icmp uge i64 %t1388, %t1390
br i1 %t1391, label %range7580, label %inrange7581
range7580:
call void @finch_panic_index(ptr @.str.5045, i64 4498, i64 %t1388, i64 %t1390)
unreachable
inrange7581:
%t1392 = extractvalue { ptr, i64, i64 } %t1389, 0
%t1393 = getelementptr inbounds %S.gen.StructDef, ptr %t1392, i64 %t1388
%t1394 = load %S.gen.StructDef, ptr %t1393
store %S.gen.StructDef %t1394, ptr %a1395
call void @finch.copy.S_gen_StructDef(ptr %a1396, ptr %a1395)
%t1397 = load %S.gen.StructDef, ptr %a1396
store %S.gen.StructDef %t1397, ptr %a1398
%t1399 = load ptr, ptr %a1
%t1400 = icmp eq ptr %t1399, null
br i1 %t1400, label %panic7582, label %ok7583
panic7582:
call void @finch_panic(ptr @.str.5046, i64 4499, ptr @.str.5047)
unreachable
ok7583:
%t1401 = getelementptr inbounds %S.gen.Gen, ptr %t1399, i32 0, i32 26
%t1402 = load i1, ptr %t1401
br label %logic.from7584
logic.from7584:
br i1 %t1402, label %logic.rhs7585, label %logic.end7586
logic.rhs7585:
%t1403 = getelementptr inbounds %S.gen.StructDef, ptr %a1398, i32 0, i32 2
%t1404 = load i1, ptr %t1403
%t1405 = xor i1 %t1404, true
br label %logic.rend7587
logic.rend7587:
br label %logic.end7586
logic.end7586:
%t1406 = phi i1 [ false, %logic.from7584 ], [ %t1405, %logic.rend7587 ]
br i1 %t1406, label %then7588, label %endif7590
then7588:
%t1407 = load ptr, ptr %a1
%t1408 = icmp eq ptr %t1407, null
br i1 %t1408, label %panic7591, label %ok7592
panic7591:
call void @finch_panic(ptr @.str.5048, i64 4500, ptr @.str.5049)
unreachable
ok7592:
%t1409 = getelementptr inbounds %S.gen.Gen, ptr %t1407, i32 0, i32 0
%t1410 = getelementptr inbounds %S.gen.StructDef, ptr %a1398, i32 0, i32 13
%t1411 = load i64, ptr %t1410
%t1412 = load { ptr, i64, i64 }, ptr %t1409
%t1413 = extractvalue { ptr, i64, i64 } %t1412, 1
%t1414 = icmp uge i64 %t1411, %t1413
br i1 %t1414, label %range7593, label %inrange7594
range7593:
call void @finch_panic_index(ptr @.str.5050, i64 4500, i64 %t1411, i64 %t1413)
unreachable
inrange7594:
%t1415 = extractvalue { ptr, i64, i64 } %t1412, 0
%t1416 = getelementptr inbounds %S.ast.Program, ptr %t1415, i64 %t1411
%t1417 = getelementptr inbounds %S.ast.Program, ptr %t1416, i32 0, i32 6
%t1418 = getelementptr inbounds %S.gen.StructDef, ptr %a1398, i32 0, i32 14
%t1419 = load i64, ptr %t1418
%t1420 = load { ptr, i64, i64 }, ptr %t1417
%t1421 = extractvalue { ptr, i64, i64 } %t1420, 1
%t1422 = icmp uge i64 %t1419, %t1421
br i1 %t1422, label %range7595, label %inrange7596
range7595:
call void @finch_panic_index(ptr @.str.5051, i64 4500, i64 %t1419, i64 %t1421)
unreachable
inrange7596:
%t1423 = extractvalue { ptr, i64, i64 } %t1420, 0
%t1424 = getelementptr inbounds %S.ast.Node, ptr %t1423, i64 %t1419
%t1425 = load %S.ast.Node, ptr %t1424
store %S.ast.Node %t1425, ptr %a1426
call void @finch.copy.S_ast_Node(ptr %a1427, ptr %a1426)
%t1428 = load %S.ast.Node, ptr %a1427
store %S.ast.Node %t1428, ptr %a1429
%t1430 = load ptr, ptr %a1
%t1431 = load %S.ast.Node, ptr %a2
%t1432 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12
%t1433 = load i64, ptr %t1432
%t1434 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1
%t1435 = load i64, ptr %t1434
%t1436 = getelementptr inbounds %S.gen.StructDef, ptr %a1398, i32 0, i32 1
%t1437 = load { ptr, i64, i64 }, ptr %t1436
store { ptr, i64, i64 } { ptr @.str.5052, i64 16, i64 0 }, ptr %a1439
store { ptr, i64, i64 } %t1437, ptr %a1440
call void @finch_str_concat(ptr %a1438, ptr %a1439, ptr %a1440)
%t1441 = load { ptr, i64, i64 }, ptr %a1438
store { ptr, i64, i64 } %t1441, ptr %a1443
store { ptr, i64, i64 } { ptr @.str.5053, i64 3, i64 0 }, ptr %a1444
call void @finch_str_concat(ptr %a1442, ptr %a1443, ptr %a1444)
%t1445 = load { ptr, i64, i64 }, ptr %a1442
%t1446 = getelementptr inbounds %S.gen.StructDef, ptr %a1398, i32 0, i32 11
%t1447 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1446, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.5054, i64 2, i64 0 }, ptr %a1448
call void @finch_str_join(ptr %a1449, ptr %t1446, ptr %a1448)
%t1450 = load { ptr, i64, i64 }, ptr %a1449
store { ptr, i64, i64 } %t1445, ptr %a1452
store { ptr, i64, i64 } %t1450, ptr %a1453
call void @finch_str_concat(ptr %a1451, ptr %a1452, ptr %a1453)
%t1454 = load { ptr, i64, i64 }, ptr %a1451
store { ptr, i64, i64 } %t1454, ptr %a1456
store { ptr, i64, i64 } { ptr @.str.5055, i64 6, i64 0 }, ptr %a1457
call void @finch_str_concat(ptr %a1455, ptr %a1456, ptr %a1457)
%t1458 = load { ptr, i64, i64 }, ptr %a1455
%t1459 = load ptr, ptr %a1
%t1460 = icmp eq ptr %t1459, null
br i1 %t1460, label %panic7597, label %ok7598
panic7597:
call void @finch_panic(ptr @.str.5056, i64 4501, ptr @.str.5057)
unreachable
ok7598:
%t1461 = getelementptr inbounds %S.gen.Gen, ptr %t1459, i32 0, i32 1
%t1462 = getelementptr inbounds %S.ast.Node, ptr %a1429, i32 0, i32 13
%t1463 = load i64, ptr %t1462
%t1464 = load { ptr, i64, i64 }, ptr %t1461
%t1465 = extractvalue { ptr, i64, i64 } %t1464, 1
%t1466 = icmp uge i64 %t1463, %t1465
br i1 %t1466, label %range7599, label %inrange7600
range7599:
call void @finch_panic_index(ptr @.str.5058, i64 4501, i64 %t1463, i64 %t1465)
unreachable
inrange7600:
%t1467 = extractvalue { ptr, i64, i64 } %t1464, 0
%t1468 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1467, i64 %t1463
%t1469 = load { ptr, i64, i64 }, ptr %t1468
%t1470 = getelementptr inbounds %S.ast.Node, ptr %a1429, i32 0, i32 11
%t1471 = load i64, ptr %t1470
%t1472 = getelementptr inbounds %S.ast.Node, ptr %a1429, i32 0, i32 12
%t1473 = load i64, ptr %t1472
call void @finch.gen.noteRef(ptr %t1430, %S.ast.Node %t1431, i64 %t1433, i64 %t1435, { ptr, i64, i64 } %t1458, { ptr, i64, i64 } %t1469, i64 %t1471, i64 %t1473)
br label %endif7590
endif7590:
%t1474 = load ptr, ptr %a1
%t1475 = load i64, ptr %a1382
%t1476 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t1477 = load { ptr, i64, i64 }, ptr %t1476
%t1478 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10
%t1479 = load { ptr, i64, i64 }, ptr %t1478
%t1480 = load %S.ast.Node, ptr %a2
%t1481 = call %S.gen.Val @finch.gen.construct(ptr %t1474, i64 %t1475, { ptr, i64, i64 } %t1477, { ptr, i64, i64 } %t1479, %S.ast.Node %t1480)
ret %S.gen.Val %t1481
endif7577:
%t1482 = load ptr, ptr %a1
%t1483 = load ptr, ptr %a1
%t1484 = icmp eq ptr %t1483, null
br i1 %t1484, label %panic7601, label %ok7602
panic7601:
call void @finch_panic(ptr @.str.5059, i64 4505, ptr @.str.5060)
unreachable
ok7602:
%t1485 = getelementptr inbounds %S.gen.Gen, ptr %t1483, i32 0, i32 13
%t1486 = load { ptr, i64, i64 }, ptr %t1485
%t1487 = load { ptr, i64, i64 }, ptr %a8
%t1488 = call i64 @finch.gen.findEnum(ptr %t1482, { ptr, i64, i64 } %t1486, { ptr, i64, i64 } %t1487)
store i64 %t1488, ptr %a1489
%t1490 = load i64, ptr %a1489
%t1491 = icmp sge i64 %t1490, 0
br i1 %t1491, label %then7603, label %endif7605
then7603:
%t1492 = load ptr, ptr %a1
%t1493 = load %S.ast.Node, ptr %a2
%t1494 = load i64, ptr %a1489
%t1495 = call %S.gen.Val @finch.gen.enumFrom(ptr %t1492, %S.ast.Node %t1493, i64 %t1494)
ret %S.gen.Val %t1495
endif7605:
%t1496 = load ptr, ptr %a1
%t1497 = icmp eq ptr %t1496, null
br i1 %t1497, label %panic7606, label %ok7607
panic7606:
call void @finch_panic(ptr @.str.5061, i64 4509, ptr @.str.5062)
unreachable
ok7607:
%t1498 = getelementptr inbounds %S.gen.Gen, ptr %t1496, i32 0, i32 24
%t1499 = getelementptr inbounds %S.cimport.CImports, ptr %t1498, i32 0, i32 0
%t1500 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t1500, ptr %a1501
%t1502 = call i64 @finch_map_find(ptr %t1499, ptr %a1501, 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)
%t1503 = icmp sge i64 %t1502, 0
br i1 %t1503, label %then7608, label %endif7610
then7608:
%t1504 = load ptr, ptr %a1
%t1505 = load %S.ast.Node, ptr %a2
%t1506 = load ptr, ptr %a1
%t1507 = icmp eq ptr %t1506, null
br i1 %t1507, label %panic7611, label %ok7612
panic7611:
call void @finch_panic(ptr @.str.5063, i64 4510, ptr @.str.5064)
unreachable
ok7612:
%t1508 = getelementptr inbounds %S.gen.Gen, ptr %t1506, i32 0, i32 24
%t1509 = getelementptr inbounds %S.cimport.CImports, ptr %t1508, i32 0, i32 0
%t1510 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t1510, ptr %a1511
%t1512 = call i64 @finch_map_find(ptr %t1509, ptr %a1511, 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)
%t1513 = icmp slt i64 %t1512, 0
br i1 %t1513, label %map.missing7613, label %map.found7614
map.missing7613:
store { ptr, i64, i64 } zeroinitializer, ptr %a1514
store { ptr, i64, i64 } %t1510, ptr %a1515
call void @finch_buf_str(ptr %a1514, ptr %a1515, i32 1)
call void @finch_map_missing(ptr @.str.5065, i64 4510, ptr %a1514)
unreachable
map.found7614:
%t1516 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t1509, i32 0, i32 0
%t1517 = load ptr, ptr %t1516
%t1518 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t1517, i64 %t1512
%t1519 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t1518, i32 0, i32 2
%t1520 = load %S.cimport.CFunc, ptr %t1519
%t1521 = call %S.gen.Val @finch.gen.callC(ptr %t1504, %S.ast.Node %t1505, %S.cimport.CFunc %t1520)
ret %S.gen.Val %t1521
endif7610:
%t1522 = load ptr, ptr %a1
%t1523 = load { ptr, i64, i64 }, ptr %a8
%t1524 = call i64 @finch.gen.findStruct(ptr %t1522, { ptr, i64, i64 } { ptr @.str.5066, i64 1, i64 0 }, { ptr, i64, i64 } %t1523)
store i64 %t1524, ptr %a1382
%t1525 = load i64, ptr %a1382
%t1526 = icmp sge i64 %t1525, 0
br i1 %t1526, label %then7615, label %endif7617
then7615:
%t1527 = load ptr, ptr %a1
%t1528 = load i64, ptr %a1382
%t1529 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t1530 = load { ptr, i64, i64 }, ptr %t1529
%t1531 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10
%t1532 = load { ptr, i64, i64 }, ptr %t1531
%t1533 = load %S.ast.Node, ptr %a2
%t1534 = call %S.gen.Val @finch.gen.construct(ptr %t1527, i64 %t1528, { ptr, i64, i64 } %t1530, { ptr, i64, i64 } %t1532, %S.ast.Node %t1533)
ret %S.gen.Val %t1534
endif7617:
%t1535 = load ptr, ptr %a1
%t1536 = load { ptr, i64, i64 }, ptr %a8
%t1537 = call i64 @finch.gen.lookup(ptr %t1535, { ptr, i64, i64 } %t1536)
%t1538 = icmp sge i64 %t1537, 0
br i1 %t1538, label %then7618, label %endif7620
then7618:
%t1539 = load ptr, ptr %a1
%t1540 = load %S.ast.Node, ptr %a2
%t1541 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } { ptr @.str.5067, i64 1, i64 0 }, ptr %a1543
store { ptr, i64, i64 } %t1541, ptr %a1544
call void @finch_str_concat(ptr %a1542, ptr %a1543, ptr %a1544)
%t1545 = load { ptr, i64, i64 }, ptr %a1542
store { ptr, i64, i64 } %t1545, ptr %a1547
store { ptr, i64, i64 } { ptr @.str.5068, i64 31, i64 0 }, ptr %a1548
call void @finch_str_concat(ptr %a1546, ptr %a1547, ptr %a1548)
%t1549 = load { ptr, i64, i64 }, ptr %a1546
call void @finch.gen.fail(ptr %t1539, %S.ast.Node %t1540, { ptr, i64, i64 } %t1549)
br label %endif7620
endif7620:
%t1550 = load ptr, ptr %a1
%t1551 = load %S.ast.Node, ptr %a2
%t1552 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } { ptr @.str.5069, i64 28, i64 0 }, ptr %a1554
store { ptr, i64, i64 } %t1552, ptr %a1555
call void @finch_str_concat(ptr %a1553, ptr %a1554, ptr %a1555)
%t1556 = load { ptr, i64, i64 }, ptr %a1553
store { ptr, i64, i64 } %t1556, ptr %a1558
store { ptr, i64, i64 } { ptr @.str.5070, i64 1, i64 0 }, ptr %a1559
call void @finch_str_concat(ptr %a1557, ptr %a1558, ptr %a1559)
%t1560 = load { ptr, i64, i64 }, ptr %a1557
%t1561 = load { ptr, i64, i64 }, ptr %a8
%t1562 = call { ptr, i64, i64 } @finch.gen.headerHint({ ptr, i64, i64 } %t1561)
store { ptr, i64, i64 } %t1560, ptr %a1564
store { ptr, i64, i64 } %t1562, ptr %a1565
call void @finch_str_concat(ptr %a1563, ptr %a1564, ptr %a1565)
%t1566 = load { ptr, i64, i64 }, ptr %a1563
call void @finch.gen.fail(ptr %t1550, %S.ast.Node %t1551, { ptr, i64, i64 } %t1566)
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
%a63 = alloca i64, align 16
%a76 = alloca %S.ast.Node, align 16
%a77 = alloca %S.ast.Node, align 16
%a79 = alloca %S.ast.Node, align 16
%a109 = alloca { ptr, i64, i64 }, align 16
%a110 = alloca { ptr, i64, i64 }, align 16
%a111 = 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 %S.gen.Val, align 16
%a140 = alloca { ptr, i64, i64 }, align 16
%a141 = alloca { ptr, i64, i64 }, align 16
%a154 = alloca %S.ast.Type, align 16
%a155 = alloca %S.ast.Type, 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
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 %panic7621, label %ok7622
panic7621:
call void @finch_panic(ptr @.str.5071, i64 4524, ptr @.str.5072)
unreachable
ok7622:
%t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 14
%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 %range7623, label %inrange7624
range7623:
call void @finch_panic_index(ptr @.str.5073, i64 4524, i64 %t11, i64 %t13)
unreachable
inrange7624:
%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.from7625
logic.from7625:
br i1 %t25, label %logic.rhs7626, label %logic.end7627
logic.rhs7626:
%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.5074, 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.rend7628
logic.rend7628:
br label %logic.end7627
logic.end7627:
%t32 = phi i1 [ false, %logic.from7625 ], [ %t31, %logic.rend7628 ]
br i1 %t32, label %then7629, label %endif7631
then7629:
%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.5075, i64 52, i64 0 })
br label %endif7631
endif7631:
%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 %then7632, label %endif7634
then7632:
%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.5076, 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 %endif7634
endif7634:
%t60 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13
%t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i32 0, i32 1
%t62 = load i64, ptr %t61
store i64 0, ptr %a63
br label %for.cond7635
for.cond7635:
%t64 = load i64, ptr %a63
%t65 = icmp slt i64 %t64, %t62
br i1 %t65, label %for.body7636, label %for.end7638
for.body7636:
%t66 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9
%t67 = load i64, ptr %a4
%t68 = load i64, ptr %a63
%t69 = add i64 %t67, %t68
%t70 = load { ptr, i64, i64 }, ptr %t66
%t71 = extractvalue { ptr, i64, i64 } %t70, 1
%t72 = icmp uge i64 %t69, %t71
br i1 %t72, label %range7639, label %inrange7640
range7639:
call void @finch_panic_index(ptr @.str.5077, i64 4535, i64 %t69, i64 %t71)
unreachable
inrange7640:
%t73 = extractvalue { ptr, i64, i64 } %t70, 0
%t74 = getelementptr inbounds %S.ast.Node, ptr %t73, i64 %t69
%t75 = load %S.ast.Node, ptr %t74
store %S.ast.Node %t75, ptr %a76
call void @finch.copy.S_ast_Node(ptr %a77, ptr %a76)
%t78 = load %S.ast.Node, ptr %a77
store %S.ast.Node %t78, ptr %a79
%t80 = load ptr, ptr %a1
%t81 = load ptr, ptr %a1
%t82 = load %S.ast.Node, ptr %a79
%t83 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13
%t84 = load i64, ptr %a63
%t85 = load { ptr, i64, i64 }, ptr %t83
%t86 = extractvalue { ptr, i64, i64 } %t85, 1
%t87 = icmp uge i64 %t84, %t86
br i1 %t87, label %range7641, label %inrange7642
range7641:
call void @finch_panic_index(ptr @.str.5078, i64 4536, i64 %t84, i64 %t86)
unreachable
inrange7642:
%t88 = extractvalue { ptr, i64, i64 } %t85, 0
%t89 = getelementptr inbounds %S.ast.Type, ptr %t88, i64 %t84
%t90 = load %S.ast.Type, ptr %t89
%t91 = call %S.gen.Val @finch.gen.exprWant(ptr %t81, %S.ast.Node %t82, %S.ast.Type %t90)
%t92 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13
%t93 = load i64, ptr %a63
%t94 = load { ptr, i64, i64 }, ptr %t92
%t95 = extractvalue { ptr, i64, i64 } %t94, 1
%t96 = icmp uge i64 %t93, %t95
br i1 %t96, label %range7643, label %inrange7644
range7643:
call void @finch_panic_index(ptr @.str.5079, i64 4536, i64 %t93, i64 %t95)
unreachable
inrange7644:
%t97 = extractvalue { ptr, i64, i64 } %t94, 0
%t98 = getelementptr inbounds %S.ast.Type, ptr %t97, i64 %t93
%t99 = load %S.ast.Type, ptr %t98
%t100 = load %S.ast.Node, ptr %a79
%t101 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 14
%t102 = load i64, ptr %a63
%t103 = load { ptr, i64, i64 }, ptr %t101
%t104 = extractvalue { ptr, i64, i64 } %t103, 1
%t105 = icmp uge i64 %t102, %t104
br i1 %t105, label %range7645, label %inrange7646
range7645:
call void @finch_panic_index(ptr @.str.5081, i64 4536, i64 %t102, i64 %t104)
unreachable
inrange7646:
%t106 = extractvalue { ptr, i64, i64 } %t103, 0
%t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t106, i64 %t102
%t108 = load { ptr, i64, i64 }, ptr %t107
store { ptr, i64, i64 } { ptr @.str.5080, i64 10, i64 0 }, ptr %a110
store { ptr, i64, i64 } %t108, ptr %a111
call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111)
%t112 = load { ptr, i64, i64 }, ptr %a109
store { ptr, i64, i64 } %t112, ptr %a114
store { ptr, i64, i64 } { ptr @.str.5082, i64 1, i64 0 }, ptr %a115
call void @finch_str_concat(ptr %a113, ptr %a114, ptr %a115)
%t116 = load { ptr, i64, i64 }, ptr %a113
%t117 = call %S.gen.Val @finch.gen.coerce(ptr %t80, %S.gen.Val %t91, %S.ast.Type %t99, %S.ast.Node %t100, { ptr, i64, i64 } %t116)
store %S.gen.Val %t117, ptr %a118
%t119 = load ptr, ptr %a1
%t120 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13
%t121 = load i64, ptr %a63
%t122 = load { ptr, i64, i64 }, ptr %t120
%t123 = extractvalue { ptr, i64, i64 } %t122, 1
%t124 = icmp uge i64 %t121, %t123
br i1 %t124, label %range7647, label %inrange7648
range7647:
call void @finch_panic_index(ptr @.str.5083, i64 4538, i64 %t121, i64 %t123)
unreachable
inrange7648:
%t125 = extractvalue { ptr, i64, i64 } %t122, 0
%t126 = getelementptr inbounds %S.ast.Type, ptr %t125, i64 %t121
%t127 = load %S.ast.Type, ptr %t126
%t128 = call i1 @finch.gen.owning(ptr %t119, %S.ast.Type %t127)
br label %logic.from7649
logic.from7649:
br i1 %t128, label %logic.rhs7650, label %logic.end7651
logic.rhs7650:
%t129 = getelementptr inbounds %S.gen.Val, ptr %a118, i32 0, i32 2
%t130 = load i1, ptr %t129
%t131 = xor i1 %t130, true
br label %logic.rend7652
logic.rend7652:
br label %logic.end7651
logic.end7651:
%t132 = phi i1 [ false, %logic.from7649 ], [ %t131, %logic.rend7652 ]
br label %logic.from7653
logic.from7653:
br i1 %t132, label %logic.rhs7654, label %logic.end7655
logic.rhs7654:
%t133 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1
%t134 = load i64, ptr %t133
%t135 = icmp sgt i64 %t134, 0
br label %logic.rend7656
logic.rend7656:
br label %logic.end7655
logic.end7655:
%t136 = phi i1 [ false, %logic.from7653 ], [ %t135, %logic.rend7656 ]
br label %logic.from7657
logic.from7657:
br i1 %t136, label %logic.rhs7658, label %logic.end7659
logic.rhs7658:
%t137 = load %S.ast.Node, ptr %a79
%t138 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t137)
%t139 = load { ptr, i64, i64 }, ptr %a7
store { ptr, i64, i64 } %t138, ptr %a140
store { ptr, i64, i64 } %t139, ptr %a141
%t142 = call i32 @finch_str_eq(ptr %a140, ptr %a141)
%t143 = icmp ne i32 %t142, 0
br label %logic.rend7660
logic.rend7660:
br label %logic.end7659
logic.end7659:
%t144 = phi i1 [ false, %logic.from7657 ], [ %t143, %logic.rend7660 ]
br i1 %t144, label %then7661, label %endif7663
then7661:
%t145 = load ptr, ptr %a1
%t146 = getelementptr inbounds %S.gen.Val, ptr %a118, i32 0, i32 0
%t147 = load { ptr, i64, i64 }, ptr %t146
%t148 = getelementptr inbounds %S.gen.Val, ptr %a118, i32 0, i32 1
%t149 = load %S.ast.Type, ptr %t148
%t150 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t145, { ptr, i64, i64 } %t147, %S.ast.Type %t149)
%t151 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t150, 0
%t152 = getelementptr inbounds %S.gen.Val, ptr %a118, i32 0, i32 1
%t153 = load %S.ast.Type, ptr %t152
store %S.ast.Type %t153, ptr %a154
call void @finch.copy.S_ast_Type(ptr %a155, ptr %a154)
%t156 = load %S.ast.Type, ptr %a155
%t157 = insertvalue %S.gen.Val %t151, %S.ast.Type %t156, 1
%t158 = insertvalue %S.gen.Val %t157, i1 true, 2
store %S.gen.Val %t158, ptr %a118
br label %endif7663
endif7663:
%t159 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1
%t160 = load ptr, ptr %a1
%t161 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13
%t162 = load i64, ptr %a63
%t163 = load { ptr, i64, i64 }, ptr %t161
%t164 = extractvalue { ptr, i64, i64 } %t163, 1
%t165 = icmp uge i64 %t162, %t164
br i1 %t165, label %range7664, label %inrange7665
range7664:
call void @finch_panic_index(ptr @.str.5084, i64 4541, i64 %t162, i64 %t164)
unreachable
inrange7665:
%t166 = extractvalue { ptr, i64, i64 } %t163, 0
%t167 = getelementptr inbounds %S.ast.Type, ptr %t166, i64 %t162
%t168 = load %S.ast.Type, ptr %t167
%t169 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t160, %S.ast.Type %t168)
store { ptr, i64, i64 } %t169, ptr %a171
store { ptr, i64, i64 } { ptr @.str.5085, i64 1, i64 0 }, ptr %a172
call void @finch_str_concat(ptr %a170, ptr %a171, ptr %a172)
%t173 = load { ptr, i64, i64 }, ptr %a170
%t174 = getelementptr inbounds %S.gen.Val, ptr %a118, i32 0, i32 0
%t175 = load { ptr, i64, i64 }, ptr %t174
store { ptr, i64, i64 } %t173, 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
%t180 = load i64, ptr %t159
%t181 = add i64 %t180, 1
call void @finch_arr_reserve(ptr %a45, i64 %t181, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t182 = load ptr, ptr %a45
%t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i64 %t180
store { ptr, i64, i64 } %t179, ptr %t183
store i64 %t181, ptr %t159
br label %for.step7637
for.step7637:
%t184 = load i64, ptr %a63
%t185 = add i64 %t184, 1
store i64 %t185, ptr %a63
br label %for.cond7635
for.end7638:
%t186 = load ptr, ptr %a1
%t187 = load %S.gen.FnSig, ptr %a21
%t188 = load %S.ast.Node, ptr %a3
%t189 = load { ptr, i64, i64 }, ptr %a45
%t190 = load { ptr, i64, i64 }, ptr %a5
%t191 = call %S.gen.Val @finch.gen.emitCall(ptr %t186, %S.gen.FnSig %t187, %S.ast.Node %t188, { ptr, i64, i64 } %t189, { ptr, i64, i64 } %t190)
ret %S.gen.Val %t191
}
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
%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
%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
%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
%a49 = alloca { ptr, i64, i64 }, align 16
%a50 = alloca { ptr, i64, i64 }, align 16
%a51 = 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
%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
%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
%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
%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
%a96 = 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
%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
%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
%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
%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
%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
%a162 = alloca { ptr, i64, i64 }, align 16
%a163 = alloca { ptr, i64, i64 }, align 16
%a168 = alloca %S.ast.Type, align 16
%a169 = alloca %S.ast.Type, 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
%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
%a197 = alloca %S.ast.Type, align 16
%a198 = alloca %S.ast.Type, align 16
%a209 = alloca { ptr, i64, i64 }, align 16
%a210 = alloca { ptr, i64, i64 }, align 16
%a217 = alloca %S.ast.Type, align 16
%a218 = alloca %S.ast.Type, align 16
%a227 = alloca %S.ast.Type, align 16
%a228 = 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.from7666
logic.from7666:
br i1 %t7, label %logic.rhs7667, label %logic.end7668
logic.rhs7667:
%t8 = load ptr, ptr %a1
%t9 = icmp eq ptr %t8, null
br i1 %t9, label %panic7669, label %ok7670
panic7669:
call void @finch_panic(ptr @.str.5086, i64 4548, ptr @.str.5087)
unreachable
ok7670:
%t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 39
%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
br label %logic.rend7671
logic.rend7671:
br label %logic.end7668
logic.end7668:
%t18 = phi i1 [ false, %logic.from7666 ], [ %t17, %logic.rend7671 ]
br i1 %t18, label %then7672, label %endif7674
then7672:
%t19 = load ptr, ptr %a1
%t20 = load %S.ast.Node, ptr %a3
%t21 = load { ptr, i64, i64 }, ptr %a5
store { ptr, i64, i64 } { ptr @.str.5088, i64 1, i64 0 }, 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 %a27
store { ptr, i64, i64 } { ptr @.str.5089, i64 39, i64 0 }, ptr %a28
call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28)
%t29 = load { ptr, i64, i64 }, ptr %a26
%t30 = load { ptr, i64, i64 }, ptr %a5
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)
%t34 = load { ptr, i64, i64 }, ptr %a31
store { ptr, i64, i64 } %t34, ptr %a36
store { ptr, i64, i64 } { ptr @.str.5090, i64 19, i64 0 }, ptr %a37
call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37)
%t38 = load { ptr, i64, i64 }, ptr %a35
%t39 = load { ptr, i64, i64 }, ptr %a5
store { ptr, i64, i64 } %t38, ptr %a41
store { ptr, i64, i64 } %t39, ptr %a42
call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42)
%t43 = load { ptr, i64, i64 }, ptr %a40
store { ptr, i64, i64 } %t43, ptr %a45
store { ptr, i64, i64 } { ptr @.str.5091, i64 27, i64 0 }, ptr %a46
call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46)
%t47 = load { ptr, i64, i64 }, ptr %a44
%t48 = load { ptr, i64, i64 }, ptr %a5
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)
%t52 = load { ptr, i64, i64 }, ptr %a49
store { ptr, i64, i64 } %t52, ptr %a54
store { ptr, i64, i64 } { ptr @.str.5092, i64 5, i64 0 }, ptr %a55
call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55)
%t56 = load { ptr, i64, i64 }, ptr %a53
call void @finch.gen.fail(ptr %t19, %S.ast.Node %t20, { ptr, i64, i64 } %t56)
br label %endif7674
endif7674:
%t57 = load ptr, ptr %a1
%t58 = load %S.gen.FnSig, ptr %a2
%t59 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t57, %S.gen.FnSig %t58)
store { ptr, i64, i64 } { ptr @.str.5093, i64 5, 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.5094, 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 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 11
%t69 = load { ptr, i64, i64 }, ptr %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)
%t73 = load { ptr, i64, i64 }, ptr %a70
store { ptr, i64, i64 } %t73, ptr %a75
store { ptr, i64, i64 } { ptr @.str.5095, i64 1, i64 0 }, ptr %a76
call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76)
%t77 = load { ptr, i64, i64 }, ptr %a74
%t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.5096, i64 2, i64 0 }, ptr %a79
call void @finch_str_join(ptr %a80, ptr %a4, 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)
%t85 = load { ptr, i64, i64 }, ptr %a82
store { ptr, i64, i64 } %t85, ptr %a87
store { ptr, i64, i64 } { ptr @.str.5097, i64 1, i64 0 }, 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 %a90
%t91 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9
%t92 = load i1, ptr %t91
br i1 %t92, label %then7675, label %endif7677
then7675:
%t93 = load ptr, ptr %a1
%t94 = load { ptr, i64, i64 }, ptr %a90
%t95 = call { ptr, i64, i64 } @finch.gen.op(ptr %t93, { ptr, i64, i64 } %t94)
store { ptr, i64, i64 } %t95, ptr %a96
%t97 = load ptr, ptr %a1
%t98 = load ptr, ptr %a1
%t99 = load %S.gen.FnSig, ptr %a2
%t100 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t98, %S.gen.FnSig %t99)
store { ptr, i64, i64 } { ptr @.str.5098, i64 13, i64 0 }, ptr %a102
store { ptr, i64, i64 } %t100, ptr %a103
call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103)
%t104 = load { ptr, i64, i64 }, ptr %a101
store { ptr, i64, i64 } %t104, ptr %a106
store { ptr, i64, i64 } { ptr @.str.5099, i64 1, i64 0 }, ptr %a107
call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107)
%t108 = load { ptr, i64, i64 }, ptr %a105
%t109 = load { ptr, i64, i64 }, ptr %a96
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)
%t113 = load { ptr, i64, i64 }, ptr %a110
store { ptr, i64, i64 } %t113, ptr %a115
store { ptr, i64, i64 } { ptr @.str.5100, i64 3, i64 0 }, ptr %a116
call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116)
%t117 = load { ptr, i64, i64 }, ptr %a114
%t118 = call { ptr, i64, i64 } @finch.gen.op(ptr %t97, { ptr, i64, i64 } %t117)
store { ptr, i64, i64 } %t118, ptr %a119
%t120 = load ptr, ptr %a1
%t121 = load { ptr, i64, i64 }, ptr %a119
store { ptr, i64, i64 } { ptr @.str.5101, i64 7, 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.5102, i64 6, i64 0 }, ptr %a128
call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128)
%t129 = load { ptr, i64, i64 }, ptr %a126
%t130 = call { ptr, i64, i64 } @finch.gen.op(ptr %t120, { ptr, i64, i64 } %t129)
%t131 = load ptr, ptr %a1
%t132 = icmp eq ptr %t131, null
br i1 %t132, label %panic7678, label %ok7679
panic7678:
call void @finch_panic(ptr @.str.5103, i64 4555, ptr @.str.5104)
unreachable
ok7679:
%t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 40
store { ptr, i64, i64 } %t130, ptr %t133
%t134 = load ptr, ptr %a1
%t135 = load ptr, ptr %a1
%t136 = load %S.gen.FnSig, ptr %a2
%t137 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t135, %S.gen.FnSig %t136)
store { ptr, i64, i64 } { ptr @.str.5105, i64 13, i64 0 }, ptr %a139
store { ptr, i64, i64 } %t137, ptr %a140
call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140)
%t141 = load { ptr, i64, i64 }, ptr %a138
store { ptr, i64, i64 } %t141, ptr %a143
store { ptr, i64, i64 } { ptr @.str.5106, i64 1, i64 0 }, ptr %a144
call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144)
%t145 = load { ptr, i64, i64 }, ptr %a142
%t146 = load { ptr, i64, i64 }, ptr %a96
store { ptr, i64, i64 } %t145, ptr %a148
store { ptr, i64, i64 } %t146, ptr %a149
call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149)
%t150 = load { ptr, i64, i64 }, ptr %a147
store { ptr, i64, i64 } %t150, ptr %a152
store { ptr, i64, i64 } { ptr @.str.5107, i64 3, i64 0 }, ptr %a153
call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153)
%t154 = load { ptr, i64, i64 }, ptr %a151
%t155 = call { ptr, i64, i64 } @finch.gen.op(ptr %t134, { ptr, i64, i64 } %t154)
%t156 = load ptr, ptr %a1
%t157 = icmp eq ptr %t156, null
br i1 %t157, label %panic7680, label %ok7681
panic7680:
call void @finch_panic(ptr @.str.5108, i64 4556, ptr @.str.5109)
unreachable
ok7681:
%t158 = getelementptr inbounds %S.gen.Gen, ptr %t156, i32 0, i32 41
store { ptr, i64, i64 } %t155, ptr %t158
%t159 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12
%t160 = getelementptr inbounds %S.ast.Type, ptr %t159, i32 0, i32 0
%t161 = load { ptr, i64, i64 }, ptr %t160
store { ptr, i64, i64 } %t161, ptr %a162
store { ptr, i64, i64 } { ptr @.str.5110, i64 4, i64 0 }, ptr %a163
%t164 = call i32 @finch_str_eq(ptr %a162, ptr %a163)
%t165 = icmp ne i32 %t164, 0
br i1 %t165, label %then7682, label %endif7684
then7682:
%t166 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12
%t167 = load %S.ast.Type, ptr %t166
store %S.ast.Type %t167, ptr %a168
call void @finch.copy.S_ast_Type(ptr %a169, ptr %a168)
%t170 = load %S.ast.Type, ptr %a169
%t171 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t170, 1
ret %S.gen.Val %t171
endif7684:
%t172 = load ptr, ptr %a1
%t173 = load ptr, ptr %a1
%t174 = load %S.gen.FnSig, ptr %a2
%t175 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t173, %S.gen.FnSig %t174)
store { ptr, i64, i64 } { ptr @.str.5111, i64 13, 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.5112, 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 = load { ptr, i64, i64 }, ptr %a96
store { ptr, i64, i64 } %t183, ptr %a186
store { ptr, i64, i64 } %t184, ptr %a187
call void @finch_str_concat(ptr %a185, ptr %a186, ptr %a187)
%t188 = load { ptr, i64, i64 }, ptr %a185
store { ptr, i64, i64 } %t188, ptr %a190
store { ptr, i64, i64 } { ptr @.str.5113, i64 3, i64 0 }, ptr %a191
call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191)
%t192 = load { ptr, i64, i64 }, ptr %a189
%t193 = call { ptr, i64, i64 } @finch.gen.op(ptr %t172, { ptr, i64, i64 } %t192)
%t194 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t193, 0
%t195 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12
%t196 = load %S.ast.Type, ptr %t195
store %S.ast.Type %t196, ptr %a197
call void @finch.copy.S_ast_Type(ptr %a198, ptr %a197)
%t199 = load %S.ast.Type, ptr %a198
%t200 = insertvalue %S.gen.Val %t194, %S.ast.Type %t199, 1
%t201 = load ptr, ptr %a1
%t202 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12
%t203 = load %S.ast.Type, ptr %t202
%t204 = call i1 @finch.gen.owning(ptr %t201, %S.ast.Type %t203)
%t205 = insertvalue %S.gen.Val %t200, i1 %t204, 2
ret %S.gen.Val %t205
endif7677:
%t206 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12
%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.5114, i64 4, i64 0 }, ptr %a210
%t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210)
%t212 = icmp ne i32 %t211, 0
br i1 %t212, label %then7685, label %endif7687
then7685:
%t213 = load ptr, ptr %a1
%t214 = load { ptr, i64, i64 }, ptr %a90
call void @finch.gen.emit(ptr %t213, { ptr, i64, i64 } %t214)
%t215 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12
%t216 = load %S.ast.Type, ptr %t215
store %S.ast.Type %t216, ptr %a217
call void @finch.copy.S_ast_Type(ptr %a218, ptr %a217)
%t219 = load %S.ast.Type, ptr %a218
%t220 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t219, 1
ret %S.gen.Val %t220
endif7687:
%t221 = load ptr, ptr %a1
%t222 = load { ptr, i64, i64 }, ptr %a90
%t223 = call { ptr, i64, i64 } @finch.gen.op(ptr %t221, { ptr, i64, i64 } %t222)
%t224 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t223, 0
%t225 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12
%t226 = load %S.ast.Type, ptr %t225
store %S.ast.Type %t226, ptr %a227
call void @finch.copy.S_ast_Type(ptr %a228, ptr %a227)
%t229 = load %S.ast.Type, ptr %a228
%t230 = insertvalue %S.gen.Val %t224, %S.ast.Type %t229, 1
%t231 = load ptr, ptr %a1
%t232 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12
%t233 = load %S.ast.Type, ptr %t232
%t234 = call i1 @finch.gen.owning(ptr %t231, %S.ast.Type %t233)
%t235 = insertvalue %S.gen.Val %t230, i1 %t234, 2
ret %S.gen.Val %t235
}
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
%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
%a59 = alloca %S.ast.Type, align 16
%a63 = alloca { ptr, i64, i64 }, align 16
%a76 = alloca i1, align 16
%a77 = alloca { ptr, i64, i64 }, align 16
%a81 = alloca i64, align 16
%a93 = alloca 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
%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
%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
%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
%a162 = alloca { ptr, i64, i64 }, align 16
%a163 = alloca { ptr, i64, i64 }, align 16
%a164 = alloca { ptr, i64, i64 }, align 16
%a182 = alloca i64, align 16
%a185 = alloca i64, align 16
%a190 = alloca { ptr, i64, i64 }, align 16
%a191 = alloca { ptr, i64, i64 }, align 16
%a196 = alloca i64, align 16
%a209 = alloca { ptr, i64, i64 }, align 16
%a210 = alloca { ptr, i64, i64 }, align 16
%a211 = 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
%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
%a268 = alloca { ptr, i64, i64 }, align 16
%a272 = alloca i64, align 16
%a283 = alloca %S.ast.Type, align 16
%a284 = alloca %S.ast.Type, align 16
%a286 = alloca %S.ast.Type, align 16
%a287 = alloca %S.gen.Val, 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
%a363 = alloca { ptr, i64, i64 }, align 16
%a364 = alloca { ptr, i64, i64 }, align 16
%a366 = alloca { ptr, i64, i64 }, align 16
%a371 = alloca { ptr, i64, i64 }, align 16
%a372 = alloca { ptr, i64, i64 }, align 16
%a374 = 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
%a387 = alloca { ptr, i64, i64 }, align 16
%a388 = alloca { ptr, i64, i64 }, align 16
%a390 = 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
%a405 = alloca { ptr, i64, i64 }, align 16
%a407 = alloca { ptr, i64, i64 }, align 16
%a412 = alloca { ptr, i64, i64 }, align 16
%a413 = alloca { ptr, i64, i64 }, align 16
%a421 = alloca { ptr, i64, i64 }, align 16
%a422 = alloca { ptr, i64, i64 }, align 16
%a465 = 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
%a470 = alloca { ptr, i64, i64 }, align 16
%a471 = alloca { ptr, i64, i64 }, align 16
%a478 = 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
%a492 = alloca { ptr, i64, i64 }, align 16
%a493 = alloca { ptr, i64, i64 }, align 16
%a499 = alloca { ptr, i64, i64 }, align 16
%a500 = 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
%a513 = alloca { ptr, i64, i64 }, align 16
%a514 = alloca { ptr, i64, i64 }, align 16
%a515 = 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
%a524 = alloca { ptr, i64, i64 }, align 16
%a525 = alloca { ptr, i64, i64 }, align 16
%a526 = 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
%a535 = alloca { ptr, i64, i64 }, align 16
%a536 = 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
%a541 = 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
%a561 = alloca { ptr, i64, i64 }, align 16
%a562 = alloca { ptr, i64, i64 }, align 16
%a566 = alloca %S.ast.Type, align 16
%a567 = 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 %panic7688, label %ok7689
panic7688:
call void @finch_panic(ptr @.str.5115, i64 4570, ptr @.str.5116)
unreachable
ok7689:
%t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 15
%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 %range7690, label %inrange7691
range7690:
call void @finch_panic_index(ptr @.str.5117, i64 4570, i64 %t9, i64 %t11)
unreachable
inrange7691:
%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 %then7692, label %endif7694
then7692:
%t24 = load ptr, ptr %a1
%t25 = icmp eq ptr %t24, null
br i1 %t25, label %panic7695, label %ok7696
panic7695:
call void @finch_panic(ptr @.str.5118, i64 4573, ptr @.str.5119)
unreachable
ok7696:
%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 %range7697, label %inrange7698
range7697:
call void @finch_panic_index(ptr @.str.5120, i64 4573, i64 %t28, i64 %t30)
unreachable
inrange7698:
%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 %range7699, label %inrange7700
range7699:
call void @finch_panic_index(ptr @.str.5121, i64 4573, i64 %t36, i64 %t38)
unreachable
inrange7700:
%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 %a20
br label %endif7694
endif7694:
%t46 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.5122, i64 6, i64 0 }, 0
%t47 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1
%t48 = load { ptr, i64, i64 }, ptr %t47
store { ptr, i64, i64 } %t48, ptr %a49
call void @finch_str_copy(ptr %a50, ptr %a49)
%t51 = load { ptr, i64, i64 }, ptr %a50
%t52 = insertvalue %S.ast.Type %t46, { ptr, i64, i64 } %t51, 2
%t53 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 0
%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.ast.Type %t52, { ptr, i64, i64 } %t57, 3
store %S.ast.Type %t58, ptr %a59
%t60 = load ptr, ptr %a1
%t61 = load %S.ast.Type, ptr %a59
%t62 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t60, %S.ast.Type %t61)
store { ptr, i64, i64 } %t62, ptr %a63
%t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1
%t65 = load i64, ptr %t64
%t66 = icmp sgt i64 %t65, 0
br label %logic.from7701
logic.from7701:
br i1 %t66, label %logic.rhs7702, label %logic.end7703
logic.rhs7702:
%t67 = load { ptr, i64, i64 }, ptr %a4
%t68 = extractvalue { ptr, i64, i64 } %t67, 1
%t69 = icmp uge i64 0, %t68
br i1 %t69, label %range7704, label %inrange7705
range7704:
call void @finch_panic_index(ptr @.str.5123, i64 4577, i64 0, i64 %t68)
unreachable
inrange7705:
%t70 = extractvalue { ptr, i64, i64 } %t67, 0
%t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i64 0
%t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i32 0, i32 1
%t73 = load i64, ptr %t72
%t74 = icmp sgt i64 %t73, 0
br label %logic.rend7706
logic.rend7706:
br label %logic.end7703
logic.end7703:
%t75 = phi i1 [ false, %logic.from7701 ], [ %t74, %logic.rend7706 ]
store i1 %t75, ptr %a76
store { ptr, i64, i64 } zeroinitializer, ptr %a77
%t78 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11
%t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i32 0, i32 1
%t80 = load i64, ptr %t79
store i64 0, ptr %a81
br label %for.cond7707
for.cond7707:
%t82 = load i64, ptr %a81
%t83 = icmp slt i64 %t82, %t80
br i1 %t83, label %for.body7708, label %for.end7710
for.body7708:
%t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %a77, i32 0, i32 1
%t85 = load i64, ptr %t84
%t86 = add i64 %t85, 1
call void @finch_arr_reserve(ptr %a77, i64 %t86, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64))
%t87 = load ptr, ptr %a77
%t88 = getelementptr inbounds i64, ptr %t87, i64 %t85
store i64 -1, ptr %t88
store i64 %t86, ptr %t84
br label %for.step7709
for.step7709:
%t89 = load i64, ptr %a81
%t90 = add i64 %t89, 1
store i64 %t90, ptr %a81
br label %for.cond7707
for.end7710:
%t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1
%t92 = load i64, ptr %t91
store i64 0, ptr %a93
br label %for.cond7711
for.cond7711:
%t94 = load i64, ptr %a93
%t95 = icmp slt i64 %t94, %t92
br i1 %t95, label %for.body7712, label %for.end7714
for.body7712:
%t96 = load i64, ptr %a93
%t97 = load { ptr, i64, i64 }, ptr %a4
%t98 = extractvalue { ptr, i64, i64 } %t97, 1
%t99 = icmp uge i64 %t96, %t98
br i1 %t99, label %range7715, label %inrange7716
range7715:
call void @finch_panic_index(ptr @.str.5124, i64 4583, i64 %t96, i64 %t98)
unreachable
inrange7716:
%t100 = extractvalue { ptr, i64, i64 } %t97, 0
%t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t100, i64 %t96
%t102 = getelementptr inbounds { ptr, i64, i64 }, ptr %t101, i32 0, i32 1
%t103 = load i64, ptr %t102
%t104 = icmp sgt i64 %t103, 0
%t105 = load i1, ptr %a76
%t106 = icmp ne i1 %t104, %t105
br i1 %t106, label %then7717, label %endif7719
then7717:
%t107 = load ptr, ptr %a1
%t108 = load i64, ptr %a93
%t109 = load { ptr, i64, i64 }, ptr %a3
%t110 = extractvalue { ptr, i64, i64 } %t109, 1
%t111 = icmp uge i64 %t108, %t110
br i1 %t111, label %range7720, label %inrange7721
range7720:
call void @finch_panic_index(ptr @.str.5125, i64 4584, i64 %t108, i64 %t110)
unreachable
inrange7721:
%t112 = extractvalue { ptr, i64, i64 } %t109, 0
%t113 = getelementptr inbounds %S.ast.Node, ptr %t112, i64 %t108
%t114 = load %S.ast.Node, ptr %t113
call void @finch.gen.fail(ptr %t107, %S.ast.Node %t114, { ptr, i64, i64 } { ptr @.str.5126, i64 69, i64 0 })
br label %endif7719
endif7719:
%t115 = load i1, ptr %a76
%t116 = xor i1 %t115, true
br i1 %t116, label %then7722, label %endif7724
then7722:
%t117 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1
%t118 = load i64, ptr %t117
%t119 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11
%t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1
%t121 = load i64, ptr %t120
%t122 = icmp ne i64 %t118, %t121
br i1 %t122, label %then7725, label %endif7727
then7725:
%t123 = load ptr, ptr %a1
%t124 = load %S.ast.Node, ptr %a5
%t125 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1
%t126 = load { ptr, i64, i64 }, ptr %t125
store { ptr, i64, i64 } %t126, ptr %a128
store { ptr, i64, i64 } { ptr @.str.5127, i64 5, i64 0 }, ptr %a129
call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129)
%t130 = load { ptr, i64, i64 }, ptr %a127
%t131 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11
%t132 = getelementptr inbounds { ptr, i64, i64 }, ptr %t131, i32 0, i32 1
%t133 = load i64, ptr %t132
call void @finch_str_from_int(ptr %a134, i64 %t133)
%t135 = load { ptr, i64, i64 }, ptr %a134
store { ptr, i64, i64 } %t130, 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.5128, i64 17, i64 0 }, ptr %a142
call void @finch_str_concat(ptr %a140, ptr %a141, ptr %a142)
%t143 = load { ptr, i64, i64 }, ptr %a140
%t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1
%t145 = load i64, ptr %t144
call void @finch_str_from_int(ptr %a146, i64 %t145)
%t147 = load { ptr, i64, i64 }, ptr %a146
store { ptr, i64, i64 } %t143, ptr %a149
store { ptr, i64, i64 } %t147, ptr %a150
call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150)
%t151 = load { ptr, i64, i64 }, ptr %a148
store { ptr, i64, i64 } %t151, ptr %a153
store { ptr, i64, i64 } { ptr @.str.5129, i64 23, i64 0 }, ptr %a154
call void @finch_str_concat(ptr %a152, ptr %a153, ptr %a154)
%t155 = load { ptr, i64, i64 }, ptr %a152
%t156 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1
%t157 = load { ptr, i64, i64 }, ptr %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)
%t161 = load { ptr, i64, i64 }, ptr %a158
store { ptr, i64, i64 } %t161, ptr %a163
store { ptr, i64, i64 } { ptr @.str.5130, i64 15, i64 0 }, ptr %a164
call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164)
%t165 = load { ptr, i64, i64 }, ptr %a162
call void @finch.gen.fail(ptr %t123, %S.ast.Node %t124, { ptr, i64, i64 } %t165)
br label %endif7727
endif7727:
%t166 = load i64, ptr %a93
%t167 = load i64, ptr %a93
%t168 = load { ptr, i64, i64 }, ptr %a77
%t169 = extractvalue { ptr, i64, i64 } %t168, 1
%t170 = icmp uge i64 %t167, %t169
br i1 %t170, label %range7728, label %inrange7729
range7728:
call void @finch_panic_index(ptr @.str.5131, i64 4590, i64 %t167, i64 %t169)
unreachable
inrange7729:
%t171 = extractvalue { ptr, i64, i64 } %t168, 0
%t172 = getelementptr inbounds i64, ptr %t171, i64 %t167
store i64 %t166, ptr %t172
br label %for.step7713
endif7724:
%t173 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11
%t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i32 0, i32 1
%t175 = load i64, ptr %a93
%t176 = load { ptr, i64, i64 }, ptr %a4
%t177 = extractvalue { ptr, i64, i64 } %t176, 1
%t178 = icmp uge i64 %t175, %t177
br i1 %t178, label %range7730, label %inrange7731
range7730:
call void @finch_panic_index(ptr @.str.5132, i64 4593, i64 %t175, i64 %t177)
unreachable
inrange7731:
%t179 = extractvalue { ptr, i64, i64 } %t176, 0
%t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i64 %t175
%t181 = load { ptr, i64, i64 }, ptr %t180
store i64 -1, ptr %a182
%t183 = load i64, ptr %t174
%t184 = load ptr, ptr %t173
store i64 0, ptr %a185
br label %find.cond7732
find.cond7732:
%t186 = load i64, ptr %a185
%t187 = icmp slt i64 %t186, %t183
br i1 %t187, label %find.body7733, label %find.end7736
find.body7733:
%t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i64 %t186
%t189 = load { ptr, i64, i64 }, ptr %t188
store { ptr, i64, i64 } %t189, ptr %a190
store { ptr, i64, i64 } %t181, ptr %a191
%t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191)
%t193 = icmp ne i32 %t192, 0
br i1 %t193, label %find.hit7734, label %find.next7735
find.hit7734:
store i64 %t186, ptr %a182
br label %find.end7736
find.next7735:
%t194 = add i64 %t186, 1
store i64 %t194, ptr %a185
br label %find.cond7732
find.end7736:
%t195 = load i64, ptr %a182
store i64 %t195, ptr %a196
%t197 = load i64, ptr %a196
%t198 = icmp slt i64 %t197, 0
br i1 %t198, label %then7737, label %endif7739
then7737:
%t199 = load ptr, ptr %a1
%t200 = load i64, ptr %a93
%t201 = load { ptr, i64, i64 }, ptr %a3
%t202 = extractvalue { ptr, i64, i64 } %t201, 1
%t203 = icmp uge i64 %t200, %t202
br i1 %t203, label %range7740, label %inrange7741
range7740:
call void @finch_panic_index(ptr @.str.5133, i64 4595, i64 %t200, i64 %t202)
unreachable
inrange7741:
%t204 = extractvalue { ptr, i64, i64 } %t201, 0
%t205 = getelementptr inbounds %S.ast.Node, ptr %t204, i64 %t200
%t206 = load %S.ast.Node, ptr %t205
%t207 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1
%t208 = load { ptr, i64, i64 }, ptr %t207
store { ptr, i64, i64 } %t208, ptr %a210
store { ptr, i64, i64 } { ptr @.str.5134, i64 15, i64 0 }, ptr %a211
call void @finch_str_concat(ptr %a209, ptr %a210, ptr %a211)
%t212 = load { ptr, i64, i64 }, ptr %a209
%t213 = load i64, ptr %a93
%t214 = load { ptr, i64, i64 }, ptr %a4
%t215 = extractvalue { ptr, i64, i64 } %t214, 1
%t216 = icmp uge i64 %t213, %t215
br i1 %t216, label %range7742, label %inrange7743
range7742:
call void @finch_panic_index(ptr @.str.5135, i64 4595, i64 %t213, i64 %t215)
unreachable
inrange7743:
%t217 = extractvalue { ptr, i64, i64 } %t214, 0
%t218 = getelementptr inbounds { ptr, i64, i64 }, ptr %t217, i64 %t213
%t219 = load { ptr, i64, i64 }, ptr %t218
store { ptr, i64, i64 } %t212, 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.5136, i64 1, i64 0 }, ptr %a226
call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226)
%t227 = load { ptr, i64, i64 }, ptr %a224
call void @finch.gen.fail(ptr %t199, %S.ast.Node %t206, { ptr, i64, i64 } %t227)
br label %endif7739
endif7739:
%t228 = load i64, ptr %a196
%t229 = load { ptr, i64, i64 }, ptr %a77
%t230 = extractvalue { ptr, i64, i64 } %t229, 1
%t231 = icmp uge i64 %t228, %t230
br i1 %t231, label %range7744, label %inrange7745
range7744:
call void @finch_panic_index(ptr @.str.5137, i64 4597, i64 %t228, i64 %t230)
unreachable
inrange7745:
%t232 = extractvalue { ptr, i64, i64 } %t229, 0
%t233 = getelementptr inbounds i64, ptr %t232, i64 %t228
%t234 = load i64, ptr %t233
%t235 = icmp sge i64 %t234, 0
br i1 %t235, label %then7746, label %endif7748
then7746:
%t236 = load ptr, ptr %a1
%t237 = load i64, ptr %a93
%t238 = load { ptr, i64, i64 }, ptr %a3
%t239 = extractvalue { ptr, i64, i64 } %t238, 1
%t240 = icmp uge i64 %t237, %t239
br i1 %t240, label %range7749, label %inrange7750
range7749:
call void @finch_panic_index(ptr @.str.5138, i64 4598, i64 %t237, i64 %t239)
unreachable
inrange7750:
%t241 = extractvalue { ptr, i64, i64 } %t238, 0
%t242 = getelementptr inbounds %S.ast.Node, ptr %t241, i64 %t237
%t243 = load %S.ast.Node, ptr %t242
%t244 = load i64, ptr %a93
%t245 = load { ptr, i64, i64 }, ptr %a4
%t246 = extractvalue { ptr, i64, i64 } %t245, 1
%t247 = icmp uge i64 %t244, %t246
br i1 %t247, label %range7751, label %inrange7752
range7751:
call void @finch_panic_index(ptr @.str.5140, i64 4598, i64 %t244, i64 %t246)
unreachable
inrange7752:
%t248 = extractvalue { ptr, i64, i64 } %t245, 0
%t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i64 %t244
%t250 = load { ptr, i64, i64 }, ptr %t249
store { ptr, i64, i64 } { ptr @.str.5139, i64 11, 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.5141, i64 16, i64 0 }, ptr %a257
call void @finch_str_concat(ptr %a255, ptr %a256, ptr %a257)
%t258 = load { ptr, i64, i64 }, ptr %a255
call void @finch.gen.fail(ptr %t236, %S.ast.Node %t243, { ptr, i64, i64 } %t258)
br label %endif7748
endif7748:
%t259 = load i64, ptr %a93
%t260 = load i64, ptr %a196
%t261 = load { ptr, i64, i64 }, ptr %a77
%t262 = extractvalue { ptr, i64, i64 } %t261, 1
%t263 = icmp uge i64 %t260, %t262
br i1 %t263, label %range7753, label %inrange7754
range7753:
call void @finch_panic_index(ptr @.str.5142, i64 4600, i64 %t260, i64 %t262)
unreachable
inrange7754:
%t264 = extractvalue { ptr, i64, i64 } %t261, 0
%t265 = getelementptr inbounds i64, ptr %t264, i64 %t260
store i64 %t259, ptr %t265
br label %for.step7713
for.step7713:
%t266 = load i64, ptr %a93
%t267 = add i64 %t266, 1
store i64 %t267, ptr %a93
br label %for.cond7711
for.end7714:
store { ptr, i64, i64 } { ptr @.str.5143, i64 15, i64 0 }, ptr %a268
%t269 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11
%t270 = getelementptr inbounds { ptr, i64, i64 }, ptr %t269, i32 0, i32 1
%t271 = load i64, ptr %t270
store i64 0, ptr %a272
br label %for.cond7755
for.cond7755:
%t273 = load i64, ptr %a272
%t274 = icmp slt i64 %t273, %t271
br i1 %t274, label %for.body7756, label %for.end7758
for.body7756:
%t275 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 12
%t276 = load i64, ptr %a272
%t277 = load { ptr, i64, i64 }, ptr %t275
%t278 = extractvalue { ptr, i64, i64 } %t277, 1
%t279 = icmp uge i64 %t276, %t278
br i1 %t279, label %range7759, label %inrange7760
range7759:
call void @finch_panic_index(ptr @.str.5144, i64 4604, i64 %t276, i64 %t278)
unreachable
inrange7760:
%t280 = extractvalue { ptr, i64, i64 } %t277, 0
%t281 = getelementptr inbounds %S.ast.Type, ptr %t280, i64 %t276
%t282 = load %S.ast.Type, ptr %t281
store %S.ast.Type %t282, ptr %a283
call void @finch.copy.S_ast_Type(ptr %a284, ptr %a283)
%t285 = load %S.ast.Type, ptr %a284
store %S.ast.Type %t285, ptr %a286
store %S.gen.Val zeroinitializer, ptr %a287
%t288 = load i64, ptr %a272
%t289 = load { ptr, i64, i64 }, ptr %a77
%t290 = extractvalue { ptr, i64, i64 } %t289, 1
%t291 = icmp uge i64 %t288, %t290
br i1 %t291, label %range7761, label %inrange7762
range7761:
call void @finch_panic_index(ptr @.str.5145, i64 4606, i64 %t288, i64 %t290)
unreachable
inrange7762:
%t292 = extractvalue { ptr, i64, i64 } %t289, 0
%t293 = getelementptr inbounds i64, ptr %t292, i64 %t288
%t294 = load i64, ptr %t293
%t295 = icmp sge i64 %t294, 0
br i1 %t295, label %then7763, label %else7764
then7763:
%t296 = load ptr, ptr %a1
%t297 = load ptr, ptr %a1
%t298 = load i64, ptr %a272
%t299 = load { ptr, i64, i64 }, ptr %a77
%t300 = extractvalue { ptr, i64, i64 } %t299, 1
%t301 = icmp uge i64 %t298, %t300
br i1 %t301, label %range7766, label %inrange7767
range7766:
call void @finch_panic_index(ptr @.str.5146, i64 4607, i64 %t298, i64 %t300)
unreachable
inrange7767:
%t302 = extractvalue { ptr, i64, i64 } %t299, 0
%t303 = getelementptr inbounds i64, ptr %t302, i64 %t298
%t304 = load i64, ptr %t303
%t305 = load { ptr, i64, i64 }, ptr %a3
%t306 = extractvalue { ptr, i64, i64 } %t305, 1
%t307 = icmp uge i64 %t304, %t306
br i1 %t307, label %range7768, label %inrange7769
range7768:
call void @finch_panic_index(ptr @.str.5147, i64 4607, i64 %t304, i64 %t306)
unreachable
inrange7769:
%t308 = extractvalue { ptr, i64, i64 } %t305, 0
%t309 = getelementptr inbounds %S.ast.Node, ptr %t308, i64 %t304
%t310 = load %S.ast.Node, ptr %t309
%t311 = load %S.ast.Type, ptr %a286
%t312 = call %S.gen.Val @finch.gen.exprWant(ptr %t297, %S.ast.Node %t310, %S.ast.Type %t311)
%t313 = load %S.ast.Type, ptr %a286
%t314 = load i64, ptr %a272
%t315 = load { ptr, i64, i64 }, ptr %a77
%t316 = extractvalue { ptr, i64, i64 } %t315, 1
%t317 = icmp uge i64 %t314, %t316
br i1 %t317, label %range7770, label %inrange7771
range7770:
call void @finch_panic_index(ptr @.str.5148, i64 4607, i64 %t314, i64 %t316)
unreachable
inrange7771:
%t318 = extractvalue { ptr, i64, i64 } %t315, 0
%t319 = getelementptr inbounds i64, ptr %t318, i64 %t314
%t320 = load i64, ptr %t319
%t321 = load { ptr, i64, i64 }, ptr %a3
%t322 = extractvalue { ptr, i64, i64 } %t321, 1
%t323 = icmp uge i64 %t320, %t322
br i1 %t323, label %range7772, label %inrange7773
range7772:
call void @finch_panic_index(ptr @.str.5149, i64 4607, i64 %t320, i64 %t322)
unreachable
inrange7773:
%t324 = extractvalue { ptr, i64, i64 } %t321, 0
%t325 = getelementptr inbounds %S.ast.Node, ptr %t324, i64 %t320
%t326 = load %S.ast.Node, ptr %t325
%t327 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11
%t328 = load i64, ptr %a272
%t329 = load { ptr, i64, i64 }, ptr %t327
%t330 = extractvalue { ptr, i64, i64 } %t329, 1
%t331 = icmp uge i64 %t328, %t330
br i1 %t331, label %range7774, label %inrange7775
range7774:
call void @finch_panic_index(ptr @.str.5151, i64 4607, i64 %t328, i64 %t330)
unreachable
inrange7775:
%t332 = extractvalue { ptr, i64, i64 } %t329, 0
%t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %t332, i64 %t328
%t334 = load { ptr, i64, i64 }, ptr %t333
store { ptr, i64, i64 } { ptr @.str.5150, i64 11, i64 0 }, ptr %a336
store { ptr, i64, i64 } %t334, ptr %a337
call void @finch_str_concat(ptr %a335, ptr %a336, ptr %a337)
%t338 = load { ptr, i64, i64 }, ptr %a335
store { ptr, i64, i64 } %t338, ptr %a340
store { ptr, i64, i64 } { ptr @.str.5152, i64 1, i64 0 }, ptr %a341
call void @finch_str_concat(ptr %a339, ptr %a340, ptr %a341)
%t342 = load { ptr, i64, i64 }, ptr %a339
%t343 = call %S.gen.Val @finch.gen.coerce(ptr %t296, %S.gen.Val %t312, %S.ast.Type %t313, %S.ast.Node %t326, { ptr, i64, i64 } %t342)
store %S.gen.Val %t343, ptr %a287
br label %endif7765
else7764:
%t344 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 2
%t345 = load i1, ptr %t344
%t346 = xor i1 %t345, true
br label %logic.from7776
logic.from7776:
br i1 %t346, label %logic.rhs7777, label %logic.end7778
logic.rhs7777:
%t347 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9
%t348 = load i64, ptr %a272
%t349 = load { ptr, i64, i64 }, ptr %t347
%t350 = extractvalue { ptr, i64, i64 } %t349, 1
%t351 = icmp uge i64 %t348, %t350
br i1 %t351, label %range7779, label %inrange7780
range7779:
call void @finch_panic_index(ptr @.str.5153, i64 4608, i64 %t348, i64 %t350)
unreachable
inrange7780:
%t352 = extractvalue { ptr, i64, i64 } %t349, 0
%t353 = getelementptr inbounds %S.ast.Node, ptr %t352, i64 %t348
%t354 = getelementptr inbounds %S.ast.Node, ptr %t353, i32 0, i32 9
%t355 = getelementptr inbounds { ptr, i64, i64 }, ptr %t354, i32 0, i32 1
%t356 = load i64, ptr %t355
%t357 = icmp sgt i64 %t356, 0
br label %logic.rend7781
logic.rend7781:
br label %logic.end7778
logic.end7778:
%t358 = phi i1 [ false, %logic.from7776 ], [ %t357, %logic.rend7781 ]
br i1 %t358, label %then7782, label %else7783
then7782:
%t359 = load ptr, ptr %a1
%t360 = icmp eq ptr %t359, null
br i1 %t360, label %panic7785, label %ok7786
panic7785:
call void @finch_panic(ptr @.str.5154, i64 4610, ptr @.str.5155)
unreachable
ok7786:
%t361 = getelementptr inbounds %S.gen.Gen, ptr %t359, i32 0, i32 10
%t362 = load { ptr, i64, i64 }, ptr %t361
store { ptr, i64, i64 } %t362, ptr %a363
call void @finch.copy.arr_S_gen_Scope(ptr %a364, ptr %a363)
%t365 = load { ptr, i64, i64 }, ptr %a364
store { ptr, i64, i64 } %t365, ptr %a366
%t367 = load ptr, ptr %a1
%t368 = icmp eq ptr %t367, null
br i1 %t368, label %panic7787, label %ok7788
panic7787:
call void @finch_panic(ptr @.str.5156, i64 4611, ptr @.str.5157)
unreachable
ok7788:
%t369 = getelementptr inbounds %S.gen.Gen, ptr %t367, i32 0, i32 13
%t370 = load { ptr, i64, i64 }, ptr %t369
store { ptr, i64, i64 } %t370, ptr %a371
call void @finch_str_copy(ptr %a372, ptr %a371)
%t373 = load { ptr, i64, i64 }, ptr %a372
store { ptr, i64, i64 } %t373, ptr %a374
%t375 = load ptr, ptr %a1
%t376 = icmp eq ptr %t375, null
br i1 %t376, label %panic7789, label %ok7790
panic7789:
call void @finch_panic(ptr @.str.5158, i64 4612, ptr @.str.5159)
unreachable
ok7790:
%t377 = getelementptr inbounds %S.gen.Gen, ptr %t375, i32 0, i32 17
%t378 = load { ptr, i64, i64 }, ptr %t377
store { ptr, i64, i64 } %t378, ptr %a379
call void @finch.copy.arr_str(ptr %a380, ptr %a379)
%t381 = load { ptr, i64, i64 }, ptr %a380
store { ptr, i64, i64 } %t381, ptr %a382
%t383 = load ptr, ptr %a1
%t384 = icmp eq ptr %t383, null
br i1 %t384, label %panic7791, label %ok7792
panic7791:
call void @finch_panic(ptr @.str.5160, i64 4613, ptr @.str.5161)
unreachable
ok7792:
%t385 = getelementptr inbounds %S.gen.Gen, ptr %t383, i32 0, i32 18
%t386 = load { ptr, i64, i64 }, ptr %t385
store { ptr, i64, i64 } %t386, ptr %a387
call void @finch.copy.arr_S_ast_Type(ptr %a388, ptr %a387)
%t389 = load { ptr, i64, i64 }, ptr %a388
store { ptr, i64, i64 } %t389, ptr %a390
%t391 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 6
%t392 = load { ptr, i64, i64 }, ptr %t391
%t393 = load ptr, ptr %a1
%t394 = icmp eq ptr %t393, null
br i1 %t394, label %panic7793, label %ok7794
panic7793:
call void @finch_panic(ptr @.str.5162, i64 4614, ptr @.str.5163)
unreachable
ok7794:
%t395 = getelementptr inbounds %S.gen.Gen, ptr %t393, i32 0, i32 17
store { ptr, i64, i64 } %t392, ptr %a396
call void @finch.copy.arr_str(ptr %a397, ptr %a396)
%t398 = load { ptr, i64, i64 }, ptr %a397
store { ptr, i64, i64 } %t398, ptr %t395
%t399 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 7
%t400 = load { ptr, i64, i64 }, ptr %t399
%t401 = load ptr, ptr %a1
%t402 = icmp eq ptr %t401, null
br i1 %t402, label %panic7795, label %ok7796
panic7795:
call void @finch_panic(ptr @.str.5164, i64 4615, ptr @.str.5165)
unreachable
ok7796:
%t403 = getelementptr inbounds %S.gen.Gen, ptr %t401, i32 0, i32 18
store { ptr, i64, i64 } %t400, ptr %a404
call void @finch.copy.arr_S_ast_Type(ptr %a405, ptr %a404)
%t406 = load { ptr, i64, i64 }, ptr %a405
store { ptr, i64, i64 } %t406, ptr %t403
store { ptr, i64, i64 } zeroinitializer, ptr %a407
%t408 = load { ptr, i64, i64 }, ptr %a407
%t409 = load ptr, ptr %a1
%t410 = icmp eq ptr %t409, null
br i1 %t410, label %panic7797, label %ok7798
panic7797:
call void @finch_panic(ptr @.str.5166, i64 4617, ptr @.str.5167)
unreachable
ok7798:
%t411 = getelementptr inbounds %S.gen.Gen, ptr %t409, i32 0, i32 10
store { ptr, i64, i64 } %t408, ptr %a412
call void @finch.copy.arr_S_gen_Scope(ptr %a413, ptr %a412)
%t414 = load { ptr, i64, i64 }, ptr %a413
store { ptr, i64, i64 } %t414, ptr %t411
%t415 = load ptr, ptr %a1
call void @finch.gen.pushScope(ptr %t415)
%t416 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 0
%t417 = load { ptr, i64, i64 }, ptr %t416
%t418 = load ptr, ptr %a1
%t419 = icmp eq ptr %t418, null
br i1 %t419, label %panic7799, label %ok7800
panic7799:
call void @finch_panic(ptr @.str.5168, i64 4619, ptr @.str.5169)
unreachable
ok7800:
%t420 = getelementptr inbounds %S.gen.Gen, ptr %t418, i32 0, i32 13
store { ptr, i64, i64 } %t417, ptr %a421
call void @finch_str_copy(ptr %a422, ptr %a421)
%t423 = load { ptr, i64, i64 }, ptr %a422
store { ptr, i64, i64 } %t423, ptr %t420
%t424 = load ptr, ptr %a1
%t425 = load ptr, ptr %a1
%t426 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9
%t427 = load i64, ptr %a272
%t428 = load { ptr, i64, i64 }, ptr %t426
%t429 = extractvalue { ptr, i64, i64 } %t428, 1
%t430 = icmp uge i64 %t427, %t429
br i1 %t430, label %range7801, label %inrange7802
range7801:
call void @finch_panic_index(ptr @.str.5170, i64 4620, i64 %t427, i64 %t429)
unreachable
inrange7802:
%t431 = extractvalue { ptr, i64, i64 } %t428, 0
%t432 = getelementptr inbounds %S.ast.Node, ptr %t431, i64 %t427
%t433 = getelementptr inbounds %S.ast.Node, ptr %t432, i32 0, i32 9
%t434 = load { ptr, i64, i64 }, ptr %t433
%t435 = extractvalue { ptr, i64, i64 } %t434, 1
%t436 = icmp uge i64 0, %t435
br i1 %t436, label %range7803, label %inrange7804
range7803:
call void @finch_panic_index(ptr @.str.5171, i64 4620, i64 0, i64 %t435)
unreachable
inrange7804:
%t437 = extractvalue { ptr, i64, i64 } %t434, 0
%t438 = getelementptr inbounds %S.ast.Node, ptr %t437, i64 0
%t439 = load %S.ast.Node, ptr %t438
%t440 = load %S.ast.Type, ptr %a286
%t441 = call %S.gen.Val @finch.gen.exprWant(ptr %t425, %S.ast.Node %t439, %S.ast.Type %t440)
%t442 = load %S.ast.Type, ptr %a286
%t443 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9
%t444 = load i64, ptr %a272
%t445 = load { ptr, i64, i64 }, ptr %t443
%t446 = extractvalue { ptr, i64, i64 } %t445, 1
%t447 = icmp uge i64 %t444, %t446
br i1 %t447, label %range7805, label %inrange7806
range7805:
call void @finch_panic_index(ptr @.str.5172, i64 4620, i64 %t444, i64 %t446)
unreachable
inrange7806:
%t448 = extractvalue { ptr, i64, i64 } %t445, 0
%t449 = getelementptr inbounds %S.ast.Node, ptr %t448, i64 %t444
%t450 = getelementptr inbounds %S.ast.Node, ptr %t449, i32 0, i32 9
%t451 = load { ptr, i64, i64 }, ptr %t450
%t452 = extractvalue { ptr, i64, i64 } %t451, 1
%t453 = icmp uge i64 0, %t452
br i1 %t453, label %range7807, label %inrange7808
range7807:
call void @finch_panic_index(ptr @.str.5173, i64 4620, i64 0, i64 %t452)
unreachable
inrange7808:
%t454 = extractvalue { ptr, i64, i64 } %t451, 0
%t455 = getelementptr inbounds %S.ast.Node, ptr %t454, i64 0
%t456 = load %S.ast.Node, ptr %t455
%t457 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11
%t458 = load i64, ptr %a272
%t459 = load { ptr, i64, i64 }, ptr %t457
%t460 = extractvalue { ptr, i64, i64 } %t459, 1
%t461 = icmp uge i64 %t458, %t460
br i1 %t461, label %range7809, label %inrange7810
range7809:
call void @finch_panic_index(ptr @.str.5175, i64 4620, i64 %t458, i64 %t460)
unreachable
inrange7810:
%t462 = extractvalue { ptr, i64, i64 } %t459, 0
%t463 = getelementptr inbounds { ptr, i64, i64 }, ptr %t462, i64 %t458
%t464 = load { ptr, i64, i64 }, ptr %t463
store { ptr, i64, i64 } { ptr @.str.5174, i64 16, i64 0 }, ptr %a466
store { ptr, i64, i64 } %t464, ptr %a467
call void @finch_str_concat(ptr %a465, ptr %a466, ptr %a467)
%t468 = load { ptr, i64, i64 }, ptr %a465
store { ptr, i64, i64 } %t468, ptr %a470
store { ptr, i64, i64 } { ptr @.str.5176, i64 1, i64 0 }, ptr %a471
call void @finch_str_concat(ptr %a469, ptr %a470, ptr %a471)
%t472 = load { ptr, i64, i64 }, ptr %a469
%t473 = call %S.gen.Val @finch.gen.coerce(ptr %t424, %S.gen.Val %t441, %S.ast.Type %t442, %S.ast.Node %t456, { ptr, i64, i64 } %t472)
store %S.gen.Val %t473, ptr %a287
%t474 = load { ptr, i64, i64 }, ptr %a374
%t475 = load ptr, ptr %a1
%t476 = icmp eq ptr %t475, null
br i1 %t476, label %panic7811, label %ok7812
panic7811:
call void @finch_panic(ptr @.str.5177, i64 4621, ptr @.str.5178)
unreachable
ok7812:
%t477 = getelementptr inbounds %S.gen.Gen, ptr %t475, i32 0, i32 13
store { ptr, i64, i64 } %t474, ptr %a478
call void @finch_str_copy(ptr %a479, ptr %a478)
%t480 = load { ptr, i64, i64 }, ptr %a479
store { ptr, i64, i64 } %t480, ptr %t477
%t481 = load { ptr, i64, i64 }, ptr %a382
%t482 = load ptr, ptr %a1
%t483 = icmp eq ptr %t482, null
br i1 %t483, label %panic7813, label %ok7814
panic7813:
call void @finch_panic(ptr @.str.5179, i64 4622, ptr @.str.5180)
unreachable
ok7814:
%t484 = getelementptr inbounds %S.gen.Gen, ptr %t482, i32 0, i32 17
store { ptr, i64, i64 } %t481, ptr %a485
call void @finch.copy.arr_str(ptr %a486, ptr %a485)
%t487 = load { ptr, i64, i64 }, ptr %a486
store { ptr, i64, i64 } %t487, ptr %t484
%t488 = load { ptr, i64, i64 }, ptr %a390
%t489 = load ptr, ptr %a1
%t490 = icmp eq ptr %t489, null
br i1 %t490, label %panic7815, label %ok7816
panic7815:
call void @finch_panic(ptr @.str.5181, i64 4623, ptr @.str.5182)
unreachable
ok7816:
%t491 = getelementptr inbounds %S.gen.Gen, ptr %t489, i32 0, i32 18
store { ptr, i64, i64 } %t488, ptr %a492
call void @finch.copy.arr_S_ast_Type(ptr %a493, ptr %a492)
%t494 = load { ptr, i64, i64 }, ptr %a493
store { ptr, i64, i64 } %t494, ptr %t491
%t495 = load { ptr, i64, i64 }, ptr %a366
%t496 = load ptr, ptr %a1
%t497 = icmp eq ptr %t496, null
br i1 %t497, label %panic7817, label %ok7818
panic7817:
call void @finch_panic(ptr @.str.5183, i64 4624, ptr @.str.5184)
unreachable
ok7818:
%t498 = getelementptr inbounds %S.gen.Gen, ptr %t496, i32 0, i32 10
store { ptr, i64, i64 } %t495, ptr %a499
call void @finch.copy.arr_S_gen_Scope(ptr %a500, ptr %a499)
%t501 = load { ptr, i64, i64 }, ptr %a500
store { ptr, i64, i64 } %t501, ptr %t498
br label %endif7784
else7783:
br label %for.step7757
endif7784:
br label %endif7765
endif7765:
%t502 = load ptr, ptr %a1
%t503 = load { ptr, i64, i64 }, ptr %a63
store { ptr, i64, i64 } { ptr @.str.5185, i64 12, i64 0 }, ptr %a505
store { ptr, i64, i64 } %t503, ptr %a506
call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506)
%t507 = load { ptr, i64, i64 }, ptr %a504
store { ptr, i64, i64 } %t507, ptr %a509
store { ptr, i64, i64 } { ptr @.str.5186, i64 1, i64 0 }, ptr %a510
call void @finch_str_concat(ptr %a508, ptr %a509, ptr %a510)
%t511 = load { ptr, i64, i64 }, ptr %a508
%t512 = load { ptr, i64, i64 }, ptr %a268
store { ptr, i64, i64 } %t511, 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
store { ptr, i64, i64 } %t516, ptr %a518
store { ptr, i64, i64 } { ptr @.str.5187, i64 2, 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, ptr %a1
%t522 = load %S.ast.Type, ptr %a286
%t523 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t521, %S.ast.Type %t522)
store { ptr, i64, i64 } %t520, ptr %a525
store { ptr, i64, i64 } %t523, ptr %a526
call void @finch_str_concat(ptr %a524, ptr %a525, ptr %a526)
%t527 = load { ptr, i64, i64 }, ptr %a524
store { ptr, i64, i64 } %t527, ptr %a529
store { ptr, i64, i64 } { ptr @.str.5188, i64 1, i64 0 }, ptr %a530
call void @finch_str_concat(ptr %a528, ptr %a529, ptr %a530)
%t531 = load { ptr, i64, i64 }, ptr %a528
%t532 = load ptr, ptr %a1
%t533 = load %S.gen.Val, ptr %a287
%t534 = call { ptr, i64, i64 } @finch.gen.own(ptr %t532, %S.gen.Val %t533)
store { ptr, i64, i64 } %t531, ptr %a536
store { ptr, i64, i64 } %t534, ptr %a537
call void @finch_str_concat(ptr %a535, ptr %a536, ptr %a537)
%t538 = load { ptr, i64, i64 }, ptr %a535
store { ptr, i64, i64 } %t538, ptr %a540
store { ptr, i64, i64 } { ptr @.str.5189, i64 2, i64 0 }, ptr %a541
call void @finch_str_concat(ptr %a539, ptr %a540, ptr %a541)
%t542 = load { ptr, i64, i64 }, ptr %a539
%t543 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 3
%t544 = load i64, ptr %a272
%t545 = load { ptr, i64, i64 }, ptr %t543
%t546 = extractvalue { ptr, i64, i64 } %t545, 1
%t547 = icmp uge i64 %t544, %t546
br i1 %t547, label %range7819, label %inrange7820
range7819:
call void @finch_panic_index(ptr @.str.5190, i64 4628, i64 %t544, i64 %t546)
unreachable
inrange7820:
%t548 = extractvalue { ptr, i64, i64 } %t545, 0
%t549 = getelementptr inbounds i64, ptr %t548, i64 %t544
%t550 = load i64, ptr %t549
call void @finch_str_from_int(ptr %a551, i64 %t550)
%t552 = load { ptr, i64, i64 }, ptr %a551
store { ptr, i64, i64 } %t542, ptr %a554
store { ptr, i64, i64 } %t552, ptr %a555
call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555)
%t556 = load { ptr, i64, i64 }, ptr %a553
%t557 = call { ptr, i64, i64 } @finch.gen.op(ptr %t502, { ptr, i64, i64 } %t556)
store { ptr, i64, i64 } %t557, ptr %a268
br label %for.step7757
for.step7757:
%t558 = load i64, ptr %a272
%t559 = add i64 %t558, 1
store i64 %t559, ptr %a272
br label %for.cond7755
for.end7758:
%t560 = load { ptr, i64, i64 }, ptr %a268
store { ptr, i64, i64 } %t560, ptr %a561
call void @finch_str_copy(ptr %a562, ptr %a561)
%t563 = load { ptr, i64, i64 }, ptr %a562
%t564 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t563, 0
%t565 = load %S.ast.Type, ptr %a59
store %S.ast.Type %t565, ptr %a566
call void @finch.copy.S_ast_Type(ptr %a567, ptr %a566)
%t568 = load %S.ast.Type, ptr %a567
%t569 = insertvalue %S.gen.Val %t564, %S.ast.Type %t568, 1
%t570 = load ptr, ptr %a1
%t571 = load %S.ast.Type, ptr %a59
%t572 = call i1 @finch.gen.owning(ptr %t570, %S.ast.Type %t571)
%t573 = insertvalue %S.gen.Val %t569, i1 %t572, 2
ret %S.gen.Val %t573
}
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
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 %panic7821, label %ok7822
panic7821:
call void @finch_panic(ptr @.str.5191, i64 4637, ptr @.str.5192)
unreachable
ok7822:
%t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 26
%t7 = load i1, ptr %t6
%t8 = xor i1 %t7, true
br i1 %t8, label %then7823, label %endif7825
then7823:
ret void
endif7825:
%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 %then7826, label %endif7828
then7826:
%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.5193, i64 0, i64 0 }, i64 0, i64 0)
br label %endif7828
endif7828:
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
%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
%a31 = 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
%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
%a61 = alloca 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
%a84 = alloca i64, align 16
%a91 = alloca { ptr, i64, i64 }, align 16
%a92 = alloca { ptr, i64, i64 }, align 16
%a93 = 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
%a107 = alloca i64, align 16
%a119 = alloca i64, align 16
%a122 = alloca { ptr, i64, i64 }, align 16
%a126 = alloca i64, align 16
%a138 = alloca %S.ast.Node, align 16
%a139 = alloca %S.ast.Node, 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
%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
%a188 = alloca { ptr, i64, i64 }, align 16
%a194 = alloca i64, align 16
%a197 = alloca i64, align 16
%a202 = alloca { ptr, i64, i64 }, align 16
%a203 = alloca { ptr, i64, i64 }, align 16
%a210 = alloca %S.gen.Ref, align 16
%a214 = alloca %S.ast.Type, align 16
%a215 = alloca %S.ast.Type, align 16
%a217 = alloca %S.ast.Type, align 16
%a223 = alloca %S.ast.Type, align 16
%a224 = alloca %S.ast.Type, align 16
%a228 = alloca { ptr, i64, i64 }, align 16
%a229 = alloca { ptr, i64, i64 }, align 16
%a232 = alloca { ptr, i64, i64 }, align 16
%a238 = alloca { ptr, i64, i64 }, align 16
%a239 = 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
%a263 = alloca { ptr, i64, i64 }, align 16
%a264 = alloca { ptr, i64, i64 }, align 16
%a265 = alloca { ptr, i64, i64 }, align 16
%a281 = alloca { ptr, i64, i64 }, align 16
%a282 = alloca { ptr, i64, i64 }, align 16
%a287 = alloca %S.gen.Val, align 16
%a288 = alloca %S.gen.Val, align 16
%a290 = alloca %S.gen.Val, align 16
%a300 = alloca %S.ast.Type, align 16
%a301 = alloca %S.ast.Type, align 16
%a315 = alloca { ptr, i64, i64 }, align 16
%a316 = alloca { ptr, i64, i64 }, align 16
%a319 = alloca { ptr, i64, i64 }, align 16
%a325 = alloca { ptr, i64, i64 }, align 16
%a326 = alloca { ptr, i64, i64 }, align 16
%a331 = alloca i64, align 16
%a334 = alloca i64, align 16
%a339 = alloca { ptr, i64, i64 }, align 16
%a340 = 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
%a367 = alloca %S.ast.Type, align 16
%a368 = alloca %S.ast.Type, align 16
%a370 = alloca %S.ast.Type, align 16
%a371 = alloca { ptr, i64, i64 }, align 16
%a374 = alloca { ptr, i64, i64 }, align 16
%a375 = alloca { ptr, i64, i64 }, align 16
%a391 = alloca { ptr, i64, i64 }, align 16
%a392 = 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
%a413 = 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
%a418 = 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
%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
%a440 = alloca %S.ast.Type, align 16
%a441 = alloca %S.ast.Type, align 16
%a444 = alloca { ptr, i64, i64 }, align 16
%a445 = 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
%a465 = alloca { ptr, i64, i64 }, align 16
%a466 = alloca { ptr, i64, i64 }, align 16
%a474 = alloca { ptr, i64, i64 }, align 16
%a475 = alloca { ptr, i64, i64 }, align 16
%a480 = alloca { ptr, i64, i64 }, align 16
%a481 = alloca { ptr, i64, i64 }, align 16
%a493 = alloca i64, align 16
%a498 = alloca { ptr, i64, i64 }, align 16
%a499 = alloca { ptr, i64, i64 }, align 16
%a509 = alloca i64, align 16
%a540 = alloca i64, align 16
%a561 = alloca { ptr, i64, i64 }, align 16
%a565 = alloca i64, align 16
%a573 = alloca %S.gen.FnSig, align 16
%a578 = alloca { ptr, i64, i64 }, align 16
%a579 = alloca { ptr, i64, i64 }, align 16
%a586 = alloca { ptr, i64, i64 }, align 16
%a587 = alloca { ptr, i64, i64 }, align 16
%a594 = alloca { ptr, i64, i64 }, align 16
%a595 = 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
%a614 = alloca { ptr, i64, i64 }, align 16
%a615 = alloca { ptr, i64, i64 }, align 16
%a616 = 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
%a624 = alloca { ptr, i64, i64 }, align 16
%a625 = alloca { ptr, i64, i64 }, align 16
%a626 = 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
%a640 = alloca { ptr, i64, i64 }, align 16
%a641 = alloca { ptr, i64, i64 }, align 16
%a642 = alloca { ptr, i64, i64 }, align 16
%a644 = alloca { ptr, i64, i64 }, align 16
%a645 = alloca { ptr, i64, i64 }, align 16
%a646 = 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
%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
%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
%a677 = 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
%a684 = alloca { ptr, i64, i64 }, align 16
%a685 = alloca { ptr, i64, i64 }, align 16
%a686 = 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
%a705 = alloca { ptr, i64, i64 }, align 16
%a706 = alloca { ptr, i64, i64 }, align 16
%a711 = alloca { ptr, i64, i64 }, align 16
%a712 = 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
%a730 = alloca { ptr, i64, i64 }, align 16
%a731 = alloca { ptr, i64, i64 }, align 16
%a732 = 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
%a740 = alloca { ptr, i64, i64 }, align 16
%a747 = alloca i64, align 16
%a758 = alloca { ptr, i64, i64 }, align 16
%a759 = alloca { ptr, i64, i64 }, align 16
%a760 = alloca { ptr, i64, i64 }, align 16
%a762 = alloca { ptr, i64, i64 }, align 16
%a763 = alloca { ptr, i64, i64 }, align 16
%a764 = 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
%a777 = alloca { ptr, i64, i64 }, align 16
%a778 = alloca { ptr, i64, i64 }, align 16
%a779 = 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
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 %range7829, label %inrange7830
range7829:
call void @finch_panic_index(ptr @.str.5194, i64 4647, i64 0, i64 %t5)
unreachable
inrange7830:
%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 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0
%t15 = load { ptr, i64, i64 }, ptr %t14
store { ptr, i64, i64 } %t15, ptr %a16
store { ptr, i64, i64 } { ptr @.str.5195, 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.from7831
logic.from7831:
br i1 %t19, label %logic.rhs7832, label %logic.end7833
logic.rhs7832:
%t20 = load ptr, ptr %a1
%t21 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 1
%t22 = load { ptr, i64, i64 }, ptr %t21
%t23 = call i64 @finch.gen.lookup(ptr %t20, { ptr, i64, i64 } %t22)
%t24 = icmp slt i64 %t23, 0
br label %logic.rend7834
logic.rend7834:
br label %logic.end7833
logic.end7833:
%t25 = phi i1 [ false, %logic.from7831 ], [ %t24, %logic.rend7834 ]
br i1 %t25, label %then7835, label %endif7837
then7835:
%t26 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 1
%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
store { ptr, i64, i64 } %t30, ptr %a31
%t32 = load ptr, ptr %a1
%t33 = load { ptr, i64, i64 }, ptr %a31
%t34 = call i1 @finch.gen.imports(ptr %t32, { ptr, i64, i64 } %t33)
%t35 = xor i1 %t34, true
br i1 %t35, label %then7838, label %endif7840
then7838:
%t36 = load ptr, ptr %a1
%t37 = load %S.ast.Node, ptr %a13
%t38 = load { ptr, i64, i64 }, ptr %a31
store { ptr, i64, i64 } { ptr @.str.5196, i64 38, i64 0 }, ptr %a40
store { ptr, i64, i64 } %t38, ptr %a41
call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41)
%t42 = load { ptr, i64, i64 }, ptr %a39
store { ptr, i64, i64 } %t42, ptr %a44
store { ptr, i64, i64 } { ptr @.str.5197, i64 32, i64 0 }, ptr %a45
call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45)
%t46 = load { ptr, i64, i64 }, ptr %a43
%t47 = load { ptr, i64, i64 }, ptr %a31
store { ptr, i64, i64 } %t46, 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.5198, i64 13, i64 0 }, ptr %a54
call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54)
%t55 = load { ptr, i64, i64 }, ptr %a52
call void @finch.gen.fail(ptr %t36, %S.ast.Node %t37, { ptr, i64, i64 } %t55)
br label %endif7840
endif7840:
%t56 = load ptr, ptr %a1
%t57 = load { ptr, i64, i64 }, ptr %a31
%t58 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t59 = load { ptr, i64, i64 }, ptr %t58
%t60 = call i64 @finch.gen.findFn(ptr %t56, { ptr, i64, i64 } %t57, { ptr, i64, i64 } %t59)
store i64 %t60, ptr %a61
%t62 = load i64, ptr %a61
%t63 = icmp sge i64 %t62, 0
br i1 %t63, label %then7841, label %endif7843
then7841:
%t64 = load ptr, ptr %a1
%t65 = load i64, ptr %a61
%t66 = load %S.ast.Node, ptr %a2
%t67 = load { ptr, i64, i64 }, ptr %a31
store { ptr, i64, i64 } %t67, ptr %a69
store { ptr, i64, i64 } { ptr @.str.5199, i64 1, i64 0 }, ptr %a70
call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70)
%t71 = load { ptr, i64, i64 }, ptr %a68
%t72 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t73 = load { ptr, i64, i64 }, 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)
%t77 = load { ptr, i64, i64 }, ptr %a74
%t78 = call %S.gen.Val @finch.gen.callFn(ptr %t64, i64 %t65, %S.ast.Node %t66, i64 1, { ptr, i64, i64 } %t77, { ptr, i64, i64 } { ptr @.str.5200, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.5201, i64 0, i64 0 })
ret %S.gen.Val %t78
endif7843:
%t79 = load ptr, ptr %a1
%t80 = load { ptr, i64, i64 }, ptr %a31
%t81 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t82 = load { ptr, i64, i64 }, ptr %t81
%t83 = call i64 @finch.gen.findTemplate(ptr %t79, { ptr, i64, i64 } %t80, { ptr, i64, i64 } %t82, { ptr, i64, i64 } { ptr @.str.5202, i64 0, i64 0 }, i1 false)
store i64 %t83, ptr %a84
%t85 = load i64, ptr %a84
%t86 = icmp sge i64 %t85, 0
br i1 %t86, label %then7844, label %endif7846
then7844:
%t87 = load ptr, ptr %a1
%t88 = load %S.ast.Node, ptr %a2
%t89 = load i64, ptr %a84
%t90 = load { ptr, i64, i64 }, ptr %a31
store { ptr, i64, i64 } %t90, ptr %a92
store { ptr, i64, i64 } { ptr @.str.5203, i64 1, i64 0 }, ptr %a93
call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93)
%t94 = load { ptr, i64, i64 }, ptr %a91
%t95 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t96 = load { ptr, i64, i64 }, ptr %t95
store { ptr, i64, i64 } %t94, 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 = call %S.gen.Val @finch.gen.genericCall(ptr %t87, %S.ast.Node %t88, i64 %t89, i64 1, { ptr, i64, i64 } %t100)
ret %S.gen.Val %t101
endif7846:
%t102 = load ptr, ptr %a1
%t103 = load { ptr, i64, i64 }, ptr %a31
%t104 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t105 = load { ptr, i64, i64 }, ptr %t104
%t106 = call i64 @finch.gen.findEnum(ptr %t102, { ptr, i64, i64 } %t103, { ptr, i64, i64 } %t105)
store i64 %t106, ptr %a107
%t108 = load i64, ptr %a107
%t109 = icmp sge i64 %t108, 0
br i1 %t109, label %then7847, label %endif7849
then7847:
%t110 = load ptr, ptr %a1
%t111 = load %S.ast.Node, ptr %a2
%t112 = load i64, ptr %a107
%t113 = call %S.gen.Val @finch.gen.enumFrom(ptr %t110, %S.ast.Node %t111, i64 %t112)
ret %S.gen.Val %t113
endif7849:
%t114 = load ptr, ptr %a1
%t115 = load { ptr, i64, i64 }, ptr %a31
%t116 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t117 = load { ptr, i64, i64 }, ptr %t116
%t118 = call i64 @finch.gen.findStruct(ptr %t114, { ptr, i64, i64 } %t115, { ptr, i64, i64 } %t117)
store i64 %t118, ptr %a119
%t120 = load i64, ptr %a119
%t121 = icmp sge i64 %t120, 0
br i1 %t121, label %then7850, label %endif7852
then7850:
store { ptr, i64, i64 } zeroinitializer, ptr %a122
%t123 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i32 0, i32 1
%t125 = load i64, ptr %t124
store i64 1, ptr %a126
br label %for.cond7853
for.cond7853:
%t127 = load i64, ptr %a126
%t128 = icmp slt i64 %t127, %t125
br i1 %t128, label %for.body7854, label %for.end7856
for.body7854:
%t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %a122, i32 0, i32 1
%t130 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t131 = load i64, ptr %a126
%t132 = load { ptr, i64, i64 }, ptr %t130
%t133 = extractvalue { ptr, i64, i64 } %t132, 1
%t134 = icmp uge i64 %t131, %t133
br i1 %t134, label %range7857, label %inrange7858
range7857:
call void @finch_panic_index(ptr @.str.5204, i64 4669, i64 %t131, i64 %t133)
unreachable
inrange7858:
%t135 = extractvalue { ptr, i64, i64 } %t132, 0
%t136 = getelementptr inbounds %S.ast.Node, ptr %t135, i64 %t131
%t137 = load %S.ast.Node, ptr %t136
store %S.ast.Node %t137, ptr %a138
call void @finch.copy.S_ast_Node(ptr %a139, ptr %a138)
%t140 = load %S.ast.Node, ptr %a139
%t141 = load i64, ptr %t129
%t142 = add i64 %t141, 1
call void @finch_arr_reserve(ptr %a122, i64 %t142, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64))
%t143 = load ptr, ptr %a122
%t144 = getelementptr inbounds %S.ast.Node, ptr %t143, i64 %t141
store %S.ast.Node %t140, ptr %t144
store i64 %t142, ptr %t129
br label %for.step7855
for.step7855:
%t145 = load i64, ptr %a126
%t146 = add i64 %t145, 1
store i64 %t146, ptr %a126
br label %for.cond7853
for.end7856:
%t147 = load ptr, ptr %a1
%t148 = load i64, ptr %a119
%t149 = load { ptr, i64, i64 }, ptr %a122
%t150 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10
%t151 = load { ptr, i64, i64 }, ptr %t150
%t152 = load %S.ast.Node, ptr %a2
%t153 = call %S.gen.Val @finch.gen.construct(ptr %t147, i64 %t148, { ptr, i64, i64 } %t149, { ptr, i64, i64 } %t151, %S.ast.Node %t152)
ret %S.gen.Val %t153
endif7852:
%t154 = load ptr, ptr %a1
%t155 = load %S.ast.Node, ptr %a2
%t156 = load { ptr, i64, i64 }, ptr %a31
store { ptr, i64, i64 } { ptr @.str.5205, i64 12, i64 0 }, ptr %a158
store { ptr, i64, i64 } %t156, ptr %a159
call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159)
%t160 = load { ptr, i64, i64 }, ptr %a157
store { ptr, i64, i64 } %t160, ptr %a162
store { ptr, i64, i64 } { ptr @.str.5206, i64 35, 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.ast.Node, ptr %a2, i32 0, i32 1
%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)
%t170 = load { ptr, i64, i64 }, ptr %a167
store { ptr, i64, i64 } %t170, ptr %a172
store { ptr, i64, i64 } { ptr @.str.5207, i64 1, i64 0 }, ptr %a173
call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173)
%t174 = load { ptr, i64, i64 }, ptr %a171
call void @finch.gen.fail(ptr %t154, %S.ast.Node %t155, { ptr, i64, i64 } %t174)
br label %endif7837
endif7837:
%t175 = mul i64 8, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)
%t176 = call ptr @finch_alloc(i64 %t175)
%t177 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 0
store { ptr, i64, i64 } { ptr @.str.5208, i64 4, i64 0 }, ptr %t177
%t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 1
store { ptr, i64, i64 } { ptr @.str.5209, i64 3, i64 0 }, ptr %t178
%t179 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 2
store { ptr, i64, i64 } { ptr @.str.5210, i64 6, i64 0 }, ptr %t179
%t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 3
store { ptr, i64, i64 } { ptr @.str.5211, i64 6, i64 0 }, ptr %t180
%t181 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 4
store { ptr, i64, i64 } { ptr @.str.5212, i64 5, i64 0 }, ptr %t181
%t182 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 5
store { ptr, i64, i64 } { ptr @.str.5213, i64 6, i64 0 }, ptr %t182
%t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 6
store { ptr, i64, i64 } { ptr @.str.5214, i64 4, i64 0 }, ptr %t183
%t184 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 7
store { ptr, i64, i64 } { ptr @.str.5215, i64 7, i64 0 }, ptr %t184
%t185 = insertvalue { ptr, i64, i64 } undef, ptr %t176, 0
%t186 = insertvalue { ptr, i64, i64 } %t185, i64 8, 1
%t187 = insertvalue { ptr, i64, i64 } %t186, i64 8, 2
store { ptr, i64, i64 } %t187, ptr %a188
%t189 = load ptr, ptr %a1
%t190 = load %S.ast.Node, ptr %a13
%t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %a188, i32 0, i32 1
%t192 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t193 = load { ptr, i64, i64 }, ptr %t192
store i64 -1, ptr %a194
%t195 = load i64, ptr %t191
%t196 = load ptr, ptr %a188
store i64 0, ptr %a197
br label %find.cond7859
find.cond7859:
%t198 = load i64, ptr %a197
%t199 = icmp slt i64 %t198, %t195
br i1 %t199, label %find.body7860, label %find.end7863
find.body7860:
%t200 = getelementptr inbounds { ptr, i64, i64 }, ptr %t196, i64 %t198
%t201 = load { ptr, i64, i64 }, ptr %t200
store { ptr, i64, i64 } %t201, ptr %a202
store { ptr, i64, i64 } %t193, ptr %a203
%t204 = call i32 @finch_str_eq(ptr %a202, ptr %a203)
%t205 = icmp ne i32 %t204, 0
br i1 %t205, label %find.hit7861, label %find.next7862
find.hit7861:
store i64 %t198, ptr %a194
br label %find.end7863
find.next7862:
%t206 = add i64 %t198, 1
store i64 %t206, ptr %a197
br label %find.cond7859
find.end7863:
%t207 = load i64, ptr %a194
%t208 = icmp sge i64 %t207, 0
%t209 = call %S.gen.Ref @finch.gen.ref(ptr %t189, %S.ast.Node %t190, i1 %t208)
store %S.gen.Ref %t209, ptr %a210
%t211 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 2
%t212 = getelementptr inbounds %S.gen.Val, ptr %t211, i32 0, i32 1
%t213 = load %S.ast.Type, ptr %t212
store %S.ast.Type %t213, ptr %a214
call void @finch.copy.S_ast_Type(ptr %a215, ptr %a214)
%t216 = load %S.ast.Type, ptr %a215
store %S.ast.Type %t216, ptr %a217
%t218 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 0
%t219 = load i1, ptr %t218
br i1 %t219, label %then7864, label %endif7866
then7864:
%t220 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 1
%t221 = getelementptr inbounds %S.gen.Place, ptr %t220, 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
store %S.ast.Type %t225, ptr %a217
br label %endif7866
endif7866:
%t226 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 0
%t227 = load { ptr, i64, i64 }, ptr %t226
store { ptr, i64, i64 } %t227, ptr %a228
store { ptr, i64, i64 } { ptr @.str.5216, i64 5, i64 0 }, ptr %a229
%t230 = call i32 @finch_str_eq(ptr %a228, ptr %a229)
%t231 = icmp ne i32 %t230, 0
br i1 %t231, label %then7867, label %endif7869
then7867:
store { ptr, i64, i64 } { ptr @.str.5217, i64 0, i64 0 }, ptr %a232
%t233 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 0
%t234 = load i1, ptr %t233
br i1 %t234, label %then7870, label %else7871
then7870:
%t235 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 1
%t236 = getelementptr inbounds %S.gen.Place, ptr %t235, i32 0, i32 0
%t237 = load { ptr, i64, i64 }, ptr %t236
store { ptr, i64, i64 } %t237, ptr %a238
call void @finch_str_copy(ptr %a239, ptr %a238)
%t240 = load { ptr, i64, i64 }, ptr %a239
store { ptr, i64, i64 } %t240, ptr %a232
br label %endif7872
else7871:
%t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %a188, 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 %a188
store i64 0, ptr %a247
br label %find.cond7873
find.cond7873:
%t248 = load i64, ptr %a247
%t249 = icmp slt i64 %t248, %t245
br i1 %t249, label %find.body7874, label %find.end7877
find.body7874:
%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.hit7875, label %find.next7876
find.hit7875:
store i64 %t248, ptr %a244
br label %find.end7877
find.next7876:
%t256 = add i64 %t248, 1
store i64 %t256, ptr %a247
br label %find.cond7873
find.end7877:
%t257 = load i64, ptr %a244
%t258 = icmp sge i64 %t257, 0
br i1 %t258, label %then7878, label %endif7880
then7878:
%t259 = load ptr, ptr %a1
%t260 = load %S.ast.Node, ptr %a2
%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 %a264
store { ptr, i64, i64 } { ptr @.str.5218, i64 63, i64 0 }, ptr %a265
call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265)
%t266 = load { ptr, i64, i64 }, ptr %a263
call void @finch.gen.fail(ptr %t259, %S.ast.Node %t260, { ptr, i64, i64 } %t266)
br label %endif7880
endif7880:
%t267 = load ptr, ptr %a1
%t268 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 2
%t269 = load %S.gen.Val, ptr %t268
%t270 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t267, %S.gen.Val %t269)
store { ptr, i64, i64 } %t270, ptr %a232
br label %endif7872
endif7872:
%t271 = load ptr, ptr %a1
%t272 = load %S.ast.Node, ptr %a2
%t273 = call { ptr, i64, i64 } @finch.docs.arrayMethods()
call void @finch.gen.noteMethod(ptr %t271, %S.ast.Node %t272, { ptr, i64, i64 } %t273)
%t274 = load ptr, ptr %a1
%t275 = load %S.ast.Node, ptr %a2
%t276 = load { ptr, i64, i64 }, ptr %a232
%t277 = load %S.ast.Type, ptr %a217
%t278 = call %S.gen.Val @finch.gen.arrayMethod(ptr %t274, %S.ast.Node %t275, { ptr, i64, i64 } %t276, %S.ast.Type %t277)
ret %S.gen.Val %t278
endif7869:
%t279 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 0
%t280 = load { ptr, i64, i64 }, ptr %t279
store { ptr, i64, i64 } %t280, ptr %a281
store { ptr, i64, i64 } { ptr @.str.5219, i64 3, i64 0 }, ptr %a282
%t283 = call i32 @finch_str_eq(ptr %a281, ptr %a282)
%t284 = icmp ne i32 %t283, 0
br i1 %t284, label %then7881, label %endif7883
then7881:
%t285 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 2
%t286 = load %S.gen.Val, ptr %t285
store %S.gen.Val %t286, ptr %a287
call void @finch.copy.S_gen_Val(ptr %a288, ptr %a287)
%t289 = load %S.gen.Val, ptr %a288
store %S.gen.Val %t289, ptr %a290
%t291 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 0
%t292 = load i1, ptr %t291
br i1 %t292, label %then7884, label %endif7886
then7884:
%t293 = load ptr, ptr %a1
%t294 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 1
%t295 = getelementptr inbounds %S.gen.Place, ptr %t294, i32 0, i32 0
%t296 = load { ptr, i64, i64 }, ptr %t295
%t297 = call { ptr, i64, i64 } @finch.gen.load(ptr %t293, { ptr, i64, i64 } { ptr @.str.5220, i64 17, i64 0 }, { ptr, i64, i64 } %t296)
%t298 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t297, 0
%t299 = load %S.ast.Type, ptr %a217
store %S.ast.Type %t299, ptr %a300
call void @finch.copy.S_ast_Type(ptr %a301, ptr %a300)
%t302 = load %S.ast.Type, ptr %a301
%t303 = insertvalue %S.gen.Val %t298, %S.ast.Type %t302, 1
store %S.gen.Val %t303, ptr %a290
br label %endif7886
endif7886:
%t304 = load ptr, ptr %a1
%t305 = load %S.ast.Node, ptr %a2
%t306 = call { ptr, i64, i64 } @finch.docs.strMethods()
call void @finch.gen.noteMethod(ptr %t304, %S.ast.Node %t305, { ptr, i64, i64 } %t306)
%t307 = load ptr, ptr %a1
%t308 = load %S.ast.Node, ptr %a2
%t309 = load ptr, ptr %a1
%t310 = load %S.gen.Val, ptr %a290
%t311 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t309, %S.gen.Val %t310)
%t312 = call %S.gen.Val @finch.gen.strMethod(ptr %t307, %S.ast.Node %t308, { ptr, i64, i64 } %t311)
ret %S.gen.Val %t312
endif7883:
%t313 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 0
%t314 = load { ptr, i64, i64 }, ptr %t313
store { ptr, i64, i64 } %t314, ptr %a315
store { ptr, i64, i64 } { ptr @.str.5221, i64 3, i64 0 }, ptr %a316
%t317 = call i32 @finch_str_eq(ptr %a315, ptr %a316)
%t318 = icmp ne i32 %t317, 0
br i1 %t318, label %then7887, label %endif7889
then7887:
store { ptr, i64, i64 } { ptr @.str.5222, i64 0, i64 0 }, ptr %a319
%t320 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 0
%t321 = load i1, ptr %t320
br i1 %t321, label %then7890, label %else7891
then7890:
%t322 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 1
%t323 = getelementptr inbounds %S.gen.Place, ptr %t322, i32 0, i32 0
%t324 = load { ptr, i64, i64 }, ptr %t323
store { ptr, i64, i64 } %t324, ptr %a325
call void @finch_str_copy(ptr %a326, ptr %a325)
%t327 = load { ptr, i64, i64 }, ptr %a326
store { ptr, i64, i64 } %t327, ptr %a319
br label %endif7892
else7891:
%t328 = getelementptr inbounds { ptr, i64, i64 }, ptr %a188, i32 0, i32 1
%t329 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t330 = load { ptr, i64, i64 }, ptr %t329
store i64 -1, ptr %a331
%t332 = load i64, ptr %t328
%t333 = load ptr, ptr %a188
store i64 0, ptr %a334
br label %find.cond7893
find.cond7893:
%t335 = load i64, ptr %a334
%t336 = icmp slt i64 %t335, %t332
br i1 %t336, label %find.body7894, label %find.end7897
find.body7894:
%t337 = getelementptr inbounds { ptr, i64, i64 }, ptr %t333, i64 %t335
%t338 = load { ptr, i64, i64 }, ptr %t337
store { ptr, i64, i64 } %t338, ptr %a339
store { ptr, i64, i64 } %t330, ptr %a340
%t341 = call i32 @finch_str_eq(ptr %a339, ptr %a340)
%t342 = icmp ne i32 %t341, 0
br i1 %t342, label %find.hit7895, label %find.next7896
find.hit7895:
store i64 %t335, ptr %a331
br label %find.end7897
find.next7896:
%t343 = add i64 %t335, 1
store i64 %t343, ptr %a334
br label %find.cond7893
find.end7897:
%t344 = load i64, ptr %a331
%t345 = icmp sge i64 %t344, 0
br i1 %t345, label %then7898, label %endif7900
then7898:
%t346 = load ptr, ptr %a1
%t347 = load %S.ast.Node, ptr %a2
%t348 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t349 = load { ptr, i64, i64 }, ptr %t348
store { ptr, i64, i64 } %t349, ptr %a351
store { ptr, i64, i64 } { ptr @.str.5223, i64 61, i64 0 }, ptr %a352
call void @finch_str_concat(ptr %a350, ptr %a351, ptr %a352)
%t353 = load { ptr, i64, i64 }, ptr %a350
call void @finch.gen.fail(ptr %t346, %S.ast.Node %t347, { ptr, i64, i64 } %t353)
br label %endif7900
endif7900:
%t354 = load ptr, ptr %a1
%t355 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 2
%t356 = load %S.gen.Val, ptr %t355
%t357 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t354, %S.gen.Val %t356)
store { ptr, i64, i64 } %t357, ptr %a319
br label %endif7892
endif7892:
%t358 = load ptr, ptr %a1
%t359 = load %S.ast.Node, ptr %a2
%t360 = call { ptr, i64, i64 } @finch.docs.mapMethods()
call void @finch.gen.noteMethod(ptr %t358, %S.ast.Node %t359, { ptr, i64, i64 } %t360)
%t361 = load ptr, ptr %a1
%t362 = load %S.ast.Node, ptr %a2
%t363 = load { ptr, i64, i64 }, ptr %a319
%t364 = load %S.ast.Type, ptr %a217
%t365 = call %S.gen.Val @finch.gen.mapMethod(ptr %t361, %S.ast.Node %t362, { ptr, i64, i64 } %t363, %S.ast.Type %t364)
ret %S.gen.Val %t365
endif7889:
%t366 = load %S.ast.Type, ptr %a217
store %S.ast.Type %t366, ptr %a367
call void @finch.copy.S_ast_Type(ptr %a368, ptr %a367)
%t369 = load %S.ast.Type, ptr %a368
store %S.ast.Type %t369, ptr %a370
store { ptr, i64, i64 } { ptr @.str.5224, i64 0, i64 0 }, ptr %a371
%t372 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 0
%t373 = load { ptr, i64, i64 }, ptr %t372
store { ptr, i64, i64 } %t373, ptr %a374
store { ptr, i64, i64 } { ptr @.str.5225, i64 3, i64 0 }, ptr %a375
%t376 = call i32 @finch_str_eq(ptr %a374, ptr %a375)
%t377 = icmp ne i32 %t376, 0
br label %logic.from7901
logic.from7901:
br i1 %t377, label %logic.rhs7902, label %logic.end7903
logic.rhs7902:
%t378 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 1
%t379 = getelementptr inbounds { ptr, i64, i64 }, ptr %t378, i32 0, i32 1
%t380 = load i64, ptr %t379
%t381 = icmp sgt i64 %t380, 0
br label %logic.rend7904
logic.rend7904:
br label %logic.end7903
logic.end7903:
%t382 = phi i1 [ false, %logic.from7901 ], [ %t381, %logic.rend7904 ]
br label %logic.from7905
logic.from7905:
br i1 %t382, label %logic.rhs7906, label %logic.end7907
logic.rhs7906:
%t383 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 1
%t384 = load { ptr, i64, i64 }, ptr %t383
%t385 = extractvalue { ptr, i64, i64 } %t384, 1
%t386 = icmp uge i64 0, %t385
br i1 %t386, label %range7908, label %inrange7909
range7908:
call void @finch_panic_index(ptr @.str.5226, i64 4717, i64 0, i64 %t385)
unreachable
inrange7909:
%t387 = extractvalue { ptr, i64, i64 } %t384, 0
%t388 = getelementptr inbounds %S.ast.Type, ptr %t387, i64 0
%t389 = getelementptr inbounds %S.ast.Type, ptr %t388, i32 0, i32 0
%t390 = load { ptr, i64, i64 }, ptr %t389
store { ptr, i64, i64 } %t390, ptr %a391
store { ptr, i64, i64 } { ptr @.str.5227, i64 6, i64 0 }, ptr %a392
%t393 = call i32 @finch_str_eq(ptr %a391, ptr %a392)
%t394 = icmp ne i32 %t393, 0
br label %logic.rend7910
logic.rend7910:
br label %logic.end7907
logic.end7907:
%t395 = phi i1 [ false, %logic.from7905 ], [ %t394, %logic.rend7910 ]
br i1 %t395, label %then7911, label %else7912
then7911:
%t396 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 2
%t397 = getelementptr inbounds %S.gen.Val, ptr %t396, i32 0, i32 0
%t398 = load { ptr, i64, i64 }, ptr %t397
store { ptr, i64, i64 } %t398, ptr %a399
call void @finch_str_copy(ptr %a400, ptr %a399)
%t401 = load { ptr, i64, i64 }, ptr %a400
store { ptr, i64, i64 } %t401, ptr %a402
%t403 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 0
%t404 = load i1, ptr %t403
br i1 %t404, label %then7914, label %endif7916
then7914:
%t405 = load ptr, ptr %a1
%t406 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 1
%t407 = getelementptr inbounds %S.gen.Place, ptr %t406, i32 0, i32 0
%t408 = load { ptr, i64, i64 }, ptr %t407
%t409 = call { ptr, i64, i64 } @finch.gen.load(ptr %t405, { ptr, i64, i64 } { ptr @.str.5228, i64 3, i64 0 }, { ptr, i64, i64 } %t408)
store { ptr, i64, i64 } %t409, ptr %a402
br label %endif7916
endif7916:
%t410 = load ptr, ptr %a1
%t411 = load ptr, ptr %a1
%t412 = load { ptr, i64, i64 }, ptr %a402
store { ptr, i64, i64 } { ptr @.str.5229, i64 12, i64 0 }, ptr %a414
store { ptr, i64, i64 } %t412, ptr %a415
call void @finch_str_concat(ptr %a413, ptr %a414, ptr %a415)
%t416 = load { ptr, i64, i64 }, ptr %a413
store { ptr, i64, i64 } %t416, ptr %a418
store { ptr, i64, i64 } { ptr @.str.5230, i64 6, i64 0 }, ptr %a419
call void @finch_str_concat(ptr %a417, ptr %a418, ptr %a419)
%t420 = load { ptr, i64, i64 }, ptr %a417
%t421 = call { ptr, i64, i64 } @finch.gen.op(ptr %t411, { ptr, i64, i64 } %t420)
%t422 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t423 = load { ptr, i64, i64 }, ptr %t422
store { ptr, i64, i64 } { ptr @.str.5231, i64 8, i64 0 }, ptr %a425
store { ptr, i64, i64 } %t423, ptr %a426
call void @finch_str_concat(ptr %a424, ptr %a425, ptr %a426)
%t427 = load { ptr, i64, i64 }, ptr %a424
store { ptr, i64, i64 } %t427, ptr %a429
store { ptr, i64, i64 } { ptr @.str.5232, i64 20, i64 0 }, ptr %a430
call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430)
%t431 = load { ptr, i64, i64 }, ptr %a428
%t432 = load %S.ast.Node, ptr %a2
call void @finch.gen.panicIf(ptr %t410, { ptr, i64, i64 } %t421, { ptr, i64, i64 } %t431, %S.ast.Node %t432)
%t433 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 1
%t434 = load { ptr, i64, i64 }, ptr %t433
%t435 = extractvalue { ptr, i64, i64 } %t434, 1
%t436 = icmp uge i64 0, %t435
br i1 %t436, label %range7917, label %inrange7918
range7917:
call void @finch_panic_index(ptr @.str.5233, i64 4723, i64 0, i64 %t435)
unreachable
inrange7918:
%t437 = extractvalue { ptr, i64, i64 } %t434, 0
%t438 = getelementptr inbounds %S.ast.Type, ptr %t437, i64 0
%t439 = load %S.ast.Type, ptr %t438
store %S.ast.Type %t439, ptr %a440
call void @finch.copy.S_ast_Type(ptr %a441, ptr %a440)
%t442 = load %S.ast.Type, ptr %a441
store %S.ast.Type %t442, ptr %a370
%t443 = load { ptr, i64, i64 }, ptr %a402
store { ptr, i64, i64 } %t443, ptr %a444
call void @finch_str_copy(ptr %a445, ptr %a444)
%t446 = load { ptr, i64, i64 }, ptr %a445
store { ptr, i64, i64 } %t446, ptr %a371
br label %endif7913
else7912:
%t447 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 0
%t448 = load { ptr, i64, i64 }, ptr %t447
store { ptr, i64, i64 } %t448, ptr %a449
store { ptr, i64, i64 } { ptr @.str.5234, i64 6, i64 0 }, ptr %a450
%t451 = call i32 @finch_str_eq(ptr %a449, ptr %a450)
%t452 = icmp ne i32 %t451, 0
br label %logic.from7919
logic.from7919:
br i1 %t452, label %logic.end7921, label %logic.rhs7920
logic.rhs7920:
%t453 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 0
%t454 = load { ptr, i64, i64 }, ptr %t453
store { ptr, i64, i64 } %t454, ptr %a455
store { ptr, i64, i64 } { ptr @.str.5235, i64 4, i64 0 }, ptr %a456
%t457 = call i32 @finch_str_eq(ptr %a455, ptr %a456)
%t458 = icmp ne i32 %t457, 0
br label %logic.rend7922
logic.rend7922:
br label %logic.end7921
logic.end7921:
%t459 = phi i1 [ true, %logic.from7919 ], [ %t458, %logic.rend7922 ]
br i1 %t459, label %then7923, label %endif7925
then7923:
%t460 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 0
%t461 = load i1, ptr %t460
br i1 %t461, label %then7926, label %else7927
then7926:
%t462 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 1
%t463 = getelementptr inbounds %S.gen.Place, ptr %t462, i32 0, i32 0
%t464 = load { ptr, i64, i64 }, ptr %t463
store { ptr, i64, i64 } %t464, ptr %a465
call void @finch_str_copy(ptr %a466, ptr %a465)
%t467 = load { ptr, i64, i64 }, ptr %a466
store { ptr, i64, i64 } %t467, ptr %a371
br label %endif7928
else7927:
%t468 = load ptr, ptr %a1
%t469 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 2
%t470 = load %S.gen.Val, ptr %t469
%t471 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t468, %S.gen.Val %t470)
store { ptr, i64, i64 } %t471, ptr %a371
br label %endif7928
endif7928:
br label %endif7925
endif7925:
br label %endif7913
endif7913:
%t472 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 0
%t473 = load { ptr, i64, i64 }, ptr %t472
store { ptr, i64, i64 } %t473, ptr %a474
store { ptr, i64, i64 } { ptr @.str.5236, i64 6, i64 0 }, ptr %a475
%t476 = call i32 @finch_str_eq(ptr %a474, ptr %a475)
%t477 = icmp ne i32 %t476, 0
br label %logic.from7929
logic.from7929:
br i1 %t477, label %logic.end7931, label %logic.rhs7930
logic.rhs7930:
%t478 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 0
%t479 = load { ptr, i64, i64 }, ptr %t478
store { ptr, i64, i64 } %t479, ptr %a480
store { ptr, i64, i64 } { ptr @.str.5237, i64 4, i64 0 }, ptr %a481
%t482 = call i32 @finch_str_eq(ptr %a480, ptr %a481)
%t483 = icmp ne i32 %t482, 0
br label %logic.rend7932
logic.rend7932:
br label %logic.end7931
logic.end7931:
%t484 = phi i1 [ true, %logic.from7929 ], [ %t483, %logic.rend7932 ]
br i1 %t484, label %then7933, label %endif7935
then7933:
%t485 = load ptr, ptr %a1
%t486 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 3
%t487 = load { ptr, i64, i64 }, ptr %t486
%t488 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 2
%t489 = load { ptr, i64, i64 }, ptr %t488
%t490 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t491 = load { ptr, i64, i64 }, ptr %t490
%t492 = call i64 @finch.gen.findMethod(ptr %t485, { ptr, i64, i64 } %t487, { ptr, i64, i64 } %t489, { ptr, i64, i64 } %t491)
store i64 %t492, ptr %a493
%t494 = load i64, ptr %a493
%t495 = icmp slt i64 %t494, 0
br label %logic.from7936
logic.from7936:
br i1 %t495, label %logic.rhs7937, label %logic.end7938
logic.rhs7937:
%t496 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 0
%t497 = load { ptr, i64, i64 }, ptr %t496
store { ptr, i64, i64 } %t497, ptr %a498
store { ptr, i64, i64 } { ptr @.str.5238, i64 6, i64 0 }, ptr %a499
%t500 = call i32 @finch_str_eq(ptr %a498, ptr %a499)
%t501 = icmp ne i32 %t500, 0
br label %logic.rend7939
logic.rend7939:
br label %logic.end7938
logic.end7938:
%t502 = phi i1 [ false, %logic.from7936 ], [ %t501, %logic.rend7939 ]
br i1 %t502, label %then7940, label %endif7942
then7940:
%t503 = load ptr, ptr %a1
%t504 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 3
%t505 = load { ptr, i64, i64 }, ptr %t504
%t506 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 2
%t507 = load { ptr, i64, i64 }, ptr %t506
%t508 = call i64 @finch.gen.findStruct(ptr %t503, { ptr, i64, i64 } %t505, { ptr, i64, i64 } %t507)
store i64 %t508, ptr %a509
%t510 = load ptr, ptr %a1
%t511 = icmp eq ptr %t510, null
br i1 %t511, label %panic7943, label %ok7944
panic7943:
call void @finch_panic(ptr @.str.5239, i64 4736, ptr @.str.5240)
unreachable
ok7944:
%t512 = getelementptr inbounds %S.gen.Gen, ptr %t510, i32 0, i32 15
%t513 = load i64, ptr %a509
%t514 = load { ptr, i64, i64 }, ptr %t512
%t515 = extractvalue { ptr, i64, i64 } %t514, 1
%t516 = icmp uge i64 %t513, %t515
br i1 %t516, label %range7945, label %inrange7946
range7945:
call void @finch_panic_index(ptr @.str.5241, i64 4736, i64 %t513, i64 %t515)
unreachable
inrange7946:
%t517 = extractvalue { ptr, i64, i64 } %t514, 0
%t518 = getelementptr inbounds %S.gen.StructDef, ptr %t517, i64 %t513
%t519 = getelementptr inbounds %S.gen.StructDef, ptr %t518, i32 0, i32 5
%t520 = getelementptr inbounds { ptr, i64, i64 }, ptr %t519, i32 0, i32 1
%t521 = load i64, ptr %t520
%t522 = icmp sgt i64 %t521, 0
br i1 %t522, label %then7947, label %endif7949
then7947:
%t523 = load ptr, ptr %a1
%t524 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 3
%t525 = load { ptr, i64, i64 }, ptr %t524
%t526 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t527 = load { ptr, i64, i64 }, ptr %t526
%t528 = load ptr, ptr %a1
%t529 = icmp eq ptr %t528, null
br i1 %t529, label %panic7950, label %ok7951
panic7950:
call void @finch_panic(ptr @.str.5242, i64 4737, ptr @.str.5243)
unreachable
ok7951:
%t530 = getelementptr inbounds %S.gen.Gen, ptr %t528, i32 0, i32 15
%t531 = load i64, ptr %a509
%t532 = load { ptr, i64, i64 }, ptr %t530
%t533 = extractvalue { ptr, i64, i64 } %t532, 1
%t534 = icmp uge i64 %t531, %t533
br i1 %t534, label %range7952, label %inrange7953
range7952:
call void @finch_panic_index(ptr @.str.5244, i64 4737, i64 %t531, i64 %t533)
unreachable
inrange7953:
%t535 = extractvalue { ptr, i64, i64 } %t532, 0
%t536 = getelementptr inbounds %S.gen.StructDef, ptr %t535, i64 %t531
%t537 = getelementptr inbounds %S.gen.StructDef, ptr %t536, i32 0, i32 5
%t538 = load { ptr, i64, i64 }, ptr %t537
%t539 = call i64 @finch.gen.findTemplate(ptr %t523, { ptr, i64, i64 } %t525, { ptr, i64, i64 } %t527, { ptr, i64, i64 } %t538, i1 false)
store i64 %t539, ptr %a540
%t541 = load i64, ptr %a540
%t542 = icmp sge i64 %t541, 0
br i1 %t542, label %then7954, label %endif7956
then7954:
%t543 = load ptr, ptr %a1
%t544 = load i64, ptr %a540
%t545 = load ptr, ptr %a1
%t546 = icmp eq ptr %t545, null
br i1 %t546, label %panic7957, label %ok7958
panic7957:
call void @finch_panic(ptr @.str.5245, i64 4739, ptr @.str.5246)
unreachable
ok7958:
%t547 = getelementptr inbounds %S.gen.Gen, ptr %t545, i32 0, i32 15
%t548 = load i64, ptr %a509
%t549 = load { ptr, i64, i64 }, ptr %t547
%t550 = extractvalue { ptr, i64, i64 } %t549, 1
%t551 = icmp uge i64 %t548, %t550
br i1 %t551, label %range7959, label %inrange7960
range7959:
call void @finch_panic_index(ptr @.str.5247, i64 4739, i64 %t548, i64 %t550)
unreachable
inrange7960:
%t552 = extractvalue { ptr, i64, i64 } %t549, 0
%t553 = getelementptr inbounds %S.gen.StructDef, ptr %t552, i64 %t548
%t554 = getelementptr inbounds %S.gen.StructDef, ptr %t553, i32 0, i32 7
%t555 = load { ptr, i64, i64 }, ptr %t554
%t556 = load %S.ast.Type, ptr %a370
%t557 = load %S.ast.Node, ptr %a2
%t558 = call i64 @finch.gen.instFn(ptr %t543, i64 %t544, { ptr, i64, i64 } %t555, %S.ast.Type %t556, %S.ast.Node %t557)
store i64 %t558, ptr %a493
br label %endif7956
endif7956:
br label %endif7949
endif7949:
br label %endif7942
endif7942:
%t559 = load i64, ptr %a493
%t560 = icmp slt i64 %t559, 0
br i1 %t560, label %then7961, label %endif7963
then7961:
store { ptr, i64, i64 } zeroinitializer, ptr %a561
%t562 = load ptr, ptr %a1
%t563 = icmp eq ptr %t562, null
br i1 %t563, label %panic7964, label %ok7965
panic7964:
call void @finch_panic(ptr @.str.5248, i64 4745, ptr @.str.5249)
unreachable
ok7965:
%t564 = getelementptr inbounds %S.gen.Gen, ptr %t562, i32 0, i32 14
store i64 0, ptr %a565
br label %each.cond7966
each.cond7966:
%t566 = getelementptr inbounds { ptr, i64, i64 }, ptr %t564, i32 0, i32 1
%t567 = load i64, ptr %t566
%t568 = load i64, ptr %a565
%t569 = icmp slt i64 %t568, %t567
br i1 %t569, label %each.body7967, label %each.end7969
each.body7967:
%t570 = load ptr, ptr %t564
%t571 = getelementptr inbounds %S.gen.FnSig, ptr %t570, i64 %t568
%t572 = load %S.gen.FnSig, ptr %t571
store %S.gen.FnSig %t572, ptr %a573
%t574 = getelementptr inbounds %S.gen.FnSig, ptr %a573, i32 0, i32 2
%t575 = load { ptr, i64, i64 }, ptr %t574
%t576 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 2
%t577 = load { ptr, i64, i64 }, ptr %t576
store { ptr, i64, i64 } %t575, ptr %a578
store { ptr, i64, i64 } %t577, ptr %a579
%t580 = call i32 @finch_str_eq(ptr %a578, ptr %a579)
%t581 = icmp ne i32 %t580, 0
br label %logic.from7970
logic.from7970:
br i1 %t581, label %logic.rhs7971, label %logic.end7972
logic.rhs7971:
%t582 = getelementptr inbounds %S.gen.FnSig, ptr %a573, i32 0, i32 3
%t583 = load { ptr, i64, i64 }, ptr %t582
%t584 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 3
%t585 = load { ptr, i64, i64 }, ptr %t584
store { ptr, i64, i64 } %t583, ptr %a586
store { ptr, i64, i64 } %t585, ptr %a587
%t588 = call i32 @finch_str_eq(ptr %a586, ptr %a587)
%t589 = icmp ne i32 %t588, 0
br label %logic.rend7973
logic.rend7973:
br label %logic.end7972
logic.end7972:
%t590 = phi i1 [ false, %logic.from7970 ], [ %t589, %logic.rend7973 ]
br i1 %t590, label %then7974, label %endif7976
then7974:
%t591 = getelementptr inbounds { ptr, i64, i64 }, ptr %a561, i32 0, i32 1
%t592 = getelementptr inbounds %S.gen.FnSig, ptr %a573, i32 0, i32 1
%t593 = load { ptr, i64, i64 }, ptr %t592
store { ptr, i64, i64 } %t593, ptr %a594
call void @finch_str_copy(ptr %a595, ptr %a594)
%t596 = load { ptr, i64, i64 }, ptr %a595
%t597 = load i64, ptr %t591
%t598 = add i64 %t597, 1
call void @finch_arr_reserve(ptr %a561, i64 %t598, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t599 = load ptr, ptr %a561
%t600 = getelementptr inbounds { ptr, i64, i64 }, ptr %t599, i64 %t597
store { ptr, i64, i64 } %t596, ptr %t600
store i64 %t598, ptr %t591
br label %endif7976
endif7976:
br label %each.step7968
each.step7968:
%t601 = load i64, ptr %a565
%t602 = add i64 %t601, 1
store i64 %t602, ptr %a565
br label %each.cond7966
each.end7969:
%t603 = getelementptr inbounds { ptr, i64, i64 }, ptr %a561, i32 0, i32 1
%t604 = load i64, ptr %t603
%t605 = icmp eq i64 %t604, 0
br i1 %t605, label %then7977, label %endif7979
then7977:
%t606 = load ptr, ptr %a1
%t607 = load %S.ast.Node, ptr %a2
%t608 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 0
%t609 = load { ptr, i64, i64 }, ptr %t608
store { ptr, i64, i64 } { ptr @.str.5250, i64 4, i64 0 }, ptr %a611
store { ptr, i64, i64 } %t609, ptr %a612
call void @finch_str_concat(ptr %a610, ptr %a611, ptr %a612)
%t613 = load { ptr, i64, i64 }, ptr %a610
store { ptr, i64, i64 } %t613, ptr %a615
store { ptr, i64, i64 } { ptr @.str.5251, i64 1, i64 0 }, ptr %a616
call void @finch_str_concat(ptr %a614, ptr %a615, ptr %a616)
%t617 = load { ptr, i64, i64 }, ptr %a614
%t618 = load %S.ast.Type, ptr %a370
%t619 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t618)
store { ptr, i64, i64 } %t617, ptr %a621
store { ptr, i64, i64 } %t619, ptr %a622
call void @finch_str_concat(ptr %a620, ptr %a621, ptr %a622)
%t623 = load { ptr, i64, i64 }, ptr %a620
store { ptr, i64, i64 } %t623, ptr %a625
store { ptr, i64, i64 } { ptr @.str.5252, i64 34, i64 0 }, ptr %a626
call void @finch_str_concat(ptr %a624, ptr %a625, ptr %a626)
%t627 = load { ptr, i64, i64 }, ptr %a624
%t628 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 2
%t629 = load { ptr, i64, i64 }, ptr %t628
store { ptr, i64, i64 } %t627, 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.5253, i64 1, i64 0 }, ptr %a636
call void @finch_str_concat(ptr %a634, ptr %a635, ptr %a636)
%t637 = load { ptr, i64, i64 }, ptr %a634
%t638 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t639 = load { ptr, i64, i64 }, ptr %t638
store { ptr, i64, i64 } %t637, ptr %a641
store { ptr, i64, i64 } %t639, ptr %a642
call void @finch_str_concat(ptr %a640, ptr %a641, ptr %a642)
%t643 = load { ptr, i64, i64 }, ptr %a640
store { ptr, i64, i64 } %t643, ptr %a645
store { ptr, i64, i64 } { ptr @.str.5254, i64 13, i64 0 }, ptr %a646
call void @finch_str_concat(ptr %a644, ptr %a645, ptr %a646)
%t647 = load { ptr, i64, i64 }, ptr %a644
call void @finch.gen.fail(ptr %t606, %S.ast.Node %t607, { ptr, i64, i64 } %t647)
br label %endif7979
endif7979:
%t648 = load ptr, ptr %a1
%t649 = load %S.ast.Node, ptr %a2
%t650 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 0
%t651 = load { ptr, i64, i64 }, ptr %t650
store { ptr, i64, i64 } { ptr @.str.5255, i64 4, i64 0 }, ptr %a653
store { ptr, i64, i64 } %t651, ptr %a654
call void @finch_str_concat(ptr %a652, ptr %a653, ptr %a654)
%t655 = load { ptr, i64, i64 }, ptr %a652
store { ptr, i64, i64 } %t655, ptr %a657
store { ptr, i64, i64 } { ptr @.str.5256, i64 1, i64 0 }, ptr %a658
call void @finch_str_concat(ptr %a656, ptr %a657, ptr %a658)
%t659 = load { ptr, i64, i64 }, ptr %a656
%t660 = load %S.ast.Type, ptr %a370
%t661 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t660)
store { ptr, i64, i64 } %t659, ptr %a663
store { ptr, i64, i64 } %t661, ptr %a664
call void @finch_str_concat(ptr %a662, ptr %a663, ptr %a664)
%t665 = load { ptr, i64, i64 }, ptr %a662
store { ptr, i64, i64 } %t665, ptr %a667
store { ptr, i64, i64 } { ptr @.str.5257, i64 16, i64 0 }, ptr %a668
call void @finch_str_concat(ptr %a666, ptr %a667, ptr %a668)
%t669 = load { ptr, i64, i64 }, ptr %a666
%t670 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t671 = load { ptr, i64, i64 }, ptr %t670
store { ptr, i64, i64 } %t669, ptr %a673
store { ptr, i64, i64 } %t671, ptr %a674
call void @finch_str_concat(ptr %a672, ptr %a673, ptr %a674)
%t675 = load { ptr, i64, i64 }, ptr %a672
store { ptr, i64, i64 } %t675, ptr %a677
store { ptr, i64, i64 } { ptr @.str.5258, i64 11, i64 0 }, ptr %a678
call void @finch_str_concat(ptr %a676, ptr %a677, ptr %a678)
%t679 = load { ptr, i64, i64 }, ptr %a676
%t680 = getelementptr inbounds { ptr, i64, i64 }, ptr %a561, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.5259, i64 2, i64 0 }, ptr %a681
call void @finch_str_join(ptr %a682, ptr %a561, ptr %a681)
%t683 = load { ptr, i64, i64 }, ptr %a682
store { ptr, i64, i64 } %t679, ptr %a685
store { ptr, i64, i64 } %t683, ptr %a686
call void @finch_str_concat(ptr %a684, ptr %a685, ptr %a686)
%t687 = load { ptr, i64, i64 }, ptr %a684
store { ptr, i64, i64 } %t687, ptr %a689
store { ptr, i64, i64 } { ptr @.str.5260, i64 1, i64 0 }, ptr %a690
call void @finch_str_concat(ptr %a688, ptr %a689, ptr %a690)
%t691 = load { ptr, i64, i64 }, ptr %a688
call void @finch.gen.fail(ptr %t648, %S.ast.Node %t649, { ptr, i64, i64 } %t691)
br label %endif7963
endif7963:
%t692 = load ptr, ptr %a1
%t693 = icmp eq ptr %t692, null
br i1 %t693, label %panic7980, label %ok7981
panic7980:
call void @finch_panic(ptr @.str.5261, i64 4756, ptr @.str.5262)
unreachable
ok7981:
%t694 = getelementptr inbounds %S.gen.Gen, ptr %t692, i32 0, i32 14
%t695 = load i64, ptr %a493
%t696 = load { ptr, i64, i64 }, ptr %t694
%t697 = extractvalue { ptr, i64, i64 } %t696, 1
%t698 = icmp uge i64 %t695, %t697
br i1 %t698, label %range7982, label %inrange7983
range7982:
call void @finch_panic_index(ptr @.str.5263, i64 4756, i64 %t695, i64 %t697)
unreachable
inrange7983:
%t699 = extractvalue { ptr, i64, i64 } %t696, 0
%t700 = getelementptr inbounds %S.gen.FnSig, ptr %t699, i64 %t695
%t701 = getelementptr inbounds %S.gen.FnSig, ptr %t700, i32 0, i32 10
%t702 = load i1, ptr %t701
br label %logic.from7984
logic.from7984:
br i1 %t702, label %logic.rhs7985, label %logic.end7986
logic.rhs7985:
%t703 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 0
%t704 = load { ptr, i64, i64 }, ptr %t703
store { ptr, i64, i64 } %t704, ptr %a705
store { ptr, i64, i64 } { ptr @.str.5264, i64 6, i64 0 }, ptr %a706
%t707 = call i32 @finch_str_eq(ptr %a705, ptr %a706)
%t708 = icmp ne i32 %t707, 0
br label %logic.from7987
logic.from7987:
br i1 %t708, label %logic.end7989, label %logic.rhs7988
logic.rhs7988:
%t709 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 0
%t710 = load { ptr, i64, i64 }, ptr %t709
store { ptr, i64, i64 } %t710, ptr %a711
store { ptr, i64, i64 } { ptr @.str.5265, i64 4, i64 0 }, ptr %a712
%t713 = call i32 @finch_str_eq(ptr %a711, ptr %a712)
%t714 = icmp ne i32 %t713, 0
br label %logic.rend7990
logic.rend7990:
br label %logic.end7989
logic.end7989:
%t715 = phi i1 [ true, %logic.from7987 ], [ %t714, %logic.rend7990 ]
br label %logic.rend7991
logic.rend7991:
br label %logic.end7986
logic.end7986:
%t716 = phi i1 [ false, %logic.from7984 ], [ %t715, %logic.rend7991 ]
br i1 %t716, label %then7992, label %endif7994
then7992:
%t717 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 0
%t718 = load i1, ptr %t717
%t719 = xor i1 %t718, true
br i1 %t719, label %then7995, label %endif7997
then7995:
%t720 = load ptr, ptr %a1
%t721 = load %S.ast.Node, ptr %a2
%t722 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t723 = load { ptr, i64, i64 }, ptr %t722
store { ptr, i64, i64 } %t723, ptr %a725
store { ptr, i64, i64 } { ptr @.str.5266, i64 28, i64 0 }, ptr %a726
call void @finch_str_concat(ptr %a724, ptr %a725, ptr %a726)
%t727 = load { ptr, i64, i64 }, ptr %a724
%t728 = load %S.ast.Type, ptr %a370
%t729 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t728)
store { ptr, i64, i64 } %t727, ptr %a731
store { ptr, i64, i64 } %t729, ptr %a732
call void @finch_str_concat(ptr %a730, ptr %a731, ptr %a732)
%t733 = load { ptr, i64, i64 }, ptr %a730
store { ptr, i64, i64 } %t733, ptr %a735
store { ptr, i64, i64 } { ptr @.str.5267, i64 30, i64 0 }, ptr %a736
call void @finch_str_concat(ptr %a734, ptr %a735, ptr %a736)
%t737 = load { ptr, i64, i64 }, ptr %a734
call void @finch.gen.fail(ptr %t720, %S.ast.Node %t721, { ptr, i64, i64 } %t737)
br label %endif7997
endif7997:
%t738 = load %S.ast.Node, ptr %a13
%t739 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t738)
store { ptr, i64, i64 } %t739, ptr %a740
%t741 = getelementptr inbounds { ptr, i64, i64 }, ptr %a740, i32 0, i32 1
%t742 = load i64, ptr %t741
%t743 = icmp sgt i64 %t742, 0
br i1 %t743, label %then7998, label %endif8000
then7998:
%t744 = load ptr, ptr %a1
%t745 = load { ptr, i64, i64 }, ptr %a740
%t746 = call i64 @finch.gen.lookup(ptr %t744, { ptr, i64, i64 } %t745)
store i64 %t746, ptr %a747
%t748 = load i64, ptr %a747
%t749 = icmp sge i64 %t748, 0
br label %logic.from8001
logic.from8001:
br i1 %t749, label %logic.rhs8002, label %logic.end8003
logic.rhs8002:
%t750 = load ptr, ptr %a1
%t751 = load i64, ptr %a747
%t752 = call %S.gen.Var @finch.gen.varAt(ptr %t750, i64 %t751)
%t753 = extractvalue %S.gen.Var %t752, 3
br label %logic.rend8004
logic.rend8004:
br label %logic.end8003
logic.end8003:
%t754 = phi i1 [ false, %logic.from8001 ], [ %t753, %logic.rend8004 ]
br i1 %t754, label %then8005, label %endif8007
then8005:
%t755 = load ptr, ptr %a1
%t756 = load %S.ast.Node, ptr %a2
%t757 = load { ptr, i64, i64 }, ptr %a740
store { ptr, i64, i64 } { ptr @.str.5268, i64 19, i64 0 }, ptr %a759
store { ptr, i64, i64 } %t757, ptr %a760
call void @finch_str_concat(ptr %a758, ptr %a759, ptr %a760)
%t761 = load { ptr, i64, i64 }, ptr %a758
store { ptr, i64, i64 } %t761, ptr %a763
store { ptr, i64, i64 } { ptr @.str.5269, i64 18, i64 0 }, ptr %a764
call void @finch_str_concat(ptr %a762, ptr %a763, ptr %a764)
%t765 = load { ptr, i64, i64 }, ptr %a762
call void @finch.gen.fail(ptr %t755, %S.ast.Node %t756, { ptr, i64, i64 } %t765)
br label %endif8007
endif8007:
br label %endif8000
endif8000:
br label %endif7994
endif7994:
%t766 = load ptr, ptr %a1
%t767 = load i64, ptr %a493
%t768 = load %S.ast.Node, ptr %a2
%t769 = load %S.ast.Type, ptr %a370
%t770 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t769)
store { ptr, i64, i64 } %t770, ptr %a772
store { ptr, i64, i64 } { ptr @.str.5270, i64 1, i64 0 }, ptr %a773
call void @finch_str_concat(ptr %a771, ptr %a772, ptr %a773)
%t774 = load { ptr, i64, i64 }, ptr %a771
%t775 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1
%t776 = load { ptr, i64, i64 }, ptr %t775
store { ptr, i64, i64 } %t774, ptr %a778
store { ptr, i64, i64 } %t776, ptr %a779
call void @finch_str_concat(ptr %a777, ptr %a778, ptr %a779)
%t780 = load { ptr, i64, i64 }, ptr %a777
%t781 = load { ptr, i64, i64 }, ptr %a371
%t782 = load %S.ast.Node, ptr %a13
%t783 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t782)
%t784 = call %S.gen.Val @finch.gen.callFn(ptr %t766, i64 %t767, %S.ast.Node %t768, i64 1, { ptr, i64, i64 } %t780, { ptr, i64, i64 } %t781, { ptr, i64, i64 } %t783)
ret %S.gen.Val %t784
endif7935:
%t785 = load ptr, ptr %a1
%t786 = load %S.ast.Node, ptr %a2
%t787 = load %S.ast.Type, ptr %a217
%t788 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t787)
store { ptr, i64, i64 } %t788, ptr %a790
store { ptr, i64, i64 } { ptr @.str.5271, i64 15, i64 0 }, ptr %a791
call void @finch_str_concat(ptr %a789, ptr %a790, ptr %a791)
%t792 = load { ptr, i64, i64 }, ptr %a789
call void @finch.gen.fail(ptr %t785, %S.ast.Node %t786, { ptr, i64, i64 } %t792)
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
%a37 = alloca { ptr, i64, i64 }, align 16
%a39 = alloca { ptr, i64, i64 }, align 16
%a40 = alloca { ptr, i64, i64 }, align 16
%a67 = 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
%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
%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
%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
%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
%a117 = 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
%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
%a141 = alloca { ptr, i64, i64 }, align 16
%a142 = alloca { ptr, i64, i64 }, align 16
%a143 = alloca { ptr, i64, i64 }, align 16
%a152 = alloca { ptr, i64, i64 }, align 16
%a153 = 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
%a169 = alloca { ptr, i64, i64 }, 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
%a179 = 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
%a190 = 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
%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
%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
%a224 = alloca { ptr, i64, i64 }, align 16
%a225 = alloca { ptr, i64, i64 }, align 16
%a229 = alloca %S.ast.Type, align 16
%a230 = alloca %S.ast.Type, align 16
%a238 = alloca { ptr, i64, i64 }, align 16
%a239 = alloca { ptr, i64, i64 }, align 16
%a249 = alloca { ptr, i64, i64 }, align 16
%a250 = alloca { ptr, i64, i64 }, align 16
%a254 = alloca { ptr, i64, i64 }, align 16
%a255 = alloca { ptr, i64, i64 }, align 16
%a281 = alloca %S.gen.Val, align 16
%a284 = alloca { ptr, i64, i64 }, align 16
%a290 = alloca { ptr, i64, i64 }, align 16
%a294 = alloca { ptr, i64, i64 }, align 16
%a297 = 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
%a311 = alloca { ptr, i64, i64 }, align 16
%a314 = 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
%a329 = alloca { ptr, i64, i64 }, align 16
%a330 = alloca { ptr, i64, i64 }, align 16
%a331 = 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
%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
%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
%a368 = alloca { ptr, i64, i64 }, align 16
%a369 = alloca { ptr, i64, i64 }, align 16
%a370 = alloca { ptr, i64, i64 }, align 16
%a376 = alloca %S.ast.Type, align 16
%a377 = alloca %S.ast.Type, align 16
%a380 = alloca %S.gen.Val, align 16
%a387 = alloca { ptr, i64, i64 }, align 16
%a388 = alloca { ptr, i64, i64 }, align 16
%a390 = 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
%a424 = alloca { ptr, i64, i64 }, align 16
%a426 = alloca { ptr, i64, i64 }, align 16
%a427 = alloca { ptr, i64, i64 }, align 16
%a431 = alloca { ptr, i64, i64 }, align 16
%a432 = 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
%a443 = alloca { ptr, i64, i64 }, align 16
%a444 = alloca { ptr, i64, i64 }, align 16
%a445 = alloca { ptr, i64, i64 }, align 16
%a452 = alloca { ptr, i64, i64 }, align 16
%a453 = alloca { ptr, i64, i64 }, align 16
%a460 = alloca { ptr, i64, i64 }, align 16
%a461 = alloca { ptr, i64, i64 }, align 16
%a477 = alloca { ptr, i64, i64 }, align 16
%a480 = alloca { ptr, i64, i64 }, align 16
%a483 = alloca { ptr, i64, i64 }, align 16
%a484 = 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
%a492 = alloca { ptr, i64, i64 }, align 16
%a493 = alloca { ptr, i64, i64 }, align 16
%a494 = 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
%a501 = alloca { ptr, i64, i64 }, align 16
%a502 = alloca { ptr, i64, i64 }, align 16
%a503 = 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
%a517 = alloca { ptr, i64, i64 }, align 16
%a518 = alloca { ptr, i64, i64 }, align 16
%a543 = alloca { ptr, i64, i64 }, align 16
%a544 = alloca { ptr, i64, i64 }, align 16
%a546 = alloca { ptr, i64, i64 }, align 16
%a569 = alloca { ptr, i64, i64 }, align 16
%a583 = 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
%a590 = alloca { ptr, i64, i64 }, align 16
%a591 = alloca { ptr, i64, i64 }, align 16
%a592 = 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
%a606 = alloca { ptr, i64, i64 }, align 16
%a607 = alloca { ptr, i64, i64 }, align 16
%a608 = 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
%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
%a625 = 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
%a631 = alloca { ptr, i64, i64 }, align 16
%a632 = alloca { ptr, i64, i64 }, align 16
%a633 = alloca { ptr, i64, i64 }, align 16
%a638 = alloca { ptr, i64, i64 }, align 16
%a644 = alloca { ptr, i64, i64 }, align 16
%a645 = alloca { ptr, i64, i64 }, align 16
%a646 = 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
%a653 = alloca { ptr, i64, i64 }, align 16
%a654 = 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
%a659 = 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
%a670 = alloca { ptr, i64, i64 }, align 16
%a671 = alloca { ptr, i64, i64 }, align 16
%a696 = alloca { ptr, i64, i64 }, align 16
%a697 = alloca { ptr, i64, i64 }, align 16
%a699 = alloca { ptr, i64, i64 }, align 16
%a709 = 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
%a718 = alloca { ptr, i64, i64 }, align 16
%a719 = alloca { ptr, i64, i64 }, align 16
%a720 = 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
%a727 = alloca { ptr, i64, i64 }, align 16
%a728 = alloca { ptr, i64, i64 }, align 16
%a729 = 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
%a738 = 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
%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
%a761 = alloca { ptr, i64, i64 }, align 16
%a762 = alloca { ptr, i64, i64 }, align 16
%a763 = 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
%a770 = alloca { ptr, i64, i64 }, align 16
%a771 = alloca { ptr, i64, i64 }, align 16
%a775 = alloca %S.ast.Type, align 16
%a776 = alloca %S.ast.Type, align 16
%a784 = alloca { ptr, i64, i64 }, align 16
%a785 = alloca { ptr, i64, i64 }, align 16
%a810 = alloca { ptr, i64, i64 }, align 16
%a811 = alloca { ptr, i64, i64 }, align 16
%a813 = 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
%a820 = alloca { ptr, i64, i64 }, align 16
%a821 = alloca { ptr, i64, i64 }, align 16
%a822 = 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
%a836 = alloca { ptr, i64, i64 }, align 16
%a837 = alloca { ptr, i64, i64 }, align 16
%a838 = alloca { ptr, i64, i64 }, align 16
%a840 = alloca { ptr, i64, i64 }, align 16
%a841 = alloca { ptr, i64, i64 }, align 16
%a842 = alloca { ptr, i64, i64 }, align 16
%a847 = alloca { ptr, i64, i64 }, align 16
%a848 = alloca { ptr, i64, i64 }, align 16
%a856 = alloca { ptr, i64, i64 }, align 16
%a860 = 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
%a867 = alloca { ptr, i64, i64 }, align 16
%a868 = alloca { ptr, i64, i64 }, align 16
%a869 = alloca { ptr, i64, i64 }, align 16
%a872 = alloca { ptr, i64, i64 }, align 16
%a876 = 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
%a883 = alloca { ptr, i64, i64 }, align 16
%a884 = alloca { ptr, i64, i64 }, align 16
%a885 = 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
%a892 = alloca { ptr, i64, i64 }, align 16
%a893 = alloca { ptr, i64, i64 }, align 16
%a894 = 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
%a907 = 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
%a916 = alloca { ptr, i64, i64 }, align 16
%a917 = 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
%a924 = alloca { ptr, i64, i64 }, align 16
%a925 = alloca { ptr, i64, i64 }, align 16
%a926 = alloca { ptr, i64, i64 }, align 16
%a934 = alloca { ptr, i64, i64 }, align 16
%a935 = alloca { ptr, i64, i64 }, align 16
%a936 = alloca { ptr, i64, i64 }, align 16
%a939 = 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
%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
%a955 = alloca { ptr, i64, i64 }, align 16
%a956 = alloca { ptr, i64, i64 }, align 16
%a957 = 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
%a970 = alloca { ptr, i64, i64 }, align 16
%a975 = alloca { ptr, i64, i64 }, align 16
%a989 = alloca { ptr, i64, i64 }, align 16
%a990 = alloca { ptr, i64, i64 }, align 16
%a1015 = alloca { ptr, i64, i64 }, align 16
%a1016 = alloca { ptr, i64, i64 }, align 16
%a1018 = alloca { ptr, i64, i64 }, align 16
%a1039 = alloca { ptr, i64, i64 }, align 16
%a1040 = alloca { ptr, i64, i64 }, align 16
%a1042 = alloca { ptr, i64, i64 }, align 16
%a1046 = 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
%a1058 = 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
%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
%a1072 = 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
%a1080 = 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
%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
%a1097 = alloca { ptr, i64, i64 }, align 16
%a1098 = alloca { ptr, i64, i64 }, align 16
%a1099 = alloca { ptr, i64, i64 }, align 16
%a1101 = alloca { ptr, i64, i64 }, align 16
%a1102 = alloca { ptr, i64, i64 }, align 16
%a1103 = 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
%a1111 = alloca { ptr, i64, i64 }, align 16
%a1112 = alloca { ptr, i64, i64 }, align 16
%a1113 = alloca { ptr, i64, i64 }, align 16
%a1115 = alloca { ptr, i64, i64 }, align 16
%a1116 = alloca { ptr, i64, i64 }, align 16
%a1117 = alloca { ptr, i64, i64 }, align 16
%a1120 = alloca { ptr, i64, i64 }, align 16
%a1121 = alloca { ptr, i64, i64 }, align 16
%a1122 = alloca { ptr, i64, i64 }, 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
%a1137 = alloca { ptr, i64, i64 }, align 16
%a1138 = alloca { ptr, i64, i64 }, align 16
%a1139 = alloca { ptr, i64, i64 }, align 16
%a1142 = alloca { ptr, i64, i64 }, align 16
%a1145 = alloca { ptr, i64, i64 }, align 16
%a1148 = alloca { ptr, i64, i64 }, align 16
%a1149 = alloca { ptr, i64, i64 }, align 16
%a1150 = alloca { ptr, i64, i64 }, align 16
%a1152 = alloca { ptr, i64, i64 }, align 16
%a1153 = alloca { ptr, i64, i64 }, align 16
%a1154 = alloca { ptr, i64, i64 }, align 16
%a1157 = alloca { ptr, i64, i64 }, align 16
%a1158 = alloca { ptr, i64, i64 }, align 16
%a1159 = alloca { ptr, i64, i64 }, align 16
%a1161 = alloca { ptr, i64, i64 }, align 16
%a1162 = alloca { ptr, i64, i64 }, align 16
%a1163 = alloca { ptr, i64, i64 }, align 16
%a1168 = alloca { ptr, i64, i64 }, align 16
%a1169 = alloca { ptr, i64, i64 }, align 16
%a1170 = alloca { ptr, i64, i64 }, align 16
%a1172 = alloca { ptr, i64, i64 }, align 16
%a1173 = alloca { ptr, i64, i64 }, align 16
%a1174 = alloca { ptr, i64, i64 }, align 16
%a1179 = alloca { ptr, i64, i64 }, align 16
%a1183 = alloca { ptr, i64, i64 }, align 16
%a1187 = alloca { ptr, i64, i64 }, align 16
%a1190 = alloca { ptr, i64, i64 }, align 16
%a1191 = alloca { ptr, i64, i64 }, align 16
%a1192 = alloca { ptr, i64, i64 }, align 16
%a1194 = alloca { ptr, i64, i64 }, align 16
%a1195 = alloca { ptr, i64, i64 }, align 16
%a1196 = alloca { ptr, i64, i64 }, align 16
%a1199 = alloca { ptr, i64, i64 }, align 16
%a1200 = alloca { ptr, i64, i64 }, align 16
%a1201 = alloca { ptr, i64, i64 }, align 16
%a1203 = alloca { ptr, i64, i64 }, align 16
%a1204 = alloca { ptr, i64, i64 }, align 16
%a1205 = alloca { ptr, i64, i64 }, align 16
%a1213 = alloca { ptr, i64, i64 }, align 16
%a1214 = alloca { ptr, i64, i64 }, align 16
%a1215 = alloca { ptr, i64, i64 }, align 16
%a1218 = alloca { ptr, i64, i64 }, align 16
%a1221 = alloca { ptr, i64, i64 }, align 16
%a1222 = alloca { ptr, i64, i64 }, align 16
%a1223 = 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
%a1232 = 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
%a1240 = alloca { ptr, i64, i64 }, align 16
%a1241 = alloca { ptr, i64, i64 }, align 16
%a1242 = 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
%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
%a1261 = alloca { ptr, i64, i64 }, align 16
%a1264 = alloca { ptr, i64, i64 }, align 16
%a1276 = alloca %S.ast.Type, align 16
%a1277 = alloca %S.ast.Type, align 16
%a1282 = alloca { ptr, i64, i64 }, align 16
%a1283 = alloca { ptr, i64, i64 }, align 16
%a1290 = alloca { ptr, i64, i64 }, align 16
%a1291 = alloca { ptr, i64, i64 }, align 16
%a1293 = alloca { ptr, i64, i64 }, align 16
%a1298 = alloca { ptr, i64, i64 }, align 16
%a1299 = alloca { ptr, i64, i64 }, align 16
%a1304 = alloca { ptr, i64, i64 }, align 16
%a1305 = alloca { ptr, i64, i64 }, align 16
%a1314 = alloca { ptr, i64, i64 }, align 16
%a1318 = alloca { ptr, i64, i64 }, align 16
%a1322 = alloca { ptr, i64, i64 }, align 16
%a1325 = alloca { ptr, i64, i64 }, align 16
%a1326 = alloca { ptr, i64, i64 }, align 16
%a1327 = 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
%a1334 = alloca { ptr, i64, i64 }, align 16
%a1335 = alloca { ptr, i64, i64 }, align 16
%a1336 = alloca { ptr, i64, i64 }, align 16
%a1338 = alloca { ptr, i64, i64 }, align 16
%a1339 = alloca { ptr, i64, i64 }, align 16
%a1340 = alloca { ptr, i64, i64 }, align 16
%a1345 = alloca { ptr, i64, i64 }, align 16
%a1346 = alloca { ptr, i64, i64 }, align 16
%a1347 = alloca { ptr, i64, i64 }, align 16
%a1349 = alloca { ptr, i64, i64 }, align 16
%a1350 = alloca { ptr, i64, i64 }, align 16
%a1351 = alloca { ptr, i64, i64 }, align 16
%a1354 = alloca { ptr, i64, i64 }, align 16
%a1355 = alloca { ptr, i64, i64 }, align 16
%a1356 = alloca { ptr, i64, i64 }, align 16
%a1358 = alloca { ptr, i64, i64 }, align 16
%a1359 = alloca { ptr, i64, i64 }, align 16
%a1360 = 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
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 %range8008, label %inrange8009
range8008:
call void @finch_panic_index(ptr @.str.5272, i64 4779, i64 0, i64 %t7)
unreachable
inrange8009:
%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.5273, 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.5274, i64 14, i64 0 }, ptr %a34
call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34)
%t35 = load { ptr, i64, i64 }, ptr %a32
%t36 = call { ptr, i64, i64 } @finch.gen.op(ptr %t26, { ptr, i64, i64 } %t35)
store { ptr, i64, i64 } %t36, ptr %a37
%t38 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } %t38, ptr %a39
store { ptr, i64, i64 } { ptr @.str.5275, i64 4, i64 0 }, ptr %a40
%t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40)
%t42 = icmp ne i32 %t41, 0
br i1 %t42, label %then8010, label %endif8012
then8010:
%t43 = load ptr, ptr %a1
%t44 = load %S.ast.Node, ptr %a2
call void @finch.gen.need(ptr %t43, %S.ast.Node %t44, i64 1)
%t45 = load ptr, ptr %a1
%t46 = load ptr, ptr %a1
%t47 = load ptr, ptr %a1
%t48 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t49 = load { ptr, i64, i64 }, ptr %t48
%t50 = extractvalue { ptr, i64, i64 } %t49, 1
%t51 = icmp uge i64 1, %t50
br i1 %t51, label %range8013, label %inrange8014
range8013:
call void @finch_panic_index(ptr @.str.5276, i64 4785, i64 1, i64 %t50)
unreachable
inrange8014:
%t52 = extractvalue { ptr, i64, i64 } %t49, 0
%t53 = getelementptr inbounds %S.ast.Node, ptr %t52, i64 1
%t54 = load %S.ast.Node, ptr %t53
%t55 = load %S.ast.Type, ptr %a15
%t56 = call %S.gen.Val @finch.gen.exprWant(ptr %t47, %S.ast.Node %t54, %S.ast.Type %t55)
%t57 = load %S.ast.Type, ptr %a15
%t58 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t59 = load { ptr, i64, i64 }, ptr %t58
%t60 = extractvalue { ptr, i64, i64 } %t59, 1
%t61 = icmp uge i64 1, %t60
br i1 %t61, label %range8015, label %inrange8016
range8015:
call void @finch_panic_index(ptr @.str.5277, i64 4785, i64 1, i64 %t60)
unreachable
inrange8016:
%t62 = extractvalue { ptr, i64, i64 } %t59, 0
%t63 = getelementptr inbounds %S.ast.Node, ptr %t62, i64 1
%t64 = load %S.ast.Node, ptr %t63
%t65 = call %S.gen.Val @finch.gen.coerce(ptr %t46, %S.gen.Val %t56, %S.ast.Type %t57, %S.ast.Node %t64, { ptr, i64, i64 } { ptr @.str.5278, i64 11, i64 0 })
%t66 = call { ptr, i64, i64 } @finch.gen.own(ptr %t45, %S.gen.Val %t65)
store { ptr, i64, i64 } %t66, ptr %a67
%t68 = load ptr, ptr %a1
%t69 = load { ptr, i64, i64 }, ptr %a37
%t70 = call { ptr, i64, i64 } @finch.gen.load(ptr %t68, { ptr, i64, i64 } { ptr @.str.5279, i64 3, i64 0 }, { ptr, i64, i64 } %t69)
store { ptr, i64, i64 } %t70, ptr %a71
%t72 = load ptr, ptr %a1
%t73 = load { ptr, i64, i64 }, ptr %a71
store { ptr, i64, i64 } { ptr @.str.5280, i64 8, i64 0 }, ptr %a75
store { ptr, i64, i64 } %t73, ptr %a76
call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76)
%t77 = load { ptr, i64, i64 }, ptr %a74
store { ptr, i64, i64 } %t77, ptr %a79
store { ptr, i64, i64 } { ptr @.str.5281, i64 3, i64 0 }, ptr %a80
call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80)
%t81 = load { ptr, i64, i64 }, ptr %a78
%t82 = call { ptr, i64, i64 } @finch.gen.op(ptr %t72, { ptr, i64, i64 } %t81)
store { ptr, i64, i64 } %t82, ptr %a83
%t84 = load ptr, ptr %a1
%t85 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } { ptr @.str.5282, i64 33, 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.5283, i64 6, i64 0 }, ptr %a92
call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92)
%t93 = load { ptr, i64, i64 }, ptr %a90
%t94 = load { ptr, i64, i64 }, ptr %a83
store { ptr, i64, i64 } %t93, ptr %a96
store { ptr, i64, i64 } %t94, ptr %a97
call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97)
%t98 = load { ptr, i64, i64 }, ptr %a95
store { ptr, i64, i64 } %t98, ptr %a100
store { ptr, i64, i64 } { ptr @.str.5284, i64 6, 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 = load %S.ast.Type, ptr %a15
%t105 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t103, %S.ast.Type %t104)
store { ptr, i64, i64 } %t102, ptr %a107
store { ptr, i64, i64 } %t105, ptr %a108
call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108)
%t109 = load { ptr, i64, i64 }, ptr %a106
store { ptr, i64, i64 } %t109, ptr %a111
store { ptr, i64, i64 } { ptr @.str.5285, i64 1, i64 0 }, ptr %a112
call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112)
%t113 = load { ptr, i64, i64 }, ptr %a110
call void @finch.gen.emit(ptr %t84, { ptr, i64, i64 } %t113)
%t114 = load ptr, ptr %a1
%t115 = load { ptr, i64, i64 }, ptr %a3
%t116 = call { ptr, i64, i64 } @finch.gen.load(ptr %t114, { ptr, i64, i64 } { ptr @.str.5286, i64 3, i64 0 }, { ptr, i64, i64 } %t115)
store { ptr, i64, i64 } %t116, ptr %a117
%t118 = load ptr, ptr %a1
%t119 = load { ptr, i64, i64 }, ptr %a19
%t120 = load { ptr, i64, i64 }, ptr %a67
%t121 = load ptr, ptr %a1
%t122 = load { ptr, i64, i64 }, ptr %a19
store { ptr, i64, i64 } { ptr @.str.5287, i64 23, i64 0 }, 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
store { ptr, i64, i64 } %t126, ptr %a128
store { ptr, i64, i64 } { ptr @.str.5288, i64 6, i64 0 }, ptr %a129
call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129)
%t130 = load { ptr, i64, i64 }, ptr %a127
%t131 = load { ptr, i64, i64 }, ptr %a117
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)
%t135 = load { ptr, i64, i64 }, ptr %a132
store { ptr, i64, i64 } %t135, ptr %a137
store { ptr, i64, i64 } { ptr @.str.5289, i64 6, i64 0 }, ptr %a138
call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138)
%t139 = load { ptr, i64, i64 }, ptr %a136
%t140 = load { ptr, i64, i64 }, ptr %a71
store { ptr, i64, i64 } %t139, ptr %a142
store { ptr, i64, i64 } %t140, ptr %a143
call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143)
%t144 = load { ptr, i64, i64 }, ptr %a141
%t145 = call { ptr, i64, i64 } @finch.gen.op(ptr %t121, { ptr, i64, i64 } %t144)
call void @finch.gen.store(ptr %t118, { ptr, i64, i64 } %t119, { ptr, i64, i64 } %t120, { ptr, i64, i64 } %t145)
%t146 = load ptr, ptr %a1
%t147 = load { ptr, i64, i64 }, ptr %a83
%t148 = load { ptr, i64, i64 }, ptr %a37
call void @finch.gen.store(ptr %t146, { ptr, i64, i64 } { ptr @.str.5290, i64 3, i64 0 }, { ptr, i64, i64 } %t147, { ptr, i64, i64 } %t148)
%t149 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5291, i64 4, i64 0 })
%t150 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t149, 1
ret %S.gen.Val %t150
endif8012:
%t151 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } %t151, ptr %a152
store { ptr, i64, i64 } { ptr @.str.5292, i64 3, i64 0 }, ptr %a153
%t154 = call i32 @finch_str_eq(ptr %a152, ptr %a153)
%t155 = icmp ne i32 %t154, 0
br i1 %t155, label %then8017, label %endif8019
then8017:
%t156 = load ptr, ptr %a1
%t157 = load %S.ast.Node, ptr %a2
call void @finch.gen.need(ptr %t156, %S.ast.Node %t157, i64 0)
%t158 = load ptr, ptr %a1
%t159 = load { ptr, i64, i64 }, ptr %a37
%t160 = call { ptr, i64, i64 } @finch.gen.load(ptr %t158, { ptr, i64, i64 } { ptr @.str.5293, i64 3, i64 0 }, { ptr, i64, i64 } %t159)
store { ptr, i64, i64 } %t160, ptr %a161
%t162 = load ptr, ptr %a1
%t163 = load ptr, ptr %a1
%t164 = load { ptr, i64, i64 }, ptr %a161
store { ptr, i64, i64 } { ptr @.str.5294, i64 12, i64 0 }, ptr %a166
store { ptr, i64, i64 } %t164, ptr %a167
call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167)
%t168 = load { ptr, i64, i64 }, ptr %a165
store { ptr, i64, i64 } %t168, ptr %a170
store { ptr, i64, i64 } { ptr @.str.5295, i64 3, i64 0 }, ptr %a171
call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171)
%t172 = load { ptr, i64, i64 }, ptr %a169
%t173 = call { ptr, i64, i64 } @finch.gen.op(ptr %t163, { ptr, i64, i64 } %t172)
%t174 = load %S.ast.Node, ptr %a2
call void @finch.gen.panicIf(ptr %t162, { ptr, i64, i64 } %t173, { ptr, i64, i64 } { ptr @.str.5296, i64 23, i64 0 }, %S.ast.Node %t174)
%t175 = load ptr, ptr %a1
%t176 = load { ptr, i64, i64 }, ptr %a161
store { ptr, i64, i64 } { ptr @.str.5297, i64 8, i64 0 }, ptr %a178
store { ptr, i64, i64 } %t176, ptr %a179
call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179)
%t180 = load { ptr, i64, i64 }, ptr %a177
store { ptr, i64, i64 } %t180, ptr %a182
store { ptr, i64, i64 } { ptr @.str.5298, i64 3, i64 0 }, ptr %a183
call void @finch_str_concat(ptr %a181, ptr %a182, ptr %a183)
%t184 = load { ptr, i64, i64 }, ptr %a181
%t185 = call { ptr, i64, i64 } @finch.gen.op(ptr %t175, { ptr, i64, i64 } %t184)
store { ptr, i64, i64 } %t185, ptr %a186
%t187 = load ptr, ptr %a1
%t188 = load { ptr, i64, i64 }, ptr %a3
%t189 = call { ptr, i64, i64 } @finch.gen.load(ptr %t187, { ptr, i64, i64 } { ptr @.str.5299, i64 3, i64 0 }, { ptr, i64, i64 } %t188)
store { ptr, i64, i64 } %t189, ptr %a190
%t191 = load ptr, ptr %a1
%t192 = load { ptr, i64, i64 }, ptr %a19
%t193 = load ptr, ptr %a1
%t194 = load { ptr, i64, i64 }, ptr %a19
store { ptr, i64, i64 } { ptr @.str.5300, i64 23, i64 0 }, ptr %a196
store { ptr, i64, i64 } %t194, ptr %a197
call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197)
%t198 = load { ptr, i64, i64 }, ptr %a195
store { ptr, i64, i64 } %t198, ptr %a200
store { ptr, i64, i64 } { ptr @.str.5301, i64 6, i64 0 }, ptr %a201
call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201)
%t202 = load { ptr, i64, i64 }, ptr %a199
%t203 = load { ptr, i64, i64 }, ptr %a190
store { ptr, i64, i64 } %t202, ptr %a205
store { ptr, i64, i64 } %t203, ptr %a206
call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206)
%t207 = load { ptr, i64, i64 }, ptr %a204
store { ptr, i64, i64 } %t207, ptr %a209
store { ptr, i64, i64 } { ptr @.str.5302, i64 6, i64 0 }, ptr %a210
call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210)
%t211 = load { ptr, i64, i64 }, ptr %a208
%t212 = load { ptr, i64, i64 }, ptr %a186
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 = call { ptr, i64, i64 } @finch.gen.op(ptr %t193, { ptr, i64, i64 } %t216)
%t218 = call { ptr, i64, i64 } @finch.gen.load(ptr %t191, { ptr, i64, i64 } %t192, { ptr, i64, i64 } %t217)
store { ptr, i64, i64 } %t218, ptr %a219
%t220 = load ptr, ptr %a1
%t221 = load { ptr, i64, i64 }, ptr %a186
%t222 = load { ptr, i64, i64 }, ptr %a37
call void @finch.gen.store(ptr %t220, { ptr, i64, i64 } { ptr @.str.5303, i64 3, i64 0 }, { ptr, i64, i64 } %t221, { ptr, i64, i64 } %t222)
%t223 = load { ptr, i64, i64 }, ptr %a219
store { ptr, i64, i64 } %t223, ptr %a224
call void @finch_str_copy(ptr %a225, ptr %a224)
%t226 = load { ptr, i64, i64 }, ptr %a225
%t227 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t226, 0
%t228 = load %S.ast.Type, ptr %a15
store %S.ast.Type %t228, ptr %a229
call void @finch.copy.S_ast_Type(ptr %a230, ptr %a229)
%t231 = load %S.ast.Type, ptr %a230
%t232 = insertvalue %S.gen.Val %t227, %S.ast.Type %t231, 1
%t233 = load ptr, ptr %a1
%t234 = load %S.ast.Type, ptr %a15
%t235 = call i1 @finch.gen.owning(ptr %t233, %S.ast.Type %t234)
%t236 = insertvalue %S.gen.Val %t232, i1 %t235, 2
ret %S.gen.Val %t236
endif8019:
%t237 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } %t237, ptr %a238
store { ptr, i64, i64 } { ptr @.str.5304, i64 5, i64 0 }, ptr %a239
%t240 = call i32 @finch_str_eq(ptr %a238, ptr %a239)
%t241 = icmp ne i32 %t240, 0
br i1 %t241, label %then8020, label %endif8022
then8020:
%t242 = load ptr, ptr %a1
%t243 = load %S.ast.Node, ptr %a2
call void @finch.gen.need(ptr %t242, %S.ast.Node %t243, i64 0)
%t244 = load ptr, ptr %a1
%t245 = load { ptr, i64, i64 }, ptr %a37
call void @finch.gen.store(ptr %t244, { ptr, i64, i64 } { ptr @.str.5305, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5306, i64 1, i64 0 }, { ptr, i64, i64 } %t245)
%t246 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5307, i64 4, i64 0 })
%t247 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t246, 1
ret %S.gen.Val %t247
endif8022:
%t248 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } %t248, ptr %a249
store { ptr, i64, i64 } { ptr @.str.5308, i64 4, i64 0 }, ptr %a250
%t251 = call i32 @finch_str_eq(ptr %a249, ptr %a250)
%t252 = icmp ne i32 %t251, 0
br label %logic.from8023
logic.from8023:
br i1 %t252, label %logic.end8025, label %logic.rhs8024
logic.rhs8024:
%t253 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } %t253, ptr %a254
store { ptr, i64, i64 } { ptr @.str.5309, i64 8, i64 0 }, ptr %a255
%t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255)
%t257 = icmp ne i32 %t256, 0
br label %logic.rend8026
logic.rend8026:
br label %logic.end8025
logic.end8025:
%t258 = phi i1 [ true, %logic.from8023 ], [ %t257, %logic.rend8026 ]
br i1 %t258, label %then8027, label %endif8029
then8027:
%t259 = load ptr, ptr %a1
%t260 = load %S.ast.Node, ptr %a2
call void @finch.gen.need(ptr %t259, %S.ast.Node %t260, i64 1)
%t261 = load ptr, ptr %a1
%t262 = load ptr, ptr %a1
%t263 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t264 = load { ptr, i64, i64 }, ptr %t263
%t265 = extractvalue { ptr, i64, i64 } %t264, 1
%t266 = icmp uge i64 1, %t265
br i1 %t266, label %range8030, label %inrange8031
range8030:
call void @finch_panic_index(ptr @.str.5310, i64 4811, i64 1, i64 %t265)
unreachable
inrange8031:
%t267 = extractvalue { ptr, i64, i64 } %t264, 0
%t268 = getelementptr inbounds %S.ast.Node, ptr %t267, i64 1
%t269 = load %S.ast.Node, ptr %t268
%t270 = load %S.ast.Type, ptr %a15
%t271 = call %S.gen.Val @finch.gen.exprWant(ptr %t262, %S.ast.Node %t269, %S.ast.Type %t270)
%t272 = load %S.ast.Type, ptr %a15
%t273 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t274 = load { ptr, i64, i64 }, ptr %t273
%t275 = extractvalue { ptr, i64, i64 } %t274, 1
%t276 = icmp uge i64 1, %t275
br i1 %t276, label %range8032, label %inrange8033
range8032:
call void @finch_panic_index(ptr @.str.5311, i64 4811, i64 1, i64 %t275)
unreachable
inrange8033:
%t277 = extractvalue { ptr, i64, i64 } %t274, 0
%t278 = getelementptr inbounds %S.ast.Node, ptr %t277, i64 1
%t279 = load %S.ast.Node, ptr %t278
%t280 = call %S.gen.Val @finch.gen.coerce(ptr %t261, %S.gen.Val %t271, %S.ast.Type %t272, %S.ast.Node %t279, { ptr, i64, i64 } { ptr @.str.5312, i64 21, i64 0 })
store %S.gen.Val %t280, ptr %a281
%t282 = load ptr, ptr %a1
%t283 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t282, { ptr, i64, i64 } { ptr @.str.5313, i64 3, 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.5314, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5315, i64 2, i64 0 }, { ptr, i64, i64 } %t286)
%t287 = load ptr, ptr %a1
%t288 = load { ptr, i64, i64 }, ptr %a37
%t289 = call { ptr, i64, i64 } @finch.gen.load(ptr %t287, { ptr, i64, i64 } { ptr @.str.5316, i64 3, i64 0 }, { ptr, i64, i64 } %t288)
store { ptr, i64, i64 } %t289, ptr %a290
%t291 = load ptr, ptr %a1
%t292 = load { ptr, i64, i64 }, ptr %a3
%t293 = call { ptr, i64, i64 } @finch.gen.load(ptr %t291, { ptr, i64, i64 } { ptr @.str.5317, i64 3, i64 0 }, { ptr, i64, i64 } %t292)
store { ptr, i64, i64 } %t293, ptr %a294
%t295 = load ptr, ptr %a1
%t296 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t295, { ptr, i64, i64 } { ptr @.str.5318, i64 3, i64 0 })
store { ptr, i64, i64 } %t296, ptr %a297
%t298 = load ptr, ptr %a1
%t299 = load { ptr, i64, i64 }, ptr %a297
call void @finch.gen.store(ptr %t298, { ptr, i64, i64 } { ptr @.str.5319, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5320, i64 1, i64 0 }, { ptr, i64, i64 } %t299)
%t300 = load ptr, ptr %a1
%t301 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t300, { ptr, i64, i64 } { ptr @.str.5321, i64 9, i64 0 })
store { ptr, i64, i64 } %t301, ptr %a302
%t303 = load ptr, ptr %a1
%t304 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t303, { ptr, i64, i64 } { ptr @.str.5322, i64 9, i64 0 })
store { ptr, i64, i64 } %t304, ptr %a305
%t306 = load ptr, ptr %a1
%t307 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t306, { ptr, i64, i64 } { ptr @.str.5323, i64 8, i64 0 })
store { ptr, i64, i64 } %t307, ptr %a308
%t309 = load ptr, ptr %a1
%t310 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t309, { ptr, i64, i64 } { ptr @.str.5324, i64 9, i64 0 })
store { ptr, i64, i64 } %t310, ptr %a311
%t312 = load ptr, ptr %a1
%t313 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t312, { ptr, i64, i64 } { ptr @.str.5325, i64 8, i64 0 })
store { ptr, i64, i64 } %t313, ptr %a314
%t315 = load ptr, ptr %a1
%t316 = load { ptr, i64, i64 }, ptr %a302
call void @finch.gen.br(ptr %t315, { ptr, i64, i64 } %t316)
%t317 = load ptr, ptr %a1
%t318 = load { ptr, i64, i64 }, ptr %a302
call void @finch.gen.label(ptr %t317, { ptr, i64, i64 } %t318)
%t319 = load ptr, ptr %a1
%t320 = load { ptr, i64, i64 }, ptr %a297
%t321 = call { ptr, i64, i64 } @finch.gen.load(ptr %t319, { ptr, i64, i64 } { ptr @.str.5326, i64 3, i64 0 }, { ptr, i64, i64 } %t320)
store { ptr, i64, i64 } %t321, ptr %a322
%t323 = load ptr, ptr %a1
%t324 = load { ptr, i64, i64 }, ptr %a322
store { ptr, i64, i64 } { ptr @.str.5327, i64 13, i64 0 }, ptr %a326
store { ptr, i64, i64 } %t324, ptr %a327
call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327)
%t328 = load { ptr, i64, i64 }, ptr %a325
store { ptr, i64, i64 } %t328, ptr %a330
store { ptr, i64, i64 } { ptr @.str.5328, i64 2, i64 0 }, ptr %a331
call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331)
%t332 = load { ptr, i64, i64 }, ptr %a329
%t333 = load { ptr, i64, i64 }, ptr %a290
store { ptr, i64, i64 } %t332, ptr %a335
store { ptr, i64, i64 } %t333, ptr %a336
call void @finch_str_concat(ptr %a334, ptr %a335, ptr %a336)
%t337 = load { ptr, i64, i64 }, ptr %a334
%t338 = call { ptr, i64, i64 } @finch.gen.op(ptr %t323, { ptr, i64, i64 } %t337)
store { ptr, i64, i64 } %t338, ptr %a339
%t340 = load ptr, ptr %a1
%t341 = load { ptr, i64, i64 }, ptr %a339
%t342 = load { ptr, i64, i64 }, ptr %a305
%t343 = load { ptr, i64, i64 }, ptr %a314
call void @finch.gen.condBr(ptr %t340, { ptr, i64, i64 } %t341, { ptr, i64, i64 } %t342, { ptr, i64, i64 } %t343)
%t344 = load ptr, ptr %a1
%t345 = load { ptr, i64, i64 }, ptr %a305
call void @finch.gen.label(ptr %t344, { ptr, i64, i64 } %t345)
%t346 = load ptr, ptr %a1
%t347 = load { ptr, i64, i64 }, ptr %a19
%t348 = load ptr, ptr %a1
%t349 = load { ptr, i64, i64 }, ptr %a19
store { ptr, i64, i64 } { ptr @.str.5329, i64 23, i64 0 }, ptr %a351
store { ptr, i64, i64 } %t349, ptr %a352
call void @finch_str_concat(ptr %a350, ptr %a351, ptr %a352)
%t353 = load { ptr, i64, i64 }, ptr %a350
store { ptr, i64, i64 } %t353, ptr %a355
store { ptr, i64, i64 } { ptr @.str.5330, i64 6, i64 0 }, ptr %a356
call void @finch_str_concat(ptr %a354, ptr %a355, ptr %a356)
%t357 = load { ptr, i64, i64 }, ptr %a354
%t358 = load { ptr, i64, i64 }, ptr %a294
store { ptr, i64, i64 } %t357, 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.5331, i64 6, i64 0 }, ptr %a365
call void @finch_str_concat(ptr %a363, ptr %a364, ptr %a365)
%t366 = load { ptr, i64, i64 }, ptr %a363
%t367 = load { ptr, i64, i64 }, ptr %a322
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)
%t371 = load { ptr, i64, i64 }, ptr %a368
%t372 = call { ptr, i64, i64 } @finch.gen.op(ptr %t348, { ptr, i64, i64 } %t371)
%t373 = call { ptr, i64, i64 } @finch.gen.load(ptr %t346, { ptr, i64, i64 } %t347, { ptr, i64, i64 } %t372)
%t374 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t373, 0
%t375 = load %S.ast.Type, ptr %a15
store %S.ast.Type %t375, ptr %a376
call void @finch.copy.S_ast_Type(ptr %a377, ptr %a376)
%t378 = load %S.ast.Type, ptr %a377
%t379 = insertvalue %S.gen.Val %t374, %S.ast.Type %t378, 1
store %S.gen.Val %t379, ptr %a380
%t381 = load ptr, ptr %a1
%t382 = load %S.gen.Val, ptr %a380
%t383 = load %S.gen.Val, ptr %a281
%t384 = load %S.ast.Node, ptr %a2
%t385 = call %S.gen.Val @finch.gen.compare(ptr %t381, { ptr, i64, i64 } { ptr @.str.5332, i64 2, i64 0 }, %S.gen.Val %t382, %S.gen.Val %t383, %S.ast.Node %t384)
%t386 = extractvalue %S.gen.Val %t385, 0
store { ptr, i64, i64 } %t386, ptr %a387
call void @finch_str_copy(ptr %a388, ptr %a387)
%t389 = load { ptr, i64, i64 }, ptr %a388
store { ptr, i64, i64 } %t389, ptr %a390
%t391 = load ptr, ptr %a1
%t392 = load { ptr, i64, i64 }, ptr %a390
%t393 = load { ptr, i64, i64 }, ptr %a308
%t394 = load { ptr, i64, i64 }, ptr %a311
call void @finch.gen.condBr(ptr %t391, { ptr, i64, i64 } %t392, { ptr, i64, i64 } %t393, { ptr, i64, i64 } %t394)
%t395 = load ptr, ptr %a1
%t396 = load { ptr, i64, i64 }, ptr %a308
call void @finch.gen.label(ptr %t395, { ptr, i64, i64 } %t396)
%t397 = load ptr, ptr %a1
%t398 = load { ptr, i64, i64 }, ptr %a322
%t399 = load { ptr, i64, i64 }, ptr %a284
call void @finch.gen.store(ptr %t397, { ptr, i64, i64 } { ptr @.str.5333, i64 3, i64 0 }, { ptr, i64, i64 } %t398, { ptr, i64, i64 } %t399)
%t400 = load ptr, ptr %a1
%t401 = load { ptr, i64, i64 }, ptr %a314
call void @finch.gen.br(ptr %t400, { ptr, i64, i64 } %t401)
%t402 = load ptr, ptr %a1
%t403 = load { ptr, i64, i64 }, ptr %a311
call void @finch.gen.label(ptr %t402, { ptr, i64, i64 } %t403)
%t404 = load ptr, ptr %a1
%t405 = load ptr, ptr %a1
%t406 = load { ptr, i64, i64 }, ptr %a322
store { ptr, i64, i64 } { ptr @.str.5335, i64 8, 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.5336, i64 3, i64 0 }, ptr %a413
call void @finch_str_concat(ptr %a411, ptr %a412, ptr %a413)
%t414 = load { ptr, i64, i64 }, ptr %a411
%t415 = call { ptr, i64, i64 } @finch.gen.op(ptr %t405, { ptr, i64, i64 } %t414)
%t416 = load { ptr, i64, i64 }, ptr %a297
call void @finch.gen.store(ptr %t404, { ptr, i64, i64 } { ptr @.str.5334, i64 3, i64 0 }, { ptr, i64, i64 } %t415, { ptr, i64, i64 } %t416)
%t417 = load ptr, ptr %a1
%t418 = load { ptr, i64, i64 }, ptr %a302
call void @finch.gen.br(ptr %t417, { ptr, i64, i64 } %t418)
%t419 = load ptr, ptr %a1
%t420 = load { ptr, i64, i64 }, ptr %a314
call void @finch.gen.label(ptr %t419, { ptr, i64, i64 } %t420)
%t421 = load ptr, ptr %a1
%t422 = load { ptr, i64, i64 }, ptr %a284
%t423 = call { ptr, i64, i64 } @finch.gen.load(ptr %t421, { ptr, i64, i64 } { ptr @.str.5337, i64 3, i64 0 }, { ptr, i64, i64 } %t422)
store { ptr, i64, i64 } %t423, ptr %a424
%t425 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } %t425, ptr %a426
store { ptr, i64, i64 } { ptr @.str.5338, i64 4, i64 0 }, ptr %a427
%t428 = call i32 @finch_str_eq(ptr %a426, ptr %a427)
%t429 = icmp ne i32 %t428, 0
br i1 %t429, label %then8034, label %endif8036
then8034:
%t430 = load { ptr, i64, i64 }, ptr %a424
store { ptr, i64, i64 } %t430, ptr %a431
call void @finch_str_copy(ptr %a432, ptr %a431)
%t433 = load { ptr, i64, i64 }, ptr %a432
%t434 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t433, 0
%t435 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5339, i64 3, i64 0 })
%t436 = insertvalue %S.gen.Val %t434, %S.ast.Type %t435, 1
ret %S.gen.Val %t436
endif8036:
%t437 = load ptr, ptr %a1
%t438 = load { ptr, i64, i64 }, ptr %a424
store { ptr, i64, i64 } { ptr @.str.5340, i64 13, i64 0 }, ptr %a440
store { ptr, i64, i64 } %t438, ptr %a441
call void @finch_str_concat(ptr %a439, ptr %a440, ptr %a441)
%t442 = load { ptr, i64, i64 }, ptr %a439
store { ptr, i64, i64 } %t442, ptr %a444
store { ptr, i64, i64 } { ptr @.str.5341, i64 3, i64 0 }, ptr %a445
call void @finch_str_concat(ptr %a443, ptr %a444, ptr %a445)
%t446 = load { ptr, i64, i64 }, ptr %a443
%t447 = call { ptr, i64, i64 } @finch.gen.op(ptr %t437, { ptr, i64, i64 } %t446)
%t448 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t447, 0
%t449 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5342, i64 4, i64 0 })
%t450 = insertvalue %S.gen.Val %t448, %S.ast.Type %t449, 1
ret %S.gen.Val %t450
endif8029:
%t451 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } %t451, ptr %a452
store { ptr, i64, i64 } { ptr @.str.5343, i64 4, i64 0 }, ptr %a453
%t454 = call i32 @finch_str_eq(ptr %a452, ptr %a453)
%t455 = icmp ne i32 %t454, 0
br i1 %t455, label %then8037, label %endif8039
then8037:
%t456 = load ptr, ptr %a1
%t457 = load %S.ast.Node, ptr %a2
call void @finch.gen.need(ptr %t456, %S.ast.Node %t457, i64 1)
%t458 = getelementptr inbounds %S.ast.Type, ptr %a15, i32 0, i32 0
%t459 = load { ptr, i64, i64 }, ptr %t458
store { ptr, i64, i64 } %t459, ptr %a460
store { ptr, i64, i64 } { ptr @.str.5344, i64 3, i64 0 }, ptr %a461
%t462 = call i32 @finch_str_eq(ptr %a460, ptr %a461)
%t463 = icmp eq i32 %t462, 0
br i1 %t463, label %then8040, label %endif8042
then8040:
%t464 = load ptr, ptr %a1
%t465 = load %S.ast.Node, ptr %a2
call void @finch.gen.fail(ptr %t464, %S.ast.Node %t465, { ptr, i64, i64 } { ptr @.str.5345, i64 31, i64 0 })
br label %endif8042
endif8042:
%t466 = load ptr, ptr %a1
%t467 = load ptr, ptr %a1
%t468 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t469 = load { ptr, i64, i64 }, ptr %t468
%t470 = extractvalue { ptr, i64, i64 } %t469, 1
%t471 = icmp uge i64 1, %t470
br i1 %t471, label %range8043, label %inrange8044
range8043:
call void @finch_panic_index(ptr @.str.5346, i64 4850, i64 1, i64 %t470)
unreachable
inrange8044:
%t472 = extractvalue { ptr, i64, i64 } %t469, 0
%t473 = getelementptr inbounds %S.ast.Node, ptr %t472, i64 1
%t474 = load %S.ast.Node, ptr %t473
%t475 = call %S.gen.Val @finch.gen.strArg(ptr %t467, %S.ast.Node %t474, { ptr, i64, i64 } { ptr @.str.5347, i64 13, i64 0 })
%t476 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t466, %S.gen.Val %t475)
store { ptr, i64, i64 } %t476, ptr %a477
%t478 = load ptr, ptr %a1
%t479 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t478)
store { ptr, i64, i64 } %t479, ptr %a480
%t481 = load ptr, ptr %a1
%t482 = load { ptr, i64, i64 }, ptr %a480
store { ptr, i64, i64 } { ptr @.str.5348, i64 30, i64 0 }, ptr %a484
store { ptr, i64, i64 } %t482, ptr %a485
call void @finch_str_concat(ptr %a483, ptr %a484, ptr %a485)
%t486 = load { ptr, i64, i64 }, ptr %a483
store { ptr, i64, i64 } %t486, ptr %a488
store { ptr, i64, i64 } { ptr @.str.5349, i64 6, i64 0 }, ptr %a489
call void @finch_str_concat(ptr %a487, ptr %a488, ptr %a489)
%t490 = load { ptr, i64, i64 }, ptr %a487
%t491 = load { ptr, i64, i64 }, ptr %a3
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)
%t495 = load { ptr, i64, i64 }, ptr %a492
store { ptr, i64, i64 } %t495, ptr %a497
store { ptr, i64, i64 } { ptr @.str.5350, i64 6, i64 0 }, ptr %a498
call void @finch_str_concat(ptr %a496, ptr %a497, ptr %a498)
%t499 = load { ptr, i64, i64 }, ptr %a496
%t500 = load { ptr, i64, i64 }, ptr %a477
store { ptr, i64, i64 } %t499, ptr %a502
store { ptr, i64, i64 } %t500, ptr %a503
call void @finch_str_concat(ptr %a501, ptr %a502, ptr %a503)
%t504 = load { ptr, i64, i64 }, ptr %a501
store { ptr, i64, i64 } %t504, ptr %a506
store { ptr, i64, i64 } { ptr @.str.5351, i64 1, i64 0 }, ptr %a507
call void @finch_str_concat(ptr %a505, ptr %a506, ptr %a507)
%t508 = load { ptr, i64, i64 }, ptr %a505
call void @finch.gen.emit(ptr %t481, { ptr, i64, i64 } %t508)
%t509 = load ptr, ptr %a1
%t510 = load { ptr, i64, i64 }, ptr %a480
%t511 = call { ptr, i64, i64 } @finch.gen.load(ptr %t509, { ptr, i64, i64 } { ptr @.str.5352, i64 17, i64 0 }, { ptr, i64, i64 } %t510)
%t512 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t511, 0
%t513 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5353, i64 3, i64 0 })
%t514 = insertvalue %S.gen.Val %t512, %S.ast.Type %t513, 1
%t515 = insertvalue %S.gen.Val %t514, i1 true, 2
ret %S.gen.Val %t515
endif8039:
%t516 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } %t516, ptr %a517
store { ptr, i64, i64 } { ptr @.str.5354, i64 6, i64 0 }, ptr %a518
%t519 = call i32 @finch_str_eq(ptr %a517, ptr %a518)
%t520 = icmp ne i32 %t519, 0
br i1 %t520, label %then8045, label %endif8047
then8045:
%t521 = load ptr, ptr %a1
%t522 = load %S.ast.Node, ptr %a2
call void @finch.gen.need(ptr %t521, %S.ast.Node %t522, i64 2)
%t523 = load ptr, ptr %a1
%t524 = load ptr, ptr %a1
%t525 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t526 = load { ptr, i64, i64 }, ptr %t525
%t527 = extractvalue { ptr, i64, i64 } %t526, 1
%t528 = icmp uge i64 1, %t527
br i1 %t528, label %range8048, label %inrange8049
range8048:
call void @finch_panic_index(ptr @.str.5355, i64 4857, i64 1, i64 %t527)
unreachable
inrange8049:
%t529 = extractvalue { ptr, i64, i64 } %t526, 0
%t530 = getelementptr inbounds %S.ast.Node, ptr %t529, i64 1
%t531 = load %S.ast.Node, ptr %t530
%t532 = call %S.gen.Val @finch.gen.expr(ptr %t524, %S.ast.Node %t531)
%t533 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5356, i64 3, i64 0 })
%t534 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t535 = load { ptr, i64, i64 }, ptr %t534
%t536 = extractvalue { ptr, i64, i64 } %t535, 1
%t537 = icmp uge i64 1, %t536
br i1 %t537, label %range8050, label %inrange8051
range8050:
call void @finch_panic_index(ptr @.str.5357, i64 4857, i64 1, i64 %t536)
unreachable
inrange8051:
%t538 = extractvalue { ptr, i64, i64 } %t535, 0
%t539 = getelementptr inbounds %S.ast.Node, ptr %t538, i64 1
%t540 = load %S.ast.Node, ptr %t539
%t541 = call %S.gen.Val @finch.gen.coerce(ptr %t523, %S.gen.Val %t532, %S.ast.Type %t533, %S.ast.Node %t540, { ptr, i64, i64 } { ptr @.str.5358, i64 12, i64 0 })
%t542 = extractvalue %S.gen.Val %t541, 0
store { ptr, i64, i64 } %t542, ptr %a543
call void @finch_str_copy(ptr %a544, ptr %a543)
%t545 = load { ptr, i64, i64 }, ptr %a544
store { ptr, i64, i64 } %t545, ptr %a546
%t547 = load ptr, ptr %a1
%t548 = load ptr, ptr %a1
%t549 = load ptr, ptr %a1
%t550 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t551 = load { ptr, i64, i64 }, ptr %t550
%t552 = extractvalue { ptr, i64, i64 } %t551, 1
%t553 = icmp uge i64 2, %t552
br i1 %t553, label %range8052, label %inrange8053
range8052:
call void @finch_panic_index(ptr @.str.5359, i64 4858, i64 2, i64 %t552)
unreachable
inrange8053:
%t554 = extractvalue { ptr, i64, i64 } %t551, 0
%t555 = getelementptr inbounds %S.ast.Node, ptr %t554, i64 2
%t556 = load %S.ast.Node, ptr %t555
%t557 = load %S.ast.Type, ptr %a15
%t558 = call %S.gen.Val @finch.gen.exprWant(ptr %t549, %S.ast.Node %t556, %S.ast.Type %t557)
%t559 = load %S.ast.Type, ptr %a15
%t560 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t561 = load { ptr, i64, i64 }, ptr %t560
%t562 = extractvalue { ptr, i64, i64 } %t561, 1
%t563 = icmp uge i64 2, %t562
br i1 %t563, label %range8054, label %inrange8055
range8054:
call void @finch_panic_index(ptr @.str.5360, i64 4858, i64 2, i64 %t562)
unreachable
inrange8055:
%t564 = extractvalue { ptr, i64, i64 } %t561, 0
%t565 = getelementptr inbounds %S.ast.Node, ptr %t564, i64 2
%t566 = load %S.ast.Node, ptr %t565
%t567 = call %S.gen.Val @finch.gen.coerce(ptr %t548, %S.gen.Val %t558, %S.ast.Type %t559, %S.ast.Node %t566, { ptr, i64, i64 } { ptr @.str.5361, i64 11, i64 0 })
%t568 = call { ptr, i64, i64 } @finch.gen.own(ptr %t547, %S.gen.Val %t567)
store { ptr, i64, i64 } %t568, ptr %a569
%t570 = load ptr, ptr %a1
%t571 = load ptr, ptr %a1
%t572 = icmp eq ptr %t571, null
br i1 %t572, label %panic8056, label %ok8057
panic8056:
call void @finch_panic(ptr @.str.5362, i64 4859, ptr @.str.5363)
unreachable
ok8057:
%t573 = getelementptr inbounds %S.gen.Gen, ptr %t571, i32 0, i32 1
%t574 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13
%t575 = load i64, ptr %t574
%t576 = load { ptr, i64, i64 }, ptr %t573
%t577 = extractvalue { ptr, i64, i64 } %t576, 1
%t578 = icmp uge i64 %t575, %t577
br i1 %t578, label %range8058, label %inrange8059
range8058:
call void @finch_panic_index(ptr @.str.5364, i64 4859, i64 %t575, i64 %t577)
unreachable
inrange8059:
%t579 = extractvalue { ptr, i64, i64 } %t576, 0
%t580 = getelementptr inbounds { ptr, i64, i64 }, ptr %t579, i64 %t575
%t581 = load { ptr, i64, i64 }, ptr %t580
%t582 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t570, { ptr, i64, i64 } %t581)
store { ptr, i64, i64 } %t582, ptr %a583
%t584 = load ptr, ptr %a1
%t585 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } { ptr @.str.5365, i64 36, i64 0 }, ptr %a587
store { ptr, i64, i64 } %t585, ptr %a588
call void @finch_str_concat(ptr %a586, ptr %a587, ptr %a588)
%t589 = load { ptr, i64, i64 }, ptr %a586
store { ptr, i64, i64 } %t589, ptr %a591
store { ptr, i64, i64 } { ptr @.str.5366, i64 6, i64 0 }, ptr %a592
call void @finch_str_concat(ptr %a590, ptr %a591, ptr %a592)
%t593 = load { ptr, i64, i64 }, ptr %a590
%t594 = load { ptr, i64, i64 }, ptr %a546
store { ptr, i64, i64 } %t593, ptr %a596
store { ptr, i64, i64 } %t594, ptr %a597
call void @finch_str_concat(ptr %a595, ptr %a596, ptr %a597)
%t598 = load { ptr, i64, i64 }, ptr %a595
store { ptr, i64, i64 } %t598, ptr %a600
store { ptr, i64, i64 } { ptr @.str.5367, i64 6, i64 0 }, ptr %a601
call void @finch_str_concat(ptr %a599, ptr %a600, ptr %a601)
%t602 = load { ptr, i64, i64 }, ptr %a599
%t603 = load ptr, ptr %a1
%t604 = load %S.ast.Type, ptr %a15
%t605 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t603, %S.ast.Type %t604)
store { ptr, i64, i64 } %t602, ptr %a607
store { ptr, i64, i64 } %t605, ptr %a608
call void @finch_str_concat(ptr %a606, ptr %a607, ptr %a608)
%t609 = load { ptr, i64, i64 }, ptr %a606
store { ptr, i64, i64 } %t609, ptr %a611
store { ptr, i64, i64 } { ptr @.str.5368, i64 6, i64 0 }, ptr %a612
call void @finch_str_concat(ptr %a610, ptr %a611, ptr %a612)
%t613 = load { ptr, i64, i64 }, ptr %a610
%t614 = load { ptr, i64, i64 }, ptr %a583
store { ptr, i64, i64 } %t613, 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.5369, i64 6, i64 0 }, ptr %a621
call void @finch_str_concat(ptr %a619, ptr %a620, ptr %a621)
%t622 = load { ptr, i64, i64 }, ptr %a619
%t623 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11
%t624 = load i64, ptr %t623
call void @finch_str_from_int(ptr %a625, i64 %t624)
%t626 = load { ptr, i64, i64 }, ptr %a625
store { ptr, i64, i64 } %t622, ptr %a628
store { ptr, i64, i64 } %t626, ptr %a629
call void @finch_str_concat(ptr %a627, ptr %a628, ptr %a629)
%t630 = load { ptr, i64, i64 }, ptr %a627
store { ptr, i64, i64 } %t630, ptr %a632
store { ptr, i64, i64 } { ptr @.str.5370, i64 1, i64 0 }, ptr %a633
call void @finch_str_concat(ptr %a631, ptr %a632, ptr %a633)
%t634 = load { ptr, i64, i64 }, ptr %a631
call void @finch.gen.emit(ptr %t584, { ptr, i64, i64 } %t634)
%t635 = load ptr, ptr %a1
%t636 = load { ptr, i64, i64 }, ptr %a3
%t637 = call { ptr, i64, i64 } @finch.gen.load(ptr %t635, { ptr, i64, i64 } { ptr @.str.5371, i64 3, i64 0 }, { ptr, i64, i64 } %t636)
store { ptr, i64, i64 } %t637, ptr %a638
%t639 = load ptr, ptr %a1
%t640 = load { ptr, i64, i64 }, ptr %a19
%t641 = load { ptr, i64, i64 }, ptr %a569
%t642 = load ptr, ptr %a1
%t643 = load { ptr, i64, i64 }, ptr %a19
store { ptr, i64, i64 } { ptr @.str.5372, i64 23, i64 0 }, ptr %a645
store { ptr, i64, i64 } %t643, ptr %a646
call void @finch_str_concat(ptr %a644, ptr %a645, ptr %a646)
%t647 = load { ptr, i64, i64 }, ptr %a644
store { ptr, i64, i64 } %t647, ptr %a649
store { ptr, i64, i64 } { ptr @.str.5373, i64 6, i64 0 }, ptr %a650
call void @finch_str_concat(ptr %a648, ptr %a649, ptr %a650)
%t651 = load { ptr, i64, i64 }, ptr %a648
%t652 = load { ptr, i64, i64 }, ptr %a638
store { ptr, i64, i64 } %t651, ptr %a654
store { ptr, i64, i64 } %t652, ptr %a655
call void @finch_str_concat(ptr %a653, ptr %a654, ptr %a655)
%t656 = load { ptr, i64, i64 }, ptr %a653
store { ptr, i64, i64 } %t656, ptr %a658
store { ptr, i64, i64 } { ptr @.str.5374, i64 6, i64 0 }, ptr %a659
call void @finch_str_concat(ptr %a657, ptr %a658, ptr %a659)
%t660 = load { ptr, i64, i64 }, ptr %a657
%t661 = load { ptr, i64, i64 }, ptr %a546
store { ptr, i64, i64 } %t660, ptr %a663
store { ptr, i64, i64 } %t661, ptr %a664
call void @finch_str_concat(ptr %a662, ptr %a663, ptr %a664)
%t665 = load { ptr, i64, i64 }, ptr %a662
%t666 = call { ptr, i64, i64 } @finch.gen.op(ptr %t642, { ptr, i64, i64 } %t665)
call void @finch.gen.store(ptr %t639, { ptr, i64, i64 } %t640, { ptr, i64, i64 } %t641, { ptr, i64, i64 } %t666)
%t667 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5375, i64 4, i64 0 })
%t668 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t667, 1
ret %S.gen.Val %t668
endif8047:
%t669 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } %t669, ptr %a670
store { ptr, i64, i64 } { ptr @.str.5376, i64 6, i64 0 }, ptr %a671
%t672 = call i32 @finch_str_eq(ptr %a670, ptr %a671)
%t673 = icmp ne i32 %t672, 0
br i1 %t673, label %then8060, label %endif8062
then8060:
%t674 = load ptr, ptr %a1
%t675 = load %S.ast.Node, ptr %a2
call void @finch.gen.need(ptr %t674, %S.ast.Node %t675, i64 1)
%t676 = load ptr, ptr %a1
%t677 = load ptr, ptr %a1
%t678 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t679 = load { ptr, i64, i64 }, ptr %t678
%t680 = extractvalue { ptr, i64, i64 } %t679, 1
%t681 = icmp uge i64 1, %t680
br i1 %t681, label %range8063, label %inrange8064
range8063:
call void @finch_panic_index(ptr @.str.5377, i64 4867, i64 1, i64 %t680)
unreachable
inrange8064:
%t682 = extractvalue { ptr, i64, i64 } %t679, 0
%t683 = getelementptr inbounds %S.ast.Node, ptr %t682, i64 1
%t684 = load %S.ast.Node, ptr %t683
%t685 = call %S.gen.Val @finch.gen.expr(ptr %t677, %S.ast.Node %t684)
%t686 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5378, i64 3, i64 0 })
%t687 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t688 = load { ptr, i64, i64 }, ptr %t687
%t689 = extractvalue { ptr, i64, i64 } %t688, 1
%t690 = icmp uge i64 1, %t689
br i1 %t690, label %range8065, label %inrange8066
range8065:
call void @finch_panic_index(ptr @.str.5379, i64 4867, i64 1, i64 %t689)
unreachable
inrange8066:
%t691 = extractvalue { ptr, i64, i64 } %t688, 0
%t692 = getelementptr inbounds %S.ast.Node, ptr %t691, i64 1
%t693 = load %S.ast.Node, ptr %t692
%t694 = call %S.gen.Val @finch.gen.coerce(ptr %t676, %S.gen.Val %t685, %S.ast.Type %t686, %S.ast.Node %t693, { ptr, i64, i64 } { ptr @.str.5380, i64 12, i64 0 })
%t695 = extractvalue %S.gen.Val %t694, 0
store { ptr, i64, i64 } %t695, ptr %a696
call void @finch_str_copy(ptr %a697, ptr %a696)
%t698 = load { ptr, i64, i64 }, ptr %a697
store { ptr, i64, i64 } %t698, ptr %a699
%t700 = load ptr, ptr %a1
%t701 = load { ptr, i64, i64 }, ptr %a699
%t702 = load ptr, ptr %a1
%t703 = load { ptr, i64, i64 }, ptr %a37
%t704 = call { ptr, i64, i64 } @finch.gen.load(ptr %t702, { ptr, i64, i64 } { ptr @.str.5381, i64 3, i64 0 }, { ptr, i64, i64 } %t703)
%t705 = load %S.ast.Node, ptr %a2
call void @finch.gen.boundsCheck(ptr %t700, { ptr, i64, i64 } %t701, { ptr, i64, i64 } %t704, %S.ast.Node %t705)
%t706 = load ptr, ptr %a1
%t707 = load { ptr, i64, i64 }, ptr %a3
%t708 = call { ptr, i64, i64 } @finch.gen.load(ptr %t706, { ptr, i64, i64 } { ptr @.str.5382, i64 3, i64 0 }, { ptr, i64, i64 } %t707)
store { ptr, i64, i64 } %t708, ptr %a709
%t710 = load ptr, ptr %a1
%t711 = load { ptr, i64, i64 }, ptr %a19
%t712 = load ptr, ptr %a1
%t713 = load { ptr, i64, i64 }, ptr %a19
store { ptr, i64, i64 } { ptr @.str.5383, i64 23, 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.5384, i64 6, i64 0 }, ptr %a720
call void @finch_str_concat(ptr %a718, ptr %a719, ptr %a720)
%t721 = load { ptr, i64, i64 }, ptr %a718
%t722 = load { ptr, i64, i64 }, ptr %a709
store { ptr, i64, i64 } %t721, ptr %a724
store { ptr, i64, i64 } %t722, ptr %a725
call void @finch_str_concat(ptr %a723, ptr %a724, ptr %a725)
%t726 = load { ptr, i64, i64 }, ptr %a723
store { ptr, i64, i64 } %t726, ptr %a728
store { ptr, i64, i64 } { ptr @.str.5385, i64 6, i64 0 }, ptr %a729
call void @finch_str_concat(ptr %a727, ptr %a728, ptr %a729)
%t730 = load { ptr, i64, i64 }, ptr %a727
%t731 = load { ptr, i64, i64 }, ptr %a699
store { ptr, i64, i64 } %t730, ptr %a733
store { ptr, i64, i64 } %t731, ptr %a734
call void @finch_str_concat(ptr %a732, ptr %a733, ptr %a734)
%t735 = load { ptr, i64, i64 }, ptr %a732
%t736 = call { ptr, i64, i64 } @finch.gen.op(ptr %t712, { ptr, i64, i64 } %t735)
%t737 = call { ptr, i64, i64 } @finch.gen.load(ptr %t710, { ptr, i64, i64 } %t711, { ptr, i64, i64 } %t736)
store { ptr, i64, i64 } %t737, ptr %a738
%t739 = load ptr, ptr %a1
%t740 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } { ptr @.str.5386, i64 36, i64 0 }, ptr %a742
store { ptr, i64, i64 } %t740, ptr %a743
call void @finch_str_concat(ptr %a741, ptr %a742, ptr %a743)
%t744 = load { ptr, i64, i64 }, ptr %a741
store { ptr, i64, i64 } %t744, ptr %a746
store { ptr, i64, i64 } { ptr @.str.5387, i64 6, i64 0 }, ptr %a747
call void @finch_str_concat(ptr %a745, ptr %a746, ptr %a747)
%t748 = load { ptr, i64, i64 }, ptr %a745
%t749 = load { ptr, i64, i64 }, ptr %a699
store { ptr, i64, i64 } %t748, 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.5388, i64 6, i64 0 }, ptr %a756
call void @finch_str_concat(ptr %a754, ptr %a755, ptr %a756)
%t757 = load { ptr, i64, i64 }, ptr %a754
%t758 = load ptr, ptr %a1
%t759 = load %S.ast.Type, ptr %a15
%t760 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t758, %S.ast.Type %t759)
store { ptr, i64, i64 } %t757, ptr %a762
store { ptr, i64, i64 } %t760, ptr %a763
call void @finch_str_concat(ptr %a761, ptr %a762, ptr %a763)
%t764 = load { ptr, i64, i64 }, ptr %a761
store { ptr, i64, i64 } %t764, ptr %a766
store { ptr, i64, i64 } { ptr @.str.5389, i64 1, i64 0 }, ptr %a767
call void @finch_str_concat(ptr %a765, ptr %a766, ptr %a767)
%t768 = load { ptr, i64, i64 }, ptr %a765
call void @finch.gen.emit(ptr %t739, { ptr, i64, i64 } %t768)
%t769 = load { ptr, i64, i64 }, ptr %a738
store { ptr, i64, i64 } %t769, ptr %a770
call void @finch_str_copy(ptr %a771, ptr %a770)
%t772 = load { ptr, i64, i64 }, ptr %a771
%t773 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t772, 0
%t774 = load %S.ast.Type, ptr %a15
store %S.ast.Type %t774, ptr %a775
call void @finch.copy.S_ast_Type(ptr %a776, ptr %a775)
%t777 = load %S.ast.Type, ptr %a776
%t778 = insertvalue %S.gen.Val %t773, %S.ast.Type %t777, 1
%t779 = load ptr, ptr %a1
%t780 = load %S.ast.Type, ptr %a15
%t781 = call i1 @finch.gen.owning(ptr %t779, %S.ast.Type %t780)
%t782 = insertvalue %S.gen.Val %t778, i1 %t781, 2
ret %S.gen.Val %t782
endif8062:
%t783 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } %t783, ptr %a784
store { ptr, i64, i64 } { ptr @.str.5390, i64 6, i64 0 }, ptr %a785
%t786 = call i32 @finch_str_eq(ptr %a784, ptr %a785)
%t787 = icmp ne i32 %t786, 0
br i1 %t787, label %then8067, label %endif8069
then8067:
%t788 = load ptr, ptr %a1
%t789 = load %S.ast.Node, ptr %a2
call void @finch.gen.need(ptr %t788, %S.ast.Node %t789, i64 1)
%t790 = load ptr, ptr %a1
%t791 = load ptr, ptr %a1
%t792 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t793 = load { ptr, i64, i64 }, ptr %t792
%t794 = extractvalue { ptr, i64, i64 } %t793, 1
%t795 = icmp uge i64 1, %t794
br i1 %t795, label %range8070, label %inrange8071
range8070:
call void @finch_panic_index(ptr @.str.5391, i64 4876, i64 1, i64 %t794)
unreachable
inrange8071:
%t796 = extractvalue { ptr, i64, i64 } %t793, 0
%t797 = getelementptr inbounds %S.ast.Node, ptr %t796, i64 1
%t798 = load %S.ast.Node, ptr %t797
%t799 = call %S.gen.Val @finch.gen.expr(ptr %t791, %S.ast.Node %t798)
%t800 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5392, i64 3, i64 0 })
%t801 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t802 = load { ptr, i64, i64 }, ptr %t801
%t803 = extractvalue { ptr, i64, i64 } %t802, 1
%t804 = icmp uge i64 1, %t803
br i1 %t804, label %range8072, label %inrange8073
range8072:
call void @finch_panic_index(ptr @.str.5393, i64 4876, i64 1, i64 %t803)
unreachable
inrange8073:
%t805 = extractvalue { ptr, i64, i64 } %t802, 0
%t806 = getelementptr inbounds %S.ast.Node, ptr %t805, i64 1
%t807 = load %S.ast.Node, ptr %t806
%t808 = call %S.gen.Val @finch.gen.coerce(ptr %t790, %S.gen.Val %t799, %S.ast.Type %t800, %S.ast.Node %t807, { ptr, i64, i64 } { ptr @.str.5394, i64 14, i64 0 })
%t809 = extractvalue %S.gen.Val %t808, 0
store { ptr, i64, i64 } %t809, ptr %a810
call void @finch_str_copy(ptr %a811, ptr %a810)
%t812 = load { ptr, i64, i64 }, ptr %a811
store { ptr, i64, i64 } %t812, ptr %a813
%t814 = load ptr, ptr %a1
%t815 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } { ptr @.str.5395, i64 32, i64 0 }, ptr %a817
store { ptr, i64, i64 } %t815, ptr %a818
call void @finch_str_concat(ptr %a816, ptr %a817, ptr %a818)
%t819 = load { ptr, i64, i64 }, ptr %a816
store { ptr, i64, i64 } %t819, ptr %a821
store { ptr, i64, i64 } { ptr @.str.5396, i64 6, i64 0 }, ptr %a822
call void @finch_str_concat(ptr %a820, ptr %a821, ptr %a822)
%t823 = load { ptr, i64, i64 }, ptr %a820
%t824 = load { ptr, i64, i64 }, ptr %a813
store { ptr, i64, i64 } %t823, ptr %a826
store { ptr, i64, i64 } %t824, ptr %a827
call void @finch_str_concat(ptr %a825, ptr %a826, ptr %a827)
%t828 = load { ptr, i64, i64 }, ptr %a825
store { ptr, i64, i64 } %t828, ptr %a830
store { ptr, i64, i64 } { ptr @.str.5397, i64 6, i64 0 }, ptr %a831
call void @finch_str_concat(ptr %a829, ptr %a830, ptr %a831)
%t832 = load { ptr, i64, i64 }, ptr %a829
%t833 = load ptr, ptr %a1
%t834 = load %S.ast.Type, ptr %a15
%t835 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t833, %S.ast.Type %t834)
store { ptr, i64, i64 } %t832, ptr %a837
store { ptr, i64, i64 } %t835, ptr %a838
call void @finch_str_concat(ptr %a836, ptr %a837, ptr %a838)
%t839 = load { ptr, i64, i64 }, ptr %a836
store { ptr, i64, i64 } %t839, ptr %a841
store { ptr, i64, i64 } { ptr @.str.5398, i64 1, i64 0 }, ptr %a842
call void @finch_str_concat(ptr %a840, ptr %a841, ptr %a842)
%t843 = load { ptr, i64, i64 }, ptr %a840
call void @finch.gen.emit(ptr %t814, { ptr, i64, i64 } %t843)
%t844 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5399, i64 4, i64 0 })
%t845 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t844, 1
ret %S.gen.Val %t845
endif8069:
%t846 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } %t846, ptr %a847
store { ptr, i64, i64 } { ptr @.str.5400, i64 7, i64 0 }, ptr %a848
%t849 = call i32 @finch_str_eq(ptr %a847, ptr %a848)
%t850 = icmp ne i32 %t849, 0
br i1 %t850, label %then8074, label %endif8076
then8074:
%t851 = load ptr, ptr %a1
%t852 = load %S.ast.Node, ptr %a2
call void @finch.gen.need(ptr %t851, %S.ast.Node %t852, i64 0)
%t853 = load ptr, ptr %a1
%t854 = load { ptr, i64, i64 }, ptr %a37
%t855 = call { ptr, i64, i64 } @finch.gen.load(ptr %t853, { ptr, i64, i64 } { ptr @.str.5401, i64 3, i64 0 }, { ptr, i64, i64 } %t854)
store { ptr, i64, i64 } %t855, ptr %a856
%t857 = load ptr, ptr %a1
%t858 = load { ptr, i64, i64 }, ptr %a3
%t859 = call { ptr, i64, i64 } @finch.gen.load(ptr %t857, { ptr, i64, i64 } { ptr @.str.5402, i64 3, i64 0 }, { ptr, i64, i64 } %t858)
store { ptr, i64, i64 } %t859, ptr %a860
%t861 = load ptr, ptr %a1
%t862 = load { ptr, i64, i64 }, ptr %a856
store { ptr, i64, i64 } { ptr @.str.5403, i64 9, i64 0 }, ptr %a864
store { ptr, i64, i64 } %t862, ptr %a865
call void @finch_str_concat(ptr %a863, ptr %a864, ptr %a865)
%t866 = load { ptr, i64, i64 }, ptr %a863
store { ptr, i64, i64 } %t866, ptr %a868
store { ptr, i64, i64 } { ptr @.str.5404, i64 3, i64 0 }, ptr %a869
call void @finch_str_concat(ptr %a867, ptr %a868, ptr %a869)
%t870 = load { ptr, i64, i64 }, ptr %a867
%t871 = call { ptr, i64, i64 } @finch.gen.op(ptr %t861, { ptr, i64, i64 } %t870)
store { ptr, i64, i64 } %t871, ptr %a872
%t873 = load ptr, ptr %a1
%t874 = load { ptr, i64, i64 }, ptr %a872
%t875 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t873, { ptr, i64, i64 } %t874)
store { ptr, i64, i64 } %t875, ptr %a876
%t877 = load ptr, ptr %a1
%t878 = load { ptr, i64, i64 }, ptr %a19
store { ptr, i64, i64 } { ptr @.str.5405, i64 23, i64 0 }, ptr %a880
store { ptr, i64, i64 } %t878, ptr %a881
call void @finch_str_concat(ptr %a879, ptr %a880, ptr %a881)
%t882 = load { ptr, i64, i64 }, ptr %a879
store { ptr, i64, i64 } %t882, ptr %a884
store { ptr, i64, i64 } { ptr @.str.5406, i64 6, i64 0 }, ptr %a885
call void @finch_str_concat(ptr %a883, ptr %a884, ptr %a885)
%t886 = load { ptr, i64, i64 }, ptr %a883
%t887 = load { ptr, i64, i64 }, ptr %a860
store { ptr, i64, i64 } %t886, ptr %a889
store { ptr, i64, i64 } %t887, ptr %a890
call void @finch_str_concat(ptr %a888, ptr %a889, ptr %a890)
%t891 = load { ptr, i64, i64 }, ptr %a888
store { ptr, i64, i64 } %t891, ptr %a893
store { ptr, i64, i64 } { ptr @.str.5407, i64 6, i64 0 }, ptr %a894
call void @finch_str_concat(ptr %a892, ptr %a893, ptr %a894)
%t895 = load { ptr, i64, i64 }, ptr %a892
%t896 = load { ptr, i64, i64 }, ptr %a876
%t897 = extractvalue { ptr, i64, i64 } %t896, 1
%t898 = icmp uge i64 3, %t897
br i1 %t898, label %range8077, label %inrange8078
range8077:
call void @finch_panic_index(ptr @.str.5408, i64 4886, i64 3, i64 %t897)
unreachable
inrange8078:
%t899 = extractvalue { ptr, i64, i64 } %t896, 0
%t900 = getelementptr inbounds { ptr, i64, i64 }, ptr %t899, i64 3
%t901 = load { ptr, i64, i64 }, ptr %t900
store { ptr, i64, i64 } %t895, ptr %a903
store { ptr, i64, i64 } %t901, ptr %a904
call void @finch_str_concat(ptr %a902, ptr %a903, ptr %a904)
%t905 = load { ptr, i64, i64 }, ptr %a902
%t906 = call { ptr, i64, i64 } @finch.gen.op(ptr %t877, { ptr, i64, i64 } %t905)
store { ptr, i64, i64 } %t906, ptr %a907
%t908 = load ptr, ptr %a1
%t909 = load ptr, ptr %a1
%t910 = load { ptr, i64, i64 }, ptr %a856
store { ptr, i64, i64 } { ptr @.str.5410, i64 8, i64 0 }, ptr %a912
store { ptr, i64, i64 } %t910, ptr %a913
call void @finch_str_concat(ptr %a911, ptr %a912, ptr %a913)
%t914 = load { ptr, i64, i64 }, ptr %a911
store { ptr, i64, i64 } %t914, ptr %a916
store { ptr, i64, i64 } { ptr @.str.5411, i64 3, i64 0 }, ptr %a917
call void @finch_str_concat(ptr %a915, ptr %a916, ptr %a917)
%t918 = load { ptr, i64, i64 }, ptr %a915
%t919 = call { ptr, i64, i64 } @finch.gen.op(ptr %t909, { ptr, i64, i64 } %t918)
store { ptr, i64, i64 } { ptr @.str.5409, i64 8, 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
store { ptr, i64, i64 } %t923, ptr %a925
store { ptr, i64, i64 } { ptr @.str.5412, i64 2, i64 0 }, ptr %a926
call void @finch_str_concat(ptr %a924, ptr %a925, ptr %a926)
%t927 = load { ptr, i64, i64 }, ptr %a924
%t928 = load { ptr, i64, i64 }, ptr %a876
%t929 = extractvalue { ptr, i64, i64 } %t928, 1
%t930 = icmp uge i64 3, %t929
br i1 %t930, label %range8079, label %inrange8080
range8079:
call void @finch_panic_index(ptr @.str.5413, i64 4887, i64 3, i64 %t929)
unreachable
inrange8080:
%t931 = extractvalue { ptr, i64, i64 } %t928, 0
%t932 = getelementptr inbounds { ptr, i64, i64 }, ptr %t931, i64 3
%t933 = load { ptr, i64, i64 }, ptr %t932
store { ptr, i64, i64 } %t927, ptr %a935
store { ptr, i64, i64 } %t933, ptr %a936
call void @finch_str_concat(ptr %a934, ptr %a935, ptr %a936)
%t937 = load { ptr, i64, i64 }, ptr %a934
%t938 = call { ptr, i64, i64 } @finch.gen.op(ptr %t908, { ptr, i64, i64 } %t937)
store { ptr, i64, i64 } %t938, ptr %a939
%t940 = load ptr, ptr %a1
%t941 = load { ptr, i64, i64 }, ptr %a19
store { ptr, i64, i64 } { ptr @.str.5414, i64 23, i64 0 }, ptr %a943
store { ptr, i64, i64 } %t941, ptr %a944
call void @finch_str_concat(ptr %a942, ptr %a943, ptr %a944)
%t945 = load { ptr, i64, i64 }, ptr %a942
store { ptr, i64, i64 } %t945, ptr %a947
store { ptr, i64, i64 } { ptr @.str.5415, i64 6, i64 0 }, ptr %a948
call void @finch_str_concat(ptr %a946, ptr %a947, ptr %a948)
%t949 = load { ptr, i64, i64 }, ptr %a946
%t950 = load { ptr, i64, i64 }, ptr %a860
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)
%t954 = load { ptr, i64, i64 }, ptr %a951
store { ptr, i64, i64 } %t954, ptr %a956
store { ptr, i64, i64 } { ptr @.str.5416, i64 6, i64 0 }, ptr %a957
call void @finch_str_concat(ptr %a955, ptr %a956, ptr %a957)
%t958 = load { ptr, i64, i64 }, ptr %a955
%t959 = load { ptr, i64, i64 }, ptr %a939
store { ptr, i64, i64 } %t958, ptr %a961
store { ptr, i64, i64 } %t959, ptr %a962
call void @finch_str_concat(ptr %a960, ptr %a961, ptr %a962)
%t963 = load { ptr, i64, i64 }, ptr %a960
%t964 = call { ptr, i64, i64 } @finch.gen.op(ptr %t940, { ptr, i64, i64 } %t963)
store { ptr, i64, i64 } %t964, ptr %a965
%t966 = load ptr, ptr %a1
%t967 = load { ptr, i64, i64 }, ptr %a19
%t968 = load { ptr, i64, i64 }, ptr %a907
%t969 = call { ptr, i64, i64 } @finch.gen.load(ptr %t966, { ptr, i64, i64 } %t967, { ptr, i64, i64 } %t968)
store { ptr, i64, i64 } %t969, ptr %a970
%t971 = load ptr, ptr %a1
%t972 = load { ptr, i64, i64 }, ptr %a19
%t973 = load { ptr, i64, i64 }, ptr %a965
%t974 = call { ptr, i64, i64 } @finch.gen.load(ptr %t971, { ptr, i64, i64 } %t972, { ptr, i64, i64 } %t973)
store { ptr, i64, i64 } %t974, ptr %a975
%t976 = load ptr, ptr %a1
%t977 = load { ptr, i64, i64 }, ptr %a19
%t978 = load { ptr, i64, i64 }, ptr %a975
%t979 = load { ptr, i64, i64 }, ptr %a907
call void @finch.gen.store(ptr %t976, { ptr, i64, i64 } %t977, { ptr, i64, i64 } %t978, { ptr, i64, i64 } %t979)
%t980 = load ptr, ptr %a1
%t981 = load { ptr, i64, i64 }, ptr %a19
%t982 = load { ptr, i64, i64 }, ptr %a970
%t983 = load { ptr, i64, i64 }, ptr %a965
call void @finch.gen.store(ptr %t980, { ptr, i64, i64 } %t981, { ptr, i64, i64 } %t982, { ptr, i64, i64 } %t983)
%t984 = load ptr, ptr %a1
%t985 = load { ptr, i64, i64 }, ptr %a876
call void @finch.gen.loopEnd(ptr %t984, { ptr, i64, i64 } %t985)
%t986 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5417, i64 4, i64 0 })
%t987 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t986, 1
ret %S.gen.Val %t987
endif8076:
%t988 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } %t988, ptr %a989
store { ptr, i64, i64 } { ptr @.str.5418, i64 5, i64 0 }, ptr %a990
%t991 = call i32 @finch_str_eq(ptr %a989, ptr %a990)
%t992 = icmp ne i32 %t991, 0
br i1 %t992, label %then8081, label %endif8083
then8081:
%t993 = load ptr, ptr %a1
%t994 = load %S.ast.Node, ptr %a2
call void @finch.gen.need(ptr %t993, %S.ast.Node %t994, i64 2)
%t995 = load ptr, ptr %a1
%t996 = load ptr, ptr %a1
%t997 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t998 = load { ptr, i64, i64 }, ptr %t997
%t999 = extractvalue { ptr, i64, i64 } %t998, 1
%t1000 = icmp uge i64 1, %t999
br i1 %t1000, label %range8084, label %inrange8085
range8084:
call void @finch_panic_index(ptr @.str.5419, i64 4898, i64 1, i64 %t999)
unreachable
inrange8085:
%t1001 = extractvalue { ptr, i64, i64 } %t998, 0
%t1002 = getelementptr inbounds %S.ast.Node, ptr %t1001, i64 1
%t1003 = load %S.ast.Node, ptr %t1002
%t1004 = call %S.gen.Val @finch.gen.expr(ptr %t996, %S.ast.Node %t1003)
%t1005 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5420, i64 3, i64 0 })
%t1006 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t1007 = load { ptr, i64, i64 }, ptr %t1006
%t1008 = extractvalue { ptr, i64, i64 } %t1007, 1
%t1009 = icmp uge i64 1, %t1008
br i1 %t1009, label %range8086, label %inrange8087
range8086:
call void @finch_panic_index(ptr @.str.5421, i64 4898, i64 1, i64 %t1008)
unreachable
inrange8087:
%t1010 = extractvalue { ptr, i64, i64 } %t1007, 0
%t1011 = getelementptr inbounds %S.ast.Node, ptr %t1010, i64 1
%t1012 = load %S.ast.Node, ptr %t1011
%t1013 = call %S.gen.Val @finch.gen.coerce(ptr %t995, %S.gen.Val %t1004, %S.ast.Type %t1005, %S.ast.Node %t1012, { ptr, i64, i64 } { ptr @.str.5422, i64 9, i64 0 })
%t1014 = extractvalue %S.gen.Val %t1013, 0
store { ptr, i64, i64 } %t1014, ptr %a1015
call void @finch_str_copy(ptr %a1016, ptr %a1015)
%t1017 = load { ptr, i64, i64 }, ptr %a1016
store { ptr, i64, i64 } %t1017, ptr %a1018
%t1019 = load ptr, ptr %a1
%t1020 = load ptr, ptr %a1
%t1021 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t1022 = load { ptr, i64, i64 }, ptr %t1021
%t1023 = extractvalue { ptr, i64, i64 } %t1022, 1
%t1024 = icmp uge i64 2, %t1023
br i1 %t1024, label %range8088, label %inrange8089
range8088:
call void @finch_panic_index(ptr @.str.5423, i64 4899, i64 2, i64 %t1023)
unreachable
inrange8089:
%t1025 = extractvalue { ptr, i64, i64 } %t1022, 0
%t1026 = getelementptr inbounds %S.ast.Node, ptr %t1025, i64 2
%t1027 = load %S.ast.Node, ptr %t1026
%t1028 = call %S.gen.Val @finch.gen.expr(ptr %t1020, %S.ast.Node %t1027)
%t1029 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5424, i64 3, i64 0 })
%t1030 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t1031 = load { ptr, i64, i64 }, ptr %t1030
%t1032 = extractvalue { ptr, i64, i64 } %t1031, 1
%t1033 = icmp uge i64 2, %t1032
br i1 %t1033, label %range8090, label %inrange8091
range8090:
call void @finch_panic_index(ptr @.str.5425, i64 4899, i64 2, i64 %t1032)
unreachable
inrange8091:
%t1034 = extractvalue { ptr, i64, i64 } %t1031, 0
%t1035 = getelementptr inbounds %S.ast.Node, ptr %t1034, i64 2
%t1036 = load %S.ast.Node, ptr %t1035
%t1037 = call %S.gen.Val @finch.gen.coerce(ptr %t1019, %S.gen.Val %t1028, %S.ast.Type %t1029, %S.ast.Node %t1036, { ptr, i64, i64 } { ptr @.str.5426, i64 7, i64 0 })
%t1038 = extractvalue %S.gen.Val %t1037, 0
store { ptr, i64, i64 } %t1038, ptr %a1039
call void @finch_str_copy(ptr %a1040, ptr %a1039)
%t1041 = load { ptr, i64, i64 }, ptr %a1040
store { ptr, i64, i64 } %t1041, ptr %a1042
%t1043 = load ptr, ptr %a1
%t1044 = load { ptr, i64, i64 }, ptr %a37
%t1045 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1043, { ptr, i64, i64 } { ptr @.str.5427, i64 3, i64 0 }, { ptr, i64, i64 } %t1044)
store { ptr, i64, i64 } %t1045, ptr %a1046
%t1047 = load ptr, ptr %a1
%t1048 = load { ptr, i64, i64 }, ptr %a1018
store { ptr, i64, i64 } { ptr @.str.5428, i64 13, 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.5429, i64 3, i64 0 }, ptr %a1055
call void @finch_str_concat(ptr %a1053, ptr %a1054, ptr %a1055)
%t1056 = load { ptr, i64, i64 }, ptr %a1053
%t1057 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1047, { ptr, i64, i64 } %t1056)
store { ptr, i64, i64 } %t1057, ptr %a1058
%t1059 = load ptr, ptr %a1
%t1060 = load { ptr, i64, i64 }, ptr %a1042
store { ptr, i64, i64 } { ptr @.str.5430, i64 13, i64 0 }, ptr %a1062
store { ptr, i64, i64 } %t1060, ptr %a1063
call void @finch_str_concat(ptr %a1061, ptr %a1062, ptr %a1063)
%t1064 = load { ptr, i64, i64 }, ptr %a1061
store { ptr, i64, i64 } %t1064, ptr %a1066
store { ptr, i64, i64 } { ptr @.str.5431, i64 2, i64 0 }, ptr %a1067
call void @finch_str_concat(ptr %a1065, ptr %a1066, ptr %a1067)
%t1068 = load { ptr, i64, i64 }, ptr %a1065
%t1069 = load { ptr, i64, i64 }, ptr %a1046
store { ptr, i64, i64 } %t1068, ptr %a1071
store { ptr, i64, i64 } %t1069, ptr %a1072
call void @finch_str_concat(ptr %a1070, ptr %a1071, ptr %a1072)
%t1073 = load { ptr, i64, i64 }, ptr %a1070
%t1074 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1059, { ptr, i64, i64 } %t1073)
store { ptr, i64, i64 } %t1074, ptr %a1075
%t1076 = load ptr, ptr %a1
%t1077 = load { ptr, i64, i64 }, ptr %a1018
store { ptr, i64, i64 } { ptr @.str.5432, i64 13, i64 0 }, ptr %a1079
store { ptr, i64, i64 } %t1077, ptr %a1080
call void @finch_str_concat(ptr %a1078, ptr %a1079, ptr %a1080)
%t1081 = load { ptr, i64, i64 }, ptr %a1078
store { ptr, i64, i64 } %t1081, ptr %a1083
store { ptr, i64, i64 } { ptr @.str.5433, i64 2, i64 0 }, ptr %a1084
call void @finch_str_concat(ptr %a1082, ptr %a1083, ptr %a1084)
%t1085 = load { ptr, i64, i64 }, ptr %a1082
%t1086 = load { ptr, i64, i64 }, ptr %a1042
store { ptr, i64, i64 } %t1085, ptr %a1088
store { ptr, i64, i64 } %t1086, ptr %a1089
call void @finch_str_concat(ptr %a1087, ptr %a1088, ptr %a1089)
%t1090 = load { ptr, i64, i64 }, ptr %a1087
%t1091 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1076, { ptr, i64, i64 } %t1090)
store { ptr, i64, i64 } %t1091, ptr %a1092
%t1093 = load ptr, ptr %a1
%t1094 = load ptr, ptr %a1
%t1095 = load ptr, ptr %a1
%t1096 = load { ptr, i64, i64 }, ptr %a1058
store { ptr, i64, i64 } { ptr @.str.5435, i64 6, i64 0 }, ptr %a1098
store { ptr, i64, i64 } %t1096, ptr %a1099
call void @finch_str_concat(ptr %a1097, ptr %a1098, ptr %a1099)
%t1100 = load { ptr, i64, i64 }, ptr %a1097
store { ptr, i64, i64 } %t1100, ptr %a1102
store { ptr, i64, i64 } { ptr @.str.5436, i64 2, i64 0 }, ptr %a1103
call void @finch_str_concat(ptr %a1101, ptr %a1102, ptr %a1103)
%t1104 = load { ptr, i64, i64 }, ptr %a1101
%t1105 = load { ptr, i64, i64 }, ptr %a1075
store { ptr, i64, i64 } %t1104, ptr %a1107
store { ptr, i64, i64 } %t1105, ptr %a1108
call void @finch_str_concat(ptr %a1106, ptr %a1107, ptr %a1108)
%t1109 = load { ptr, i64, i64 }, ptr %a1106
%t1110 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1095, { ptr, i64, i64 } %t1109)
store { ptr, i64, i64 } { ptr @.str.5434, i64 6, i64 0 }, ptr %a1112
store { ptr, i64, i64 } %t1110, ptr %a1113
call void @finch_str_concat(ptr %a1111, ptr %a1112, ptr %a1113)
%t1114 = load { ptr, i64, i64 }, ptr %a1111
store { ptr, i64, i64 } %t1114, ptr %a1116
store { ptr, i64, i64 } { ptr @.str.5437, i64 2, i64 0 }, ptr %a1117
call void @finch_str_concat(ptr %a1115, ptr %a1116, ptr %a1117)
%t1118 = load { ptr, i64, i64 }, ptr %a1115
%t1119 = load { ptr, i64, i64 }, ptr %a1092
store { ptr, i64, i64 } %t1118, ptr %a1121
store { ptr, i64, i64 } %t1119, ptr %a1122
call void @finch_str_concat(ptr %a1120, ptr %a1121, ptr %a1122)
%t1123 = load { ptr, i64, i64 }, ptr %a1120
%t1124 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1094, { ptr, i64, i64 } %t1123)
%t1125 = load %S.ast.Node, ptr %a2
call void @finch.gen.panicIf(ptr %t1093, { ptr, i64, i64 } %t1124, { ptr, i64, i64 } { ptr @.str.5438, i64 33, i64 0 }, %S.ast.Node %t1125)
%t1126 = load ptr, ptr %a1
%t1127 = load { ptr, i64, i64 }, ptr %a1042
store { ptr, i64, i64 } { ptr @.str.5439, i64 8, 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.5440, i64 2, i64 0 }, ptr %a1134
call void @finch_str_concat(ptr %a1132, ptr %a1133, ptr %a1134)
%t1135 = load { ptr, i64, i64 }, ptr %a1132
%t1136 = load { ptr, i64, i64 }, ptr %a1018
store { ptr, i64, i64 } %t1135, ptr %a1138
store { ptr, i64, i64 } %t1136, ptr %a1139
call void @finch_str_concat(ptr %a1137, ptr %a1138, ptr %a1139)
%t1140 = load { ptr, i64, i64 }, ptr %a1137
%t1141 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1126, { ptr, i64, i64 } %t1140)
store { ptr, i64, i64 } %t1141, ptr %a1142
%t1143 = load ptr, ptr %a1
%t1144 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1143, { ptr, i64, i64 } { ptr @.str.5441, i64 17, i64 0 })
store { ptr, i64, i64 } %t1144, ptr %a1145
%t1146 = load ptr, ptr %a1
%t1147 = load { ptr, i64, i64 }, ptr %a1145
store { ptr, i64, i64 } { ptr @.str.5442, i64 30, i64 0 }, ptr %a1149
store { ptr, i64, i64 } %t1147, ptr %a1150
call void @finch_str_concat(ptr %a1148, ptr %a1149, ptr %a1150)
%t1151 = load { ptr, i64, i64 }, ptr %a1148
store { ptr, i64, i64 } %t1151, ptr %a1153
store { ptr, i64, i64 } { ptr @.str.5443, i64 6, i64 0 }, ptr %a1154
call void @finch_str_concat(ptr %a1152, ptr %a1153, ptr %a1154)
%t1155 = load { ptr, i64, i64 }, ptr %a1152
%t1156 = load { ptr, i64, i64 }, ptr %a1142
store { ptr, i64, i64 } %t1155, ptr %a1158
store { ptr, i64, i64 } %t1156, ptr %a1159
call void @finch_str_concat(ptr %a1157, ptr %a1158, ptr %a1159)
%t1160 = load { ptr, i64, i64 }, ptr %a1157
store { ptr, i64, i64 } %t1160, ptr %a1162
store { ptr, i64, i64 } { ptr @.str.5444, i64 6, i64 0 }, ptr %a1163
call void @finch_str_concat(ptr %a1161, ptr %a1162, ptr %a1163)
%t1164 = load { ptr, i64, i64 }, ptr %a1161
%t1165 = load ptr, ptr %a1
%t1166 = load %S.ast.Type, ptr %a15
%t1167 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1165, %S.ast.Type %t1166)
store { ptr, i64, i64 } %t1164, ptr %a1169
store { ptr, i64, i64 } %t1167, ptr %a1170
call void @finch_str_concat(ptr %a1168, ptr %a1169, ptr %a1170)
%t1171 = load { ptr, i64, i64 }, ptr %a1168
store { ptr, i64, i64 } %t1171, ptr %a1173
store { ptr, i64, i64 } { ptr @.str.5445, i64 1, i64 0 }, ptr %a1174
call void @finch_str_concat(ptr %a1172, ptr %a1173, ptr %a1174)
%t1175 = load { ptr, i64, i64 }, ptr %a1172
call void @finch.gen.emit(ptr %t1146, { ptr, i64, i64 } %t1175)
%t1176 = load ptr, ptr %a1
%t1177 = load { ptr, i64, i64 }, ptr %a3
%t1178 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1176, { ptr, i64, i64 } { ptr @.str.5446, i64 3, i64 0 }, { ptr, i64, i64 } %t1177)
store { ptr, i64, i64 } %t1178, ptr %a1179
%t1180 = load ptr, ptr %a1
%t1181 = load { ptr, i64, i64 }, ptr %a1145
%t1182 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1180, { ptr, i64, i64 } { ptr @.str.5447, i64 3, i64 0 }, { ptr, i64, i64 } %t1181)
store { ptr, i64, i64 } %t1182, ptr %a1183
%t1184 = load ptr, ptr %a1
%t1185 = load { ptr, i64, i64 }, ptr %a1142
%t1186 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t1184, { ptr, i64, i64 } %t1185)
store { ptr, i64, i64 } %t1186, ptr %a1187
%t1188 = load ptr, ptr %a1
%t1189 = load { ptr, i64, i64 }, ptr %a19
store { ptr, i64, i64 } { ptr @.str.5448, i64 23, i64 0 }, ptr %a1191
store { ptr, i64, i64 } %t1189, ptr %a1192
call void @finch_str_concat(ptr %a1190, ptr %a1191, ptr %a1192)
%t1193 = load { ptr, i64, i64 }, ptr %a1190
store { ptr, i64, i64 } %t1193, ptr %a1195
store { ptr, i64, i64 } { ptr @.str.5449, i64 6, i64 0 }, ptr %a1196
call void @finch_str_concat(ptr %a1194, ptr %a1195, ptr %a1196)
%t1197 = load { ptr, i64, i64 }, ptr %a1194
%t1198 = load { ptr, i64, i64 }, ptr %a1183
store { ptr, i64, i64 } %t1197, ptr %a1200
store { ptr, i64, i64 } %t1198, ptr %a1201
call void @finch_str_concat(ptr %a1199, ptr %a1200, ptr %a1201)
%t1202 = load { ptr, i64, i64 }, ptr %a1199
store { ptr, i64, i64 } %t1202, ptr %a1204
store { ptr, i64, i64 } { ptr @.str.5450, i64 6, i64 0 }, ptr %a1205
call void @finch_str_concat(ptr %a1203, ptr %a1204, ptr %a1205)
%t1206 = load { ptr, i64, i64 }, ptr %a1203
%t1207 = load { ptr, i64, i64 }, ptr %a1187
%t1208 = extractvalue { ptr, i64, i64 } %t1207, 1
%t1209 = icmp uge i64 3, %t1208
br i1 %t1209, label %range8092, label %inrange8093
range8092:
call void @finch_panic_index(ptr @.str.5451, i64 4911, i64 3, i64 %t1208)
unreachable
inrange8093:
%t1210 = extractvalue { ptr, i64, i64 } %t1207, 0
%t1211 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1210, i64 3
%t1212 = load { ptr, i64, i64 }, ptr %t1211
store { ptr, i64, i64 } %t1206, ptr %a1214
store { ptr, i64, i64 } %t1212, ptr %a1215
call void @finch_str_concat(ptr %a1213, ptr %a1214, ptr %a1215)
%t1216 = load { ptr, i64, i64 }, ptr %a1213
%t1217 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1188, { ptr, i64, i64 } %t1216)
store { ptr, i64, i64 } %t1217, ptr %a1218
%t1219 = load ptr, ptr %a1
%t1220 = load { ptr, i64, i64 }, ptr %a19
store { ptr, i64, i64 } { ptr @.str.5452, i64 23, i64 0 }, ptr %a1222
store { ptr, i64, i64 } %t1220, ptr %a1223
call void @finch_str_concat(ptr %a1221, ptr %a1222, ptr %a1223)
%t1224 = load { ptr, i64, i64 }, ptr %a1221
store { ptr, i64, i64 } %t1224, ptr %a1226
store { ptr, i64, i64 } { ptr @.str.5453, i64 6, i64 0 }, ptr %a1227
call void @finch_str_concat(ptr %a1225, ptr %a1226, ptr %a1227)
%t1228 = load { ptr, i64, i64 }, ptr %a1225
%t1229 = load { ptr, i64, i64 }, ptr %a1179
store { ptr, i64, i64 } %t1228, ptr %a1231
store { ptr, i64, i64 } %t1229, ptr %a1232
call void @finch_str_concat(ptr %a1230, ptr %a1231, ptr %a1232)
%t1233 = load { ptr, i64, i64 }, ptr %a1230
store { ptr, i64, i64 } %t1233, ptr %a1235
store { ptr, i64, i64 } { ptr @.str.5454, i64 6, i64 0 }, ptr %a1236
call void @finch_str_concat(ptr %a1234, ptr %a1235, ptr %a1236)
%t1237 = load { ptr, i64, i64 }, ptr %a1234
%t1238 = load ptr, ptr %a1
%t1239 = load { ptr, i64, i64 }, ptr %a1018
store { ptr, i64, i64 } { ptr @.str.5455, i64 8, i64 0 }, ptr %a1241
store { ptr, i64, i64 } %t1239, ptr %a1242
call void @finch_str_concat(ptr %a1240, ptr %a1241, ptr %a1242)
%t1243 = load { ptr, i64, i64 }, ptr %a1240
store { ptr, i64, i64 } %t1243, ptr %a1245
store { ptr, i64, i64 } { ptr @.str.5456, i64 2, i64 0 }, ptr %a1246
call void @finch_str_concat(ptr %a1244, ptr %a1245, ptr %a1246)
%t1247 = load { ptr, i64, i64 }, ptr %a1244
%t1248 = load { ptr, i64, i64 }, ptr %a1187
%t1249 = extractvalue { ptr, i64, i64 } %t1248, 1
%t1250 = icmp uge i64 3, %t1249
br i1 %t1250, label %range8094, label %inrange8095
range8094:
call void @finch_panic_index(ptr @.str.5457, i64 4912, i64 3, i64 %t1249)
unreachable
inrange8095:
%t1251 = extractvalue { ptr, i64, i64 } %t1248, 0
%t1252 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1251, i64 3
%t1253 = load { ptr, i64, i64 }, ptr %t1252
store { ptr, i64, i64 } %t1247, ptr %a1255
store { ptr, i64, i64 } %t1253, ptr %a1256
call void @finch_str_concat(ptr %a1254, ptr %a1255, ptr %a1256)
%t1257 = load { ptr, i64, i64 }, ptr %a1254
%t1258 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1238, { ptr, i64, i64 } %t1257)
store { ptr, i64, i64 } %t1237, ptr %a1260
store { ptr, i64, i64 } %t1258, ptr %a1261
call void @finch_str_concat(ptr %a1259, ptr %a1260, ptr %a1261)
%t1262 = load { ptr, i64, i64 }, ptr %a1259
%t1263 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1219, { ptr, i64, i64 } %t1262)
store { ptr, i64, i64 } %t1263, ptr %a1264
%t1265 = load ptr, ptr %a1
%t1266 = load { ptr, i64, i64 }, ptr %a1218
%t1267 = load { ptr, i64, i64 }, ptr %a1264
%t1268 = load %S.ast.Type, ptr %a15
call void @finch.gen.copyAt(ptr %t1265, { ptr, i64, i64 } %t1266, { ptr, i64, i64 } %t1267, %S.ast.Type %t1268)
%t1269 = load ptr, ptr %a1
%t1270 = load { ptr, i64, i64 }, ptr %a1187
call void @finch.gen.loopEnd(ptr %t1269, { ptr, i64, i64 } %t1270)
%t1271 = load ptr, ptr %a1
%t1272 = load { ptr, i64, i64 }, ptr %a1145
%t1273 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1271, { ptr, i64, i64 } { ptr @.str.5458, i64 17, i64 0 }, { ptr, i64, i64 } %t1272)
%t1274 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1273, 0
%t1275 = load %S.ast.Type, ptr %a4
store %S.ast.Type %t1275, ptr %a1276
call void @finch.copy.S_ast_Type(ptr %a1277, ptr %a1276)
%t1278 = load %S.ast.Type, ptr %a1277
%t1279 = insertvalue %S.gen.Val %t1274, %S.ast.Type %t1278, 1
%t1280 = insertvalue %S.gen.Val %t1279, i1 true, 2
ret %S.gen.Val %t1280
endif8083:
%t1281 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } %t1281, ptr %a1282
store { ptr, i64, i64 } { ptr @.str.5459, i64 4, i64 0 }, ptr %a1283
%t1284 = call i32 @finch_str_eq(ptr %a1282, ptr %a1283)
%t1285 = icmp ne i32 %t1284, 0
br i1 %t1285, label %then8096, label %endif8098
then8096:
%t1286 = load ptr, ptr %a1
%t1287 = load %S.ast.Node, ptr %a2
call void @finch.gen.need(ptr %t1286, %S.ast.Node %t1287, i64 0)
%t1288 = getelementptr inbounds %S.ast.Type, ptr %a15, i32 0, i32 0
%t1289 = load { ptr, i64, i64 }, ptr %t1288
store { ptr, i64, i64 } %t1289, ptr %a1290
call void @finch_str_copy(ptr %a1291, ptr %a1290)
%t1292 = load { ptr, i64, i64 }, ptr %a1291
store { ptr, i64, i64 } %t1292, ptr %a1293
%t1294 = load %S.ast.Type, ptr %a15
%t1295 = call i1 @finch.gen.isNumber(%S.ast.Type %t1294)
%t1296 = xor i1 %t1295, true
br label %logic.from8099
logic.from8099:
br i1 %t1296, label %logic.rhs8100, label %logic.end8101
logic.rhs8100:
%t1297 = load { ptr, i64, i64 }, ptr %a1293
store { ptr, i64, i64 } %t1297, ptr %a1298
store { ptr, i64, i64 } { ptr @.str.5460, i64 4, i64 0 }, ptr %a1299
%t1300 = call i32 @finch_str_eq(ptr %a1298, ptr %a1299)
%t1301 = icmp eq i32 %t1300, 0
br label %logic.rend8102
logic.rend8102:
br label %logic.end8101
logic.end8101:
%t1302 = phi i1 [ false, %logic.from8099 ], [ %t1301, %logic.rend8102 ]
br label %logic.from8103
logic.from8103:
br i1 %t1302, label %logic.rhs8104, label %logic.end8105
logic.rhs8104:
%t1303 = load { ptr, i64, i64 }, ptr %a1293
store { ptr, i64, i64 } %t1303, ptr %a1304
store { ptr, i64, i64 } { ptr @.str.5461, i64 3, i64 0 }, ptr %a1305
%t1306 = call i32 @finch_str_eq(ptr %a1304, ptr %a1305)
%t1307 = icmp eq i32 %t1306, 0
br label %logic.rend8106
logic.rend8106:
br label %logic.end8105
logic.end8105:
%t1308 = phi i1 [ false, %logic.from8103 ], [ %t1307, %logic.rend8106 ]
br i1 %t1308, label %then8107, label %endif8109
then8107:
%t1309 = load ptr, ptr %a1
%t1310 = load %S.ast.Node, ptr %a2
call void @finch.gen.fail(ptr %t1309, %S.ast.Node %t1310, { ptr, i64, i64 } { ptr @.str.5462, i64 47, i64 0 })
br label %endif8109
endif8109:
%t1311 = load ptr, ptr %a1
%t1312 = load %S.ast.Type, ptr %a15
%t1313 = call { ptr, i64, i64 } @finch.gen.cmpFn(ptr %t1311, %S.ast.Type %t1312)
store { ptr, i64, i64 } %t1313, ptr %a1314
%t1315 = load ptr, ptr %a1
%t1316 = load { ptr, i64, i64 }, ptr %a37
%t1317 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1315, { ptr, i64, i64 } { ptr @.str.5463, i64 3, i64 0 }, { ptr, i64, i64 } %t1316)
store { ptr, i64, i64 } %t1317, ptr %a1318
%t1319 = load ptr, ptr %a1
%t1320 = load { ptr, i64, i64 }, ptr %a3
%t1321 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1319, { ptr, i64, i64 } { ptr @.str.5464, i64 3, i64 0 }, { ptr, i64, i64 } %t1320)
store { ptr, i64, i64 } %t1321, ptr %a1322
%t1323 = load ptr, ptr %a1
%t1324 = load { ptr, i64, i64 }, ptr %a1322
store { ptr, i64, i64 } { ptr @.str.5465, i64 21, i64 0 }, ptr %a1326
store { ptr, i64, i64 } %t1324, ptr %a1327
call void @finch_str_concat(ptr %a1325, ptr %a1326, ptr %a1327)
%t1328 = load { ptr, i64, i64 }, ptr %a1325
store { ptr, i64, i64 } %t1328, ptr %a1330
store { ptr, i64, i64 } { ptr @.str.5466, i64 6, i64 0 }, ptr %a1331
call void @finch_str_concat(ptr %a1329, ptr %a1330, ptr %a1331)
%t1332 = load { ptr, i64, i64 }, ptr %a1329
%t1333 = load { ptr, i64, i64 }, ptr %a1318
store { ptr, i64, i64 } %t1332, ptr %a1335
store { ptr, i64, i64 } %t1333, ptr %a1336
call void @finch_str_concat(ptr %a1334, ptr %a1335, ptr %a1336)
%t1337 = load { ptr, i64, i64 }, ptr %a1334
store { ptr, i64, i64 } %t1337, ptr %a1339
store { ptr, i64, i64 } { ptr @.str.5467, i64 6, i64 0 }, ptr %a1340
call void @finch_str_concat(ptr %a1338, ptr %a1339, ptr %a1340)
%t1341 = load { ptr, i64, i64 }, ptr %a1338
%t1342 = load ptr, ptr %a1
%t1343 = load %S.ast.Type, ptr %a15
%t1344 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1342, %S.ast.Type %t1343)
store { ptr, i64, i64 } %t1341, ptr %a1346
store { ptr, i64, i64 } %t1344, ptr %a1347
call void @finch_str_concat(ptr %a1345, ptr %a1346, ptr %a1347)
%t1348 = load { ptr, i64, i64 }, ptr %a1345
store { ptr, i64, i64 } %t1348, ptr %a1350
store { ptr, i64, i64 } { ptr @.str.5468, i64 6, i64 0 }, ptr %a1351
call void @finch_str_concat(ptr %a1349, ptr %a1350, ptr %a1351)
%t1352 = load { ptr, i64, i64 }, ptr %a1349
%t1353 = load { ptr, i64, i64 }, ptr %a1314
store { ptr, i64, i64 } %t1352, ptr %a1355
store { ptr, i64, i64 } %t1353, ptr %a1356
call void @finch_str_concat(ptr %a1354, ptr %a1355, ptr %a1356)
%t1357 = load { ptr, i64, i64 }, ptr %a1354
store { ptr, i64, i64 } %t1357, ptr %a1359
store { ptr, i64, i64 } { ptr @.str.5469, i64 1, i64 0 }, ptr %a1360
call void @finch_str_concat(ptr %a1358, ptr %a1359, ptr %a1360)
%t1361 = load { ptr, i64, i64 }, ptr %a1358
call void @finch.gen.emit(ptr %t1323, { ptr, i64, i64 } %t1361)
%t1362 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5470, i64 4, i64 0 })
%t1363 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1362, 1
ret %S.gen.Val %t1363
endif8098:
%t1364 = load ptr, ptr %a1
%t1365 = load %S.ast.Node, ptr %a2
%t1366 = load { ptr, i64, i64 }, ptr %a25
store { ptr, i64, i64 } { ptr @.str.5471, i64 24, 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.5472, i64 96, i64 0 }, ptr %a1373
call void @finch_str_concat(ptr %a1371, ptr %a1372, ptr %a1373)
%t1374 = load { ptr, i64, i64 }, ptr %a1371
call void @finch.gen.fail(ptr %t1364, %S.ast.Node %t1365, { ptr, i64, i64 } %t1374)
ret %S.gen.Val zeroinitializer
}
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
%a9 = alloca { ptr, i64, i64 }, align 16
%a17 = alloca { ptr, i64, i64 }, align 16
%a18 = alloca { ptr, i64, i64 }, align 16
%a25 = alloca { ptr, i64, i64 }, align 16
%a26 = alloca { ptr, i64, i64 }, align 16
%a34 = alloca %S.gen.Saved, align 16
%a35 = 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
%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
%a59 = alloca { ptr, i64, i64 }, align 16
%a63 = 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
%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
%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
%a92 = alloca { ptr, i64, i64 }, align 16
%a93 = 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
%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
%a112 = alloca { ptr, i64, i64 }, align 16
%a113 = alloca { ptr, i64, i64 }, align 16
%a114 = 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
%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
%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
%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
%a153 = alloca { ptr, i64, i64 }, align 16
%a154 = alloca { ptr, i64, i64 }, align 16
%a155 = 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
%a166 = alloca { ptr, i64, i64 }, align 16
%a167 = alloca { ptr, i64, i64 }, align 16
%a168 = 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
%a180 = alloca { ptr, i64, i64 }, align 16
%a181 = alloca { ptr, i64, i64 }, align 16
%a182 = 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
%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
%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
%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
%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
%a232 = alloca { ptr, i64, i64 }, align 16
%a233 = alloca { ptr, i64, i64 }, align 16
%a234 = 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
%a248 = alloca { ptr, i64, i64 }, align 16
%a249 = 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.5473, i64 11, 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 %a9
%t10 = load ptr, ptr %a1
%t11 = icmp eq ptr %t10, null
br i1 %t11, label %panic8110, label %ok8111
panic8110:
call void @finch_panic(ptr @.str.5474, i64 4936, ptr @.str.5475)
unreachable
ok8111:
%t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 21
%t13 = load { ptr, i64, i64 }, ptr %t12
%t14 = load { ptr, i64, i64 }, ptr %a9
%t15 = call i1 @finch.gen.has({ ptr, i64, i64 } %t13, { ptr, i64, i64 } %t14)
br i1 %t15, label %then8112, label %endif8114
then8112:
%t16 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t16, ptr %a17
call void @finch_str_copy(ptr %a18, ptr %a17)
%t19 = load { ptr, i64, i64 }, ptr %a18
ret { ptr, i64, i64 } %t19
endif8114:
%t20 = load ptr, ptr %a1
%t21 = icmp eq ptr %t20, null
br i1 %t21, label %panic8115, label %ok8116
panic8115:
call void @finch_panic(ptr @.str.5476, i64 4939, ptr @.str.5477)
unreachable
ok8116:
%t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 21
%t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1
%t24 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t24, ptr %a25
call void @finch_str_copy(ptr %a26, ptr %a25)
%t27 = load { ptr, i64, i64 }, ptr %a26
%t28 = load i64, ptr %t23
%t29 = add i64 %t28, 1
call void @finch_arr_reserve(ptr %t22, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t30 = load ptr, ptr %t22
%t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28
store { ptr, i64, i64 } %t27, ptr %t31
store i64 %t29, ptr %t23
%t32 = load ptr, ptr %a1
%t33 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t32)
store %S.gen.Saved %t33, ptr %a34
store { ptr, i64, i64 } { ptr @.str.5478, i64 0, i64 0 }, ptr %a35
%t36 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0
%t37 = load { ptr, i64, i64 }, ptr %t36
store { ptr, i64, i64 } %t37, ptr %a38
store { ptr, i64, i64 } { ptr @.str.5479, i64 3, i64 0 }, ptr %a39
%t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39)
%t41 = icmp ne i32 %t40, 0
br i1 %t41, label %then8117, label %else8118
then8117:
%t42 = load ptr, ptr %a1
%t43 = call { ptr, i64, i64 } @finch.gen.op(ptr %t42, { ptr, i64, i64 } { ptr @.str.5480, i64 39, i64 0 })
store { ptr, i64, i64 } %t43, ptr %a44
%t45 = load ptr, ptr %a1
%t46 = load { ptr, i64, i64 }, ptr %a44
store { ptr, i64, i64 } { ptr @.str.5481, i64 10, 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.5482, i64 7, i64 0 }, ptr %a53
call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53)
%t54 = load { ptr, i64, i64 }, ptr %a51
%t55 = call { ptr, i64, i64 } @finch.gen.op(ptr %t45, { ptr, i64, i64 } %t54)
store { ptr, i64, i64 } %t55, ptr %a35
br label %endif8119
else8118:
%t56 = load ptr, ptr %a1
%t57 = load %S.ast.Type, ptr %a2
%t58 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t56, %S.ast.Type %t57)
store { ptr, i64, i64 } %t58, ptr %a59
%t60 = load ptr, ptr %a1
%t61 = load { ptr, i64, i64 }, ptr %a59
%t62 = call { ptr, i64, i64 } @finch.gen.load(ptr %t60, { ptr, i64, i64 } %t61, { ptr, i64, i64 } { ptr @.str.5483, i64 2, i64 0 })
store { ptr, i64, i64 } %t62, ptr %a63
%t64 = load ptr, ptr %a1
%t65 = load { ptr, i64, i64 }, ptr %a59
%t66 = call { ptr, i64, i64 } @finch.gen.load(ptr %t64, { ptr, i64, i64 } %t65, { ptr, i64, i64 } { ptr @.str.5484, i64 2, i64 0 })
store { ptr, i64, i64 } %t66, ptr %a67
store { ptr, i64, i64 } { ptr @.str.5485, i64 0, i64 0 }, ptr %a68
store { ptr, i64, i64 } { ptr @.str.5486, i64 0, i64 0 }, ptr %a69
%t70 = load %S.ast.Type, ptr %a2
%t71 = call i1 @finch.gen.isFloat(%S.ast.Type %t70)
br i1 %t71, label %then8120, label %else8121
then8120:
%t72 = load ptr, ptr %a1
%t73 = load { ptr, i64, i64 }, ptr %a59
store { ptr, i64, i64 } { ptr @.str.5487, i64 9, i64 0 }, ptr %a75
store { ptr, i64, i64 } %t73, ptr %a76
call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76)
%t77 = load { ptr, i64, i64 }, ptr %a74
store { ptr, i64, i64 } %t77, ptr %a79
store { ptr, i64, i64 } { ptr @.str.5488, i64 1, i64 0 }, ptr %a80
call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80)
%t81 = load { ptr, i64, i64 }, ptr %a78
%t82 = load { ptr, i64, i64 }, ptr %a63
store { ptr, i64, i64 } %t81, ptr %a84
store { ptr, i64, i64 } %t82, ptr %a85
call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85)
%t86 = load { ptr, i64, i64 }, ptr %a83
store { ptr, i64, i64 } %t86, ptr %a88
store { ptr, i64, i64 } { ptr @.str.5489, i64 2, i64 0 }, ptr %a89
call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89)
%t90 = load { ptr, i64, i64 }, ptr %a87
%t91 = load { ptr, i64, i64 }, ptr %a67
store { ptr, i64, i64 } %t90, 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
%t96 = call { ptr, i64, i64 } @finch.gen.op(ptr %t72, { ptr, i64, i64 } %t95)
store { ptr, i64, i64 } %t96, ptr %a68
%t97 = load ptr, ptr %a1
%t98 = load { ptr, i64, i64 }, ptr %a59
store { ptr, i64, i64 } { ptr @.str.5490, i64 9, i64 0 }, ptr %a100
store { ptr, i64, i64 } %t98, ptr %a101
call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101)
%t102 = load { ptr, i64, i64 }, ptr %a99
store { ptr, i64, i64 } %t102, ptr %a104
store { ptr, i64, i64 } { ptr @.str.5491, i64 1, i64 0 }, ptr %a105
call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105)
%t106 = load { ptr, i64, i64 }, ptr %a103
%t107 = load { ptr, i64, i64 }, ptr %a63
store { ptr, i64, i64 } %t106, 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.5492, i64 2, i64 0 }, ptr %a114
call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114)
%t115 = load { ptr, i64, i64 }, ptr %a112
%t116 = load { ptr, i64, i64 }, ptr %a67
store { ptr, i64, i64 } %t115, ptr %a118
store { ptr, i64, i64 } %t116, ptr %a119
call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119)
%t120 = load { ptr, i64, i64 }, ptr %a117
%t121 = call { ptr, i64, i64 } @finch.gen.op(ptr %t97, { ptr, i64, i64 } %t120)
store { ptr, i64, i64 } %t121, ptr %a69
br label %endif8122
else8121:
%t122 = load ptr, ptr %a1
%t123 = load %S.ast.Type, ptr %a2
%t124 = call i1 @finch.gen.isSigned(%S.ast.Type %t123)
%t125 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } { ptr @.str.5494, i64 1, i64 0 }, i1 %t124)
store { ptr, i64, i64 } { ptr @.str.5493, i64 5, 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.5495, i64 1, i64 0 }, ptr %a132
call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132)
%t133 = load { ptr, i64, i64 }, ptr %a130
%t134 = load { ptr, i64, i64 }, ptr %a59
store { ptr, i64, i64 } %t133, 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.5496, i64 1, i64 0 }, ptr %a141
call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141)
%t142 = load { ptr, i64, i64 }, ptr %a139
%t143 = load { ptr, i64, i64 }, ptr %a63
store { ptr, i64, i64 } %t142, 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.5497, i64 2, i64 0 }, ptr %a150
call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150)
%t151 = load { ptr, i64, i64 }, ptr %a148
%t152 = load { ptr, i64, i64 }, ptr %a67
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)
%t156 = load { ptr, i64, i64 }, ptr %a153
%t157 = call { ptr, i64, i64 } @finch.gen.op(ptr %t122, { ptr, i64, i64 } %t156)
store { ptr, i64, i64 } %t157, ptr %a68
%t158 = load ptr, ptr %a1
%t159 = load %S.ast.Type, ptr %a2
%t160 = call i1 @finch.gen.isSigned(%S.ast.Type %t159)
%t161 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } { ptr @.str.5499, i64 1, i64 0 }, i1 %t160)
store { ptr, i64, i64 } { ptr @.str.5498, i64 5, i64 0 }, ptr %a163
store { ptr, i64, i64 } %t161, ptr %a164
call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164)
%t165 = load { ptr, i64, i64 }, ptr %a162
store { ptr, i64, i64 } %t165, ptr %a167
store { ptr, i64, i64 } { ptr @.str.5500, i64 1, i64 0 }, ptr %a168
call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168)
%t169 = load { ptr, i64, i64 }, ptr %a166
%t170 = load { ptr, i64, i64 }, ptr %a59
store { ptr, i64, i64 } %t169, ptr %a172
store { ptr, i64, i64 } %t170, ptr %a173
call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173)
%t174 = load { ptr, i64, i64 }, ptr %a171
store { ptr, i64, i64 } %t174, ptr %a176
store { ptr, i64, i64 } { ptr @.str.5501, i64 1, i64 0 }, ptr %a177
call void @finch_str_concat(ptr %a175, ptr %a176, ptr %a177)
%t178 = load { ptr, i64, i64 }, ptr %a175
%t179 = load { ptr, i64, i64 }, ptr %a63
store { ptr, i64, i64 } %t178, ptr %a181
store { ptr, i64, i64 } %t179, ptr %a182
call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182)
%t183 = load { ptr, i64, i64 }, ptr %a180
store { ptr, i64, i64 } %t183, ptr %a185
store { ptr, i64, i64 } { ptr @.str.5502, i64 2, i64 0 }, ptr %a186
call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186)
%t187 = load { ptr, i64, i64 }, ptr %a184
%t188 = load { ptr, i64, i64 }, ptr %a67
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)
%t192 = load { ptr, i64, i64 }, ptr %a189
%t193 = call { ptr, i64, i64 } @finch.gen.op(ptr %t158, { ptr, i64, i64 } %t192)
store { ptr, i64, i64 } %t193, ptr %a69
br label %endif8122
endif8122:
%t194 = load ptr, ptr %a1
%t195 = load ptr, ptr %a1
%t196 = load { ptr, i64, i64 }, ptr %a69
store { ptr, i64, i64 } { ptr @.str.5504, i64 8, 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.5505, i64 7, i64 0 }, ptr %a203
call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203)
%t204 = load { ptr, i64, i64 }, ptr %a201
%t205 = call { ptr, i64, i64 } @finch.gen.op(ptr %t195, { ptr, i64, i64 } %t204)
store { ptr, i64, i64 } { ptr @.str.5503, i64 8, 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.5506, i64 2, i64 0 }, ptr %a212
call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212)
%t213 = load { ptr, i64, i64 }, ptr %a210
%t214 = load ptr, ptr %a1
%t215 = load { ptr, i64, i64 }, ptr %a68
store { ptr, i64, i64 } { ptr @.str.5507, i64 8, i64 0 }, ptr %a217
store { ptr, i64, i64 } %t215, ptr %a218
call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218)
%t219 = load { ptr, i64, i64 }, ptr %a216
store { ptr, i64, i64 } %t219, ptr %a221
store { ptr, i64, i64 } { ptr @.str.5508, i64 7, i64 0 }, ptr %a222
call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222)
%t223 = load { ptr, i64, i64 }, ptr %a220
%t224 = call { ptr, i64, i64 } @finch.gen.op(ptr %t214, { ptr, i64, i64 } %t223)
store { ptr, i64, i64 } %t213, ptr %a226
store { ptr, i64, i64 } %t224, ptr %a227
call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227)
%t228 = load { ptr, i64, i64 }, ptr %a225
%t229 = call { ptr, i64, i64 } @finch.gen.op(ptr %t194, { ptr, i64, i64 } %t228)
store { ptr, i64, i64 } %t229, ptr %a35
br label %endif8119
endif8119:
%t230 = load ptr, ptr %a1
%t231 = load { ptr, i64, i64 }, ptr %a35
store { ptr, i64, i64 } { ptr @.str.5509, i64 8, i64 0 }, ptr %a233
store { ptr, i64, i64 } %t231, ptr %a234
call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234)
%t235 = load { ptr, i64, i64 }, ptr %a232
call void @finch.gen.emit(ptr %t230, { ptr, i64, i64 } %t235)
%t236 = load ptr, ptr %a1
%t237 = load %S.gen.Saved, ptr %a34
%t238 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } { ptr @.str.5510, i64 20, i64 0 }, ptr %a240
store { ptr, i64, i64 } %t238, ptr %a241
call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241)
%t242 = load { ptr, i64, i64 }, ptr %a239
store { ptr, i64, i64 } %t242, ptr %a244
store { ptr, i64, i64 } { ptr @.str.5511, i64 16, i64 0 }, ptr %a245
call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245)
%t246 = load { ptr, i64, i64 }, ptr %a243
call void @finch.gen.endHelper(ptr %t236, %S.gen.Saved %t237, { ptr, i64, i64 } %t246)
%t247 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t247, ptr %a248
call void @finch_str_copy(ptr %a249, ptr %a248)
%t250 = load { ptr, i64, i64 }, ptr %a249
ret { ptr, i64, i64 } %t250
}
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
%a54 = alloca { ptr, i64, i64 }, align 16
%a55 = alloca { ptr, i64, i64 }, align 16
%a57 = 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
%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
%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
%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
%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
%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
%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
%a136 = alloca { ptr, i64, i64 }, align 16
%a137 = alloca { ptr, i64, i64 }, align 16
%a138 = 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
%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
%a183 = 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
%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
%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
%a213 = 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
%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
%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
%a244 = alloca { ptr, i64, i64 }, align 16
%a245 = alloca { ptr, i64, i64 }, align 16
%a246 = alloca { ptr, i64, i64 }, align 16
%a252 = 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
%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
%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
%a278 = alloca { ptr, i64, i64 }, align 16
%a279 = alloca { ptr, i64, i64 }, align 16
%a280 = 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
%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
%a295 = alloca { ptr, i64, i64 }, align 16
%a296 = alloca { ptr, i64, i64 }, align 16
%a303 = alloca { ptr, i64, i64 }, align 16
%a304 = alloca { ptr, i64, i64 }, align 16
%a308 = alloca { ptr, i64, i64 }, align 16
%a309 = alloca { ptr, i64, i64 }, align 16
%a314 = alloca { ptr, i64, i64 }, align 16
%a315 = 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
%a328 = alloca { ptr, i64, i64 }, align 16
%a329 = 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
%a337 = alloca { ptr, i64, i64 }, align 16
%a338 = 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
%a345 = alloca { ptr, i64, i64 }, align 16
%a346 = alloca { ptr, i64, i64 }, align 16
%a347 = alloca { ptr, i64, i64 }, align 16
%a357 = alloca { ptr, i64, i64 }, align 16
%a358 = alloca { ptr, i64, i64 }, align 16
%a374 = 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
%a393 = alloca { ptr, i64, i64 }, align 16
%a394 = alloca { ptr, i64, i64 }, align 16
%a395 = 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
%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
%a416 = alloca { ptr, i64, i64 }, align 16
%a417 = alloca { ptr, i64, i64 }, align 16
%a418 = 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
%a432 = alloca { ptr, i64, i64 }, align 16
%a433 = alloca { ptr, i64, i64 }, align 16
%a449 = alloca { ptr, i64, i64 }, align 16
%a452 = 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
%a464 = alloca { ptr, i64, i64 }, align 16
%a465 = alloca { ptr, i64, i64 }, align 16
%a466 = 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 { 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
%a490 = alloca { ptr, i64, i64 }, align 16
%a491 = 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
%a522 = alloca { ptr, i64, i64 }, align 16
%a523 = 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
%a531 = alloca { ptr, i64, i64 }, align 16
%a532 = alloca { ptr, i64, i64 }, align 16
%a533 = 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
%a544 = alloca { ptr, i64, i64 }, align 16
%a545 = alloca { ptr, i64, i64 }, align 16
%a546 = alloca { ptr, i64, i64 }, align 16
%a556 = alloca { ptr, i64, i64 }, align 16
%a557 = 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
%a571 = alloca { ptr, i64, i64 }, align 16
%a572 = alloca { ptr, i64, i64 }, align 16
%a573 = 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
%a580 = alloca { ptr, i64, i64 }, align 16
%a581 = alloca { ptr, i64, i64 }, align 16
%a582 = 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
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 %panic8123, label %ok8124
panic8123:
call void @finch_panic(ptr @.str.5512, i64 4968, ptr @.str.5513)
unreachable
ok8124:
%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 %range8125, label %inrange8126
range8125:
call void @finch_panic_index(ptr @.str.5514, i64 4968, i64 %t18, i64 %t20)
unreachable
inrange8126:
%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.5515, 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 %then8127, label %endif8129
then8127:
%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 %range8130, label %inrange8131
range8130:
call void @finch_panic_index(ptr @.str.5516, i64 4971, i64 1, i64 %t38)
unreachable
inrange8131:
%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.5517, 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 %range8132, label %inrange8133
range8132:
call void @finch_panic_index(ptr @.str.5518, i64 4971, i64 1, i64 %t47)
unreachable
inrange8133:
%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.5519, i64 9, i64 0 })
%t53 = extractvalue %S.gen.Val %t52, 0
store { ptr, i64, i64 } %t53, ptr %a54
call void @finch_str_copy(ptr %a55, ptr %a54)
%t56 = load { ptr, i64, i64 }, ptr %a55
store { ptr, i64, i64 } %t56, ptr %a57
%t58 = load ptr, ptr %a1
%t59 = load ptr, ptr %a1
%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 2, %t62
br i1 %t63, label %range8134, label %inrange8135
range8134:
call void @finch_panic_index(ptr @.str.5520, i64 4972, i64 2, i64 %t62)
unreachable
inrange8135:
%t64 = extractvalue { ptr, i64, i64 } %t61, 0
%t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 2
%t66 = load %S.ast.Node, ptr %t65
%t67 = call %S.gen.Val @finch.gen.expr(ptr %t59, %S.ast.Node %t66)
%t68 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5521, i64 3, i64 0 })
%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 2, %t71
br i1 %t72, label %range8136, label %inrange8137
range8136:
call void @finch_panic_index(ptr @.str.5522, i64 4972, i64 2, i64 %t71)
unreachable
inrange8137:
%t73 = extractvalue { ptr, i64, i64 } %t70, 0
%t74 = getelementptr inbounds %S.ast.Node, ptr %t73, i64 2
%t75 = load %S.ast.Node, ptr %t74
%t76 = call %S.gen.Val @finch.gen.coerce(ptr %t58, %S.gen.Val %t67, %S.ast.Type %t68, %S.ast.Node %t75, { ptr, i64, i64 } { ptr @.str.5523, i64 7, i64 0 })
%t77 = extractvalue %S.gen.Val %t76, 0
store { ptr, i64, i64 } %t77, ptr %a78
call void @finch_str_copy(ptr %a79, ptr %a78)
%t80 = load { ptr, i64, i64 }, ptr %a79
store { ptr, i64, i64 } %t80, ptr %a81
%t82 = load ptr, ptr %a1
%t83 = load { ptr, i64, i64 }, ptr %a12
store { ptr, i64, i64 } { ptr @.str.5524, i64 29, i64 0 }, ptr %a85
store { ptr, i64, i64 } %t83, ptr %a86
call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86)
%t87 = load { ptr, i64, i64 }, ptr %a84
store { ptr, i64, i64 } %t87, ptr %a89
store { ptr, i64, i64 } { ptr @.str.5525, i64 6, 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 %a3
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)
%t96 = load { ptr, i64, i64 }, ptr %a93
store { ptr, i64, i64 } %t96, ptr %a98
store { ptr, i64, i64 } { ptr @.str.5526, i64 6, i64 0 }, 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 %a57
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)
%t105 = load { ptr, i64, i64 }, ptr %a102
store { ptr, i64, i64 } %t105, ptr %a107
store { ptr, i64, i64 } { ptr @.str.5527, i64 6, i64 0 }, ptr %a108
call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108)
%t109 = load { ptr, i64, i64 }, ptr %a106
%t110 = load { ptr, i64, i64 }, ptr %a81
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)
%t114 = load { ptr, i64, i64 }, ptr %a111
store { ptr, i64, i64 } %t114, ptr %a116
store { ptr, i64, i64 } { ptr @.str.5528, i64 6, i64 0 }, ptr %a117
call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117)
%t118 = load { ptr, i64, i64 }, ptr %a115
%t119 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t118, 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.5529, i64 6, i64 0 }, ptr %a126
call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126)
%t127 = load { ptr, i64, i64 }, ptr %a124
%t128 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11
%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 } %t127, 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.5530, i64 1, i64 0 }, ptr %a138
call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138)
%t139 = load { ptr, i64, i64 }, ptr %a136
call void @finch.gen.emit(ptr %t82, { ptr, i64, i64 } %t139)
%t140 = load ptr, ptr %a1
%t141 = load { ptr, i64, i64 }, ptr %a12
%t142 = call { ptr, i64, i64 } @finch.gen.load(ptr %t140, { ptr, i64, i64 } { ptr @.str.5531, i64 17, i64 0 }, { ptr, i64, i64 } %t141)
%t143 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t142, 0
%t144 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5532, i64 3, i64 0 })
%t145 = insertvalue %S.gen.Val %t143, %S.ast.Type %t144, 1
%t146 = insertvalue %S.gen.Val %t145, i1 true, 2
ret %S.gen.Val %t146
endif8129:
%t147 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t147, ptr %a148
store { ptr, i64, i64 } { ptr @.str.5533, i64 4, i64 0 }, ptr %a149
%t150 = call i32 @finch_str_eq(ptr %a148, ptr %a149)
%t151 = icmp ne i32 %t150, 0
br label %logic.from8138
logic.from8138:
br i1 %t151, label %logic.end8140, label %logic.rhs8139
logic.rhs8139:
%t152 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t152, ptr %a153
store { ptr, i64, i64 } { ptr @.str.5534, i64 8, i64 0 }, ptr %a154
%t155 = call i32 @finch_str_eq(ptr %a153, ptr %a154)
%t156 = icmp ne i32 %t155, 0
br label %logic.rend8141
logic.rend8141:
br label %logic.end8140
logic.end8140:
%t157 = phi i1 [ true, %logic.from8138 ], [ %t156, %logic.rend8141 ]
br label %logic.from8142
logic.from8142:
br i1 %t157, label %logic.end8144, label %logic.rhs8143
logic.rhs8143:
%t158 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t158, ptr %a159
store { ptr, i64, i64 } { ptr @.str.5535, i64 11, i64 0 }, ptr %a160
%t161 = call i32 @finch_str_eq(ptr %a159, ptr %a160)
%t162 = icmp ne i32 %t161, 0
br label %logic.rend8145
logic.rend8145:
br label %logic.end8144
logic.end8144:
%t163 = phi i1 [ true, %logic.from8142 ], [ %t162, %logic.rend8145 ]
br label %logic.from8146
logic.from8146:
br i1 %t163, label %logic.end8148, label %logic.rhs8147
logic.rhs8147:
%t164 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t164, ptr %a165
store { ptr, i64, i64 } { ptr @.str.5536, i64 9, i64 0 }, ptr %a166
%t167 = call i32 @finch_str_eq(ptr %a165, ptr %a166)
%t168 = icmp ne i32 %t167, 0
br label %logic.rend8149
logic.rend8149:
br label %logic.end8148
logic.end8148:
%t169 = phi i1 [ true, %logic.from8146 ], [ %t168, %logic.rend8149 ]
br i1 %t169, label %then8150, label %endif8152
then8150:
%t170 = load ptr, ptr %a1
%t171 = load %S.ast.Node, ptr %a2
call void @finch.gen.need(ptr %t170, %S.ast.Node %t171, i64 1)
%t172 = load ptr, ptr %a1
%t173 = load ptr, ptr %a1
%t174 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t175 = load { ptr, i64, i64 }, ptr %t174
%t176 = extractvalue { ptr, i64, i64 } %t175, 1
%t177 = icmp uge i64 1, %t176
br i1 %t177, label %range8153, label %inrange8154
range8153:
call void @finch_panic_index(ptr @.str.5537, i64 4978, i64 1, i64 %t176)
unreachable
inrange8154:
%t178 = extractvalue { ptr, i64, i64 } %t175, 0
%t179 = getelementptr inbounds %S.ast.Node, ptr %t178, i64 1
%t180 = load %S.ast.Node, ptr %t179
%t181 = call %S.gen.Val @finch.gen.strArg(ptr %t173, %S.ast.Node %t180, { ptr, i64, i64 } { ptr @.str.5538, i64 20, i64 0 })
%t182 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t172, %S.gen.Val %t181)
store { ptr, i64, i64 } %t182, ptr %a183
%t184 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t184, ptr %a185
store { ptr, i64, i64 } { ptr @.str.5539, i64 4, i64 0 }, ptr %a186
%t187 = call i32 @finch_str_eq(ptr %a185, ptr %a186)
%t188 = icmp ne i32 %t187, 0
br i1 %t188, label %then8155, label %endif8157
then8155:
%t189 = load ptr, ptr %a1
%t190 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } { ptr @.str.5540, i64 29, 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.5541, i64 6, i64 0 }, ptr %a197
call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197)
%t198 = load { ptr, i64, i64 }, ptr %a195
%t199 = load { ptr, i64, i64 }, ptr %a183
store { ptr, i64, i64 } %t198, ptr %a201
store { ptr, i64, i64 } %t199, ptr %a202
call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202)
%t203 = load { ptr, i64, i64 }, ptr %a200
store { ptr, i64, i64 } %t203, ptr %a205
store { ptr, i64, i64 } { ptr @.str.5542, i64 1, i64 0 }, ptr %a206
call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206)
%t207 = load { ptr, i64, i64 }, ptr %a204
%t208 = call { ptr, i64, i64 } @finch.gen.op(ptr %t189, { ptr, i64, i64 } %t207)
%t209 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t208, 0
%t210 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5543, i64 3, i64 0 })
%t211 = insertvalue %S.gen.Val %t209, %S.ast.Type %t210, 1
ret %S.gen.Val %t211
endif8157:
%t212 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t212, ptr %a213
store { ptr, i64, i64 } { ptr @.str.5544, i64 8, i64 0 }, ptr %a214
%t215 = call i32 @finch_str_eq(ptr %a213, ptr %a214)
%t216 = icmp ne i32 %t215, 0
br i1 %t216, label %then8158, label %endif8160
then8158:
%t217 = load ptr, ptr %a1
%t218 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } { ptr @.str.5545, i64 29, 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.5546, i64 6, i64 0 }, ptr %a225
call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225)
%t226 = load { ptr, i64, i64 }, ptr %a223
%t227 = load { ptr, i64, i64 }, ptr %a183
store { ptr, i64, i64 } %t226, 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.5547, i64 1, i64 0 }, ptr %a234
call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234)
%t235 = load { ptr, i64, i64 }, ptr %a232
%t236 = call { ptr, i64, i64 } @finch.gen.op(ptr %t217, { ptr, i64, i64 } %t235)
store { ptr, i64, i64 } %t236, ptr %a237
%t238 = load ptr, ptr %a1
%t239 = load { ptr, i64, i64 }, ptr %a237
store { ptr, i64, i64 } { ptr @.str.5548, i64 13, i64 0 }, ptr %a241
store { ptr, i64, i64 } %t239, ptr %a242
call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242)
%t243 = load { ptr, i64, i64 }, ptr %a240
store { ptr, i64, i64 } %t243, ptr %a245
store { ptr, i64, i64 } { ptr @.str.5549, i64 3, i64 0 }, ptr %a246
call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246)
%t247 = load { ptr, i64, i64 }, ptr %a244
%t248 = call { ptr, i64, i64 } @finch.gen.op(ptr %t238, { ptr, i64, i64 } %t247)
%t249 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t248, 0
%t250 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5550, i64 4, i64 0 })
%t251 = insertvalue %S.gen.Val %t249, %S.ast.Type %t250, 1
ret %S.gen.Val %t251
endif8160:
store { ptr, i64, i64 } { ptr @.str.5551, i64 17, i64 0 }, ptr %a252
%t253 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t253, ptr %a254
store { ptr, i64, i64 } { ptr @.str.5552, i64 9, i64 0 }, ptr %a255
%t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255)
%t257 = icmp ne i32 %t256, 0
br i1 %t257, label %then8161, label %endif8163
then8161:
store { ptr, i64, i64 } { ptr @.str.5553, i64 15, i64 0 }, ptr %a252
br label %endif8163
endif8163:
%t258 = load ptr, ptr %a1
%t259 = load { ptr, i64, i64 }, ptr %a252
store { ptr, i64, i64 } { ptr @.str.5554, i64 9, 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.5555, i64 5, i64 0 }, ptr %a266
call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266)
%t267 = load { ptr, i64, i64 }, ptr %a264
%t268 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t267, ptr %a270
store { ptr, i64, i64 } %t268, ptr %a271
call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271)
%t272 = load { ptr, i64, i64 }, ptr %a269
store { ptr, i64, i64 } %t272, ptr %a274
store { ptr, i64, i64 } { ptr @.str.5556, i64 6, 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 %a183
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)
%t281 = load { ptr, i64, i64 }, ptr %a278
store { ptr, i64, i64 } %t281, ptr %a283
store { ptr, i64, i64 } { ptr @.str.5557, i64 1, i64 0 }, ptr %a284
call void @finch_str_concat(ptr %a282, ptr %a283, ptr %a284)
%t285 = load { ptr, i64, i64 }, ptr %a282
%t286 = call { ptr, i64, i64 } @finch.gen.op(ptr %t258, { ptr, i64, i64 } %t285)
store { ptr, i64, i64 } %t286, ptr %a287
%t288 = load ptr, ptr %a1
%t289 = load { ptr, i64, i64 }, ptr %a287
store { ptr, i64, i64 } { ptr @.str.5558, i64 12, i64 0 }, ptr %a291
store { ptr, i64, i64 } %t289, ptr %a292
call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292)
%t293 = load { ptr, i64, i64 }, ptr %a290
store { ptr, i64, i64 } %t293, ptr %a295
store { ptr, i64, i64 } { ptr @.str.5559, i64 3, i64 0 }, ptr %a296
call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296)
%t297 = load { ptr, i64, i64 }, ptr %a294
%t298 = call { ptr, i64, i64 } @finch.gen.op(ptr %t288, { ptr, i64, i64 } %t297)
%t299 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t298, 0
%t300 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5560, i64 4, i64 0 })
%t301 = insertvalue %S.gen.Val %t299, %S.ast.Type %t300, 1
ret %S.gen.Val %t301
endif8152:
%t302 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t302, ptr %a303
store { ptr, i64, i64 } { ptr @.str.5561, i64 4, i64 0 }, ptr %a304
%t305 = call i32 @finch_str_eq(ptr %a303, ptr %a304)
%t306 = icmp ne i32 %t305, 0
br label %logic.from8164
logic.from8164:
br i1 %t306, label %logic.end8166, label %logic.rhs8165
logic.rhs8165:
%t307 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t307, ptr %a308
store { ptr, i64, i64 } { ptr @.str.5562, i64 5, i64 0 }, ptr %a309
%t310 = call i32 @finch_str_eq(ptr %a308, ptr %a309)
%t311 = icmp ne i32 %t310, 0
br label %logic.rend8167
logic.rend8167:
br label %logic.end8166
logic.end8166:
%t312 = phi i1 [ true, %logic.from8164 ], [ %t311, %logic.rend8167 ]
br label %logic.from8168
logic.from8168:
br i1 %t312, label %logic.end8170, label %logic.rhs8169
logic.rhs8169:
%t313 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t313, ptr %a314
store { ptr, i64, i64 } { ptr @.str.5563, i64 5, i64 0 }, ptr %a315
%t316 = call i32 @finch_str_eq(ptr %a314, ptr %a315)
%t317 = icmp ne i32 %t316, 0
br label %logic.rend8171
logic.rend8171:
br label %logic.end8170
logic.end8170:
%t318 = phi i1 [ true, %logic.from8168 ], [ %t317, %logic.rend8171 ]
br i1 %t318, label %then8172, label %endif8174
then8172:
%t319 = load ptr, ptr %a1
%t320 = load %S.ast.Node, ptr %a2
call void @finch.gen.need(ptr %t319, %S.ast.Node %t320, i64 0)
%t321 = load ptr, ptr %a1
%t322 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } { ptr @.str.5564, i64 21, i64 0 }, ptr %a324
store { ptr, i64, i64 } %t322, ptr %a325
call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325)
%t326 = load { ptr, i64, i64 }, ptr %a323
store { ptr, i64, i64 } %t326, ptr %a328
store { ptr, i64, i64 } { ptr @.str.5565, i64 5, i64 0 }, ptr %a329
call void @finch_str_concat(ptr %a327, ptr %a328, ptr %a329)
%t330 = load { ptr, i64, i64 }, ptr %a327
%t331 = load { ptr, i64, i64 }, ptr %a12
store { ptr, i64, i64 } %t330, ptr %a333
store { ptr, i64, i64 } %t331, ptr %a334
call void @finch_str_concat(ptr %a332, ptr %a333, ptr %a334)
%t335 = load { ptr, i64, i64 }, ptr %a332
store { ptr, i64, i64 } %t335, ptr %a337
store { ptr, i64, i64 } { ptr @.str.5566, i64 6, i64 0 }, ptr %a338
call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338)
%t339 = load { ptr, i64, i64 }, ptr %a336
%t340 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t339, ptr %a342
store { ptr, i64, i64 } %t340, ptr %a343
call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343)
%t344 = load { ptr, i64, i64 }, ptr %a341
store { ptr, i64, i64 } %t344, ptr %a346
store { ptr, i64, i64 } { ptr @.str.5567, i64 1, i64 0 }, ptr %a347
call void @finch_str_concat(ptr %a345, ptr %a346, ptr %a347)
%t348 = load { ptr, i64, i64 }, ptr %a345
call void @finch.gen.emit(ptr %t321, { ptr, i64, i64 } %t348)
%t349 = load ptr, ptr %a1
%t350 = load { ptr, i64, i64 }, ptr %a12
%t351 = call { ptr, i64, i64 } @finch.gen.load(ptr %t349, { ptr, i64, i64 } { ptr @.str.5568, i64 17, i64 0 }, { ptr, i64, i64 } %t350)
%t352 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t351, 0
%t353 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5569, i64 3, i64 0 })
%t354 = insertvalue %S.gen.Val %t352, %S.ast.Type %t353, 1
%t355 = insertvalue %S.gen.Val %t354, i1 true, 2
ret %S.gen.Val %t355
endif8174:
%t356 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t356, ptr %a357
store { ptr, i64, i64 } { ptr @.str.5570, i64 7, i64 0 }, ptr %a358
%t359 = call i32 @finch_str_eq(ptr %a357, ptr %a358)
%t360 = icmp ne i32 %t359, 0
br i1 %t360, label %then8175, label %endif8177
then8175:
%t361 = load ptr, ptr %a1
%t362 = load %S.ast.Node, ptr %a2
call void @finch.gen.need(ptr %t361, %S.ast.Node %t362, i64 2)
%t363 = load ptr, ptr %a1
%t364 = load ptr, ptr %a1
%t365 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t366 = load { ptr, i64, i64 }, ptr %t365
%t367 = extractvalue { ptr, i64, i64 } %t366, 1
%t368 = icmp uge i64 1, %t367
br i1 %t368, label %range8178, label %inrange8179
range8178:
call void @finch_panic_index(ptr @.str.5571, i64 5000, i64 1, i64 %t367)
unreachable
inrange8179:
%t369 = extractvalue { ptr, i64, i64 } %t366, 0
%t370 = getelementptr inbounds %S.ast.Node, ptr %t369, i64 1
%t371 = load %S.ast.Node, ptr %t370
%t372 = call %S.gen.Val @finch.gen.strArg(ptr %t364, %S.ast.Node %t371, { ptr, i64, i64 } { ptr @.str.5572, i64 19, i64 0 })
%t373 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t363, %S.gen.Val %t372)
store { ptr, i64, i64 } %t373, ptr %a374
%t375 = load ptr, ptr %a1
%t376 = load ptr, ptr %a1
%t377 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t378 = load { ptr, i64, i64 }, ptr %t377
%t379 = extractvalue { ptr, i64, i64 } %t378, 1
%t380 = icmp uge i64 2, %t379
br i1 %t380, label %range8180, label %inrange8181
range8180:
call void @finch_panic_index(ptr @.str.5573, i64 5001, i64 2, i64 %t379)
unreachable
inrange8181:
%t381 = extractvalue { ptr, i64, i64 } %t378, 0
%t382 = getelementptr inbounds %S.ast.Node, ptr %t381, i64 2
%t383 = load %S.ast.Node, ptr %t382
%t384 = call %S.gen.Val @finch.gen.strArg(ptr %t376, %S.ast.Node %t383, { ptr, i64, i64 } { ptr @.str.5574, i64 12, i64 0 })
%t385 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t375, %S.gen.Val %t384)
store { ptr, i64, i64 } %t385, ptr %a386
%t387 = load ptr, ptr %a1
%t388 = load { ptr, i64, i64 }, ptr %a12
store { ptr, i64, i64 } { ptr @.str.5575, i64 33, 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.5576, i64 6, i64 0 }, ptr %a395
call void @finch_str_concat(ptr %a393, ptr %a394, ptr %a395)
%t396 = load { ptr, i64, i64 }, ptr %a393
%t397 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t396, ptr %a399
store { ptr, i64, i64 } %t397, ptr %a400
call void @finch_str_concat(ptr %a398, ptr %a399, ptr %a400)
%t401 = load { ptr, i64, i64 }, ptr %a398
store { ptr, i64, i64 } %t401, ptr %a403
store { ptr, i64, i64 } { ptr @.str.5577, i64 6, i64 0 }, ptr %a404
call void @finch_str_concat(ptr %a402, ptr %a403, ptr %a404)
%t405 = load { ptr, i64, i64 }, ptr %a402
%t406 = load { ptr, i64, i64 }, ptr %a374
store { ptr, i64, i64 } %t405, 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.5578, i64 6, i64 0 }, ptr %a413
call void @finch_str_concat(ptr %a411, ptr %a412, ptr %a413)
%t414 = load { ptr, i64, i64 }, ptr %a411
%t415 = load { ptr, i64, i64 }, ptr %a386
store { ptr, i64, i64 } %t414, ptr %a417
store { ptr, i64, i64 } %t415, ptr %a418
call void @finch_str_concat(ptr %a416, ptr %a417, ptr %a418)
%t419 = load { ptr, i64, i64 }, ptr %a416
store { ptr, i64, i64 } %t419, ptr %a421
store { ptr, i64, i64 } { ptr @.str.5579, i64 1, i64 0 }, ptr %a422
call void @finch_str_concat(ptr %a420, ptr %a421, ptr %a422)
%t423 = load { ptr, i64, i64 }, ptr %a420
call void @finch.gen.emit(ptr %t387, { ptr, i64, i64 } %t423)
%t424 = load ptr, ptr %a1
%t425 = load { ptr, i64, i64 }, ptr %a12
%t426 = call { ptr, i64, i64 } @finch.gen.load(ptr %t424, { ptr, i64, i64 } { ptr @.str.5580, i64 17, i64 0 }, { ptr, i64, i64 } %t425)
%t427 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t426, 0
%t428 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5581, i64 3, i64 0 })
%t429 = insertvalue %S.gen.Val %t427, %S.ast.Type %t428, 1
%t430 = insertvalue %S.gen.Val %t429, i1 true, 2
ret %S.gen.Val %t430
endif8177:
%t431 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t431, ptr %a432
store { ptr, i64, i64 } { ptr @.str.5582, i64 5, i64 0 }, ptr %a433
%t434 = call i32 @finch_str_eq(ptr %a432, ptr %a433)
%t435 = icmp ne i32 %t434, 0
br i1 %t435, label %then8182, label %endif8184
then8182:
%t436 = load ptr, ptr %a1
%t437 = load %S.ast.Node, ptr %a2
call void @finch.gen.need(ptr %t436, %S.ast.Node %t437, i64 1)
%t438 = load ptr, ptr %a1
%t439 = load ptr, ptr %a1
%t440 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t441 = load { ptr, i64, i64 }, ptr %t440
%t442 = extractvalue { ptr, i64, i64 } %t441, 1
%t443 = icmp uge i64 1, %t442
br i1 %t443, label %range8185, label %inrange8186
range8185:
call void @finch_panic_index(ptr @.str.5583, i64 5007, i64 1, i64 %t442)
unreachable
inrange8186:
%t444 = extractvalue { ptr, i64, i64 } %t441, 0
%t445 = getelementptr inbounds %S.ast.Node, ptr %t444, i64 1
%t446 = load %S.ast.Node, ptr %t445
%t447 = call %S.gen.Val @finch.gen.strArg(ptr %t439, %S.ast.Node %t446, { ptr, i64, i64 } { ptr @.str.5584, i64 13, i64 0 })
%t448 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t438, %S.gen.Val %t447)
store { ptr, i64, i64 } %t448, ptr %a449
%t450 = load ptr, ptr %a1
%t451 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t450)
store { ptr, i64, i64 } %t451, ptr %a452
%t453 = load ptr, ptr %a1
%t454 = load { ptr, i64, i64 }, ptr %a452
store { ptr, i64, i64 } { ptr @.str.5585, i64 31, i64 0 }, ptr %a456
store { ptr, i64, i64 } %t454, ptr %a457
call void @finch_str_concat(ptr %a455, ptr %a456, ptr %a457)
%t458 = load { ptr, i64, i64 }, ptr %a455
store { ptr, i64, i64 } %t458, ptr %a460
store { ptr, i64, i64 } { ptr @.str.5586, i64 6, i64 0 }, ptr %a461
call void @finch_str_concat(ptr %a459, ptr %a460, ptr %a461)
%t462 = load { ptr, i64, i64 }, ptr %a459
%t463 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t462, ptr %a465
store { ptr, i64, i64 } %t463, ptr %a466
call void @finch_str_concat(ptr %a464, ptr %a465, ptr %a466)
%t467 = load { ptr, i64, i64 }, ptr %a464
store { ptr, i64, i64 } %t467, ptr %a469
store { ptr, i64, i64 } { ptr @.str.5587, i64 6, 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, i64, i64 }, ptr %a449
store { ptr, i64, i64 } %t471, 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.5588, i64 1, i64 0 }, ptr %a479
call void @finch_str_concat(ptr %a477, ptr %a478, ptr %a479)
%t480 = load { ptr, i64, i64 }, ptr %a477
call void @finch.gen.emit(ptr %t453, { ptr, i64, i64 } %t480)
%t481 = load ptr, ptr %a1
%t482 = load { ptr, i64, i64 }, ptr %a452
%t483 = call { ptr, i64, i64 } @finch.gen.load(ptr %t481, { ptr, i64, i64 } { ptr @.str.5589, i64 17, i64 0 }, { ptr, i64, i64 } %t482)
%t484 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t483, 0
%t485 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5590, i64 3, i64 0 })
%t486 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t485)
%t487 = insertvalue %S.gen.Val %t484, %S.ast.Type %t486, 1
%t488 = insertvalue %S.gen.Val %t487, i1 true, 2
ret %S.gen.Val %t488
endif8184:
%t489 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t489, ptr %a490
store { ptr, i64, i64 } { ptr @.str.5591, i64 6, i64 0 }, ptr %a491
%t492 = call i32 @finch_str_eq(ptr %a490, ptr %a491)
%t493 = icmp ne i32 %t492, 0
br i1 %t493, label %then8187, label %endif8189
then8187:
%t494 = load ptr, ptr %a1
%t495 = load %S.ast.Node, ptr %a2
call void @finch.gen.need(ptr %t494, %S.ast.Node %t495, i64 1)
%t496 = load ptr, ptr %a1
%t497 = load ptr, ptr %a1
%t498 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t499 = load { ptr, i64, i64 }, ptr %t498
%t500 = extractvalue { ptr, i64, i64 } %t499, 1
%t501 = icmp uge i64 1, %t500
br i1 %t501, label %range8190, label %inrange8191
range8190:
call void @finch_panic_index(ptr @.str.5592, i64 5014, i64 1, i64 %t500)
unreachable
inrange8191:
%t502 = extractvalue { ptr, i64, i64 } %t499, 0
%t503 = getelementptr inbounds %S.ast.Node, ptr %t502, i64 1
%t504 = load %S.ast.Node, ptr %t503
%t505 = call %S.gen.Val @finch.gen.expr(ptr %t497, %S.ast.Node %t504)
%t506 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5593, i64 3, i64 0 })
%t507 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9
%t508 = load { ptr, i64, i64 }, ptr %t507
%t509 = extractvalue { ptr, i64, i64 } %t508, 1
%t510 = icmp uge i64 1, %t509
br i1 %t510, label %range8192, label %inrange8193
range8192:
call void @finch_panic_index(ptr @.str.5594, i64 5014, i64 1, i64 %t509)
unreachable
inrange8193:
%t511 = extractvalue { ptr, i64, i64 } %t508, 0
%t512 = getelementptr inbounds %S.ast.Node, ptr %t511, i64 1
%t513 = load %S.ast.Node, ptr %t512
%t514 = call %S.gen.Val @finch.gen.coerce(ptr %t496, %S.gen.Val %t505, %S.ast.Type %t506, %S.ast.Node %t513, { ptr, i64, i64 } { ptr @.str.5595, i64 9, i64 0 })
%t515 = extractvalue %S.gen.Val %t514, 0
store { ptr, i64, i64 } %t515, ptr %a516
call void @finch_str_copy(ptr %a517, ptr %a516)
%t518 = load { ptr, i64, i64 }, ptr %a517
store { ptr, i64, i64 } %t518, ptr %a519
%t520 = load ptr, ptr %a1
%t521 = load { ptr, i64, i64 }, ptr %a12
store { ptr, i64, i64 } { ptr @.str.5596, i64 32, i64 0 }, ptr %a523
store { ptr, i64, i64 } %t521, ptr %a524
call void @finch_str_concat(ptr %a522, ptr %a523, ptr %a524)
%t525 = load { ptr, i64, i64 }, ptr %a522
store { ptr, i64, i64 } %t525, ptr %a527
store { ptr, i64, i64 } { ptr @.str.5597, i64 6, i64 0 }, ptr %a528
call void @finch_str_concat(ptr %a526, ptr %a527, ptr %a528)
%t529 = load { ptr, i64, i64 }, ptr %a526
%t530 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t529, ptr %a532
store { ptr, i64, i64 } %t530, ptr %a533
call void @finch_str_concat(ptr %a531, ptr %a532, ptr %a533)
%t534 = load { ptr, i64, i64 }, ptr %a531
store { ptr, i64, i64 } %t534, ptr %a536
store { ptr, i64, i64 } { ptr @.str.5598, i64 6, i64 0 }, ptr %a537
call void @finch_str_concat(ptr %a535, ptr %a536, ptr %a537)
%t538 = load { ptr, i64, i64 }, ptr %a535
%t539 = load { ptr, i64, i64 }, ptr %a519
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)
%t543 = load { ptr, i64, i64 }, ptr %a540
store { ptr, i64, i64 } %t543, ptr %a545
store { ptr, i64, i64 } { ptr @.str.5599, i64 1, i64 0 }, ptr %a546
call void @finch_str_concat(ptr %a544, ptr %a545, ptr %a546)
%t547 = load { ptr, i64, i64 }, ptr %a544
call void @finch.gen.emit(ptr %t520, { ptr, i64, i64 } %t547)
%t548 = load ptr, ptr %a1
%t549 = load { ptr, i64, i64 }, ptr %a12
%t550 = call { ptr, i64, i64 } @finch.gen.load(ptr %t548, { ptr, i64, i64 } { ptr @.str.5600, i64 17, i64 0 }, { ptr, i64, i64 } %t549)
%t551 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t550, 0
%t552 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5601, i64 3, i64 0 })
%t553 = insertvalue %S.gen.Val %t551, %S.ast.Type %t552, 1
%t554 = insertvalue %S.gen.Val %t553, i1 true, 2
ret %S.gen.Val %t554
endif8189:
%t555 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t555, ptr %a556
store { ptr, i64, i64 } { ptr @.str.5602, i64 5, i64 0 }, ptr %a557
%t558 = call i32 @finch_str_eq(ptr %a556, ptr %a557)
%t559 = icmp ne i32 %t558, 0
br i1 %t559, label %then8194, label %endif8196
then8194:
%t560 = load ptr, ptr %a1
%t561 = load %S.ast.Node, ptr %a2
call void @finch.gen.need(ptr %t560, %S.ast.Node %t561, i64 0)
%t562 = load ptr, ptr %a1
%t563 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t562)
store { ptr, i64, i64 } %t563, ptr %a564
%t565 = load ptr, ptr %a1
%t566 = load { ptr, i64, i64 }, ptr %a564
store { ptr, i64, i64 } { ptr @.str.5603, i64 36, 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.5604, i64 6, i64 0 }, ptr %a573
call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573)
%t574 = load { ptr, i64, i64 }, ptr %a571
%t575 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t574, ptr %a577
store { ptr, i64, i64 } %t575, ptr %a578
call void @finch_str_concat(ptr %a576, ptr %a577, ptr %a578)
%t579 = load { ptr, i64, i64 }, ptr %a576
store { ptr, i64, i64 } %t579, ptr %a581
store { ptr, i64, i64 } { ptr @.str.5605, i64 1, i64 0 }, ptr %a582
call void @finch_str_concat(ptr %a580, ptr %a581, ptr %a582)
%t583 = load { ptr, i64, i64 }, ptr %a580
call void @finch.gen.emit(ptr %t565, { ptr, i64, i64 } %t583)
%t584 = load ptr, ptr %a1
%t585 = load { ptr, i64, i64 }, ptr %a564
%t586 = call { ptr, i64, i64 } @finch.gen.load(ptr %t584, { ptr, i64, i64 } { ptr @.str.5606, i64 17, i64 0 }, { ptr, i64, i64 } %t585)
%t587 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t586, 0
%t588 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5607, i64 2, i64 0 })
%t589 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t588)
%t590 = insertvalue %S.gen.Val %t587, %S.ast.Type %t589, 1
%t591 = insertvalue %S.gen.Val %t590, i1 true, 2
ret %S.gen.Val %t591
endif8196:
%t592 = load ptr, ptr %a1
%t593 = load %S.ast.Node, ptr %a2
%t594 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } { ptr @.str.5608, i64 21, i64 0 }, ptr %a596
store { ptr, i64, i64 } %t594, ptr %a597
call void @finch_str_concat(ptr %a595, ptr %a596, ptr %a597)
%t598 = load { ptr, i64, i64 }, ptr %a595
store { ptr, i64, i64 } %t598, ptr %a600
store { ptr, i64, i64 } { ptr @.str.5609, i64 106, i64 0 }, ptr %a601
call void @finch_str_concat(ptr %a599, ptr %a600, ptr %a601)
%t602 = load { ptr, i64, i64 }, ptr %a599
call void @finch.gen.fail(ptr %t592, %S.ast.Node %t593, { ptr, i64, i64 } %t602)
ret %S.gen.Val zeroinitializer
}
define internal { ptr, i64, i64 } @finch.gen.runtimeDecls() {
entry:
%a77 = 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
%t1 = mul i64 71, 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.5610, i64 54, i64 0 }, ptr %t3
%t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1
store { ptr, i64, i64 } { ptr @.str.5611, i64 65, i64 0 }, ptr %t4
%t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2
store { ptr, i64, i64 } { ptr @.str.5612, i64 29, i64 0 }, ptr %t5
%t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3
store { ptr, i64, i64 } { ptr @.str.5613, i64 38, i64 0 }, ptr %t6
%t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4
store { ptr, i64, i64 } { ptr @.str.5614, i64 32, i64 0 }, ptr %t7
%t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5
store { ptr, i64, i64 } { ptr @.str.5615, i64 45, i64 0 }, ptr %t8
%t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6
store { ptr, i64, i64 } { ptr @.str.5616, i64 35, i64 0 }, ptr %t9
%t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7
store { ptr, i64, i64 } { ptr @.str.5617, i64 36, i64 0 }, ptr %t10
%t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8
store { ptr, i64, i64 } { ptr @.str.5618, i64 42, i64 0 }, ptr %t11
%t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9
store { ptr, i64, i64 } { ptr @.str.5619, i64 37, i64 0 }, ptr %t12
%t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10
store { ptr, i64, i64 } { ptr @.str.5620, i64 38, i64 0 }, ptr %t13
%t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11
store { ptr, i64, i64 } { ptr @.str.5621, i64 42, i64 0 }, ptr %t14
%t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12
store { ptr, i64, i64 } { ptr @.str.5622, i64 38, i64 0 }, ptr %t15
%t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13
store { ptr, i64, i64 } { ptr @.str.5623, i64 37, i64 0 }, ptr %t16
%t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14
store { ptr, i64, i64 } { ptr @.str.5624, i64 42, i64 0 }, ptr %t17
%t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15
store { ptr, i64, i64 } { ptr @.str.5625, i64 42, i64 0 }, ptr %t18
%t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16
store { ptr, i64, i64 } { ptr @.str.5626, i64 34, i64 0 }, ptr %t19
%t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 17
store { ptr, i64, i64 } { ptr @.str.5627, i64 42, i64 0 }, ptr %t20
%t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 18
store { ptr, i64, i64 } { ptr @.str.5628, i64 43, i64 0 }, ptr %t21
%t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 19
store { ptr, i64, i64 } { ptr @.str.5629, i64 47, i64 0 }, ptr %t22
%t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 20
store { ptr, i64, i64 } { ptr @.str.5630, i64 50, i64 0 }, ptr %t23
%t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 21
store { ptr, i64, i64 } { ptr @.str.5631, i64 43, i64 0 }, ptr %t24
%t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 22
store { ptr, i64, i64 } { ptr @.str.5632, i64 44, i64 0 }, ptr %t25
%t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 23
store { ptr, i64, i64 } { ptr @.str.5633, i64 49, i64 0 }, ptr %t26
%t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 24
store { ptr, i64, i64 } { ptr @.str.5634, i64 57, i64 0 }, ptr %t27
%t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 25
store { ptr, i64, i64 } { ptr @.str.5635, i64 37, i64 0 }, ptr %t28
%t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 26
store { ptr, i64, i64 } { ptr @.str.5636, i64 39, i64 0 }, ptr %t29
%t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 27
store { ptr, i64, i64 } { ptr @.str.5637, i64 37, i64 0 }, ptr %t30
%t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 28
store { ptr, i64, i64 } { ptr @.str.5638, i64 38, i64 0 }, ptr %t31
%t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 29
store { ptr, i64, i64 } { ptr @.str.5639, i64 39, i64 0 }, ptr %t32
%t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 30
store { ptr, i64, i64 } { ptr @.str.5640, i64 39, i64 0 }, ptr %t33
%t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 31
store { ptr, i64, i64 } { ptr @.str.5641, i64 51, i64 0 }, ptr %t34
%t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 32
store { ptr, i64, i64 } { ptr @.str.5642, i64 44, i64 0 }, ptr %t35
%t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 33
store { ptr, i64, i64 } { ptr @.str.5643, i64 43, i64 0 }, ptr %t36
%t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 34
store { ptr, i64, i64 } { ptr @.str.5644, i64 45, i64 0 }, ptr %t37
%t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 35
store { ptr, i64, i64 } { ptr @.str.5645, i64 44, i64 0 }, ptr %t38
%t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 36
store { ptr, i64, i64 } { ptr @.str.5646, i64 52, i64 0 }, ptr %t39
%t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 37
store { ptr, i64, i64 } { ptr @.str.5647, i64 57, i64 0 }, ptr %t40
%t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 38
store { ptr, i64, i64 } { ptr @.str.5648, i64 48, i64 0 }, ptr %t41
%t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 39
store { ptr, i64, i64 } { ptr @.str.5649, i64 34, i64 0 }, ptr %t42
%t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 40
store { ptr, i64, i64 } { ptr @.str.5650, i64 48, i64 0 }, ptr %t43
%t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 41
store { ptr, i64, i64 } { ptr @.str.5651, i64 60, i64 0 }, ptr %t44
%t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 42
store { ptr, i64, i64 } { ptr @.str.5652, i64 55, i64 0 }, ptr %t45
%t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 43
store { ptr, i64, i64 } { ptr @.str.5653, i64 46, i64 0 }, ptr %t46
%t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 44
store { ptr, i64, i64 } { ptr @.str.5654, i64 48, i64 0 }, ptr %t47
%t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 45
store { ptr, i64, i64 } { ptr @.str.5655, i64 43, i64 0 }, ptr %t48
%t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 46
store { ptr, i64, i64 } { ptr @.str.5656, i64 45, i64 0 }, ptr %t49
%t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 47
store { ptr, i64, i64 } { ptr @.str.5657, i64 59, i64 0 }, ptr %t50
%t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 48
store { ptr, i64, i64 } { ptr @.str.5658, i64 49, i64 0 }, ptr %t51
%t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 49
store { ptr, i64, i64 } { ptr @.str.5659, i64 39, i64 0 }, ptr %t52
%t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 50
store { ptr, i64, i64 } { ptr @.str.5660, i64 39, i64 0 }, ptr %t53
%t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 51
store { ptr, i64, i64 } { ptr @.str.5661, i64 35, i64 0 }, ptr %t54
%t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 52
store { ptr, i64, i64 } { ptr @.str.5662, i64 35, i64 0 }, ptr %t55
%t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 53
store { ptr, i64, i64 } { ptr @.str.5663, i64 45, i64 0 }, ptr %t56
%t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 54
store { ptr, i64, i64 } { ptr @.str.5664, i64 47, i64 0 }, ptr %t57
%t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 55
store { ptr, i64, i64 } { ptr @.str.5665, i64 47, i64 0 }, ptr %t58
%t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 56
store { ptr, i64, i64 } { ptr @.str.5666, i64 48, i64 0 }, ptr %t59
%t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 57
store { ptr, i64, i64 } { ptr @.str.5667, i64 44, i64 0 }, ptr %t60
%t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 58
store { ptr, i64, i64 } { ptr @.str.5668, i64 37, i64 0 }, ptr %t61
%t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 59
store { ptr, i64, i64 } { ptr @.str.5669, i64 49, i64 0 }, ptr %t62
%t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 60
store { ptr, i64, i64 } { ptr @.str.5670, i64 39, i64 0 }, ptr %t63
%t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 61
store { ptr, i64, i64 } { ptr @.str.5671, i64 29, i64 0 }, ptr %t64
%t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 62
store { ptr, i64, i64 } { ptr @.str.5672, i64 35, i64 0 }, ptr %t65
%t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 63
store { ptr, i64, i64 } { ptr @.str.5673, i64 29, i64 0 }, ptr %t66
%t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 64
store { ptr, i64, i64 } { ptr @.str.5674, i64 24, i64 0 }, ptr %t67
%t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 65
store { ptr, i64, i64 } { ptr @.str.5675, i64 40, i64 0 }, ptr %t68
%t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 66
store { ptr, i64, i64 } { ptr @.str.5676, i64 33, i64 0 }, ptr %t69
%t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 67
store { ptr, i64, i64 } { ptr @.str.5677, i64 34, i64 0 }, ptr %t70
%t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 68
store { ptr, i64, i64 } { ptr @.str.5678, i64 44, i64 0 }, ptr %t71
%t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 69
store { ptr, i64, i64 } { ptr @.str.5679, i64 32, i64 0 }, ptr %t72
%t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 70
store { ptr, i64, i64 } { ptr @.str.5680, i64 23, i64 0 }, ptr %t73
%t74 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0
%t75 = insertvalue { ptr, i64, i64 } %t74, i64 71, 1
%t76 = insertvalue { ptr, i64, i64 } %t75, i64 71, 2
store { ptr, i64, i64 } %t76, ptr %a77
%t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a77, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.5681, i64 1, i64 0 }, ptr %a79
call void @finch_str_join(ptr %a80, ptr %a77, ptr %a79)
%t81 = load { ptr, i64, i64 }, ptr %a80
store { ptr, i64, i64 } %t81, ptr %a83
store { ptr, i64, i64 } { ptr @.str.5682, i64 1, i64 0 }, ptr %a84
call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84)
%t85 = load { ptr, i64, i64 }, ptr %a82
ret { ptr, i64, i64 } %t85
}
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
%a22 = alloca { ptr, i64, i64 }, align 16
%a23 = alloca { ptr, i64, i64 }, align 16
%a24 = 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
%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
%a47 = alloca { ptr, i64, i64 }, align 16
%a48 = alloca { ptr, i64, i64 }, align 16
%a49 = 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 { 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
%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
%a88 = alloca { ptr, i64, i64 }, align 16
%a89 = alloca { ptr, i64, i64 }, align 16
store ptr %p0, ptr %a1
store { ptr, i64, i64 } { ptr @.str.5683, i64 52, i64 0 }, ptr %a2
%t3 = load ptr, ptr %a1
%t4 = icmp eq ptr %t3, null
br i1 %t4, label %panic8197, label %ok8198
panic8197:
call void @finch_panic(ptr @.str.5684, i64 5109, ptr @.str.5685)
unreachable
ok8198:
%t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 29
%t6 = getelementptr inbounds %S.platform.Target, ptr %t5, i32 0, i32 5
%t7 = load i1, ptr %t6
br i1 %t7, label %then8199, label %endif8201
then8199:
%t8 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t8, ptr %a10
store { ptr, i64, i64 } { ptr @.str.5686, 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 %panic8202, label %ok8203
panic8202:
call void @finch_panic(ptr @.str.5687, i64 5110, ptr @.str.5688)
unreachable
ok8203:
%t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 29
%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)
%t21 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t21, ptr %a23
store { ptr, i64, i64 } { ptr @.str.5689, i64 3, i64 0 }, 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 %a2
br label %endif8201
endif8201:
%t26 = load { ptr, i64, i64 }, ptr %a2
%t27 = load ptr, ptr %a1
%t28 = icmp eq ptr %t27, null
br i1 %t28, label %panic8204, label %ok8205
panic8204:
call void @finch_panic(ptr @.str.5690, i64 5112, ptr @.str.5691)
unreachable
ok8205:
%t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 2
%t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.5692, i64 1, i64 0 }, ptr %a31
call void @finch_str_join(ptr %a32, ptr %t29, ptr %a31)
%t33 = load { ptr, i64, i64 }, ptr %a32
store { ptr, i64, i64 } %t26, ptr %a35
store { ptr, i64, i64 } %t33, ptr %a36
call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36)
%t37 = load { ptr, i64, i64 }, ptr %a34
store { ptr, i64, i64 } %t37, ptr %a39
store { ptr, i64, i64 } { ptr @.str.5693, i64 2, i64 0 }, ptr %a40
call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40)
%t41 = load { ptr, i64, i64 }, ptr %a38
%t42 = call { ptr, i64, i64 } @finch.gen.runtimeDecls()
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)
%t46 = load { ptr, i64, i64 }, ptr %a43
store { ptr, i64, i64 } %t46, ptr %a48
store { ptr, i64, i64 } { ptr @.str.5694, i64 1, i64 0 }, 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 %a2
%t51 = load ptr, ptr %a1
%t52 = icmp eq ptr %t51, null
br i1 %t52, label %panic8206, label %ok8207
panic8206:
call void @finch_panic(ptr @.str.5695, i64 5113, ptr @.str.5696)
unreachable
ok8207:
%t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 28
%t54 = load i1, ptr %t53
br i1 %t54, label %then8208, label %endif8210
then8208:
%t55 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t55, ptr %a57
store { ptr, i64, i64 } { ptr @.str.5697, i64 62, i64 0 }, ptr %a58
call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58)
%t59 = load { ptr, i64, i64 }, ptr %a56
store { ptr, i64, i64 } %t59, ptr %a2
br label %endif8210
endif8210:
%t60 = load { ptr, i64, i64 }, ptr %a2
%t61 = load ptr, ptr %a1
%t62 = icmp eq ptr %t61, null
br i1 %t62, label %panic8211, label %ok8212
panic8211:
call void @finch_panic(ptr @.str.5698, i64 5116, ptr @.str.5699)
unreachable
ok8212:
%t63 = getelementptr inbounds %S.gen.Gen, ptr %t61, i32 0, i32 3
%t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.5700, i64 1, 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 } %t60, 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 %a2
%t72 = load ptr, ptr %a1
%t73 = icmp eq ptr %t72, null
br i1 %t73, label %panic8213, label %ok8214
panic8213:
call void @finch_panic(ptr @.str.5701, i64 5117, ptr @.str.5702)
unreachable
ok8214:
%t74 = getelementptr inbounds %S.gen.Gen, ptr %t72, i32 0, i32 28
%t75 = load i1, ptr %t74
br i1 %t75, label %then8215, label %endif8217
then8215:
%t76 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t76, ptr %a78
store { ptr, i64, i64 } { ptr @.str.5703, i64 1, i64 0 }, ptr %a79
call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79)
%t80 = load { ptr, i64, i64 }, ptr %a77
%t81 = load ptr, ptr %a1
%t82 = call { ptr, i64, i64 } @finch.gen.dbgModule(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)
%t86 = load { ptr, i64, i64 }, ptr %a83
store { ptr, i64, i64 } %t86, ptr %a2
br label %endif8217
endif8217:
%t87 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t87, ptr %a88
call void @finch_str_copy(ptr %a89, ptr %a88)
%t90 = load { ptr, i64, i64 }, ptr %a89
ret { ptr, i64, i64 } %t90
}
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.cond8218
n.cond8218:
%t6 = load i64, ptr %a5
%t7 = icmp slt i64 %t6, %t4
br i1 %t7, label %n.body8219, label %n.end8220
n.body8219:
%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.cond8218
n.end8220:
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.cond8221
n.cond8221:
%t4 = load i64, ptr %a3
%t5 = icmp slt i64 %t4, %t2
br i1 %t5, label %n.body8222, label %n.end8223
n.body8222:
%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.live8224, label %entry.next8225
entry.live8224:
%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.next8225
entry.next8225:
%t19 = load i64, ptr %a3
%t20 = add i64 %t19, 1
store i64 %t20, ptr %a3
br label %n.cond8221
n.end8223:
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.cond8226
n.cond8226:
%t4 = load i64, ptr %a3
%t5 = icmp slt i64 %t4, %t2
br i1 %t5, label %n.body8227, label %n.end8228
n.body8227:
%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.live8229, label %entry.next8230
entry.live8229:
%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.next8230
entry.next8230:
%t19 = load i64, ptr %a3
%t20 = add i64 %t19, 1
store i64 %t20, ptr %a3
br label %n.cond8226
n.end8228:
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.cond8231
n.cond8231:
%t4 = load i64, ptr %a3
%t5 = icmp slt i64 %t4, %t2
br i1 %t5, label %n.body8232, label %n.end8233
n.body8232:
%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.live8234, label %entry.next8235
entry.live8234:
%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.next8235
entry.next8235:
%t19 = load i64, ptr %a3
%t20 = add i64 %t19, 1
store i64 %t20, ptr %a3
br label %n.cond8231
n.end8233:
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.cond8236
n.cond8236:
%t4 = load i64, ptr %a3
%t5 = icmp slt i64 %t4, %t2
br i1 %t5, label %n.body8237, label %n.end8238
n.body8237:
%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.live8239, label %entry.next8240
entry.live8239:
%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.next8240
entry.next8240:
%t19 = load i64, ptr %a3
%t20 = add i64 %t19, 1
store i64 %t20, ptr %a3
br label %n.cond8236
n.end8238:
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 { 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
%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
%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
%a132 = alloca { ptr, i64, i64 }, align 16
%a133 = alloca { ptr, i64, i64 }, align 16
%a134 = alloca { ptr, i64, i64 }, align 16
%a147 = alloca i64, align 16
%a197 = alloca { ptr, i64, i64 }, align 16
%a198 = alloca { ptr, i64, i64 }, align 16
%a199 = alloca { ptr, i64, i64 }, align 16
%a210 = alloca i64, align 16
%a236 = alloca { ptr, i64, i64 }, align 16
%a237 = alloca { ptr, i64, i64 }, align 16
%a239 = alloca { ptr, i64, i64 }, align 16
%a246 = alloca { ptr, i64, i64 }, align 16
%a247 = alloca { ptr, i64, i64 }, align 16
%a252 = alloca i64, align 16
%a260 = alloca %S.gen.FnSig, align 16
%a269 = 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
%a304 = alloca %S.gen.FnSig, align 16
%a305 = alloca %S.gen.FnSig, align 16
%a307 = alloca %S.gen.FnSig, 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
%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
%a329 = alloca { ptr, i64, i64 }, align 16
%a330 = 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
%a341 = alloca { ptr, i64, i64 }, align 16
%a342 = alloca { ptr, i64, i64 }, align 16
%a343 = alloca { ptr, i64, i64 }, align 16
%a345 = 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
%a354 = alloca { ptr, i64, i64 }, align 16
%a355 = 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
%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
%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
%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
%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
%a400 = alloca { ptr, i64, i64 }, align 16
%a401 = alloca { ptr, i64, i64 }, align 16
%a402 = alloca { ptr, i64, i64 }, align 16
%a407 = alloca { ptr, i64, i64 }, align 16
%a408 = 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
%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
%a428 = alloca { ptr, i64, i64 }, align 16
%a429 = alloca { ptr, i64, i64 }, align 16
%a430 = 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
%a441 = 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
%a447 = alloca { ptr, i64, i64 }, align 16
%a448 = 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
%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
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, 24
%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, 25
%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, 26
%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, 28
%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, 29
%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, 30
%t44 = insertvalue %S.gen.Gen %t43, i64 -1, 34
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 %panic8241, label %ok8242
panic8241:
call void @finch_panic(ptr @.str.5704, i64 5127, ptr @.str.5705)
unreachable
ok8242:
%t49 = getelementptr inbounds %S.gen.Gen, ptr %t47, i32 0, i32 28
%t50 = load i1, ptr %t49
br i1 %t50, label %then8243, label %endif8245
then8243:
%t51 = load ptr, ptr %a46
%t52 = icmp eq ptr %t51, null
br i1 %t52, label %panic8246, label %ok8247
panic8246:
call void @finch_panic(ptr @.str.5706, i64 5129, ptr @.str.5707)
unreachable
ok8247:
%t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 31
%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.5708, 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 %panic8248, label %ok8249
panic8248:
call void @finch_panic(ptr @.str.5709, i64 5130, ptr @.str.5710)
unreachable
ok8249:
%t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 31
%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.5711, 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 %panic8250, label %ok8251
panic8250:
call void @finch_panic(ptr @.str.5712, i64 5131, ptr @.str.5713)
unreachable
ok8251:
%t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 31
%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.5714, i64 38, i64 0 }, ptr %t74
store i64 %t72, ptr %t70
store i64 0, ptr %a75
br label %each.cond8252
each.cond8252:
%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.body8253, label %each.end8255
each.body8253:
%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 %panic8256, label %ok8257
panic8256:
call void @finch_panic(ptr @.str.5715, i64 5133, ptr @.str.5716)
unreachable
ok8257:
%t86 = getelementptr inbounds %S.gen.Gen, ptr %t84, i32 0, i32 33
%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.5717, 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.5718, i64 15, i64 0 }, ptr %a96
call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96)
%t97 = load { ptr, i64, i64 }, ptr %a94
%t98 = load ptr, ptr %a46
%t99 = icmp eq ptr %t98, null
br i1 %t99, label %panic8258, label %ok8259
panic8258:
call void @finch_panic(ptr @.str.5719, i64 5133, ptr @.str.5720)
unreachable
ok8259:
%t100 = getelementptr inbounds %S.gen.Gen, ptr %t98, i32 0, i32 30
%t101 = load { ptr, i64, i64 }, ptr %t100
store { ptr, i64, i64 } %t97, 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.5721, i64 2, i64 0 }, ptr %a108
call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108)
%t109 = load { ptr, i64, i64 }, ptr %a106
%t110 = call i64 @finch.gen.md(ptr %t88, { ptr, i64, i64 } %t109)
%t111 = load i64, ptr %t87
%t112 = add i64 %t111, 1
call void @finch_arr_reserve(ptr %t86, i64 %t112, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64))
%t113 = load ptr, ptr %t86
%t114 = getelementptr inbounds i64, ptr %t113, i64 %t111
store i64 %t110, ptr %t114
store i64 %t112, ptr %t87
br label %each.step8254
each.step8254:
%t115 = load i64, ptr %a75
%t116 = add i64 %t115, 1
store i64 %t116, ptr %a75
br label %each.cond8252
each.end8255:
%t117 = load ptr, ptr %a46
%t118 = icmp eq ptr %t117, null
br i1 %t118, label %panic8260, label %ok8261
panic8260:
call void @finch_panic(ptr @.str.5723, i64 5135, ptr @.str.5724)
unreachable
ok8261:
%t119 = getelementptr inbounds %S.gen.Gen, ptr %t117, i32 0, i32 33
%t120 = load { ptr, i64, i64 }, ptr %t119
%t121 = extractvalue { ptr, i64, i64 } %t120, 1
%t122 = icmp uge i64 0, %t121
br i1 %t122, label %range8262, label %inrange8263
range8262:
call void @finch_panic_index(ptr @.str.5725, i64 5135, i64 0, i64 %t121)
unreachable
inrange8263:
%t123 = extractvalue { ptr, i64, i64 } %t120, 0
%t124 = getelementptr inbounds i64, ptr %t123, i64 0
%t125 = load i64, ptr %t124
call void @finch_str_from_int(ptr %a126, i64 %t125)
%t127 = load { ptr, i64, i64 }, ptr %a126
store { ptr, i64, i64 } { ptr @.str.5722, i64 52, i64 0 }, ptr %a129
store { ptr, i64, i64 } %t127, ptr %a130
call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130)
%t131 = load { ptr, i64, i64 }, ptr %a128
store { ptr, i64, i64 } %t131, ptr %a133
store { ptr, i64, i64 } { ptr @.str.5726, i64 84, i64 0 }, ptr %a134
call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134)
%t135 = load { ptr, i64, i64 }, ptr %a132
%t136 = load ptr, ptr %a46
%t137 = icmp eq ptr %t136, null
br i1 %t137, label %panic8264, label %ok8265
panic8264:
call void @finch_panic(ptr @.str.5727, i64 5135, ptr @.str.5728)
unreachable
ok8265:
%t138 = getelementptr inbounds %S.gen.Gen, ptr %t136, i32 0, i32 31
%t139 = load { ptr, i64, i64 }, ptr %t138
%t140 = extractvalue { ptr, i64, i64 } %t139, 1
%t141 = icmp uge i64 0, %t140
br i1 %t141, label %range8266, label %inrange8267
range8266:
call void @finch_panic_index(ptr @.str.5729, i64 5135, i64 0, i64 %t140)
unreachable
inrange8267:
%t142 = extractvalue { ptr, i64, i64 } %t139, 0
%t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t142, i64 0
store { ptr, i64, i64 } %t135, ptr %t143
br label %endif8245
endif8245:
%t144 = load ptr, ptr %a46
call void @finch.gen.declare(ptr %t144)
%t145 = load ptr, ptr %a46
%t146 = call i64 @finch.gen.findFn(ptr %t145, { ptr, i64, i64 } { ptr @.str.5730, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.5731, i64 4, i64 0 })
store i64 %t146, ptr %a147
%t148 = load i1, ptr %a7
br i1 %t148, label %then8268, label %else8269
then8268:
%t149 = load i64, ptr %a147
%t150 = icmp sge i64 %t149, 0
br i1 %t150, label %then8271, label %endif8273
then8271:
%t151 = load ptr, ptr %a46
%t152 = load ptr, ptr %a46
%t153 = icmp eq ptr %t152, null
br i1 %t153, label %panic8274, label %ok8275
panic8274:
call void @finch_panic(ptr @.str.5732, i64 5141, ptr @.str.5733)
unreachable
ok8275:
%t154 = getelementptr inbounds %S.gen.Gen, ptr %t152, i32 0, i32 0
%t155 = load ptr, ptr %a46
%t156 = icmp eq ptr %t155, null
br i1 %t156, label %panic8276, label %ok8277
panic8276:
call void @finch_panic(ptr @.str.5734, i64 5141, ptr @.str.5735)
unreachable
ok8277:
%t157 = getelementptr inbounds %S.gen.Gen, ptr %t155, i32 0, i32 14
%t158 = load i64, ptr %a147
%t159 = load { ptr, i64, i64 }, ptr %t157
%t160 = extractvalue { ptr, i64, i64 } %t159, 1
%t161 = icmp uge i64 %t158, %t160
br i1 %t161, label %range8278, label %inrange8279
range8278:
call void @finch_panic_index(ptr @.str.5736, i64 5141, i64 %t158, i64 %t160)
unreachable
inrange8279:
%t162 = extractvalue { ptr, i64, i64 } %t159, 0
%t163 = getelementptr inbounds %S.gen.FnSig, ptr %t162, i64 %t158
%t164 = getelementptr inbounds %S.gen.FnSig, ptr %t163, i32 0, i32 16
%t165 = load i64, ptr %t164
%t166 = load { ptr, i64, i64 }, ptr %t154
%t167 = extractvalue { ptr, i64, i64 } %t166, 1
%t168 = icmp uge i64 %t165, %t167
br i1 %t168, label %range8280, label %inrange8281
range8280:
call void @finch_panic_index(ptr @.str.5737, i64 5141, i64 %t165, i64 %t167)
unreachable
inrange8281:
%t169 = extractvalue { ptr, i64, i64 } %t166, 0
%t170 = getelementptr inbounds %S.ast.Program, ptr %t169, i64 %t165
%t171 = getelementptr inbounds %S.ast.Program, ptr %t170, i32 0, i32 8
%t172 = load ptr, ptr %a46
%t173 = icmp eq ptr %t172, null
br i1 %t173, label %panic8282, label %ok8283
panic8282:
call void @finch_panic(ptr @.str.5738, i64 5141, ptr @.str.5739)
unreachable
ok8283:
%t174 = getelementptr inbounds %S.gen.Gen, ptr %t172, i32 0, i32 14
%t175 = load i64, ptr %a147
%t176 = load { ptr, i64, i64 }, ptr %t174
%t177 = extractvalue { ptr, i64, i64 } %t176, 1
%t178 = icmp uge i64 %t175, %t177
br i1 %t178, label %range8284, label %inrange8285
range8284:
call void @finch_panic_index(ptr @.str.5740, i64 5141, i64 %t175, i64 %t177)
unreachable
inrange8285:
%t179 = extractvalue { ptr, i64, i64 } %t176, 0
%t180 = getelementptr inbounds %S.gen.FnSig, ptr %t179, i64 %t175
%t181 = getelementptr inbounds %S.gen.FnSig, ptr %t180, i32 0, i32 17
%t182 = load i64, ptr %t181
%t183 = load { ptr, i64, i64 }, ptr %t171
%t184 = extractvalue { ptr, i64, i64 } %t183, 1
%t185 = icmp uge i64 %t182, %t184
br i1 %t185, label %range8286, label %inrange8287
range8286:
call void @finch_panic_index(ptr @.str.5741, i64 5141, i64 %t182, i64 %t184)
unreachable
inrange8287:
%t186 = extractvalue { ptr, i64, i64 } %t183, 0
%t187 = getelementptr inbounds %S.ast.Node, ptr %t186, i64 %t182
%t188 = load %S.ast.Node, ptr %t187
call void @finch.gen.fail(ptr %t151, %S.ast.Node %t188, { ptr, i64, i64 } { ptr @.str.5742, i64 82, i64 0 })
br label %endif8273
endif8273:
br label %endif8270
else8269:
%t189 = load i64, ptr %a147
%t190 = icmp slt i64 %t189, 0
br i1 %t190, label %then8288, label %endif8290
then8288:
%t191 = load { ptr, i64, i64 }, ptr %a2
%t192 = extractvalue { ptr, i64, i64 } %t191, 1
%t193 = icmp uge i64 0, %t192
br i1 %t193, label %range8291, label %inrange8292
range8291:
call void @finch_panic_index(ptr @.str.5743, i64 5144, i64 0, i64 %t192)
unreachable
inrange8292:
%t194 = extractvalue { ptr, i64, i64 } %t191, 0
%t195 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i64 0
%t196 = load { ptr, i64, i64 }, ptr %t195
store { ptr, i64, i64 } %t196, ptr %a198
store { ptr, i64, i64 } { ptr @.str.5744, i64 64, i64 0 }, ptr %a199
call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199)
%t200 = load { ptr, i64, i64 }, ptr %a197
%t201 = extractvalue { ptr, i64, i64 } %t200, 1
%t202 = trunc i64 %t201 to i32
%t203 = extractvalue { ptr, i64, i64 } %t200, 0
%t204 = icmp eq ptr %t203, null
%t205 = select i1 %t204, ptr @.str.5745, ptr %t203
%t206 = call i32 (ptr, ...) @printf(ptr @.str.5746, i32 %t202, ptr %t205)
%t207 = call i32 (ptr, ...) @printf(ptr @.str.5747)
%t208 = trunc i64 1 to i32
%t209 = call i32 @fflush(ptr null)
call void @exit(i32 %t208)
br label %endif8290
endif8290:
br label %endif8270
endif8270:
store i64 0, ptr %a210
br label %while.cond8293
while.cond8293:
%t211 = load i64, ptr %a210
%t212 = load ptr, ptr %a46
%t213 = icmp eq ptr %t212, null
br i1 %t213, label %panic8296, label %ok8297
panic8296:
call void @finch_panic(ptr @.str.5748, i64 5149, ptr @.str.5749)
unreachable
ok8297:
%t214 = getelementptr inbounds %S.gen.Gen, ptr %t212, i32 0, i32 14
%t215 = getelementptr inbounds { ptr, i64, i64 }, ptr %t214, i32 0, i32 1
%t216 = load i64, ptr %t215
%t217 = icmp slt i64 %t211, %t216
br i1 %t217, label %while.body8294, label %while.end8295
while.body8294:
%t218 = load ptr, ptr %a46
%t219 = load i64, ptr %a210
call void @finch.gen.define(ptr %t218, i64 %t219)
%t220 = load i64, ptr %a210
%t221 = add i64 %t220, 1
store i64 %t221, ptr %a210
br label %while.cond8293
while.end8295:
%t222 = load ptr, ptr %a46
%t223 = icmp eq ptr %t222, null
br i1 %t223, label %panic8298, label %ok8299
panic8298:
call void @finch_panic(ptr @.str.5750, i64 5153, ptr @.str.5751)
unreachable
ok8299:
%t224 = getelementptr inbounds %S.gen.Gen, ptr %t222, i32 0, i32 26
%t225 = load i1, ptr %t224
br i1 %t225, label %then8300, label %endif8302
then8300:
%t226 = load ptr, ptr %a46
%t227 = icmp eq ptr %t226, null
br i1 %t227, label %panic8303, label %ok8304
panic8303:
call void @finch_panic(ptr @.str.5752, i64 5154, ptr @.str.5753)
unreachable
ok8304:
%t228 = getelementptr inbounds %S.gen.Gen, ptr %t226, i32 0, i32 0
%t229 = load { ptr, i64, i64 }, ptr %t228
%t230 = extractvalue { ptr, i64, i64 } %t229, 1
%t231 = icmp uge i64 0, %t230
br i1 %t231, label %range8305, label %inrange8306
range8305:
call void @finch_panic_index(ptr @.str.5754, i64 5154, i64 0, i64 %t230)
unreachable
inrange8306:
%t232 = extractvalue { ptr, i64, i64 } %t229, 0
%t233 = getelementptr inbounds %S.ast.Program, ptr %t232, i64 0
%t234 = getelementptr inbounds %S.ast.Program, ptr %t233, i32 0, i32 2
%t235 = load { ptr, i64, i64 }, ptr %t234
store { ptr, i64, i64 } %t235, ptr %a236
call void @finch.copy.arr_str(ptr %a237, ptr %a236)
%t238 = load { ptr, i64, i64 }, ptr %a237
store { ptr, i64, i64 } %t238, ptr %a239
%t240 = load ptr, ptr %a46
%t241 = load { ptr, i64, i64 }, ptr %a239
call void @finch.gen.indexAll(ptr %t240, { ptr, i64, i64 } %t241)
%t242 = load ptr, ptr %a46
%t243 = icmp eq ptr %t242, null
br i1 %t243, label %panic8307, label %ok8308
panic8307:
call void @finch_panic(ptr @.str.5755, i64 5156, ptr @.str.5756)
unreachable
ok8308:
%t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 27
%t245 = getelementptr inbounds { ptr, i64, i64 }, ptr %t244, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.5757, i64 1, i64 0 }, ptr %a246
call void @finch_str_join(ptr %a247, ptr %t244, ptr %a246)
%t248 = load { ptr, i64, i64 }, ptr %a247
ret { ptr, i64, i64 } %t248
endif8302:
%t249 = load ptr, ptr %a46
%t250 = icmp eq ptr %t249, null
br i1 %t250, label %panic8309, label %ok8310
panic8309:
call void @finch_panic(ptr @.str.5758, i64 5158, ptr @.str.5759)
unreachable
ok8310:
%t251 = getelementptr inbounds %S.gen.Gen, ptr %t249, i32 0, i32 14
store i64 0, ptr %a252
br label %each.cond8311
each.cond8311:
%t253 = getelementptr inbounds { ptr, i64, i64 }, ptr %t251, i32 0, i32 1
%t254 = load i64, ptr %t253
%t255 = load i64, ptr %a252
%t256 = icmp slt i64 %t255, %t254
br i1 %t256, label %each.body8312, label %each.end8314
each.body8312:
%t257 = load ptr, ptr %t251
%t258 = getelementptr inbounds %S.gen.FnSig, ptr %t257, i64 %t255
%t259 = load %S.gen.FnSig, ptr %t258
store %S.gen.FnSig %t259, ptr %a260
%t261 = getelementptr inbounds %S.gen.FnSig, ptr %a260, i32 0, i32 5
%t262 = load i1, ptr %t261
br i1 %t262, label %then8315, label %endif8317
then8315:
%t263 = load ptr, ptr %a46
%t264 = load %S.gen.FnSig, ptr %a260
%t265 = call { ptr, i64, i64 } @finch.gen.exportWrapper(ptr %t263, %S.gen.FnSig %t264)
br label %endif8317
endif8317:
br label %each.step8313
each.step8313:
%t266 = load i64, ptr %a252
%t267 = add i64 %t266, 1
store i64 %t267, ptr %a252
br label %each.cond8311
each.end8314:
%t268 = load i1, ptr %a7
br i1 %t268, label %then8318, label %endif8320
then8318:
store { ptr, i64, i64 } { ptr @.str.5760, i64 0, i64 0 }, ptr %a269
%t270 = load ptr, ptr %a46
%t271 = icmp eq ptr %t270, null
br i1 %t271, label %panic8321, label %ok8322
panic8321:
call void @finch_panic(ptr @.str.5761, i64 5166, ptr @.str.5762)
unreachable
ok8322:
%t272 = getelementptr inbounds %S.gen.Gen, ptr %t270, i32 0, i32 29
%t273 = getelementptr inbounds %S.platform.Target, ptr %t272, i32 0, i32 1
%t274 = load i1, ptr %t273
br i1 %t274, label %then8323, label %endif8325
then8323:
store { ptr, i64, i64 } { ptr @.str.5763, i64 10, i64 0 }, ptr %a269
br label %endif8325
endif8325:
%t275 = load ptr, ptr %a46
%t276 = icmp eq ptr %t275, null
br i1 %t276, label %panic8326, label %ok8327
panic8326:
call void @finch_panic(ptr @.str.5764, i64 5169, ptr @.str.5765)
unreachable
ok8327:
%t277 = getelementptr inbounds %S.gen.Gen, ptr %t275, i32 0, i32 3
%t278 = getelementptr inbounds { ptr, i64, i64 }, ptr %t277, i32 0, i32 1
%t279 = load { ptr, i64, i64 }, ptr %a269
store { ptr, i64, i64 } { ptr @.str.5766, i64 6, i64 0 }, ptr %a281
store { ptr, i64, i64 } %t279, ptr %a282
call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282)
%t283 = load { ptr, i64, i64 }, ptr %a280
store { ptr, i64, i64 } %t283, ptr %a285
store { ptr, i64, i64 } { ptr @.str.5767, i64 107, i64 0 }, ptr %a286
call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286)
%t287 = load { ptr, i64, i64 }, ptr %a284
%t288 = load i64, ptr %t278
%t289 = add i64 %t288, 1
call void @finch_arr_reserve(ptr %t277, i64 %t289, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t290 = load ptr, ptr %t277
%t291 = getelementptr inbounds { ptr, i64, i64 }, ptr %t290, i64 %t288
store { ptr, i64, i64 } %t287, ptr %t291
store i64 %t289, ptr %t278
%t292 = load ptr, ptr %a46
%t293 = call { ptr, i64, i64 } @finch.gen.assemble(ptr %t292)
ret { ptr, i64, i64 } %t293
endif8320:
%t294 = load ptr, ptr %a46
%t295 = icmp eq ptr %t294, null
br i1 %t295, label %panic8328, label %ok8329
panic8328:
call void @finch_panic(ptr @.str.5768, i64 5173, ptr @.str.5769)
unreachable
ok8329:
%t296 = getelementptr inbounds %S.gen.Gen, ptr %t294, i32 0, i32 14
%t297 = load i64, ptr %a147
%t298 = load { ptr, i64, i64 }, ptr %t296
%t299 = extractvalue { ptr, i64, i64 } %t298, 1
%t300 = icmp uge i64 %t297, %t299
br i1 %t300, label %range8330, label %inrange8331
range8330:
call void @finch_panic_index(ptr @.str.5770, i64 5173, i64 %t297, i64 %t299)
unreachable
inrange8331:
%t301 = extractvalue { ptr, i64, i64 } %t298, 0
%t302 = getelementptr inbounds %S.gen.FnSig, ptr %t301, i64 %t297
%t303 = load %S.gen.FnSig, ptr %t302
store %S.gen.FnSig %t303, ptr %a304
call void @finch.copy.S_gen_FnSig(ptr %a305, ptr %a304)
%t306 = load %S.gen.FnSig, ptr %a305
store %S.gen.FnSig %t306, ptr %a307
%t308 = load ptr, ptr %a46
%t309 = load %S.gen.FnSig, ptr %a307
%t310 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t308, %S.gen.FnSig %t309)
store { ptr, i64, i64 } { ptr @.str.5771, i64 5, i64 0 }, ptr %a312
store { ptr, i64, i64 } %t310, ptr %a313
call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313)
%t314 = load { ptr, i64, i64 }, ptr %a311
store { ptr, i64, i64 } %t314, ptr %a316
store { ptr, i64, i64 } { ptr @.str.5772, i64 1, i64 0 }, ptr %a317
call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317)
%t318 = load { ptr, i64, i64 }, ptr %a315
%t319 = getelementptr inbounds %S.gen.FnSig, ptr %a307, i32 0, i32 11
%t320 = load { ptr, i64, i64 }, ptr %t319
store { ptr, i64, i64 } %t318, 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.5773, i64 1, i64 0 }, ptr %a327
call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327)
%t328 = load { ptr, i64, i64 }, ptr %a325
store { ptr, i64, i64 } %t328, ptr %a329
store { ptr, i64, i64 } { ptr @.str.5774, i64 0, i64 0 }, ptr %a330
%t331 = getelementptr inbounds %S.gen.FnSig, ptr %a307, i32 0, i32 13
%t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i32 0, i32 1
%t333 = load i64, ptr %t332
%t334 = icmp eq i64 %t333, 1
br i1 %t334, label %then8332, label %endif8334
then8332:
store { ptr, i64, i64 } { ptr @.str.5775, i64 133, i64 0 }, ptr %a330
%t335 = load { ptr, i64, i64 }, ptr %a329
store { ptr, i64, i64 } %t335, ptr %a337
store { ptr, i64, i64 } { ptr @.str.5776, i64 20, i64 0 }, ptr %a338
call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338)
%t339 = load { ptr, i64, i64 }, ptr %a336
store { ptr, i64, i64 } %t339, ptr %a329
br label %endif8334
endif8334:
%t340 = load { ptr, i64, i64 }, ptr %a329
store { ptr, i64, i64 } %t340, ptr %a342
store { ptr, i64, i64 } { ptr @.str.5777, i64 1, i64 0 }, ptr %a343
call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343)
%t344 = load { ptr, i64, i64 }, ptr %a341
store { ptr, i64, i64 } %t344, ptr %a329
store { ptr, i64, i64 } { ptr @.str.5778, i64 12, i64 0 }, ptr %a345
%t346 = getelementptr inbounds %S.gen.FnSig, ptr %a307, i32 0, i32 9
%t347 = load i1, ptr %t346
br i1 %t347, label %then8335, label %else8336
then8335:
%t348 = load { ptr, i64, i64 }, ptr %a329
store { ptr, i64, i64 } { ptr @.str.5779, i64 5, i64 0 }, ptr %a350
store { ptr, i64, i64 } %t348, ptr %a351
call void @finch_str_concat(ptr %a349, ptr %a350, ptr %a351)
%t352 = load { ptr, i64, i64 }, ptr %a349
store { ptr, i64, i64 } %t352, ptr %a329
%t353 = load { ptr, i64, i64 }, ptr %a330
store { ptr, i64, i64 } %t353, ptr %a355
store { ptr, i64, i64 } { ptr @.str.5780, i64 2, i64 0 }, ptr %a356
call void @finch_str_concat(ptr %a354, ptr %a355, ptr %a356)
%t357 = load { ptr, i64, i64 }, ptr %a354
%t358 = load { ptr, i64, i64 }, ptr %a329
store { ptr, i64, i64 } %t357, 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.5781, i64 1, i64 0 }, 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 %a330
store { ptr, i64, i64 } { ptr @.str.5782, i64 0, i64 0 }, ptr %a329
%t367 = load ptr, ptr %a46
%t368 = load %S.gen.FnSig, ptr %a307
%t369 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t367, %S.gen.FnSig %t368)
store { ptr, i64, i64 } %t369, ptr %a370
%t371 = load { ptr, i64, i64 }, ptr %a330
store { ptr, i64, i64 } %t371, ptr %a373
store { ptr, i64, i64 } { ptr @.str.5783, i64 21, i64 0 }, 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 %a370
store { ptr, i64, i64 } %t375, 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.5784, i64 62, i64 0 }, ptr %a383
call void @finch_str_concat(ptr %a381, ptr %a382, ptr %a383)
%t384 = load { ptr, i64, i64 }, ptr %a381
store { ptr, i64, i64 } %t384, ptr %a330
%t385 = load { ptr, i64, i64 }, ptr %a330
store { ptr, i64, i64 } %t385, ptr %a387
store { ptr, i64, i64 } { ptr @.str.5785, i64 20, i64 0 }, ptr %a388
call void @finch_str_concat(ptr %a386, ptr %a387, ptr %a388)
%t389 = load { ptr, i64, i64 }, ptr %a386
%t390 = load { ptr, i64, i64 }, ptr %a370
store { ptr, i64, i64 } %t389, ptr %a392
store { ptr, i64, i64 } %t390, ptr %a393
call void @finch_str_concat(ptr %a391, ptr %a392, ptr %a393)
%t394 = load { ptr, i64, i64 }, ptr %a391
store { ptr, i64, i64 } %t394, ptr %a396
store { ptr, i64, i64 } { ptr @.str.5786, i64 78, i64 0 }, ptr %a397
call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397)
%t398 = load { ptr, i64, i64 }, ptr %a395
store { ptr, i64, i64 } %t398, ptr %a330
%t399 = load { ptr, i64, i64 }, ptr %a330
store { ptr, i64, i64 } %t399, ptr %a401
store { ptr, i64, i64 } { ptr @.str.5787, i64 62, i64 0 }, ptr %a402
call void @finch_str_concat(ptr %a400, ptr %a401, ptr %a402)
%t403 = load { ptr, i64, i64 }, ptr %a400
store { ptr, i64, i64 } %t403, ptr %a330
%t404 = getelementptr inbounds %S.gen.FnSig, ptr %a307, i32 0, i32 12
%t405 = getelementptr inbounds %S.ast.Type, ptr %t404, i32 0, i32 0
%t406 = load { ptr, i64, i64 }, ptr %t405
store { ptr, i64, i64 } %t406, ptr %a407
store { ptr, i64, i64 } { ptr @.str.5788, i64 3, i64 0 }, ptr %a408
%t409 = call i32 @finch_str_eq(ptr %a407, ptr %a408)
%t410 = icmp ne i32 %t409, 0
br i1 %t410, label %then8338, label %endif8340
then8338:
%t411 = load { ptr, i64, i64 }, ptr %a370
store { ptr, i64, i64 } { ptr @.str.5789, i64 20, i64 0 }, ptr %a413
store { ptr, i64, i64 } %t411, ptr %a414
call void @finch_str_concat(ptr %a412, ptr %a413, ptr %a414)
%t415 = load { ptr, i64, i64 }, ptr %a412
store { ptr, i64, i64 } %t415, ptr %a417
store { ptr, i64, i64 } { ptr @.str.5790, i64 53, i64 0 }, ptr %a418
call void @finch_str_concat(ptr %a416, ptr %a417, ptr %a418)
%t419 = load { ptr, i64, i64 }, ptr %a416
store { ptr, i64, i64 } %t419, ptr %a345
br label %endif8340
endif8340:
br label %endif8337
else8336:
%t420 = getelementptr inbounds %S.gen.FnSig, ptr %a307, i32 0, i32 12
%t421 = getelementptr inbounds %S.ast.Type, ptr %t420, i32 0, i32 0
%t422 = load { ptr, i64, i64 }, ptr %t421
store { ptr, i64, i64 } %t422, ptr %a423
store { ptr, i64, i64 } { ptr @.str.5791, i64 3, i64 0 }, ptr %a424
%t425 = call i32 @finch_str_eq(ptr %a423, ptr %a424)
%t426 = icmp ne i32 %t425, 0
br i1 %t426, label %then8341, label %endif8343
then8341:
%t427 = load { ptr, i64, i64 }, ptr %a329
store { ptr, i64, i64 } { ptr @.str.5792, i64 5, i64 0 }, ptr %a429
store { ptr, i64, i64 } %t427, ptr %a430
call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430)
%t431 = load { ptr, i64, i64 }, ptr %a428
store { ptr, i64, i64 } %t431, ptr %a329
store { ptr, i64, i64 } { ptr @.str.5793, i64 46, i64 0 }, ptr %a345
br label %endif8343
endif8343:
br label %endif8337
endif8337:
%t432 = load ptr, ptr %a46
%t433 = icmp eq ptr %t432, null
br i1 %t433, label %panic8344, label %ok8345
panic8344:
call void @finch_panic(ptr @.str.5794, i64 5198, ptr @.str.5795)
unreachable
ok8345:
%t434 = getelementptr inbounds %S.gen.Gen, ptr %t432, i32 0, i32 3
%t435 = getelementptr inbounds { ptr, i64, i64 }, ptr %t434, i32 0, i32 1
%t436 = load { ptr, i64, i64 }, ptr %a330
store { ptr, i64, i64 } { ptr @.str.5796, i64 48, i64 0 }, ptr %a438
store { ptr, i64, i64 } %t436, ptr %a439
call void @finch_str_concat(ptr %a437, ptr %a438, ptr %a439)
%t440 = load { ptr, i64, i64 }, ptr %a437
store { ptr, i64, i64 } %t440, ptr %a442
store { ptr, i64, i64 } { ptr @.str.5797, i64 2, i64 0 }, ptr %a443
call void @finch_str_concat(ptr %a441, ptr %a442, ptr %a443)
%t444 = load { ptr, i64, i64 }, ptr %a441
%t445 = load { ptr, i64, i64 }, ptr %a329
store { ptr, i64, i64 } %t444, ptr %a447
store { ptr, i64, i64 } %t445, ptr %a448
call void @finch_str_concat(ptr %a446, ptr %a447, ptr %a448)
%t449 = load { ptr, i64, i64 }, ptr %a446
store { ptr, i64, i64 } %t449, ptr %a451
store { ptr, i64, i64 } { ptr @.str.5798, i64 1, i64 0 }, ptr %a452
call void @finch_str_concat(ptr %a450, ptr %a451, ptr %a452)
%t453 = load { ptr, i64, i64 }, ptr %a450
%t454 = load { ptr, i64, i64 }, ptr %a345
store { ptr, i64, i64 } %t453, ptr %a456
store { ptr, i64, i64 } %t454, ptr %a457
call void @finch_str_concat(ptr %a455, ptr %a456, ptr %a457)
%t458 = load { ptr, i64, i64 }, ptr %a455
store { ptr, i64, i64 } %t458, ptr %a460
store { ptr, i64, i64 } { ptr @.str.5799, i64 2, i64 0 }, ptr %a461
call void @finch_str_concat(ptr %a459, ptr %a460, ptr %a461)
%t462 = load { ptr, i64, i64 }, ptr %a459
%t463 = load i64, ptr %t435
%t464 = add i64 %t463, 1
call void @finch_arr_reserve(ptr %t434, i64 %t464, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t465 = load ptr, ptr %t434
%t466 = getelementptr inbounds { ptr, i64, i64 }, ptr %t465, i64 %t463
store { ptr, i64, i64 } %t462, ptr %t466
store i64 %t464, ptr %t435
%t467 = load ptr, ptr %a46
%t468 = call { ptr, i64, i64 } @finch.gen.assemble(ptr %t467)
ret { ptr, i64, i64 } %t468
}
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.5800, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5801, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.5802, i64 78, i64 0 })
%t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5803, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5804, i64 31, i64 0 }, { ptr, i64, i64 } { ptr @.str.5805, i64 77, i64 0 })
%t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5806, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.5807, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.5808, i64 121, i64 0 })
%t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5809, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.5810, i64 38, i64 0 }, { ptr, i64, i64 } { ptr @.str.5811, i64 83, i64 0 })
%t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5812, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.5813, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.5814, i64 29, i64 0 })
%t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5815, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.5816, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.5817, i64 73, i64 0 })
%t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5818, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5819, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.5820, i64 98, i64 0 })
%t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5821, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5822, i64 25, i64 0 }, { ptr, i64, i64 } { ptr @.str.5823, i64 66, i64 0 })
%t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5824, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5825, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.5826, i64 48, i64 0 })
%t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5827, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5828, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5829, i64 77, i64 0 })
%t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5830, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5831, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.5832, i64 66, i64 0 })
%t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5833, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5834, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.5835, i64 73, i64 0 })
%t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5836, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5837, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.5838, i64 61, i64 0 })
%t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5839, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5840, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.5841, i64 130, i64 0 })
%t15 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5842, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5843, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5844, i64 75, i64 0 })
%t16 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5845, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5846, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.5847, i64 29, i64 0 })
%t17 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5848, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5849, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.5850, i64 26, i64 0 })
%t18 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5851, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5852, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.5853, 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.5854, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5855, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.5856, i64 23, i64 0 })
%t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5857, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5858, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.5859, i64 40, i64 0 })
%t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5860, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5861, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.5862, i64 18, i64 0 })
%t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5863, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5864, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.5865, i64 43, i64 0 })
%t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5866, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.5867, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.5868, i64 38, i64 0 })
%t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5869, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.5870, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.5871, i64 37, i64 0 })
%t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5872, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5873, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.5874, i64 19, i64 0 })
%t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5875, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.5876, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.5877, i64 46, i64 0 })
%t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5878, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5879, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.5880, i64 22, i64 0 })
%t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5881, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.5882, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.5883, i64 18, i64 0 })
%t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5884, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5885, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.5886, i64 37, i64 0 })
%t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5887, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.5888, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.5889, i64 18, i64 0 })
%t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5890, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5891, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.5892, i64 45, i64 0 })
%t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5893, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5894, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.5895, 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.5896, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5897, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.5898, i64 20, i64 0 })
%t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5899, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5900, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5901, i64 59, i64 0 })
%t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5902, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5903, i64 30, i64 0 }, { ptr, i64, i64 } { ptr @.str.5904, i64 29, i64 0 })
%t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5905, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5906, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.5907, i64 22, i64 0 })
%t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5908, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.5909, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.5910, i64 24, i64 0 })
%t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5911, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.5912, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.5913, i64 27, i64 0 })
%t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5914, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.5915, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.5916, i64 25, i64 0 })
%t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5917, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5918, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.5919, i64 62, i64 0 })
%t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5920, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5921, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.5922, i64 41, i64 0 })
%t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5923, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5924, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.5925, i64 24, i64 0 })
%t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5926, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5927, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.5928, i64 24, i64 0 })
%t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5929, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.5930, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.5931, i64 26, i64 0 })
%t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5932, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.5933, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.5934, i64 17, i64 0 })
%t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5935, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5936, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.5937, 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.5938, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5939, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.5940, i64 19, i64 0 })
%t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5941, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5942, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.5943, i64 22, i64 0 })
%t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5944, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5945, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.5946, i64 53, i64 0 })
%t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5947, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.5948, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.5949, i64 52, i64 0 })
%t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5950, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5951, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.5952, i64 19, i64 0 })
%t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5953, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5954, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.5955, i64 39, i64 0 })
%t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5956, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.5957, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.5958, 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.5959, i64 2, i64 0 }, ptr %t3
%t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1
store { ptr, i64, i64 } { ptr @.str.5960, i64 6, i64 0 }, ptr %t4
%t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2
store { ptr, i64, i64 } { ptr @.str.5961, i64 2, i64 0 }, ptr %t5
%t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3
store { ptr, i64, i64 } { ptr @.str.5962, i64 4, i64 0 }, ptr %t6
%t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4
store { ptr, i64, i64 } { ptr @.str.5963, i64 5, i64 0 }, ptr %t7
%t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5
store { ptr, i64, i64 } { ptr @.str.5964, i64 3, i64 0 }, ptr %t8
%t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6
store { ptr, i64, i64 } { ptr @.str.5965, i64 2, i64 0 }, ptr %t9
%t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7
store { ptr, i64, i64 } { ptr @.str.5966, i64 5, i64 0 }, ptr %t10
%t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8
store { ptr, i64, i64 } { ptr @.str.5967, i64 8, i64 0 }, ptr %t11
%t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9
store { ptr, i64, i64 } { ptr @.str.5968, i64 4, i64 0 }, ptr %t12
%t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10
store { ptr, i64, i64 } { ptr @.str.5969, i64 5, i64 0 }, ptr %t13
%t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11
store { ptr, i64, i64 } { ptr @.str.5970, i64 4, i64 0 }, ptr %t14
%t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12
store { ptr, i64, i64 } { ptr @.str.5971, i64 6, i64 0 }, ptr %t15
%t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13
store { ptr, i64, i64 } { ptr @.str.5972, i64 4, i64 0 }, ptr %t16
%t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14
store { ptr, i64, i64 } { ptr @.str.5973, i64 6, i64 0 }, ptr %t17
%t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15
store { ptr, i64, i64 } { ptr @.str.5974, i64 4, i64 0 }, ptr %t18
%t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16
store { ptr, i64, i64 } { ptr @.str.5975, i64 5, i64 0 }, ptr %t19
%t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 17
store { ptr, i64, i64 } { ptr @.str.5976, i64 6, i64 0 }, ptr %t20
%t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 18
store { ptr, i64, i64 } { ptr @.str.5977, i64 5, i64 0 }, ptr %t21
%t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 19
store { ptr, i64, i64 } { ptr @.str.5978, i64 2, i64 0 }, ptr %t22
%t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 20
store { ptr, i64, i64 } { ptr @.str.5979, i64 3, i64 0 }, ptr %t23
%t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 21
store { ptr, i64, i64 } { ptr @.str.5980, 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.5981, i64 3, i64 0 }, ptr %t3
%t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1
store { ptr, i64, i64 } { ptr @.str.5982, i64 5, i64 0 }, ptr %t4
%t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2
store { ptr, i64, i64 } { ptr @.str.5983, i64 4, i64 0 }, ptr %t5
%t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3
store { ptr, i64, i64 } { ptr @.str.5984, i64 4, i64 0 }, ptr %t6
%t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4
store { ptr, i64, i64 } { ptr @.str.5985, i64 3, i64 0 }, ptr %t7
%t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5
store { ptr, i64, i64 } { ptr @.str.5986, i64 3, i64 0 }, ptr %t8
%t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6
store { ptr, i64, i64 } { ptr @.str.5987, i64 3, i64 0 }, ptr %t9
%t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7
store { ptr, i64, i64 } { ptr @.str.5988, i64 2, i64 0 }, ptr %t10
%t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8
store { ptr, i64, i64 } { ptr @.str.5989, i64 3, i64 0 }, ptr %t11
%t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9
store { ptr, i64, i64 } { ptr @.str.5990, i64 3, i64 0 }, ptr %t12
%t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10
store { ptr, i64, i64 } { ptr @.str.5991, i64 3, i64 0 }, ptr %t13
%t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11
store { ptr, i64, i64 } { ptr @.str.5992, i64 2, i64 0 }, ptr %t14
%t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12
store { ptr, i64, i64 } { ptr @.str.5993, i64 3, i64 0 }, ptr %t15
%t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13
store { ptr, i64, i64 } { ptr @.str.5994, i64 3, i64 0 }, ptr %t16
%t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14
store { ptr, i64, i64 } { ptr @.str.5995, i64 3, i64 0 }, ptr %t17
%t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15
store { ptr, i64, i64 } { ptr @.str.5996, i64 3, i64 0 }, ptr %t18
%t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16
store { ptr, i64, i64 } { ptr @.str.5997, 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 %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
store { ptr, i64, i64 } %p0, ptr %a1
store { ptr, i64, i64 } %p1, ptr %a2
store i64 0, ptr %a3
br label %each.cond8346
each.cond8346:
%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.body8347, label %each.end8349
each.body8347:
%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 %then8350, label %endif8352
then8350:
%t19 = load %S.docs.Doc, ptr %a11
ret %S.docs.Doc %t19
endif8352:
br label %each.step8348
each.step8348:
%t20 = load i64, ptr %a3
%t21 = add i64 %t20, 1
store i64 %t21, ptr %a3
br label %each.cond8346
each.end8349:
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
%a14 = alloca { ptr, i64, i64 }, align 16
%a15 = alloca { ptr, i64, i64 }, align 16
%a16 = 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.5998, 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.5999, i64 5, 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.docs.Doc, ptr %a1, i32 0, i32 2
%t13 = load { ptr, i64, i64 }, ptr %t12
store { ptr, i64, i64 } %t11, 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
ret { ptr, i64, i64 } %t17
}
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
%a22 = alloca { ptr, i64, i64 }, align 16
%a23 = alloca { ptr, i64, i64 }, 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
store { ptr, i64, i64 } %t21, ptr %a22
call void @finch_str_copy(ptr %a23, ptr %a22)
%t24 = load { ptr, i64, i64 }, ptr %a23
ret { ptr, i64, i64 } %t24
}
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
%a18 = alloca %S.ast.Type, align 16
%a19 = 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.6000, 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
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
ret %S.ast.Type %t20
}
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
%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
%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
%a18 = alloca { ptr, i64, i64 }, align 16
%a19 = 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
%a30 = alloca i1, 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
%a40 = alloca { ptr, i64, i64 }, align 16
%a41 = alloca i64, align 16
%a49 = 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
%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
%a63 = alloca { ptr, i64, i64 }, align 16
%a64 = 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
%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
%a97 = alloca { ptr, i64, i64 }, align 16
%a98 = alloca { ptr, i64, i64 }, align 16
%a99 = 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
%a116 = alloca { ptr, i64, i64 }, align 16
%a117 = alloca { ptr, i64, i64 }, align 16
%a120 = alloca { ptr, i64, i64 }, align 16
%a121 = alloca { ptr, i64, i64 }, align 16
store { ptr, i64, i64 } %p0, ptr %a1
store { ptr, i64, i64 } zeroinitializer, ptr %a2
store { ptr, i64, i64 } { ptr @.str.6001, i64 22, i64 0 }, ptr %a3
%t4 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t4, ptr %a6
store { ptr, i64, i64 } { ptr @.str.6002, i64 26, i64 0 }, ptr %a7
call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7)
%t8 = load { ptr, i64, i64 }, ptr %a5
%t9 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t8, 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.6003, i64 13, i64 0 }, 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
call void @finch_str_copy(ptr %a18, ptr %a19)
%t20 = call i64 @finch_shell(ptr %a18)
%t21 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t21, ptr %a22
%t23 = call i32 @finch_file_exists(ptr %a22)
%t24 = icmp ne i32 %t23, 0
%t25 = xor i1 %t24, true
br i1 %t25, label %then8353, label %endif8355
then8353:
%t26 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t26, ptr %a27
call void @finch.copy.arr_str(ptr %a28, ptr %a27)
%t29 = load { ptr, i64, i64 }, ptr %a28
ret { ptr, i64, i64 } %t29
endif8355:
store i1 false, ptr %a30
%t31 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t31, ptr %a32
call void @finch_read_file(ptr %a33, ptr %a32, ptr @.str.6004, i64 110)
%t34 = load { ptr, i64, i64 }, ptr %a33
store { ptr, i64, i64 } %t34, ptr %a35
store { ptr, i64, i64 } { ptr @.str.6006, i64 1, i64 0 }, ptr %a37
call void @finch_str_split(ptr %a38, ptr %a35, ptr %a37)
%t39 = load { ptr, i64, i64 }, ptr %a38
store { ptr, i64, i64 } %t39, ptr %a40
store i64 0, ptr %a41
br label %each.cond8356
each.cond8356:
%t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %a40, i32 0, i32 1
%t43 = load i64, ptr %t42
%t44 = load i64, ptr %a41
%t45 = icmp slt i64 %t44, %t43
br i1 %t45, label %each.body8357, label %each.end8359
each.body8357:
%t46 = load ptr, ptr %a40
%t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t44
%t48 = load { ptr, i64, i64 }, ptr %t47
store { ptr, i64, i64 } %t48, ptr %a49
%t50 = load { ptr, i64, i64 }, ptr %a49
store { ptr, i64, i64 } %t50, ptr %a51
call void @finch_str_trim(ptr %a52, ptr %a51)
%t53 = load { ptr, i64, i64 }, ptr %a52
store { ptr, i64, i64 } %t53, ptr %a54
%t55 = load { ptr, i64, i64 }, ptr %a54
store { ptr, i64, i64 } %t55, ptr %a56
store { ptr, i64, i64 } { ptr @.str.6009, i64 34, i64 0 }, ptr %a58
%t59 = call i32 @finch_str_starts(ptr %a56, ptr %a58)
%t60 = icmp ne i32 %t59, 0
br i1 %t60, label %then8360, label %endif8362
then8360:
store i1 true, ptr %a30
br label %each.step8358
endif8362:
%t61 = load { ptr, i64, i64 }, ptr %a54
store { ptr, i64, i64 } %t61, ptr %a62
store { ptr, i64, i64 } { ptr @.str.6011, i64 19, i64 0 }, ptr %a64
%t65 = call i32 @finch_str_starts(ptr %a62, ptr %a64)
%t66 = icmp ne i32 %t65, 0
br i1 %t66, label %then8363, label %endif8365
then8363:
br label %each.end8359
endif8365:
%t67 = load i1, ptr %a30
%t68 = xor i1 %t67, true
br label %logic.from8366
logic.from8366:
br i1 %t68, label %logic.end8368, label %logic.rhs8367
logic.rhs8367:
%t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a54, i32 0, i32 1
%t70 = load i64, ptr %t69
%t71 = icmp eq i64 %t70, 0
br label %logic.rend8369
logic.rend8369:
br label %logic.end8368
logic.end8368:
%t72 = phi i1 [ true, %logic.from8366 ], [ %t71, %logic.rend8369 ]
br i1 %t72, label %then8370, label %endif8372
then8370:
br label %each.step8358
endif8372:
%t73 = load { ptr, i64, i64 }, ptr %a54
store { ptr, i64, i64 } %t73, ptr %a74
store { ptr, i64, i64 } { ptr @.str.6013, i64 22, i64 0 }, ptr %a76
%t77 = call i32 @finch_str_ends(ptr %a74, ptr %a76)
%t78 = icmp ne i32 %t77, 0
br i1 %t78, label %then8373, label %else8374
then8373:
%t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1
%t80 = load { ptr, i64, i64 }, ptr %a54
store { ptr, i64, i64 } %t80, ptr %a81
%t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %a54, i32 0, i32 1
%t84 = load i64, ptr %t83
%t85 = sub i64 %t84, 22
call void @finch_str_sub(ptr %a82, ptr %a81, i64 0, i64 %t85, ptr @.str.6015, i64 124)
%t86 = load { ptr, i64, i64 }, ptr %a82
store { ptr, i64, i64 } { ptr @.str.6014, i64 11, i64 0 }, ptr %a88
store { ptr, i64, i64 } %t86, ptr %a89
call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89)
%t90 = load { ptr, i64, i64 }, ptr %a87
%t91 = load i64, ptr %t79
%t92 = add i64 %t91, 1
call void @finch_arr_reserve(ptr %a2, i64 %t92, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t93 = load ptr, ptr %a2
%t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i64 %t91
store { ptr, i64, i64 } %t90, ptr %t94
store i64 %t92, ptr %t79
br label %endif8375
else8374:
%t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1
%t96 = load { ptr, i64, i64 }, ptr %a54
store { ptr, i64, i64 } { ptr @.str.6016, i64 8, 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 i64, ptr %t95
%t102 = add i64 %t101, 1
call void @finch_arr_reserve(ptr %a2, i64 %t102, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t103 = load ptr, ptr %a2
%t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 %t101
store { ptr, i64, i64 } %t100, ptr %t104
store i64 %t102, ptr %t95
br label %endif8375
endif8375:
br label %each.step8358
each.step8358:
%t105 = load i64, ptr %a41
%t106 = add i64 %t105, 1
store i64 %t106, ptr %a41
br label %each.cond8356
each.end8359:
%t107 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } { ptr @.str.6017, i64 7, 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.6018, i64 1, i64 0 }, 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
call void @finch_str_copy(ptr %a116, ptr %a117)
%t118 = call i64 @finch_shell(ptr %a116)
%t119 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t119, ptr %a120
call void @finch.copy.arr_str(ptr %a121, ptr %a120)
%t122 = load { ptr, i64, i64 }, ptr %a121
ret { ptr, i64, i64 } %t122
}
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
%a76 = alloca { ptr, i64, i64 }, align 16
%a77 = alloca i32, align 16
%a87 = alloca { ptr, i64, i64 }, align 16
%a88 = alloca { ptr, i64, i64 }, align 16
%a91 = 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 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 %panic8376, label %ok8377
panic8376:
call void @finch_panic(ptr @.str.6019, i64 139, ptr @.str.6020)
unreachable
ok8377:
%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 %then8378, label %endif8380
then8378:
%t22 = load ptr, ptr %a1
%t23 = icmp eq ptr %t22, null
br i1 %t23, label %panic8381, label %ok8382
panic8381:
call void @finch_panic(ptr @.str.6021, i64 140, ptr @.str.6022)
unreachable
ok8382:
%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.missing8383, label %map.found8384
map.missing8383:
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.6023, i64 140, ptr %a29)
unreachable
map.found8384:
%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
ret { ptr, i64, i64 } %t38
endif8380:
%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.from8385
logic.from8385:
br i1 %t48, label %logic.end8387, label %logic.rhs8386
logic.rhs8386:
%t49 = load { ptr, i64, i64 }, ptr %a45
store { ptr, i64, i64 } %t49, ptr %a50
store { ptr, i64, i64 } { ptr @.str.6025, 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.rend8388
logic.rend8388:
br label %logic.end8387
logic.end8387:
%t55 = phi i1 [ true, %logic.from8385 ], [ %t54, %logic.rend8388 ]
br i1 %t55, label %then8389, label %endif8391
then8389:
%t56 = load ptr, ptr %a1
%t57 = icmp eq ptr %t56, null
br i1 %t57, label %panic8392, label %ok8393
panic8392:
call void @finch_panic(ptr @.str.6026, i64 144, ptr @.str.6027)
unreachable
ok8393:
%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 %panic8394, label %ok8395
panic8394:
call void @finch_panic(ptr @.str.6029, i64 145, ptr @.str.6030)
unreachable
ok8395:
%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.6028, i64 12, 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 %a45
br label %endif8391
endif8391:
%t71 = load { ptr, i64, i64 }, ptr %a45
%t72 = load ptr, ptr %a1
%t73 = icmp eq ptr %t72, null
br i1 %t73, label %panic8396, label %ok8397
panic8396:
call void @finch_panic(ptr @.str.6031, i64 147, ptr @.str.6032)
unreachable
ok8397:
%t74 = getelementptr inbounds %S.cimport.Importer, ptr %t72, i32 0, i32 3
%t75 = load { ptr, i64, i64 }, ptr %a14
store { ptr, i64, i64 } %t75, ptr %a76
store i32 0, ptr %a77
%t78 = call i64 @finch_map_slot(ptr %t74, ptr %a76, 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 %a77)
%t79 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t74, i32 0, i32 0
%t80 = load ptr, ptr %t79
%t81 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t80, i64 %t78
%t82 = load i32, ptr %a77
%t83 = icmp ne i32 %t82, 0
br i1 %t83, label %map.new8398, label %map.have8399
map.new8398:
%t84 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t81, i32 0, i32 1
call void @finch_str_copy(ptr %t84, ptr %a76)
%t85 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t81, i32 0, i32 2
store { ptr, i64, i64 } zeroinitializer, ptr %t85
br label %map.have8399
map.have8399:
%t86 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t81, i32 0, i32 2
store { ptr, i64, i64 } %t71, ptr %a87
call void @finch_str_copy(ptr %a88, ptr %a87)
%t89 = load { ptr, i64, i64 }, ptr %a88
store { ptr, i64, i64 } %t89, ptr %t86
%t90 = load { ptr, i64, i64 }, ptr %a45
store { ptr, i64, i64 } %t90, ptr %a91
call void @finch_str_copy(ptr %a92, ptr %a91)
%t93 = load { ptr, i64, i64 }, ptr %a92
ret { ptr, i64, i64 } %t93
}
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
%a41 = alloca { ptr, i64, i64 }, align 16
%a42 = alloca { ptr, i64, i64 }, align 16
%a45 = alloca %S.C.CXType, align 16
%a47 = alloca i64, align 16
%a54 = alloca { ptr, i64, i64 }, align 16
%a55 = alloca i32, align 16
%a66 = alloca { ptr, i64, i64 }, align 16
%a67 = alloca { ptr, i64, i64 }, align 16
%a73 = alloca %S.C.CXType, align 16
%a76 = alloca %S.cimport.CStruct, align 16
%a78 = alloca %S.C.CXCursor, align 16
%a85 = alloca %S.cimport.FieldCtx, align 16
%a87 = alloca %S.C.CXType, align 16
%a93 = alloca { ptr, i64, i64 }, align 16
%a102 = alloca { ptr, i64, i64 }, align 16
%a103 = alloca i32, align 16
%a113 = alloca %S.cimport.CStruct, align 16
%a114 = alloca %S.cimport.CStruct, align 16
%a122 = alloca { ptr, i64, i64 }, align 16
%a123 = alloca { ptr, i64, i64 }, align 16
%a130 = alloca { ptr, i64, i64 }, align 16
%a131 = 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 %panic8400, label %ok8401
panic8400:
call void @finch_panic(ptr @.str.6033, i64 157, ptr @.str.6034)
unreachable
ok8401:
%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.from8402
logic.from8402:
br i1 %t31, label %logic.end8404, label %logic.rhs8403
logic.rhs8403:
%t32 = load ptr, ptr %a1
%t33 = icmp eq ptr %t32, null
br i1 %t33, label %panic8405, label %ok8406
panic8405:
call void @finch_panic(ptr @.str.6035, i64 157, ptr @.str.6036)
unreachable
ok8406:
%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.rend8407
logic.rend8407:
br label %logic.end8404
logic.end8404:
%t39 = phi i1 [ true, %logic.from8402 ], [ %t38, %logic.rend8407 ]
br i1 %t39, label %then8408, label %endif8410
then8408:
%t40 = load { ptr, i64, i64 }, ptr %a23
store { ptr, i64, i64 } %t40, ptr %a41
call void @finch_str_copy(ptr %a42, ptr %a41)
%t43 = load { ptr, i64, i64 }, ptr %a42
ret { ptr, i64, i64 } %t43
endif8410:
%t44 = load %S.C.CXType, ptr %a7
store %S.C.CXType %t44, ptr %a45
%t46 = call i64 @clang_Type_getSizeOf(ptr byval(%S.C.CXType) align 8 %a45)
store i64 %t46, ptr %a47
%t48 = load i64, ptr %a47
%t49 = icmp slt i64 %t48, 0
br i1 %t49, label %then8411, label %endif8413
then8411:
ret { ptr, i64, i64 } { ptr @.str.6037, i64 0, i64 0 }
endif8413:
%t50 = load ptr, ptr %a1
%t51 = icmp eq ptr %t50, null
br i1 %t51, label %panic8414, label %ok8415
panic8414:
call void @finch_panic(ptr @.str.6038, i64 164, ptr @.str.6039)
unreachable
ok8415:
%t52 = getelementptr inbounds %S.cimport.Importer, ptr %t50, i32 0, i32 4
%t53 = load { ptr, i64, i64 }, ptr %a19
store { ptr, i64, i64 } %t53, ptr %a54
store i32 0, ptr %a55
%t56 = call i64 @finch_map_slot(ptr %t52, ptr %a54, 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 %a55)
%t57 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t52, i32 0, i32 0
%t58 = load ptr, ptr %t57
%t59 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t58, i64 %t56
%t60 = load i32, ptr %a55
%t61 = icmp ne i32 %t60, 0
br i1 %t61, label %map.new8416, label %map.have8417
map.new8416:
%t62 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t59, i32 0, i32 1
call void @finch_str_copy(ptr %t62, ptr %a54)
%t63 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t59, i32 0, i32 2
store i1 false, ptr %t63
br label %map.have8417
map.have8417:
%t64 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t59, i32 0, i32 2
store i1 true, ptr %t64
%t65 = load { ptr, i64, i64 }, ptr %a23
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.cimport.CStruct zeroinitializer, { ptr, i64, i64 } %t68, 0
%t70 = load i64, ptr %a47
%t71 = insertvalue %S.cimport.CStruct %t69, i64 %t70, 2
%t72 = load %S.C.CXType, ptr %a7
store %S.C.CXType %t72, ptr %a73
%t74 = call i64 @clang_Type_getAlignOf(ptr byval(%S.C.CXType) align 8 %a73)
%t75 = insertvalue %S.cimport.CStruct %t71, i64 %t74, 3
store %S.cimport.CStruct %t75, ptr %a76
%t77 = load %S.C.CXCursor, ptr %a12
store %S.C.CXCursor %t77, ptr %a78
%t79 = call i32 @clang_getCursorKind(ptr byval(%S.C.CXCursor) align 8 %a78)
%t80 = icmp eq i32 %t79, 3
br i1 %t80, label %then8418, label %endif8420
then8418:
%t81 = getelementptr inbounds %S.cimport.CStruct, ptr %a76, i32 0, i32 4
store { ptr, i64, i64 } { ptr @.str.6040, i64 12, i64 0 }, ptr %t81
br label %endif8420
endif8420:
%t82 = load ptr, ptr %a1
%t83 = insertvalue %S.cimport.FieldCtx zeroinitializer, ptr %t82, 0
%t84 = insertvalue %S.cimport.FieldCtx %t83, ptr %a76, 1
store %S.cimport.FieldCtx %t84, ptr %a85
%t86 = load %S.C.CXType, ptr %a7
store %S.C.CXType %t86, ptr %a87
%t88 = call i32 @clang_Type_visitFields(ptr byval(%S.C.CXType) align 8 %a87, ptr @finch.c.cimport.visitField, ptr %a85)
%t89 = load ptr, ptr %a1
%t90 = icmp eq ptr %t89, null
br i1 %t90, label %panic8421, label %ok8422
panic8421:
call void @finch_panic(ptr @.str.6041, i64 172, ptr @.str.6042)
unreachable
ok8422:
%t91 = getelementptr inbounds %S.cimport.Importer, ptr %t89, i32 0, i32 4
%t92 = load { ptr, i64, i64 }, ptr %a19
store { ptr, i64, i64 } %t92, ptr %a93
%t94 = call i64 @finch_map_find(ptr %t91, ptr %a93, 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)
%t95 = icmp sge i64 %t94, 0
br i1 %t95, label %remove.hit8423, label %remove.end8424
remove.hit8423:
call void @finch_map_remove_at(ptr %t91, i64 %t94, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64))
br label %remove.end8424
remove.end8424:
%t96 = load %S.cimport.CStruct, ptr %a76
%t97 = load ptr, ptr %a1
%t98 = icmp eq ptr %t97, null
br i1 %t98, label %panic8425, label %ok8426
panic8425:
call void @finch_panic(ptr @.str.6043, i64 173, ptr @.str.6044)
unreachable
ok8426:
%t99 = getelementptr inbounds %S.cimport.Importer, ptr %t97, i32 0, i32 0
%t100 = getelementptr inbounds %S.cimport.CImports, ptr %t99, i32 0, i32 3
%t101 = load { ptr, i64, i64 }, ptr %a23
store { ptr, i64, i64 } %t101, ptr %a102
store i32 0, ptr %a103
%t104 = call i64 @finch_map_slot(ptr %t100, ptr %a102, 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 %a103)
%t105 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t100, i32 0, i32 0
%t106 = load ptr, ptr %t105
%t107 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t106, i64 %t104
%t108 = load i32, ptr %a103
%t109 = icmp ne i32 %t108, 0
br i1 %t109, label %map.new8427, label %map.have8428
map.new8427:
%t110 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t107, i32 0, i32 1
call void @finch_str_copy(ptr %t110, ptr %a102)
%t111 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t107, i32 0, i32 2
store %S.cimport.CStruct zeroinitializer, ptr %t111
br label %map.have8428
map.have8428:
%t112 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t107, i32 0, i32 2
store %S.cimport.CStruct %t96, ptr %a113
call void @finch.copy.S_cimport_CStruct(ptr %a114, ptr %a113)
%t115 = load %S.cimport.CStruct, ptr %a114
store %S.cimport.CStruct %t115, ptr %t112
%t116 = load ptr, ptr %a1
%t117 = icmp eq ptr %t116, null
br i1 %t117, label %panic8429, label %ok8430
panic8429:
call void @finch_panic(ptr @.str.6045, i64 174, ptr @.str.6046)
unreachable
ok8430:
%t118 = getelementptr inbounds %S.cimport.Importer, ptr %t116, i32 0, i32 0
%t119 = getelementptr inbounds %S.cimport.CImports, ptr %t118, i32 0, i32 4
%t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1
%t121 = load { ptr, i64, i64 }, ptr %a23
store { ptr, i64, i64 } %t121, ptr %a122
call void @finch_str_copy(ptr %a123, ptr %a122)
%t124 = load { ptr, i64, i64 }, ptr %a123
%t125 = load i64, ptr %t120
%t126 = add i64 %t125, 1
call void @finch_arr_reserve(ptr %t119, i64 %t126, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t127 = load ptr, ptr %t119
%t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t127, i64 %t125
store { ptr, i64, i64 } %t124, ptr %t128
store i64 %t126, ptr %t120
%t129 = load { ptr, i64, i64 }, ptr %a23
store { ptr, i64, i64 } %t129, ptr %a130
call void @finch_str_copy(ptr %a131, ptr %a130)
%t132 = load { ptr, i64, i64 }, ptr %a131
ret { ptr, i64, i64 } %t132
}
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
%a48 = alloca %S.C.CXCursor, align 16
%a50 = alloca %S.C.CXType, align 16
%a52 = alloca %S.C.CXCursor, align 16
%a63 = alloca %S.cimport.Mapped, align 16
%a69 = alloca %S.ast.Type, align 16
%a70 = alloca %S.ast.Type, align 16
%a94 = alloca %S.cimport.CField, align 16
%a95 = 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 %then8431, label %else8432
then8431:
%t38 = load ptr, ptr %a4
%t39 = icmp eq ptr %t38, null
br i1 %t39, label %panic8434, label %ok8435
panic8434:
call void @finch_panic(ptr @.str.6048, i64 191, ptr @.str.6049)
unreachable
ok8435:
%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 %panic8436, label %ok8437
panic8436:
call void @finch_panic(ptr @.str.6050, i64 191, ptr @.str.6051)
unreachable
ok8437:
%t43 = getelementptr inbounds %S.cimport.CStruct, ptr %t41, i32 0, i32 4
store { ptr, i64, i64 } { ptr @.str.6047, i64 14, i64 0 }, ptr %t43
%t44 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5
store i1 true, ptr %t44
br label %endif8433
else8432:
%t45 = getelementptr inbounds %S.C.CXType, ptr %a20, i32 0, i32 0
%t46 = load i32, ptr %t45
%t47 = icmp eq i32 %t46, 105
br label %logic.from8438
logic.from8438:
br i1 %t47, label %logic.rhs8439, label %logic.end8440
logic.rhs8439:
%t49 = load %S.C.CXType, ptr %a20
store %S.C.CXType %t49, ptr %a50
call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a48, ptr byval(%S.C.CXType) align 8 %a50)
%t51 = load %S.C.CXCursor, ptr %a48
store %S.C.CXCursor %t51, ptr %a52
%t53 = call i32 @clang_getCursorKind(ptr byval(%S.C.CXCursor) align 8 %a52)
%t54 = icmp eq i32 %t53, 3
br label %logic.rend8441
logic.rend8441:
br label %logic.end8440
logic.end8440:
%t55 = phi i1 [ false, %logic.from8438 ], [ %t54, %logic.rend8441 ]
br i1 %t55, label %then8442, label %else8443
then8442:
%t56 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5
store i1 true, ptr %t56
br label %endif8444
else8443:
%t57 = load ptr, ptr %a4
%t58 = icmp eq ptr %t57, null
br i1 %t58, label %panic8445, label %ok8446
panic8445:
call void @finch_panic(ptr @.str.6052, i64 196, ptr @.str.6053)
unreachable
ok8446:
%t59 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t57, i32 0, i32 0
%t60 = load ptr, ptr %t59
%t61 = load %S.C.CXType, ptr %a20
%t62 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t60, %S.C.CXType %t61, i1 false, i1 false)
store %S.cimport.Mapped %t62, ptr %a63
%t64 = getelementptr inbounds %S.cimport.Mapped, ptr %a63, i32 0, i32 2
%t65 = load i1, ptr %t64
br i1 %t65, label %then8447, label %else8448
then8447:
%t66 = getelementptr inbounds %S.cimport.Mapped, ptr %a63, i32 0, i32 0
%t67 = load %S.ast.Type, ptr %t66
%t68 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 1
store %S.ast.Type %t67, ptr %a69
call void @finch.copy.S_ast_Type(ptr %a70, ptr %a69)
%t71 = load %S.ast.Type, ptr %a70
store %S.ast.Type %t71, ptr %t68
br label %endif8449
else8448:
%t72 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5
store i1 true, ptr %t72
br label %endif8449
endif8449:
br label %endif8444
endif8444:
br label %endif8433
endif8433:
%t73 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5
%t74 = load i1, ptr %t73
br i1 %t74, label %then8450, label %endif8452
then8450:
%t75 = load ptr, ptr %a4
%t76 = icmp eq ptr %t75, null
br i1 %t76, label %panic8453, label %ok8454
panic8453:
call void @finch_panic(ptr @.str.6054, i64 204, ptr @.str.6055)
unreachable
ok8454:
%t77 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t75, i32 0, i32 1
%t78 = load ptr, ptr %t77
%t79 = icmp eq ptr %t78, null
br i1 %t79, label %panic8455, label %ok8456
panic8455:
call void @finch_panic(ptr @.str.6056, i64 204, ptr @.str.6057)
unreachable
ok8456:
%t80 = getelementptr inbounds %S.cimport.CStruct, ptr %t78, i32 0, i32 5
store i1 true, ptr %t80
br label %endif8452
endif8452:
%t81 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 0
%t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %t81, i32 0, i32 1
%t83 = load i64, ptr %t82
%t84 = icmp eq i64 %t83, 0
br i1 %t84, label %then8457, label %endif8459
then8457:
%t85 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5
store i1 true, ptr %t85
br label %endif8459
endif8459:
%t86 = load ptr, ptr %a4
%t87 = icmp eq ptr %t86, null
br i1 %t87, label %panic8460, label %ok8461
panic8460:
call void @finch_panic(ptr @.str.6058, i64 209, ptr @.str.6059)
unreachable
ok8461:
%t88 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t86, i32 0, i32 1
%t89 = load ptr, ptr %t88
%t90 = icmp eq ptr %t89, null
br i1 %t90, label %panic8462, label %ok8463
panic8462:
call void @finch_panic(ptr @.str.6060, i64 209, ptr @.str.6061)
unreachable
ok8463:
%t91 = getelementptr inbounds %S.cimport.CStruct, ptr %t89, i32 0, i32 1
%t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i32 0, i32 1
%t93 = load %S.cimport.CField, ptr %a12
store %S.cimport.CField %t93, ptr %a94
call void @finch.copy.S_cimport_CField(ptr %a95, ptr %a94)
%t96 = load %S.cimport.CField, ptr %a95
%t97 = load i64, ptr %t92
%t98 = add i64 %t97, 1
call void @finch_arr_reserve(ptr %t91, i64 %t98, i64 ptrtoint (ptr getelementptr (%S.cimport.CField, ptr null, i32 1) to i64))
%t99 = load ptr, ptr %t91
%t100 = getelementptr inbounds %S.cimport.CField, ptr %t99, i64 %t97
store %S.cimport.CField %t96, ptr %t100
store i64 %t98, ptr %t92
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
%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
%a39 = alloca { ptr, i64, i64 }, align 16
%a40 = alloca { ptr, i64, i64 }, align 16
%a41 = 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 %then8464, label %endif8466
then8464:
%t5 = load i1, ptr %a2
br i1 %t5, label %then8467, label %endif8469
then8467:
%t6 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6062, i64 2, i64 0 })
%t7 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t6)
ret %S.cimport.Mapped %t7
endif8469:
%t8 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6063, i64 2, i64 0 })
%t9 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t8)
ret %S.cimport.Mapped %t9
endif8466:
%t10 = load i64, ptr %a1
%t11 = icmp eq i64 %t10, 2
br i1 %t11, label %then8470, label %endif8472
then8470:
%t12 = load i1, ptr %a2
br i1 %t12, label %then8473, label %endif8475
then8473:
%t13 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6064, i64 3, i64 0 })
%t14 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t13)
ret %S.cimport.Mapped %t14
endif8475:
%t15 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6065, i64 3, i64 0 })
%t16 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t15)
ret %S.cimport.Mapped %t16
endif8472:
%t17 = load i64, ptr %a1
%t18 = icmp eq i64 %t17, 4
br i1 %t18, label %then8476, label %endif8478
then8476:
%t19 = load i1, ptr %a2
br i1 %t19, label %then8479, label %endif8481
then8479:
%t20 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6066, i64 3, i64 0 })
%t21 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t20)
ret %S.cimport.Mapped %t21
endif8481:
%t22 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6067, i64 3, i64 0 })
%t23 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t22)
ret %S.cimport.Mapped %t23
endif8478:
%t24 = load i64, ptr %a1
%t25 = icmp eq i64 %t24, 8
br i1 %t25, label %then8482, label %endif8484
then8482:
%t26 = load i1, ptr %a2
br i1 %t26, label %then8485, label %endif8487
then8485:
%t27 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6068, i64 3, i64 0 })
%t28 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t27)
ret %S.cimport.Mapped %t28
endif8487:
%t29 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6069, i64 3, i64 0 })
%t30 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t29)
ret %S.cimport.Mapped %t30
endif8484:
%t31 = load i64, ptr %a1
%t32 = mul i64 %t31, 8
call void @finch_str_from_int(ptr %a33, i64 %t32)
%t34 = load { ptr, i64, i64 }, ptr %a33
store { ptr, i64, i64 } { ptr @.str.6070, 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.6071, i64 11, i64 0 }, ptr %a41
call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41)
%t42 = load { ptr, i64, i64 }, ptr %a39
%t43 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } %t42)
ret %S.cimport.Mapped %t43
}
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
%a78 = alloca %S.C.CXType, align 16
%a79 = alloca %S.C.CXType, align 16
%a81 = alloca %S.C.CXType, align 16
%a83 = alloca %S.C.CXType, align 16
%a85 = alloca %S.C.CXType, align 16
%a98 = alloca %S.C.CXType, align 16
%a120 = alloca %S.cimport.Mapped, align 16
%a127 = alloca { ptr, i64, i64 }, align 16
%a128 = alloca { ptr, i64, i64 }, align 16
%a135 = alloca { ptr, i64, i64 }, align 16
%a136 = alloca { ptr, i64, i64 }, align 16
%a148 = alloca %S.C.CXCursor, align 16
%a150 = alloca %S.C.CXType, align 16
%a152 = alloca %S.C.CXCursor, align 16
%a159 = alloca { ptr, i64, i64 }, align 16
%a166 = alloca { ptr, i64, i64 }, align 16
%a167 = alloca { ptr, i64, i64 }, align 16
%a175 = alloca %S.C.CXType, align 16
%a177 = alloca %S.C.CXType, align 16
%a180 = alloca %S.cimport.Mapped, align 16
%a188 = alloca %S.C.CXType, align 16
%a196 = alloca %S.C.CXType, align 16
%a198 = alloca [32 x i8], align 16
%a201 = alloca { ptr, i64, i64 }, align 16
%a202 = alloca { ptr, i64, i64 }, align 16
%a203 = 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
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 %then8488, label %endif8490
then8488:
%t19 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6072, i64 4, i64 0 })
%t20 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t19)
ret %S.cimport.Mapped %t20
endif8490:
%t21 = load i32, ptr %a16
%t22 = icmp eq i32 %t21, 3
br i1 %t22, label %then8491, label %endif8493
then8491:
%t23 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6073, i64 4, i64 0 })
%t24 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t23)
ret %S.cimport.Mapped %t24
endif8493:
%t25 = load i32, ptr %a16
%t26 = icmp eq i32 %t25, 13
br label %logic.from8494
logic.from8494:
br i1 %t26, label %logic.end8496, label %logic.rhs8495
logic.rhs8495:
%t27 = load i32, ptr %a16
%t28 = icmp eq i32 %t27, 4
br label %logic.rend8497
logic.rend8497:
br label %logic.end8496
logic.end8496:
%t29 = phi i1 [ true, %logic.from8494 ], [ %t28, %logic.rend8497 ]
br i1 %t29, label %then8498, label %endif8500
then8498:
%t30 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6074, i64 4, i64 0 })
%t31 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t30)
ret %S.cimport.Mapped %t31
endif8500:
%t32 = load i32, ptr %a16
%t33 = icmp eq i32 %t32, 14
br label %logic.from8501
logic.from8501:
br i1 %t33, label %logic.end8503, label %logic.rhs8502
logic.rhs8502:
%t34 = load i32, ptr %a16
%t35 = icmp eq i32 %t34, 16
br label %logic.rend8504
logic.rend8504:
br label %logic.end8503
logic.end8503:
%t36 = phi i1 [ true, %logic.from8501 ], [ %t35, %logic.rend8504 ]
br label %logic.from8505
logic.from8505:
br i1 %t36, label %logic.end8507, label %logic.rhs8506
logic.rhs8506:
%t37 = load i32, ptr %a16
%t38 = icmp eq i32 %t37, 17
br label %logic.rend8508
logic.rend8508:
br label %logic.end8507
logic.end8507:
%t39 = phi i1 [ true, %logic.from8505 ], [ %t38, %logic.rend8508 ]
br label %logic.from8509
logic.from8509:
br i1 %t39, label %logic.end8511, label %logic.rhs8510
logic.rhs8510:
%t40 = load i32, ptr %a16
%t41 = icmp eq i32 %t40, 18
br label %logic.rend8512
logic.rend8512:
br label %logic.end8511
logic.end8511:
%t42 = phi i1 [ true, %logic.from8509 ], [ %t41, %logic.rend8512 ]
br label %logic.from8513
logic.from8513:
br i1 %t42, label %logic.end8515, label %logic.rhs8514
logic.rhs8514:
%t43 = load i32, ptr %a16
%t44 = icmp eq i32 %t43, 19
br label %logic.rend8516
logic.rend8516:
br label %logic.end8515
logic.end8515:
%t45 = phi i1 [ true, %logic.from8513 ], [ %t44, %logic.rend8516 ]
br i1 %t45, label %then8517, label %endif8519
then8517:
%t46 = load i64, ptr %a13
%t47 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t46, i1 true)
ret %S.cimport.Mapped %t47
endif8519:
%t48 = load i32, ptr %a16
%t49 = icmp eq i32 %t48, 5
br label %logic.from8520
logic.from8520:
br i1 %t49, label %logic.end8522, label %logic.rhs8521
logic.rhs8521:
%t50 = load i32, ptr %a16
%t51 = icmp eq i32 %t50, 8
br label %logic.rend8523
logic.rend8523:
br label %logic.end8522
logic.end8522:
%t52 = phi i1 [ true, %logic.from8520 ], [ %t51, %logic.rend8523 ]
br label %logic.from8524
logic.from8524:
br i1 %t52, label %logic.end8526, label %logic.rhs8525
logic.rhs8525:
%t53 = load i32, ptr %a16
%t54 = icmp eq i32 %t53, 9
br label %logic.rend8527
logic.rend8527:
br label %logic.end8526
logic.end8526:
%t55 = phi i1 [ true, %logic.from8524 ], [ %t54, %logic.rend8527 ]
br label %logic.from8528
logic.from8528:
br i1 %t55, label %logic.end8530, label %logic.rhs8529
logic.rhs8529:
%t56 = load i32, ptr %a16
%t57 = icmp eq i32 %t56, 10
br label %logic.rend8531
logic.rend8531:
br label %logic.end8530
logic.end8530:
%t58 = phi i1 [ true, %logic.from8528 ], [ %t57, %logic.rend8531 ]
br label %logic.from8532
logic.from8532:
br i1 %t58, label %logic.end8534, label %logic.rhs8533
logic.rhs8533:
%t59 = load i32, ptr %a16
%t60 = icmp eq i32 %t59, 11
br label %logic.rend8535
logic.rend8535:
br label %logic.end8534
logic.end8534:
%t61 = phi i1 [ true, %logic.from8532 ], [ %t60, %logic.rend8535 ]
br i1 %t61, label %then8536, label %endif8538
then8536:
%t62 = load i64, ptr %a13
%t63 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t62, i1 false)
ret %S.cimport.Mapped %t63
endif8538:
%t64 = load i32, ptr %a16
%t65 = icmp eq i32 %t64, 106
br i1 %t65, label %then8539, label %endif8541
then8539:
%t66 = load i64, ptr %a13
%t67 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t66, i1 true)
ret %S.cimport.Mapped %t67
endif8541:
%t68 = load i32, ptr %a16
%t69 = icmp eq i32 %t68, 21
br i1 %t69, label %then8542, label %endif8544
then8542:
%t70 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6075, i64 3, i64 0 })
%t71 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t70)
ret %S.cimport.Mapped %t71
endif8544:
%t72 = load i32, ptr %a16
%t73 = icmp eq i32 %t72, 22
br i1 %t73, label %then8545, label %endif8547
then8545:
%t74 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6076, i64 5, i64 0 })
%t75 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t74)
ret %S.cimport.Mapped %t75
endif8547:
%t76 = load i32, ptr %a16
%t77 = icmp eq i32 %t76, 101
br i1 %t77, label %then8548, label %endif8550
then8548:
%t80 = load %S.C.CXType, ptr %a9
store %S.C.CXType %t80, ptr %a81
call void @clang_getPointeeType(ptr sret(%S.C.CXType) align 16 %a79, ptr byval(%S.C.CXType) align 8 %a81)
%t82 = load %S.C.CXType, ptr %a79
store %S.C.CXType %t82, ptr %a83
call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a78, ptr byval(%S.C.CXType) align 8 %a83)
%t84 = load %S.C.CXType, ptr %a78
store %S.C.CXType %t84, ptr %a85
%t86 = getelementptr inbounds %S.C.CXType, ptr %a85, i32 0, i32 0
%t87 = load i32, ptr %t86
%t88 = icmp eq i32 %t87, 13
br label %logic.from8551
logic.from8551:
br i1 %t88, label %logic.end8553, label %logic.rhs8552
logic.rhs8552:
%t89 = getelementptr inbounds %S.C.CXType, ptr %a85, i32 0, i32 0
%t90 = load i32, ptr %t89
%t91 = icmp eq i32 %t90, 4
br label %logic.rend8554
logic.rend8554:
br label %logic.end8553
logic.end8553:
%t92 = phi i1 [ true, %logic.from8551 ], [ %t91, %logic.rend8554 ]
br label %logic.from8555
logic.from8555:
br i1 %t92, label %logic.rhs8556, label %logic.end8557
logic.rhs8556:
%t93 = load i1, ptr %a3
br label %logic.rend8558
logic.rend8558:
br label %logic.end8557
logic.end8557:
%t94 = phi i1 [ false, %logic.from8555 ], [ %t93, %logic.rend8558 ]
br i1 %t94, label %then8559, label %endif8561
then8559:
%t95 = load i1, ptr %a4
%t96 = xor i1 %t95, true
br label %logic.from8562
logic.from8562:
br i1 %t96, label %logic.end8564, label %logic.rhs8563
logic.rhs8563:
%t97 = load %S.C.CXType, ptr %a85
store %S.C.CXType %t97, ptr %a98
%t99 = call i32 @clang_isConstQualifiedType(ptr byval(%S.C.CXType) align 8 %a98)
%t100 = icmp ne i32 %t99, 0
br label %logic.rend8565
logic.rend8565:
br label %logic.end8564
logic.end8564:
%t101 = phi i1 [ true, %logic.from8562 ], [ %t100, %logic.rend8565 ]
br i1 %t101, label %then8566, label %endif8568
then8566:
%t102 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6077, i64 3, i64 0 })
%t103 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t102)
ret %S.cimport.Mapped %t103
endif8568:
br label %endif8561
endif8561:
%t104 = getelementptr inbounds %S.C.CXType, ptr %a85, i32 0, i32 0
%t105 = load i32, ptr %t104
%t106 = icmp eq i32 %t105, 2
br label %logic.from8569
logic.from8569:
br i1 %t106, label %logic.end8571, label %logic.rhs8570
logic.rhs8570:
%t107 = getelementptr inbounds %S.C.CXType, ptr %a85, i32 0, i32 0
%t108 = load i32, ptr %t107
%t109 = icmp eq i32 %t108, 111
br label %logic.rend8572
logic.rend8572:
br label %logic.end8571
logic.end8571:
%t110 = phi i1 [ true, %logic.from8569 ], [ %t109, %logic.rend8572 ]
br label %logic.from8573
logic.from8573:
br i1 %t110, label %logic.end8575, label %logic.rhs8574
logic.rhs8574:
%t111 = getelementptr inbounds %S.C.CXType, ptr %a85, i32 0, i32 0
%t112 = load i32, ptr %t111
%t113 = icmp eq i32 %t112, 110
br label %logic.rend8576
logic.rend8576:
br label %logic.end8575
logic.end8575:
%t114 = phi i1 [ true, %logic.from8573 ], [ %t113, %logic.rend8576 ]
br i1 %t114, label %then8577, label %endif8579
then8577:
%t115 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6078, i64 3, i64 0 })
%t116 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t115)
ret %S.cimport.Mapped %t116
endif8579:
%t117 = load ptr, ptr %a1
%t118 = load %S.C.CXType, ptr %a85
%t119 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t117, %S.C.CXType %t118, i1 false, i1 false)
store %S.cimport.Mapped %t119, ptr %a120
%t121 = getelementptr inbounds %S.cimport.Mapped, ptr %a120, i32 0, i32 2
%t122 = load i1, ptr %t121
%t123 = xor i1 %t122, true
br label %logic.from8580
logic.from8580:
br i1 %t123, label %logic.end8582, label %logic.rhs8581
logic.rhs8581:
%t124 = getelementptr inbounds %S.cimport.Mapped, ptr %a120, i32 0, i32 0
%t125 = getelementptr inbounds %S.ast.Type, ptr %t124, i32 0, i32 0
%t126 = load { ptr, i64, i64 }, ptr %t125
store { ptr, i64, i64 } %t126, ptr %a127
store { ptr, i64, i64 } { ptr @.str.6079, i64 4, i64 0 }, ptr %a128
%t129 = call i32 @finch_str_eq(ptr %a127, ptr %a128)
%t130 = icmp ne i32 %t129, 0
br label %logic.rend8583
logic.rend8583:
br label %logic.end8582
logic.end8582:
%t131 = phi i1 [ true, %logic.from8580 ], [ %t130, %logic.rend8583 ]
br label %logic.from8584
logic.from8584:
br i1 %t131, label %logic.end8586, label %logic.rhs8585
logic.rhs8585:
%t132 = getelementptr inbounds %S.cimport.Mapped, ptr %a120, i32 0, i32 0
%t133 = getelementptr inbounds %S.ast.Type, ptr %t132, i32 0, i32 0
%t134 = load { ptr, i64, i64 }, ptr %t133
store { ptr, i64, i64 } %t134, ptr %a135
store { ptr, i64, i64 } { ptr @.str.6080, i64 5, i64 0 }, ptr %a136
%t137 = call i32 @finch_str_eq(ptr %a135, ptr %a136)
%t138 = icmp ne i32 %t137, 0
br label %logic.rend8587
logic.rend8587:
br label %logic.end8586
logic.end8586:
%t139 = phi i1 [ true, %logic.from8584 ], [ %t138, %logic.rend8587 ]
br i1 %t139, label %then8588, label %endif8590
then8588:
%t140 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6081, i64 3, i64 0 })
%t141 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t140)
ret %S.cimport.Mapped %t141
endif8590:
%t142 = getelementptr inbounds %S.cimport.Mapped, ptr %a120, i32 0, i32 0
%t143 = load %S.ast.Type, ptr %t142
%t144 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t143)
%t145 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t144)
ret %S.cimport.Mapped %t145
endif8550:
%t146 = load i32, ptr %a16
%t147 = icmp eq i32 %t146, 105
br i1 %t147, label %then8591, label %endif8593
then8591:
%t149 = load %S.C.CXType, ptr %a9
store %S.C.CXType %t149, ptr %a150
call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a148, ptr byval(%S.C.CXType) align 8 %a150)
%t151 = load %S.C.CXCursor, ptr %a148
store %S.C.CXCursor %t151, ptr %a152
%t153 = call i32 @clang_getCursorKind(ptr byval(%S.C.CXCursor) align 8 %a152)
%t154 = icmp eq i32 %t153, 3
br i1 %t154, label %then8594, label %endif8596
then8594:
%t155 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6082, i64 23, i64 0 })
ret %S.cimport.Mapped %t155
endif8596:
%t156 = load ptr, ptr %a1
%t157 = load %S.C.CXType, ptr %a9
%t158 = call { ptr, i64, i64 } @finch.cimport.defineRecord(ptr %t156, %S.C.CXType %t157)
store { ptr, i64, i64 } %t158, ptr %a159
%t160 = getelementptr inbounds { ptr, i64, i64 }, ptr %a159, i32 0, i32 1
%t161 = load i64, ptr %t160
%t162 = icmp eq i64 %t161, 0
br i1 %t162, label %then8597, label %endif8599
then8597:
%t163 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6083, i64 36, i64 0 })
ret %S.cimport.Mapped %t163
endif8599:
%t164 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6084, i64 5, i64 0 }, 0
%t165 = load { ptr, i64, i64 }, ptr %a159
store { ptr, i64, i64 } %t165, ptr %a166
call void @finch_str_copy(ptr %a167, ptr %a166)
%t168 = load { ptr, i64, i64 }, ptr %a167
%t169 = insertvalue %S.ast.Type %t164, { ptr, i64, i64 } %t168, 2
%t170 = insertvalue %S.ast.Type %t169, { ptr, i64, i64 } { ptr @.str.6085, i64 1, i64 0 }, 3
%t171 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t170)
ret %S.cimport.Mapped %t171
endif8593:
%t172 = load i32, ptr %a16
%t173 = icmp eq i32 %t172, 112
br i1 %t173, label %then8600, label %endif8602
then8600:
%t174 = load ptr, ptr %a1
%t176 = load %S.C.CXType, ptr %a9
store %S.C.CXType %t176, ptr %a177
call void @clang_getArrayElementType(ptr sret(%S.C.CXType) align 16 %a175, ptr byval(%S.C.CXType) align 8 %a177)
%t178 = load %S.C.CXType, ptr %a175
%t179 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t174, %S.C.CXType %t178, i1 false, i1 false)
store %S.cimport.Mapped %t179, ptr %a180
%t181 = getelementptr inbounds %S.cimport.Mapped, ptr %a180, i32 0, i32 2
%t182 = load i1, ptr %t181
%t183 = xor i1 %t182, true
br i1 %t183, label %then8603, label %endif8605
then8603:
%t184 = load %S.cimport.Mapped, ptr %a180
ret %S.cimport.Mapped %t184
endif8605:
%t185 = getelementptr inbounds %S.cimport.Mapped, ptr %a180, i32 0, i32 0
%t186 = load %S.ast.Type, ptr %t185
%t187 = load %S.C.CXType, ptr %a9
store %S.C.CXType %t187, ptr %a188
%t189 = call i64 @clang_getArraySize(ptr byval(%S.C.CXType) align 8 %a188)
%t190 = call %S.ast.Type @finch.cimport.fixed(%S.ast.Type %t186, i64 %t189)
%t191 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t190)
ret %S.cimport.Mapped %t191
endif8602:
%t192 = load i32, ptr %a16
%t193 = icmp eq i32 %t192, 23
br i1 %t193, label %then8606, label %endif8608
then8606:
%t194 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6086, i64 16, i64 0 })
ret %S.cimport.Mapped %t194
endif8608:
%t195 = load %S.C.CXType, ptr %a9
store %S.C.CXType %t195, ptr %a196
%t197 = call { i64, i64 } @clang_getTypeSpelling(ptr byval(%S.C.CXType) align 8 %a196)
store { i64, i64 } %t197, ptr %a198
%t199 = load %S.C.CXString, ptr %a198
%t200 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t199)
store { ptr, i64, i64 } { ptr @.str.6087, i64 17, i64 0 }, ptr %a202
store { ptr, i64, i64 } %t200, ptr %a203
call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203)
%t204 = load { ptr, i64, i64 }, ptr %a201
store { ptr, i64, i64 } %t204, ptr %a206
store { ptr, i64, i64 } { ptr @.str.6088, i64 1, i64 0 }, ptr %a207
call void @finch_str_concat(ptr %a205, ptr %a206, ptr %a207)
%t208 = load { ptr, i64, i64 }, ptr %a205
%t209 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } %t208)
ret %S.cimport.Mapped %t209
}
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
%a39 = alloca { ptr, i64, i64 }, align 16
%a40 = alloca { ptr, i64, i64 }, align 16
%a44 = alloca i64, align 16
%a45 = alloca i1, align 16
%a46 = alloca i64, align 16
%a58 = alloca i8, align 16
%a59 = alloca i64, align 16
%a103 = alloca { ptr, i64, i64 }, align 16
%a104 = alloca { ptr, i64, i64 }, align 16
%a112 = alloca { ptr, i64, i64 }, align 16
%a114 = 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.6090, 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.from8609
logic.from8609:
br i1 %t13, label %logic.end8611, label %logic.rhs8610
logic.rhs8610:
%t14 = load { ptr, i64, i64 }, ptr %a6
store { ptr, i64, i64 } %t14, ptr %a15
store { ptr, i64, i64 } { ptr @.str.6092, 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.rend8612
logic.rend8612:
br label %logic.end8611
logic.end8611:
%t20 = phi i1 [ true, %logic.from8609 ], [ %t19, %logic.rend8612 ]
br i1 %t20, label %then8613, label %else8614
then8613:
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.6093, i64 327)
%t26 = load { ptr, i64, i64 }, ptr %a23
store { ptr, i64, i64 } %t26, ptr %a6
br label %endif8615
else8614:
%t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1
%t28 = load i64, ptr %t27
%t29 = icmp sgt i64 %t28, 1
br label %logic.from8616
logic.from8616:
br i1 %t29, label %logic.rhs8617, label %logic.end8618
logic.rhs8617:
%t30 = load { ptr, i64, i64 }, ptr %a6
%t31 = extractvalue { ptr, i64, i64 } %t30, 1
%t32 = icmp uge i64 0, %t31
br i1 %t32, label %range8619, label %inrange8620
range8619:
call void @finch_panic_index(ptr @.str.6094, i64 328, i64 0, i64 %t31)
unreachable
inrange8620:
%t33 = extractvalue { ptr, i64, i64 } %t30, 0
%t34 = getelementptr inbounds i8, ptr %t33, i64 0
%t35 = load i8, ptr %t34
%t36 = icmp eq i8 %t35, 48
br label %logic.rend8621
logic.rend8621:
br label %logic.end8618
logic.end8618:
%t37 = phi i1 [ false, %logic.from8616 ], [ %t36, %logic.rend8621 ]
br i1 %t37, label %then8622, label %endif8624
then8622:
store i64 8, ptr %a7
%t38 = load { ptr, i64, i64 }, ptr %a6
store { ptr, i64, i64 } %t38, ptr %a39
%t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1
%t42 = load i64, ptr %t41
call void @finch_str_sub(ptr %a40, ptr %a39, i64 1, i64 %t42, ptr @.str.6095, i64 330)
%t43 = load { ptr, i64, i64 }, ptr %a40
store { ptr, i64, i64 } %t43, ptr %a6
br label %endif8624
endif8624:
br label %endif8615
endif8615:
store i64 0, ptr %a44
store i1 false, ptr %a45
store i64 0, ptr %a46
br label %while.cond8625
while.cond8625:
%t47 = load i64, ptr %a46
%t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1
%t49 = load i64, ptr %t48
%t50 = icmp slt i64 %t47, %t49
br i1 %t50, label %while.body8626, label %while.end8627
while.body8626:
%t51 = load i64, ptr %a46
%t52 = load { ptr, i64, i64 }, ptr %a6
%t53 = extractvalue { ptr, i64, i64 } %t52, 1
%t54 = icmp uge i64 %t51, %t53
br i1 %t54, label %range8628, label %inrange8629
range8628:
call void @finch_panic_index(ptr @.str.6096, i64 336, i64 %t51, i64 %t53)
unreachable
inrange8629:
%t55 = extractvalue { ptr, i64, i64 } %t52, 0
%t56 = getelementptr inbounds i8, ptr %t55, i64 %t51
%t57 = load i8, ptr %t56
store i8 %t57, ptr %a58
store i64 99, ptr %a59
%t60 = load i8, ptr %a58
%t61 = icmp uge i8 %t60, 48
br label %logic.from8630
logic.from8630:
br i1 %t61, label %logic.rhs8631, label %logic.end8632
logic.rhs8631:
%t62 = load i8, ptr %a58
%t63 = icmp ule i8 %t62, 57
br label %logic.rend8633
logic.rend8633:
br label %logic.end8632
logic.end8632:
%t64 = phi i1 [ false, %logic.from8630 ], [ %t63, %logic.rend8633 ]
br i1 %t64, label %then8634, label %else8635
then8634:
%t65 = load i8, ptr %a58
%t66 = zext i8 %t65 to i64
%t67 = zext i8 48 to i64
%t68 = sub i64 %t66, %t67
store i64 %t68, ptr %a59
br label %endif8636
else8635:
%t69 = load i8, ptr %a58
%t70 = icmp uge i8 %t69, 97
br label %logic.from8637
logic.from8637:
br i1 %t70, label %logic.rhs8638, label %logic.end8639
logic.rhs8638:
%t71 = load i8, ptr %a58
%t72 = icmp ule i8 %t71, 102
br label %logic.rend8640
logic.rend8640:
br label %logic.end8639
logic.end8639:
%t73 = phi i1 [ false, %logic.from8637 ], [ %t72, %logic.rend8640 ]
br i1 %t73, label %then8641, label %else8642
then8641:
%t74 = load i8, ptr %a58
%t75 = zext i8 %t74 to i64
%t76 = zext i8 97 to i64
%t77 = sub i64 %t75, %t76
%t78 = add i64 %t77, 10
store i64 %t78, ptr %a59
br label %endif8643
else8642:
%t79 = load i8, ptr %a58
%t80 = icmp uge i8 %t79, 65
br label %logic.from8644
logic.from8644:
br i1 %t80, label %logic.rhs8645, label %logic.end8646
logic.rhs8645:
%t81 = load i8, ptr %a58
%t82 = icmp ule i8 %t81, 70
br label %logic.rend8647
logic.rend8647:
br label %logic.end8646
logic.end8646:
%t83 = phi i1 [ false, %logic.from8644 ], [ %t82, %logic.rend8647 ]
br i1 %t83, label %then8648, label %endif8650
then8648:
%t84 = load i8, ptr %a58
%t85 = zext i8 %t84 to i64
%t86 = zext i8 65 to i64
%t87 = sub i64 %t85, %t86
%t88 = add i64 %t87, 10
store i64 %t88, ptr %a59
br label %endif8650
endif8650:
br label %endif8643
endif8643:
br label %endif8636
endif8636:
%t89 = load i64, ptr %a59
%t90 = load i64, ptr %a7
%t91 = icmp sge i64 %t89, %t90
br i1 %t91, label %then8651, label %endif8653
then8651:
br label %while.end8627
endif8653:
%t92 = load i64, ptr %a44
%t93 = load i64, ptr %a7
%t94 = mul i64 %t92, %t93
%t95 = load i64, ptr %a59
%t96 = add i64 %t94, %t95
store i64 %t96, ptr %a44
store i1 true, ptr %a45
%t97 = load i64, ptr %a46
%t98 = add i64 %t97, 1
store i64 %t98, ptr %a46
br label %while.cond8625
while.end8627:
br label %while.cond8654
while.cond8654:
%t99 = load i64, ptr %a46
%t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1
%t101 = load i64, ptr %t100
%t102 = icmp slt i64 %t99, %t101
br i1 %t102, label %while.body8655, label %while.end8656
while.body8655:
store { ptr, i64, i64 } { ptr @.str.6097, i64 4, i64 0 }, ptr %a103
%t105 = load i64, ptr %a46
%t106 = load { ptr, i64, i64 }, ptr %a6
%t107 = extractvalue { ptr, i64, i64 } %t106, 1
%t108 = icmp uge i64 %t105, %t107
br i1 %t108, label %range8657, label %inrange8658
range8657:
call void @finch_panic_index(ptr @.str.6099, i64 354, i64 %t105, i64 %t107)
unreachable
inrange8658:
%t109 = extractvalue { ptr, i64, i64 } %t106, 0
%t110 = getelementptr inbounds i8, ptr %t109, i64 %t105
%t111 = load i8, ptr %t110
call void @finch_str_from_char(ptr %a112, i8 signext %t111)
%t113 = load { ptr, i64, i64 }, ptr %a112
store { ptr, i64, i64 } %t113, ptr %a114
%t115 = call i64 @finch_str_find(ptr %a103, ptr %a114)
%t116 = icmp sge i64 %t115, 0
%t117 = xor i1 %t116, true
br i1 %t117, label %then8659, label %endif8661
then8659:
ret %S.cimport.Number zeroinitializer
endif8661:
%t118 = load i64, ptr %a46
%t119 = add i64 %t118, 1
store i64 %t119, ptr %a46
br label %while.cond8654
while.end8656:
%t120 = load i1, ptr %a45
%t121 = xor i1 %t120, true
br label %logic.from8662
logic.from8662:
br i1 %t121, label %logic.rhs8663, label %logic.end8664
logic.rhs8663:
%t122 = load i64, ptr %a7
%t123 = icmp ne i64 %t122, 8
br label %logic.rend8665
logic.rend8665:
br label %logic.end8664
logic.end8664:
%t124 = phi i1 [ false, %logic.from8662 ], [ %t123, %logic.rend8665 ]
br i1 %t124, label %then8666, label %endif8668
then8666:
ret %S.cimport.Number zeroinitializer
endif8668:
%t125 = load i64, ptr %a44
%t126 = insertvalue %S.cimport.CConst zeroinitializer, i64 %t125, 1
%t127 = insertvalue %S.cimport.Number zeroinitializer, %S.cimport.CConst %t126, 0
%t128 = insertvalue %S.cimport.Number %t127, i1 true, 1
ret %S.cimport.Number %t128
}
define internal void @finch.copy.S_cimport_Number(ptr %dst, ptr %src) {
entry:
%t1 = load %S.cimport.Number, ptr %src
store %S.cimport.Number %t1, ptr %dst
%t2 = getelementptr inbounds %S.cimport.Number, ptr %dst, i32 0, i32 0
%t3 = getelementptr inbounds %S.cimport.Number, ptr %src, i32 0, i32 0
call void @finch.copy.S_cimport_CConst(ptr %t2, ptr %t3)
ret void
}
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
%a94 = alloca i1, align 16
%a104 = alloca { ptr, i64, i64 }, align 16
%a105 = 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
%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
%a170 = alloca { ptr, i64, i64 }, align 16
%a171 = alloca { ptr, i64, i64 }, align 16
%a172 = 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
%a184 = alloca i1, align 16
%a187 = alloca { ptr, i64, i64 }, align 16
%a188 = 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
%a205 = 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
%a219 = alloca { ptr, i64, i64 }, align 16
%a220 = alloca double, align 16
%a221 = alloca { ptr, i64, i64 }, align 16
%a226 = alloca { ptr, i64, i64 }, align 16
%a227 = alloca double, align 16
%a235 = alloca { ptr, i64, i64 }, align 16
%a236 = alloca { ptr, i64, i64 }, align 16
%a243 = alloca %S.cimport.Number, align 16
%a255 = alloca %S.cimport.Number, align 16
%a256 = 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 %panic8669, label %ok8670
panic8669:
call void @finch_panic(ptr @.str.6100, i64 369, ptr @.str.6101)
unreachable
ok8670:
%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.cond8671
for.cond8671:
%t18 = load i64, ptr %a17
%t19 = icmp slt i64 %t18, %t16
br i1 %t19, label %for.body8672, label %for.end8674
for.body8672:
%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 %then8675, label %endif8677
then8675:
br label %for.step8673
endif8677:
%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 %panic8678, label %ok8679
panic8678:
call void @finch_panic(ptr @.str.6102, i64 375, ptr @.str.6103)
unreachable
ok8679:
%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.step8673
for.step8673:
%t45 = load i64, ptr %a17
%t46 = add i64 %t45, 1
store i64 %t46, ptr %a17
br label %for.cond8671
for.end8674:
%t47 = load ptr, ptr %a1
%t48 = icmp eq ptr %t47, null
br i1 %t48, label %panic8680, label %ok8681
panic8680:
call void @finch_panic(ptr @.str.6104, i64 377, ptr @.str.6105)
unreachable
ok8681:
%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.cond8682
while.cond8682:
%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.from8685
logic.from8685:
br i1 %t55, label %logic.rhs8686, label %logic.end8687
logic.rhs8686:
%t56 = load { ptr, i64, i64 }, ptr %a14
%t57 = extractvalue { ptr, i64, i64 } %t56, 1
%t58 = icmp uge i64 0, %t57
br i1 %t58, label %range8688, label %inrange8689
range8688:
call void @finch_panic_index(ptr @.str.6106, i64 379, i64 0, i64 %t57)
unreachable
inrange8689:
%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.6107, 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.rend8690
logic.rend8690:
br label %logic.end8687
logic.end8687:
%t66 = phi i1 [ false, %logic.from8685 ], [ %t65, %logic.rend8690 ]
br label %logic.from8691
logic.from8691:
br i1 %t66, label %logic.rhs8692, label %logic.end8693
logic.rhs8692:
%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 %range8694, label %inrange8695
range8694:
call void @finch_panic_index(ptr @.str.6108, i64 379, i64 %t69, i64 %t71)
unreachable
inrange8695:
%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.6109, 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.rend8696
logic.rend8696:
br label %logic.end8693
logic.end8693:
%t80 = phi i1 [ false, %logic.from8691 ], [ %t79, %logic.rend8696 ]
br i1 %t80, label %while.body8683, label %while.end8684
while.body8683:
%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 %range8697, label %inrange8698
range8697:
call void @finch_panic_index(ptr @.str.6110, i64 380, i64 0, i64 %t82)
unreachable
inrange8698:
%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))
%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 %panic8699, label %ok8700
panic8699:
call void @finch_panic(ptr @.str.6111, i64 381, ptr @.str.6112)
unreachable
ok8700:
%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
br label %while.cond8682
while.end8684:
store i1 false, ptr %a94
%t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1
%t96 = load i64, ptr %t95
%t97 = icmp eq i64 %t96, 2
br label %logic.from8701
logic.from8701:
br i1 %t97, label %logic.rhs8702, label %logic.end8703
logic.rhs8702:
%t98 = load { ptr, i64, i64 }, ptr %a14
%t99 = extractvalue { ptr, i64, i64 } %t98, 1
%t100 = icmp uge i64 0, %t99
br i1 %t100, label %range8704, label %inrange8705
range8704:
call void @finch_panic_index(ptr @.str.6113, i64 384, i64 0, i64 %t99)
unreachable
inrange8705:
%t101 = extractvalue { ptr, i64, i64 } %t98, 0
%t102 = getelementptr inbounds { ptr, i64, i64 }, ptr %t101, i64 0
%t103 = load { ptr, i64, i64 }, ptr %t102
store { ptr, i64, i64 } %t103, ptr %a104
store { ptr, i64, i64 } { ptr @.str.6114, i64 1, i64 0 }, ptr %a105
%t106 = call i32 @finch_str_eq(ptr %a104, ptr %a105)
%t107 = icmp ne i32 %t106, 0
br label %logic.rend8706
logic.rend8706:
br label %logic.end8703
logic.end8703:
%t108 = phi i1 [ false, %logic.from8701 ], [ %t107, %logic.rend8706 ]
br i1 %t108, label %then8707, label %endif8709
then8707:
store i1 true, ptr %a94
%t109 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1
%t110 = load i64, ptr %t109
%t111 = icmp uge i64 0, %t110
br i1 %t111, label %range8710, label %inrange8711
range8710:
call void @finch_panic_index(ptr @.str.6115, i64 386, i64 0, i64 %t110)
unreachable
inrange8711:
%t112 = load ptr, ptr %a14
%t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 0
%t114 = load { ptr, i64, i64 }, ptr %t113
call void @finch_arr_remove_gap(ptr %a14, i64 0, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
br label %endif8709
endif8709:
%t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1
%t116 = load i64, ptr %t115
%t117 = icmp ne i64 %t116, 1
br i1 %t117, label %then8712, label %endif8714
then8712:
ret %S.cimport.Number zeroinitializer
endif8714:
%t118 = load { ptr, i64, i64 }, ptr %a14
%t119 = extractvalue { ptr, i64, i64 } %t118, 1
%t120 = icmp uge i64 0, %t119
br i1 %t120, label %range8715, label %inrange8716
range8715:
call void @finch_panic_index(ptr @.str.6116, i64 391, i64 0, i64 %t119)
unreachable
inrange8716:
%t121 = extractvalue { ptr, i64, i64 } %t118, 0
%t122 = getelementptr inbounds { ptr, i64, i64 }, ptr %t121, i64 0
%t123 = load { ptr, i64, i64 }, ptr %t122
store { ptr, i64, i64 } %t123, ptr %a124
call void @finch_str_copy(ptr %a125, ptr %a124)
%t126 = load { ptr, i64, i64 }, ptr %a125
store { ptr, i64, i64 } %t126, ptr %a127
%t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %a127, i32 0, i32 1
%t129 = load i64, ptr %t128
%t130 = icmp eq i64 %t129, 0
br label %logic.from8717
logic.from8717:
br i1 %t130, label %logic.end8719, label %logic.rhs8718
logic.rhs8718:
%t131 = load { ptr, i64, i64 }, ptr %a127
%t132 = extractvalue { ptr, i64, i64 } %t131, 1
%t133 = icmp uge i64 0, %t132
br i1 %t133, label %range8720, label %inrange8721
range8720:
call void @finch_panic_index(ptr @.str.6117, i64 392, i64 0, i64 %t132)
unreachable
inrange8721:
%t134 = extractvalue { ptr, i64, i64 } %t131, 0
%t135 = getelementptr inbounds i8, ptr %t134, i64 0
%t136 = load i8, ptr %t135
%t137 = icmp uge i8 %t136, 48
br label %logic.from8722
logic.from8722:
br i1 %t137, label %logic.rhs8723, label %logic.end8724
logic.rhs8723:
%t138 = load { ptr, i64, i64 }, ptr %a127
%t139 = extractvalue { ptr, i64, i64 } %t138, 1
%t140 = icmp uge i64 0, %t139
br i1 %t140, label %range8725, label %inrange8726
range8725:
call void @finch_panic_index(ptr @.str.6118, i64 392, i64 0, i64 %t139)
unreachable
inrange8726:
%t141 = extractvalue { ptr, i64, i64 } %t138, 0
%t142 = getelementptr inbounds i8, ptr %t141, i64 0
%t143 = load i8, ptr %t142
%t144 = icmp ule i8 %t143, 57
br label %logic.rend8727
logic.rend8727:
br label %logic.end8724
logic.end8724:
%t145 = phi i1 [ false, %logic.from8722 ], [ %t144, %logic.rend8727 ]
br label %logic.from8728
logic.from8728:
br i1 %t145, label %logic.end8730, label %logic.rhs8729
logic.rhs8729:
%t146 = load { ptr, i64, i64 }, ptr %a127
%t147 = extractvalue { ptr, i64, i64 } %t146, 1
%t148 = icmp uge i64 0, %t147
br i1 %t148, label %range8731, label %inrange8732
range8731:
call void @finch_panic_index(ptr @.str.6119, i64 392, i64 0, i64 %t147)
unreachable
inrange8732:
%t149 = extractvalue { ptr, i64, i64 } %t146, 0
%t150 = getelementptr inbounds i8, ptr %t149, i64 0
%t151 = load i8, ptr %t150
%t152 = icmp eq i8 %t151, 46
br label %logic.rend8733
logic.rend8733:
br label %logic.end8730
logic.end8730:
%t153 = phi i1 [ true, %logic.from8728 ], [ %t152, %logic.rend8733 ]
%t154 = xor i1 %t153, true
br label %logic.rend8734
logic.rend8734:
br label %logic.end8719
logic.end8719:
%t155 = phi i1 [ true, %logic.from8717 ], [ %t154, %logic.rend8734 ]
br i1 %t155, label %then8735, label %endif8737
then8735:
ret %S.cimport.Number zeroinitializer
endif8737:
%t156 = load { ptr, i64, i64 }, ptr %a127
store { ptr, i64, i64 } %t156, ptr %a157
store { ptr, i64, i64 } { ptr @.str.6121, i64 1, i64 0 }, ptr %a159
%t160 = call i64 @finch_str_find(ptr %a157, ptr %a159)
%t161 = icmp sge i64 %t160, 0
br label %logic.from8738
logic.from8738:
br i1 %t161, label %logic.end8740, label %logic.rhs8739
logic.rhs8739:
%t162 = load { ptr, i64, i64 }, ptr %a127
store { ptr, i64, i64 } %t162, ptr %a163
store { ptr, i64, i64 } { ptr @.str.6123, i64 1, i64 0 }, ptr %a165
%t166 = call i64 @finch_str_find(ptr %a163, ptr %a165)
%t167 = icmp sge i64 %t166, 0
br label %logic.rend8741
logic.rend8741:
br label %logic.end8740
logic.end8740:
%t168 = phi i1 [ true, %logic.from8738 ], [ %t167, %logic.rend8741 ]
br label %logic.from8742
logic.from8742:
br i1 %t168, label %logic.end8744, label %logic.rhs8743
logic.rhs8743:
%t169 = load { ptr, i64, i64 }, ptr %a127
store { ptr, i64, i64 } %t169, ptr %a170
store { ptr, i64, i64 } { ptr @.str.6125, i64 1, i64 0 }, ptr %a172
%t173 = call i64 @finch_str_find(ptr %a170, ptr %a172)
%t174 = icmp sge i64 %t173, 0
br label %logic.rend8745
logic.rend8745:
br label %logic.end8744
logic.end8744:
%t175 = phi i1 [ true, %logic.from8742 ], [ %t174, %logic.rend8745 ]
br label %logic.from8746
logic.from8746:
br i1 %t175, label %logic.rhs8747, label %logic.end8748
logic.rhs8747:
%t176 = load { ptr, i64, i64 }, ptr %a127
store { ptr, i64, i64 } %t176, ptr %a177
store { ptr, i64, i64 } { ptr @.str.6127, i64 2, i64 0 }, ptr %a179
%t180 = call i32 @finch_str_starts(ptr %a177, ptr %a179)
%t181 = icmp ne i32 %t180, 0
%t182 = xor i1 %t181, true
br label %logic.rend8749
logic.rend8749:
br label %logic.end8748
logic.end8748:
%t183 = phi i1 [ false, %logic.from8746 ], [ %t182, %logic.rend8749 ]
store i1 %t183, ptr %a184
%t185 = load i1, ptr %a184
br i1 %t185, label %then8750, label %endif8752
then8750:
%t186 = load { ptr, i64, i64 }, ptr %a127
store { ptr, i64, i64 } %t186, ptr %a187
call void @finch_str_copy(ptr %a188, ptr %a187)
%t189 = load { ptr, i64, i64 }, ptr %a188
store { ptr, i64, i64 } %t189, ptr %a190
br label %while.cond8753
while.cond8753:
%t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1
%t192 = load i64, ptr %t191
%t193 = icmp sgt i64 %t192, 0
br label %logic.from8756
logic.from8756:
br i1 %t193, label %logic.rhs8757, label %logic.end8758
logic.rhs8757:
store { ptr, i64, i64 } { ptr @.str.6128, i64 4, i64 0 }, ptr %a194
%t196 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1
%t197 = load i64, ptr %t196
%t198 = sub i64 %t197, 1
%t199 = load { ptr, i64, i64 }, ptr %a190
%t200 = extractvalue { ptr, i64, i64 } %t199, 1
%t201 = icmp uge i64 %t198, %t200
br i1 %t201, label %range8759, label %inrange8760
range8759:
call void @finch_panic_index(ptr @.str.6130, i64 398, i64 %t198, i64 %t200)
unreachable
inrange8760:
%t202 = extractvalue { ptr, i64, i64 } %t199, 0
%t203 = getelementptr inbounds i8, ptr %t202, i64 %t198
%t204 = load i8, ptr %t203
call void @finch_str_from_char(ptr %a205, i8 signext %t204)
%t206 = load { ptr, i64, i64 }, ptr %a205
store { ptr, i64, i64 } %t206, ptr %a207
%t208 = call i64 @finch_str_find(ptr %a194, ptr %a207)
%t209 = icmp sge i64 %t208, 0
br label %logic.rend8761
logic.rend8761:
br label %logic.end8758
logic.end8758:
%t210 = phi i1 [ false, %logic.from8756 ], [ %t209, %logic.rend8761 ]
br i1 %t210, label %while.body8754, label %while.end8755
while.body8754:
%t211 = load { ptr, i64, i64 }, ptr %a190
store { ptr, i64, i64 } %t211, ptr %a212
%t214 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1
%t215 = load i64, ptr %t214
%t216 = sub i64 %t215, 1
call void @finch_str_sub(ptr %a213, ptr %a212, i64 0, i64 %t216, ptr @.str.6131, i64 399)
%t217 = load { ptr, i64, i64 }, ptr %a213
store { ptr, i64, i64 } %t217, ptr %a190
br label %while.cond8753
while.end8755:
%t218 = load { ptr, i64, i64 }, ptr %a190
store { ptr, i64, i64 } zeroinitializer, ptr %a219
store double 0.0, ptr %a220
store { ptr, i64, i64 } %t218, ptr %a221
%t222 = call i32 @finch_str_try_float(ptr %a221, ptr %a220, ptr %a219)
%t223 = icmp eq i32 %t222, 0
%t224 = load { ptr, i64, i64 }, ptr %a219
%t225 = load double, ptr %a220
br i1 %t223, label %or.failed8762, label %or.ok8763
or.failed8762:
store { ptr, i64, i64 } %t224, ptr %a226
ret %S.cimport.Number zeroinitializer
or.ok8763:
store double %t225, ptr %a227
%t228 = load i1, ptr %a94
br i1 %t228, label %then8764, label %endif8766
then8764:
%t229 = load double, ptr %a227
%t230 = fsub double 0.0, %t229
store double %t230, ptr %a227
br label %endif8766
endif8766:
%t231 = insertvalue %S.cimport.CConst zeroinitializer, i1 true, 0
%t232 = load double, ptr %a227
%t233 = insertvalue %S.cimport.CConst %t231, double %t232, 2
%t234 = load { ptr, i64, i64 }, ptr %a190
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.cimport.CConst %t233, { ptr, i64, i64 } %t237, 3
%t239 = insertvalue %S.cimport.Number zeroinitializer, %S.cimport.CConst %t238, 0
%t240 = insertvalue %S.cimport.Number %t239, i1 true, 1
ret %S.cimport.Number %t240
endif8752:
%t241 = load { ptr, i64, i64 }, ptr %a127
%t242 = call %S.cimport.Number @finch.cimport.parseInt({ ptr, i64, i64 } %t241)
store %S.cimport.Number %t242, ptr %a243
%t244 = getelementptr inbounds %S.cimport.Number, ptr %a243, i32 0, i32 1
%t245 = load i1, ptr %t244
br label %logic.from8767
logic.from8767:
br i1 %t245, label %logic.rhs8768, label %logic.end8769
logic.rhs8768:
%t246 = load i1, ptr %a94
br label %logic.rend8770
logic.rend8770:
br label %logic.end8769
logic.end8769:
%t247 = phi i1 [ false, %logic.from8767 ], [ %t246, %logic.rend8770 ]
br i1 %t247, label %then8771, label %endif8773
then8771:
%t248 = getelementptr inbounds %S.cimport.Number, ptr %a243, i32 0, i32 0
%t249 = getelementptr inbounds %S.cimport.CConst, ptr %t248, i32 0, i32 1
%t250 = load i64, ptr %t249
%t251 = sub i64 0, %t250
%t252 = getelementptr inbounds %S.cimport.Number, ptr %a243, i32 0, i32 0
%t253 = getelementptr inbounds %S.cimport.CConst, ptr %t252, i32 0, i32 1
store i64 %t251, ptr %t253
br label %endif8773
endif8773:
%t254 = load %S.cimport.Number, ptr %a243
store %S.cimport.Number %t254, ptr %a255
call void @finch.copy.S_cimport_Number(ptr %a256, ptr %a255)
%t257 = load %S.cimport.Number, ptr %a256
ret %S.cimport.Number %t257
}
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.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
%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
%a133 = alloca { ptr, i64, i64 }, align 16
%a134 = alloca i32, align 16
%a144 = alloca %S.cimport.CFunc, align 16
%a145 = alloca %S.cimport.CFunc, align 16
%a147 = alloca %S.C.CXType, align 16
%a148 = alloca %S.C.CXType, align 16
%a150 = alloca %S.C.CXCursor, align 16
%a152 = alloca %S.C.CXType, align 16
%a154 = alloca %S.C.CXType, align 16
%a165 = alloca { ptr, i64, i64 }, align 16
%a166 = alloca i32, align 16
%a176 = alloca %S.cimport.CFunc, align 16
%a177 = alloca %S.cimport.CFunc, align 16
%a180 = alloca %S.C.CXType, align 16
%a182 = alloca %S.C.CXType, align 16
%a185 = alloca %S.cimport.Mapped, align 16
%a191 = alloca %S.ast.Type, align 16
%a192 = alloca %S.ast.Type, align 16
%a197 = alloca { ptr, i64, i64 }, align 16
%a198 = alloca { ptr, i64, i64 }, align 16
%a201 = alloca %S.C.CXType, align 16
%a204 = alloca i64, align 16
%a206 = alloca i64, align 16
%a214 = alloca %S.C.CXType, align 16
%a216 = alloca %S.C.CXType, align 16
%a221 = alloca %S.cimport.Mapped, align 16
%a228 = alloca %S.ast.Type, align 16
%a229 = alloca %S.ast.Type, align 16
%a238 = alloca { ptr, i64, i64 }, align 16
%a239 = alloca { ptr, i64, i64 }, align 16
%a244 = alloca %S.C.CXType, align 16
%a254 = alloca { ptr, i64, i64 }, align 16
%a255 = alloca i32, align 16
%a265 = alloca %S.cimport.CFunc, align 16
%a266 = alloca %S.cimport.CFunc, align 16
%a271 = alloca %S.C.CXCursor, align 16
%a279 = alloca { ptr, i64, i64 }, align 16
%a284 = alloca %S.C.CXType, align 16
%a286 = alloca %S.C.CXCursor, align 16
%a289 = alloca %S.cimport.Mapped, align 16
%a299 = alloca { ptr, i64, i64 }, align 16
%a300 = alloca i32, align 16
%a310 = alloca %S.ast.Type, align 16
%a311 = alloca %S.ast.Type, align 16
%a316 = alloca %S.C.CXCursor, align 16
%a324 = alloca { ptr, i64, i64 }, align 16
%a325 = alloca { ptr, i64, i64 }, align 16
%a326 = alloca { ptr, i64, i64 }, align 16
%a332 = alloca %S.C.CXCursor, align 16
%a334 = alloca [32 x i8], align 16
%a337 = alloca { ptr, i64, i64 }, align 16
%a342 = alloca { ptr, i64, i64 }, align 16
%a351 = alloca { ptr, i64, i64 }, align 16
%a352 = alloca i32, align 16
%a362 = alloca { ptr, i64, i64 }, align 16
%a363 = alloca { ptr, i64, i64 }, align 16
%a368 = alloca %S.C.CXCursor, align 16
%a378 = alloca { ptr, i64, i64 }, align 16
%a383 = alloca %S.C.CXCursor, align 16
%a391 = alloca { ptr, i64, i64 }, align 16
%a392 = alloca i32, align 16
%a405 = alloca %S.C.CXCursor, align 16
%a409 = alloca %S.C.CXCursor, align 16
%a416 = alloca %S.cimport.Number, align 16
%a424 = alloca { ptr, i64, i64 }, align 16
%a436 = alloca { ptr, i64, i64 }, align 16
%a437 = alloca i32, align 16
%a447 = alloca %S.cimport.CConst, align 16
%a448 = 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 %then8774, label %else8775
then8774:
%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 %then8777, label %endif8779
then8777:
%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 %panic8780, label %ok8781
panic8780:
call void @finch_panic(ptr @.str.6132, i64 433, ptr @.str.6133)
unreachable
ok8781:
%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.from8782
logic.from8782:
br i1 %t43, label %logic.rhs8783, label %logic.end8784
logic.rhs8783:
%t44 = load ptr, ptr %a1
%t45 = icmp eq ptr %t44, null
br i1 %t45, label %panic8785, label %ok8786
panic8785:
call void @finch_panic(ptr @.str.6134, i64 433, ptr @.str.6135)
unreachable
ok8786:
%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 %panic8787, label %ok8788
panic8787:
call void @finch_panic(ptr @.str.6136, i64 433, ptr @.str.6137)
unreachable
ok8788:
%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.missing8789, label %map.found8790
map.missing8789:
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.6138, i64 433, ptr %a55)
unreachable
map.found8790:
%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.rend8791
logic.rend8791:
br label %logic.end8784
logic.end8784:
%t65 = phi i1 [ false, %logic.from8782 ], [ %t64, %logic.rend8791 ]
store i1 %t65, ptr %a66
%t67 = load i1, ptr %a66
%t68 = xor i1 %t67, true
br label %logic.from8792
logic.from8792:
br i1 %t68, label %logic.rhs8793, label %logic.end8794
logic.rhs8793:
%t69 = load ptr, ptr %a1
%t70 = icmp eq ptr %t69, null
br i1 %t70, label %panic8795, label %ok8796
panic8795:
call void @finch_panic(ptr @.str.6139, i64 434, ptr @.str.6140)
unreachable
ok8796:
%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.rend8797
logic.rend8797:
br label %logic.end8794
logic.end8794:
%t78 = phi i1 [ false, %logic.from8792 ], [ %t77, %logic.rend8797 ]
br i1 %t78, label %then8798, label %endif8800
then8798:
%t79 = load { ptr, i64, i64 }, ptr %a9
%t80 = load ptr, ptr %a1
%t81 = icmp eq ptr %t80, null
br i1 %t81, label %panic8801, label %ok8802
panic8801:
call void @finch_panic(ptr @.str.6141, i64 435, ptr @.str.6142)
unreachable
ok8802:
%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.new8803, label %map.have8804
map.new8803:
%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.have8804
map.have8804:
%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
store { ptr, i64, i64 } %t97, ptr %t94
br label %endif8800
endif8800:
br label %endif8779
endif8779:
br label %endif8776
else8775:
%t98 = load i32, ptr %a13
%t99 = icmp eq i32 %t98, 8
br i1 %t99, label %then8805, label %else8806
then8805:
%t100 = load ptr, ptr %a1
%t101 = icmp eq ptr %t100, null
br i1 %t101, label %panic8808, label %ok8809
panic8808:
call void @finch_panic(ptr @.str.6143, i64 439, ptr @.str.6144)
unreachable
ok8809:
%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 %a9
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 %then8810, label %endif8812
then8810:
ret void
endif8812:
%t108 = load { ptr, i64, i64 }, ptr %a9
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 %panic8813, label %ok8814
panic8813:
call void @finch_panic(ptr @.str.6145, i64 442, ptr @.str.6146)
unreachable
ok8814:
%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 byval(%S.C.CXCursor) align 8 %a123)
%t125 = icmp eq i32 %t124, 3
br i1 %t125, label %then8815, label %endif8817
then8815:
%t126 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 5
store { ptr, i64, i64 } { ptr @.str.6147, i64 62, i64 0 }, ptr %t126
%t127 = load %S.cimport.CFunc, ptr %a121
%t128 = load ptr, ptr %a1
%t129 = icmp eq ptr %t128, null
br i1 %t129, label %panic8818, label %ok8819
panic8818:
call void @finch_panic(ptr @.str.6148, i64 445, ptr @.str.6149)
unreachable
ok8819:
%t130 = getelementptr inbounds %S.cimport.Importer, ptr %t128, i32 0, i32 0
%t131 = getelementptr inbounds %S.cimport.CImports, ptr %t130, i32 0, i32 0
%t132 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t132, ptr %a133
store i32 0, ptr %a134
%t135 = call i64 @finch_map_slot(ptr %t131, ptr %a133, 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 %a134)
%t136 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t131, i32 0, i32 0
%t137 = load ptr, ptr %t136
%t138 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t137, i64 %t135
%t139 = load i32, ptr %a134
%t140 = icmp ne i32 %t139, 0
br i1 %t140, label %map.new8820, label %map.have8821
map.new8820:
%t141 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t138, i32 0, i32 1
call void @finch_str_copy(ptr %t141, ptr %a133)
%t142 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t138, i32 0, i32 2
store %S.cimport.CFunc zeroinitializer, ptr %t142
br label %map.have8821
map.have8821:
%t143 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t138, i32 0, i32 2
store %S.cimport.CFunc %t127, ptr %a144
call void @finch.copy.S_cimport_CFunc(ptr %a145, ptr %a144)
%t146 = load %S.cimport.CFunc, ptr %a145
store %S.cimport.CFunc %t146, ptr %t143
ret void
endif8817:
%t149 = load %S.C.CXCursor, ptr %a2
store %S.C.CXCursor %t149, ptr %a150
call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a148, ptr byval(%S.C.CXCursor) align 8 %a150)
%t151 = load %S.C.CXType, ptr %a148
store %S.C.CXType %t151, ptr %a152
call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a147, ptr byval(%S.C.CXType) align 8 %a152)
%t153 = load %S.C.CXType, ptr %a147
store %S.C.CXType %t153, ptr %a154
%t155 = getelementptr inbounds %S.C.CXType, ptr %a154, i32 0, i32 0
%t156 = load i32, ptr %t155
%t157 = icmp eq i32 %t156, 110
br i1 %t157, label %then8822, label %endif8824
then8822:
%t158 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 5
store { ptr, i64, i64 } { ptr @.str.6150, i64 42, i64 0 }, ptr %t158
%t159 = load %S.cimport.CFunc, ptr %a121
%t160 = load ptr, ptr %a1
%t161 = icmp eq ptr %t160, null
br i1 %t161, label %panic8825, label %ok8826
panic8825:
call void @finch_panic(ptr @.str.6151, i64 451, ptr @.str.6152)
unreachable
ok8826:
%t162 = getelementptr inbounds %S.cimport.Importer, ptr %t160, i32 0, i32 0
%t163 = getelementptr inbounds %S.cimport.CImports, ptr %t162, i32 0, i32 0
%t164 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t164, ptr %a165
store i32 0, ptr %a166
%t167 = call i64 @finch_map_slot(ptr %t163, ptr %a165, 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 %a166)
%t168 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t163, i32 0, i32 0
%t169 = load ptr, ptr %t168
%t170 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t169, i64 %t167
%t171 = load i32, ptr %a166
%t172 = icmp ne i32 %t171, 0
br i1 %t172, label %map.new8827, label %map.have8828
map.new8827:
%t173 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t170, i32 0, i32 1
call void @finch_str_copy(ptr %t173, ptr %a165)
%t174 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t170, i32 0, i32 2
store %S.cimport.CFunc zeroinitializer, ptr %t174
br label %map.have8828
map.have8828:
%t175 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t170, i32 0, i32 2
store %S.cimport.CFunc %t159, ptr %a176
call void @finch.copy.S_cimport_CFunc(ptr %a177, ptr %a176)
%t178 = load %S.cimport.CFunc, ptr %a177
store %S.cimport.CFunc %t178, ptr %t175
ret void
endif8824:
%t179 = load ptr, ptr %a1
%t181 = load %S.C.CXType, ptr %a154
store %S.C.CXType %t181, ptr %a182
call void @clang_getResultType(ptr sret(%S.C.CXType) align 16 %a180, ptr byval(%S.C.CXType) align 8 %a182)
%t183 = load %S.C.CXType, ptr %a180
%t184 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t179, %S.C.CXType %t183, i1 true, i1 false)
store %S.cimport.Mapped %t184, ptr %a185
%t186 = getelementptr inbounds %S.cimport.Mapped, ptr %a185, i32 0, i32 2
%t187 = load i1, ptr %t186
br i1 %t187, label %then8829, label %else8830
then8829:
%t188 = getelementptr inbounds %S.cimport.Mapped, ptr %a185, i32 0, i32 0
%t189 = load %S.ast.Type, ptr %t188
%t190 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 2
store %S.ast.Type %t189, ptr %a191
call void @finch.copy.S_ast_Type(ptr %a192, ptr %a191)
%t193 = load %S.ast.Type, ptr %a192
store %S.ast.Type %t193, ptr %t190
br label %endif8831
else8830:
%t194 = getelementptr inbounds %S.cimport.Mapped, ptr %a185, i32 0, i32 1
%t195 = load { ptr, i64, i64 }, ptr %t194
%t196 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 5
store { ptr, i64, i64 } %t195, ptr %a197
call void @finch_str_copy(ptr %a198, ptr %a197)
%t199 = load { ptr, i64, i64 }, ptr %a198
store { ptr, i64, i64 } %t199, ptr %t196
br label %endif8831
endif8831:
%t200 = load %S.C.CXType, ptr %a154
store %S.C.CXType %t200, ptr %a201
%t202 = call i32 @clang_getNumArgTypes(ptr byval(%S.C.CXType) align 8 %a201)
%t203 = sext i32 %t202 to i64
store i64 %t203, ptr %a204
%t205 = load i64, ptr %a204
store i64 0, ptr %a206
br label %for.cond8832
for.cond8832:
%t207 = load i64, ptr %a206
%t208 = icmp slt i64 %t207, %t205
br i1 %t208, label %for.body8833, label %for.end8835
for.body8833:
%t209 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 5
%t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i32 0, i32 1
%t211 = load i64, ptr %t210
%t212 = icmp sgt i64 %t211, 0
br i1 %t212, label %then8836, label %endif8838
then8836:
br label %for.end8835
endif8838:
%t213 = load ptr, ptr %a1
%t215 = load %S.C.CXType, ptr %a154
store %S.C.CXType %t215, ptr %a216
%t217 = load i64, ptr %a206
%t218 = trunc i64 %t217 to i32
call void @clang_getArgType(ptr sret(%S.C.CXType) align 16 %a214, ptr byval(%S.C.CXType) align 8 %a216, i32 %t218)
%t219 = load %S.C.CXType, ptr %a214
%t220 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t213, %S.C.CXType %t219, i1 true, i1 true)
store %S.cimport.Mapped %t220, ptr %a221
%t222 = getelementptr inbounds %S.cimport.Mapped, ptr %a221, i32 0, i32 2
%t223 = load i1, ptr %t222
br i1 %t223, label %then8839, label %else8840
then8839:
%t224 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 3
%t225 = getelementptr inbounds { ptr, i64, i64 }, ptr %t224, i32 0, i32 1
%t226 = getelementptr inbounds %S.cimport.Mapped, ptr %a221, i32 0, i32 0
%t227 = load %S.ast.Type, ptr %t226
store %S.ast.Type %t227, ptr %a228
call void @finch.copy.S_ast_Type(ptr %a229, ptr %a228)
%t230 = load %S.ast.Type, ptr %a229
%t231 = load i64, ptr %t225
%t232 = add i64 %t231, 1
call void @finch_arr_reserve(ptr %t224, i64 %t232, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64))
%t233 = load ptr, ptr %t224
%t234 = getelementptr inbounds %S.ast.Type, ptr %t233, i64 %t231
store %S.ast.Type %t230, ptr %t234
store i64 %t232, ptr %t225
br label %endif8841
else8840:
%t235 = getelementptr inbounds %S.cimport.Mapped, ptr %a221, i32 0, i32 1
%t236 = load { ptr, i64, i64 }, ptr %t235
%t237 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 5
store { ptr, i64, i64 } %t236, ptr %a238
call void @finch_str_copy(ptr %a239, ptr %a238)
%t240 = load { ptr, i64, i64 }, ptr %a239
store { ptr, i64, i64 } %t240, ptr %t237
br label %endif8841
endif8841:
br label %for.step8834
for.step8834:
%t241 = load i64, ptr %a206
%t242 = add i64 %t241, 1
store i64 %t242, ptr %a206
br label %for.cond8832
for.end8835:
%t243 = load %S.C.CXType, ptr %a154
store %S.C.CXType %t243, ptr %a244
%t245 = call i32 @clang_isFunctionTypeVariadic(ptr byval(%S.C.CXType) align 8 %a244)
%t246 = icmp ne i32 %t245, 0
%t247 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 4
store i1 %t246, ptr %t247
%t248 = load %S.cimport.CFunc, ptr %a121
%t249 = load ptr, ptr %a1
%t250 = icmp eq ptr %t249, null
br i1 %t250, label %panic8842, label %ok8843
panic8842:
call void @finch_panic(ptr @.str.6153, i64 473, ptr @.str.6154)
unreachable
ok8843:
%t251 = getelementptr inbounds %S.cimport.Importer, ptr %t249, i32 0, i32 0
%t252 = getelementptr inbounds %S.cimport.CImports, ptr %t251, i32 0, i32 0
%t253 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t253, ptr %a254
store i32 0, ptr %a255
%t256 = call i64 @finch_map_slot(ptr %t252, ptr %a254, 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 %a255)
%t257 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t252, i32 0, i32 0
%t258 = load ptr, ptr %t257
%t259 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t258, i64 %t256
%t260 = load i32, ptr %a255
%t261 = icmp ne i32 %t260, 0
br i1 %t261, label %map.new8844, label %map.have8845
map.new8844:
%t262 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t259, i32 0, i32 1
call void @finch_str_copy(ptr %t262, ptr %a254)
%t263 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t259, i32 0, i32 2
store %S.cimport.CFunc zeroinitializer, ptr %t263
br label %map.have8845
map.have8845:
%t264 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t259, i32 0, i32 2
store %S.cimport.CFunc %t248, ptr %a265
call void @finch.copy.S_cimport_CFunc(ptr %a266, ptr %a265)
%t267 = load %S.cimport.CFunc, ptr %a266
store %S.cimport.CFunc %t267, ptr %t264
br label %endif8807
else8806:
%t268 = load i32, ptr %a13
%t269 = icmp eq i32 %t268, 9
br i1 %t269, label %then8846, label %else8847
then8846:
%t270 = load %S.C.CXCursor, ptr %a2
store %S.C.CXCursor %t270, ptr %a271
%t272 = call i32 @clang_Cursor_getStorageClass(ptr byval(%S.C.CXCursor) align 8 %a271)
%t273 = icmp ne i32 %t272, 2
br label %logic.from8849
logic.from8849:
br i1 %t273, label %logic.end8851, label %logic.rhs8850
logic.rhs8850:
%t274 = load ptr, ptr %a1
%t275 = icmp eq ptr %t274, null
br i1 %t275, label %panic8852, label %ok8853
panic8852:
call void @finch_panic(ptr @.str.6155, i64 475, ptr @.str.6156)
unreachable
ok8853:
%t276 = getelementptr inbounds %S.cimport.Importer, ptr %t274, i32 0, i32 0
%t277 = getelementptr inbounds %S.cimport.CImports, ptr %t276, i32 0, i32 2
%t278 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t278, ptr %a279
%t280 = call i64 @finch_map_find(ptr %t277, ptr %a279, 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)
%t281 = icmp sge i64 %t280, 0
br label %logic.rend8854
logic.rend8854:
br label %logic.end8851
logic.end8851:
%t282 = phi i1 [ true, %logic.from8849 ], [ %t281, %logic.rend8854 ]
br i1 %t282, label %then8855, label %endif8857
then8855:
ret void
endif8857:
%t283 = load ptr, ptr %a1
%t285 = load %S.C.CXCursor, ptr %a2
store %S.C.CXCursor %t285, ptr %a286
call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a284, ptr byval(%S.C.CXCursor) align 8 %a286)
%t287 = load %S.C.CXType, ptr %a284
%t288 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t283, %S.C.CXType %t287, i1 false, i1 false)
store %S.cimport.Mapped %t288, ptr %a289
%t290 = getelementptr inbounds %S.cimport.Mapped, ptr %a289, i32 0, i32 2
%t291 = load i1, ptr %t290
br i1 %t291, label %then8858, label %endif8860
then8858:
%t292 = getelementptr inbounds %S.cimport.Mapped, ptr %a289, i32 0, i32 0
%t293 = load %S.ast.Type, ptr %t292
%t294 = load ptr, ptr %a1
%t295 = icmp eq ptr %t294, null
br i1 %t295, label %panic8861, label %ok8862
panic8861:
call void @finch_panic(ptr @.str.6157, i64 480, ptr @.str.6158)
unreachable
ok8862:
%t296 = getelementptr inbounds %S.cimport.Importer, ptr %t294, i32 0, i32 0
%t297 = getelementptr inbounds %S.cimport.CImports, ptr %t296, i32 0, i32 2
%t298 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t298, ptr %a299
store i32 0, ptr %a300
%t301 = call i64 @finch_map_slot(ptr %t297, ptr %a299, 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 %a300)
%t302 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t297, i32 0, i32 0
%t303 = load ptr, ptr %t302
%t304 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t303, i64 %t301
%t305 = load i32, ptr %a300
%t306 = icmp ne i32 %t305, 0
br i1 %t306, label %map.new8863, label %map.have8864
map.new8863:
%t307 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t304, i32 0, i32 1
call void @finch_str_copy(ptr %t307, ptr %a299)
%t308 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t304, i32 0, i32 2
store %S.ast.Type zeroinitializer, ptr %t308
br label %map.have8864
map.have8864:
%t309 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t304, i32 0, i32 2
store %S.ast.Type %t293, ptr %a310
call void @finch.copy.S_ast_Type(ptr %a311, ptr %a310)
%t312 = load %S.ast.Type, ptr %a311
store %S.ast.Type %t312, ptr %t309
br label %endif8860
endif8860:
br label %endif8848
else8847:
%t313 = load i32, ptr %a13
%t314 = icmp eq i32 %t313, 2
br i1 %t314, label %then8865, label %else8866
then8865:
%t315 = load %S.C.CXCursor, ptr %a2
store %S.C.CXCursor %t315, ptr %a316
%t317 = call i32 @clang_isCursorDefinition(ptr byval(%S.C.CXCursor) align 8 %a316)
%t318 = icmp ne i32 %t317, 0
br label %logic.from8868
logic.from8868:
br i1 %t318, label %logic.rhs8869, label %logic.end8870
logic.rhs8869:
%t319 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1
%t320 = load i64, ptr %t319
%t321 = icmp sgt i64 %t320, 0
br label %logic.rend8871
logic.rend8871:
br label %logic.end8870
logic.end8870:
%t322 = phi i1 [ false, %logic.from8868 ], [ %t321, %logic.rend8871 ]
br label %logic.from8872
logic.from8872:
br i1 %t322, label %logic.rhs8873, label %logic.end8874
logic.rhs8873:
%t323 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t323, ptr %a324
store { ptr, i64, i64 } { ptr @.str.6160, i64 1, i64 0 }, ptr %a326
%t327 = call i64 @finch_str_find(ptr %a324, ptr %a326)
%t328 = icmp sge i64 %t327, 0
%t329 = xor i1 %t328, true
br label %logic.rend8875
logic.rend8875:
br label %logic.end8874
logic.end8874:
%t330 = phi i1 [ false, %logic.from8872 ], [ %t329, %logic.rend8875 ]
br i1 %t330, label %then8876, label %endif8878
then8876:
%t331 = load %S.C.CXCursor, ptr %a2
store %S.C.CXCursor %t331, ptr %a332
%t333 = call { i64, i64 } @clang_getCursorUSR(ptr byval(%S.C.CXCursor) align 8 %a332)
store { i64, i64 } %t333, ptr %a334
%t335 = load %S.C.CXString, ptr %a334
%t336 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t335)
store { ptr, i64, i64 } %t336, ptr %a337
%t338 = load ptr, ptr %a1
%t339 = icmp eq ptr %t338, null
br i1 %t339, label %panic8879, label %ok8880
panic8879:
call void @finch_panic(ptr @.str.6161, i64 485, ptr @.str.6162)
unreachable
ok8880:
%t340 = getelementptr inbounds %S.cimport.Importer, ptr %t338, i32 0, i32 3
%t341 = load { ptr, i64, i64 }, ptr %a337
store { ptr, i64, i64 } %t341, ptr %a342
%t343 = call i64 @finch_map_find(ptr %t340, ptr %a342, 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)
%t344 = icmp sge i64 %t343, 0
%t345 = xor i1 %t344, true
br i1 %t345, label %then8881, label %endif8883
then8881:
%t346 = load { ptr, i64, i64 }, ptr %a9
%t347 = load ptr, ptr %a1
%t348 = icmp eq ptr %t347, null
br i1 %t348, label %panic8884, label %ok8885
panic8884:
call void @finch_panic(ptr @.str.6163, i64 486, ptr @.str.6164)
unreachable
ok8885:
%t349 = getelementptr inbounds %S.cimport.Importer, ptr %t347, i32 0, i32 3
%t350 = load { ptr, i64, i64 }, ptr %a337
store { ptr, i64, i64 } %t350, ptr %a351
store i32 0, ptr %a352
%t353 = call i64 @finch_map_slot(ptr %t349, ptr %a351, 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 %a352)
%t354 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t349, i32 0, i32 0
%t355 = load ptr, ptr %t354
%t356 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t355, i64 %t353
%t357 = load i32, ptr %a352
%t358 = icmp ne i32 %t357, 0
br i1 %t358, label %map.new8886, label %map.have8887
map.new8886:
%t359 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t356, i32 0, i32 1
call void @finch_str_copy(ptr %t359, ptr %a351)
%t360 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t356, i32 0, i32 2
store { ptr, i64, i64 } zeroinitializer, ptr %t360
br label %map.have8887
map.have8887:
%t361 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t356, i32 0, i32 2
store { ptr, i64, i64 } %t346, ptr %a362
call void @finch_str_copy(ptr %a363, ptr %a362)
%t364 = load { ptr, i64, i64 }, ptr %a363
store { ptr, i64, i64 } %t364, ptr %t361
br label %endif8883
endif8883:
br label %endif8878
endif8878:
br label %endif8867
else8866:
%t365 = load i32, ptr %a13
%t366 = icmp eq i32 %t365, 5
br i1 %t366, label %then8888, label %else8889
then8888:
%t367 = load %S.C.CXCursor, ptr %a2
store %S.C.CXCursor %t367, ptr %a368
%t369 = load ptr, ptr %a1
%t370 = call i32 @clang_visitChildren(ptr byval(%S.C.CXCursor) align 8 %a368, ptr @finch.c.cimport.visitTop, ptr %t369)
br label %endif8890
else8889:
%t371 = load i32, ptr %a13
%t372 = icmp eq i32 %t371, 7
br i1 %t372, label %then8891, label %else8892
then8891:
%t373 = load ptr, ptr %a1
%t374 = icmp eq ptr %t373, null
br i1 %t374, label %panic8894, label %ok8895
panic8894:
call void @finch_panic(ptr @.str.6165, i64 492, ptr @.str.6166)
unreachable
ok8895:
%t375 = getelementptr inbounds %S.cimport.Importer, ptr %t373, i32 0, i32 0
%t376 = getelementptr inbounds %S.cimport.CImports, ptr %t375, i32 0, i32 1
%t377 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t377, ptr %a378
%t379 = call i64 @finch_map_find(ptr %t376, ptr %a378, 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)
%t380 = icmp sge i64 %t379, 0
%t381 = xor i1 %t380, true
br i1 %t381, label %then8896, label %endif8898
then8896:
%t382 = load %S.C.CXCursor, ptr %a2
store %S.C.CXCursor %t382, ptr %a383
%t384 = call i64 @clang_getEnumConstantDeclValue(ptr byval(%S.C.CXCursor) align 8 %a383)
%t385 = insertvalue %S.cimport.CConst zeroinitializer, i64 %t384, 1
%t386 = load ptr, ptr %a1
%t387 = icmp eq ptr %t386, null
br i1 %t387, label %panic8899, label %ok8900
panic8899:
call void @finch_panic(ptr @.str.6167, i64 493, ptr @.str.6168)
unreachable
ok8900:
%t388 = getelementptr inbounds %S.cimport.Importer, ptr %t386, i32 0, i32 0
%t389 = getelementptr inbounds %S.cimport.CImports, ptr %t388, i32 0, i32 1
%t390 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t390, ptr %a391
store i32 0, ptr %a392
%t393 = call i64 @finch_map_slot(ptr %t389, ptr %a391, 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 %a392)
%t394 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t389, i32 0, i32 0
%t395 = load ptr, ptr %t394
%t396 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t395, i64 %t393
%t397 = load i32, ptr %a392
%t398 = icmp ne i32 %t397, 0
br i1 %t398, label %map.new8901, label %map.have8902
map.new8901:
%t399 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t396, i32 0, i32 1
call void @finch_str_copy(ptr %t399, ptr %a391)
%t400 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t396, i32 0, i32 2
store %S.cimport.CConst zeroinitializer, ptr %t400
br label %map.have8902
map.have8902:
%t401 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t396, i32 0, i32 2
store %S.cimport.CConst %t385, ptr %t401
br label %endif8898
endif8898:
br label %endif8893
else8892:
%t402 = load i32, ptr %a13
%t403 = icmp eq i32 %t402, 501
br i1 %t403, label %then8903, label %endif8905
then8903:
%t404 = load %S.C.CXCursor, ptr %a2
store %S.C.CXCursor %t404, ptr %a405
%t406 = call i32 @clang_Cursor_isMacroBuiltin(ptr byval(%S.C.CXCursor) align 8 %a405)
%t407 = icmp ne i32 %t406, 0
br label %logic.from8906
logic.from8906:
br i1 %t407, label %logic.end8908, label %logic.rhs8907
logic.rhs8907:
%t408 = load %S.C.CXCursor, ptr %a2
store %S.C.CXCursor %t408, ptr %a409
%t410 = call i32 @clang_Cursor_isMacroFunctionLike(ptr byval(%S.C.CXCursor) align 8 %a409)
%t411 = icmp ne i32 %t410, 0
br label %logic.rend8909
logic.rend8909:
br label %logic.end8908
logic.end8908:
%t412 = phi i1 [ true, %logic.from8906 ], [ %t411, %logic.rend8909 ]
br i1 %t412, label %then8910, label %endif8912
then8910:
ret void
endif8912:
%t413 = load ptr, ptr %a1
%t414 = load %S.C.CXCursor, ptr %a2
%t415 = call %S.cimport.Number @finch.cimport.macroValue(ptr %t413, %S.C.CXCursor %t414)
store %S.cimport.Number %t415, ptr %a416
%t417 = getelementptr inbounds %S.cimport.Number, ptr %a416, i32 0, i32 1
%t418 = load i1, ptr %t417
br label %logic.from8913
logic.from8913:
br i1 %t418, label %logic.rhs8914, label %logic.end8915
logic.rhs8914:
%t419 = load ptr, ptr %a1
%t420 = icmp eq ptr %t419, null
br i1 %t420, label %panic8916, label %ok8917
panic8916:
call void @finch_panic(ptr @.str.6169, i64 500, ptr @.str.6170)
unreachable
ok8917:
%t421 = getelementptr inbounds %S.cimport.Importer, ptr %t419, i32 0, i32 0
%t422 = getelementptr inbounds %S.cimport.CImports, ptr %t421, i32 0, i32 1
%t423 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t423, ptr %a424
%t425 = call i64 @finch_map_find(ptr %t422, ptr %a424, 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)
%t426 = icmp sge i64 %t425, 0
%t427 = xor i1 %t426, true
br label %logic.rend8918
logic.rend8918:
br label %logic.end8915
logic.end8915:
%t428 = phi i1 [ false, %logic.from8913 ], [ %t427, %logic.rend8918 ]
br i1 %t428, label %then8919, label %endif8921
then8919:
%t429 = getelementptr inbounds %S.cimport.Number, ptr %a416, i32 0, i32 0
%t430 = load %S.cimport.CConst, ptr %t429
%t431 = load ptr, ptr %a1
%t432 = icmp eq ptr %t431, null
br i1 %t432, label %panic8922, label %ok8923
panic8922:
call void @finch_panic(ptr @.str.6171, i64 501, ptr @.str.6172)
unreachable
ok8923:
%t433 = getelementptr inbounds %S.cimport.Importer, ptr %t431, i32 0, i32 0
%t434 = getelementptr inbounds %S.cimport.CImports, ptr %t433, i32 0, i32 1
%t435 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } %t435, ptr %a436
store i32 0, ptr %a437
%t438 = call i64 @finch_map_slot(ptr %t434, ptr %a436, 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 %a437)
%t439 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t434, i32 0, i32 0
%t440 = load ptr, ptr %t439
%t441 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t440, i64 %t438
%t442 = load i32, ptr %a437
%t443 = icmp ne i32 %t442, 0
br i1 %t443, label %map.new8924, label %map.have8925
map.new8924:
%t444 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t441, i32 0, i32 1
call void @finch_str_copy(ptr %t444, ptr %a436)
%t445 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t441, i32 0, i32 2
store %S.cimport.CConst zeroinitializer, ptr %t445
br label %map.have8925
map.have8925:
%t446 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t441, i32 0, i32 2
store %S.cimport.CConst %t430, ptr %a447
call void @finch.copy.S_cimport_CConst(ptr %a448, ptr %a447)
%t449 = load %S.cimport.CConst, ptr %a448
store %S.cimport.CConst %t449, ptr %t446
br label %endif8921
endif8921:
br label %endif8905
endif8905:
br label %endif8893
endif8893:
br label %endif8890
endif8890:
br label %endif8867
endif8867:
br label %endif8848
endif8848:
br label %endif8807
endif8807:
br label %endif8776
endif8776:
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
%a133 = alloca { ptr, i64, i64 }, align 16
%a146 = alloca %S.C.CXUnsavedFile, align 16
%a147 = alloca ptr, align 16
%a149 = alloca i64, align 16
%a162 = alloca i32, 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
%a188 = alloca i64, align 16
%a190 = alloca i64, align 16
%a197 = alloca ptr, align 16
%a203 = alloca [32 x i8], align 16
%a206 = 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
%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
%a223 = alloca { ptr, i64, i64 }, align 16
%a224 = alloca { ptr, i64, i64 }, align 16
%a225 = 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
%a239 = alloca { ptr, i64, i64 }, align 16
%a240 = alloca { ptr, i64, i64 }, align 16
%a241 = 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
%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
%a265 = alloca { ptr, i64, i64 }, align 16
%a266 = 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
%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
%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
%a299 = alloca { ptr, i64, i64 }, align 16
%a310 = alloca { ptr, i64, i64 }, align 16
%a311 = alloca { ptr, i64, i64 }, align 16
%a313 = alloca %S.C.CXCursor, align 16
%a316 = alloca %S.C.CXCursor, align 16
%a324 = alloca %S.cimport.CImports, align 16
%a325 = 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 %then8926, label %endif8928
then8926:
%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
%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
endif8928:
%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.6173, i64 2, i64 0 }, ptr %t19
%t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 1
store { ptr, i64, i64 } { ptr @.str.6174, i64 1, i64 0 }, ptr %t20
%t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 2
store { ptr, i64, i64 } { ptr @.str.6175, 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 %then8929, label %endif8931
then8929:
%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.6176, 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 %endif8931
endif8931:
%t39 = load i1, ptr %a4
br i1 %t39, label %then8932, label %endif8934
then8932:
%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.6177, i64 19, i64 0 }, ptr %t44
store i64 %t42, ptr %t40
br label %endif8934
endif8934:
store i64 0, ptr %a45
br label %each.cond8935
each.cond8935:
%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.body8936, label %each.end8938
each.body8936:
%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.6178, 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.step8937
each.step8937:
%t64 = load i64, ptr %a45
%t65 = add i64 %t64, 1
store i64 %t65, ptr %a45
br label %each.cond8935
each.end8938:
%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.cond8939
each.cond8939:
%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.body8940, label %each.end8942
each.body8940:
%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.step8941
each.step8941:
%t87 = load i64, ptr %a69
%t88 = add i64 %t87, 1
store i64 %t88, ptr %a69
br label %each.cond8939
each.end8942:
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.cond8943
for.cond8943:
%t93 = load i64, ptr %a92
%t94 = icmp slt i64 %t93, %t91
br i1 %t94, label %for.body8944, label %for.end8946
for.body8944:
%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 %range8947, label %inrange8948
range8947:
call void @finch_panic_index(ptr @.str.6179, i64 528, i64 %t96, i64 %t98)
unreachable
inrange8948:
%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.6180, 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.step8945
for.step8945:
%t110 = load i64, ptr %a92
%t111 = add i64 %t110, 1
store i64 %t111, ptr %a92
br label %for.cond8943
for.end8946:
%t112 = call ptr @clang_createIndex(i32 0, i32 0)
store ptr %t112, ptr %a113
store i64 0, ptr %a114
br label %each.cond8949
each.cond8949:
%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.body8950, label %each.end8952
each.body8950:
%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.6181, 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.6182, i64 2, i64 0 }, ptr %a131
call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131)
%t132 = load { ptr, i64, i64 }, ptr %a129
store { ptr, i64, i64 } %t132, ptr %a133
%t134 = extractvalue { ptr, i64, i64 } { ptr @.str.6183, i64 14, i64 0 }, 0
%t135 = icmp eq ptr %t134, null
%t136 = select i1 %t135, ptr @.str.6184, ptr %t134
%t137 = insertvalue %S.C.CXUnsavedFile zeroinitializer, ptr %t136, 0
%t138 = load { ptr, i64, i64 }, ptr %a133
%t139 = extractvalue { ptr, i64, i64 } %t138, 0
%t140 = icmp eq ptr %t139, null
%t141 = select i1 %t140, ptr @.str.6185, ptr %t139
%t142 = insertvalue %S.C.CXUnsavedFile %t137, ptr %t141, 1
%t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %a133, i32 0, i32 1
%t144 = load i64, ptr %t143
%t145 = insertvalue %S.C.CXUnsavedFile %t142, i64 %t144, 2
store %S.C.CXUnsavedFile %t145, ptr %a146
store ptr null, ptr %a147
%t148 = or i64 1, 64
store i64 %t148, ptr %a149
%t150 = load ptr, ptr %a113
%t151 = extractvalue { ptr, i64, i64 } { ptr @.str.6186, i64 14, i64 0 }, 0
%t152 = icmp eq ptr %t151, null
%t153 = select i1 %t152, ptr @.str.6187, ptr %t151
%t154 = load { ptr, i64, i64 }, ptr %a89
%t155 = extractvalue { ptr, i64, i64 } %t154, 0
%t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %a89, i32 0, i32 1
%t157 = load i64, ptr %t156
%t158 = trunc i64 %t157 to i32
%t159 = load i64, ptr %a149
%t160 = trunc i64 %t159 to i32
%t161 = call i32 @clang_parseTranslationUnit2(ptr %t150, ptr %t153, ptr %t155, i32 %t158, ptr %a146, i32 1, i32 %t160, ptr %a147)
store i32 %t161, ptr %a162
%t163 = load i32, ptr %a162
%t164 = icmp ne i32 %t163, 0
br label %logic.from8953
logic.from8953:
br i1 %t164, label %logic.end8955, label %logic.rhs8954
logic.rhs8954:
%t165 = load ptr, ptr %a147
%t166 = icmp eq ptr %t165, null
br label %logic.rend8956
logic.rend8956:
br label %logic.end8955
logic.end8955:
%t167 = phi i1 [ true, %logic.from8953 ], [ %t166, %logic.rend8956 ]
br i1 %t167, label %then8957, label %endif8959
then8957:
%t168 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1
%t169 = load { ptr, i64, i64 }, ptr %t168
store { ptr, i64, i64 } %t169, ptr %a171
store { ptr, i64, i64 } { ptr @.str.6188, i64 33, i64 0 }, ptr %a172
call void @finch_str_concat(ptr %a170, ptr %a171, ptr %a172)
%t173 = load { ptr, i64, i64 }, ptr %a170
%t174 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0
%t175 = load { ptr, i64, i64 }, ptr %t174
store { ptr, i64, i64 } %t173, 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.6189, 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 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t183, 2
ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t184
endif8959:
%t185 = load ptr, ptr %a147
%t186 = call i32 @clang_getNumDiagnostics(ptr %t185)
%t187 = zext i32 %t186 to i64
store i64 %t187, ptr %a188
%t189 = load i64, ptr %a188
store i64 0, ptr %a190
br label %for.cond8960
for.cond8960:
%t191 = load i64, ptr %a190
%t192 = icmp slt i64 %t191, %t189
br i1 %t192, label %for.body8961, label %for.end8963
for.body8961:
%t193 = load ptr, ptr %a147
%t194 = load i64, ptr %a190
%t195 = trunc i64 %t194 to i32
%t196 = call ptr @clang_getDiagnostic(ptr %t193, i32 %t195)
store ptr %t196, ptr %a197
%t198 = load ptr, ptr %a197
%t199 = call i32 @clang_getDiagnosticSeverity(ptr %t198)
%t200 = icmp sge i32 %t199, 3
br i1 %t200, label %then8964, label %endif8966
then8964:
%t201 = load ptr, ptr %a197
%t202 = call { i64, i64 } @clang_getDiagnosticSpelling(ptr %t201)
store { i64, i64 } %t202, ptr %a203
%t204 = load %S.C.CXString, ptr %a203
%t205 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t204)
store { ptr, i64, i64 } %t205, ptr %a206
%t207 = load ptr, ptr %a197
call void @clang_disposeDiagnostic(ptr %t207)
%t208 = load { ptr, i64, i64 }, ptr %a206
store { ptr, i64, i64 } %t208, ptr %a209
store { ptr, i64, i64 } { ptr @.str.6191, i64 14, i64 0 }, ptr %a211
%t212 = call i64 @finch_str_find(ptr %a209, ptr %a211)
%t213 = icmp sge i64 %t212, 0
br i1 %t213, label %then8967, label %endif8969
then8967:
%t214 = load { ptr, i64, i64 }, ptr %a206
store { ptr, i64, i64 } %t214, ptr %a215
%t217 = load { ptr, i64, i64 }, ptr %a206
store { ptr, i64, i64 } %t217, ptr %a218
%t220 = getelementptr inbounds { ptr, i64, i64 }, ptr %a206, i32 0, i32 1
%t221 = load i64, ptr %t220
call void @finch_str_sub(ptr %a219, ptr %a218, i64 1, i64 %t221, ptr @.str.6193, i64 548)
%t222 = load { ptr, i64, i64 }, ptr %a219
store { ptr, i64, i64 } %t222, ptr %a223
store { ptr, i64, i64 } { ptr @.str.6195, i64 1, i64 0 }, ptr %a225
%t226 = call i64 @finch_str_find(ptr %a223, ptr %a225)
%t227 = add i64 %t226, 1
call void @finch_str_sub(ptr %a216, ptr %a215, i64 1, i64 %t227, ptr @.str.6192, i64 548)
%t228 = load { ptr, i64, i64 }, ptr %a216
store { ptr, i64, i64 } %t228, ptr %a229
%t230 = load { ptr, i64, i64 }, ptr %a229
%t231 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0
%t232 = load { ptr, i64, i64 }, ptr %t231
store { ptr, i64, i64 } %t230, ptr %a233
store { ptr, i64, i64 } %t232, ptr %a234
%t235 = call i32 @finch_str_eq(ptr %a233, ptr %a234)
%t236 = icmp ne i32 %t235, 0
br i1 %t236, label %then8970, label %endif8972
then8970:
%t237 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1
%t238 = load { ptr, i64, i64 }, ptr %t237
store { ptr, i64, i64 } %t238, ptr %a240
store { ptr, i64, i64 } { ptr @.str.6196, i64 34, i64 0 }, ptr %a241
call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241)
%t242 = load { ptr, i64, i64 }, ptr %a239
%t243 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0
%t244 = load { ptr, i64, i64 }, ptr %t243
store { ptr, i64, i64 } %t242, ptr %a246
store { ptr, i64, i64 } %t244, ptr %a247
call void @finch_str_concat(ptr %a245, ptr %a246, ptr %a247)
%t248 = load { ptr, i64, i64 }, ptr %a245
store { ptr, i64, i64 } %t248, ptr %a250
store { ptr, i64, i64 } { ptr @.str.6197, i64 1, i64 0 }, ptr %a251
call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251)
%t252 = load { ptr, i64, i64 }, ptr %a249
%t253 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t252, 2
ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t253
endif8972:
%t254 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1
%t255 = load { ptr, i64, i64 }, ptr %t254
store { ptr, i64, i64 } %t255, ptr %a257
store { ptr, i64, i64 } { ptr @.str.6198, i64 34, i64 0 }, ptr %a258
call void @finch_str_concat(ptr %a256, ptr %a257, ptr %a258)
%t259 = load { ptr, i64, i64 }, ptr %a256
%t260 = load { ptr, i64, i64 }, ptr %a229
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)
%t264 = load { ptr, i64, i64 }, ptr %a261
store { ptr, i64, i64 } %t264, ptr %a266
store { ptr, i64, i64 } { ptr @.str.6199, i64 10, i64 0 }, ptr %a267
call void @finch_str_concat(ptr %a265, ptr %a266, ptr %a267)
%t268 = load { ptr, i64, i64 }, ptr %a265
%t269 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0
%t270 = load { ptr, i64, i64 }, ptr %t269
store { ptr, i64, i64 } %t268, 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
store { ptr, i64, i64 } %t274, ptr %a276
store { ptr, i64, i64 } { ptr @.str.6200, i64 60, i64 0 }, ptr %a277
call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277)
%t278 = load { ptr, i64, i64 }, ptr %a275
%t279 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t278, 2
ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t279
endif8969:
%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.6201, 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)
%t291 = load { ptr, i64, i64 }, ptr %a288
store { ptr, i64, i64 } %t291, ptr %a293
store { ptr, i64, i64 } { ptr @.str.6202, i64 16, i64 0 }, ptr %a294
call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294)
%t295 = load { ptr, i64, i64 }, ptr %a292
%t296 = load { ptr, i64, i64 }, ptr %a206
store { ptr, i64, i64 } %t295, 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
%t301 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t300, 2
ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t301
endif8966:
%t302 = load ptr, ptr %a197
call void @clang_disposeDiagnostic(ptr %t302)
br label %for.step8962
for.step8962:
%t303 = load i64, ptr %a190
%t304 = add i64 %t303, 1
store i64 %t304, ptr %a190
br label %for.cond8960
for.end8963:
%t305 = load ptr, ptr %a147
%t306 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 1
store ptr %t305, ptr %t306
%t307 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0
%t308 = load { ptr, i64, i64 }, ptr %t307
%t309 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 2
store { ptr, i64, i64 } %t308, ptr %a310
call void @finch_str_copy(ptr %a311, ptr %a310)
%t312 = load { ptr, i64, i64 }, ptr %a311
store { ptr, i64, i64 } %t312, ptr %t309
%t314 = load ptr, ptr %a147
call void @clang_getTranslationUnitCursor(ptr sret(%S.C.CXCursor) align 16 %a313, ptr %t314)
%t315 = load %S.C.CXCursor, ptr %a313
store %S.C.CXCursor %t315, ptr %a316
%t317 = call i32 @clang_visitChildren(ptr byval(%S.C.CXCursor) align 8 %a316, ptr @finch.c.cimport.visitTop, ptr %a6)
%t318 = load ptr, ptr %a147
call void @clang_disposeTranslationUnit(ptr %t318)
br label %each.step8951
each.step8951:
%t319 = load i64, ptr %a114
%t320 = add i64 %t319, 1
store i64 %t320, ptr %a114
br label %each.cond8949
each.end8952:
%t321 = load ptr, ptr %a113
call void @clang_disposeIndex(ptr %t321)
%t322 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 0
%t323 = load %S.cimport.CImports, ptr %t322
store %S.cimport.CImports %t323, ptr %a324
call void @finch.copy.S_cimport_CImports(ptr %a325, ptr %a324)
%t326 = load %S.cimport.CImports, ptr %a325
%t327 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, i1 true, 0
%t328 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t327, %S.cimport.CImports %t326, 1
ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t328
}
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
%a18 = 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
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.6205, 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 } %t10, ptr %a11
%t12 = load { ptr, i64, i64 }, ptr %a11
%t13 = extractvalue { ptr, i64, i64 } %t12, 1
%t14 = icmp uge i64 0, %t13
br i1 %t14, label %range8973, label %inrange8974
range8973:
call void @finch_panic_index(ptr @.str.6206, i64 20, i64 0, i64 %t13)
unreachable
inrange8974:
%t15 = extractvalue { ptr, i64, i64 } %t12, 0
%t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 0
%t17 = load { ptr, i64, i64 }, ptr %t16
store { ptr, i64, i64 } %t17, ptr %a18
call void @finch_str_trim(ptr %a19, ptr %a18)
%t20 = load { ptr, i64, i64 }, ptr %a19
ret { ptr, i64, i64 } %t20
}
define internal { ptr, i64, i64 } @finch.platform.hostTriple() {
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
%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
%a17 = alloca { ptr, i64, i64 }, align 16
%a22 = 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
%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
%a38 = alloca { ptr, i64, i64 }, align 16
%a39 = alloca { ptr, i64, i64 }, align 16
store { ptr, i64, i64 } { ptr @.str.6208, i64 21, i64 0 }, ptr %a1
%t2 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } { ptr @.str.6209, i64 22, 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.6210, i64 14, i64 0 }, 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
call void @finch_str_copy(ptr %a11, ptr %a12)
%t13 = call i64 @finch_shell(ptr %a11)
%t14 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t14, ptr %a15
store { ptr, i64, i64 } zeroinitializer, ptr %a16
store { ptr, i64, i64 } zeroinitializer, ptr %a17
%t18 = call i32 @finch_try_read_file(ptr %a16, ptr %a15, ptr %a17)
%t19 = icmp eq i32 %t18, 0
%t20 = load { ptr, i64, i64 }, ptr %a17
%t21 = load { ptr, i64, i64 }, ptr %a16
br i1 %t19, label %or.failed8975, label %or.ok8976
or.failed8975:
store { ptr, i64, i64 } %t20, ptr %a22
br label %or.bend8977
or.bend8977:
br label %or.end8978
or.ok8976:
br label %or.end8978
or.end8978:
%t23 = phi { ptr, i64, i64 } [ { ptr @.str.6211, i64 0, i64 0 }, %or.bend8977 ], [ %t21, %or.ok8976 ]
store { ptr, i64, i64 } %t23, ptr %a24
%t25 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } { ptr @.str.6212, i64 7, i64 0 }, ptr %a27
store { ptr, i64, i64 } %t25, ptr %a28
call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28)
%t29 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t29, ptr %a31
store { ptr, i64, i64 } { ptr @.str.6213, i64 1, i64 0 }, ptr %a32
call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32)
%t33 = load { ptr, i64, i64 }, ptr %a30
store { ptr, i64, i64 } %t33, ptr %a35
call void @finch_str_copy(ptr %a34, ptr %a35)
%t36 = call i64 @finch_shell(ptr %a34)
%t37 = load { ptr, i64, i64 }, ptr %a24
store { ptr, i64, i64 } %t37, ptr %a38
call void @finch_str_trim(ptr %a39, ptr %a38)
%t40 = load { ptr, i64, i64 }, ptr %a39
%t41 = extractvalue { ptr, i64, i64 } %t40, 1
%t42 = icmp eq i64 %t41, 0
br i1 %t42, label %then8979, label %endif8981
then8979:
ret { ptr, i64, i64 } { ptr @.str.6215, i64 24, i64 0 }
endif8981:
%t43 = load { ptr, i64, i64 }, ptr %a24
%t44 = call { ptr, i64, i64 } @finch.platform.firstLine({ ptr, i64, i64 } %t43)
ret { ptr, i64, i64 } %t44
}
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
%a18 = 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
%a32 = 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
%a44 = alloca { ptr, i64, i64 }, align 16
%a45 = 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
%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
%a63 = alloca { ptr, i64, i64 }, align 16
%a66 = alloca %S.platform.Target, 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
%a81 = 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
%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
%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
%a118 = 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
%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
%a150 = alloca i1, 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
%a164 = alloca i1, align 16
%a186 = 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
%a197 = alloca { ptr, i64, i64 }, align 16
%a198 = 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
%a242 = alloca %S.platform.Target, align 16
%a243 = alloca %S.platform.Target, 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 %then8982, label %else8983
then8982:
%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
store { ptr, i64, i64 } %t15, ptr %a8
br label %endif8984
else8983:
%t16 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t16, ptr %a17
store { ptr, i64, i64 } { ptr @.str.6216, i64 7, i64 0 }, ptr %a18
%t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18)
%t20 = icmp ne i32 %t19, 0
br i1 %t20, label %then8985, label %else8986
then8985:
store { ptr, i64, i64 } { ptr @.str.6217, i64 18, i64 0 }, ptr %a8
br label %endif8987
else8986:
%t21 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t21, ptr %a22
store { ptr, i64, i64 } { ptr @.str.6218, i64 5, i64 0 }, ptr %a23
%t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23)
%t25 = icmp ne i32 %t24, 0
br i1 %t25, label %then8988, label %else8989
then8988:
store { ptr, i64, i64 } { ptr @.str.6219, i64 24, i64 0 }, ptr %a8
br label %endif8990
else8989:
%t26 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t26, ptr %a27
store { ptr, i64, i64 } { ptr @.str.6220, i64 5, i64 0 }, ptr %a28
%t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28)
%t30 = icmp ne i32 %t29, 0
br label %logic.from8991
logic.from8991:
br i1 %t30, label %logic.end8993, label %logic.rhs8992
logic.rhs8992:
%t31 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t31, ptr %a32
store { ptr, i64, i64 } { ptr @.str.6221, i64 7, i64 0 }, ptr %a33
%t34 = call i32 @finch_str_eq(ptr %a32, ptr %a33)
%t35 = icmp ne i32 %t34, 0
br label %logic.rend8994
logic.rend8994:
br label %logic.end8993
logic.end8993:
%t36 = phi i1 [ true, %logic.from8991 ], [ %t35, %logic.rend8994 ]
br label %logic.from8995
logic.from8995:
br i1 %t36, label %logic.end8997, label %logic.rhs8996
logic.rhs8996:
%t37 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t37, ptr %a38
store { ptr, i64, i64 } { ptr @.str.6222, i64 11, i64 0 }, ptr %a39
%t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39)
%t41 = icmp ne i32 %t40, 0
br label %logic.rend8998
logic.rend8998:
br label %logic.end8997
logic.end8997:
%t42 = phi i1 [ true, %logic.from8995 ], [ %t41, %logic.rend8998 ]
br i1 %t42, label %then8999, label %else9000
then8999:
store { ptr, i64, i64 } { ptr @.str.6223, i64 25, i64 0 }, ptr %a8
br label %endif9001
else9000:
%t43 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t43, ptr %a44
store { ptr, i64, i64 } { ptr @.str.6224, i64 5, i64 0 }, ptr %a45
%t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45)
%t47 = icmp ne i32 %t46, 0
br i1 %t47, label %then9002, label %endif9004
then9002:
%t48 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t48, ptr %a49
store { ptr, i64, i64 } { ptr @.str.6226, i64 7, i64 0 }, ptr %a51
%t52 = call i32 @finch_str_starts(ptr %a49, ptr %a51)
%t53 = icmp ne i32 %t52, 0
br label %logic.from9005
logic.from9005:
br i1 %t53, label %logic.end9007, label %logic.rhs9006
logic.rhs9006:
%t54 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t54, ptr %a55
store { ptr, i64, i64 } { ptr @.str.6228, i64 5, i64 0 }, ptr %a57
%t58 = call i32 @finch_str_starts(ptr %a55, ptr %a57)
%t59 = icmp ne i32 %t58, 0
br label %logic.rend9008
logic.rend9008:
br label %logic.end9007
logic.end9007:
%t60 = phi i1 [ true, %logic.from9005 ], [ %t59, %logic.rend9008 ]
br i1 %t60, label %then9009, label %else9010
then9009:
store { ptr, i64, i64 } { ptr @.str.6229, i64 24, i64 0 }, ptr %a8
br label %endif9011
else9010:
store { ptr, i64, i64 } { ptr @.str.6230, i64 25, i64 0 }, ptr %a8
br label %endif9011
endif9011:
br label %endif9004
endif9004:
br label %endif9001
endif9001:
br label %endif8990
endif8990:
br label %endif8987
endif8987:
br label %endif8984
endif8984:
%t61 = load { ptr, i64, i64 }, ptr %a8
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.platform.Target zeroinitializer, { ptr, i64, i64 } %t64, 0
store %S.platform.Target %t65, ptr %a66
%t67 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t67, ptr %a68
store { ptr, i64, i64 } { ptr @.str.6232, i64 7, i64 0 }, ptr %a70
%t71 = call i64 @finch_str_find(ptr %a68, ptr %a70)
%t72 = icmp sge i64 %t71, 0
br label %logic.from9012
logic.from9012:
br i1 %t72, label %logic.end9014, label %logic.rhs9013
logic.rhs9013:
%t73 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t73, ptr %a74
store { ptr, i64, i64 } { ptr @.str.6234, i64 5, i64 0 }, ptr %a76
%t77 = call i64 @finch_str_find(ptr %a74, ptr %a76)
%t78 = icmp sge i64 %t77, 0
br label %logic.rend9015
logic.rend9015:
br label %logic.end9014
logic.end9014:
%t79 = phi i1 [ true, %logic.from9012 ], [ %t78, %logic.rend9015 ]
br label %logic.from9016
logic.from9016:
br i1 %t79, label %logic.end9018, label %logic.rhs9017
logic.rhs9017:
%t80 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t80, ptr %a81
store { ptr, i64, i64 } { ptr @.str.6236, i64 4, i64 0 }, ptr %a83
%t84 = call i64 @finch_str_find(ptr %a81, ptr %a83)
%t85 = icmp sge i64 %t84, 0
br label %logic.rend9019
logic.rend9019:
br label %logic.end9018
logic.end9018:
%t86 = phi i1 [ true, %logic.from9016 ], [ %t85, %logic.rend9019 ]
br label %logic.from9020
logic.from9020:
br i1 %t86, label %logic.end9022, label %logic.rhs9021
logic.rhs9021:
%t87 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t87, ptr %a88
store { ptr, i64, i64 } { ptr @.str.6238, i64 5, i64 0 }, ptr %a90
%t91 = call i64 @finch_str_find(ptr %a88, ptr %a90)
%t92 = icmp sge i64 %t91, 0
br label %logic.rend9023
logic.rend9023:
br label %logic.end9022
logic.end9022:
%t93 = phi i1 [ true, %logic.from9020 ], [ %t92, %logic.rend9023 ]
%t94 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 1
store i1 %t93, ptr %t94
%t95 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t95, ptr %a96
store { ptr, i64, i64 } { ptr @.str.6240, i64 4, i64 0 }, ptr %a98
%t99 = call i64 @finch_str_find(ptr %a96, ptr %a98)
%t100 = icmp sge i64 %t99, 0
%t101 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 2
store i1 %t100, ptr %t101
%t102 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t102, ptr %a103
store { ptr, i64, i64 } { ptr @.str.6242, i64 5, i64 0 }, ptr %a105
%t106 = call i64 @finch_str_find(ptr %a103, ptr %a105)
%t107 = icmp sge i64 %t106, 0
br label %logic.from9024
logic.from9024:
br i1 %t107, label %logic.end9026, label %logic.rhs9025
logic.rhs9025:
%t108 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t108, ptr %a109
store { ptr, i64, i64 } { ptr @.str.6244, i64 6, i64 0 }, ptr %a111
%t112 = call i64 @finch_str_find(ptr %a109, ptr %a111)
%t113 = icmp sge i64 %t112, 0
br label %logic.rend9027
logic.rend9027:
br label %logic.end9026
logic.end9026:
%t114 = phi i1 [ true, %logic.from9024 ], [ %t113, %logic.rend9027 ]
br label %logic.from9028
logic.from9028:
br i1 %t114, label %logic.end9030, label %logic.rhs9029
logic.rhs9029:
%t115 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t115, ptr %a116
store { ptr, i64, i64 } { ptr @.str.6246, i64 5, i64 0 }, ptr %a118
%t119 = call i64 @finch_str_find(ptr %a116, ptr %a118)
%t120 = icmp sge i64 %t119, 0
br label %logic.rend9031
logic.rend9031:
br label %logic.end9030
logic.end9030:
%t121 = phi i1 [ true, %logic.from9028 ], [ %t120, %logic.rend9031 ]
%t122 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 3
store i1 %t121, ptr %t122
%t123 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t123, ptr %a124
store { ptr, i64, i64 } { ptr @.str.6248, i64 7, i64 0 }, ptr %a126
%t127 = call i32 @finch_str_starts(ptr %a124, ptr %a126)
%t128 = icmp ne i32 %t127, 0
br label %logic.from9032
logic.from9032:
br i1 %t128, label %logic.end9034, label %logic.rhs9033
logic.rhs9033:
%t129 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t129, ptr %a130
store { ptr, i64, i64 } { ptr @.str.6250, i64 5, i64 0 }, ptr %a132
%t133 = call i32 @finch_str_starts(ptr %a130, ptr %a132)
%t134 = icmp ne i32 %t133, 0
br label %logic.rend9035
logic.rend9035:
br label %logic.end9034
logic.end9034:
%t135 = phi i1 [ true, %logic.from9032 ], [ %t134, %logic.rend9035 ]
%t136 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 4
store i1 %t135, ptr %t136
%t137 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t137, ptr %a138
store { ptr, i64, i64 } { ptr @.str.6252, i64 7, i64 0 }, ptr %a140
%t141 = call i32 @finch_str_starts(ptr %a138, ptr %a140)
%t142 = icmp ne i32 %t141, 0
br label %logic.from9036
logic.from9036:
br i1 %t142, label %logic.end9038, label %logic.rhs9037
logic.rhs9037:
%t143 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t143, ptr %a144
store { ptr, i64, i64 } { ptr @.str.6254, i64 5, i64 0 }, ptr %a146
%t147 = call i32 @finch_str_starts(ptr %a144, ptr %a146)
%t148 = icmp ne i32 %t147, 0
br label %logic.rend9039
logic.rend9039:
br label %logic.end9038
logic.end9038:
%t149 = phi i1 [ true, %logic.from9036 ], [ %t148, %logic.rend9039 ]
store i1 %t149, ptr %a150
%t151 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t151, ptr %a152
store { ptr, i64, i64 } { ptr @.str.6256, i64 5, i64 0 }, ptr %a154
%t155 = call i64 @finch_str_find(ptr %a152, ptr %a154)
%t156 = icmp sge i64 %t155, 0
br label %logic.from9040
logic.from9040:
br i1 %t156, label %logic.end9042, label %logic.rhs9041
logic.rhs9041:
%t157 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t157, ptr %a158
store { ptr, i64, i64 } { ptr @.str.6258, i64 6, i64 0 }, ptr %a160
%t161 = call i64 @finch_str_find(ptr %a158, ptr %a160)
%t162 = icmp sge i64 %t161, 0
br label %logic.rend9043
logic.rend9043:
br label %logic.end9042
logic.end9042:
%t163 = phi i1 [ true, %logic.from9040 ], [ %t162, %logic.rend9043 ]
store i1 %t163, ptr %a164
%t165 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 1
%t166 = load i1, ptr %t165
br label %logic.from9044
logic.from9044:
br i1 %t166, label %logic.end9046, label %logic.rhs9045
logic.rhs9045:
%t167 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 3
%t168 = load i1, ptr %t167
%t169 = load i1, ptr %a164
%t170 = icmp ne i1 %t168, %t169
br label %logic.rend9047
logic.rend9047:
br label %logic.end9046
logic.end9046:
%t171 = phi i1 [ true, %logic.from9044 ], [ %t170, %logic.rend9047 ]
br label %logic.from9048
logic.from9048:
br i1 %t171, label %logic.end9050, label %logic.rhs9049
logic.rhs9049:
%t172 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 4
%t173 = load i1, ptr %t172
%t174 = load i1, ptr %a150
%t175 = icmp ne i1 %t173, %t174
br label %logic.rend9051
logic.rend9051:
br label %logic.end9050
logic.end9050:
%t176 = phi i1 [ true, %logic.from9048 ], [ %t175, %logic.rend9051 ]
%t177 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 5
store i1 %t176, ptr %t177
%t178 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 6
store { ptr, i64, i64 } { ptr @.str.6259, i64 0, i64 0 }, ptr %t178
%t179 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 1
%t180 = load i1, ptr %t179
br i1 %t180, label %then9052, label %endif9054
then9052:
%t181 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 6
store { ptr, i64, i64 } { ptr @.str.6260, i64 4, i64 0 }, ptr %t181
br label %endif9054
endif9054:
%t182 = extractvalue { ptr, i64, i64 } { ptr @.str.6261, i64 8, i64 0 }, 0
%t183 = icmp eq ptr %t182, null
%t184 = select i1 %t183, ptr @.str.6262, ptr %t182
%t185 = call ptr @getenv(ptr %t184)
store { ptr, i64, i64 } zeroinitializer, ptr %a186
call void @finch_str_from_c(ptr %a186, ptr %t185)
%t187 = load { ptr, i64, i64 }, ptr %a186
store { ptr, i64, i64 } %t187, ptr %a188
call void @finch_str_copy(ptr %a189, ptr %a188)
%t190 = load { ptr, i64, i64 }, ptr %a189
store { ptr, i64, i64 } %t190, ptr %a191
%t192 = getelementptr inbounds { ptr, i64, i64 }, ptr %a191, i32 0, i32 1
%t193 = load i64, ptr %t192
%t194 = icmp sgt i64 %t193, 0
br i1 %t194, label %then9055, label %else9056
then9055:
%t195 = load { ptr, i64, i64 }, ptr %a191
%t196 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 7
store { ptr, i64, i64 } %t195, ptr %a197
call void @finch_str_copy(ptr %a198, ptr %a197)
%t199 = load { ptr, i64, i64 }, ptr %a198
store { ptr, i64, i64 } %t199, ptr %t196
br label %endif9057
else9056:
%t200 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 5
%t201 = load i1, ptr %t200
br label %logic.from9058
logic.from9058:
br i1 %t201, label %logic.rhs9059, label %logic.end9060
logic.rhs9059:
%t202 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 1
%t203 = load i1, ptr %t202
br label %logic.rend9061
logic.rend9061:
br label %logic.end9060
logic.end9060:
%t204 = phi i1 [ false, %logic.from9058 ], [ %t203, %logic.rend9061 ]
br i1 %t204, label %then9062, label %else9063
then9062:
%t205 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 7
store { ptr, i64, i64 } { ptr @.str.6263, i64 22, i64 0 }, ptr %t205
br label %endif9064
else9063:
%t206 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 5
%t207 = load i1, ptr %t206
br label %logic.from9065
logic.from9065:
br i1 %t207, label %logic.rhs9066, label %logic.end9067
logic.rhs9066:
%t208 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 4
%t209 = load i1, ptr %t208
br label %logic.rend9068
logic.rend9068:
br label %logic.end9067
logic.end9067:
%t210 = phi i1 [ false, %logic.from9065 ], [ %t209, %logic.rend9068 ]
br label %logic.from9069
logic.from9069:
br i1 %t210, label %logic.rhs9070, label %logic.end9071
logic.rhs9070:
%t211 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 3
%t212 = load i1, ptr %t211
%t213 = xor i1 %t212, true
br label %logic.rend9072
logic.rend9072:
br label %logic.end9071
logic.end9071:
%t214 = phi i1 [ false, %logic.from9069 ], [ %t213, %logic.rend9072 ]
br i1 %t214, label %then9073, label %else9074
then9073:
%t215 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 7
store { ptr, i64, i64 } { ptr @.str.6264, i64 21, i64 0 }, ptr %t215
br label %endif9075
else9074:
%t216 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 5
%t217 = load i1, ptr %t216
br i1 %t217, label %then9076, label %else9077
then9076:
%t218 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } { ptr @.str.6265, i64 15, 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
%t223 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 7
store { ptr, i64, i64 } %t222, ptr %t223
br label %endif9078
else9077:
%t224 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 7
store { ptr, i64, i64 } { ptr @.str.6266, i64 2, i64 0 }, ptr %t224
br label %endif9078
endif9078:
br label %endif9075
endif9075:
br label %endif9064
endif9064:
br label %endif9057
endif9057:
%t225 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 5
%t226 = load i1, ptr %t225
br label %logic.from9079
logic.from9079:
br i1 %t226, label %logic.rhs9080, label %logic.end9081
logic.rhs9080:
%t227 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 1
%t228 = load i1, ptr %t227
br label %logic.rend9082
logic.rend9082:
br label %logic.end9081
logic.end9081:
%t229 = phi i1 [ false, %logic.from9079 ], [ %t228, %logic.rend9082 ]
br i1 %t229, label %then9083, label %else9084
then9083:
%t230 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 8
store { ptr, i64, i64 } { ptr @.str.6267, i64 5, i64 0 }, ptr %t230
br label %endif9085
else9084:
%t231 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 5
%t232 = load i1, ptr %t231
br label %logic.from9086
logic.from9086:
br i1 %t232, label %logic.rhs9087, label %logic.end9088
logic.rhs9087:
%t233 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 4
%t234 = load i1, ptr %t233
br label %logic.rend9089
logic.rend9089:
br label %logic.end9088
logic.end9088:
%t235 = phi i1 [ false, %logic.from9086 ], [ %t234, %logic.rend9089 ]
br label %logic.from9090
logic.from9090:
br i1 %t235, label %logic.rhs9091, label %logic.end9092
logic.rhs9091:
%t236 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 3
%t237 = load i1, ptr %t236
%t238 = xor i1 %t237, true
br label %logic.rend9093
logic.rend9093:
br label %logic.end9092
logic.end9092:
%t239 = phi i1 [ false, %logic.from9090 ], [ %t238, %logic.rend9093 ]
br i1 %t239, label %then9094, label %endif9096
then9094:
%t240 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 8
store { ptr, i64, i64 } { ptr @.str.6268, i64 13, i64 0 }, ptr %t240
br label %endif9096
endif9096:
br label %endif9085
endif9085:
%t241 = load %S.platform.Target, ptr %a66
store %S.platform.Target %t241, ptr %a242
call void @finch.copy.S_platform_Target(ptr %a243, ptr %a242)
%t244 = load %S.platform.Target, ptr %a243
ret %S.platform.Target %t244
}
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.from9097
logic.from9097:
br i1 %t4, label %logic.end9099, label %logic.rhs9098
logic.rhs9098:
%t5 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 3
%t6 = load i1, ptr %t5
br label %logic.rend9100
logic.rend9100:
br label %logic.end9099
logic.end9099:
%t7 = phi i1 [ true, %logic.from9097 ], [ %t6, %logic.rend9100 ]
br label %logic.from9101
logic.from9101:
br i1 %t7, label %logic.end9103, label %logic.rhs9102
logic.rhs9102:
%t8 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 1
%t9 = load i1, ptr %t8
br label %logic.rend9104
logic.rend9104:
br label %logic.end9103
logic.end9103:
%t10 = phi i1 [ true, %logic.from9101 ], [ %t9, %logic.rend9104 ]
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.cond9105
each.cond9105:
%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.body9106, label %each.end9108
each.body9106:
%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.step9107
each.step9107:
%t17 = load i64, ptr %a3
%t18 = add i64 %t17, 1
store i64 %t18, ptr %a3
br label %each.cond9105
each.end9108:
store { ptr, i64, i64 } { ptr @.str.6269, i64 16, i64 0 }, ptr %a19
store { ptr, i64, i64 } zeroinitializer, ptr %a20
store i64 0, ptr %a21
br label %for.cond9109
for.cond9109:
%t22 = load i64, ptr %a21
%t23 = icmp slt i64 %t22, 8
br i1 %t23, label %for.body9110, label %for.end9112
for.body9110:
%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 %range9113, label %inrange9114
range9113:
call void @finch_panic_index(ptr @.str.6270, i64 17, i64 %t32, i64 %t34)
unreachable
inrange9114:
%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.step9111
for.step9111:
%t45 = load i64, ptr %a21
%t46 = add i64 %t45, 1
store i64 %t46, ptr %a21
br label %for.cond9109
for.end9112:
%t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.6271, i64 0, i64 0 }, ptr %a48
call void @finch_str_join(ptr %a49, ptr %a20, ptr %a48)
%t50 = load { ptr, i64, i64 }, ptr %a49
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
%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
%a12 = alloca { ptr, i64, i64 }, align 16
%a13 = alloca { ptr, i64, i64 }, align 16
%a14 = 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.6274, i64 1, i64 0 }, ptr %a5
store { ptr, i64, i64 } { ptr @.str.6275, 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.6272, i64 1, 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.6276, i64 1, i64 0 }, ptr %a14
call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14)
%t15 = load { ptr, i64, i64 }, ptr %a12
ret { ptr, i64, i64 } %t15
}
define internal { ptr, i64, i64 } @finch.linker.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
%t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6277, i64 14, i64 0 }, 0
%t2 = icmp eq ptr %t1, null
%t3 = select i1 %t2, ptr @.str.6278, 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 %then9115, label %endif9117
then9115:
%t14 = load { ptr, i64, i64 }, ptr %a10
store { ptr, i64, i64 } %t14, ptr %a16
store { ptr, i64, i64 } { ptr @.str.6279, i64 6, i64 0 }, ptr %a17
call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17)
%t18 = load { ptr, i64, i64 }, ptr %a15
ret { ptr, i64, i64 } %t18
endif9117:
%t19 = extractvalue { ptr, i64, i64 } { ptr @.str.6280, i64 4, i64 0 }, 0
%t20 = icmp eq ptr %t19, null
%t21 = select i1 %t20, ptr @.str.6281, 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 %then9118, label %endif9120
then9118:
%t32 = load { ptr, i64, i64 }, ptr %a28
store { ptr, i64, i64 } %t32, ptr %a34
store { ptr, i64, i64 } { ptr @.str.6282, i64 13, i64 0 }, ptr %a35
call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35)
%t36 = load { ptr, i64, i64 }, ptr %a33
ret { ptr, i64, i64 } %t36
endif9120:
ret { ptr, i64, i64 } { ptr @.str.6283, i64 16, i64 0 }
}
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
%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
%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
%a44 = alloca { ptr, i64, i64 }, align 16
%a45 = alloca { ptr, i64, i64 }, align 16
%a47 = alloca 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
%a63 = 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
%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
%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
%a88 = 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.6285, 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 %then9121, label %endif9123
then9121:
%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.6287, i64 42)
%t15 = load { ptr, i64, i64 }, ptr %a11
%t16 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t15)
store { ptr, i64, i64 } { ptr @.str.6286, i64 11, 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
ret { ptr, i64, i64 } %t20
endif9123:
%t21 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5
%t22 = load i1, ptr %t21
%t23 = xor i1 %t22, true
br i1 %t23, label %then9124, label %endif9126
then9124:
store { ptr, i64, i64 } { ptr @.str.6288, i64 24, i64 0 }, ptr %a24
%t25 = load { ptr, i64, i64 }, ptr %a1
%t26 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t25)
store { ptr, i64, i64 } { ptr @.str.6289, i64 18, 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.6290, i64 4, i64 0 }, ptr %a33
call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33)
%t34 = load { ptr, i64, i64 }, ptr %a31
%t35 = load { ptr, i64, i64 }, ptr %a24
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)
%t39 = load { ptr, i64, i64 }, ptr %a36
store { ptr, i64, i64 } %t39, ptr %a41
store { ptr, i64, i64 } { ptr @.str.6291, i64 14, i64 0 }, ptr %a42
call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42)
%t43 = load { ptr, i64, i64 }, ptr %a40
store { ptr, i64, i64 } %t43, ptr %a45
call void @finch_str_copy(ptr %a44, ptr %a45)
%t46 = call i64 @finch_shell(ptr %a44)
store i64 %t46, ptr %a47
%t48 = load i64, ptr %a47
%t49 = icmp eq i64 %t48, 0
br label %logic.from9127
logic.from9127:
br i1 %t49, label %logic.rhs9128, label %logic.end9129
logic.rhs9128:
%t50 = load { ptr, i64, i64 }, ptr %a24
store { ptr, i64, i64 } %t50, ptr %a51
%t52 = call i32 @finch_file_exists(ptr %a51)
%t53 = icmp ne i32 %t52, 0
br label %logic.rend9130
logic.rend9130:
br label %logic.end9129
logic.end9129:
%t54 = phi i1 [ false, %logic.from9127 ], [ %t53, %logic.rend9130 ]
br i1 %t54, label %then9131, label %endif9133
then9131:
%t55 = load { ptr, i64, i64 }, ptr %a24
store { ptr, i64, i64 } %t55, ptr %a56
store { ptr, i64, i64 } zeroinitializer, ptr %a57
store { ptr, i64, i64 } zeroinitializer, ptr %a58
%t59 = call i32 @finch_try_read_file(ptr %a57, ptr %a56, ptr %a58)
%t60 = icmp eq i32 %t59, 0
%t61 = load { ptr, i64, i64 }, ptr %a58
%t62 = load { ptr, i64, i64 }, ptr %a57
br i1 %t60, label %or.failed9134, label %or.ok9135
or.failed9134:
store { ptr, i64, i64 } %t61, ptr %a63
br label %or.bend9136
or.bend9136:
br label %or.end9137
or.ok9135:
br label %or.end9137
or.end9137:
%t64 = phi { ptr, i64, i64 } [ { ptr @.str.6292, i64 0, i64 0 }, %or.bend9136 ], [ %t62, %or.ok9135 ]
store { ptr, i64, i64 } %t64, ptr %a65
call void @finch_str_trim(ptr %a66, ptr %a65)
%t67 = load { ptr, i64, i64 }, ptr %a66
store { ptr, i64, i64 } %t67, ptr %a68
%t69 = load { ptr, i64, i64 }, ptr %a24
store { ptr, i64, i64 } { ptr @.str.6294, i64 7, 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
store { ptr, i64, i64 } %t73, ptr %a75
store { ptr, i64, i64 } { ptr @.str.6295, i64 1, i64 0 }, ptr %a76
call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76)
%t77 = load { ptr, i64, i64 }, ptr %a74
store { ptr, i64, i64 } %t77, ptr %a79
call void @finch_str_copy(ptr %a78, ptr %a79)
%t80 = call i64 @finch_shell(ptr %a78)
%t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %a68, i32 0, i32 1
%t82 = load i64, ptr %t81
%t83 = icmp sgt i64 %t82, 0
br i1 %t83, label %then9138, label %endif9140
then9138:
%t84 = load { ptr, i64, i64 }, ptr %a68
ret { ptr, i64, i64 } %t84
endif9140:
br label %endif9133
endif9133:
br label %endif9126
endif9126:
%t85 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } { ptr @.str.6296, i64 2, 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
%t90 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t89)
ret { ptr, i64, i64 } %t90
}
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
%a25 = alloca { ptr, i64, i64 }, align 16
%a26 = alloca { ptr, i64, i64 }, align 16
%a30 = alloca i64, align 16
%a33 = alloca i64, align 16
%a48 = alloca { ptr, i64, i64 }, align 16
%a49 = 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
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.6298, i64 1, i64 0 }, ptr %a10
%t11 = call i64 @finch_str_find(ptr %a8, ptr %a10)
store i64 %t11, ptr %a12
br label %while.cond9141
while.cond9141:
%t13 = load i64, ptr %a12
%t14 = icmp sge i64 %t13, 0
br i1 %t14, label %while.body9142, label %while.end9143
while.body9142:
%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.6299, i64 63)
%t22 = load { ptr, i64, i64 }, ptr %a17
store { ptr, i64, i64 } %t22, ptr %a6
%t23 = load { ptr, i64, i64 }, ptr %a6
store { ptr, i64, i64 } %t23, ptr %a24
store { ptr, i64, i64 } { ptr @.str.6301, i64 1, i64 0 }, ptr %a26
%t27 = call i64 @finch_str_find(ptr %a24, ptr %a26)
store i64 %t27, ptr %a12
br label %while.cond9141
while.end9143:
%t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1
%t29 = load i64, ptr %t28
store i64 %t29, ptr %a30
%t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1
%t32 = load i64, ptr %t31
store i64 0, ptr %a33
br label %for.cond9144
for.cond9144:
%t34 = load i64, ptr %a33
%t35 = icmp slt i64 %t34, %t32
br i1 %t35, label %for.body9145, label %for.end9147
for.body9145:
%t36 = load i64, ptr %a33
%t37 = load { ptr, i64, i64 }, ptr %a6
%t38 = extractvalue { ptr, i64, i64 } %t37, 1
%t39 = icmp uge i64 %t36, %t38
br i1 %t39, label %range9148, label %inrange9149
range9148:
call void @finch_panic_index(ptr @.str.6302, i64 68, i64 %t36, i64 %t38)
unreachable
inrange9149:
%t40 = extractvalue { ptr, i64, i64 } %t37, 0
%t41 = getelementptr inbounds i8, ptr %t40, i64 %t36
%t42 = load i8, ptr %t41
%t43 = icmp eq i8 %t42, 46
br i1 %t43, label %then9150, label %endif9152
then9150:
%t44 = load i64, ptr %a33
store i64 %t44, ptr %a30
br label %endif9152
endif9152:
br label %for.step9146
for.step9146:
%t45 = load i64, ptr %a33
%t46 = add i64 %t45, 1
store i64 %t46, ptr %a33
br label %for.cond9144
for.end9147:
%t47 = load { ptr, i64, i64 }, ptr %a6
store { ptr, i64, i64 } %t47, ptr %a48
%t50 = load i64, ptr %a30
call void @finch_str_sub(ptr %a49, ptr %a48, i64 0, i64 %t50, ptr @.str.6303, i64 72)
%t51 = load { ptr, i64, i64 }, ptr %a49
store { ptr, i64, i64 } %t51, ptr %a6
br label %while.cond9153
while.cond9153:
%t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1
%t53 = load i64, ptr %t52
%t54 = icmp sgt i64 %t53, 0
br label %logic.from9156
logic.from9156:
br i1 %t54, label %logic.rhs9157, label %logic.end9158
logic.rhs9157:
%t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1
%t56 = load i64, ptr %t55
%t57 = sub i64 %t56, 1
%t58 = load { ptr, i64, i64 }, ptr %a6
%t59 = extractvalue { ptr, i64, i64 } %t58, 1
%t60 = icmp uge i64 %t57, %t59
br i1 %t60, label %range9159, label %inrange9160
range9159:
call void @finch_panic_index(ptr @.str.6304, i64 73, i64 %t57, i64 %t59)
unreachable
inrange9160:
%t61 = extractvalue { ptr, i64, i64 } %t58, 0
%t62 = getelementptr inbounds i8, ptr %t61, i64 %t57
%t63 = load i8, ptr %t62
%t64 = icmp uge i8 %t63, 48
br label %logic.rend9161
logic.rend9161:
br label %logic.end9158
logic.end9158:
%t65 = phi i1 [ false, %logic.from9156 ], [ %t64, %logic.rend9161 ]
br label %logic.from9162
logic.from9162:
br i1 %t65, label %logic.rhs9163, label %logic.end9164
logic.rhs9163:
%t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1
%t67 = load i64, ptr %t66
%t68 = sub i64 %t67, 1
%t69 = load { ptr, i64, i64 }, ptr %a6
%t70 = extractvalue { ptr, i64, i64 } %t69, 1
%t71 = icmp uge i64 %t68, %t70
br i1 %t71, label %range9165, label %inrange9166
range9165:
call void @finch_panic_index(ptr @.str.6305, i64 73, i64 %t68, i64 %t70)
unreachable
inrange9166:
%t72 = extractvalue { ptr, i64, i64 } %t69, 0
%t73 = getelementptr inbounds i8, ptr %t72, i64 %t68
%t74 = load i8, ptr %t73
%t75 = icmp ule i8 %t74, 57
br label %logic.rend9167
logic.rend9167:
br label %logic.end9164
logic.end9164:
%t76 = phi i1 [ false, %logic.from9162 ], [ %t75, %logic.rend9167 ]
br i1 %t76, label %while.body9154, label %while.end9155
while.body9154:
%t77 = load { ptr, i64, i64 }, ptr %a6
store { ptr, i64, i64 } %t77, ptr %a78
%t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1
%t81 = load i64, ptr %t80
%t82 = sub i64 %t81, 1
call void @finch_str_sub(ptr %a79, ptr %a78, i64 0, i64 %t82, ptr @.str.6306, i64 74)
%t83 = load { ptr, i64, i64 }, ptr %a79
store { ptr, i64, i64 } %t83, ptr %a6
br label %while.cond9153
while.end9155:
%t84 = load { ptr, i64, i64 }, ptr %a6
store { ptr, i64, i64 } %t84, ptr %a85
call void @finch_str_lower(ptr %a86, ptr %a85)
%t87 = load { ptr, i64, i64 }, ptr %a86
ret { ptr, i64, i64 } %t87
}
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.from9168
logic.from9168:
br i1 %t4, label %logic.rhs9169, label %logic.end9170
logic.rhs9169:
%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.cond9171
find.cond9171:
%t12 = load i64, ptr %a11
%t13 = icmp slt i64 %t12, %t9
br i1 %t13, label %find.body9172, label %find.end9175
find.body9172:
%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.hit9173, label %find.next9174
find.hit9173:
store i64 %t12, ptr %a8
br label %find.end9175
find.next9174:
%t20 = add i64 %t12, 1
store i64 %t20, ptr %a11
br label %find.cond9171
find.end9175:
%t21 = load i64, ptr %a8
%t22 = icmp sge i64 %t21, 0
%t23 = xor i1 %t22, true
br label %logic.rend9176
logic.rend9176:
br label %logic.end9170
logic.end9170:
%t24 = phi i1 [ false, %logic.from9168 ], [ %t23, %logic.rend9176 ]
br i1 %t24, label %then9177, label %endif9179
then9177:
%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 %endif9179
endif9179:
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
%a49 = alloca { ptr, i64, i64 }, align 16
%a50 = 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 %then9180, label %endif9182
then9180:
ret { ptr, i64, i64 } { ptr @.str.6309, i64 0, i64 0 }
endif9182:
%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.6310, i64 95)
%t22 = load { ptr, i64, i64 }, ptr %a15
store { ptr, i64, i64 } %t22, ptr %a23
store i64 0, ptr %a24
br label %while.cond9183
while.cond9183:
%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.from9186
logic.from9186:
br i1 %t28, label %logic.rhs9187, label %logic.end9188
logic.rhs9187:
%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 %range9189, label %inrange9190
range9189:
call void @finch_panic_index(ptr @.str.6312, i64 97, i64 %t32, i64 %t34)
unreachable
inrange9190:
%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
%t44 = xor i1 %t43, true
br label %logic.rend9191
logic.rend9191:
br label %logic.end9188
logic.end9188:
%t45 = phi i1 [ false, %logic.from9186 ], [ %t44, %logic.rend9191 ]
br i1 %t45, label %while.body9184, label %while.end9185
while.body9184:
%t46 = load i64, ptr %a24
%t47 = add i64 %t46, 1
store i64 %t47, ptr %a24
br label %while.cond9183
while.end9185:
%t48 = load { ptr, i64, i64 }, ptr %a23
store { ptr, i64, i64 } %t48, ptr %a49
%t51 = load i64, ptr %a24
call void @finch_str_sub(ptr %a50, ptr %a49, i64 0, i64 %t51, ptr @.str.6313, i64 100)
%t52 = load { ptr, i64, i64 }, ptr %a50
ret { ptr, i64, i64 } %t52
}
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
%a36 = alloca { ptr, i64, i64 }, align 16
%a37 = 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
%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
%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
%a76 = 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
%a84 = 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
%a101 = alloca { ptr, i64, i64 }, align 16
%a102 = alloca { ptr, i64, i64 }, align 16
%a103 = 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
%a116 = 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
%a127 = alloca { ptr, i64, i64 }, align 16
%a128 = 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
%a157 = alloca 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
%a171 = alloca { ptr, i64, i64 }, align 16
%a172 = alloca { ptr, i64, i64 }, align 16
%a173 = 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
%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
%a207 = alloca { ptr, i64, i64 }, align 16
%a208 = alloca { ptr, i64, i64 }, align 16
%a215 = alloca { ptr, i64, i64 }, align 16
%a216 = alloca { ptr, i64, i64 }, align 16
%a220 = alloca i64, align 16
%a223 = alloca i64, align 16
%a228 = alloca { ptr, i64, i64 }, align 16
%a229 = alloca { ptr, i64, i64 }, align 16
%a234 = alloca i64, align 16
%a239 = alloca { ptr, i64, i64 }, align 16
%a240 = alloca { ptr, i64, i64 }, align 16
%a265 = alloca 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
%a283 = alloca i64, align 16
%a296 = alloca { ptr, i64, i64 }, align 16
%a297 = alloca { ptr, i64, i64 }, align 16
%a306 = alloca { ptr, i64, i64 }, align 16
%a307 = alloca { ptr, i64, i64 }, align 16
%a309 = 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
%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
%a327 = alloca { ptr, i64, i64 }, align 16
%a328 = alloca { ptr, i64, i64 }, align 16
%a329 = 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
%a352 = 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
%a361 = alloca { ptr, i64, i64 }, align 16
%a362 = alloca { ptr, i64, i64 }, align 16
%a363 = 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
%a381 = alloca { ptr, i64, i64 }, align 16
%a382 = alloca { ptr, i64, i64 }, align 16
%a383 = 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
%a425 = alloca { ptr, i64, i64 }, align 16
%a426 = alloca { ptr, i64, i64 }, align 16
%a427 = 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
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.6315, 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.cond9192
each.cond9192:
%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.body9193, label %each.end9195
each.body9193:
%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.6318, 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 %then9196, label %else9197
then9196:
%t33 = load { ptr, i64, i64 }, ptr %a26
%t34 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t33, { ptr, i64, i64 } { ptr @.str.6319, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6320, i64 1, i64 0 })
call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t34)
br label %endif9198
else9197:
%t35 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t35, ptr %a36
store { ptr, i64, i64 } { ptr @.str.6322, i64 18, i64 0 }, ptr %a38
%t39 = call i64 @finch_str_find(ptr %a36, ptr %a38)
%t40 = icmp sge i64 %t39, 0
br i1 %t40, label %then9199, label %else9200
then9199:
%t41 = load { ptr, i64, i64 }, ptr %a26
%t42 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t41, { ptr, i64, i64 } { ptr @.str.6323, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6324, i64 2, i64 0 })
call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t42)
br label %endif9201
else9200:
%t43 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t43, ptr %a44
store { ptr, i64, i64 } { ptr @.str.6326, i64 27, i64 0 }, ptr %a46
%t47 = call i64 @finch_str_find(ptr %a44, ptr %a46)
%t48 = icmp sge i64 %t47, 0
br i1 %t48, label %then9202, label %else9203
then9202:
%t49 = load { ptr, i64, i64 }, ptr %a26
%t50 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t49, { ptr, i64, i64 } { ptr @.str.6327, i64 27, i64 0 }, { ptr, i64, i64 } { ptr @.str.6328, i64 3, i64 0 })
call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t50)
br label %endif9204
else9203:
%t51 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t51, ptr %a52
store { ptr, i64, i64 } { ptr @.str.6330, i64 14, i64 0 }, ptr %a54
%t55 = call i64 @finch_str_find(ptr %a52, ptr %a54)
%t56 = icmp sge i64 %t55, 0
br i1 %t56, label %then9205, label %else9206
then9205:
%t57 = load { ptr, i64, i64 }, ptr %a26
%t58 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t57, { ptr, i64, i64 } { ptr @.str.6331, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6332, i64 4, i64 0 })
call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t58)
br label %endif9207
else9206:
%t59 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t59, ptr %a60
store { ptr, i64, i64 } { ptr @.str.6334, i64 24, i64 0 }, ptr %a62
%t63 = call i64 @finch_str_find(ptr %a60, ptr %a62)
%t64 = icmp sge i64 %t63, 0
br i1 %t64, label %then9208, label %else9209
then9208:
%t65 = load { ptr, i64, i64 }, ptr %a26
%t66 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t65, { ptr, i64, i64 } { ptr @.str.6335, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6336, i64 4, i64 0 })
call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t66)
br label %endif9210
else9209:
%t67 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t67, ptr %a68
store { ptr, i64, i64 } { ptr @.str.6338, i64 13, i64 0 }, ptr %a70
%t71 = call i64 @finch_str_find(ptr %a68, ptr %a70)
%t72 = icmp sge i64 %t71, 0
br i1 %t72, label %then9211, label %else9212
then9211:
%t73 = load { ptr, i64, i64 }, ptr %a26
%t74 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t73, { ptr, i64, i64 } { ptr @.str.6339, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6340, i64 1, i64 0 })
call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t74)
br label %endif9213
else9212:
%t75 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t75, ptr %a76
store { ptr, i64, i64 } { ptr @.str.6342, i64 11, i64 0 }, ptr %a78
%t79 = call i64 @finch_str_find(ptr %a76, ptr %a78)
%t80 = icmp sge i64 %t79, 0
br label %logic.from9214
logic.from9214:
br i1 %t80, label %logic.rhs9215, label %logic.end9216
logic.rhs9215:
%t81 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t81, ptr %a82
store { ptr, i64, i64 } { ptr @.str.6344, i64 9, i64 0 }, ptr %a84
%t85 = call i64 @finch_str_find(ptr %a82, ptr %a84)
%t86 = icmp sge i64 %t85, 0
br label %logic.rend9217
logic.rend9217:
br label %logic.end9216
logic.end9216:
%t87 = phi i1 [ false, %logic.from9214 ], [ %t86, %logic.rend9217 ]
br i1 %t87, label %then9218, label %else9219
then9218:
%t88 = load { ptr, i64, i64 }, ptr %a26
%t89 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t88, { ptr, i64, i64 } { ptr @.str.6345, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6346, i64 1, i64 0 })
store { ptr, i64, i64 } %t89, ptr %a91
store { ptr, i64, i64 } { ptr @.str.6347, i64 10, i64 0 }, ptr %a92
call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92)
%t93 = load { ptr, i64, i64 }, ptr %a90
call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t93)
br label %endif9220
else9219:
%t94 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t94, ptr %a95
store { ptr, i64, i64 } { ptr @.str.6349, i64 1, i64 0 }, ptr %a97
%t98 = call i32 @finch_str_starts(ptr %a95, ptr %a97)
%t99 = icmp ne i32 %t98, 0
br label %logic.from9221
logic.from9221:
br i1 %t99, label %logic.rhs9222, label %logic.end9223
logic.rhs9222:
%t100 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t100, ptr %a101
store { ptr, i64, i64 } { ptr @.str.6351, i64 19, i64 0 }, ptr %a103
%t104 = call i64 @finch_str_find(ptr %a101, ptr %a103)
%t105 = icmp sge i64 %t104, 0
br label %logic.rend9224
logic.rend9224:
br label %logic.end9223
logic.end9223:
%t106 = phi i1 [ false, %logic.from9221 ], [ %t105, %logic.rend9224 ]
br i1 %t106, label %then9225, label %endif9227
then9225:
%t107 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t107, ptr %a108
%t110 = load { ptr, i64, i64 }, ptr %a26
store { ptr, i64, i64 } %t110, ptr %a111
store { ptr, i64, i64 } { ptr @.str.6354, i64 19, i64 0 }, ptr %a113
%t114 = call i64 @finch_str_find(ptr %a111, ptr %a113)
call void @finch_str_sub(ptr %a109, ptr %a108, i64 1, i64 %t114, ptr @.str.6352, i64 125)
%t115 = load { ptr, i64, i64 }, ptr %a109
store { ptr, i64, i64 } %t115, ptr %a116
%t117 = getelementptr inbounds %S.platform.Target, ptr %a3, i32 0, i32 3
%t118 = load i1, ptr %t117
br label %logic.from9228
logic.from9228:
br i1 %t118, label %logic.rhs9229, label %logic.end9230
logic.rhs9229:
%t119 = load { ptr, i64, i64 }, ptr %a116
store { ptr, i64, i64 } %t119, ptr %a120
store { ptr, i64, i64 } { ptr @.str.6356, i64 1, i64 0 }, ptr %a122
%t123 = call i32 @finch_str_starts(ptr %a120, ptr %a122)
%t124 = icmp ne i32 %t123, 0
br label %logic.rend9231
logic.rend9231:
br label %logic.end9230
logic.end9230:
%t125 = phi i1 [ false, %logic.from9228 ], [ %t124, %logic.rend9231 ]
br i1 %t125, label %then9232, label %endif9234
then9232:
%t126 = load { ptr, i64, i64 }, ptr %a116
store { ptr, i64, i64 } %t126, ptr %a127
%t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %a116, i32 0, i32 1
%t130 = load i64, ptr %t129
call void @finch_str_sub(ptr %a128, ptr %a127, i64 1, i64 %t130, ptr @.str.6357, i64 127)
%t131 = load { ptr, i64, i64 }, ptr %a128
store { ptr, i64, i64 } %t131, ptr %a116
br label %endif9234
endif9234:
%t132 = load { ptr, i64, i64 }, ptr %a116
call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t132)
br label %endif9227
endif9227:
br label %endif9220
endif9220:
br label %endif9213
endif9213:
br label %endif9210
endif9210:
br label %endif9207
endif9207:
br label %endif9204
endif9204:
br label %endif9201
endif9201:
br label %endif9198
endif9198:
br label %each.step9194
each.step9194:
%t133 = load i64, ptr %a13
%t134 = add i64 %t133, 1
store i64 %t134, ptr %a13
br label %each.cond9192
each.end9195:
%t135 = getelementptr inbounds %S.linker.Names, ptr %a4, i32 0, i32 0
%t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i32 0, i32 1
%t137 = load i64, ptr %t136
%t138 = icmp eq i64 %t137, 0
br label %logic.from9235
logic.from9235:
br i1 %t138, label %logic.rhs9236, label %logic.end9237
logic.rhs9236:
%t139 = getelementptr inbounds %S.linker.Names, ptr %a5, i32 0, i32 0
%t140 = getelementptr inbounds { ptr, i64, i64 }, ptr %t139, i32 0, i32 1
%t141 = load i64, ptr %t140
%t142 = icmp eq i64 %t141, 0
br label %logic.rend9238
logic.rend9238:
br label %logic.end9237
logic.end9237:
%t143 = phi i1 [ false, %logic.from9235 ], [ %t142, %logic.rend9238 ]
br i1 %t143, label %then9239, label %endif9241
then9239:
%t144 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t144, ptr %a146
store { ptr, i64, i64 } { ptr @.str.6358, i64 21, i64 0 }, ptr %a147
call void @finch_str_concat(ptr %a145, ptr %a146, ptr %a147)
%t148 = load { ptr, i64, i64 }, ptr %a145
%t149 = extractvalue { ptr, i64, i64 } %t148, 1
%t150 = trunc i64 %t149 to i32
%t151 = extractvalue { ptr, i64, i64 } %t148, 0
%t152 = icmp eq ptr %t151, null
%t153 = select i1 %t152, ptr @.str.6359, ptr %t151
%t154 = call i32 (ptr, ...) @printf(ptr @.str.6360, i32 %t150, ptr %t153)
%t155 = call i32 (ptr, ...) @printf(ptr @.str.6361)
ret i64 1
endif9241:
%t156 = getelementptr inbounds %S.linker.Names, ptr %a5, i32 0, i32 0
store i64 0, ptr %a157
br label %each.cond9242
each.cond9242:
%t158 = getelementptr inbounds { ptr, i64, i64 }, ptr %t156, i32 0, i32 1
%t159 = load i64, ptr %t158
%t160 = load i64, ptr %a157
%t161 = icmp slt i64 %t160, %t159
br i1 %t161, label %each.body9243, label %each.end9245
each.body9243:
%t162 = load ptr, ptr %t156
%t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i64 %t160
%t164 = load { ptr, i64, i64 }, ptr %t163
store { ptr, i64, i64 } %t164, ptr %a165
%t166 = load { ptr, i64, i64 }, ptr %a165
store { ptr, i64, i64 } { ptr @.str.6362, i64 20, i64 0 }, ptr %a168
store { ptr, i64, i64 } %t166, ptr %a169
call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169)
%t170 = load { ptr, i64, i64 }, ptr %a167
store { ptr, i64, i64 } %t170, ptr %a172
store { ptr, i64, i64 } { ptr @.str.6363, i64 62, i64 0 }, ptr %a173
call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173)
%t174 = load { ptr, i64, i64 }, ptr %a171
%t175 = extractvalue { ptr, i64, i64 } %t174, 1
%t176 = trunc i64 %t175 to i32
%t177 = extractvalue { ptr, i64, i64 } %t174, 0
%t178 = icmp eq ptr %t177, null
%t179 = select i1 %t178, ptr @.str.6364, ptr %t177
%t180 = call i32 (ptr, ...) @printf(ptr @.str.6365, i32 %t176, ptr %t179)
%t181 = call i32 (ptr, ...) @printf(ptr @.str.6366)
br label %each.step9244
each.step9244:
%t182 = load i64, ptr %a157
%t183 = add i64 %t182, 1
store i64 %t183, ptr %a157
br label %each.cond9242
each.end9245:
store { ptr, i64, i64 } zeroinitializer, ptr %a184
store { ptr, i64, i64 } zeroinitializer, ptr %a185
%t186 = getelementptr inbounds %S.linker.Names, ptr %a4, i32 0, i32 0
store i64 0, ptr %a187
br label %each.cond9246
each.cond9246:
%t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t186, i32 0, i32 1
%t189 = load i64, ptr %t188
%t190 = load i64, ptr %a187
%t191 = icmp slt i64 %t190, %t189
br i1 %t191, label %each.body9247, label %each.end9249
each.body9247:
%t192 = load ptr, ptr %t186
%t193 = getelementptr inbounds { ptr, i64, i64 }, ptr %t192, i64 %t190
%t194 = load { ptr, i64, i64 }, ptr %t193
store { ptr, i64, i64 } %t194, ptr %a195
store { ptr, i64, i64 } { ptr @.str.6367, i64 0, i64 0 }, ptr %a196
%t197 = getelementptr inbounds %S.cimport.CImports, ptr %a2, i32 0, i32 0
%t198 = load { ptr, i64, i64 }, ptr %a195
store { ptr, i64, i64 } %t198, ptr %a199
%t200 = call i64 @finch_map_find(ptr %t197, ptr %a199, 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)
%t201 = icmp sge i64 %t200, 0
br i1 %t201, label %then9250, label %endif9252
then9250:
%t202 = getelementptr inbounds %S.cimport.CImports, ptr %a2, i32 0, i32 0
%t203 = load { ptr, i64, i64 }, ptr %a195
store { ptr, i64, i64 } %t203, ptr %a204
%t205 = call i64 @finch_map_find(ptr %t202, ptr %a204, 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)
%t206 = icmp slt i64 %t205, 0
br i1 %t206, label %map.missing9253, label %map.found9254
map.missing9253:
store { ptr, i64, i64 } zeroinitializer, ptr %a207
store { ptr, i64, i64 } %t203, ptr %a208
call void @finch_buf_str(ptr %a207, ptr %a208, i32 1)
call void @finch_map_missing(ptr @.str.6368, i64 145, ptr %a207)
unreachable
map.found9254:
%t209 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t202, i32 0, i32 0
%t210 = load ptr, ptr %t209
%t211 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t210, i64 %t205
%t212 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t211, i32 0, i32 2
%t213 = getelementptr inbounds %S.cimport.CFunc, ptr %t212, i32 0, i32 1
%t214 = load { ptr, i64, i64 }, ptr %t213
store { ptr, i64, i64 } %t214, ptr %a215
call void @finch_str_copy(ptr %a216, ptr %a215)
%t217 = load { ptr, i64, i64 }, ptr %a216
store { ptr, i64, i64 } %t217, ptr %a196
br label %endif9252
endif9252:
%t218 = getelementptr inbounds { ptr, i64, i64 }, ptr %a184, i32 0, i32 1
%t219 = load { ptr, i64, i64 }, ptr %a196
store i64 -1, ptr %a220
%t221 = load i64, ptr %t218
%t222 = load ptr, ptr %a184
store i64 0, ptr %a223
br label %find.cond9255
find.cond9255:
%t224 = load i64, ptr %a223
%t225 = icmp slt i64 %t224, %t221
br i1 %t225, label %find.body9256, label %find.end9259
find.body9256:
%t226 = getelementptr inbounds { ptr, i64, i64 }, ptr %t222, i64 %t224
%t227 = load { ptr, i64, i64 }, ptr %t226
store { ptr, i64, i64 } %t227, ptr %a228
store { ptr, i64, i64 } %t219, ptr %a229
%t230 = call i32 @finch_str_eq(ptr %a228, ptr %a229)
%t231 = icmp ne i32 %t230, 0
br i1 %t231, label %find.hit9257, label %find.next9258
find.hit9257:
store i64 %t224, ptr %a220
br label %find.end9259
find.next9258:
%t232 = add i64 %t224, 1
store i64 %t232, ptr %a223
br label %find.cond9255
find.end9259:
%t233 = load i64, ptr %a220
store i64 %t233, ptr %a234
%t235 = load i64, ptr %a234
%t236 = icmp slt i64 %t235, 0
br i1 %t236, label %then9260, label %endif9262
then9260:
%t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %a184, i32 0, i32 1
%t238 = load { ptr, i64, i64 }, ptr %a196
store { ptr, i64, i64 } %t238, ptr %a239
call void @finch_str_copy(ptr %a240, ptr %a239)
%t241 = load { ptr, i64, i64 }, ptr %a240
%t242 = load i64, ptr %t237
%t243 = add i64 %t242, 1
call void @finch_arr_reserve(ptr %a184, i64 %t243, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t244 = load ptr, ptr %a184
%t245 = getelementptr inbounds { ptr, i64, i64 }, ptr %t244, i64 %t242
store { ptr, i64, i64 } %t241, ptr %t245
store i64 %t243, ptr %t237
%t246 = getelementptr inbounds { ptr, i64, i64 }, ptr %a185, i32 0, i32 1
%t247 = load i64, ptr %t246
%t248 = add i64 %t247, 1
call void @finch_arr_reserve(ptr %a185, i64 %t248, i64 ptrtoint (ptr getelementptr (%S.linker.Names, ptr null, i32 1) to i64))
%t249 = load ptr, ptr %a185
%t250 = getelementptr inbounds %S.linker.Names, ptr %t249, i64 %t247
store %S.linker.Names zeroinitializer, ptr %t250
store i64 %t248, ptr %t246
%t251 = getelementptr inbounds { ptr, i64, i64 }, ptr %a184, i32 0, i32 1
%t252 = load i64, ptr %t251
%t253 = sub i64 %t252, 1
store i64 %t253, ptr %a234
br label %endif9262
endif9262:
%t254 = load i64, ptr %a234
%t255 = load { ptr, i64, i64 }, ptr %a185
%t256 = extractvalue { ptr, i64, i64 } %t255, 1
%t257 = icmp uge i64 %t254, %t256
br i1 %t257, label %range9263, label %inrange9264
range9263:
call void @finch_panic_index(ptr @.str.6369, i64 153, i64 %t254, i64 %t256)
unreachable
inrange9264:
%t258 = extractvalue { ptr, i64, i64 } %t255, 0
%t259 = getelementptr inbounds %S.linker.Names, ptr %t258, i64 %t254
%t260 = load { ptr, i64, i64 }, ptr %a195
call void @finch.linker.Names.add(ptr %t259, { ptr, i64, i64 } %t260)
br label %each.step9248
each.step9248:
%t261 = load i64, ptr %a187
%t262 = add i64 %t261, 1
store i64 %t262, ptr %a187
br label %each.cond9246
each.end9249:
%t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %a184, i32 0, i32 1
%t264 = load i64, ptr %t263
store i64 0, ptr %a265
br label %for.cond9265
for.cond9265:
%t266 = load i64, ptr %a265
%t267 = icmp slt i64 %t266, %t264
br i1 %t267, label %for.body9266, label %for.end9268
for.body9266:
%t268 = load i64, ptr %a265
%t269 = load { ptr, i64, i64 }, ptr %a185
%t270 = extractvalue { ptr, i64, i64 } %t269, 1
%t271 = icmp uge i64 %t268, %t270
br i1 %t271, label %range9269, label %inrange9270
range9269:
call void @finch_panic_index(ptr @.str.6370, i64 156, i64 %t268, i64 %t270)
unreachable
inrange9270:
%t272 = extractvalue { ptr, i64, i64 } %t269, 0
%t273 = getelementptr inbounds %S.linker.Names, ptr %t272, i64 %t268
%t274 = getelementptr inbounds %S.linker.Names, ptr %t273, i32 0, i32 0
%t275 = load { ptr, i64, i64 }, ptr %t274
store { ptr, i64, i64 } %t275, ptr %a276
call void @finch.copy.arr_str(ptr %a277, ptr %a276)
%t278 = load { ptr, i64, i64 }, ptr %a277
store { ptr, i64, i64 } %t278, ptr %a279
store { ptr, i64, i64 } zeroinitializer, ptr %a280
%t281 = getelementptr inbounds { ptr, i64, i64 }, ptr %a279, i32 0, i32 1
%t282 = load i64, ptr %t281
store i64 0, ptr %a283
br label %for.cond9271
for.cond9271:
%t284 = load i64, ptr %a283
%t285 = icmp slt i64 %t284, %t282
br i1 %t285, label %for.body9272, label %for.end9274
for.body9272:
%t286 = load i64, ptr %a283
%t287 = icmp slt i64 %t286, 3
br i1 %t287, label %then9275, label %endif9277
then9275:
%t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %a280, i32 0, i32 1
%t289 = load i64, ptr %a283
%t290 = load { ptr, i64, i64 }, ptr %a279
%t291 = extractvalue { ptr, i64, i64 } %t290, 1
%t292 = icmp uge i64 %t289, %t291
br i1 %t292, label %range9278, label %inrange9279
range9278:
call void @finch_panic_index(ptr @.str.6371, i64 160, i64 %t289, i64 %t291)
unreachable
inrange9279:
%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
call void @finch_str_copy(ptr %a297, ptr %a296)
%t298 = load { ptr, i64, i64 }, ptr %a297
%t299 = load i64, ptr %t288
%t300 = add i64 %t299, 1
call void @finch_arr_reserve(ptr %a280, i64 %t300, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t301 = load ptr, ptr %a280
%t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 %t299
store { ptr, i64, i64 } %t298, ptr %t302
store i64 %t300, ptr %t288
br label %endif9277
endif9277:
br label %for.step9273
for.step9273:
%t303 = load i64, ptr %a283
%t304 = add i64 %t303, 1
store i64 %t304, ptr %a283
br label %for.cond9271
for.end9274:
%t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %a280, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.6372, i64 2, i64 0 }, ptr %a306
call void @finch_str_join(ptr %a307, ptr %a280, ptr %a306)
%t308 = load { ptr, i64, i64 }, ptr %a307
store { ptr, i64, i64 } %t308, ptr %a309
%t310 = getelementptr inbounds { ptr, i64, i64 }, ptr %a279, i32 0, i32 1
%t311 = load i64, ptr %t310
%t312 = icmp sgt i64 %t311, 3
br i1 %t312, label %then9280, label %endif9282
then9280:
%t313 = load { ptr, i64, i64 }, ptr %a309
store { ptr, i64, i64 } %t313, ptr %a315
store { ptr, i64, i64 } { ptr @.str.6373, i64 5, i64 0 }, ptr %a316
call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316)
%t317 = load { ptr, i64, i64 }, ptr %a314
%t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %a279, i32 0, i32 1
%t319 = load i64, ptr %t318
%t320 = sub i64 %t319, 3
call void @finch_str_from_int(ptr %a321, i64 %t320)
%t322 = load { ptr, i64, i64 }, ptr %a321
store { ptr, i64, i64 } %t317, ptr %a324
store { ptr, i64, i64 } %t322, ptr %a325
call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325)
%t326 = load { ptr, i64, i64 }, ptr %a323
store { ptr, i64, i64 } %t326, ptr %a328
store { ptr, i64, i64 } { ptr @.str.6374, i64 5, i64 0 }, 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 %a309
br label %endif9282
endif9282:
%t331 = load i64, ptr %a265
%t332 = load { ptr, i64, i64 }, ptr %a184
%t333 = extractvalue { ptr, i64, i64 } %t332, 1
%t334 = icmp uge i64 %t331, %t333
br i1 %t334, label %range9283, label %inrange9284
range9283:
call void @finch_panic_index(ptr @.str.6375, i64 167, i64 %t331, i64 %t333)
unreachable
inrange9284:
%t335 = extractvalue { ptr, i64, i64 } %t332, 0
%t336 = getelementptr inbounds { ptr, i64, i64 }, ptr %t335, i64 %t331
%t337 = getelementptr inbounds { ptr, i64, i64 }, ptr %t336, i32 0, i32 1
%t338 = load i64, ptr %t337
%t339 = icmp eq i64 %t338, 0
br i1 %t339, label %then9285, label %endif9287
then9285:
%t340 = load { ptr, i64, i64 }, ptr %a309
store { ptr, i64, i64 } { ptr @.str.6376, i64 25, i64 0 }, ptr %a342
store { ptr, i64, i64 } %t340, ptr %a343
call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343)
%t344 = load { ptr, i64, i64 }, ptr %a341
%t345 = extractvalue { ptr, i64, i64 } %t344, 1
%t346 = trunc i64 %t345 to i32
%t347 = extractvalue { ptr, i64, i64 } %t344, 0
%t348 = icmp eq ptr %t347, null
%t349 = select i1 %t348, ptr @.str.6377, ptr %t347
%t350 = call i32 (ptr, ...) @printf(ptr @.str.6378, i32 %t346, ptr %t349)
%t351 = call i32 (ptr, ...) @printf(ptr @.str.6379)
br label %for.step9267
endif9287:
store { ptr, i64, i64 } { ptr @.str.6380, i64 4, i64 0 }, ptr %a352
%t353 = getelementptr inbounds { ptr, i64, i64 }, ptr %a279, i32 0, i32 1
%t354 = load i64, ptr %t353
%t355 = icmp eq i64 %t354, 1
br i1 %t355, label %then9288, label %endif9290
then9288:
store { ptr, i64, i64 } { ptr @.str.6381, i64 5, i64 0 }, ptr %a352
br label %endif9290
endif9290:
%t356 = load { ptr, i64, i64 }, ptr %a309
store { ptr, i64, i64 } { ptr @.str.6382, i64 7, 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.6383, i64 1, i64 0 }, ptr %a363
call void @finch_str_concat(ptr %a361, ptr %a362, ptr %a363)
%t364 = load { ptr, i64, i64 }, ptr %a361
%t365 = load { ptr, i64, i64 }, ptr %a352
store { ptr, i64, i64 } %t364, 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.6384, i64 7, i64 0 }, ptr %a372
call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372)
%t373 = load { ptr, i64, i64 }, ptr %a370
%t374 = load i64, ptr %a265
%t375 = load { ptr, i64, i64 }, ptr %a184
%t376 = extractvalue { ptr, i64, i64 } %t375, 1
%t377 = icmp uge i64 %t374, %t376
br i1 %t377, label %range9291, label %inrange9292
range9291:
call void @finch_panic_index(ptr @.str.6385, i64 175, i64 %t374, i64 %t376)
unreachable
inrange9292:
%t378 = extractvalue { ptr, i64, i64 } %t375, 0
%t379 = getelementptr inbounds { ptr, i64, i64 }, ptr %t378, i64 %t374
%t380 = load { ptr, i64, i64 }, ptr %t379
store { ptr, i64, i64 } %t373, ptr %a382
store { ptr, i64, i64 } %t380, ptr %a383
call void @finch_str_concat(ptr %a381, ptr %a382, ptr %a383)
%t384 = load { ptr, i64, i64 }, ptr %a381
store { ptr, i64, i64 } %t384, ptr %a386
store { ptr, i64, i64 } { ptr @.str.6386, i64 31, i64 0 }, ptr %a387
call void @finch_str_concat(ptr %a385, ptr %a386, ptr %a387)
%t388 = load { ptr, i64, i64 }, ptr %a385
%t389 = extractvalue { ptr, i64, i64 } %t388, 1
%t390 = trunc i64 %t389 to i32
%t391 = extractvalue { ptr, i64, i64 } %t388, 0
%t392 = icmp eq ptr %t391, null
%t393 = select i1 %t392, ptr @.str.6387, ptr %t391
%t394 = call i32 (ptr, ...) @printf(ptr @.str.6388, i32 %t390, ptr %t393)
%t395 = call i32 (ptr, ...) @printf(ptr @.str.6389)
%t396 = extractvalue { ptr, i64, i64 } { ptr @.str.6390, i64 74, i64 0 }, 1
%t397 = trunc i64 %t396 to i32
%t398 = extractvalue { ptr, i64, i64 } { ptr @.str.6390, i64 74, i64 0 }, 0
%t399 = icmp eq ptr %t398, null
%t400 = select i1 %t399, ptr @.str.6391, ptr %t398
%t401 = call i32 (ptr, ...) @printf(ptr @.str.6392, i32 %t397, ptr %t400)
%t402 = call i32 (ptr, ...) @printf(ptr @.str.6393)
%t403 = extractvalue { ptr, i64, i64 } { ptr @.str.6394, i64 66, i64 0 }, 1
%t404 = trunc i64 %t403 to i32
%t405 = extractvalue { ptr, i64, i64 } { ptr @.str.6394, i64 66, i64 0 }, 0
%t406 = icmp eq ptr %t405, null
%t407 = select i1 %t406, ptr @.str.6395, ptr %t405
%t408 = call i32 (ptr, ...) @printf(ptr @.str.6396, i32 %t404, ptr %t407)
%t409 = call i32 (ptr, ...) @printf(ptr @.str.6397)
%t410 = extractvalue { ptr, i64, i64 } { ptr @.str.6398, i64 0, i64 0 }, 1
%t411 = trunc i64 %t410 to i32
%t412 = extractvalue { ptr, i64, i64 } { ptr @.str.6398, i64 0, i64 0 }, 0
%t413 = icmp eq ptr %t412, null
%t414 = select i1 %t413, ptr @.str.6399, ptr %t412
%t415 = call i32 (ptr, ...) @printf(ptr @.str.6400, i32 %t411, ptr %t414)
%t416 = call i32 (ptr, ...) @printf(ptr @.str.6401)
%t417 = load i64, ptr %a265
%t418 = load { ptr, i64, i64 }, ptr %a184
%t419 = extractvalue { ptr, i64, i64 } %t418, 1
%t420 = icmp uge i64 %t417, %t419
br i1 %t420, label %range9293, label %inrange9294
range9293:
call void @finch_panic_index(ptr @.str.6403, i64 179, i64 %t417, i64 %t419)
unreachable
inrange9294:
%t421 = extractvalue { ptr, i64, i64 } %t418, 0
%t422 = getelementptr inbounds { ptr, i64, i64 }, ptr %t421, i64 %t417
%t423 = load { ptr, i64, i64 }, ptr %t422
%t424 = call { ptr, i64, i64 } @finch.linker.guessLib({ ptr, i64, i64 } %t423)
store { ptr, i64, i64 } { ptr @.str.6402, i64 12, i64 0 }, ptr %a426
store { ptr, i64, i64 } %t424, ptr %a427
call void @finch_str_concat(ptr %a425, ptr %a426, ptr %a427)
%t428 = load { ptr, i64, i64 }, ptr %a425
store { ptr, i64, i64 } %t428, ptr %a430
store { ptr, i64, i64 } { ptr @.str.6404, i64 1, i64 0 }, ptr %a431
call void @finch_str_concat(ptr %a429, ptr %a430, ptr %a431)
%t432 = load { ptr, i64, i64 }, ptr %a429
%t433 = extractvalue { ptr, i64, i64 } %t432, 1
%t434 = trunc i64 %t433 to i32
%t435 = extractvalue { ptr, i64, i64 } %t432, 0
%t436 = icmp eq ptr %t435, null
%t437 = select i1 %t436, ptr @.str.6405, ptr %t435
%t438 = call i32 (ptr, ...) @printf(ptr @.str.6406, i32 %t434, ptr %t437)
%t439 = call i32 (ptr, ...) @printf(ptr @.str.6407)
%t440 = extractvalue { ptr, i64, i64 } { ptr @.str.6408, i64 0, i64 0 }, 1
%t441 = trunc i64 %t440 to i32
%t442 = extractvalue { ptr, i64, i64 } { ptr @.str.6408, i64 0, i64 0 }, 0
%t443 = icmp eq ptr %t442, null
%t444 = select i1 %t443, ptr @.str.6409, ptr %t442
%t445 = call i32 (ptr, ...) @printf(ptr @.str.6410, i32 %t441, ptr %t444)
%t446 = call i32 (ptr, ...) @printf(ptr @.str.6411)
br label %for.step9267
for.step9267:
%t447 = load i64, ptr %a265
%t448 = add i64 %t447, 1
store i64 %t448, ptr %a265
br label %for.cond9265
for.end9268:
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
%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
%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
%a48 = alloca { ptr, i64, i64 }, align 16
%a52 = alloca { ptr, i64, i64 }, align 16
%a53 = 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
%a67 = alloca { ptr, i64, i64 }, align 16
%a68 = alloca { ptr, i64, i64 }, align 16
%a69 = 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
%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
%a86 = 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
%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
%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
%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
%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
%a133 = alloca { ptr, i64, i64 }, align 16
%a134 = alloca { ptr, i64, i64 }, align 16
%a136 = alloca 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
%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
%a162 = alloca { ptr, i64, i64 }, align 16
%a163 = alloca { ptr, i64, i64 }, align 16
%a164 = 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
%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
%a179 = alloca { ptr, i64, i64 }, align 16
%a180 = alloca { ptr, i64, i64 }, align 16
%a181 = 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
%a190 = 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
%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
%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
%a214 = alloca { ptr, i64, i64 }, align 16
%a215 = 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.failed9295, label %try.ok9296
try.failed9295:
%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.ok9296:
store { ptr, i64, i64 } %t11, ptr %a13
%t14 = call { ptr, i64, i64 } @finch.linker.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.6412, 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)
%t32 = load { ptr, i64, i64 }, ptr %a29
store { ptr, i64, i64 } %t32, ptr %a34
store { ptr, i64, i64 } { ptr @.str.6413, i64 3, i64 0 }, ptr %a35
call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35)
%t36 = load { ptr, i64, i64 }, ptr %a33
%t37 = call { ptr, i64, i64 } @finch.linker.fingerprint({ ptr, i64, i64 } %t36)
store { ptr, i64, i64 } %t20, 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.6414, i64 2, i64 0 }, 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 %a46
%t47 = load { ptr, i64, i64 }, ptr %a46
store { ptr, i64, i64 } %t47, ptr %a48
%t49 = call i32 @finch_file_exists(ptr %a48)
%t50 = icmp ne i32 %t49, 0
br i1 %t50, label %then9297, label %endif9299
then9297:
%t51 = load { ptr, i64, i64 }, ptr %a46
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 { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0
%t56 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t55, { ptr, i64, i64 } %t54, 1
ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56
endif9299:
%t57 = load { ptr, i64, i64 }, ptr %a15
%t58 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t57)
store { ptr, i64, i64 } { ptr @.str.6415, i64 9, i64 0 }, ptr %a60
store { ptr, i64, i64 } %t58, ptr %a61
call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61)
%t62 = load { ptr, i64, i64 }, ptr %a59
store { ptr, i64, i64 } %t62, ptr %a64
call void @finch_str_copy(ptr %a63, ptr %a64)
%t65 = call i64 @finch_shell(ptr %a63)
%t66 = load { ptr, i64, i64 }, ptr %a46
store { ptr, i64, i64 } %t66, ptr %a68
store { ptr, i64, i64 } { ptr @.str.6416, i64 5, i64 0 }, ptr %a69
call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69)
%t70 = load { ptr, i64, i64 }, ptr %a67
%t71 = call i32 @getpid()
%t72 = sext i32 %t71 to i64
call void @finch_str_from_int(ptr %a73, i64 %t72)
%t74 = load { ptr, i64, i64 }, ptr %a73
store { ptr, i64, i64 } %t70, ptr %a76
store { ptr, i64, i64 } %t74, ptr %a77
call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77)
%t78 = load { ptr, i64, i64 }, ptr %a75
store { ptr, i64, i64 } %t78, ptr %a79
store { ptr, i64, i64 } { ptr @.str.6417, i64 6, i64 0 }, ptr %a80
%t81 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1
%t82 = load i1, ptr %t81
br i1 %t82, label %then9300, label %endif9302
then9300:
store { ptr, i64, i64 } { ptr @.str.6418, i64 0, i64 0 }, ptr %a80
br label %endif9302
endif9302:
%t83 = load { ptr, i64, i64 }, ptr %a79
store { ptr, i64, i64 } %t83, ptr %a85
store { ptr, i64, i64 } { ptr @.str.6419, i64 4, i64 0 }, ptr %a86
call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86)
%t87 = load { ptr, i64, i64 }, ptr %a84
store { ptr, i64, i64 } %t87, ptr %a88
%t89 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t89, ptr %a91
store { ptr, i64, i64 } { ptr @.str.6420, i64 4, i64 0 }, ptr %a92
call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92)
%t93 = load { ptr, i64, i64 }, ptr %a90
%t94 = load { ptr, i64, i64 }, ptr %a80
store { ptr, i64, i64 } %t93, ptr %a96
store { ptr, i64, i64 } %t94, ptr %a97
call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97)
%t98 = load { ptr, i64, i64 }, ptr %a95
store { ptr, i64, i64 } %t98, ptr %a100
store { ptr, i64, i64 } { ptr @.str.6421, i64 4, 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, 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)
%t108 = load { ptr, i64, i64 }, ptr %a105
store { ptr, i64, i64 } %t108, ptr %a110
store { ptr, i64, i64 } { ptr @.str.6422, i64 4, 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 %a79
%t114 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t113)
store { ptr, i64, i64 } %t112, 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.6423, i64 3, 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 %a88
%t124 = call { ptr, i64, i64 } @finch.linker.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)
%t128 = load { ptr, i64, i64 }, ptr %a125
store { ptr, i64, i64 } %t128, ptr %a130
store { ptr, i64, i64 } { ptr @.str.6424, i64 5, i64 0 }, ptr %a131
call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131)
%t132 = load { ptr, i64, i64 }, ptr %a129
store { ptr, i64, i64 } %t132, ptr %a134
call void @finch_str_copy(ptr %a133, ptr %a134)
%t135 = call i64 @finch_shell(ptr %a133)
store i64 %t135, ptr %a136
%t137 = load i64, ptr %a136
%t138 = icmp ne i64 %t137, 0
br i1 %t138, label %then9303, label %endif9305
then9303:
%t139 = load { ptr, i64, i64 }, ptr %a88
store { ptr, i64, i64 } %t139, ptr %a140
store { ptr, i64, i64 } zeroinitializer, ptr %a141
store { ptr, i64, i64 } zeroinitializer, ptr %a142
%t143 = call i32 @finch_try_read_file(ptr %a141, ptr %a140, ptr %a142)
%t144 = icmp eq i32 %t143, 0
%t145 = load { ptr, i64, i64 }, ptr %a142
%t146 = load { ptr, i64, i64 }, ptr %a141
br i1 %t144, label %or.failed9306, label %or.ok9307
or.failed9306:
store { ptr, i64, i64 } %t145, ptr %a147
br label %or.bend9308
or.bend9308:
br label %or.end9309
or.ok9307:
br label %or.end9309
or.end9309:
%t148 = phi { ptr, i64, i64 } [ { ptr @.str.6425, i64 0, i64 0 }, %or.bend9308 ], [ %t146, %or.ok9307 ]
store { ptr, i64, i64 } %t148, ptr %a149
%t150 = load { ptr, i64, i64 }, ptr %a79
%t151 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t150)
store { ptr, i64, i64 } { ptr @.str.6426, i64 6, i64 0 }, ptr %a153
store { ptr, i64, i64 } %t151, ptr %a154
call void @finch_str_concat(ptr %a152, ptr %a153, ptr %a154)
%t155 = load { ptr, i64, i64 }, ptr %a152
store { ptr, i64, i64 } %t155, ptr %a157
store { ptr, i64, i64 } { ptr @.str.6427, i64 1, i64 0 }, ptr %a158
call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158)
%t159 = load { ptr, i64, i64 }, ptr %a156
%t160 = load { ptr, i64, i64 }, ptr %a88
%t161 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t160)
store { ptr, i64, i64 } %t159, ptr %a163
store { ptr, i64, i64 } %t161, ptr %a164
call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164)
%t165 = load { ptr, i64, i64 }, ptr %a162
store { ptr, i64, i64 } %t165, ptr %a167
call void @finch_str_copy(ptr %a166, ptr %a167)
%t168 = call i64 @finch_shell(ptr %a166)
%t169 = load { ptr, i64, i64 }, ptr %a149
store { ptr, i64, i64 } %t169, ptr %a171
store { ptr, i64, i64 } { ptr @.str.6428, i64 46, i64 0 }, ptr %a172
call void @finch_str_concat(ptr %a170, ptr %a171, ptr %a172)
%t173 = load { ptr, i64, i64 }, ptr %a170
%t174 = load { ptr, i64, i64 }, ptr %a3
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)
%t178 = load { ptr, i64, i64 }, ptr %a175
store { ptr, i64, i64 } %t178, ptr %a180
store { ptr, i64, i64 } { ptr @.str.6429, i64 30, i64 0 }, ptr %a181
call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181)
%t182 = load { ptr, i64, i64 }, ptr %a179
%t183 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t182, 2
ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t183
endif9305:
%t184 = load { ptr, i64, i64 }, ptr %a88
%t185 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t184)
store { ptr, i64, i64 } { ptr @.str.6430, i64 6, 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
store { ptr, i64, i64 } %t189, ptr %a191
store { ptr, i64, i64 } { ptr @.str.6431, i64 7, i64 0 }, ptr %a192
call void @finch_str_concat(ptr %a190, ptr %a191, ptr %a192)
%t193 = load { ptr, i64, i64 }, ptr %a190
%t194 = load { ptr, i64, i64 }, ptr %a79
%t195 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t194)
store { ptr, i64, i64 } %t193, 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.6432, i64 1, i64 0 }, ptr %a202
call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202)
%t203 = load { ptr, i64, i64 }, ptr %a200
%t204 = load { ptr, i64, i64 }, ptr %a46
%t205 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t204)
store { ptr, i64, i64 } %t203, 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
call void @finch_str_copy(ptr %a210, ptr %a211)
%t212 = call i64 @finch_shell(ptr %a210)
%t213 = load { ptr, i64, i64 }, ptr %a46
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 { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0
%t218 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t217, { ptr, i64, i64 } %t216, 1
ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t218
}
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
%a19 = 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 { 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
%a55 = 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
%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
%a80 = alloca { ptr, i64, i64 }, align 16
%a83 = alloca { ptr, i64, i64 }, align 16
%a86 = 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
%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
%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
%a114 = 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
%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
%a134 = alloca { ptr, i64, i64 }, align 16
%a135 = alloca { ptr, i64, i64 }, align 16
%a136 = 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
%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
%a158 = alloca { ptr, i64, i64 }, align 16
%a159 = alloca { ptr, i64, i64 }, align 16
%a161 = alloca 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
%a174 = alloca { ptr, i64, i64 }, align 16
%a175 = alloca { ptr, i64, i64 }, align 16
%a176 = alloca { ptr, i64, i64 }, align 16
%a181 = 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
%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
%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
%a227 = alloca { ptr, i64, i64 }, align 16
%a228 = 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
%a244 = alloca { ptr, i64, i64 }, align 16
%a245 = alloca { ptr, i64, i64 }, align 16
%a246 = alloca { ptr, i64, i64 }, align 16
%a248 = 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
%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
%a269 = alloca { ptr, i64, i64 }, align 16
%a271 = alloca { ptr, i64, i64 }, align 16
%a273 = alloca 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
%a290 = alloca { ptr, i64, i64 }, align 16
%a291 = alloca { ptr, i64, i64 }, align 16
%a292 = 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
%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
%a311 = 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 { 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
%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
%a336 = alloca { ptr, i64, i64 }, align 16
%a337 = alloca { ptr, i64, i64 }, align 16
%a338 = 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
%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
%a354 = alloca { ptr, i64, i64 }, align 16
%a355 = alloca { ptr, i64, i64 }, align 16
%a357 = alloca i64, align 16
%a361 = alloca { ptr, i64, i64 }, align 16
%a362 = alloca { ptr, i64, i64 }, align 16
%a363 = 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
%a375 = alloca { ptr, i64, i64 }, align 16
%a376 = alloca { ptr, i64, i64 }, align 16
%a377 = 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
%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
%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
%a417 = alloca { ptr, i64, i64 }, align 16
%a418 = 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
%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
%a437 = alloca { ptr, i64, i64 }, align 16
%a438 = 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
%a449 = alloca { ptr, i64, i64 }, align 16
%a450 = 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
%a457 = 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
%a467 = alloca { ptr, i64, i64 }, align 16
%a468 = alloca { ptr, i64, i64 }, align 16
%a469 = 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
%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
%a488 = alloca { ptr, i64, i64 }, align 16
%a489 = alloca { ptr, i64, i64 }, align 16
%a491 = alloca i64, align 16
%a493 = alloca { ptr, i64, i64 }, align 16
%a494 = alloca { ptr, i64, i64 }, align 16
%a495 = alloca { ptr, i64, i64 }, align 16
%a500 = alloca { ptr, i64, i64 }, align 16
%a502 = 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
%a509 = alloca { ptr, i64, i64 }, align 16
%a510 = alloca { ptr, i64, i64 }, align 16
%a511 = 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
%a522 = alloca i64, align 16
%a530 = 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
%a545 = alloca { ptr, i64, i64 }, align 16
%a546 = 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
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.6433, i64 11, i64 0 }, 0
%t5 = icmp eq ptr %t4, null
%t6 = select i1 %t5, ptr @.str.6434, 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 %then9310, label %endif9312
then9310:
store { ptr, i64, i64 } { ptr @.str.6435, i64 5, i64 0 }, ptr %a13
br label %endif9312
endif9312:
%t17 = load { ptr, i64, i64 }, ptr %a13
store { ptr, i64, i64 } %t17, ptr %a18
call void @finch_str_copy(ptr %a19, ptr %a18)
%t20 = load { ptr, i64, i64 }, ptr %a19
store { ptr, i64, i64 } %t20, ptr %a21
%t22 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5
%t23 = load i1, ptr %t22
br i1 %t23, label %then9313, label %else9314
then9313:
%t24 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 7
%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
store { ptr, i64, i64 } %t28, ptr %a21
br label %endif9315
else9314:
%t29 = extractvalue { ptr, i64, i64 } { ptr @.str.6436, i64 8, i64 0 }, 0
%t30 = icmp eq ptr %t29, null
%t31 = select i1 %t30, ptr @.str.6437, ptr %t29
%t32 = call ptr @getenv(ptr %t31)
store { ptr, i64, i64 } zeroinitializer, ptr %a33
call void @finch_str_from_c(ptr %a33, ptr %t32)
%t34 = load { ptr, i64, i64 }, ptr %a33
%t35 = extractvalue { ptr, i64, i64 } %t34, 1
%t36 = icmp sgt i64 %t35, 0
br i1 %t36, label %then9316, label %endif9318
then9316:
%t37 = extractvalue { ptr, i64, i64 } { ptr @.str.6438, i64 8, i64 0 }, 0
%t38 = icmp eq ptr %t37, null
%t39 = select i1 %t38, ptr @.str.6439, ptr %t37
%t40 = call ptr @getenv(ptr %t39)
store { ptr, i64, i64 } zeroinitializer, ptr %a41
call void @finch_str_from_c(ptr %a41, ptr %t40)
%t42 = load { ptr, i64, i64 }, ptr %a41
store { ptr, i64, i64 } %t42, ptr %a43
call void @finch_str_copy(ptr %a44, ptr %a43)
%t45 = load { ptr, i64, i64 }, ptr %a44
store { ptr, i64, i64 } %t45, ptr %a21
br label %endif9318
endif9318:
br label %endif9315
endif9315:
%t46 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 2
%t47 = load { ptr, i64, i64 }, ptr %t46
%t48 = load %S.platform.Target, ptr %a2
%t49 = load { ptr, i64, i64 }, ptr %a21
%t50 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.linker.runtimeObject({ ptr, i64, i64 } %t47, %S.platform.Target %t48, { ptr, i64, i64 } %t49)
%t51 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t50, 0
%t52 = xor i1 %t51, true
%t53 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t50, 2
%t54 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t50, 1
br i1 %t52, label %or.failed9319, label %or.ok9320
or.failed9319:
store { ptr, i64, i64 } %t53, ptr %a55
%t56 = load { ptr, i64, i64 }, ptr %a55
%t57 = extractvalue { ptr, i64, i64 } %t56, 1
%t58 = trunc i64 %t57 to i32
%t59 = extractvalue { ptr, i64, i64 } %t56, 0
%t60 = icmp eq ptr %t59, null
%t61 = select i1 %t60, ptr @.str.6440, ptr %t59
%t62 = call i32 (ptr, ...) @printf(ptr @.str.6441, i32 %t58, ptr %t61)
%t63 = call i32 (ptr, ...) @printf(ptr @.str.6442)
ret i64 1
or.ok9320:
store { ptr, i64, i64 } %t54, ptr %a64
%t65 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0
%t66 = load { ptr, i64, i64 }, ptr %t65
store { ptr, i64, i64 } %t66, ptr %a68
store { ptr, i64, i64 } { ptr @.str.6443, i64 3, i64 0 }, 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 %a71
%t72 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0
%t73 = load { ptr, i64, i64 }, ptr %t72
store { ptr, i64, i64 } %t73, ptr %a75
store { ptr, i64, i64 } { ptr @.str.6444, i64 2, i64 0 }, ptr %a76
call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76)
%t77 = load { ptr, i64, i64 }, ptr %a74
store { ptr, i64, i64 } %t77, ptr %a78
%t79 = load { ptr, i64, i64 }, ptr %a71
store { ptr, i64, i64 } %t79, ptr %a80
%t81 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 1
%t82 = load { ptr, i64, i64 }, ptr %t81
store { ptr, i64, i64 } %t82, ptr %a83
%t84 = call i32 @finch_write_file(ptr %a80, ptr %a83)
%t85 = icmp ne i32 %t84, 0
store { ptr, i64, i64 } { ptr @.str.6445, i64 0, i64 0 }, ptr %a86
%t87 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5
%t88 = load i1, ptr %t87
br i1 %t88, label %then9321, label %endif9323
then9321:
%t89 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 0
%t90 = load { ptr, i64, i64 }, ptr %t89
store { ptr, i64, i64 } { ptr @.str.6446, i64 10, 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 %a86
br label %endif9323
endif9323:
%t95 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0
%t96 = load { ptr, i64, i64 }, ptr %t95
store { ptr, i64, i64 } %t96, ptr %a98
store { ptr, i64, i64 } { ptr @.str.6447, i64 4, i64 0 }, ptr %a99
call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99)
%t100 = load { ptr, i64, i64 }, ptr %a97
store { ptr, i64, i64 } %t100, ptr %a101
%t102 = load { ptr, i64, i64 }, ptr %a13
%t103 = load { ptr, i64, i64 }, ptr %a86
store { ptr, i64, i64 } %t102, ptr %a105
store { ptr, i64, i64 } %t103, ptr %a106
call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106)
%t107 = load { ptr, i64, i64 }, ptr %a104
store { ptr, i64, i64 } %t107, ptr %a109
store { ptr, i64, i64 } { ptr @.str.6448, i64 1, i64 0 }, ptr %a110
call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110)
%t111 = load { ptr, i64, i64 }, ptr %a108
%t112 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 3
%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)
%t117 = load { ptr, i64, i64 }, ptr %a114
%t118 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 4
%t119 = load { ptr, i64, i64 }, ptr %t118
store { ptr, i64, i64 } %t117, 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.6449, i64 7, i64 0 }, ptr %a126
call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126)
%t127 = load { ptr, i64, i64 }, ptr %a124
%t128 = load { ptr, i64, i64 }, ptr %a71
%t129 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %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)
%t133 = load { ptr, i64, i64 }, ptr %a130
store { ptr, i64, i64 } %t133, ptr %a135
store { ptr, i64, i64 } { ptr @.str.6450, i64 4, i64 0 }, ptr %a136
call void @finch_str_concat(ptr %a134, ptr %a135, ptr %a136)
%t137 = load { ptr, i64, i64 }, ptr %a134
%t138 = load { ptr, i64, i64 }, ptr %a78
%t139 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t138)
store { ptr, i64, i64 } %t137, ptr %a141
store { ptr, i64, i64 } %t139, ptr %a142
call void @finch_str_concat(ptr %a140, ptr %a141, ptr %a142)
%t143 = load { ptr, i64, i64 }, ptr %a140
store { ptr, i64, i64 } %t143, ptr %a145
store { ptr, i64, i64 } { ptr @.str.6451, i64 3, 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 %a101
%t149 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t148)
store { ptr, i64, i64 } %t147, 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.6452, i64 5, i64 0 }, 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
call void @finch_str_copy(ptr %a158, ptr %a159)
%t160 = call i64 @finch_shell(ptr %a158)
store i64 %t160, ptr %a161
%t162 = load { ptr, i64, i64 }, ptr %a71
%t163 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t162)
store { ptr, i64, i64 } { ptr @.str.6453, i64 6, i64 0 }, ptr %a165
store { ptr, i64, i64 } %t163, ptr %a166
call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166)
%t167 = load { ptr, i64, i64 }, ptr %a164
store { ptr, i64, i64 } %t167, ptr %a169
call void @finch_str_copy(ptr %a168, ptr %a169)
%t170 = call i64 @finch_shell(ptr %a168)
%t171 = load i64, ptr %a161
%t172 = icmp ne i64 %t171, 0
br i1 %t172, label %then9324, label %endif9326
then9324:
%t173 = load { ptr, i64, i64 }, ptr %a101
store { ptr, i64, i64 } %t173, ptr %a174
store { ptr, i64, i64 } zeroinitializer, ptr %a175
store { ptr, i64, i64 } zeroinitializer, ptr %a176
%t177 = call i32 @finch_try_read_file(ptr %a175, ptr %a174, ptr %a176)
%t178 = icmp eq i32 %t177, 0
%t179 = load { ptr, i64, i64 }, ptr %a176
%t180 = load { ptr, i64, i64 }, ptr %a175
br i1 %t178, label %or.failed9327, label %or.ok9328
or.failed9327:
store { ptr, i64, i64 } %t179, ptr %a181
br label %or.bend9329
or.bend9329:
br label %or.end9330
or.ok9328:
br label %or.end9330
or.end9330:
%t182 = phi { ptr, i64, i64 } [ { ptr @.str.6454, i64 0, i64 0 }, %or.bend9329 ], [ %t180, %or.ok9328 ]
%t183 = extractvalue { ptr, i64, i64 } %t182, 1
%t184 = trunc i64 %t183 to i32
%t185 = extractvalue { ptr, i64, i64 } %t182, 0
%t186 = icmp eq ptr %t185, null
%t187 = select i1 %t186, ptr @.str.6455, ptr %t185
%t188 = call i32 (ptr, ...) @printf(ptr @.str.6456, i32 %t184, ptr %t187)
%t189 = call i32 (ptr, ...) @printf(ptr @.str.6457)
%t190 = extractvalue { ptr, i64, i64 } { ptr @.str.6458, i64 46, i64 0 }, 1
%t191 = trunc i64 %t190 to i32
%t192 = extractvalue { ptr, i64, i64 } { ptr @.str.6458, i64 46, i64 0 }, 0
%t193 = icmp eq ptr %t192, null
%t194 = select i1 %t193, ptr @.str.6459, ptr %t192
%t195 = call i32 (ptr, ...) @printf(ptr @.str.6460, i32 %t191, ptr %t194)
%t196 = call i32 (ptr, ...) @printf(ptr @.str.6461)
%t197 = load { ptr, i64, i64 }, ptr %a78
%t198 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t197)
store { ptr, i64, i64 } { ptr @.str.6462, i64 6, 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.6463, i64 1, i64 0 }, ptr %a205
call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205)
%t206 = load { ptr, i64, i64 }, ptr %a203
%t207 = load { ptr, i64, i64 }, ptr %a101
%t208 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t207)
store { ptr, i64, i64 } %t206, ptr %a210
store { ptr, i64, i64 } %t208, ptr %a211
call void @finch_str_concat(ptr %a209, ptr %a210, ptr %a211)
%t212 = load { ptr, i64, i64 }, ptr %a209
store { ptr, i64, i64 } %t212, ptr %a214
call void @finch_str_copy(ptr %a213, ptr %a214)
%t215 = call i64 @finch_shell(ptr %a213)
ret i64 1
endif9326:
%t216 = load { ptr, i64, i64 }, ptr %a21
store { ptr, i64, i64 } %t216, ptr %a218
store { ptr, i64, i64 } { ptr @.str.6464, i64 1, i64 0 }, ptr %a219
call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219)
%t220 = load { ptr, i64, i64 }, ptr %a217
%t221 = load { ptr, i64, i64 }, ptr %a78
%t222 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %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)
%t226 = load { ptr, i64, i64 }, ptr %a223
store { ptr, i64, i64 } %t226, ptr %a228
store { ptr, i64, i64 } { ptr @.str.6465, i64 1, i64 0 }, ptr %a229
call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229)
%t230 = load { ptr, i64, i64 }, ptr %a227
%t231 = load { ptr, i64, i64 }, ptr %a64
%t232 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t231)
store { ptr, i64, i64 } %t230, 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.6466, i64 4, i64 0 }, ptr %a239
call void @finch_str_concat(ptr %a237, ptr %a238, ptr %a239)
%t240 = load { ptr, i64, i64 }, ptr %a237
%t241 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0
%t242 = load { ptr, i64, i64 }, ptr %t241
%t243 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t242)
store { ptr, i64, i64 } %t240, ptr %a245
store { ptr, i64, i64 } %t243, ptr %a246
call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246)
%t247 = load { ptr, i64, i64 }, ptr %a244
store { ptr, i64, i64 } %t247, ptr %a248
%t249 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 2
%t250 = load i1, ptr %t249
%t251 = xor i1 %t250, true
br i1 %t251, label %then9331, label %endif9333
then9331:
%t252 = load { ptr, i64, i64 }, ptr %a248
store { ptr, i64, i64 } %t252, ptr %a254
store { ptr, i64, i64 } { ptr @.str.6467, i64 4, i64 0 }, 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 %a248
br label %endif9333
endif9333:
%t257 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 5
%t258 = load i1, ptr %t257
br i1 %t258, label %then9334, label %endif9336
then9334:
%t259 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 3
%t260 = load i1, ptr %t259
br i1 %t260, label %then9337, label %else9338
then9337:
%t261 = load { ptr, i64, i64 }, ptr %a248
store { ptr, i64, i64 } %t261, ptr %a263
store { ptr, i64, i64 } { ptr @.str.6468, i64 12, i64 0 }, 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 %a248
br label %endif9339
else9338:
%t266 = load { ptr, i64, i64 }, ptr %a248
store { ptr, i64, i64 } %t266, ptr %a268
store { ptr, i64, i64 } { ptr @.str.6469, i64 8, i64 0 }, ptr %a269
call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269)
%t270 = load { ptr, i64, i64 }, ptr %a267
store { ptr, i64, i64 } %t270, ptr %a248
br label %endif9339
endif9339:
br label %endif9336
endif9336:
store { ptr, i64, i64 } zeroinitializer, ptr %a271
%t272 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 6
store i64 0, ptr %a273
br label %each.cond9340
each.cond9340:
%t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t272, i32 0, i32 1
%t275 = load i64, ptr %t274
%t276 = load i64, ptr %a273
%t277 = icmp slt i64 %t276, %t275
br i1 %t277, label %each.body9341, label %each.end9343
each.body9341:
%t278 = load ptr, ptr %t272
%t279 = getelementptr inbounds { ptr, i64, i64 }, ptr %t278, i64 %t276
%t280 = load { ptr, i64, i64 }, ptr %t279
store { ptr, i64, i64 } %t280, ptr %a281
%t282 = load { ptr, i64, i64 }, ptr %a281
store { ptr, i64, i64 } %t282, ptr %a283
store { ptr, i64, i64 } { ptr @.str.6471, i64 2, i64 0 }, ptr %a285
%t286 = call i32 @finch_str_ends(ptr %a283, ptr %a285)
%t287 = icmp ne i32 %t286, 0
br i1 %t287, label %then9344, label %else9345
then9344:
%t288 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0
%t289 = load { ptr, i64, i64 }, ptr %t288
store { ptr, i64, i64 } %t289, ptr %a291
store { ptr, i64, i64 } { ptr @.str.6472, 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 = getelementptr inbounds { ptr, i64, i64 }, ptr %a271, i32 0, i32 1
%t295 = load i64, ptr %t294
call void @finch_str_from_int(ptr %a296, i64 %t295)
%t297 = load { ptr, i64, i64 }, ptr %a296
store { ptr, i64, i64 } %t293, ptr %a299
store { ptr, i64, i64 } %t297, ptr %a300
call void @finch_str_concat(ptr %a298, ptr %a299, ptr %a300)
%t301 = load { ptr, i64, i64 }, ptr %a298
store { ptr, i64, i64 } %t301, ptr %a303
store { ptr, i64, i64 } { ptr @.str.6473, i64 2, i64 0 }, ptr %a304
call void @finch_str_concat(ptr %a302, ptr %a303, ptr %a304)
%t305 = load { ptr, i64, i64 }, ptr %a302
store { ptr, i64, i64 } %t305, ptr %a306
store { ptr, i64, i64 } { ptr @.str.6474, i64 6, i64 0 }, ptr %a307
%t308 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1
%t309 = load i1, ptr %t308
br i1 %t309, label %then9347, label %endif9349
then9347:
store { ptr, i64, i64 } { ptr @.str.6475, i64 0, i64 0 }, ptr %a307
br label %endif9349
endif9349:
%t310 = load { ptr, i64, i64 }, ptr %a21
store { ptr, i64, i64 } %t310, ptr %a312
store { ptr, i64, i64 } { ptr @.str.6476, i64 4, i64 0 }, ptr %a313
call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313)
%t314 = load { ptr, i64, i64 }, ptr %a311
%t315 = load { ptr, i64, i64 }, ptr %a307
store { ptr, i64, i64 } %t314, ptr %a317
store { ptr, i64, i64 } %t315, ptr %a318
call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318)
%t319 = load { ptr, i64, i64 }, ptr %a316
store { ptr, i64, i64 } %t319, ptr %a321
store { ptr, i64, i64 } { ptr @.str.6477, i64 4, i64 0 }, ptr %a322
call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322)
%t323 = load { ptr, i64, i64 }, ptr %a320
%t324 = load { ptr, i64, i64 }, ptr %a281
%t325 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t324)
store { ptr, i64, i64 } %t323, ptr %a327
store { ptr, i64, i64 } %t325, ptr %a328
call void @finch_str_concat(ptr %a326, ptr %a327, ptr %a328)
%t329 = load { ptr, i64, i64 }, ptr %a326
store { ptr, i64, i64 } %t329, ptr %a331
store { ptr, i64, i64 } { ptr @.str.6478, i64 4, i64 0 }, ptr %a332
call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332)
%t333 = load { ptr, i64, i64 }, ptr %a330
%t334 = load { ptr, i64, i64 }, ptr %a306
%t335 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %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)
%t339 = load { ptr, i64, i64 }, ptr %a336
store { ptr, i64, i64 } %t339, ptr %a341
store { ptr, i64, i64 } { ptr @.str.6479, i64 3, 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, i64, i64 }, ptr %a101
%t345 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t344)
store { ptr, i64, i64 } %t343, ptr %a347
store { ptr, i64, i64 } %t345, ptr %a348
call void @finch_str_concat(ptr %a346, ptr %a347, ptr %a348)
%t349 = load { ptr, i64, i64 }, ptr %a346
store { ptr, i64, i64 } %t349, ptr %a351
store { ptr, i64, i64 } { ptr @.str.6480, i64 5, i64 0 }, ptr %a352
call void @finch_str_concat(ptr %a350, ptr %a351, ptr %a352)
%t353 = load { ptr, i64, i64 }, ptr %a350
store { ptr, i64, i64 } %t353, ptr %a355
call void @finch_str_copy(ptr %a354, ptr %a355)
%t356 = call i64 @finch_shell(ptr %a354)
store i64 %t356, ptr %a357
%t358 = load i64, ptr %a357
%t359 = icmp ne i64 %t358, 0
br i1 %t359, label %then9350, label %endif9352
then9350:
%t360 = load { ptr, i64, i64 }, ptr %a101
store { ptr, i64, i64 } %t360, ptr %a361
store { ptr, i64, i64 } zeroinitializer, ptr %a362
store { ptr, i64, i64 } zeroinitializer, ptr %a363
%t364 = call i32 @finch_try_read_file(ptr %a362, ptr %a361, ptr %a363)
%t365 = icmp eq i32 %t364, 0
%t366 = load { ptr, i64, i64 }, ptr %a363
%t367 = load { ptr, i64, i64 }, ptr %a362
br i1 %t365, label %or.failed9353, label %or.ok9354
or.failed9353:
store { ptr, i64, i64 } %t366, ptr %a368
br label %or.bend9355
or.bend9355:
br label %or.end9356
or.ok9354:
br label %or.end9356
or.end9356:
%t369 = phi { ptr, i64, i64 } [ { ptr @.str.6481, i64 0, i64 0 }, %or.bend9355 ], [ %t367, %or.ok9354 ]
store { ptr, i64, i64 } %t369, ptr %a371
store { ptr, i64, i64 } { ptr @.str.6482, i64 24, i64 0 }, ptr %a372
call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372)
%t373 = load { ptr, i64, i64 }, ptr %a370
%t374 = load { ptr, i64, i64 }, ptr %a281
store { ptr, i64, i64 } %t373, ptr %a376
store { ptr, i64, i64 } %t374, ptr %a377
call void @finch_str_concat(ptr %a375, ptr %a376, ptr %a377)
%t378 = load { ptr, i64, i64 }, ptr %a375
%t379 = extractvalue { ptr, i64, i64 } %t378, 1
%t380 = trunc i64 %t379 to i32
%t381 = extractvalue { ptr, i64, i64 } %t378, 0
%t382 = icmp eq ptr %t381, null
%t383 = select i1 %t382, ptr @.str.6483, ptr %t381
%t384 = call i32 (ptr, ...) @printf(ptr @.str.6484, i32 %t380, ptr %t383)
%t385 = call i32 (ptr, ...) @printf(ptr @.str.6485)
%t386 = load { ptr, i64, i64 }, ptr %a78
%t387 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t386)
store { ptr, i64, i64 } { ptr @.str.6486, i64 6, i64 0 }, ptr %a389
store { ptr, i64, i64 } %t387, ptr %a390
call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390)
%t391 = load { ptr, i64, i64 }, ptr %a388
store { ptr, i64, i64 } %t391, ptr %a393
store { ptr, i64, i64 } { ptr @.str.6487, i64 1, i64 0 }, ptr %a394
call void @finch_str_concat(ptr %a392, ptr %a393, ptr %a394)
%t395 = load { ptr, i64, i64 }, ptr %a392
%t396 = load { ptr, i64, i64 }, ptr %a101
%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)
%t401 = load { ptr, i64, i64 }, ptr %a398
store { ptr, i64, i64 } %t401, ptr %a403
store { ptr, i64, i64 } { ptr @.str.6488, i64 1, i64 0 }, ptr %a404
call void @finch_str_concat(ptr %a402, ptr %a403, ptr %a404)
%t405 = load { ptr, i64, i64 }, ptr %a402
%t406 = load { ptr, i64, i64 }, ptr %a306
%t407 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t406)
store { ptr, i64, i64 } %t405, ptr %a409
store { ptr, i64, i64 } %t407, ptr %a410
call void @finch_str_concat(ptr %a408, ptr %a409, ptr %a410)
%t411 = load { ptr, i64, i64 }, ptr %a408
store { ptr, i64, i64 } %t411, ptr %a413
call void @finch_str_copy(ptr %a412, ptr %a413)
%t414 = call i64 @finch_shell(ptr %a412)
ret i64 1
endif9352:
%t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %a271, i32 0, i32 1
%t416 = load { ptr, i64, i64 }, ptr %a306
store { ptr, i64, i64 } %t416, ptr %a417
call void @finch_str_copy(ptr %a418, ptr %a417)
%t419 = load { ptr, i64, i64 }, ptr %a418
%t420 = load i64, ptr %t415
%t421 = add i64 %t420, 1
call void @finch_arr_reserve(ptr %a271, i64 %t421, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t422 = load ptr, ptr %a271
%t423 = getelementptr inbounds { ptr, i64, i64 }, ptr %t422, i64 %t420
store { ptr, i64, i64 } %t419, ptr %t423
store i64 %t421, ptr %t415
%t424 = load { ptr, i64, i64 }, ptr %a248
store { ptr, i64, i64 } %t424, ptr %a426
store { ptr, i64, i64 } { ptr @.str.6489, i64 1, i64 0 }, ptr %a427
call void @finch_str_concat(ptr %a425, ptr %a426, ptr %a427)
%t428 = load { ptr, i64, i64 }, ptr %a425
%t429 = load { ptr, i64, i64 }, ptr %a306
%t430 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t429)
store { ptr, i64, i64 } %t428, ptr %a432
store { ptr, i64, i64 } %t430, ptr %a433
call void @finch_str_concat(ptr %a431, ptr %a432, ptr %a433)
%t434 = load { ptr, i64, i64 }, ptr %a431
store { ptr, i64, i64 } %t434, ptr %a248
br label %endif9346
else9345:
%t435 = load { ptr, i64, i64 }, ptr %a281
store { ptr, i64, i64 } %t435, ptr %a436
store { ptr, i64, i64 } { ptr @.str.6491, i64 2, i64 0 }, ptr %a438
%t439 = call i32 @finch_str_ends(ptr %a436, ptr %a438)
%t440 = icmp ne i32 %t439, 0
br label %logic.from9357
logic.from9357:
br i1 %t440, label %logic.end9359, label %logic.rhs9358
logic.rhs9358:
%t441 = load { ptr, i64, i64 }, ptr %a281
store { ptr, i64, i64 } %t441, ptr %a442
store { ptr, i64, i64 } { ptr @.str.6493, 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.rend9360
logic.rend9360:
br label %logic.end9359
logic.end9359:
%t447 = phi i1 [ true, %logic.from9357 ], [ %t446, %logic.rend9360 ]
br i1 %t447, label %then9361, label %else9362
then9361:
%t448 = load { ptr, i64, i64 }, ptr %a248
store { ptr, i64, i64 } %t448, ptr %a450
store { ptr, i64, i64 } { ptr @.str.6494, i64 1, i64 0 }, ptr %a451
call void @finch_str_concat(ptr %a449, ptr %a450, ptr %a451)
%t452 = load { ptr, i64, i64 }, ptr %a449
%t453 = load { ptr, i64, i64 }, ptr %a281
%t454 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t453)
store { ptr, i64, i64 } %t452, ptr %a456
store { ptr, i64, i64 } %t454, ptr %a457
call void @finch_str_concat(ptr %a455, ptr %a456, ptr %a457)
%t458 = load { ptr, i64, i64 }, ptr %a455
store { ptr, i64, i64 } %t458, ptr %a248
br label %endif9363
else9362:
%t459 = load { ptr, i64, i64 }, ptr %a248
store { ptr, i64, i64 } %t459, ptr %a461
store { ptr, i64, i64 } { ptr @.str.6495, i64 1, i64 0 }, ptr %a462
call void @finch_str_concat(ptr %a460, ptr %a461, ptr %a462)
%t463 = load { ptr, i64, i64 }, ptr %a460
%t464 = load { ptr, i64, i64 }, ptr %a281
%t465 = load %S.platform.Target, ptr %a2
%t466 = call { ptr, i64, i64 } @finch.linker.libFlags({ ptr, i64, i64 } %t464, %S.platform.Target %t465)
store { ptr, i64, i64 } %t463, ptr %a468
store { ptr, i64, i64 } %t466, ptr %a469
call void @finch_str_concat(ptr %a467, ptr %a468, ptr %a469)
%t470 = load { ptr, i64, i64 }, ptr %a467
store { ptr, i64, i64 } %t470, ptr %a248
br label %endif9363
endif9363:
br label %endif9346
endif9346:
br label %each.step9342
each.step9342:
%t471 = load i64, ptr %a273
%t472 = add i64 %t471, 1
store i64 %t472, ptr %a273
br label %each.cond9340
each.end9343:
%t473 = load { ptr, i64, i64 }, ptr %a248
store { ptr, i64, i64 } %t473, ptr %a475
store { ptr, i64, i64 } { ptr @.str.6496, i64 3, i64 0 }, ptr %a476
call void @finch_str_concat(ptr %a474, ptr %a475, ptr %a476)
%t477 = load { ptr, i64, i64 }, ptr %a474
%t478 = load { ptr, i64, i64 }, ptr %a101
%t479 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t478)
store { ptr, i64, i64 } %t477, ptr %a481
store { ptr, i64, i64 } %t479, ptr %a482
call void @finch_str_concat(ptr %a480, ptr %a481, ptr %a482)
%t483 = load { ptr, i64, i64 }, ptr %a480
store { ptr, i64, i64 } %t483, ptr %a485
store { ptr, i64, i64 } { ptr @.str.6497, i64 5, i64 0 }, ptr %a486
call void @finch_str_concat(ptr %a484, ptr %a485, ptr %a486)
%t487 = load { ptr, i64, i64 }, ptr %a484
store { ptr, i64, i64 } %t487, ptr %a489
call void @finch_str_copy(ptr %a488, ptr %a489)
%t490 = call i64 @finch_shell(ptr %a488)
store i64 %t490, ptr %a491
%t492 = load { ptr, i64, i64 }, ptr %a101
store { ptr, i64, i64 } %t492, ptr %a493
store { ptr, i64, i64 } zeroinitializer, ptr %a494
store { ptr, i64, i64 } zeroinitializer, ptr %a495
%t496 = call i32 @finch_try_read_file(ptr %a494, ptr %a493, ptr %a495)
%t497 = icmp eq i32 %t496, 0
%t498 = load { ptr, i64, i64 }, ptr %a495
%t499 = load { ptr, i64, i64 }, ptr %a494
br i1 %t497, label %or.failed9364, label %or.ok9365
or.failed9364:
store { ptr, i64, i64 } %t498, ptr %a500
br label %or.bend9366
or.bend9366:
br label %or.end9367
or.ok9365:
br label %or.end9367
or.end9367:
%t501 = phi { ptr, i64, i64 } [ { ptr @.str.6498, i64 0, i64 0 }, %or.bend9366 ], [ %t499, %or.ok9365 ]
store { ptr, i64, i64 } %t501, ptr %a502
%t503 = load { ptr, i64, i64 }, ptr %a78
%t504 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t503)
store { ptr, i64, i64 } { ptr @.str.6499, i64 6, i64 0 }, ptr %a506
store { ptr, i64, i64 } %t504, ptr %a507
call void @finch_str_concat(ptr %a505, ptr %a506, ptr %a507)
%t508 = load { ptr, i64, i64 }, ptr %a505
store { ptr, i64, i64 } %t508, ptr %a510
store { ptr, i64, i64 } { ptr @.str.6500, i64 1, i64 0 }, ptr %a511
call void @finch_str_concat(ptr %a509, ptr %a510, ptr %a511)
%t512 = load { ptr, i64, i64 }, ptr %a509
%t513 = load { ptr, i64, i64 }, ptr %a101
%t514 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t513)
store { ptr, i64, i64 } %t512, ptr %a516
store { ptr, i64, i64 } %t514, ptr %a517
call void @finch_str_concat(ptr %a515, ptr %a516, ptr %a517)
%t518 = load { ptr, i64, i64 }, ptr %a515
store { ptr, i64, i64 } %t518, ptr %a520
call void @finch_str_copy(ptr %a519, ptr %a520)
%t521 = call i64 @finch_shell(ptr %a519)
store i64 0, ptr %a522
br label %each.cond9368
each.cond9368:
%t523 = getelementptr inbounds { ptr, i64, i64 }, ptr %a271, i32 0, i32 1
%t524 = load i64, ptr %t523
%t525 = load i64, ptr %a522
%t526 = icmp slt i64 %t525, %t524
br i1 %t526, label %each.body9369, label %each.end9371
each.body9369:
%t527 = load ptr, ptr %a271
%t528 = getelementptr inbounds { ptr, i64, i64 }, ptr %t527, i64 %t525
%t529 = load { ptr, i64, i64 }, ptr %t528
store { ptr, i64, i64 } %t529, ptr %a530
%t531 = load { ptr, i64, i64 }, ptr %a530
%t532 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t531)
store { ptr, i64, i64 } { ptr @.str.6501, i64 6, 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
call void @finch_str_copy(ptr %a537, ptr %a538)
%t539 = call i64 @finch_shell(ptr %a537)
br label %each.step9370
each.step9370:
%t540 = load i64, ptr %a522
%t541 = add i64 %t540, 1
store i64 %t541, ptr %a522
br label %each.cond9368
each.end9371:
%t542 = load i64, ptr %a491
%t543 = icmp eq i64 %t542, 127
br i1 %t543, label %then9372, label %endif9374
then9372:
%t544 = load { ptr, i64, i64 }, ptr %a21
store { ptr, i64, i64 } { ptr @.str.6502, i64 42, i64 0 }, ptr %a546
store { ptr, i64, i64 } %t544, ptr %a547
call void @finch_str_concat(ptr %a545, ptr %a546, ptr %a547)
%t548 = load { ptr, i64, i64 }, ptr %a545
store { ptr, i64, i64 } %t548, ptr %a550
store { ptr, i64, i64 } { ptr @.str.6503, i64 32, i64 0 }, ptr %a551
call void @finch_str_concat(ptr %a549, ptr %a550, ptr %a551)
%t552 = load { ptr, i64, i64 }, ptr %a549
%t553 = extractvalue { ptr, i64, i64 } %t552, 1
%t554 = trunc i64 %t553 to i32
%t555 = extractvalue { ptr, i64, i64 } %t552, 0
%t556 = icmp eq ptr %t555, null
%t557 = select i1 %t556, ptr @.str.6504, ptr %t555
%t558 = call i32 (ptr, ...) @printf(ptr @.str.6505, i32 %t554, ptr %t557)
%t559 = call i32 (ptr, ...) @printf(ptr @.str.6506)
ret i64 1
endif9374:
%t560 = load i64, ptr %a491
%t561 = icmp ne i64 %t560, 0
br i1 %t561, label %then9375, label %endif9377
then9375:
%t562 = load { ptr, i64, i64 }, ptr %a502
%t563 = load %S.cimport.CImports, ptr %a3
%t564 = load %S.platform.Target, ptr %a2
%t565 = call i64 @finch.linker.linkFailed({ ptr, i64, i64 } %t562, %S.cimport.CImports %t563, %S.platform.Target %t564)
ret i64 %t565
endif9377:
%t566 = getelementptr inbounds { ptr, i64, i64 }, ptr %a502, i32 0, i32 1
%t567 = load i64, ptr %t566
%t568 = icmp sgt i64 %t567, 0
br i1 %t568, label %then9378, label %endif9380
then9378:
%t569 = load { ptr, i64, i64 }, ptr %a502
%t570 = extractvalue { ptr, i64, i64 } %t569, 1
%t571 = trunc i64 %t570 to i32
%t572 = extractvalue { ptr, i64, i64 } %t569, 0
%t573 = icmp eq ptr %t572, null
%t574 = select i1 %t573, ptr @.str.6507, ptr %t572
%t575 = call i32 (ptr, ...) @printf(ptr @.str.6508, i32 %t571, ptr %t574)
%t576 = call i32 (ptr, ...) @printf(ptr @.str.6509)
br label %endif9380
endif9380:
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.from9381
logic.from9381:
br i1 %t3, label %logic.rhs9382, label %logic.end9383
logic.rhs9382:
%t4 = load i8, ptr %a1
%t5 = icmp ule i8 %t4, 57
br label %logic.rend9384
logic.rend9384:
br label %logic.end9383
logic.end9383:
%t6 = phi i1 [ false, %logic.from9381 ], [ %t5, %logic.rend9384 ]
br i1 %t6, label %then9385, label %endif9387
then9385:
%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
endif9387:
%t11 = load i8, ptr %a1
%t12 = icmp uge i8 %t11, 97
br label %logic.from9388
logic.from9388:
br i1 %t12, label %logic.rhs9389, label %logic.end9390
logic.rhs9389:
%t13 = load i8, ptr %a1
%t14 = icmp ule i8 %t13, 102
br label %logic.rend9391
logic.rend9391:
br label %logic.end9390
logic.end9390:
%t15 = phi i1 [ false, %logic.from9388 ], [ %t14, %logic.rend9391 ]
br i1 %t15, label %then9392, label %endif9394
then9392:
%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
endif9394:
%t21 = load i8, ptr %a1
%t22 = icmp uge i8 %t21, 65
br label %logic.from9395
logic.from9395:
br i1 %t22, label %logic.rhs9396, label %logic.end9397
logic.rhs9396:
%t23 = load i8, ptr %a1
%t24 = icmp ule i8 %t23, 70
br label %logic.rend9398
logic.rend9398:
br label %logic.end9397
logic.end9397:
%t25 = phi i1 [ false, %logic.from9395 ], [ %t24, %logic.rend9398 ]
br i1 %t25, label %then9399, label %endif9401
then9399:
%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
endif9401:
ret i64 -1
}
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
%a19 = alloca { ptr, i64, i64 }, align 16
%a20 = alloca i64, align 16
%a105 = alloca { ptr, i64, i64 }, align 16
%a106 = 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.6511, 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 %then9402, label %endif9404
then9402:
%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.6512, i64 114)
%t18 = load { ptr, i64, i64 }, ptr %a15
store { ptr, i64, i64 } %t18, ptr %a6
br label %endif9404
endif9404:
store { ptr, i64, i64 } zeroinitializer, ptr %a19
store i64 0, ptr %a20
br label %while.cond9405
while.cond9405:
%t21 = load i64, ptr %a20
%t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1
%t23 = load i64, ptr %t22
%t24 = icmp slt i64 %t21, %t23
br i1 %t24, label %while.body9406, label %while.end9407
while.body9406:
%t25 = load i64, ptr %a20
%t26 = load { ptr, i64, i64 }, ptr %a6
%t27 = extractvalue { ptr, i64, i64 } %t26, 1
%t28 = icmp uge i64 %t25, %t27
br i1 %t28, label %range9408, label %inrange9409
range9408:
call void @finch_panic_index(ptr @.str.6513, i64 119, i64 %t25, i64 %t27)
unreachable
inrange9409:
%t29 = extractvalue { ptr, i64, i64 } %t26, 0
%t30 = getelementptr inbounds i8, ptr %t29, i64 %t25
%t31 = load i8, ptr %t30
%t32 = icmp eq i8 %t31, 37
br label %logic.from9410
logic.from9410:
br i1 %t32, label %logic.rhs9411, label %logic.end9412
logic.rhs9411:
%t33 = load i64, ptr %a20
%t34 = add i64 %t33, 2
%t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1
%t36 = load i64, ptr %t35
%t37 = add i64 %t36, 0
%t38 = icmp slt i64 %t34, %t37
br label %logic.rend9413
logic.rend9413:
br label %logic.end9412
logic.end9412:
%t39 = phi i1 [ false, %logic.from9410 ], [ %t38, %logic.rend9413 ]
br label %logic.from9414
logic.from9414:
br i1 %t39, label %logic.rhs9415, label %logic.end9416
logic.rhs9415:
%t40 = load i64, ptr %a20
%t41 = add i64 %t40, 1
%t42 = load { ptr, i64, i64 }, ptr %a6
%t43 = extractvalue { ptr, i64, i64 } %t42, 1
%t44 = icmp uge i64 %t41, %t43
br i1 %t44, label %range9417, label %inrange9418
range9417:
call void @finch_panic_index(ptr @.str.6514, i64 119, i64 %t41, i64 %t43)
unreachable
inrange9418:
%t45 = extractvalue { ptr, i64, i64 } %t42, 0
%t46 = getelementptr inbounds i8, ptr %t45, i64 %t41
%t47 = load i8, ptr %t46
%t48 = call i64 @finch.lsp.hexval(i8 %t47)
%t49 = icmp sge i64 %t48, 0
br label %logic.rend9419
logic.rend9419:
br label %logic.end9416
logic.end9416:
%t50 = phi i1 [ false, %logic.from9414 ], [ %t49, %logic.rend9419 ]
br label %logic.from9420
logic.from9420:
br i1 %t50, label %logic.rhs9421, label %logic.end9422
logic.rhs9421:
%t51 = load i64, ptr %a20
%t52 = add i64 %t51, 2
%t53 = load { ptr, i64, i64 }, ptr %a6
%t54 = extractvalue { ptr, i64, i64 } %t53, 1
%t55 = icmp uge i64 %t52, %t54
br i1 %t55, label %range9423, label %inrange9424
range9423:
call void @finch_panic_index(ptr @.str.6515, i64 119, i64 %t52, i64 %t54)
unreachable
inrange9424:
%t56 = extractvalue { ptr, i64, i64 } %t53, 0
%t57 = getelementptr inbounds i8, ptr %t56, i64 %t52
%t58 = load i8, ptr %t57
%t59 = call i64 @finch.lsp.hexval(i8 %t58)
%t60 = icmp sge i64 %t59, 0
br label %logic.rend9425
logic.rend9425:
br label %logic.end9422
logic.end9422:
%t61 = phi i1 [ false, %logic.from9420 ], [ %t60, %logic.rend9425 ]
br i1 %t61, label %then9426, label %else9427
then9426:
%t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1
%t63 = load i64, ptr %a20
%t64 = add i64 %t63, 1
%t65 = load { ptr, i64, i64 }, ptr %a6
%t66 = extractvalue { ptr, i64, i64 } %t65, 1
%t67 = icmp uge i64 %t64, %t66
br i1 %t67, label %range9429, label %inrange9430
range9429:
call void @finch_panic_index(ptr @.str.6516, i64 120, i64 %t64, i64 %t66)
unreachable
inrange9430:
%t68 = extractvalue { ptr, i64, i64 } %t65, 0
%t69 = getelementptr inbounds i8, ptr %t68, i64 %t64
%t70 = load i8, ptr %t69
%t71 = call i64 @finch.lsp.hexval(i8 %t70)
%t72 = mul i64 %t71, 16
%t73 = load i64, ptr %a20
%t74 = add i64 %t73, 2
%t75 = load { ptr, i64, i64 }, ptr %a6
%t76 = extractvalue { ptr, i64, i64 } %t75, 1
%t77 = icmp uge i64 %t74, %t76
br i1 %t77, label %range9431, label %inrange9432
range9431:
call void @finch_panic_index(ptr @.str.6517, i64 120, i64 %t74, i64 %t76)
unreachable
inrange9432:
%t78 = extractvalue { ptr, i64, i64 } %t75, 0
%t79 = getelementptr inbounds i8, ptr %t78, i64 %t74
%t80 = load i8, ptr %t79
%t81 = call i64 @finch.lsp.hexval(i8 %t80)
%t82 = add i64 %t72, %t81
%t83 = trunc i64 %t82 to i8
%t84 = load i64, ptr %t62
%t85 = add i64 %t84, 1
call void @finch_arr_reserve(ptr %a19, i64 %t85, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64))
%t86 = load ptr, ptr %a19
%t87 = getelementptr inbounds i8, ptr %t86, i64 %t84
store i8 %t83, ptr %t87
store i64 %t85, ptr %t62
%t88 = load i64, ptr %a20
%t89 = add i64 %t88, 3
store i64 %t89, ptr %a20
br label %endif9428
else9427:
%t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1
%t91 = load i64, ptr %a20
%t92 = load { ptr, i64, i64 }, ptr %a6
%t93 = extractvalue { ptr, i64, i64 } %t92, 1
%t94 = icmp uge i64 %t91, %t93
br i1 %t94, label %range9433, label %inrange9434
range9433:
call void @finch_panic_index(ptr @.str.6518, i64 123, i64 %t91, i64 %t93)
unreachable
inrange9434:
%t95 = extractvalue { ptr, i64, i64 } %t92, 0
%t96 = getelementptr inbounds i8, ptr %t95, i64 %t91
%t97 = load i8, ptr %t96
%t98 = load i64, ptr %t90
%t99 = add i64 %t98, 1
call void @finch_arr_reserve(ptr %a19, i64 %t99, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64))
%t100 = load ptr, ptr %a19
%t101 = getelementptr inbounds i8, ptr %t100, i64 %t98
store i8 %t97, ptr %t101
store i64 %t99, ptr %t90
%t102 = load i64, ptr %a20
%t103 = add i64 %t102, 1
store i64 %t103, ptr %a20
br label %endif9428
endif9428:
br label %while.cond9405
while.end9407:
%t104 = load { ptr, i64, i64 }, ptr %a19
store { ptr, i64, i64 } zeroinitializer, ptr %a105
store { ptr, i64, i64 } %t104, ptr %a106
call void @finch_str_from_bytes(ptr %a105, ptr %a106)
%t107 = load { ptr, i64, i64 }, ptr %a105
ret { ptr, i64, i64 } %t107
}
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
%a50 = 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
%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
%a93 = alloca { ptr, i64, i64 }, align 16
%a94 = alloca { ptr, i64, i64 }, align 16
store { ptr, i64, i64 } %p0, ptr %a1
store { ptr, i64, i64 } { ptr @.str.6519, 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.6520, 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.cond9435
each.cond9435:
%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.body9436, label %each.end9438
each.body9436:
%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.from9439
logic.from9439:
br i1 %t23, label %logic.rhs9440, label %logic.end9441
logic.rhs9440:
%t24 = load i8, ptr %a18
%t25 = icmp ule i8 %t24, 122
br label %logic.rend9442
logic.rend9442:
br label %logic.end9441
logic.end9441:
%t26 = phi i1 [ false, %logic.from9439 ], [ %t25, %logic.rend9442 ]
br label %logic.from9443
logic.from9443:
br i1 %t26, label %logic.end9445, label %logic.rhs9444
logic.rhs9444:
%t27 = load i8, ptr %a18
%t28 = icmp uge i8 %t27, 65
br label %logic.from9446
logic.from9446:
br i1 %t28, label %logic.rhs9447, label %logic.end9448
logic.rhs9447:
%t29 = load i8, ptr %a18
%t30 = icmp ule i8 %t29, 90
br label %logic.rend9449
logic.rend9449:
br label %logic.end9448
logic.end9448:
%t31 = phi i1 [ false, %logic.from9446 ], [ %t30, %logic.rend9449 ]
br label %logic.rend9450
logic.rend9450:
br label %logic.end9445
logic.end9445:
%t32 = phi i1 [ true, %logic.from9443 ], [ %t31, %logic.rend9450 ]
br label %logic.from9451
logic.from9451:
br i1 %t32, label %logic.end9453, label %logic.rhs9452
logic.rhs9452:
%t33 = load i8, ptr %a18
%t34 = icmp uge i8 %t33, 48
br label %logic.from9454
logic.from9454:
br i1 %t34, label %logic.rhs9455, label %logic.end9456
logic.rhs9455:
%t35 = load i8, ptr %a18
%t36 = icmp ule i8 %t35, 57
br label %logic.rend9457
logic.rend9457:
br label %logic.end9456
logic.end9456:
%t37 = phi i1 [ false, %logic.from9454 ], [ %t36, %logic.rend9457 ]
br label %logic.rend9458
logic.rend9458:
br label %logic.end9453
logic.end9453:
%t38 = phi i1 [ true, %logic.from9451 ], [ %t37, %logic.rend9458 ]
br label %logic.from9459
logic.from9459:
br i1 %t38, label %logic.end9461, label %logic.rhs9460
logic.rhs9460:
store { ptr, i64, i64 } { ptr @.str.6521, 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
br label %logic.rend9462
logic.rend9462:
br label %logic.end9461
logic.end9461:
%t47 = phi i1 [ true, %logic.from9459 ], [ %t46, %logic.rend9462 ]
br i1 %t47, label %then9463, label %else9464
then9463:
%t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1
%t49 = load i8, ptr %a18
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 %a9, i64 %t53, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t54 = load ptr, ptr %a9
%t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52
store { ptr, i64, i64 } %t51, ptr %t55
store i64 %t53, ptr %t48
br label %endif9465
else9464:
%t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1
%t57 = load i64, ptr %a21
%t58 = sdiv i64 %t57, 16
%t59 = srem i64 %t58, 16
%t60 = load { ptr, i64, i64 }, ptr %a2
%t61 = extractvalue { ptr, i64, i64 } %t60, 1
%t62 = icmp uge i64 %t59, %t61
br i1 %t62, label %range9466, label %inrange9467
range9466:
call void @finch_panic_index(ptr @.str.6524, i64 138, i64 %t59, i64 %t61)
unreachable
inrange9467:
%t63 = extractvalue { ptr, i64, i64 } %t60, 0
%t64 = getelementptr inbounds i8, ptr %t63, i64 %t59
%t65 = load i8, ptr %t64
call void @finch_str_from_char(ptr %a66, i8 signext %t65)
%t67 = load { ptr, i64, i64 }, ptr %a66
store { ptr, i64, i64 } { ptr @.str.6523, i64 1, 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
%t72 = load i64, ptr %a21
%t73 = srem i64 %t72, 16
%t74 = load { ptr, i64, i64 }, ptr %a2
%t75 = extractvalue { ptr, i64, i64 } %t74, 1
%t76 = icmp uge i64 %t73, %t75
br i1 %t76, label %range9468, label %inrange9469
range9468:
call void @finch_panic_index(ptr @.str.6525, i64 138, i64 %t73, i64 %t75)
unreachable
inrange9469:
%t77 = extractvalue { ptr, i64, i64 } %t74, 0
%t78 = getelementptr inbounds i8, ptr %t77, i64 %t73
%t79 = load i8, ptr %t78
call void @finch_str_from_char(ptr %a80, i8 signext %t79)
%t81 = load { ptr, i64, i64 }, ptr %a80
store { ptr, i64, i64 } %t71, 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
%t86 = load i64, ptr %t56
%t87 = add i64 %t86, 1
call void @finch_arr_reserve(ptr %a9, i64 %t87, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t88 = load ptr, ptr %a9
%t89 = getelementptr inbounds { ptr, i64, i64 }, ptr %t88, i64 %t86
store { ptr, i64, i64 } %t85, ptr %t89
store i64 %t87, ptr %t56
br label %endif9465
endif9465:
br label %each.step9437
each.step9437:
%t90 = load i64, ptr %a10
%t91 = add i64 %t90, 1
store i64 %t91, ptr %a10
br label %each.cond9435
each.end9438:
%t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.6526, i64 0, i64 0 }, ptr %a93
call void @finch_str_join(ptr %a94, ptr %a9, ptr %a93)
%t95 = load { ptr, i64, i64 }, ptr %a94
ret { ptr, i64, i64 } %t95
}
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.cond9470
while.cond9470:
%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.body9471, label %while.end9472
while.body9471:
%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 %range9473, label %inrange9474
range9473:
call void @finch_panic_index(ptr @.str.6527, i64 149, i64 %t8, i64 %t10)
unreachable
inrange9474:
%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.from9475
logic.from9475:
br i1 %t15, label %logic.rhs9476, label %logic.end9477
logic.rhs9476:
%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.rend9478
logic.rend9478:
br label %logic.end9477
logic.end9477:
%t21 = phi i1 [ false, %logic.from9475 ], [ %t20, %logic.rend9478 ]
br i1 %t21, label %then9479, label %else9480
then9479:
%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 %range9482, label %inrange9483
range9482:
call void @finch_panic_index(ptr @.str.6528, i64 150, i64 %t23, i64 %t25)
unreachable
inrange9483:
%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 %then9484, label %else9485
then9484:
%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.6529, i64 1, i64 0 }, ptr %t35
store i64 %t33, ptr %t31
br label %endif9486
else9485:
%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 %range9487, label %inrange9488
range9487:
call void @finch_panic_index(ptr @.str.6530, i64 153, i64 %t38, i64 %t40)
unreachable
inrange9488:
%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 %endif9486
endif9486:
%t51 = load i64, ptr %a3
%t52 = add i64 %t51, 2
store i64 %t52, ptr %a3
br label %endif9481
else9480:
%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 %range9489, label %inrange9490
range9489:
call void @finch_panic_index(ptr @.str.6531, i64 157, i64 %t54, i64 %t56)
unreachable
inrange9490:
%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 %endif9481
endif9481:
br label %while.cond9470
while.end9472:
%t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.6532, i64 0, i64 0 }, ptr %a70
call void @finch_str_join(ptr %a71, ptr %a2, ptr %a70)
%t72 = load { ptr, i64, i64 }, ptr %a71
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.6534, 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.from9491
logic.from9491:
br i1 %t11, label %logic.rhs9492, label %logic.end9493
logic.rhs9492:
%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.rend9494
logic.rend9494:
br label %logic.end9493
logic.end9493:
%t16 = phi i1 [ false, %logic.from9491 ], [ %t15, %logic.rend9494 ]
br i1 %t16, label %then9495, label %endif9497
then9495:
%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 %range9498, label %inrange9499
range9498:
call void @finch_panic_index(ptr @.str.6535, i64 167, i64 %t18, i64 %t20)
unreachable
inrange9499:
%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
ret { ptr, i64, i64 } %t27
endif9497:
ret { ptr, i64, i64 } { ptr @.str.6536, 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
%a35 = alloca { ptr, i64, i64 }, align 16
store { ptr, i64, i64 } zeroinitializer, ptr %a1
br label %while.cond9500
while.cond9500:
br label %while.body9501
while.body9501:
%t2 = call i32 @getchar()
store i32 %t2, ptr %a3
%t4 = load i32, ptr %a3
%t5 = icmp slt i32 %t4, 0
br i1 %t5, label %then9503, label %endif9505
then9503:
ret { ptr, i64, i64 } { ptr @.str.6537, i64 0, i64 0 }
endif9505:
%t6 = load i32, ptr %a3
%t7 = icmp eq i32 %t6, 10
br i1 %t7, label %then9506, label %endif9508
then9506:
br label %while.end9502
endif9508:
%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.cond9500
while.end9502:
%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.6539, 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 %then9509, label %endif9511
then9509:
%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.6540, i64 188)
%t32 = load { ptr, i64, i64 }, ptr %a28
store { ptr, i64, i64 } %t32, ptr %a19
br label %endif9511
endif9511:
%t33 = load { ptr, i64, i64 }, ptr %a19
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, %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 i64, align 16
%a30 = alloca { ptr, i64, i64 }, align 16
%a35 = alloca { ptr, i64, i64 }, align 16
%a37 = alloca { ptr, i64, i64 }, align 16
%a39 = alloca i64, align 16
%a43 = alloca i32, align 16
%a57 = alloca { ptr, i64, i64 }, align 16
%a58 = alloca { ptr, i64, i64 }, align 16
store i64 0, ptr %a1
br label %while.cond9512
while.cond9512:
br label %while.body9513
while.body9513:
%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 %then9515, label %endif9517
then9515:
%t7 = load i64, ptr %a1
%t8 = icmp sgt i64 %t7, 0
br i1 %t8, label %then9518, label %endif9520
then9518:
br label %while.end9514
endif9520:
%t9 = load ptr, ptr @stdin
%t10 = call i32 @feof(ptr %t9)
%t11 = icmp ne i32 %t10, 0
br i1 %t11, label %then9521, label %endif9523
then9521:
%t12 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6541, i64 32, i64 0 }, 2
ret { i1, %S.json.Json, { ptr, i64, i64 } } %t12
endif9523:
br label %while.cond9512
endif9517:
%t13 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t13, ptr %a14
store { ptr, i64, i64 } { ptr @.str.6543, 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 %then9524, label %endif9526
then9524:
%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.6544, 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 } zeroinitializer, ptr %a28
store i64 0, ptr %a29
store { ptr, i64, i64 } %t27, ptr %a30
%t31 = call i32 @finch_str_try_int(ptr %a30, ptr %a29, ptr %a28)
%t32 = icmp eq i32 %t31, 0
%t33 = load { ptr, i64, i64 }, ptr %a28
%t34 = load i64, ptr %a29
br i1 %t32, label %or.failed9527, label %or.ok9528
or.failed9527:
store { ptr, i64, i64 } %t33, ptr %a35
br label %or.bend9529
or.bend9529:
br label %or.end9530
or.ok9528:
br label %or.end9530
or.end9530:
%t36 = phi i64 [ 0, %or.bend9529 ], [ %t34, %or.ok9528 ]
store i64 %t36, ptr %a1
br label %endif9526
endif9526:
br label %while.cond9512
while.end9514:
store { ptr, i64, i64 } zeroinitializer, ptr %a37
%t38 = load i64, ptr %a1
store i64 0, ptr %a39
br label %for.cond9531
for.cond9531:
%t40 = load i64, ptr %a39
%t41 = icmp slt i64 %t40, %t38
br i1 %t41, label %for.body9532, label %for.end9534
for.body9532:
%t42 = call i32 @getchar()
store i32 %t42, ptr %a43
%t44 = load i32, ptr %a43
%t45 = icmp slt i32 %t44, 0
br i1 %t45, label %then9535, label %endif9537
then9535:
%t46 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6546, i64 25, i64 0 }, 2
ret { i1, %S.json.Json, { ptr, i64, i64 } } %t46
endif9537:
%t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %a37, i32 0, i32 1
%t48 = load i32, ptr %a43
%t49 = trunc i32 %t48 to i8
%t50 = load i64, ptr %t47
%t51 = add i64 %t50, 1
call void @finch_arr_reserve(ptr %a37, i64 %t51, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64))
%t52 = load ptr, ptr %a37
%t53 = getelementptr inbounds i8, ptr %t52, i64 %t50
store i8 %t49, ptr %t53
store i64 %t51, ptr %t47
br label %for.step9533
for.step9533:
%t54 = load i64, ptr %a39
%t55 = add i64 %t54, 1
store i64 %t55, ptr %a39
br label %for.cond9531
for.end9534:
%t56 = load { ptr, i64, i64 }, ptr %a37
store { ptr, i64, i64 } zeroinitializer, ptr %a57
store { ptr, i64, i64 } %t56, ptr %a58
call void @finch_str_from_bytes(ptr %a57, ptr %a58)
%t59 = load { ptr, i64, i64 }, ptr %a57
%t60 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.parse({ ptr, i64, i64 } %t59)
%t61 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t60, 0
%t62 = xor i1 %t61, true
%t63 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t60, 2
%t64 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t60, 1
br i1 %t62, label %try.failed9538, label %try.ok9539
try.failed9538:
%t65 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t63, 2
ret { i1, %S.json.Json, { ptr, i64, i64 } } %t65
try.ok9539:
%t66 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0
%t67 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t66, %S.json.Json %t64, 1
ret { i1, %S.json.Json, { ptr, i64, i64 } } %t67
}
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
%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
%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
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.6547, i64 16, 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.6548, i64 4, i64 0 }, 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 %a17
%t18 = load { ptr, i64, i64 }, ptr %a17
%t19 = load { ptr, i64, i64 }, ptr %a4
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)
%t23 = load { ptr, i64, i64 }, ptr %a20
store { ptr, i64, i64 } %t23, ptr %a24
%t25 = load { ptr, i64, i64 }, ptr %a24
%t26 = extractvalue { ptr, i64, i64 } %t25, 0
%t27 = icmp eq ptr %t26, null
%t28 = select i1 %t27, ptr @.str.6549, ptr %t26
%t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a24, i32 0, i32 1
%t30 = load i64, ptr %t29
%t31 = load ptr, ptr @stdout
%t32 = call i64 @fwrite(ptr %t28, i64 1, i64 %t30, ptr %t31)
%t33 = load ptr, ptr @stdout
%t34 = call i32 @fflush(ptr %t33)
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
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.6551, i64 3, i64 0 })
call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6550, i64 7, i64 0 }, %S.json.Json %t5)
%t6 = load %S.json.Json, ptr %a1
call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6552, i64 2, i64 0 }, %S.json.Json %t6)
%t7 = load %S.json.Json, ptr %a2
call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6553, i64 6, i64 0 }, %S.json.Json %t7)
%t8 = load %S.json.Json, ptr %a4
call void @finch.lsp.send(%S.json.Json %t8)
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
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.6555, i64 3, i64 0 })
call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6554, i64 7, i64 0 }, %S.json.Json %t5)
%t6 = load { ptr, i64, i64 }, ptr %a1
%t7 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t6)
call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6556, i64 6, 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.6557, i64 6, i64 0 }, %S.json.Json %t8)
%t9 = load %S.json.Json, ptr %a4
call void @finch.lsp.send(%S.json.Json %t9)
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 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.cond9540
n.cond9540:
%t6 = load i64, ptr %a5
%t7 = icmp slt i64 %t6, %t4
br i1 %t7, label %n.body9541, label %n.end9542
n.body9541:
%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.cond9540
n.end9542:
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.lsp.position(i64 %p0, i64 %p1) {
entry:
%a1 = alloca i64, align 16
%a2 = alloca i64, align 16
%a4 = alloca %S.json.Json, align 16
%a10 = alloca %S.json.Json, align 16
%a11 = 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.6558, i64 4, i64 0 }, %S.json.Json %t6)
%t7 = load i64, ptr %a2
%t8 = call %S.json.Json @finch.lsp.num(i64 %t7)
call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6559, i64 9, i64 0 }, %S.json.Json %t8)
%t9 = load %S.json.Json, ptr %a4
store %S.json.Json %t9, ptr %a10
call void @finch.copy.S_json_Json(ptr %a11, ptr %a10)
%t12 = load %S.json.Json, ptr %a11
ret %S.json.Json %t12
}
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
%a13 = alloca %S.json.Json, align 16
%a14 = 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.6560, i64 5, i64 0 }, %S.json.Json %t8)
%t9 = load i64, ptr %a1
%t10 = load i64, ptr %a3
%t11 = call %S.json.Json @finch.lsp.position(i64 %t9, i64 %t10)
call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.6561, i64 3, i64 0 }, %S.json.Json %t11)
%t12 = load %S.json.Json, ptr %a5
store %S.json.Json %t12, ptr %a13
call void @finch.copy.S_json_Json(ptr %a14, ptr %a13)
%t15 = load %S.json.Json, ptr %a14
ret %S.json.Json %t15
}
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.6563, 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.failed9543, label %or.ok9544
or.failed9543:
store { ptr, i64, i64 } %t8, ptr %a10
br label %or.bend9545
or.bend9545:
br label %or.end9546
or.ok9544:
br label %or.end9546
or.end9546:
%t11 = phi i64 [ 0, %or.bend9545 ], [ %t9, %or.ok9544 ]
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.6565, 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 %then9547, label %endif9549
then9547:
ret %S.lsp.Diag zeroinitializer
endif9549:
%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.6566, 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.6567, 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.6569, 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 %then9550, label %endif9552
then9550:
ret %S.lsp.Diag zeroinitializer
endif9552:
%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 %range9553, label %inrange9554
range9553:
call void @finch_panic_index(ptr @.str.6570, i64 287, i64 %t37, i64 %t39)
unreachable
inrange9554:
%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 %range9555, label %inrange9556
range9555:
call void @finch_panic_index(ptr @.str.6571, i64 288, i64 %t48, i64 %t50)
unreachable
inrange9556:
%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.cond9557
for.cond9557:
%t62 = load i64, ptr %a61
%t63 = icmp slt i64 %t62, %t60
br i1 %t63, label %for.body9558, label %for.end9560
for.body9558:
%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 %range9561, label %inrange9562
range9561:
call void @finch_panic_index(ptr @.str.6572, i64 291, i64 %t65, i64 %t67)
unreachable
inrange9562:
%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.step9559
for.step9559:
%t79 = load i64, ptr %a61
%t80 = add i64 %t79, 1
store i64 %t80, ptr %a61
br label %for.cond9557
for.end9560:
%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.6573, 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
ret %S.lsp.Diag %t95
}
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.cond9710
n.cond9710:
%t6 = load i64, ptr %a5
%t7 = icmp slt i64 %t6, %t4
br i1 %t7, label %n.body9711, label %n.end9712
n.body9711:
%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.cond9710
n.end9712:
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.cond9713
n.cond9713:
%t6 = load i64, ptr %a5
%t7 = icmp slt i64 %t6, %t4
br i1 %t7, label %n.body9714, label %n.end9715
n.body9714:
%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.cond9713
n.end9715:
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.cond9716
n.cond9716:
%t6 = load i64, ptr %a5
%t7 = icmp slt i64 %t6, %t4
br i1 %t7, label %n.body9717, label %n.end9718
n.body9717:
%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.cond9716
n.end9718:
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.cond9719
n.cond9719:
%t6 = load i64, ptr %a5
%t7 = icmp slt i64 %t6, %t4
br i1 %t7, label %n.body9720, label %n.end9721
n.body9720:
%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.cond9719
n.end9721:
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.cond9722
n.cond9722:
%t6 = load i64, ptr %a5
%t7 = icmp slt i64 %t6, %t4
br i1 %t7, label %n.body9723, label %n.end9724
n.body9723:
%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.cond9722
n.end9724:
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 %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
%a538 = alloca %S.lsp.Analysis, align 16
%a539 = alloca %S.lsp.Analysis, 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.6575, 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.cond9563
each.cond9563:
%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.body9564, label %each.end9566
each.body9564:
%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.6577, 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 %then9567, label %else9568
then9567:
%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 %range9570, label %inrange9571
range9570:
call void @finch_panic_index(ptr @.str.6578, i64 301, i64 0, i64 %t29)
unreachable
inrange9571:
%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.6579, 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.from9572
logic.from9572:
br i1 %t42, label %logic.rhs9573, label %logic.end9574
logic.rhs9573:
%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.rend9575
logic.rend9575:
br label %logic.end9574
logic.end9574:
%t46 = phi i1 [ false, %logic.from9572 ], [ %t45, %logic.rend9575 ]
br i1 %t46, label %then9576, label %else9577
then9576:
%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 %range9579, label %inrange9580
range9579:
call void @finch_panic_index(ptr @.str.6580, i64 303, i64 1, i64 %t50)
unreachable
inrange9580:
%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 %range9581, label %inrange9582
range9581:
call void @finch_panic_index(ptr @.str.6581, i64 303, i64 2, i64 %t60)
unreachable
inrange9582:
%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 %range9583, label %inrange9584
range9583:
call void @finch_panic_index(ptr @.str.6582, i64 303, i64 3, i64 %t68)
unreachable
inrange9584:
%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 %range9585, label %inrange9586
range9585:
call void @finch_panic_index(ptr @.str.6583, i64 303, i64 4, i64 %t76)
unreachable
inrange9586:
%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 %range9587, label %inrange9588
range9587:
call void @finch_panic_index(ptr @.str.6584, i64 303, i64 5, i64 %t84)
unreachable
inrange9588:
%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 %range9589, label %inrange9590
range9589:
call void @finch_panic_index(ptr @.str.6585, i64 303, i64 6, i64 %t94)
unreachable
inrange9590:
%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 %range9591, label %inrange9592
range9591:
call void @finch_panic_index(ptr @.str.6586, i64 303, i64 7, i64 %t102)
unreachable
inrange9592:
%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 %range9593, label %inrange9594
range9593:
call void @finch_panic_index(ptr @.str.6587, i64 303, i64 8, i64 %t110)
unreachable
inrange9594:
%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 %endif9578
else9577:
%t121 = load { ptr, i64, i64 }, ptr %a37
store { ptr, i64, i64 } %t121, ptr %a122
store { ptr, i64, i64 } { ptr @.str.6588, 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.from9595
logic.from9595:
br i1 %t125, label %logic.rhs9596, label %logic.end9597
logic.rhs9596:
%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.rend9598
logic.rend9598:
br label %logic.end9597
logic.end9597:
%t129 = phi i1 [ false, %logic.from9595 ], [ %t128, %logic.rend9598 ]
br i1 %t129, label %then9599, label %else9600
then9599:
%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 %range9602, label %inrange9603
range9602:
call void @finch_panic_index(ptr @.str.6589, i64 305, i64 1, i64 %t133)
unreachable
inrange9603:
%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 %range9604, label %inrange9605
range9604:
call void @finch_panic_index(ptr @.str.6590, i64 305, i64 2, i64 %t143)
unreachable
inrange9605:
%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 %range9606, label %inrange9607
range9606:
call void @finch_panic_index(ptr @.str.6591, i64 305, i64 3, i64 %t153)
unreachable
inrange9607:
%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 %range9608, label %inrange9609
range9608:
call void @finch_panic_index(ptr @.str.6592, i64 305, i64 4, i64 %t163)
unreachable
inrange9609:
%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 %range9610, label %inrange9611
range9610:
call void @finch_panic_index(ptr @.str.6593, i64 305, i64 5, i64 %t171)
unreachable
inrange9611:
%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 %range9612, label %inrange9613
range9612:
call void @finch_panic_index(ptr @.str.6594, i64 305, i64 6, i64 %t179)
unreachable
inrange9613:
%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 %range9614, label %inrange9615
range9614:
call void @finch_panic_index(ptr @.str.6595, i64 305, i64 7, i64 %t189)
unreachable
inrange9615:
%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 %range9616, label %inrange9617
range9616:
call void @finch_panic_index(ptr @.str.6596, i64 305, i64 8, i64 %t197)
unreachable
inrange9617:
%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 %endif9601
else9600:
%t208 = load { ptr, i64, i64 }, ptr %a37
store { ptr, i64, i64 } %t208, ptr %a209
store { ptr, i64, i64 } { ptr @.str.6597, 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.from9618
logic.from9618:
br i1 %t212, label %logic.rhs9619, label %logic.end9620
logic.rhs9619:
%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.rend9621
logic.rend9621:
br label %logic.end9620
logic.end9620:
%t216 = phi i1 [ false, %logic.from9618 ], [ %t215, %logic.rend9621 ]
br i1 %t216, label %then9622, label %else9623
then9622:
%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 %range9625, label %inrange9626
range9625:
call void @finch_panic_index(ptr @.str.6598, i64 307, i64 1, i64 %t220)
unreachable
inrange9626:
%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 %range9627, label %inrange9628
range9627:
call void @finch_panic_index(ptr @.str.6599, i64 307, i64 2, i64 %t230)
unreachable
inrange9628:
%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 %range9629, label %inrange9630
range9629:
call void @finch_panic_index(ptr @.str.6600, i64 307, i64 3, i64 %t240)
unreachable
inrange9630:
%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 %range9631, label %inrange9632
range9631:
call void @finch_panic_index(ptr @.str.6601, i64 307, i64 4, i64 %t250)
unreachable
inrange9632:
%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 %range9633, label %inrange9634
range9633:
call void @finch_panic_index(ptr @.str.6602, i64 307, i64 5, i64 %t260)
unreachable
inrange9634:
%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 %range9635, label %inrange9636
range9635:
call void @finch_panic_index(ptr @.str.6603, i64 307, i64 6, i64 %t268)
unreachable
inrange9636:
%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 %range9637, label %inrange9638
range9637:
call void @finch_panic_index(ptr @.str.6604, i64 307, i64 7, i64 %t276)
unreachable
inrange9638:
%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 %range9639, label %inrange9640
range9639:
call void @finch_panic_index(ptr @.str.6605, i64 307, i64 8, i64 %t284)
unreachable
inrange9640:
%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 %range9641, label %inrange9642
range9641:
call void @finch_panic_index(ptr @.str.6606, i64 307, i64 9, i64 %t292)
unreachable
inrange9642:
%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.6608, 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 %endif9624
else9623:
%t307 = load { ptr, i64, i64 }, ptr %a37
store { ptr, i64, i64 } %t307, ptr %a308
store { ptr, i64, i64 } { ptr @.str.6609, 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.from9643
logic.from9643:
br i1 %t311, label %logic.rhs9644, label %logic.end9645
logic.rhs9644:
%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.rend9646
logic.rend9646:
br label %logic.end9645
logic.end9645:
%t315 = phi i1 [ false, %logic.from9643 ], [ %t314, %logic.rend9646 ]
br i1 %t315, label %then9647, label %else9648
then9647:
%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 %range9650, label %inrange9651
range9650:
call void @finch_panic_index(ptr @.str.6610, i64 309, i64 1, i64 %t319)
unreachable
inrange9651:
%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 %range9652, label %inrange9653
range9652:
call void @finch_panic_index(ptr @.str.6611, i64 309, i64 2, i64 %t329)
unreachable
inrange9653:
%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 %range9654, label %inrange9655
range9654:
call void @finch_panic_index(ptr @.str.6612, i64 309, i64 3, i64 %t339)
unreachable
inrange9655:
%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 %range9656, label %inrange9657
range9656:
call void @finch_panic_index(ptr @.str.6613, i64 309, i64 4, i64 %t349)
unreachable
inrange9657:
%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 %range9658, label %inrange9659
range9658:
call void @finch_panic_index(ptr @.str.6614, i64 309, i64 5, i64 %t357)
unreachable
inrange9659:
%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 %endif9649
else9648:
%t368 = load { ptr, i64, i64 }, ptr %a37
store { ptr, i64, i64 } %t368, ptr %a369
store { ptr, i64, i64 } { ptr @.str.6615, 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.from9660
logic.from9660:
br i1 %t372, label %logic.rhs9661, label %logic.end9662
logic.rhs9661:
%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.rend9663
logic.rend9663:
br label %logic.end9662
logic.end9662:
%t376 = phi i1 [ false, %logic.from9660 ], [ %t375, %logic.rend9663 ]
br label %logic.from9664
logic.from9664:
br i1 %t376, label %logic.rhs9665, label %logic.end9666
logic.rhs9665:
%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.rend9667
logic.rend9667:
br label %logic.end9666
logic.end9666:
%t381 = phi i1 [ false, %logic.from9664 ], [ %t380, %logic.rend9667 ]
br i1 %t381, label %then9668, label %else9669
then9668:
%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 %range9671, label %inrange9672
range9671:
call void @finch_panic_index(ptr @.str.6616, i64 312, i64 %t388, i64 %t390)
unreachable
inrange9672:
%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 %range9673, label %inrange9674
range9673:
call void @finch_panic_index(ptr @.str.6617, i64 312, i64 3, i64 %t397)
unreachable
inrange9674:
%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 %range9675, label %inrange9676
range9675:
call void @finch_panic_index(ptr @.str.6618, i64 313, i64 %t410, i64 %t412)
unreachable
inrange9676:
%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 %range9677, label %inrange9678
range9677:
call void @finch_panic_index(ptr @.str.6619, i64 313, i64 4, i64 %t419)
unreachable
inrange9678:
%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 %endif9670
else9669:
%t431 = load { ptr, i64, i64 }, ptr %a37
store { ptr, i64, i64 } %t431, ptr %a432
store { ptr, i64, i64 } { ptr @.str.6620, 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.from9679
logic.from9679:
br i1 %t435, label %logic.rhs9680, label %logic.end9681
logic.rhs9680:
%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.rend9682
logic.rend9682:
br label %logic.end9681
logic.end9681:
%t439 = phi i1 [ false, %logic.from9679 ], [ %t438, %logic.rend9682 ]
br i1 %t439, label %then9683, label %else9684
then9683:
%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 %range9686, label %inrange9687
range9686:
call void @finch_panic_index(ptr @.str.6621, i64 315, i64 1, i64 %t443)
unreachable
inrange9687:
%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 %range9688, label %inrange9689
range9688:
call void @finch_panic_index(ptr @.str.6622, i64 315, i64 2, i64 %t453)
unreachable
inrange9689:
%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 %range9690, label %inrange9691
range9690:
call void @finch_panic_index(ptr @.str.6623, i64 315, i64 3, i64 %t463)
unreachable
inrange9691:
%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 %range9692, label %inrange9693
range9692:
call void @finch_panic_index(ptr @.str.6624, i64 315, i64 4, i64 %t473)
unreachable
inrange9693:
%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 %range9694, label %inrange9695
range9694:
call void @finch_panic_index(ptr @.str.6625, i64 315, i64 5, i64 %t481)
unreachable
inrange9695:
%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 %range9696, label %inrange9697
range9696:
call void @finch_panic_index(ptr @.str.6626, i64 315, i64 6, i64 %t489)
unreachable
inrange9697:
%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.6628, 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 %endif9685
else9684:
%t504 = load { ptr, i64, i64 }, ptr %a37
store { ptr, i64, i64 } %t504, ptr %a505
store { ptr, i64, i64 } { ptr @.str.6629, 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.from9698
logic.from9698:
br i1 %t508, label %logic.rhs9699, label %logic.end9700
logic.rhs9699:
%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.rend9701
logic.rend9701:
br label %logic.end9700
logic.end9700:
%t512 = phi i1 [ false, %logic.from9698 ], [ %t511, %logic.rend9701 ]
br i1 %t512, label %then9702, label %endif9704
then9702:
%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 %range9705, label %inrange9706
range9705:
call void @finch_panic_index(ptr @.str.6630, i64 317, i64 1, i64 %t516)
unreachable
inrange9706:
%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 %endif9704
endif9704:
br label %endif9685
endif9685:
br label %endif9670
endif9670:
br label %endif9649
endif9649:
br label %endif9624
endif9624:
br label %endif9601
endif9601:
br label %endif9578
endif9578:
br label %endif9569
else9568:
%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 %then9707, label %endif9709
then9707:
%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
store %S.lsp.Diag %t533, ptr %t534
br label %endif9709
endif9709:
br label %endif9569
endif9569:
br label %each.step9565
each.step9565:
%t535 = load i64, ptr %a10
%t536 = add i64 %t535, 1
store i64 %t536, ptr %a10
br label %each.cond9563
each.end9566:
%t537 = load %S.lsp.Analysis, ptr %a2
store %S.lsp.Analysis %t537, ptr %a538
call void @finch.copy.S_lsp_Analysis(ptr %a539, ptr %a538)
%t540 = load %S.lsp.Analysis, ptr %a539
ret %S.lsp.Analysis %t540
}
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 { 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
%a15 = alloca { ptr, i64, i64 }, align 16
%a16 = alloca i64, align 16
%a18 = alloca { ptr, i64, i64 }, align 16
%a22 = alloca i64, align 16
%a25 = alloca i64, align 16
%a41 = alloca { ptr, i64, i64 }, align 16
%a42 = 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
%a55 = 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
%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
%a70 = 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
%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
%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
%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
%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
%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
%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
%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
%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
%a157 = alloca { ptr, i64, i64 }, align 16
%a158 = 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
%a168 = alloca { ptr, i64, i64 }, align 16
%a171 = alloca %S.lsp.Analysis, align 16
%a179 = alloca { ptr, i64, i64 }, align 16
%a180 = alloca i32, align 16
%a190 = alloca %S.lsp.Analysis, align 16
%a191 = 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
%a223 = alloca { ptr, i64, i64 }, align 16
%a224 = alloca { ptr, i64, i64 }, align 16
%a229 = 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
%a245 = alloca { ptr, i64, i64 }, align 16
%a246 = alloca { ptr, i64, i64 }, align 16
%a251 = alloca { ptr, i64, i64 }, align 16
%a252 = alloca i32, align 16
%a262 = alloca %S.lsp.Analysis, align 16
%a263 = 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
store { ptr, i64, i64 } { ptr @.str.6631, i64 10, 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.6632, i64 1, i64 0 }, 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
call void @finch_str_copy(ptr %a12, ptr %a13)
%t14 = call i64 @finch_shell(ptr %a12)
store { ptr, i64, i64 } { ptr @.str.6633, i64 0, i64 0 }, ptr %a15
store i64 0, ptr %a16
%t17 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2
store { ptr, i64, i64 } zeroinitializer, ptr %a18
%t19 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t17, i32 0, i32 1
%t20 = load i64, ptr %t19
call void @finch_arr_make(ptr %a18, i64 %t20, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t21 = load ptr, ptr %a18
store i64 0, ptr %a22
%t23 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t17, i32 0, i32 2
%t24 = load i64, ptr %t23
store i64 0, ptr %a25
br label %n.cond9725
n.cond9725:
%t26 = load i64, ptr %a25
%t27 = icmp slt i64 %t26, %t24
br i1 %t27, label %n.body9726, label %n.end9727
n.body9726:
%t28 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t17, i32 0, i32 0
%t29 = load ptr, ptr %t28
%t30 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t29, i64 %t26
%t31 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t30, i32 0, i32 0
%t32 = load i64, ptr %t31
%t33 = icmp ne i64 %t32, 0
br i1 %t33, label %entry.live9728, label %entry.next9729
entry.live9728:
%t34 = load i64, ptr %a22
%t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i64 %t34
%t36 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t30, i32 0, i32 1
call void @finch_str_copy(ptr %t35, ptr %t36)
%t37 = add i64 %t34, 1
store i64 %t37, ptr %a22
br label %entry.next9729
entry.next9729:
%t38 = load i64, ptr %a25
%t39 = add i64 %t38, 1
store i64 %t39, ptr %a25
br label %n.cond9725
n.end9727:
%t40 = load { ptr, i64, i64 }, ptr %a18
store { ptr, i64, i64 } %t40, ptr %a41
store i64 0, ptr %a42
br label %each.cond9730
each.cond9730:
%t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a41, i32 0, i32 1
%t44 = load i64, ptr %t43
%t45 = load i64, ptr %a42
%t46 = icmp slt i64 %t45, %t44
br i1 %t46, label %each.body9731, label %each.end9733
each.body9731:
%t47 = load ptr, ptr %a41
%t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i64 %t45
%t49 = load { ptr, i64, i64 }, ptr %t48
store { ptr, i64, i64 } %t49, ptr %a50
%t51 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1
%t52 = load { ptr, i64, i64 }, ptr %t51
store { ptr, i64, i64 } %t52, ptr %a54
store { ptr, i64, i64 } { ptr @.str.6634, i64 4, i64 0 }, ptr %a55
call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55)
%t56 = load { ptr, i64, i64 }, ptr %a53
%t57 = load i64, ptr %a16
call void @finch_str_from_int(ptr %a58, i64 %t57)
%t59 = load { ptr, i64, i64 }, ptr %a58
store { ptr, i64, i64 } %t56, 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.6635, i64 4, i64 0 }, 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 %a68
%t69 = load { ptr, i64, i64 }, ptr %a68
store { ptr, i64, i64 } %t69, ptr %a70
%t71 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2
%t72 = load { ptr, i64, i64 }, ptr %a50
store { ptr, i64, i64 } %t72, ptr %a73
%t74 = call i64 @finch_map_find(ptr %t71, ptr %a73, 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)
%t75 = icmp slt i64 %t74, 0
br i1 %t75, label %map.missing9734, label %map.found9735
map.missing9734:
store { ptr, i64, i64 } zeroinitializer, ptr %a76
store { ptr, i64, i64 } %t72, ptr %a77
call void @finch_buf_str(ptr %a76, ptr %a77, i32 1)
call void @finch_map_missing(ptr @.str.6636, i64 333, ptr %a76)
unreachable
map.found9735:
%t78 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t71, i32 0, i32 0
%t79 = load ptr, ptr %t78
%t80 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t79, i64 %t74
%t81 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t80, i32 0, i32 2
%t82 = load { ptr, i64, i64 }, ptr %t81
store { ptr, i64, i64 } %t82, ptr %a83
%t84 = call i32 @finch_write_file(ptr %a70, ptr %a83)
%t85 = icmp ne i32 %t84, 0
%t86 = load { ptr, i64, i64 }, ptr %a15
store { ptr, i64, i64 } %t86, ptr %a88
store { ptr, i64, i64 } { ptr @.str.6637, i64 12, i64 0 }, ptr %a89
call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89)
%t90 = load { ptr, i64, i64 }, ptr %a87
%t91 = load { ptr, i64, i64 }, ptr %a50
store { ptr, i64, i64 } %t90, 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.6638, i64 1, i64 0 }, ptr %a98
call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98)
%t99 = load { ptr, i64, i64 }, ptr %a96
%t100 = load { ptr, i64, i64 }, ptr %a68
store { ptr, i64, i64 } %t99, ptr %a102
store { ptr, i64, i64 } %t100, ptr %a103
call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103)
%t104 = load { ptr, i64, i64 }, ptr %a101
store { ptr, i64, i64 } %t104, ptr %a106
store { ptr, i64, i64 } { ptr @.str.6639, i64 1, 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 %a15
%t109 = load i64, ptr %a16
%t110 = add i64 %t109, 1
store i64 %t110, ptr %a16
br label %each.step9732
each.step9732:
%t111 = load i64, ptr %a42
%t112 = add i64 %t111, 1
store i64 %t112, ptr %a42
br label %each.cond9730
each.end9733:
%t113 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1
%t114 = load { ptr, i64, i64 }, ptr %t113
store { ptr, i64, i64 } %t114, ptr %a116
store { ptr, i64, i64 } { ptr @.str.6640, i64 8, i64 0 }, 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 %a119
%t120 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 0
%t121 = load { ptr, i64, i64 }, ptr %t120
store { ptr, i64, i64 } { ptr @.str.6641, 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.6642, i64 9, i64 0 }, ptr %a128
call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128)
%t129 = load { ptr, i64, i64 }, ptr %a126
%t130 = load { ptr, i64, i64 }, ptr %a1
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)
%t134 = load { ptr, i64, i64 }, ptr %a131
store { ptr, i64, i64 } %t134, ptr %a136
store { ptr, i64, i64 } { ptr @.str.6643, 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 = load { ptr, i64, i64 }, ptr %a15
store { ptr, i64, i64 } %t138, ptr %a141
store { ptr, i64, i64 } %t139, ptr %a142
call void @finch_str_concat(ptr %a140, ptr %a141, ptr %a142)
%t143 = load { ptr, i64, i64 }, ptr %a140
store { ptr, i64, i64 } %t143, ptr %a145
store { ptr, i64, i64 } { ptr @.str.6644, i64 4, 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 %a119
store { ptr, i64, i64 } %t147, 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.6645, i64 6, i64 0 }, ptr %a155
call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155)
%t156 = load { ptr, i64, i64 }, ptr %a153
store { ptr, i64, i64 } %t156, ptr %a158
call void @finch_str_copy(ptr %a157, ptr %a158)
%t159 = call i64 @finch_shell(ptr %a157)
%t160 = load { ptr, i64, i64 }, ptr %a119
store { ptr, i64, i64 } %t160, ptr %a161
store { ptr, i64, i64 } zeroinitializer, ptr %a162
store { ptr, i64, i64 } zeroinitializer, ptr %a163
%t164 = call i32 @finch_try_read_file(ptr %a162, ptr %a161, ptr %a163)
%t165 = icmp eq i32 %t164, 0
%t166 = load { ptr, i64, i64 }, ptr %a163
%t167 = load { ptr, i64, i64 }, ptr %a162
br i1 %t165, label %or.failed9736, label %or.ok9737
or.failed9736:
store { ptr, i64, i64 } %t166, ptr %a168
br label %or.bend9738
or.bend9738:
br label %or.end9739
or.ok9737:
br label %or.end9739
or.end9739:
%t169 = phi { ptr, i64, i64 } [ { ptr @.str.6646, i64 0, i64 0 }, %or.bend9738 ], [ %t167, %or.ok9737 ]
%t170 = call %S.lsp.Analysis @finch.lsp.parseOutput({ ptr, i64, i64 } %t169)
store %S.lsp.Analysis %t170, ptr %a171
%t172 = getelementptr inbounds %S.lsp.Analysis, ptr %a171, i32 0, i32 6
%t173 = getelementptr inbounds %S.lsp.Diag, ptr %t172, i32 0, i32 0
%t174 = load i1, ptr %t173
%t175 = xor i1 %t174, true
br i1 %t175, label %then9740, label %else9741
then9740:
%t176 = load %S.lsp.Analysis, ptr %a171
%t177 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4
%t178 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t178, ptr %a179
store i32 0, ptr %a180
%t181 = call i64 @finch_map_slot(ptr %t177, ptr %a179, 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 %a180)
%t182 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t177, i32 0, i32 0
%t183 = load ptr, ptr %t182
%t184 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t183, i64 %t181
%t185 = load i32, ptr %a180
%t186 = icmp ne i32 %t185, 0
br i1 %t186, label %map.new9743, label %map.have9744
map.new9743:
%t187 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t184, i32 0, i32 1
call void @finch_str_copy(ptr %t187, ptr %a179)
%t188 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t184, i32 0, i32 2
store %S.lsp.Analysis zeroinitializer, ptr %t188
br label %map.have9744
map.have9744:
%t189 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t184, i32 0, i32 2
store %S.lsp.Analysis %t176, ptr %a190
call void @finch.copy.S_lsp_Analysis(ptr %a191, ptr %a190)
%t192 = load %S.lsp.Analysis, ptr %a191
store %S.lsp.Analysis %t192, ptr %t189
br label %endif9742
else9741:
%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 %then9745, label %endif9747
then9745:
%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.missing9748, label %map.found9749
map.missing9748:
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.6647, i64 344, ptr %a203)
unreachable
map.found9749:
%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 %a171, 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
store { ptr, i64, i64 } %t219, ptr %t216
%t220 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 3
%t221 = load { ptr, i64, i64 }, ptr %t220
%t222 = getelementptr inbounds %S.lsp.Analysis, ptr %a171, i32 0, i32 3
store { ptr, i64, i64 } %t221, ptr %a223
call void @finch.copy.arr_S_lsp_StructRec(ptr %a224, ptr %a223)
%t225 = load { ptr, i64, i64 }, ptr %a224
store { ptr, i64, i64 } %t225, ptr %t222
%t226 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 4
%t227 = load { ptr, i64, i64 }, ptr %t226
%t228 = getelementptr inbounds %S.lsp.Analysis, ptr %a171, i32 0, i32 4
store { ptr, i64, i64 } %t227, ptr %a229
call void @finch.copy.arr_S_lsp_EnumRec(ptr %a230, ptr %a229)
%t231 = load { ptr, i64, i64 }, ptr %a230
store { ptr, i64, i64 } %t231, ptr %t228
%t232 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 1
%t233 = load { ptr, i64, i64 }, ptr %t232
%t234 = getelementptr inbounds %S.lsp.Analysis, ptr %a171, i32 0, i32 1
store { ptr, i64, i64 } %t233, ptr %a235
call void @finch.copy.arr_S_lsp_VarRec(ptr %a236, ptr %a235)
%t237 = load { ptr, i64, i64 }, ptr %a236
store { ptr, i64, i64 } %t237, ptr %t234
%t238 = getelementptr inbounds %S.lsp.Analysis, ptr %a171, i32 0, i32 5
%t239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t238, i32 0, i32 1
%t240 = load i64, ptr %t239
%t241 = icmp eq i64 %t240, 0
br i1 %t241, label %then9750, label %endif9752
then9750:
%t242 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 5
%t243 = load { ptr, i64, i64 }, ptr %t242
%t244 = getelementptr inbounds %S.lsp.Analysis, ptr %a171, i32 0, i32 5
store { ptr, i64, i64 } %t243, 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 %t244
br label %endif9752
endif9752:
br label %endif9747
endif9747:
br label %endif9742
endif9742:
%t248 = load %S.lsp.Analysis, ptr %a171
%t249 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3
%t250 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t250, ptr %a251
store i32 0, ptr %a252
%t253 = call i64 @finch_map_slot(ptr %t249, ptr %a251, 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 %a252)
%t254 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t249, i32 0, i32 0
%t255 = load ptr, ptr %t254
%t256 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t255, i64 %t253
%t257 = load i32, ptr %a252
%t258 = icmp ne i32 %t257, 0
br i1 %t258, label %map.new9753, label %map.have9754
map.new9753:
%t259 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t256, i32 0, i32 1
call void @finch_str_copy(ptr %t259, ptr %a251)
%t260 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t256, i32 0, i32 2
store %S.lsp.Analysis zeroinitializer, ptr %t260
br label %map.have9754
map.have9754:
%t261 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t256, i32 0, i32 2
store %S.lsp.Analysis %t248, ptr %a262
call void @finch.copy.S_lsp_Analysis(ptr %a263, ptr %a262)
%t264 = load %S.lsp.Analysis, ptr %a263
store %S.lsp.Analysis %t264, ptr %t261
%t265 = load { ptr, i64, i64 }, ptr %a1
%t266 = load %S.lsp.Analysis, ptr %a171
call void @finch.lsp.Server.publish(ptr %self, { ptr, i64, i64 } %t265, %S.lsp.Analysis %t266)
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
%a107 = alloca { ptr, i64, i64 }, align 16
%a108 = alloca { ptr, i64, i64 }, align 16
%a115 = alloca %S.json.Json, align 16
%a125 = alloca { ptr, i64, i64 }, align 16
%a126 = 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.cond9755
each.cond9755:
%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.body9756, label %each.end9758
each.body9756:
%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.cond9759
find.cond9759:
%t30 = load i64, ptr %a29
%t31 = icmp slt i64 %t30, %t27
br i1 %t31, label %find.body9760, label %find.end9763
find.body9760:
%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.hit9761, label %find.next9762
find.hit9761:
store i64 %t30, ptr %a26
br label %find.end9763
find.next9762:
%t38 = add i64 %t30, 1
store i64 %t38, ptr %a29
br label %find.cond9759
find.end9763:
%t39 = load i64, ptr %a26
%t40 = icmp sge i64 %t39, 0
%t41 = xor i1 %t40, true
br i1 %t41, label %then9764, label %endif9766
then9764:
%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 %endif9766
endif9766:
br label %each.step9757
each.step9757:
%t51 = load i64, ptr %a15
%t52 = add i64 %t51, 1
store i64 %t52, ptr %a15
br label %each.cond9755
each.end9758:
store { ptr, i64, i64 } zeroinitializer, ptr %a53
store i64 0, ptr %a54
br label %each.cond9767
each.cond9767:
%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.body9768, label %each.end9770
each.body9768:
%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.from9771
logic.from9771:
br i1 %t67, label %logic.rhs9772, label %logic.end9773
logic.rhs9772:
%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.rend9774
logic.rend9774:
br label %logic.end9773
logic.end9773:
%t76 = phi i1 [ false, %logic.from9771 ], [ %t75, %logic.rend9774 ]
br i1 %t76, label %then9775, label %endif9777
then9775:
%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 %then9778, label %endif9780
then9778:
store i64 0, ptr %a81
br label %endif9780
endif9780:
%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 %then9781, label %endif9783
then9781:
store i64 0, ptr %a88
br label %endif9783
endif9783:
%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.6648, i64 5, i64 0 }, %S.json.Json %t97)
%t98 = call %S.json.Json @finch.lsp.num(i64 1)
call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.6649, i64 8, i64 0 }, %S.json.Json %t98)
%t99 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6651, i64 5, i64 0 })
call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.6650, i64 6, i64 0 }, %S.json.Json %t99)
%t100 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6
%t101 = getelementptr inbounds %S.lsp.Diag, ptr %t100, i32 0, i32 4
%t102 = load { ptr, i64, i64 }, ptr %t101
%t103 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t102)
call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.6652, i64 7, i64 0 }, %S.json.Json %t103)
%t104 = load %S.json.Json, ptr %a92
call void @finch.json.Json.push(ptr %a64, %S.json.Json %t104)
%t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %a53, i32 0, i32 1
%t106 = load { ptr, i64, i64 }, ptr %a62
store { ptr, i64, i64 } %t106, ptr %a107
call void @finch_str_copy(ptr %a108, ptr %a107)
%t109 = load { ptr, i64, i64 }, ptr %a108
%t110 = load i64, ptr %t105
%t111 = add i64 %t110, 1
call void @finch_arr_reserve(ptr %a53, i64 %t111, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t112 = load ptr, ptr %a53
%t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 %t110
store { ptr, i64, i64 } %t109, ptr %t113
store i64 %t111, ptr %t105
br label %endif9777
endif9777:
%t114 = call %S.json.Json @finch.json.new_object()
store %S.json.Json %t114, ptr %a115
%t116 = load { ptr, i64, i64 }, ptr %a62
%t117 = call { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %t116)
%t118 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t117)
call void @finch.json.Json.set(ptr %a115, { ptr, i64, i64 } { ptr @.str.6653, i64 3, i64 0 }, %S.json.Json %t118)
%t119 = load %S.json.Json, ptr %a64
call void @finch.json.Json.set(ptr %a115, { ptr, i64, i64 } { ptr @.str.6654, i64 11, i64 0 }, %S.json.Json %t119)
%t120 = load %S.json.Json, ptr %a115
call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.6655, i64 31, i64 0 }, %S.json.Json %t120)
br label %each.step9769
each.step9769:
%t121 = load i64, ptr %a54
%t122 = add i64 %t121, 1
store i64 %t122, ptr %a54
br label %each.cond9767
each.end9770:
%t123 = load { ptr, i64, i64 }, ptr %a53
%t124 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 5
store { ptr, i64, i64 } %t123, ptr %a125
call void @finch.copy.arr_str(ptr %a126, ptr %a125)
%t127 = load { ptr, i64, i64 }, ptr %a126
store { ptr, i64, i64 } %t127, ptr %t124
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.cond9784
for.cond9784:
%t9 = load i64, ptr %a8
%t10 = icmp slt i64 %t9, %t7
br i1 %t10, label %for.body9785, label %for.end9787
for.body9785:
%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 %range9788, label %inrange9789
range9788:
call void @finch_panic_index(ptr @.str.6656, i64 397, i64 %t12, i64 %t14)
unreachable
inrange9789:
%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.from9790
logic.from9790:
br i1 %t26, label %logic.rhs9791, label %logic.end9792
logic.rhs9791:
%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.rend9793
logic.rend9793:
br label %logic.end9792
logic.end9792:
%t31 = phi i1 [ false, %logic.from9790 ], [ %t30, %logic.rend9793 ]
br label %logic.from9794
logic.from9794:
br i1 %t31, label %logic.rhs9795, label %logic.end9796
logic.rhs9795:
%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.rend9797
logic.rend9797:
br label %logic.end9796
logic.end9796:
%t39 = phi i1 [ false, %logic.from9794 ], [ %t38, %logic.rend9797 ]
br label %logic.from9798
logic.from9798:
br i1 %t39, label %logic.rhs9799, label %logic.end9800
logic.rhs9799:
%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.rend9801
logic.rend9801:
br label %logic.end9800
logic.end9800:
%t47 = phi i1 [ false, %logic.from9798 ], [ %t46, %logic.rend9801 ]
br i1 %t47, label %then9802, label %endif9804
then9802:
%t48 = load i64, ptr %a8
ret i64 %t48
endif9804:
br label %for.step9786
for.step9786:
%t49 = load i64, ptr %a8
%t50 = add i64 %t49, 1
store i64 %t50, ptr %a8
br label %for.cond9784
for.end9787:
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
%a28 = alloca %S.json.Json, align 16
%a31 = alloca %S.json.Json, align 16
%a32 = 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 %then9805, label %endif9807
then9805:
%t13 = call %S.json.Json @finch.json.new_null()
ret %S.json.Json %t13
endif9807:
%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.6658, i64 8, i64 0 })
call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.6657, i64 4, i64 0 }, %S.json.Json %t16)
%t17 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0
%t18 = load i64, ptr %a10
%t19 = load { ptr, i64, i64 }, ptr %t17
%t20 = extractvalue { ptr, i64, i64 } %t19, 1
%t21 = icmp uge i64 %t18, %t20
br i1 %t21, label %range9808, label %inrange9809
range9808:
call void @finch_panic_index(ptr @.str.6660, i64 412, i64 %t18, i64 %t20)
unreachable
inrange9809:
%t22 = extractvalue { ptr, i64, i64 } %t19, 0
%t23 = getelementptr inbounds %S.lsp.Ref, ptr %t22, i64 %t18
%t24 = getelementptr inbounds %S.lsp.Ref, ptr %t23, i32 0, i32 7
%t25 = load { ptr, i64, i64 }, ptr %t24
%t26 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t25)
call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.6659, i64 5, i64 0 }, %S.json.Json %t26)
%t27 = call %S.json.Json @finch.json.new_object()
store %S.json.Json %t27, ptr %a28
%t29 = load %S.json.Json, ptr %a15
call void @finch.json.Json.set(ptr %a28, { ptr, i64, i64 } { ptr @.str.6661, i64 8, i64 0 }, %S.json.Json %t29)
%t30 = load %S.json.Json, ptr %a28
store %S.json.Json %t30, ptr %a31
call void @finch.copy.S_json_Json(ptr %a32, ptr %a31)
%t33 = load %S.json.Json, ptr %a32
ret %S.json.Json %t33
}
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
%a55 = 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.from9810
logic.from9810:
br i1 %t12, label %logic.end9812, label %logic.rhs9811
logic.rhs9811:
%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 %range9813, label %inrange9814
range9813:
call void @finch_panic_index(ptr @.str.6662, i64 420, i64 %t14, i64 %t16)
unreachable
inrange9814:
%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.rend9815
logic.rend9815:
br label %logic.end9812
logic.end9812:
%t24 = phi i1 [ true, %logic.from9810 ], [ %t23, %logic.rend9815 ]
br i1 %t24, label %then9816, label %endif9818
then9816:
%t25 = call %S.json.Json @finch.json.new_null()
ret %S.json.Json %t25
endif9818:
%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 %range9819, label %inrange9820
range9819:
call void @finch_panic_index(ptr @.str.6663, i64 423, i64 %t27, i64 %t29)
unreachable
inrange9820:
%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)
call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.6664, i64 3, i64 0 }, %S.json.Json %t43)
%t44 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 5
%t45 = load i64, ptr %t44
%t46 = sub i64 %t45, 1
%t47 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 6
%t48 = load i64, ptr %t47
%t49 = sub i64 %t48, 1
%t50 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 6
%t51 = load i64, ptr %t50
%t52 = sub i64 %t51, 1
%t53 = call %S.json.Json @finch.lsp.range(i64 %t46, i64 %t49, i64 %t52)
call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.6665, i64 5, i64 0 }, %S.json.Json %t53)
%t54 = load %S.json.Json, ptr %a39
store %S.json.Json %t54, ptr %a55
call void @finch.copy.S_json_Json(ptr %a56, ptr %a55)
%t57 = load %S.json.Json, ptr %a56
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
%a57 = alloca i64, align 16
%a65 = alloca %S.lsp.StructRec, align 16
%a69 = alloca { ptr, i64, i64 }, align 16
%a70 = alloca { ptr, i64, i64 }, align 16
%a90 = alloca i64, align 16
%a98 = alloca %S.lsp.EnumRec, align 16
%a102 = alloca { ptr, i64, i64 }, align 16
%a103 = alloca { ptr, i64, i64 }, align 16
%a123 = alloca %S.json.Json, align 16
%a124 = 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.cond9821
each.cond9821:
%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.body9822, label %each.end9824
each.body9822:
%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 %then9825, label %endif9827
then9825:
br label %each.step9823
endif9827:
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 %then9828, label %endif9830
then9828:
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.6666, 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)
%t44 = load { ptr, i64, i64 }, ptr %a41
store { ptr, i64, i64 } %t44, ptr %a28
br label %endif9830
endif9830:
%t45 = load { ptr, i64, i64 }, ptr %a28
%t46 = load i64, ptr %a22
%t47 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 4
%t48 = load i64, ptr %t47
%t49 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 5
%t50 = load i64, ptr %t49
%t51 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 6
%t52 = load i64, ptr %t51
%t53 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t45, i64 %t46, i64 %t48, i64 %t50, i64 %t52)
call void @finch.json.Json.push(ptr %a4, %S.json.Json %t53)
br label %each.step9823
each.step9823:
%t54 = load i64, ptr %a6
%t55 = add i64 %t54, 1
store i64 %t55, ptr %a6
br label %each.cond9821
each.end9824:
%t56 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3
store i64 0, ptr %a57
br label %each.cond9831
each.cond9831:
%t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t56, 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.body9832, label %each.end9834
each.body9832:
%t62 = load ptr, ptr %t56
%t63 = getelementptr inbounds %S.lsp.StructRec, ptr %t62, i64 %t60
%t64 = load %S.lsp.StructRec, ptr %t63
store %S.lsp.StructRec %t64, ptr %a65
%t66 = getelementptr inbounds %S.lsp.StructRec, ptr %a65, i32 0, i32 2
%t67 = load { ptr, i64, i64 }, ptr %t66
%t68 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t67, ptr %a69
store { ptr, i64, i64 } %t68, ptr %a70
%t71 = call i32 @finch_str_eq(ptr %a69, ptr %a70)
%t72 = icmp ne i32 %t71, 0
br i1 %t72, label %then9835, label %endif9837
then9835:
%t73 = getelementptr inbounds %S.lsp.StructRec, ptr %a65, i32 0, i32 1
%t74 = load { ptr, i64, i64 }, ptr %t73
%t75 = getelementptr inbounds %S.lsp.StructRec, ptr %a65, i32 0, i32 3
%t76 = load i64, ptr %t75
%t77 = getelementptr inbounds %S.lsp.StructRec, ptr %a65, i32 0, i32 4
%t78 = load i64, ptr %t77
%t79 = getelementptr inbounds %S.lsp.StructRec, ptr %a65, i32 0, i32 3
%t80 = load i64, ptr %t79
%t81 = getelementptr inbounds %S.lsp.StructRec, ptr %a65, i32 0, i32 5
%t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %t81, i32 0, i32 1
%t83 = load i64, ptr %t82
%t84 = add i64 %t80, %t83
%t85 = add i64 %t84, 1
%t86 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t74, i64 23, i64 %t76, i64 %t78, i64 %t85)
call void @finch.json.Json.push(ptr %a4, %S.json.Json %t86)
br label %endif9837
endif9837:
br label %each.step9833
each.step9833:
%t87 = load i64, ptr %a57
%t88 = add i64 %t87, 1
store i64 %t88, ptr %a57
br label %each.cond9831
each.end9834:
%t89 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4
store i64 0, ptr %a90
br label %each.cond9838
each.cond9838:
%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.body9839, label %each.end9841
each.body9839:
%t95 = load ptr, ptr %t89
%t96 = getelementptr inbounds %S.lsp.EnumRec, ptr %t95, i64 %t93
%t97 = load %S.lsp.EnumRec, ptr %t96
store %S.lsp.EnumRec %t97, ptr %a98
%t99 = getelementptr inbounds %S.lsp.EnumRec, ptr %a98, i32 0, i32 2
%t100 = load { ptr, i64, i64 }, ptr %t99
%t101 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } %t100, ptr %a102
store { ptr, i64, i64 } %t101, ptr %a103
%t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103)
%t105 = icmp ne i32 %t104, 0
br i1 %t105, label %then9842, label %endif9844
then9842:
%t106 = getelementptr inbounds %S.lsp.EnumRec, ptr %a98, i32 0, i32 1
%t107 = load { ptr, i64, i64 }, ptr %t106
%t108 = getelementptr inbounds %S.lsp.EnumRec, ptr %a98, i32 0, i32 3
%t109 = load i64, ptr %t108
%t110 = getelementptr inbounds %S.lsp.EnumRec, ptr %a98, i32 0, i32 4
%t111 = load i64, ptr %t110
%t112 = getelementptr inbounds %S.lsp.EnumRec, ptr %a98, i32 0, i32 3
%t113 = load i64, ptr %t112
%t114 = getelementptr inbounds %S.lsp.EnumRec, ptr %a98, i32 0, i32 5
%t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1
%t116 = load i64, ptr %t115
%t117 = add i64 %t113, %t116
%t118 = add i64 %t117, 1
%t119 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t107, i64 10, i64 %t109, i64 %t111, i64 %t118)
call void @finch.json.Json.push(ptr %a4, %S.json.Json %t119)
br label %endif9844
endif9844:
br label %each.step9840
each.step9840:
%t120 = load i64, ptr %a90
%t121 = add i64 %t120, 1
store i64 %t121, ptr %a90
br label %each.cond9838
each.end9841:
%t122 = load %S.json.Json, ptr %a4
store %S.json.Json %t122, ptr %a123
call void @finch.copy.S_json_Json(ptr %a124, ptr %a123)
%t125 = load %S.json.Json, ptr %a124
ret %S.json.Json %t125
}
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
%a13 = alloca %S.json.Json, align 16
%a28 = alloca %S.json.Json, align 16
%a29 = 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.6667, i64 4, i64 0 }, %S.json.Json %t9)
%t10 = load i64, ptr %a2
%t11 = call %S.json.Json @finch.lsp.num(i64 %t10)
call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.6668, i64 4, i64 0 }, %S.json.Json %t11)
%t12 = call %S.json.Json @finch.json.new_object()
store %S.json.Json %t12, ptr %a13
%t14 = load i64, ptr %a3
%t15 = sub i64 %t14, 1
%t16 = call %S.json.Json @finch.lsp.position(i64 %t15, i64 0)
call void @finch.json.Json.set(ptr %a13, { ptr, i64, i64 } { ptr @.str.6669, i64 5, i64 0 }, %S.json.Json %t16)
%t17 = load i64, ptr %a5
%t18 = call %S.json.Json @finch.lsp.position(i64 %t17, i64 0)
call void @finch.json.Json.set(ptr %a13, { ptr, i64, i64 } { ptr @.str.6670, i64 3, i64 0 }, %S.json.Json %t18)
%t19 = load %S.json.Json, ptr %a13
call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.6671, i64 5, i64 0 }, %S.json.Json %t19)
%t20 = load i64, ptr %a3
%t21 = sub i64 %t20, 1
%t22 = load i64, ptr %a4
%t23 = sub i64 %t22, 1
%t24 = load i64, ptr %a4
%t25 = sub i64 %t24, 1
%t26 = call %S.json.Json @finch.lsp.range(i64 %t21, i64 %t23, i64 %t25)
call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.6672, i64 14, i64 0 }, %S.json.Json %t26)
%t27 = load %S.json.Json, ptr %a7
store %S.json.Json %t27, ptr %a28
call void @finch.copy.S_json_Json(ptr %a29, ptr %a28)
%t30 = load %S.json.Json, ptr %a29
ret %S.json.Json %t30
}
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
%a20 = alloca %S.json.Json, align 16
%a26 = alloca %S.json.Json, align 16
%a27 = 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.6673, i64 5, i64 0 }, %S.json.Json %t8)
%t9 = load i64, ptr %a2
%t10 = call %S.json.Json @finch.lsp.num(i64 %t9)
call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.6674, i64 4, i64 0 }, %S.json.Json %t10)
%t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1
%t12 = load i64, ptr %t11
%t13 = icmp sgt i64 %t12, 0
br i1 %t13, label %then9845, label %endif9847
then9845:
%t14 = load { ptr, i64, i64 }, ptr %a3
%t15 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t14)
call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.6675, i64 6, i64 0 }, %S.json.Json %t15)
br label %endif9847
endif9847:
%t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1
%t17 = load i64, ptr %t16
%t18 = icmp sgt i64 %t17, 0
br i1 %t18, label %then9848, label %endif9850
then9848:
%t19 = call %S.json.Json @finch.json.new_object()
store %S.json.Json %t19, ptr %a20
%t21 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6677, i64 8, i64 0 })
call void @finch.json.Json.set(ptr %a20, { ptr, i64, i64 } { ptr @.str.6676, i64 4, i64 0 }, %S.json.Json %t21)
%t22 = load { ptr, i64, i64 }, ptr %a4
%t23 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t22)
call void @finch.json.Json.set(ptr %a20, { ptr, i64, i64 } { ptr @.str.6678, i64 5, i64 0 }, %S.json.Json %t23)
%t24 = load %S.json.Json, ptr %a20
call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.6679, i64 13, i64 0 }, %S.json.Json %t24)
br label %endif9850
endif9850:
%t25 = load %S.json.Json, ptr %a6
store %S.json.Json %t25, ptr %a26
call void @finch.copy.S_json_Json(ptr %a27, ptr %a26)
%t28 = load %S.json.Json, ptr %a27
ret %S.json.Json %t28
}
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.from9851
logic.from9851:
br i1 %t3, label %logic.rhs9852, label %logic.end9853
logic.rhs9852:
%t4 = load i8, ptr %a1
%t5 = icmp ule i8 %t4, 122
br label %logic.rend9854
logic.rend9854:
br label %logic.end9853
logic.end9853:
%t6 = phi i1 [ false, %logic.from9851 ], [ %t5, %logic.rend9854 ]
br label %logic.from9855
logic.from9855:
br i1 %t6, label %logic.end9857, label %logic.rhs9856
logic.rhs9856:
%t7 = load i8, ptr %a1
%t8 = icmp uge i8 %t7, 65
br label %logic.from9858
logic.from9858:
br i1 %t8, label %logic.rhs9859, label %logic.end9860
logic.rhs9859:
%t9 = load i8, ptr %a1
%t10 = icmp ule i8 %t9, 90
br label %logic.rend9861
logic.rend9861:
br label %logic.end9860
logic.end9860:
%t11 = phi i1 [ false, %logic.from9858 ], [ %t10, %logic.rend9861 ]
br label %logic.rend9862
logic.rend9862:
br label %logic.end9857
logic.end9857:
%t12 = phi i1 [ true, %logic.from9855 ], [ %t11, %logic.rend9862 ]
br label %logic.from9863
logic.from9863:
br i1 %t12, label %logic.end9865, label %logic.rhs9864
logic.rhs9864:
%t13 = load i8, ptr %a1
%t14 = icmp uge i8 %t13, 48
br label %logic.from9866
logic.from9866:
br i1 %t14, label %logic.rhs9867, label %logic.end9868
logic.rhs9867:
%t15 = load i8, ptr %a1
%t16 = icmp ule i8 %t15, 57
br label %logic.rend9869
logic.rend9869:
br label %logic.end9868
logic.end9868:
%t17 = phi i1 [ false, %logic.from9866 ], [ %t16, %logic.rend9869 ]
br label %logic.rend9870
logic.rend9870:
br label %logic.end9865
logic.end9865:
%t18 = phi i1 [ true, %logic.from9863 ], [ %t17, %logic.rend9870 ]
br label %logic.from9871
logic.from9871:
br i1 %t18, label %logic.end9873, label %logic.rhs9872
logic.rhs9872:
%t19 = load i8, ptr %a1
%t20 = icmp eq i8 %t19, 95
br label %logic.rend9874
logic.rend9874:
br label %logic.end9873
logic.end9873:
%t21 = phi i1 [ true, %logic.from9871 ], [ %t20, %logic.rend9874 ]
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
store ptr %p0, ptr %a1
store { ptr, i64, i64 } %p1, ptr %a2
store i64 0, ptr %a3
br label %each.cond9875
each.cond9875:
%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.body9876, label %each.end9878
each.body9876:
%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.6681, 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 %then9879, label %endif9881
then9879:
store i64 5, ptr %a12
br label %endif9881
endif9881:
%t20 = load ptr, ptr %a1
%t21 = icmp eq ptr %t20, null
br i1 %t21, label %panic9882, label %ok9883
panic9882:
call void @finch_panic(ptr @.str.6682, i64 497, ptr @.str.6683)
unreachable
ok9883:
%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)
br label %each.step9877
each.step9877:
%t30 = load i64, ptr %a3
%t31 = add i64 %t30, 1
store i64 %t31, ptr %a3
br label %each.cond9875
each.end9878:
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
%a49 = alloca %S.lsp.VarRec, align 16
%a50 = 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.cond9884
each.cond9884:
%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.body9885, label %each.end9887
each.body9885:
%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.from9888
logic.from9888:
br i1 %t22, label %logic.rhs9889, label %logic.end9890
logic.rhs9889:
%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.rend9891
logic.rend9891:
br label %logic.end9890
logic.end9890:
%t27 = phi i1 [ false, %logic.from9888 ], [ %t26, %logic.rend9891 ]
br label %logic.from9892
logic.from9892:
br i1 %t27, label %logic.rhs9893, label %logic.end9894
logic.rhs9893:
%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.rend9895
logic.rend9895:
br label %logic.end9894
logic.end9894:
%t33 = phi i1 [ false, %logic.from9892 ], [ %t32, %logic.rend9895 ]
br label %logic.from9896
logic.from9896:
br i1 %t33, label %logic.rhs9897, label %logic.end9898
logic.rhs9897:
%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.rend9899
logic.rend9899:
br label %logic.end9898
logic.end9898:
%t41 = phi i1 [ false, %logic.from9896 ], [ %t40, %logic.rend9899 ]
br i1 %t41, label %then9900, label %endif9902
then9900:
%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
store %S.lsp.VarRec %t45, ptr %a5
br label %endif9902
endif9902:
br label %each.step9886
each.step9886:
%t46 = load i64, ptr %a7
%t47 = add i64 %t46, 1
store i64 %t47, ptr %a7
br label %each.cond9884
each.end9887:
%t48 = load %S.lsp.VarRec, ptr %a5
store %S.lsp.VarRec %t48, ptr %a49
call void @finch.copy.S_lsp_VarRec(ptr %a50, ptr %a49)
%t51 = load %S.lsp.VarRec, ptr %a50
ret %S.lsp.VarRec %t51
}
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
%a120 = alloca i64, align 16
%a123 = alloca i64, align 16
%a128 = alloca { ptr, i64, i64 }, align 16
%a129 = alloca { ptr, i64, i64 }, align 16
%a136 = alloca i64, align 16
%a144 = alloca %S.lsp.FnRec, align 16
%a148 = alloca { ptr, i64, i64 }, align 16
%a149 = alloca { ptr, i64, i64 }, align 16
%a165 = alloca i64, align 16
%a173 = alloca %S.lsp.StructRec, align 16
%a177 = alloca { ptr, i64, i64 }, align 16
%a178 = 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
%a193 = alloca i64, align 16
%a201 = alloca %S.lsp.EnumRec, align 16
%a205 = alloca { ptr, i64, i64 }, align 16
%a206 = 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
%a223 = alloca i64, align 16
%a231 = alloca %S.lsp.EnumRec, 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
%a252 = alloca i64, align 16
%a260 = 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
%a271 = alloca { ptr, i64, i64 }, align 16
%a286 = alloca { ptr, i64, i64 }, align 16
%a287 = alloca { ptr, i64, i64 }, align 16
%a289 = 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
%a299 = alloca { ptr, i64, i64 }, align 16
%a300 = 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
%a314 = 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
%a325 = alloca { ptr, i64, i64 }, align 16
%a326 = 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
%a339 = alloca { ptr, i64, i64 }, align 16
%a340 = 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
%a352 = alloca { ptr, i64, i64 }, align 16
%a353 = alloca { ptr, i64, i64 }, align 16
%a355 = alloca { ptr, i64, i64 }, align 16
%a357 = alloca i64, align 16
%a365 = alloca %S.lsp.StructRec, align 16
%a369 = alloca { ptr, i64, i64 }, align 16
%a370 = alloca { ptr, i64, i64 }, align 16
%a376 = alloca i64, align 16
%a401 = alloca i64, align 16
%a409 = alloca %S.lsp.FnRec, align 16
%a413 = alloca { ptr, i64, i64 }, align 16
%a414 = alloca { ptr, i64, i64 }, align 16
%a426 = alloca %S.lsp.Names, align 16
%a428 = alloca i64, align 16
%a436 = alloca %S.lsp.VarRec, align 16
%a450 = alloca { ptr, i64, i64 }, align 16
%a451 = alloca { ptr, i64, i64 }, align 16
%a467 = alloca i64, align 16
%a475 = alloca %S.lsp.FnRec, align 16
%a482 = alloca { ptr, i64, i64 }, align 16
%a483 = alloca { ptr, i64, i64 }, align 16
%a499 = alloca i64, align 16
%a507 = alloca %S.lsp.StructRec, align 16
%a510 = alloca { ptr, i64, i64 }, align 16
%a511 = 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
%a530 = alloca i64, align 16
%a538 = alloca %S.lsp.EnumRec, align 16
%a541 = alloca { ptr, i64, i64 }, align 16
%a542 = 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
%a561 = alloca i64, align 16
%a569 = alloca { ptr, i64, i64 }, align 16
%a577 = alloca { ptr, i64, i64 }, align 16
%a578 = alloca i64, align 16
%a586 = alloca %S.docs.Doc, align 16
%a600 = alloca { ptr, i64, i64 }, align 16
%a601 = alloca i64, align 16
%a609 = alloca { ptr, i64, i64 }, align 16
%a617 = alloca { ptr, i64, i64 }, align 16
%a618 = alloca i64, align 16
%a626 = alloca { ptr, i64, i64 }, 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 %then9903, label %endif9905
then9903:
%t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1
%t20 = load i64, ptr %t19
store i64 %t20, ptr %a14
br label %endif9905
endif9905:
%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.6684, 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.cond9906
while.cond9906:
%t30 = load i64, ptr %a29
%t31 = icmp sgt i64 %t30, 0
br label %logic.from9909
logic.from9909:
br i1 %t31, label %logic.rhs9910, label %logic.end9911
logic.rhs9910:
%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 %range9912, label %inrange9913
range9912:
call void @finch_panic_index(ptr @.str.6685, i64 522, i64 %t33, i64 %t35)
unreachable
inrange9913:
%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.rend9914
logic.rend9914:
br label %logic.end9911
logic.end9911:
%t41 = phi i1 [ false, %logic.from9909 ], [ %t40, %logic.rend9914 ]
br i1 %t41, label %while.body9907, label %while.end9908
while.body9907:
%t42 = load i64, ptr %a29
%t43 = sub i64 %t42, 1
store i64 %t43, ptr %a29
br label %while.cond9906
while.end9908:
%t44 = load i64, ptr %a29
%t45 = icmp sgt i64 %t44, 0
br label %logic.from9915
logic.from9915:
br i1 %t45, label %logic.rhs9916, label %logic.end9917
logic.rhs9916:
%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 %range9918, label %inrange9919
range9918:
call void @finch_panic_index(ptr @.str.6686, i64 525, i64 %t47, i64 %t49)
unreachable
inrange9919:
%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.rend9920
logic.rend9920:
br label %logic.end9917
logic.end9917:
%t55 = phi i1 [ false, %logic.from9915 ], [ %t54, %logic.rend9920 ]
store i1 %t55, ptr %a56
%t57 = load i1, ptr %a56
br i1 %t57, label %then9921, label %endif9923
then9921:
%t58 = load i64, ptr %a29
%t59 = sub i64 %t58, 1
store i64 %t59, ptr %a60
br label %while.cond9924
while.cond9924:
%t61 = load i64, ptr %a60
%t62 = icmp sgt i64 %t61, 0
br label %logic.from9927
logic.from9927:
br i1 %t62, label %logic.rhs9928, label %logic.end9929
logic.rhs9928:
%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 %range9930, label %inrange9931
range9930:
call void @finch_panic_index(ptr @.str.6687, i64 528, i64 %t64, i64 %t66)
unreachable
inrange9931:
%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.from9932
logic.from9932:
br i1 %t71, label %logic.end9934, label %logic.rhs9933
logic.rhs9933:
%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 %range9935, label %inrange9936
range9935:
call void @finch_panic_index(ptr @.str.6688, i64 528, i64 %t73, i64 %t75)
unreachable
inrange9936:
%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.rend9937
logic.rend9937:
br label %logic.end9934
logic.end9934:
%t81 = phi i1 [ true, %logic.from9932 ], [ %t80, %logic.rend9937 ]
br label %logic.from9938
logic.from9938:
br i1 %t81, label %logic.end9940, label %logic.rhs9939
logic.rhs9939:
%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 %range9941, label %inrange9942
range9941:
call void @finch_panic_index(ptr @.str.6689, i64 528, i64 %t83, i64 %t85)
unreachable
inrange9942:
%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.rend9943
logic.rend9943:
br label %logic.end9940
logic.end9940:
%t91 = phi i1 [ true, %logic.from9938 ], [ %t90, %logic.rend9943 ]
br label %logic.rend9944
logic.rend9944:
br label %logic.end9929
logic.end9929:
%t92 = phi i1 [ false, %logic.from9927 ], [ %t91, %logic.rend9944 ]
br i1 %t92, label %while.body9925, label %while.end9926
while.body9925:
%t93 = load i64, ptr %a60
%t94 = sub i64 %t93, 1
store i64 %t94, ptr %a60
br label %while.cond9924
while.end9926:
%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.6690, 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.6692, 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 %then9945, label %endif9947
then9945:
%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.6693, i64 535)
%t116 = load { ptr, i64, i64 }, ptr %a114
store { ptr, i64, i64 } %t116, ptr %a102
store i1 true, ptr %a103
br label %endif9947
endif9947:
%t117 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 5
%t118 = getelementptr inbounds { ptr, i64, i64 }, ptr %t117, i32 0, i32 1
%t119 = load { ptr, i64, i64 }, ptr %a102
store i64 -1, ptr %a120
%t121 = load i64, ptr %t118
%t122 = load ptr, ptr %t117
store i64 0, ptr %a123
br label %find.cond9948
find.cond9948:
%t124 = load i64, ptr %a123
%t125 = icmp slt i64 %t124, %t121
br i1 %t125, label %find.body9949, label %find.end9952
find.body9949:
%t126 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 %t124
%t127 = load { ptr, i64, i64 }, ptr %t126
store { ptr, i64, i64 } %t127, ptr %a128
store { ptr, i64, i64 } %t119, ptr %a129
%t130 = call i32 @finch_str_eq(ptr %a128, ptr %a129)
%t131 = icmp ne i32 %t130, 0
br i1 %t131, label %find.hit9950, label %find.next9951
find.hit9950:
store i64 %t124, ptr %a120
br label %find.end9952
find.next9951:
%t132 = add i64 %t124, 1
store i64 %t132, ptr %a123
br label %find.cond9948
find.end9952:
%t133 = load i64, ptr %a120
%t134 = icmp sge i64 %t133, 0
br i1 %t134, label %then9953, label %endif9955
then9953:
%t135 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2
store i64 0, ptr %a136
br label %each.cond9956
each.cond9956:
%t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i32 0, i32 1
%t138 = load i64, ptr %t137
%t139 = load i64, ptr %a136
%t140 = icmp slt i64 %t139, %t138
br i1 %t140, label %each.body9957, label %each.end9959
each.body9957:
%t141 = load ptr, ptr %t135
%t142 = getelementptr inbounds %S.lsp.FnRec, ptr %t141, i64 %t139
%t143 = load %S.lsp.FnRec, ptr %t142
store %S.lsp.FnRec %t143, ptr %a144
%t145 = getelementptr inbounds %S.lsp.FnRec, ptr %a144, i32 0, i32 0
%t146 = load { ptr, i64, i64 }, ptr %t145
%t147 = load { ptr, i64, i64 }, ptr %a102
store { ptr, i64, i64 } %t146, ptr %a148
store { ptr, i64, i64 } %t147, ptr %a149
%t150 = call i32 @finch_str_eq(ptr %a148, ptr %a149)
%t151 = icmp ne i32 %t150, 0
br label %logic.from9960
logic.from9960:
br i1 %t151, label %logic.rhs9961, label %logic.end9962
logic.rhs9961:
%t152 = getelementptr inbounds %S.lsp.FnRec, ptr %a144, i32 0, i32 2
%t153 = getelementptr inbounds { ptr, i64, i64 }, ptr %t152, i32 0, i32 1
%t154 = load i64, ptr %t153
%t155 = icmp eq i64 %t154, 0
br label %logic.rend9963
logic.rend9963:
br label %logic.end9962
logic.end9962:
%t156 = phi i1 [ false, %logic.from9960 ], [ %t155, %logic.rend9963 ]
br i1 %t156, label %then9964, label %endif9966
then9964:
%t157 = getelementptr inbounds %S.lsp.FnRec, ptr %a144, i32 0, i32 1
%t158 = load { ptr, i64, i64 }, ptr %t157
%t159 = getelementptr inbounds %S.lsp.FnRec, ptr %a144, i32 0, i32 7
%t160 = load { ptr, i64, i64 }, ptr %t159
%t161 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t158, i64 3, { ptr, i64, i64 } %t160, { ptr, i64, i64 } { ptr @.str.6694, i64 0, i64 0 })
call void @finch.json.Json.push(ptr %a7, %S.json.Json %t161)
br label %endif9966
endif9966:
br label %each.step9958
each.step9958:
%t162 = load i64, ptr %a136
%t163 = add i64 %t162, 1
store i64 %t163, ptr %a136
br label %each.cond9956
each.end9959:
%t164 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3
store i64 0, ptr %a165
br label %each.cond9967
each.cond9967:
%t166 = getelementptr inbounds { ptr, i64, i64 }, ptr %t164, i32 0, i32 1
%t167 = load i64, ptr %t166
%t168 = load i64, ptr %a165
%t169 = icmp slt i64 %t168, %t167
br i1 %t169, label %each.body9968, label %each.end9970
each.body9968:
%t170 = load ptr, ptr %t164
%t171 = getelementptr inbounds %S.lsp.StructRec, ptr %t170, i64 %t168
%t172 = load %S.lsp.StructRec, ptr %t171
store %S.lsp.StructRec %t172, ptr %a173
%t174 = getelementptr inbounds %S.lsp.StructRec, ptr %a173, i32 0, i32 0
%t175 = load { ptr, i64, i64 }, ptr %t174
%t176 = load { ptr, i64, i64 }, ptr %a102
store { ptr, i64, i64 } %t175, ptr %a177
store { ptr, i64, i64 } %t176, ptr %a178
%t179 = call i32 @finch_str_eq(ptr %a177, ptr %a178)
%t180 = icmp ne i32 %t179, 0
br i1 %t180, label %then9971, label %endif9973
then9971:
%t181 = getelementptr inbounds %S.lsp.StructRec, ptr %a173, i32 0, i32 1
%t182 = load { ptr, i64, i64 }, ptr %t181
%t183 = getelementptr inbounds %S.lsp.StructRec, ptr %a173, i32 0, i32 1
%t184 = load { ptr, i64, i64 }, ptr %t183
store { ptr, i64, i64 } { ptr @.str.6695, i64 7, i64 0 }, ptr %a186
store { ptr, i64, i64 } %t184, ptr %a187
call void @finch_str_concat(ptr %a185, ptr %a186, ptr %a187)
%t188 = load { ptr, i64, i64 }, ptr %a185
%t189 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t182, i64 22, { ptr, i64, i64 } %t188, { ptr, i64, i64 } { ptr @.str.6696, i64 0, i64 0 })
call void @finch.json.Json.push(ptr %a7, %S.json.Json %t189)
br label %endif9973
endif9973:
br label %each.step9969
each.step9969:
%t190 = load i64, ptr %a165
%t191 = add i64 %t190, 1
store i64 %t191, ptr %a165
br label %each.cond9967
each.end9970:
%t192 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4
store i64 0, ptr %a193
br label %each.cond9974
each.cond9974:
%t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %t192, i32 0, i32 1
%t195 = load i64, ptr %t194
%t196 = load i64, ptr %a193
%t197 = icmp slt i64 %t196, %t195
br i1 %t197, label %each.body9975, label %each.end9977
each.body9975:
%t198 = load ptr, ptr %t192
%t199 = getelementptr inbounds %S.lsp.EnumRec, ptr %t198, i64 %t196
%t200 = load %S.lsp.EnumRec, ptr %t199
store %S.lsp.EnumRec %t200, ptr %a201
%t202 = getelementptr inbounds %S.lsp.EnumRec, ptr %a201, i32 0, i32 0
%t203 = load { ptr, i64, i64 }, ptr %t202
%t204 = load { ptr, i64, i64 }, ptr %a102
store { ptr, i64, i64 } %t203, ptr %a205
store { ptr, i64, i64 } %t204, ptr %a206
%t207 = call i32 @finch_str_eq(ptr %a205, ptr %a206)
%t208 = icmp ne i32 %t207, 0
br i1 %t208, label %then9978, label %endif9980
then9978:
%t209 = getelementptr inbounds %S.lsp.EnumRec, ptr %a201, i32 0, i32 1
%t210 = load { ptr, i64, i64 }, ptr %t209
%t211 = getelementptr inbounds %S.lsp.EnumRec, ptr %a201, i32 0, i32 1
%t212 = load { ptr, i64, i64 }, ptr %t211
store { ptr, i64, i64 } { ptr @.str.6697, i64 5, i64 0 }, 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 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t210, i64 13, { ptr, i64, i64 } %t216, { ptr, i64, i64 } { ptr @.str.6698, i64 0, i64 0 })
call void @finch.json.Json.push(ptr %a7, %S.json.Json %t217)
br label %endif9980
endif9980:
br label %each.step9976
each.step9976:
%t218 = load i64, ptr %a193
%t219 = add i64 %t218, 1
store i64 %t219, ptr %a193
br label %each.cond9974
each.end9977:
%t220 = load %S.json.Json, ptr %a7
%t221 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t220)
ret %S.json.Json %t221
endif9955:
%t222 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4
store i64 0, ptr %a223
br label %each.cond9981
each.cond9981:
%t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t222, i32 0, i32 1
%t225 = load i64, ptr %t224
%t226 = load i64, ptr %a223
%t227 = icmp slt i64 %t226, %t225
br i1 %t227, label %each.body9982, label %each.end9984
each.body9982:
%t228 = load ptr, ptr %t222
%t229 = getelementptr inbounds %S.lsp.EnumRec, ptr %t228, i64 %t226
%t230 = load %S.lsp.EnumRec, ptr %t229
store %S.lsp.EnumRec %t230, ptr %a231
%t232 = getelementptr inbounds %S.lsp.EnumRec, ptr %a231, i32 0, i32 1
%t233 = load { ptr, i64, i64 }, ptr %t232
%t234 = load { ptr, i64, i64 }, ptr %a102
store { ptr, i64, i64 } %t233, ptr %a235
store { ptr, i64, i64 } %t234, ptr %a236
%t237 = call i32 @finch_str_eq(ptr %a235, ptr %a236)
%t238 = icmp ne i32 %t237, 0
br label %logic.from9985
logic.from9985:
br i1 %t238, label %logic.rhs9986, label %logic.end9987
logic.rhs9986:
%t239 = load %S.lsp.Analysis, ptr %a1
%t240 = load { ptr, i64, i64 }, ptr %a3
%t241 = load { ptr, i64, i64 }, ptr %a102
%t242 = load i64, ptr %a4
%t243 = call %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %t239, { ptr, i64, i64 } %t240, { ptr, i64, i64 } %t241, i64 %t242)
%t244 = extractvalue %S.lsp.VarRec %t243, 0
store { ptr, i64, i64 } %t244, ptr %a245
call void @finch_str_copy(ptr %a246, ptr %a245)
%t247 = load { ptr, i64, i64 }, ptr %a246
%t248 = extractvalue { ptr, i64, i64 } %t247, 1
%t249 = icmp eq i64 %t248, 0
br label %logic.rend9988
logic.rend9988:
br label %logic.end9987
logic.end9987:
%t250 = phi i1 [ false, %logic.from9985 ], [ %t249, %logic.rend9988 ]
br i1 %t250, label %then9989, label %endif9991
then9989:
%t251 = getelementptr inbounds %S.lsp.EnumRec, ptr %a231, i32 0, i32 5
store i64 0, ptr %a252
br label %each.cond9992
each.cond9992:
%t253 = getelementptr inbounds { ptr, i64, i64 }, ptr %t251, i32 0, i32 1
%t254 = load i64, ptr %t253
%t255 = load i64, ptr %a252
%t256 = icmp slt i64 %t255, %t254
br i1 %t256, label %each.body9993, label %each.end9995
each.body9993:
%t257 = load ptr, ptr %t251
%t258 = getelementptr inbounds { ptr, i64, i64 }, ptr %t257, i64 %t255
%t259 = load { ptr, i64, i64 }, ptr %t258
store { ptr, i64, i64 } %t259, ptr %a260
%t261 = load { ptr, i64, i64 }, ptr %a260
%t262 = getelementptr inbounds %S.lsp.EnumRec, ptr %a231, i32 0, i32 1
%t263 = load { ptr, i64, i64 }, ptr %t262
store { ptr, i64, i64 } %t263, ptr %a265
store { ptr, i64, i64 } { ptr @.str.6699, i64 1, i64 0 }, ptr %a266
call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266)
%t267 = load { ptr, i64, i64 }, ptr %a264
%t268 = load { ptr, i64, i64 }, ptr %a260
store { ptr, i64, i64 } %t267, ptr %a270
store { ptr, i64, i64 } %t268, ptr %a271
call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271)
%t272 = load { ptr, i64, i64 }, ptr %a269
%t273 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t261, i64 20, { ptr, i64, i64 } %t272, { ptr, i64, i64 } { ptr @.str.6700, i64 0, i64 0 })
call void @finch.json.Json.push(ptr %a7, %S.json.Json %t273)
br label %each.step9994
each.step9994:
%t274 = load i64, ptr %a252
%t275 = add i64 %t274, 1
store i64 %t275, ptr %a252
br label %each.cond9992
each.end9995:
%t276 = load %S.json.Json, ptr %a7
%t277 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t276)
ret %S.json.Json %t277
endif9991:
br label %each.step9983
each.step9983:
%t278 = load i64, ptr %a223
%t279 = add i64 %t278, 1
store i64 %t279, ptr %a223
br label %each.cond9981
each.end9984:
%t280 = load %S.lsp.Analysis, ptr %a1
%t281 = load { ptr, i64, i64 }, ptr %a3
%t282 = load { ptr, i64, i64 }, ptr %a102
%t283 = load i64, ptr %a4
%t284 = call %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %t280, { ptr, i64, i64 } %t281, { ptr, i64, i64 } %t282, i64 %t283)
%t285 = extractvalue %S.lsp.VarRec %t284, 1
store { ptr, i64, i64 } %t285, ptr %a286
call void @finch_str_copy(ptr %a287, ptr %a286)
%t288 = load { ptr, i64, i64 }, ptr %a287
store { ptr, i64, i64 } %t288, ptr %a289
%t290 = load i1, ptr %a103
br label %logic.from9996
logic.from9996:
br i1 %t290, label %logic.rhs9997, label %logic.end9998
logic.rhs9997:
%t291 = load { ptr, i64, i64 }, ptr %a289
store { ptr, i64, i64 } %t291, ptr %a292
store { ptr, i64, i64 } { ptr @.str.6702, i64 2, i64 0 }, ptr %a294
%t295 = call i32 @finch_str_starts(ptr %a292, ptr %a294)
%t296 = icmp ne i32 %t295, 0
br label %logic.rend9999
logic.rend9999:
br label %logic.end9998
logic.end9998:
%t297 = phi i1 [ false, %logic.from9996 ], [ %t296, %logic.rend9999 ]
br i1 %t297, label %then10000, label %else10001
then10000:
%t298 = load { ptr, i64, i64 }, ptr %a289
store { ptr, i64, i64 } %t298, ptr %a299
%t301 = getelementptr inbounds { ptr, i64, i64 }, ptr %a289, i32 0, i32 1
%t302 = load i64, ptr %t301
call void @finch_str_sub(ptr %a300, ptr %a299, i64 2, i64 %t302, ptr @.str.6703, i64 569)
%t303 = load { ptr, i64, i64 }, ptr %a300
store { ptr, i64, i64 } %t303, ptr %a289
br label %endif10002
else10001:
%t304 = load i1, ptr %a103
br label %logic.from10003
logic.from10003:
br i1 %t304, label %logic.rhs10004, label %logic.end10005
logic.rhs10004:
%t305 = load { ptr, i64, i64 }, ptr %a289
store { ptr, i64, i64 } %t305, ptr %a306
store { ptr, i64, i64 } { ptr @.str.6704, i64 3, i64 0 }, ptr %a307
%t308 = call i32 @finch_str_eq(ptr %a306, ptr %a307)
%t309 = icmp ne i32 %t308, 0
br label %logic.rend10006
logic.rend10006:
br label %logic.end10005
logic.end10005:
%t310 = phi i1 [ false, %logic.from10003 ], [ %t309, %logic.rend10006 ]
br i1 %t310, label %then10007, label %endif10009
then10007:
store { ptr, i64, i64 } { ptr @.str.6705, i64 4, i64 0 }, ptr %a289
br label %endif10009
endif10009:
br label %endif10002
endif10002:
%t311 = load { ptr, i64, i64 }, ptr %a289
store { ptr, i64, i64 } %t311, ptr %a312
store { ptr, i64, i64 } { ptr @.str.6707, i64 4, i64 0 }, ptr %a314
%t315 = call i32 @finch_str_starts(ptr %a312, ptr %a314)
%t316 = icmp ne i32 %t315, 0
br label %logic.from10010
logic.from10010:
br i1 %t316, label %logic.rhs10011, label %logic.end10012
logic.rhs10011:
%t317 = load { ptr, i64, i64 }, ptr %a289
store { ptr, i64, i64 } %t317, ptr %a318
store { ptr, i64, i64 } { ptr @.str.6709, i64 1, i64 0 }, ptr %a320
%t321 = call i32 @finch_str_ends(ptr %a318, ptr %a320)
%t322 = icmp ne i32 %t321, 0
br label %logic.rend10013
logic.rend10013:
br label %logic.end10012
logic.end10012:
%t323 = phi i1 [ false, %logic.from10010 ], [ %t322, %logic.rend10013 ]
br i1 %t323, label %then10014, label %endif10016
then10014:
%t324 = load { ptr, i64, i64 }, ptr %a289
store { ptr, i64, i64 } %t324, ptr %a325
%t327 = getelementptr inbounds { ptr, i64, i64 }, ptr %a289, i32 0, i32 1
%t328 = load i64, ptr %t327
%t329 = sub i64 %t328, 1
call void @finch_str_sub(ptr %a326, ptr %a325, i64 4, i64 %t329, ptr @.str.6710, i64 574)
%t330 = load { ptr, i64, i64 }, ptr %a326
store { ptr, i64, i64 } %t330, ptr %a289
br label %endif10016
endif10016:
%t331 = load { ptr, i64, i64 }, ptr %a289
store { ptr, i64, i64 } %t331, ptr %a332
store { ptr, i64, i64 } { ptr @.str.6712, i64 2, i64 0 }, ptr %a334
%t335 = call i32 @finch_str_starts(ptr %a332, ptr %a334)
%t336 = icmp ne i32 %t335, 0
br i1 %t336, label %then10017, label %else10018
then10017:
%t337 = call { ptr, i64, i64 } @finch.docs.arrayMethods()
call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t337)
br label %endif10019
else10018:
%t338 = load { ptr, i64, i64 }, ptr %a289
store { ptr, i64, i64 } %t338, ptr %a339
store { ptr, i64, i64 } { ptr @.str.6713, i64 3, i64 0 }, ptr %a340
%t341 = call i32 @finch_str_eq(ptr %a339, ptr %a340)
%t342 = icmp ne i32 %t341, 0
br i1 %t342, label %then10020, label %else10021
then10020:
%t343 = call { ptr, i64, i64 } @finch.docs.strMethods()
call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t343)
br label %endif10022
else10021:
%t344 = load { ptr, i64, i64 }, ptr %a289
store { ptr, i64, i64 } %t344, ptr %a345
store { ptr, i64, i64 } { ptr @.str.6715, i64 4, i64 0 }, ptr %a347
%t348 = call i32 @finch_str_starts(ptr %a345, ptr %a347)
%t349 = icmp ne i32 %t348, 0
br i1 %t349, label %then10023, label %else10024
then10023:
%t350 = call { ptr, i64, i64 } @finch.docs.mapMethods()
call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t350)
br label %endif10025
else10024:
%t351 = load { ptr, i64, i64 }, ptr %a289
store { ptr, i64, i64 } %t351, ptr %a352
call void @finch_str_copy(ptr %a353, ptr %a352)
%t354 = load { ptr, i64, i64 }, ptr %a353
store { ptr, i64, i64 } %t354, ptr %a355
%t356 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3
store i64 0, ptr %a357
br label %each.cond10026
each.cond10026:
%t358 = getelementptr inbounds { ptr, i64, i64 }, ptr %t356, i32 0, i32 1
%t359 = load i64, ptr %t358
%t360 = load i64, ptr %a357
%t361 = icmp slt i64 %t360, %t359
br i1 %t361, label %each.body10027, label %each.end10029
each.body10027:
%t362 = load ptr, ptr %t356
%t363 = getelementptr inbounds %S.lsp.StructRec, ptr %t362, i64 %t360
%t364 = load %S.lsp.StructRec, ptr %t363
store %S.lsp.StructRec %t364, ptr %a365
%t366 = getelementptr inbounds %S.lsp.StructRec, ptr %a365, i32 0, i32 1
%t367 = load { ptr, i64, i64 }, ptr %t366
%t368 = load { ptr, i64, i64 }, ptr %a355
store { ptr, i64, i64 } %t367, ptr %a369
store { ptr, i64, i64 } %t368, ptr %a370
%t371 = call i32 @finch_str_eq(ptr %a369, ptr %a370)
%t372 = icmp ne i32 %t371, 0
br i1 %t372, label %then10030, label %endif10032
then10030:
%t373 = getelementptr inbounds %S.lsp.StructRec, ptr %a365, i32 0, i32 5
%t374 = getelementptr inbounds { ptr, i64, i64 }, ptr %t373, i32 0, i32 1
%t375 = load i64, ptr %t374
store i64 0, ptr %a376
br label %for.cond10033
for.cond10033:
%t377 = load i64, ptr %a376
%t378 = icmp slt i64 %t377, %t375
br i1 %t378, label %for.body10034, label %for.end10036
for.body10034:
%t379 = getelementptr inbounds %S.lsp.StructRec, ptr %a365, i32 0, i32 5
%t380 = load i64, ptr %a376
%t381 = load { ptr, i64, i64 }, ptr %t379
%t382 = extractvalue { ptr, i64, i64 } %t381, 1
%t383 = icmp uge i64 %t380, %t382
br i1 %t383, label %range10037, label %inrange10038
range10037:
call void @finch_panic_index(ptr @.str.6716, i64 587, i64 %t380, i64 %t382)
unreachable
inrange10038:
%t384 = extractvalue { ptr, i64, i64 } %t381, 0
%t385 = getelementptr inbounds { ptr, i64, i64 }, ptr %t384, i64 %t380
%t386 = load { ptr, i64, i64 }, ptr %t385
%t387 = getelementptr inbounds %S.lsp.StructRec, ptr %a365, i32 0, i32 6
%t388 = load i64, ptr %a376
%t389 = load { ptr, i64, i64 }, ptr %t387
%t390 = extractvalue { ptr, i64, i64 } %t389, 1
%t391 = icmp uge i64 %t388, %t390
br i1 %t391, label %range10039, label %inrange10040
range10039:
call void @finch_panic_index(ptr @.str.6717, i64 587, i64 %t388, i64 %t390)
unreachable
inrange10040:
%t392 = extractvalue { ptr, i64, i64 } %t389, 0
%t393 = getelementptr inbounds { ptr, i64, i64 }, ptr %t392, i64 %t388
%t394 = load { ptr, i64, i64 }, ptr %t393
%t395 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t386, i64 5, { ptr, i64, i64 } %t394, { ptr, i64, i64 } { ptr @.str.6718, i64 0, i64 0 })
call void @finch.json.Json.push(ptr %a7, %S.json.Json %t395)
br label %for.step10035
for.step10035:
%t396 = load i64, ptr %a376
%t397 = add i64 %t396, 1
store i64 %t397, ptr %a376
br label %for.cond10033
for.end10036:
br label %endif10032
endif10032:
br label %each.step10028
each.step10028:
%t398 = load i64, ptr %a357
%t399 = add i64 %t398, 1
store i64 %t399, ptr %a357
br label %each.cond10026
each.end10029:
%t400 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2
store i64 0, ptr %a401
br label %each.cond10041
each.cond10041:
%t402 = getelementptr inbounds { ptr, i64, i64 }, ptr %t400, i32 0, i32 1
%t403 = load i64, ptr %t402
%t404 = load i64, ptr %a401
%t405 = icmp slt i64 %t404, %t403
br i1 %t405, label %each.body10042, label %each.end10044
each.body10042:
%t406 = load ptr, ptr %t400
%t407 = getelementptr inbounds %S.lsp.FnRec, ptr %t406, i64 %t404
%t408 = load %S.lsp.FnRec, ptr %t407
store %S.lsp.FnRec %t408, ptr %a409
%t410 = getelementptr inbounds %S.lsp.FnRec, ptr %a409, i32 0, i32 2
%t411 = load { ptr, i64, i64 }, ptr %t410
%t412 = load { ptr, i64, i64 }, ptr %a355
store { ptr, i64, i64 } %t411, ptr %a413
store { ptr, i64, i64 } %t412, ptr %a414
%t415 = call i32 @finch_str_eq(ptr %a413, ptr %a414)
%t416 = icmp ne i32 %t415, 0
br i1 %t416, label %then10045, label %endif10047
then10045:
%t417 = getelementptr inbounds %S.lsp.FnRec, ptr %a409, i32 0, i32 1
%t418 = load { ptr, i64, i64 }, ptr %t417
%t419 = getelementptr inbounds %S.lsp.FnRec, ptr %a409, i32 0, i32 7
%t420 = load { ptr, i64, i64 }, ptr %t419
%t421 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t418, i64 2, { ptr, i64, i64 } %t420, { ptr, i64, i64 } { ptr @.str.6719, i64 0, i64 0 })
call void @finch.json.Json.push(ptr %a7, %S.json.Json %t421)
br label %endif10047
endif10047:
br label %each.step10043
each.step10043:
%t422 = load i64, ptr %a401
%t423 = add i64 %t422, 1
store i64 %t423, ptr %a401
br label %each.cond10041
each.end10044:
br label %endif10025
endif10025:
br label %endif10022
endif10022:
br label %endif10019
endif10019:
%t424 = load %S.json.Json, ptr %a7
%t425 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t424)
ret %S.json.Json %t425
endif9923:
store %S.lsp.Names zeroinitializer, ptr %a426
%t427 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 1
store i64 0, ptr %a428
br label %each.cond10048
each.cond10048:
%t429 = getelementptr inbounds { ptr, i64, i64 }, ptr %t427, i32 0, i32 1
%t430 = load i64, ptr %t429
%t431 = load i64, ptr %a428
%t432 = icmp slt i64 %t431, %t430
br i1 %t432, label %each.body10049, label %each.end10051
each.body10049:
%t433 = load ptr, ptr %t427
%t434 = getelementptr inbounds %S.lsp.VarRec, ptr %t433, i64 %t431
%t435 = load %S.lsp.VarRec, ptr %t434
store %S.lsp.VarRec %t435, ptr %a436
%t437 = getelementptr inbounds %S.lsp.VarRec, ptr %a436, i32 0, i32 3
%t438 = load i64, ptr %t437
%t439 = load i64, ptr %a4
%t440 = icmp sle i64 %t438, %t439
br label %logic.from10052
logic.from10052:
br i1 %t440, label %logic.rhs10053, label %logic.end10054
logic.rhs10053:
%t441 = load i64, ptr %a4
%t442 = getelementptr inbounds %S.lsp.VarRec, ptr %a436, i32 0, i32 7
%t443 = load i64, ptr %t442
%t444 = add i64 %t443, 1
%t445 = icmp sle i64 %t441, %t444
br label %logic.rend10055
logic.rend10055:
br label %logic.end10054
logic.end10054:
%t446 = phi i1 [ false, %logic.from10052 ], [ %t445, %logic.rend10055 ]
br label %logic.from10056
logic.from10056:
br i1 %t446, label %logic.rhs10057, label %logic.end10058
logic.rhs10057:
%t447 = getelementptr inbounds %S.lsp.VarRec, ptr %a436, i32 0, i32 5
%t448 = load { ptr, i64, i64 }, ptr %t447
%t449 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t448, ptr %a450
store { ptr, i64, i64 } %t449, ptr %a451
%t452 = call i32 @finch_str_eq(ptr %a450, ptr %a451)
%t453 = icmp ne i32 %t452, 0
br label %logic.rend10059
logic.rend10059:
br label %logic.end10058
logic.end10058:
%t454 = phi i1 [ false, %logic.from10056 ], [ %t453, %logic.rend10059 ]
br label %logic.from10060
logic.from10060:
br i1 %t454, label %logic.rhs10061, label %logic.end10062
logic.rhs10061:
%t455 = getelementptr inbounds %S.lsp.VarRec, ptr %a436, i32 0, i32 0
%t456 = load { ptr, i64, i64 }, ptr %t455
%t457 = call i1 @finch.lsp.Names.add(ptr %a426, { ptr, i64, i64 } %t456)
br label %logic.rend10063
logic.rend10063:
br label %logic.end10062
logic.end10062:
%t458 = phi i1 [ false, %logic.from10060 ], [ %t457, %logic.rend10063 ]
br i1 %t458, label %then10064, label %endif10066
then10064:
%t459 = getelementptr inbounds %S.lsp.VarRec, ptr %a436, i32 0, i32 0
%t460 = load { ptr, i64, i64 }, ptr %t459
%t461 = getelementptr inbounds %S.lsp.VarRec, ptr %a436, i32 0, i32 1
%t462 = load { ptr, i64, i64 }, ptr %t461
%t463 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t460, i64 6, { ptr, i64, i64 } %t462, { ptr, i64, i64 } { ptr @.str.6720, i64 0, i64 0 })
call void @finch.json.Json.push(ptr %a7, %S.json.Json %t463)
br label %endif10066
endif10066:
br label %each.step10050
each.step10050:
%t464 = load i64, ptr %a428
%t465 = add i64 %t464, 1
store i64 %t465, ptr %a428
br label %each.cond10048
each.end10051:
%t466 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2
store i64 0, ptr %a467
br label %each.cond10067
each.cond10067:
%t468 = getelementptr inbounds { ptr, i64, i64 }, ptr %t466, i32 0, i32 1
%t469 = load i64, ptr %t468
%t470 = load i64, ptr %a467
%t471 = icmp slt i64 %t470, %t469
br i1 %t471, label %each.body10068, label %each.end10070
each.body10068:
%t472 = load ptr, ptr %t466
%t473 = getelementptr inbounds %S.lsp.FnRec, ptr %t472, i64 %t470
%t474 = load %S.lsp.FnRec, ptr %t473
store %S.lsp.FnRec %t474, ptr %a475
%t476 = getelementptr inbounds %S.lsp.FnRec, ptr %a475, i32 0, i32 2
%t477 = getelementptr inbounds { ptr, i64, i64 }, ptr %t476, i32 0, i32 1
%t478 = load i64, ptr %t477
%t479 = icmp eq i64 %t478, 0
br label %logic.from10071
logic.from10071:
br i1 %t479, label %logic.rhs10072, label %logic.end10073
logic.rhs10072:
%t480 = getelementptr inbounds %S.lsp.FnRec, ptr %a475, i32 0, i32 0
%t481 = load { ptr, i64, i64 }, ptr %t480
store { ptr, i64, i64 } %t481, ptr %a482
store { ptr, i64, i64 } { ptr @.str.6721, i64 0, i64 0 }, ptr %a483
%t484 = call i32 @finch_str_eq(ptr %a482, ptr %a483)
%t485 = icmp ne i32 %t484, 0
br label %logic.rend10074
logic.rend10074:
br label %logic.end10073
logic.end10073:
%t486 = phi i1 [ false, %logic.from10071 ], [ %t485, %logic.rend10074 ]
br label %logic.from10075
logic.from10075:
br i1 %t486, label %logic.rhs10076, label %logic.end10077
logic.rhs10076:
%t487 = getelementptr inbounds %S.lsp.FnRec, ptr %a475, i32 0, i32 1
%t488 = load { ptr, i64, i64 }, ptr %t487
%t489 = call i1 @finch.lsp.Names.add(ptr %a426, { ptr, i64, i64 } %t488)
br label %logic.rend10078
logic.rend10078:
br label %logic.end10077
logic.end10077:
%t490 = phi i1 [ false, %logic.from10075 ], [ %t489, %logic.rend10078 ]
br i1 %t490, label %then10079, label %endif10081
then10079:
%t491 = getelementptr inbounds %S.lsp.FnRec, ptr %a475, i32 0, i32 1
%t492 = load { ptr, i64, i64 }, ptr %t491
%t493 = getelementptr inbounds %S.lsp.FnRec, ptr %a475, i32 0, i32 7
%t494 = load { ptr, i64, i64 }, ptr %t493
%t495 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t492, i64 3, { ptr, i64, i64 } %t494, { ptr, i64, i64 } { ptr @.str.6722, i64 0, i64 0 })
call void @finch.json.Json.push(ptr %a7, %S.json.Json %t495)
br label %endif10081
endif10081:
br label %each.step10069
each.step10069:
%t496 = load i64, ptr %a467
%t497 = add i64 %t496, 1
store i64 %t497, ptr %a467
br label %each.cond10067
each.end10070:
%t498 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3
store i64 0, ptr %a499
br label %each.cond10082
each.cond10082:
%t500 = getelementptr inbounds { ptr, i64, i64 }, ptr %t498, i32 0, i32 1
%t501 = load i64, ptr %t500
%t502 = load i64, ptr %a499
%t503 = icmp slt i64 %t502, %t501
br i1 %t503, label %each.body10083, label %each.end10085
each.body10083:
%t504 = load ptr, ptr %t498
%t505 = getelementptr inbounds %S.lsp.StructRec, ptr %t504, i64 %t502
%t506 = load %S.lsp.StructRec, ptr %t505
store %S.lsp.StructRec %t506, ptr %a507
%t508 = getelementptr inbounds %S.lsp.StructRec, ptr %a507, i32 0, i32 0
%t509 = load { ptr, i64, i64 }, ptr %t508
store { ptr, i64, i64 } %t509, ptr %a510
store { ptr, i64, i64 } { ptr @.str.6723, i64 0, i64 0 }, ptr %a511
%t512 = call i32 @finch_str_eq(ptr %a510, ptr %a511)
%t513 = icmp ne i32 %t512, 0
br label %logic.from10086
logic.from10086:
br i1 %t513, label %logic.rhs10087, label %logic.end10088
logic.rhs10087:
%t514 = getelementptr inbounds %S.lsp.StructRec, ptr %a507, i32 0, i32 1
%t515 = load { ptr, i64, i64 }, ptr %t514
%t516 = call i1 @finch.lsp.Names.add(ptr %a426, { ptr, i64, i64 } %t515)
br label %logic.rend10089
logic.rend10089:
br label %logic.end10088
logic.end10088:
%t517 = phi i1 [ false, %logic.from10086 ], [ %t516, %logic.rend10089 ]
br i1 %t517, label %then10090, label %endif10092
then10090:
%t518 = getelementptr inbounds %S.lsp.StructRec, ptr %a507, i32 0, i32 1
%t519 = load { ptr, i64, i64 }, ptr %t518
%t520 = getelementptr inbounds %S.lsp.StructRec, ptr %a507, i32 0, i32 1
%t521 = load { ptr, i64, i64 }, ptr %t520
store { ptr, i64, i64 } { ptr @.str.6724, i64 7, i64 0 }, ptr %a523
store { ptr, i64, i64 } %t521, ptr %a524
call void @finch_str_concat(ptr %a522, ptr %a523, ptr %a524)
%t525 = load { ptr, i64, i64 }, ptr %a522
%t526 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t519, i64 22, { ptr, i64, i64 } %t525, { ptr, i64, i64 } { ptr @.str.6725, i64 0, i64 0 })
call void @finch.json.Json.push(ptr %a7, %S.json.Json %t526)
br label %endif10092
endif10092:
br label %each.step10084
each.step10084:
%t527 = load i64, ptr %a499
%t528 = add i64 %t527, 1
store i64 %t528, ptr %a499
br label %each.cond10082
each.end10085:
%t529 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4
store i64 0, ptr %a530
br label %each.cond10093
each.cond10093:
%t531 = getelementptr inbounds { ptr, i64, i64 }, ptr %t529, i32 0, i32 1
%t532 = load i64, ptr %t531
%t533 = load i64, ptr %a530
%t534 = icmp slt i64 %t533, %t532
br i1 %t534, label %each.body10094, label %each.end10096
each.body10094:
%t535 = load ptr, ptr %t529
%t536 = getelementptr inbounds %S.lsp.EnumRec, ptr %t535, i64 %t533
%t537 = load %S.lsp.EnumRec, ptr %t536
store %S.lsp.EnumRec %t537, ptr %a538
%t539 = getelementptr inbounds %S.lsp.EnumRec, ptr %a538, i32 0, i32 0
%t540 = load { ptr, i64, i64 }, ptr %t539
store { ptr, i64, i64 } %t540, ptr %a541
store { ptr, i64, i64 } { ptr @.str.6726, i64 0, i64 0 }, ptr %a542
%t543 = call i32 @finch_str_eq(ptr %a541, ptr %a542)
%t544 = icmp ne i32 %t543, 0
br label %logic.from10097
logic.from10097:
br i1 %t544, label %logic.rhs10098, label %logic.end10099
logic.rhs10098:
%t545 = getelementptr inbounds %S.lsp.EnumRec, ptr %a538, i32 0, i32 1
%t546 = load { ptr, i64, i64 }, ptr %t545
%t547 = call i1 @finch.lsp.Names.add(ptr %a426, { ptr, i64, i64 } %t546)
br label %logic.rend10100
logic.rend10100:
br label %logic.end10099
logic.end10099:
%t548 = phi i1 [ false, %logic.from10097 ], [ %t547, %logic.rend10100 ]
br i1 %t548, label %then10101, label %endif10103
then10101:
%t549 = getelementptr inbounds %S.lsp.EnumRec, ptr %a538, i32 0, i32 1
%t550 = load { ptr, i64, i64 }, ptr %t549
%t551 = getelementptr inbounds %S.lsp.EnumRec, ptr %a538, i32 0, i32 1
%t552 = load { ptr, i64, i64 }, ptr %t551
store { ptr, i64, i64 } { ptr @.str.6727, i64 5, i64 0 }, ptr %a554
store { ptr, i64, i64 } %t552, ptr %a555
call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555)
%t556 = load { ptr, i64, i64 }, ptr %a553
%t557 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t550, i64 13, { ptr, i64, i64 } %t556, { ptr, i64, i64 } { ptr @.str.6728, i64 0, i64 0 })
call void @finch.json.Json.push(ptr %a7, %S.json.Json %t557)
br label %endif10103
endif10103:
br label %each.step10095
each.step10095:
%t558 = load i64, ptr %a530
%t559 = add i64 %t558, 1
store i64 %t559, ptr %a530
br label %each.cond10093
each.end10096:
%t560 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 5
store i64 0, ptr %a561
br label %each.cond10104
each.cond10104:
%t562 = getelementptr inbounds { ptr, i64, i64 }, ptr %t560, i32 0, i32 1
%t563 = load i64, ptr %t562
%t564 = load i64, ptr %a561
%t565 = icmp slt i64 %t564, %t563
br i1 %t565, label %each.body10105, label %each.end10107
each.body10105:
%t566 = load ptr, ptr %t560
%t567 = getelementptr inbounds { ptr, i64, i64 }, ptr %t566, i64 %t564
%t568 = load { ptr, i64, i64 }, ptr %t567
store { ptr, i64, i64 } %t568, ptr %a569
%t570 = load { ptr, i64, i64 }, ptr %a569
%t571 = call i1 @finch.lsp.Names.add(ptr %a426, { ptr, i64, i64 } %t570)
br i1 %t571, label %then10108, label %endif10110
then10108:
%t572 = load { ptr, i64, i64 }, ptr %a569
%t573 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t572, i64 9, { ptr, i64, i64 } { ptr @.str.6729, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6730, i64 0, i64 0 })
call void @finch.json.Json.push(ptr %a7, %S.json.Json %t573)
br label %endif10110
endif10110:
br label %each.step10106
each.step10106:
%t574 = load i64, ptr %a561
%t575 = add i64 %t574, 1
store i64 %t575, ptr %a561
br label %each.cond10104
each.end10107:
%t576 = call { ptr, i64, i64 } @finch.docs.builtins()
store { ptr, i64, i64 } %t576, ptr %a577
store i64 0, ptr %a578
br label %each.cond10111
each.cond10111:
%t579 = getelementptr inbounds { ptr, i64, i64 }, ptr %a577, i32 0, i32 1
%t580 = load i64, ptr %t579
%t581 = load i64, ptr %a578
%t582 = icmp slt i64 %t581, %t580
br i1 %t582, label %each.body10112, label %each.end10114
each.body10112:
%t583 = load ptr, ptr %a577
%t584 = getelementptr inbounds %S.docs.Doc, ptr %t583, i64 %t581
%t585 = load %S.docs.Doc, ptr %t584
store %S.docs.Doc %t585, ptr %a586
%t587 = getelementptr inbounds %S.docs.Doc, ptr %a586, i32 0, i32 0
%t588 = load { ptr, i64, i64 }, ptr %t587
%t589 = call i1 @finch.lsp.Names.add(ptr %a426, { ptr, i64, i64 } %t588)
br i1 %t589, label %then10115, label %endif10117
then10115:
%t590 = getelementptr inbounds %S.docs.Doc, ptr %a586, i32 0, i32 0
%t591 = load { ptr, i64, i64 }, ptr %t590
%t592 = getelementptr inbounds %S.docs.Doc, ptr %a586, i32 0, i32 1
%t593 = load { ptr, i64, i64 }, ptr %t592
%t594 = getelementptr inbounds %S.docs.Doc, ptr %a586, i32 0, i32 2
%t595 = load { ptr, i64, i64 }, ptr %t594
%t596 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t591, i64 3, { ptr, i64, i64 } %t593, { ptr, i64, i64 } %t595)
call void @finch.json.Json.push(ptr %a7, %S.json.Json %t596)
br label %endif10117
endif10117:
br label %each.step10113
each.step10113:
%t597 = load i64, ptr %a578
%t598 = add i64 %t597, 1
store i64 %t598, ptr %a578
br label %each.cond10111
each.end10114:
%t599 = call { ptr, i64, i64 } @finch.docs.keywords()
store { ptr, i64, i64 } %t599, ptr %a600
store i64 0, ptr %a601
br label %each.cond10118
each.cond10118:
%t602 = getelementptr inbounds { ptr, i64, i64 }, ptr %a600, i32 0, i32 1
%t603 = load i64, ptr %t602
%t604 = load i64, ptr %a601
%t605 = icmp slt i64 %t604, %t603
br i1 %t605, label %each.body10119, label %each.end10121
each.body10119:
%t606 = load ptr, ptr %a600
%t607 = getelementptr inbounds { ptr, i64, i64 }, ptr %t606, i64 %t604
%t608 = load { ptr, i64, i64 }, ptr %t607
store { ptr, i64, i64 } %t608, ptr %a609
%t610 = load { ptr, i64, i64 }, ptr %a609
%t611 = call i1 @finch.lsp.Names.add(ptr %a426, { ptr, i64, i64 } %t610)
br i1 %t611, label %then10122, label %endif10124
then10122:
%t612 = load { ptr, i64, i64 }, ptr %a609
%t613 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t612, i64 14, { ptr, i64, i64 } { ptr @.str.6731, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.6732, i64 0, i64 0 })
call void @finch.json.Json.push(ptr %a7, %S.json.Json %t613)
br label %endif10124
endif10124:
br label %each.step10120
each.step10120:
%t614 = load i64, ptr %a601
%t615 = add i64 %t614, 1
store i64 %t615, ptr %a601
br label %each.cond10118
each.end10121:
%t616 = call { ptr, i64, i64 } @finch.docs.typeNames()
store { ptr, i64, i64 } %t616, ptr %a617
store i64 0, ptr %a618
br label %each.cond10125
each.cond10125:
%t619 = getelementptr inbounds { ptr, i64, i64 }, ptr %a617, i32 0, i32 1
%t620 = load i64, ptr %t619
%t621 = load i64, ptr %a618
%t622 = icmp slt i64 %t621, %t620
br i1 %t622, label %each.body10126, label %each.end10128
each.body10126:
%t623 = load ptr, ptr %a617
%t624 = getelementptr inbounds { ptr, i64, i64 }, ptr %t623, i64 %t621
%t625 = load { ptr, i64, i64 }, ptr %t624
store { ptr, i64, i64 } %t625, ptr %a626
%t627 = load { ptr, i64, i64 }, ptr %a626
%t628 = call i1 @finch.lsp.Names.add(ptr %a426, { ptr, i64, i64 } %t627)
br i1 %t628, label %then10129, label %endif10131
then10129:
%t629 = load { ptr, i64, i64 }, ptr %a626
%t630 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t629, i64 25, { ptr, i64, i64 } { ptr @.str.6733, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.6734, i64 0, i64 0 })
call void @finch.json.Json.push(ptr %a7, %S.json.Json %t630)
br label %endif10131
endif10131:
br label %each.step10127
each.step10127:
%t631 = load i64, ptr %a618
%t632 = add i64 %t631, 1
store i64 %t632, ptr %a618
br label %each.cond10125
each.end10128:
%t633 = load %S.json.Json, ptr %a7
%t634 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t633)
ret %S.json.Json %t634
}
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.cond10132
find.cond10132:
%t9 = load i64, ptr %a8
%t10 = icmp slt i64 %t9, %t6
br i1 %t10, label %find.body10133, label %find.end10136
find.body10133:
%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.hit10134, label %find.next10135
find.hit10134:
store i64 %t9, ptr %a5
br label %find.end10136
find.next10135:
%t17 = add i64 %t9, 1
store i64 %t17, ptr %a8
br label %find.cond10132
find.end10136:
%t18 = load i64, ptr %a5
%t19 = icmp sge i64 %t18, 0
br i1 %t19, label %then10137, label %endif10139
then10137:
ret i1 false
endif10139:
%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
%a7 = alloca %S.json.Json, align 16
%a8 = 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.6735, i64 12, i64 0 }, %S.json.Json %t4)
%t5 = load %S.json.Json, ptr %a1
call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.6736, i64 5, i64 0 }, %S.json.Json %t5)
%t6 = load %S.json.Json, ptr %a3
store %S.json.Json %t6, ptr %a7
call void @finch.copy.S_json_Json(ptr %a8, ptr %a7)
%t9 = load %S.json.Json, ptr %a8
ret %S.json.Json %t9
}
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 { 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
%a158 = alloca { ptr, i64, i64 }, align 16
%a159 = alloca { ptr, i64, i64 }, align 16
%a164 = alloca { ptr, i64, i64 }, align 16
%a165 = alloca { ptr, i64, i64 }, align 16
%a171 = alloca { ptr, i64, i64 }, align 16
%a172 = alloca { ptr, i64, i64 }, align 16
%a175 = alloca i64, align 16
%a183 = alloca %S.lsp.FnRec, align 16
%a187 = alloca { ptr, i64, i64 }, align 16
%a188 = alloca { ptr, i64, i64 }, align 16
%a194 = alloca { ptr, i64, i64 }, align 16
%a195 = alloca { ptr, i64, i64 }, align 16
%a200 = alloca %S.json.Json, align 16
%a205 = alloca %S.json.Json, align 16
%a207 = alloca i64, align 16
%a215 = alloca { ptr, i64, i64 }, align 16
%a220 = alloca %S.json.Json, align 16
%a228 = alloca %S.json.Json, align 16
%a231 = alloca %S.json.Json, align 16
%a242 = alloca %S.docs.Doc, align 16
%a248 = alloca %S.json.Json, align 16
%a256 = alloca %S.json.Json, align 16
%a259 = 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 %then10140, label %endif10142
then10140:
%t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1
%t18 = load i64, ptr %t17
store i64 %t18, ptr %a12
br label %endif10142
endif10142:
%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.6737, 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.cond10143
while.cond10143:
%t32 = load i64, ptr %a31
%t33 = icmp sge i64 %t32, 0
br i1 %t33, label %while.body10144, label %while.end10145
while.body10144:
%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 %range10146, label %inrange10147
range10146:
call void @finch_panic_index(ptr @.str.6738, i64 678, i64 %t34, i64 %t36)
unreachable
inrange10147:
%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.from10148
logic.from10148:
br i1 %t43, label %logic.end10150, label %logic.rhs10149
logic.rhs10149:
%t44 = load i8, ptr %a41
%t45 = icmp eq i8 %t44, 93
br label %logic.rend10151
logic.rend10151:
br label %logic.end10150
logic.end10150:
%t46 = phi i1 [ true, %logic.from10148 ], [ %t45, %logic.rend10151 ]
br i1 %t46, label %then10152, label %else10153
then10152:
%t47 = load i64, ptr %a25
%t48 = add i64 %t47, 1
store i64 %t48, ptr %a25
br label %endif10154
else10153:
%t49 = load i8, ptr %a41
%t50 = icmp eq i8 %t49, 40
br label %logic.from10155
logic.from10155:
br i1 %t50, label %logic.end10157, label %logic.rhs10156
logic.rhs10156:
%t51 = load i8, ptr %a41
%t52 = icmp eq i8 %t51, 91
br label %logic.rend10158
logic.rend10158:
br label %logic.end10157
logic.end10157:
%t53 = phi i1 [ true, %logic.from10155 ], [ %t52, %logic.rend10158 ]
br i1 %t53, label %then10159, label %else10160
then10159:
%t54 = load i64, ptr %a25
%t55 = icmp eq i64 %t54, 0
br i1 %t55, label %then10162, label %else10163
then10162:
%t56 = load i8, ptr %a41
%t57 = icmp eq i8 %t56, 40
br i1 %t57, label %then10165, label %endif10167
then10165:
%t58 = load i64, ptr %a31
store i64 %t58, ptr %a27
br label %while.end10145
endif10167:
br label %endif10164
else10163:
%t59 = load i64, ptr %a25
%t60 = sub i64 %t59, 1
store i64 %t60, ptr %a25
br label %endif10164
endif10164:
br label %endif10161
else10160:
%t61 = load i8, ptr %a41
%t62 = icmp eq i8 %t61, 44
br label %logic.from10168
logic.from10168:
br i1 %t62, label %logic.rhs10169, label %logic.end10170
logic.rhs10169:
%t63 = load i64, ptr %a25
%t64 = icmp eq i64 %t63, 0
br label %logic.rend10171
logic.rend10171:
br label %logic.end10170
logic.end10170:
%t65 = phi i1 [ false, %logic.from10168 ], [ %t64, %logic.rend10171 ]
br i1 %t65, label %then10172, label %endif10174
then10172:
%t66 = load i64, ptr %a26
%t67 = add i64 %t66, 1
store i64 %t67, ptr %a26
br label %endif10174
endif10174:
br label %endif10161
endif10161:
br label %endif10154
endif10154:
%t68 = load i64, ptr %a31
%t69 = sub i64 %t68, 1
store i64 %t69, ptr %a31
br label %while.cond10143
while.end10145:
%t70 = load i64, ptr %a27
%t71 = icmp slt i64 %t70, 0
br i1 %t71, label %then10175, label %endif10177
then10175:
%t72 = call %S.json.Json @finch.json.new_null()
ret %S.json.Json %t72
endif10177:
%t73 = load i64, ptr %a27
store i64 %t73, ptr %a74
%t75 = load i64, ptr %a74
store i64 %t75, ptr %a76
br label %while.cond10178
while.cond10178:
%t77 = load i64, ptr %a76
%t78 = icmp sgt i64 %t77, 0
br label %logic.from10181
logic.from10181:
br i1 %t78, label %logic.rhs10182, label %logic.end10183
logic.rhs10182:
%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 %range10184, label %inrange10185
range10184:
call void @finch_panic_index(ptr @.str.6739, i64 700, i64 %t80, i64 %t82)
unreachable
inrange10185:
%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.rend10186
logic.rend10186:
br label %logic.end10183
logic.end10183:
%t88 = phi i1 [ false, %logic.from10181 ], [ %t87, %logic.rend10186 ]
br i1 %t88, label %while.body10179, label %while.end10180
while.body10179:
%t89 = load i64, ptr %a76
%t90 = sub i64 %t89, 1
store i64 %t90, ptr %a76
br label %while.cond10178
while.end10180:
%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.6740, 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 %then10187, label %endif10189
then10187:
%t101 = call %S.json.Json @finch.json.new_null()
ret %S.json.Json %t101
endif10189:
store { ptr, i64, i64 } { ptr @.str.6741, i64 0, i64 0 }, ptr %a102
%t103 = load i64, ptr %a76
%t104 = icmp sgt i64 %t103, 0
br label %logic.from10190
logic.from10190:
br i1 %t104, label %logic.rhs10191, label %logic.end10192
logic.rhs10191:
%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 %range10193, label %inrange10194
range10193:
call void @finch_panic_index(ptr @.str.6742, i64 708, i64 %t106, i64 %t108)
unreachable
inrange10194:
%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.rend10195
logic.rend10195:
br label %logic.end10192
logic.end10192:
%t114 = phi i1 [ false, %logic.from10190 ], [ %t113, %logic.rend10195 ]
br i1 %t114, label %then10196, label %endif10198
then10196:
%t115 = load i64, ptr %a76
%t116 = sub i64 %t115, 1
store i64 %t116, ptr %a117
br label %while.cond10199
while.cond10199:
%t118 = load i64, ptr %a117
%t119 = icmp sgt i64 %t118, 0
br label %logic.from10202
logic.from10202:
br i1 %t119, label %logic.rhs10203, label %logic.end10204
logic.rhs10203:
%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 %range10205, label %inrange10206
range10205:
call void @finch_panic_index(ptr @.str.6743, i64 711, i64 %t121, i64 %t123)
unreachable
inrange10206:
%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.rend10207
logic.rend10207:
br label %logic.end10204
logic.end10204:
%t129 = phi i1 [ false, %logic.from10202 ], [ %t128, %logic.rend10207 ]
br i1 %t129, label %while.body10200, label %while.end10201
while.body10200:
%t130 = load i64, ptr %a117
%t131 = sub i64 %t130, 1
store i64 %t131, ptr %a117
br label %while.cond10199
while.end10201:
%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.6744, 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 { ptr, i64, i64 } %t148, ptr %a149
%t150 = load { ptr, i64, i64 }, ptr %a149
store { ptr, i64, i64 } %t150, ptr %a151
store { ptr, i64, i64 } { ptr @.str.6746, i64 4, i64 0 }, ptr %a153
%t154 = call i32 @finch_str_starts(ptr %a151, ptr %a153)
%t155 = icmp ne i32 %t154, 0
br label %logic.from10208
logic.from10208:
br i1 %t155, label %logic.rhs10209, label %logic.end10210
logic.rhs10209:
%t156 = load { ptr, i64, i64 }, ptr %a149
store { ptr, i64, i64 } %t156, ptr %a157
store { ptr, i64, i64 } { ptr @.str.6748, i64 1, i64 0 }, ptr %a159
%t160 = call i32 @finch_str_ends(ptr %a157, ptr %a159)
%t161 = icmp ne i32 %t160, 0
br label %logic.rend10211
logic.rend10211:
br label %logic.end10210
logic.end10210:
%t162 = phi i1 [ false, %logic.from10208 ], [ %t161, %logic.rend10211 ]
br i1 %t162, label %then10212, label %endif10214
then10212:
%t163 = load { ptr, i64, i64 }, ptr %a149
store { ptr, i64, i64 } %t163, ptr %a164
%t166 = getelementptr inbounds { ptr, i64, i64 }, ptr %a149, i32 0, i32 1
%t167 = load i64, ptr %t166
%t168 = sub i64 %t167, 1
call void @finch_str_sub(ptr %a165, ptr %a164, i64 4, i64 %t168, ptr @.str.6749, i64 717)
%t169 = load { ptr, i64, i64 }, ptr %a165
store { ptr, i64, i64 } %t169, ptr %a149
br label %endif10214
endif10214:
%t170 = load { ptr, i64, i64 }, ptr %a149
store { ptr, i64, i64 } %t170, ptr %a171
call void @finch_str_copy(ptr %a172, ptr %a171)
%t173 = load { ptr, i64, i64 }, ptr %a172
store { ptr, i64, i64 } %t173, ptr %a102
br label %endif10198
endif10198:
%t174 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2
store i64 0, ptr %a175
br label %each.cond10215
each.cond10215:
%t176 = getelementptr inbounds { ptr, i64, i64 }, ptr %t174, i32 0, i32 1
%t177 = load i64, ptr %t176
%t178 = load i64, ptr %a175
%t179 = icmp slt i64 %t178, %t177
br i1 %t179, label %each.body10216, label %each.end10218
each.body10216:
%t180 = load ptr, ptr %t174
%t181 = getelementptr inbounds %S.lsp.FnRec, ptr %t180, i64 %t178
%t182 = load %S.lsp.FnRec, ptr %t181
store %S.lsp.FnRec %t182, ptr %a183
%t184 = getelementptr inbounds %S.lsp.FnRec, ptr %a183, i32 0, i32 1
%t185 = load { ptr, i64, i64 }, ptr %t184
%t186 = load { ptr, i64, i64 }, ptr %a97
store { ptr, i64, i64 } %t185, ptr %a187
store { ptr, i64, i64 } %t186, ptr %a188
%t189 = call i32 @finch_str_eq(ptr %a187, ptr %a188)
%t190 = icmp ne i32 %t189, 0
br label %logic.from10219
logic.from10219:
br i1 %t190, label %logic.rhs10220, label %logic.end10221
logic.rhs10220:
%t191 = getelementptr inbounds %S.lsp.FnRec, ptr %a183, i32 0, i32 2
%t192 = load { ptr, i64, i64 }, ptr %t191
%t193 = load { ptr, i64, i64 }, ptr %a102
store { ptr, i64, i64 } %t192, ptr %a194
store { ptr, i64, i64 } %t193, ptr %a195
%t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195)
%t197 = icmp ne i32 %t196, 0
br label %logic.rend10222
logic.rend10222:
br label %logic.end10221
logic.end10221:
%t198 = phi i1 [ false, %logic.from10219 ], [ %t197, %logic.rend10222 ]
br i1 %t198, label %then10223, label %endif10225
then10223:
%t199 = call %S.json.Json @finch.json.new_object()
store %S.json.Json %t199, ptr %a200
%t201 = getelementptr inbounds %S.lsp.FnRec, ptr %a183, i32 0, i32 7
%t202 = load { ptr, i64, i64 }, ptr %t201
%t203 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t202)
call void @finch.json.Json.set(ptr %a200, { ptr, i64, i64 } { ptr @.str.6750, i64 5, i64 0 }, %S.json.Json %t203)
%t204 = call %S.json.Json @finch.json.new_list()
store %S.json.Json %t204, ptr %a205
%t206 = getelementptr inbounds %S.lsp.FnRec, ptr %a183, i32 0, i32 8
store i64 0, ptr %a207
br label %each.cond10226
each.cond10226:
%t208 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i32 0, i32 1
%t209 = load i64, ptr %t208
%t210 = load i64, ptr %a207
%t211 = icmp slt i64 %t210, %t209
br i1 %t211, label %each.body10227, label %each.end10229
each.body10227:
%t212 = load ptr, ptr %t206
%t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i64 %t210
%t214 = load { ptr, i64, i64 }, ptr %t213
store { ptr, i64, i64 } %t214, ptr %a215
%t216 = getelementptr inbounds { ptr, i64, i64 }, ptr %a215, i32 0, i32 1
%t217 = load i64, ptr %t216
%t218 = icmp sgt i64 %t217, 0
br i1 %t218, label %then10230, label %endif10232
then10230:
%t219 = call %S.json.Json @finch.json.new_object()
store %S.json.Json %t219, ptr %a220
%t221 = load { ptr, i64, i64 }, ptr %a215
%t222 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t221)
call void @finch.json.Json.set(ptr %a220, { ptr, i64, i64 } { ptr @.str.6751, i64 5, i64 0 }, %S.json.Json %t222)
%t223 = load %S.json.Json, ptr %a220
call void @finch.json.Json.push(ptr %a205, %S.json.Json %t223)
br label %endif10232
endif10232:
br label %each.step10228
each.step10228:
%t224 = load i64, ptr %a207
%t225 = add i64 %t224, 1
store i64 %t225, ptr %a207
br label %each.cond10226
each.end10229:
%t226 = load %S.json.Json, ptr %a205
call void @finch.json.Json.set(ptr %a200, { ptr, i64, i64 } { ptr @.str.6752, i64 10, i64 0 }, %S.json.Json %t226)
%t227 = call %S.json.Json @finch.json.new_list()
store %S.json.Json %t227, ptr %a228
%t229 = load %S.json.Json, ptr %a200
call void @finch.json.Json.push(ptr %a228, %S.json.Json %t229)
%t230 = call %S.json.Json @finch.json.new_object()
store %S.json.Json %t230, ptr %a231
%t232 = load %S.json.Json, ptr %a228
call void @finch.json.Json.set(ptr %a231, { ptr, i64, i64 } { ptr @.str.6753, i64 10, i64 0 }, %S.json.Json %t232)
%t233 = call %S.json.Json @finch.lsp.num(i64 0)
call void @finch.json.Json.set(ptr %a231, { ptr, i64, i64 } { ptr @.str.6754, i64 15, i64 0 }, %S.json.Json %t233)
%t234 = load i64, ptr %a26
%t235 = call %S.json.Json @finch.lsp.num(i64 %t234)
call void @finch.json.Json.set(ptr %a231, { ptr, i64, i64 } { ptr @.str.6755, i64 15, i64 0 }, %S.json.Json %t235)
%t236 = load %S.json.Json, ptr %a231
ret %S.json.Json %t236
endif10225:
br label %each.step10217
each.step10217:
%t237 = load i64, ptr %a175
%t238 = add i64 %t237, 1
store i64 %t238, ptr %a175
br label %each.cond10215
each.end10218:
%t239 = call { ptr, i64, i64 } @finch.docs.builtins()
%t240 = load { ptr, i64, i64 }, ptr %a97
%t241 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t239, { ptr, i64, i64 } %t240)
store %S.docs.Doc %t241, ptr %a242
%t243 = getelementptr inbounds %S.docs.Doc, ptr %a242, i32 0, i32 0
%t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %t243, i32 0, i32 1
%t245 = load i64, ptr %t244
%t246 = icmp sgt i64 %t245, 0
br i1 %t246, label %then10233, label %endif10235
then10233:
%t247 = call %S.json.Json @finch.json.new_object()
store %S.json.Json %t247, ptr %a248
%t249 = getelementptr inbounds %S.docs.Doc, ptr %a242, i32 0, i32 1
%t250 = load { ptr, i64, i64 }, ptr %t249
%t251 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t250)
call void @finch.json.Json.set(ptr %a248, { ptr, i64, i64 } { ptr @.str.6756, i64 5, i64 0 }, %S.json.Json %t251)
%t252 = getelementptr inbounds %S.docs.Doc, ptr %a242, i32 0, i32 2
%t253 = load { ptr, i64, i64 }, ptr %t252
%t254 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t253)
call void @finch.json.Json.set(ptr %a248, { ptr, i64, i64 } { ptr @.str.6757, i64 13, i64 0 }, %S.json.Json %t254)
%t255 = call %S.json.Json @finch.json.new_list()
store %S.json.Json %t255, ptr %a256
%t257 = load %S.json.Json, ptr %a248
call void @finch.json.Json.push(ptr %a256, %S.json.Json %t257)
%t258 = call %S.json.Json @finch.json.new_object()
store %S.json.Json %t258, ptr %a259
%t260 = load %S.json.Json, ptr %a256
call void @finch.json.Json.set(ptr %a259, { ptr, i64, i64 } { ptr @.str.6758, i64 10, i64 0 }, %S.json.Json %t260)
%t261 = call %S.json.Json @finch.lsp.num(i64 0)
call void @finch.json.Json.set(ptr %a259, { ptr, i64, i64 } { ptr @.str.6759, i64 15, i64 0 }, %S.json.Json %t261)
%t262 = load i64, ptr %a26
%t263 = call %S.json.Json @finch.lsp.num(i64 %t262)
call void @finch.json.Json.set(ptr %a259, { ptr, i64, i64 } { ptr @.str.6760, i64 15, i64 0 }, %S.json.Json %t263)
%t264 = load %S.json.Json, ptr %a259
ret %S.json.Json %t264
endif10235:
%t265 = call %S.json.Json @finch.json.new_null()
ret %S.json.Json %t265
}
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.6761, 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.6762, i64 4, i64 0 })
store %S.json.Json %t4, ptr %a5
%t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.6763, i64 0, i64 0 })
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
store %S.json.Json %p0, ptr %a1
%t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.6764, 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.6765, i64 3, i64 0 })
store %S.json.Json %t4, ptr %a5
%t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.6766, i64 0, i64 0 })
%t7 = call { ptr, i64, i64 } @finch.lsp.uriToPath({ ptr, i64, i64 } %t6)
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
%a22 = alloca %S.json.Json, align 16
%a24 = alloca %S.json.Json, align 16
%a29 = alloca %S.json.Json, align 16
%a31 = alloca %S.json.Json, align 16
%a37 = alloca %S.json.Json, align 16
%a40 = alloca %S.json.Json, align 16
%a45 = alloca { ptr, i64, i64 }, align 16
%a46 = alloca { ptr, i64, i64 }, align 16
%a52 = alloca { ptr, i64, i64 }, align 16
%a53 = 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
%a69 = alloca { ptr, i64, i64 }, align 16
%a70 = alloca i32, align 16
%a81 = alloca { ptr, i64, i64 }, align 16
%a82 = alloca { ptr, i64, i64 }, align 16
%a87 = alloca { ptr, i64, i64 }, align 16
%a89 = alloca %S.json.Json, align 16
%a95 = alloca %S.json.Json, align 16
%a97 = alloca %S.json.Json, align 16
%a101 = alloca { ptr, i64, i64 }, align 16
%a102 = alloca i32, align 16
%a113 = alloca { ptr, i64, i64 }, align 16
%a114 = 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
%a132 = alloca { ptr, i64, i64 }, align 16
%a135 = alloca { ptr, i64, i64 }, align 16
%a140 = alloca { ptr, i64, i64 }, align 16
%a145 = alloca { ptr, i64, i64 }, align 16
%a149 = alloca %S.json.Json, align 16
%a155 = 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
%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
%a171 = alloca { ptr, i64, i64 }, align 16
%a172 = alloca { ptr, i64, i64 }, align 16
%a177 = alloca { ptr, i64, i64 }, align 16
%a179 = alloca %S.json.Json, align 16
%a181 = alloca %S.json.Json, align 16
%a184 = alloca i64, align 16
%a186 = alloca %S.json.Json, align 16
%a188 = alloca %S.json.Json, align 16
%a191 = alloca i64, align 16
%a194 = 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
%a212 = alloca %S.lsp.Analysis, align 16
%a213 = alloca %S.lsp.Analysis, align 16
%a215 = alloca %S.lsp.Analysis, align 16
%a216 = alloca { ptr, i64, i64 }, align 16
%a219 = alloca { ptr, i64, i64 }, align 16
%a224 = alloca { ptr, i64, i64 }, align 16
%a227 = alloca { ptr, i64, i64 }, align 16
%a228 = 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
%a248 = alloca { ptr, i64, i64 }, align 16
%a249 = alloca { ptr, i64, i64 }, align 16
%a258 = alloca { ptr, i64, i64 }, align 16
%a259 = alloca { ptr, i64, i64 }, align 16
%a269 = alloca { ptr, i64, i64 }, align 16
%a270 = 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.6767, 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.6768, i64 0, i64 0 })
store { ptr, i64, i64 } %t4, ptr %a5
%t6 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.6769, 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.6770, 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.6771, 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.arm10237, label %match.next10238
match.arm10237:
%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.6772, i64 16, i64 0 }, %S.json.Json %t17)
%t18 = call %S.json.Json @finch.json.new_bool(i1 true)
call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.6773, i64 13, i64 0 }, %S.json.Json %t18)
%t19 = call %S.json.Json @finch.json.new_bool(i1 true)
call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.6774, i64 18, i64 0 }, %S.json.Json %t19)
%t20 = call %S.json.Json @finch.json.new_bool(i1 true)
call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.6775, i64 22, i64 0 }, %S.json.Json %t20)
%t21 = call %S.json.Json @finch.json.new_object()
store %S.json.Json %t21, ptr %a22
%t23 = call %S.json.Json @finch.json.new_list()
store %S.json.Json %t23, ptr %a24
%t25 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6776, i64 1, i64 0 })
call void @finch.json.Json.push(ptr %a24, %S.json.Json %t25)
%t26 = load %S.json.Json, ptr %a24
call void @finch.json.Json.set(ptr %a22, { ptr, i64, i64 } { ptr @.str.6777, i64 17, i64 0 }, %S.json.Json %t26)
%t27 = load %S.json.Json, ptr %a22
call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.6778, i64 18, i64 0 }, %S.json.Json %t27)
%t28 = call %S.json.Json @finch.json.new_object()
store %S.json.Json %t28, ptr %a29
%t30 = call %S.json.Json @finch.json.new_list()
store %S.json.Json %t30, ptr %a31
%t32 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6779, i64 1, i64 0 })
call void @finch.json.Json.push(ptr %a31, %S.json.Json %t32)
%t33 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6780, i64 1, i64 0 })
call void @finch.json.Json.push(ptr %a31, %S.json.Json %t33)
%t34 = load %S.json.Json, ptr %a31
call void @finch.json.Json.set(ptr %a29, { ptr, i64, i64 } { ptr @.str.6781, i64 17, i64 0 }, %S.json.Json %t34)
%t35 = load %S.json.Json, ptr %a29
call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.6782, i64 21, i64 0 }, %S.json.Json %t35)
%t36 = call %S.json.Json @finch.json.new_object()
store %S.json.Json %t36, ptr %a37
%t38 = load %S.json.Json, ptr %a16
call void @finch.json.Json.set(ptr %a37, { ptr, i64, i64 } { ptr @.str.6783, i64 12, i64 0 }, %S.json.Json %t38)
%t39 = call %S.json.Json @finch.json.new_object()
store %S.json.Json %t39, ptr %a40
%t41 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6785, i64 5, i64 0 })
call void @finch.json.Json.set(ptr %a40, { ptr, i64, i64 } { ptr @.str.6784, i64 4, i64 0 }, %S.json.Json %t41)
%t42 = load %S.json.Json, ptr %a40
call void @finch.json.Json.set(ptr %a37, { ptr, i64, i64 } { ptr @.str.6786, i64 10, i64 0 }, %S.json.Json %t42)
%t43 = load %S.json.Json, ptr %a9
%t44 = load %S.json.Json, ptr %a37
call void @finch.lsp.reply(%S.json.Json %t43, %S.json.Json %t44)
br label %match.end10236
match.next10238:
store { ptr, i64, i64 } %t10, ptr %a45
store { ptr, i64, i64 } { ptr @.str.6787, i64 8, i64 0 }, ptr %a46
%t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46)
%t48 = icmp ne i32 %t47, 0
br i1 %t48, label %match.arm10239, label %match.next10240
match.arm10239:
%t49 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 6
store i1 true, ptr %t49
%t50 = load %S.json.Json, ptr %a9
%t51 = call %S.json.Json @finch.json.new_null()
call void @finch.lsp.reply(%S.json.Json %t50, %S.json.Json %t51)
br label %match.end10236
match.next10240:
store { ptr, i64, i64 } %t10, ptr %a52
store { ptr, i64, i64 } { ptr @.str.6788, i64 4, i64 0 }, ptr %a53
%t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53)
%t55 = icmp ne i32 %t54, 0
br i1 %t55, label %match.arm10241, label %match.next10242
match.arm10241:
%t56 = trunc i64 0 to i32
%t57 = call i32 @fflush(ptr null)
call void @exit(i32 %t56)
br label %match.end10236
match.next10242:
store { ptr, i64, i64 } %t10, ptr %a58
store { ptr, i64, i64 } { ptr @.str.6789, i64 20, i64 0 }, ptr %a59
%t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59)
%t61 = icmp ne i32 %t60, 0
br i1 %t61, label %match.arm10243, label %match.next10244
match.arm10243:
%t62 = load %S.json.Json, ptr %a7
%t63 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t62)
store { ptr, i64, i64 } %t63, ptr %a64
%t65 = load %S.json.Json, ptr %a7
%t66 = call { ptr, i64, i64 } @finch.lsp.textOf(%S.json.Json %t65)
%t67 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2
%t68 = load { ptr, i64, i64 }, ptr %a64
store { ptr, i64, i64 } %t68, ptr %a69
store i32 0, ptr %a70
%t71 = call i64 @finch_map_slot(ptr %t67, ptr %a69, 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 %a70)
%t72 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t67, i32 0, i32 0
%t73 = load ptr, ptr %t72
%t74 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t73, i64 %t71
%t75 = load i32, ptr %a70
%t76 = icmp ne i32 %t75, 0
br i1 %t76, label %map.new10245, label %map.have10246
map.new10245:
%t77 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t74, i32 0, i32 1
call void @finch_str_copy(ptr %t77, ptr %a69)
%t78 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t74, i32 0, i32 2
store { ptr, i64, i64 } zeroinitializer, ptr %t78
br label %map.have10246
map.have10246:
%t79 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t74, i32 0, i32 2
store { ptr, i64, i64 } %t66, ptr %t79
%t80 = load { ptr, i64, i64 }, ptr %a64
call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t80)
br label %match.end10236
match.next10244:
store { ptr, i64, i64 } %t10, ptr %a81
store { ptr, i64, i64 } { ptr @.str.6790, i64 22, i64 0 }, ptr %a82
%t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82)
%t84 = icmp ne i32 %t83, 0
br i1 %t84, label %match.arm10247, label %match.next10248
match.arm10247:
%t85 = load %S.json.Json, ptr %a7
%t86 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t85)
store { ptr, i64, i64 } %t86, ptr %a87
%t88 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.6791, i64 14, i64 0 })
store %S.json.Json %t88, ptr %a89
%t90 = call i64 @finch.json.Json.len(ptr %a89)
%t91 = icmp sgt i64 %t90, 0
br i1 %t91, label %then10249, label %endif10251
then10249:
%t92 = call i64 @finch.json.Json.len(ptr %a89)
%t93 = sub i64 %t92, 1
%t94 = call %S.json.Json @finch.json.Json.at(ptr %a89, i64 %t93)
store %S.json.Json %t94, ptr %a95
%t96 = call %S.json.Json @finch.json.Json.get(ptr %a95, { ptr, i64, i64 } { ptr @.str.6792, i64 4, i64 0 })
store %S.json.Json %t96, ptr %a97
%t98 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a97, { ptr, i64, i64 } { ptr @.str.6793, i64 0, i64 0 })
%t99 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2
%t100 = load { ptr, i64, i64 }, ptr %a87
store { ptr, i64, i64 } %t100, ptr %a101
store i32 0, ptr %a102
%t103 = call i64 @finch_map_slot(ptr %t99, ptr %a101, 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 %a102)
%t104 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t99, i32 0, i32 0
%t105 = load ptr, ptr %t104
%t106 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t105, i64 %t103
%t107 = load i32, ptr %a102
%t108 = icmp ne i32 %t107, 0
br i1 %t108, label %map.new10252, label %map.have10253
map.new10252:
%t109 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t106, i32 0, i32 1
call void @finch_str_copy(ptr %t109, ptr %a101)
%t110 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t106, i32 0, i32 2
store { ptr, i64, i64 } zeroinitializer, ptr %t110
br label %map.have10253
map.have10253:
%t111 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t106, i32 0, i32 2
store { ptr, i64, i64 } %t98, ptr %t111
%t112 = load { ptr, i64, i64 }, ptr %a87
call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t112)
br label %endif10251
endif10251:
br label %match.end10236
match.next10248:
store { ptr, i64, i64 } %t10, ptr %a113
store { ptr, i64, i64 } { ptr @.str.6794, i64 20, i64 0 }, ptr %a114
%t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114)
%t116 = icmp ne i32 %t115, 0
br i1 %t116, label %match.arm10254, label %match.next10255
match.arm10254:
%t117 = load %S.json.Json, ptr %a7
%t118 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t117)
store { ptr, i64, i64 } %t118, ptr %a119
%t120 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2
%t121 = load { ptr, i64, i64 }, ptr %a119
store { ptr, i64, i64 } %t121, ptr %a122
%t123 = call i64 @finch_map_find(ptr %t120, ptr %a122, 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)
%t124 = icmp sge i64 %t123, 0
br i1 %t124, label %then10256, label %endif10258
then10256:
%t125 = load { ptr, i64, i64 }, ptr %a119
call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t125)
br label %endif10258
endif10258:
br label %match.end10236
match.next10255:
store { ptr, i64, i64 } %t10, ptr %a126
store { ptr, i64, i64 } { ptr @.str.6795, i64 21, 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.arm10259, label %match.next10260
match.arm10259:
%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 %remove.hit10261, label %remove.end10262
remove.hit10261:
call void @finch_map_remove_at(ptr %t133, i64 %t136, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64))
br label %remove.end10262
remove.end10262:
%t138 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3
%t139 = load { ptr, i64, i64 }, ptr %a132
store { ptr, i64, i64 } %t139, ptr %a140
%t141 = call i64 @finch_map_find(ptr %t138, ptr %a140, 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)
%t142 = icmp sge i64 %t141, 0
br i1 %t142, label %remove.hit10263, label %remove.end10264
remove.hit10263:
call void @finch_map_remove_at(ptr %t138, i64 %t141, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64))
br label %remove.end10264
remove.end10264:
%t143 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4
%t144 = load { ptr, i64, i64 }, ptr %a132
store { ptr, i64, i64 } %t144, ptr %a145
%t146 = call i64 @finch_map_find(ptr %t143, ptr %a145, 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)
%t147 = icmp sge i64 %t146, 0
br i1 %t147, label %remove.hit10265, label %remove.end10266
remove.hit10265:
call void @finch_map_remove_at(ptr %t143, i64 %t146, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64))
br label %remove.end10266
remove.end10266:
%t148 = call %S.json.Json @finch.json.new_object()
store %S.json.Json %t148, ptr %a149
%t150 = load { ptr, i64, i64 }, ptr %a132
%t151 = call { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %t150)
%t152 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t151)
call void @finch.json.Json.set(ptr %a149, { ptr, i64, i64 } { ptr @.str.6796, i64 3, i64 0 }, %S.json.Json %t152)
%t153 = call %S.json.Json @finch.json.new_list()
call void @finch.json.Json.set(ptr %a149, { ptr, i64, i64 } { ptr @.str.6797, i64 11, i64 0 }, %S.json.Json %t153)
%t154 = load %S.json.Json, ptr %a149
call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.6798, i64 31, i64 0 }, %S.json.Json %t154)
br label %match.end10236
match.next10260:
store { ptr, i64, i64 } %t10, ptr %a155
store { ptr, i64, i64 } { ptr @.str.6799, i64 18, i64 0 }, ptr %a156
%t157 = call i32 @finch_str_eq(ptr %a155, ptr %a156)
%t158 = icmp ne i32 %t157, 0
br i1 %t158, label %match.arm10267, label %match.or10269
match.or10269:
store { ptr, i64, i64 } %t10, ptr %a159
store { ptr, i64, i64 } { ptr @.str.6800, i64 23, i64 0 }, ptr %a160
%t161 = call i32 @finch_str_eq(ptr %a159, ptr %a160)
%t162 = icmp ne i32 %t161, 0
br i1 %t162, label %match.arm10267, label %match.or10270
match.or10270:
store { ptr, i64, i64 } %t10, ptr %a163
store { ptr, i64, i64 } { ptr @.str.6801, i64 23, i64 0 }, ptr %a164
%t165 = call i32 @finch_str_eq(ptr %a163, ptr %a164)
%t166 = icmp ne i32 %t165, 0
br i1 %t166, label %match.arm10267, label %match.or10271
match.or10271:
store { ptr, i64, i64 } %t10, ptr %a167
store { ptr, i64, i64 } { ptr @.str.6802, i64 27, i64 0 }, ptr %a168
%t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168)
%t170 = icmp ne i32 %t169, 0
br i1 %t170, label %match.arm10267, label %match.or10272
match.or10272:
store { ptr, i64, i64 } %t10, ptr %a171
store { ptr, i64, i64 } { ptr @.str.6803, i64 26, i64 0 }, ptr %a172
%t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172)
%t174 = icmp ne i32 %t173, 0
br i1 %t174, label %match.arm10267, label %match.next10268
match.arm10267:
%t175 = load %S.json.Json, ptr %a7
%t176 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t175)
store { ptr, i64, i64 } %t176, ptr %a177
%t178 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.6804, i64 8, i64 0 })
store %S.json.Json %t178, ptr %a179
%t180 = call %S.json.Json @finch.json.Json.get(ptr %a179, { ptr, i64, i64 } { ptr @.str.6805, i64 4, i64 0 })
store %S.json.Json %t180, ptr %a181
%t182 = call i64 @finch.json.Json.int_or(ptr %a181, i64 0)
%t183 = add i64 %t182, 1
store i64 %t183, ptr %a184
%t185 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.6806, i64 8, i64 0 })
store %S.json.Json %t185, ptr %a186
%t187 = call %S.json.Json @finch.json.Json.get(ptr %a186, { ptr, i64, i64 } { ptr @.str.6807, i64 9, i64 0 })
store %S.json.Json %t187, ptr %a188
%t189 = call i64 @finch.json.Json.int_or(ptr %a188, i64 0)
%t190 = add i64 %t189, 1
store i64 %t190, ptr %a191
%t192 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3
%t193 = load { ptr, i64, i64 }, ptr %a177
store { ptr, i64, i64 } %t193, ptr %a194
%t195 = call i64 @finch_map_find(ptr %t192, ptr %a194, 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)
%t196 = icmp sge i64 %t195, 0
%t197 = xor i1 %t196, true
br i1 %t197, label %then10273, label %endif10275
then10273:
%t198 = load %S.json.Json, ptr %a9
%t199 = call %S.json.Json @finch.json.new_null()
call void @finch.lsp.reply(%S.json.Json %t198, %S.json.Json %t199)
ret void
endif10275:
%t200 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3
%t201 = load { ptr, i64, i64 }, ptr %a177
store { ptr, i64, i64 } %t201, ptr %a202
%t203 = call i64 @finch_map_find(ptr %t200, ptr %a202, 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)
%t204 = icmp slt i64 %t203, 0
br i1 %t204, label %map.missing10276, label %map.found10277
map.missing10276:
store { ptr, i64, i64 } zeroinitializer, ptr %a205
store { ptr, i64, i64 } %t201, ptr %a206
call void @finch_buf_str(ptr %a205, ptr %a206, i32 1)
call void @finch_map_missing(ptr @.str.6808, i64 842, ptr %a205)
unreachable
map.found10277:
%t207 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t200, i32 0, i32 0
%t208 = load ptr, ptr %t207
%t209 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t208, i64 %t203
%t210 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t209, i32 0, i32 2
%t211 = load %S.lsp.Analysis, ptr %t210
store %S.lsp.Analysis %t211, ptr %a212
call void @finch.copy.S_lsp_Analysis(ptr %a213, ptr %a212)
%t214 = load %S.lsp.Analysis, ptr %a213
store %S.lsp.Analysis %t214, ptr %a215
store { ptr, i64, i64 } { ptr @.str.6809, i64 0, i64 0 }, ptr %a216
%t217 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2
%t218 = load { ptr, i64, i64 }, ptr %a177
store { ptr, i64, i64 } %t218, ptr %a219
%t220 = call i64 @finch_map_find(ptr %t217, ptr %a219, 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)
%t221 = icmp sge i64 %t220, 0
br i1 %t221, label %then10278, label %endif10280
then10278:
%t222 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2
%t223 = load { ptr, i64, i64 }, ptr %a177
store { ptr, i64, i64 } %t223, ptr %a224
%t225 = call i64 @finch_map_find(ptr %t222, ptr %a224, 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)
%t226 = icmp slt i64 %t225, 0
br i1 %t226, label %map.missing10281, label %map.found10282
map.missing10281:
store { ptr, i64, i64 } zeroinitializer, ptr %a227
store { ptr, i64, i64 } %t223, ptr %a228
call void @finch_buf_str(ptr %a227, ptr %a228, i32 1)
call void @finch_map_missing(ptr @.str.6810, i64 845, ptr %a227)
unreachable
map.found10282:
%t229 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t222, i32 0, i32 0
%t230 = load ptr, ptr %t229
%t231 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t230, i64 %t225
%t232 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t231, i32 0, i32 2
%t233 = load { ptr, i64, i64 }, ptr %t232
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 %a216
br label %endif10280
endif10280:
%t237 = load { ptr, i64, i64 }, ptr %a5
store { ptr, i64, i64 } %t237, ptr %a238
store { ptr, i64, i64 } { ptr @.str.6811, i64 18, i64 0 }, ptr %a239
%t240 = call i32 @finch_str_eq(ptr %a238, ptr %a239)
%t241 = icmp ne i32 %t240, 0
br i1 %t241, label %match.arm10284, label %match.next10285
match.arm10284:
%t242 = load %S.json.Json, ptr %a9
%t243 = load %S.lsp.Analysis, ptr %a215
%t244 = load { ptr, i64, i64 }, ptr %a177
%t245 = load i64, ptr %a184
%t246 = load i64, ptr %a191
%t247 = call %S.json.Json @finch.lsp.hoverAt(%S.lsp.Analysis %t243, { ptr, i64, i64 } %t244, i64 %t245, i64 %t246)
call void @finch.lsp.reply(%S.json.Json %t242, %S.json.Json %t247)
br label %match.end10283
match.next10285:
store { ptr, i64, i64 } %t237, ptr %a248
store { ptr, i64, i64 } { ptr @.str.6812, i64 23, i64 0 }, ptr %a249
%t250 = call i32 @finch_str_eq(ptr %a248, ptr %a249)
%t251 = icmp ne i32 %t250, 0
br i1 %t251, label %match.arm10286, label %match.next10287
match.arm10286:
%t252 = load %S.json.Json, ptr %a9
%t253 = load %S.lsp.Analysis, ptr %a215
%t254 = load { ptr, i64, i64 }, ptr %a177
%t255 = load i64, ptr %a184
%t256 = load i64, ptr %a191
%t257 = call %S.json.Json @finch.lsp.definitionAt(%S.lsp.Analysis %t253, { ptr, i64, i64 } %t254, i64 %t255, i64 %t256)
call void @finch.lsp.reply(%S.json.Json %t252, %S.json.Json %t257)
br label %match.end10283
match.next10287:
store { ptr, i64, i64 } %t237, ptr %a258
store { ptr, i64, i64 } { ptr @.str.6813, i64 23, i64 0 }, ptr %a259
%t260 = call i32 @finch_str_eq(ptr %a258, ptr %a259)
%t261 = icmp ne i32 %t260, 0
br i1 %t261, label %match.arm10288, label %match.next10289
match.arm10288:
%t262 = load %S.json.Json, ptr %a9
%t263 = load %S.lsp.Analysis, ptr %a215
%t264 = load { ptr, i64, i64 }, ptr %a216
%t265 = load { ptr, i64, i64 }, ptr %a177
%t266 = load i64, ptr %a184
%t267 = load i64, ptr %a191
%t268 = call %S.json.Json @finch.lsp.completionAt(%S.lsp.Analysis %t263, { ptr, i64, i64 } %t264, { ptr, i64, i64 } %t265, i64 %t266, i64 %t267)
call void @finch.lsp.reply(%S.json.Json %t262, %S.json.Json %t268)
br label %match.end10283
match.next10289:
store { ptr, i64, i64 } %t237, ptr %a269
store { ptr, i64, i64 } { ptr @.str.6814, i64 27, i64 0 }, ptr %a270
%t271 = call i32 @finch_str_eq(ptr %a269, ptr %a270)
%t272 = icmp ne i32 %t271, 0
br i1 %t272, label %match.arm10290, label %match.next10291
match.arm10290:
%t273 = load %S.json.Json, ptr %a9
%t274 = load %S.lsp.Analysis, ptr %a215
%t275 = load { ptr, i64, i64 }, ptr %a177
%t276 = call %S.json.Json @finch.lsp.symbolsOf(%S.lsp.Analysis %t274, { ptr, i64, i64 } %t275)
call void @finch.lsp.reply(%S.json.Json %t273, %S.json.Json %t276)
br label %match.end10283
match.next10291:
br label %match.arm10292
match.arm10292:
%t277 = load %S.json.Json, ptr %a9
%t278 = load %S.lsp.Analysis, ptr %a215
%t279 = load { ptr, i64, i64 }, ptr %a216
%t280 = load { ptr, i64, i64 }, ptr %a177
%t281 = load i64, ptr %a184
%t282 = load i64, ptr %a191
%t283 = call %S.json.Json @finch.lsp.signatureAt(%S.lsp.Analysis %t278, { ptr, i64, i64 } %t279, { ptr, i64, i64 } %t280, i64 %t281, i64 %t282)
call void @finch.lsp.reply(%S.json.Json %t277, %S.json.Json %t283)
br label %match.end10283
match.end10283:
br label %match.end10236
match.next10268:
br label %match.arm10294
match.arm10294:
%t284 = getelementptr inbounds %S.json.Json, ptr %a9, i32 0, i32 0
%t285 = load i32, ptr %t284
%t286 = icmp ne i32 %t285, 0
br i1 %t286, label %then10296, label %endif10298
then10296:
%t287 = load %S.json.Json, ptr %a9
%t288 = call %S.json.Json @finch.json.new_null()
call void @finch.lsp.reply(%S.json.Json %t287, %S.json.Json %t288)
br label %endif10298
endif10298:
br label %match.end10236
match.end10236:
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
%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
%a16 = alloca %S.lsp.Server, align 16
%a22 = alloca { ptr, i64, i64 }, align 16
%a23 = alloca %S.json.Json, 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
%a35 = alloca { ptr, i64, i64 }, align 16
%a36 = 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.lsp.Server zeroinitializer, { ptr, i64, i64 } %t5, 0
%t7 = call i32 @getpid()
%t8 = sext i32 %t7 to i64
call void @finch_str_from_int(ptr %a9, i64 %t8)
%t10 = load { ptr, i64, i64 }, ptr %a9
store { ptr, i64, i64 } { ptr @.str.6815, i64 15, 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
%t15 = insertvalue %S.lsp.Server %t6, { ptr, i64, i64 } %t14, 1
store %S.lsp.Server %t15, ptr %a16
br label %while.cond10299
while.cond10299:
br label %while.body10300
while.body10300:
%t17 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.lsp.readMessage()
%t18 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t17, 0
%t19 = xor i1 %t18, true
%t20 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t17, 2
%t21 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t17, 1
br i1 %t19, label %or.failed10302, label %or.ok10303
or.failed10302:
store { ptr, i64, i64 } %t20, ptr %a22
br label %while.end10301
or.ok10303:
store %S.json.Json %t21, ptr %a23
%t24 = load %S.json.Json, ptr %a23
call void @finch.lsp.Server.answer(ptr %a16, %S.json.Json %t24)
br label %while.cond10299
while.end10301:
%t25 = getelementptr inbounds %S.lsp.Server, ptr %a16, i32 0, i32 1
%t26 = load { ptr, i64, i64 }, ptr %t25
store { ptr, i64, i64 } { ptr @.str.6816, i64 8, 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.6817, i64 1, i64 0 }, ptr %a33
call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33)
%t34 = load { ptr, i64, i64 }, ptr %a31
store { ptr, i64, i64 } %t34, ptr %a36
call void @finch_str_copy(ptr %a35, ptr %a36)
%t37 = call i64 @finch_shell(ptr %a35)
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.arm10305, label %match.or10307
match.or10307:
%t4 = icmp eq i32 %t2, 5
br i1 %t4, label %match.arm10305, label %match.next10306
match.arm10305:
%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.from10308
match.from10308:
br label %match.end10304
match.next10306:
%t8 = icmp eq i32 %t2, 3
br i1 %t8, label %match.arm10309, label %match.next10310
match.arm10309:
%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.from10311
match.from10311:
br label %match.end10304
match.next10310:
br label %match.arm10312
match.arm10312:
br label %match.from10314
match.from10314:
br label %match.end10304
match.end10304:
%t12 = phi i64 [ %t7, %match.from10308 ], [ %t11, %match.from10311 ], [ 0, %match.from10314 ]
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.from10315
logic.from10315:
br i1 %t4, label %logic.rhs10316, label %logic.end10317
logic.rhs10316:
%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.cond10318
find.cond10318:
%t12 = load i64, ptr %a11
%t13 = icmp slt i64 %t12, %t9
br i1 %t13, label %find.body10319, label %find.end10322
find.body10319:
%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.hit10320, label %find.next10321
find.hit10320:
store i64 %t12, ptr %a8
br label %find.end10322
find.next10321:
%t20 = add i64 %t12, 1
store i64 %t20, ptr %a11
br label %find.cond10318
find.end10322:
%t21 = load i64, ptr %a8
%t22 = icmp sge i64 %t21, 0
br label %logic.rend10323
logic.rend10323:
br label %logic.end10317
logic.end10317:
%t23 = phi i1 [ false, %logic.from10315 ], [ %t22, %logic.rend10323 ]
ret i1 %t23
}
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 %then10324, label %endif10326
then10324:
%t5 = call %S.json.Json @finch.json.new_null()
ret %S.json.Json %t5
endif10326:
%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.cond10327
find.cond10327:
%t13 = load i64, ptr %a12
%t14 = icmp slt i64 %t13, %t10
br i1 %t14, label %find.body10328, label %find.end10331
find.body10328:
%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.hit10329, label %find.next10330
find.hit10329:
store i64 %t13, ptr %a9
br label %find.end10331
find.next10330:
%t21 = add i64 %t13, 1
store i64 %t21, ptr %a12
br label %find.cond10327
find.end10331:
%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 %then10332, label %endif10334
then10332:
%t26 = call %S.json.Json @finch.json.new_null()
ret %S.json.Json %t26
endif10334:
%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 %range10335, label %inrange10336
range10335:
call void @finch_panic_index(ptr @.str.6818, i64 84, i64 %t28, i64 %t30)
unreachable
inrange10336:
%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.from10337
logic.from10337:
br i1 %t4, label %logic.end10339, label %logic.rhs10338
logic.rhs10338:
%t5 = load i64, ptr %a1
%t6 = icmp slt i64 %t5, 0
br label %logic.rend10340
logic.rend10340:
br label %logic.end10339
logic.end10339:
%t7 = phi i1 [ true, %logic.from10337 ], [ %t6, %logic.rend10340 ]
br label %logic.from10341
logic.from10341:
br i1 %t7, label %logic.end10343, label %logic.rhs10342
logic.rhs10342:
%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.rend10344
logic.rend10344:
br label %logic.end10343
logic.end10343:
%t13 = phi i1 [ true, %logic.from10341 ], [ %t12, %logic.rend10344 ]
br i1 %t13, label %then10345, label %endif10347
then10345:
%t14 = call %S.json.Json @finch.json.new_null()
ret %S.json.Json %t14
endif10347:
%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 %range10348, label %inrange10349
range10348:
call void @finch_panic_index(ptr @.str.6819, i64 92, i64 %t16, i64 %t18)
unreachable
inrange10349:
%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 %then10350, label %endif10352
then10350:
%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
endif10352:
%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 %then10353, label %endif10355
then10353:
%t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 2
%t6 = load double, ptr %t5
ret double %t6
endif10355:
%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 %then10356, label %endif10358
then10356:
%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
endif10358:
%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 %then10359, label %endif10361
then10359:
%t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 1
%t6 = load i1, ptr %t5
ret i1 %t6
endif10361:
%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
%a37 = alloca { ptr, i64, i64 }, align 16
%a38 = alloca { ptr, i64, i64 }, align 16
%a47 = alloca %S.json.Json, align 16
%a48 = 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.cond10362
find.cond10362:
%t10 = load i64, ptr %a9
%t11 = icmp slt i64 %t10, %t7
br i1 %t11, label %find.body10363, label %find.end10366
find.body10363:
%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.hit10364, label %find.next10365
find.hit10364:
store i64 %t10, ptr %a6
br label %find.end10366
find.next10365:
%t18 = add i64 %t10, 1
store i64 %t18, ptr %a9
br label %find.cond10362
find.end10366:
%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 %then10367, label %endif10369
then10367:
%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 %range10370, label %inrange10371
range10370:
call void @finch_panic_index(ptr @.str.6820, i64 140, i64 %t25, i64 %t27)
unreachable
inrange10371:
%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
store %S.json.Json %t33, ptr %t30
ret void
endif10369:
%t34 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5
%t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i32 0, i32 1
%t36 = load { ptr, i64, i64 }, ptr %a1
store { ptr, i64, i64 } %t36, ptr %a37
call void @finch_str_copy(ptr %a38, ptr %a37)
%t39 = load { ptr, i64, i64 }, 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 ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t42 = load ptr, ptr %t34
%t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i64 %t40
store { ptr, i64, i64 } %t39, ptr %t43
store i64 %t41, ptr %t35
%t44 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4
%t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i32 0, i32 1
%t46 = load %S.json.Json, ptr %a2
store %S.json.Json %t46, ptr %a47
call void @finch.copy.S_json_Json(ptr %a48, ptr %a47)
%t49 = load %S.json.Json, ptr %a48
%t50 = load i64, ptr %t45
%t51 = add i64 %t50, 1
call void @finch_arr_reserve(ptr %t44, i64 %t51, i64 ptrtoint (ptr getelementptr (%S.json.Json, ptr null, i32 1) to i64))
%t52 = load ptr, ptr %t44
%t53 = getelementptr inbounds %S.json.Json, ptr %t52, i64 %t50
store %S.json.Json %t49, ptr %t53
store i64 %t51, ptr %t45
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
%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
%a93 = alloca { ptr, i64, i64 }, align 16
%a94 = 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.6821, 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.cond10372
each.cond10372:
%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.body10373, label %each.end10375
each.body10373:
%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 %then10376, label %else10377
then10376:
%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.6822, i64 2, i64 0 }, ptr %t27
store i64 %t25, ptr %t23
br label %endif10378
else10377:
%t28 = load i8, ptr %a17
%t29 = icmp eq i8 %t28, 92
br i1 %t29, label %then10379, label %else10380
then10379:
%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.6823, i64 2, i64 0 }, ptr %t34
store i64 %t32, ptr %t30
br label %endif10381
else10380:
%t35 = load i8, ptr %a17
%t36 = icmp eq i8 %t35, 10
br i1 %t36, label %then10382, label %else10383
then10382:
%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.6824, i64 2, i64 0 }, ptr %t41
store i64 %t39, ptr %t37
br label %endif10384
else10383:
%t42 = load i8, ptr %a17
%t43 = icmp eq i8 %t42, 13
br i1 %t43, label %then10385, label %else10386
then10385:
%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.6825, i64 2, i64 0 }, ptr %t48
store i64 %t46, ptr %t44
br label %endif10387
else10386:
%t49 = load i8, ptr %a17
%t50 = icmp eq i8 %t49, 9
br i1 %t50, label %then10388, label %else10389
then10388:
%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.6826, i64 2, i64 0 }, ptr %t55
store i64 %t53, ptr %t51
br label %endif10390
else10389:
%t56 = load i64, ptr %a20
%t57 = icmp slt i64 %t56, 32
br i1 %t57, label %then10391, label %else10392
then10391:
%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.6827, i64 4, i64 0 }, ptr %a63
store { ptr, i64, i64 } %t61, ptr %a64
call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64)
%t65 = load { ptr, i64, i64 }, ptr %a62
%t66 = load i64, ptr %a20
%t67 = srem i64 %t66, 16
%t68 = call { ptr, i64, i64 } @finch.json.hexdigit(i64 %t67)
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)
%t72 = load { ptr, i64, i64 }, ptr %a69
%t73 = load i64, ptr %t58
%t74 = add i64 %t73, 1
call void @finch_arr_reserve(ptr %a8, i64 %t74, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t75 = load ptr, ptr %a8
%t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %t75, i64 %t73
store { ptr, i64, i64 } %t72, ptr %t76
store i64 %t74, ptr %t58
br label %endif10393
else10392:
%t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1
%t78 = load i8, ptr %a17
call void @finch_str_from_char(ptr %a79, i8 signext %t78)
%t80 = load { ptr, i64, i64 }, ptr %a79
%t81 = load i64, ptr %t77
%t82 = add i64 %t81, 1
call void @finch_arr_reserve(ptr %a8, i64 %t82, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t83 = load ptr, ptr %a8
%t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i64 %t81
store { ptr, i64, i64 } %t80, ptr %t84
store i64 %t82, ptr %t77
br label %endif10393
endif10393:
br label %endif10390
endif10390:
br label %endif10387
endif10387:
br label %endif10384
endif10384:
br label %endif10381
endif10381:
br label %endif10378
endif10378:
br label %each.step10374
each.step10374:
%t85 = load i64, ptr %a9
%t86 = add i64 %t85, 1
store i64 %t86, ptr %a9
br label %each.cond10372
each.end10375:
%t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1
%t88 = load i64, ptr %t87
%t89 = add i64 %t88, 1
call void @finch_arr_reserve(ptr %a8, i64 %t89, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t90 = load ptr, ptr %a8
%t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t90, i64 %t88
store { ptr, i64, i64 } { ptr @.str.6828, i64 1, i64 0 }, ptr %t91
store i64 %t89, ptr %t87
%t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.6829, i64 0, i64 0 }, ptr %a93
call void @finch_str_join(ptr %a94, ptr %a8, ptr %a93)
%t95 = load { ptr, i64, i64 }, ptr %a94
ret { ptr, i64, i64 } %t95
}
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.6830, 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 %range10394, label %inrange10395
range10394:
call void @finch_panic_index(ptr @.str.6831, i64 175, i64 %t3, i64 %t5)
unreachable
inrange10395:
%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
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.from10396
logic.from10396:
br i1 %t6, label %logic.rhs10397, label %logic.end10398
logic.rhs10397:
%t7 = load double, ptr %a1
%t8 = fneg double 1000000000000000.0
%t9 = fcmp ogt double %t7, %t8
br label %logic.rend10399
logic.rend10399:
br label %logic.end10398
logic.end10398:
%t10 = phi i1 [ false, %logic.from10396 ], [ %t9, %logic.rend10399 ]
br label %logic.from10400
logic.from10400:
br i1 %t10, label %logic.rhs10401, label %logic.end10402
logic.rhs10401:
%t11 = load double, ptr %a1
%t12 = fcmp olt double %t11, 1000000000000000.0
br label %logic.rend10403
logic.rend10403:
br label %logic.end10402
logic.end10402:
%t13 = phi i1 [ false, %logic.from10400 ], [ %t12, %logic.rend10403 ]
br i1 %t13, label %then10404, label %endif10406
then10404:
%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
endif10406:
%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
%a14 = alloca { ptr, i64, i64 }, align 16
%a15 = alloca { ptr, i64, i64 }, align 16
%a16 = 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
%a99 = alloca i64, align 16
%a107 = alloca i64, align 16
%a108 = alloca %S.json.Json, align 16
%a117 = alloca { ptr, i64, i64 }, align 16
%a118 = alloca { ptr, i64, i64 }, align 16
%a119 = alloca { ptr, i64, i64 }, align 16
%a130 = alloca { ptr, i64, i64 }, align 16
%a131 = 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
%a179 = alloca { ptr, i64, i64 }, align 16
%a180 = alloca { ptr, i64, i64 }, align 16
%a181 = alloca { ptr, i64, i64 }, align 16
%a188 = alloca i64, align 16
%a196 = alloca i64, align 16
%a197 = alloca %S.json.Json, align 16
%a206 = alloca { ptr, i64, i64 }, align 16
%a207 = alloca { ptr, i64, i64 }, align 16
%a208 = 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
%a235 = 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
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.6832, i64 0, i64 0 }, ptr %a5
store { ptr, i64, i64 } { ptr @.str.6833, i64 0, i64 0 }, ptr %a6
store { ptr, i64, i64 } { ptr @.str.6834, i64 1, i64 0 }, ptr %a7
store { ptr, i64, i64 } { ptr @.str.6835, 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 %then10407, label %endif10409
then10407:
store { ptr, i64, i64 } { ptr @.str.6836, i64 1, i64 0 }, ptr %a5
%t12 = load { ptr, i64, i64 }, ptr %a3
%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)
%t17 = load { ptr, i64, i64 }, ptr %a14
store { ptr, i64, i64 } %t17, ptr %a6
store { ptr, i64, i64 } { ptr @.str.6837, i64 2, i64 0 }, ptr %a8
br label %endif10409
endif10409:
%t18 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 0
%t19 = load i32, ptr %t18
%t20 = icmp eq i32 %t19, 0
br i1 %t20, label %match.arm10411, label %match.next10412
match.arm10411:
%t21 = load ptr, ptr %a4
%t22 = icmp eq ptr %t21, null
br i1 %t22, label %panic10413, label %ok10414
panic10413:
call void @finch_panic(ptr @.str.6838, i64 200, ptr @.str.6839)
unreachable
ok10414:
%t23 = getelementptr inbounds %S.json.Writer, ptr %t21, i32 0, i32 0
%t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i32 0, i32 1
%t25 = load i64, ptr %t24
%t26 = add i64 %t25, 1
call void @finch_arr_reserve(ptr %t23, i64 %t26, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t27 = load ptr, ptr %t23
%t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t27, i64 %t25
store { ptr, i64, i64 } { ptr @.str.6840, i64 4, i64 0 }, ptr %t28
store i64 %t26, ptr %t24
br label %match.end10410
match.next10412:
%t29 = icmp eq i32 %t19, 1
br i1 %t29, label %match.arm10415, label %match.next10416
match.arm10415:
%t30 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 1
%t31 = load i1, ptr %t30
br i1 %t31, label %then10417, label %else10418
then10417:
%t32 = load ptr, ptr %a4
%t33 = icmp eq ptr %t32, null
br i1 %t33, label %panic10420, label %ok10421
panic10420:
call void @finch_panic(ptr @.str.6841, i64 203, ptr @.str.6842)
unreachable
ok10421:
%t34 = getelementptr inbounds %S.json.Writer, ptr %t32, i32 0, i32 0
%t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i32 0, i32 1
%t36 = load i64, ptr %t35
%t37 = add i64 %t36, 1
call void @finch_arr_reserve(ptr %t34, i64 %t37, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t38 = load ptr, ptr %t34
%t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i64 %t36
store { ptr, i64, i64 } { ptr @.str.6843, i64 4, i64 0 }, ptr %t39
store i64 %t37, ptr %t35
br label %endif10419
else10418:
%t40 = load ptr, ptr %a4
%t41 = icmp eq ptr %t40, null
br i1 %t41, label %panic10422, label %ok10423
panic10422:
call void @finch_panic(ptr @.str.6844, i64 205, ptr @.str.6845)
unreachable
ok10423:
%t42 = getelementptr inbounds %S.json.Writer, ptr %t40, i32 0, i32 0
%t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1
%t44 = load i64, ptr %t43
%t45 = add i64 %t44, 1
call void @finch_arr_reserve(ptr %t42, i64 %t45, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t46 = load ptr, ptr %t42
%t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t44
store { ptr, i64, i64 } { ptr @.str.6846, i64 5, i64 0 }, ptr %t47
store i64 %t45, ptr %t43
br label %endif10419
endif10419:
br label %match.end10410
match.next10416:
%t48 = icmp eq i32 %t19, 2
br i1 %t48, label %match.arm10424, label %match.next10425
match.arm10424:
%t49 = load ptr, ptr %a4
%t50 = icmp eq ptr %t49, null
br i1 %t50, label %panic10426, label %ok10427
panic10426:
call void @finch_panic(ptr @.str.6847, i64 208, ptr @.str.6848)
unreachable
ok10427:
%t51 = getelementptr inbounds %S.json.Writer, ptr %t49, i32 0, i32 0
%t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t51, i32 0, i32 1
%t53 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 2
%t54 = load double, ptr %t53
%t55 = call { ptr, i64, i64 } @finch.json.number_text(double %t54)
%t56 = load i64, ptr %t52
%t57 = add i64 %t56, 1
call void @finch_arr_reserve(ptr %t51, i64 %t57, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t58 = load ptr, ptr %t51
%t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t58, i64 %t56
store { ptr, i64, i64 } %t55, ptr %t59
store i64 %t57, ptr %t52
br label %match.end10410
match.next10425:
%t60 = icmp eq i32 %t19, 3
br i1 %t60, label %match.arm10428, label %match.next10429
match.arm10428:
%t61 = load ptr, ptr %a4
%t62 = icmp eq ptr %t61, null
br i1 %t62, label %panic10430, label %ok10431
panic10430:
call void @finch_panic(ptr @.str.6849, i64 209, ptr @.str.6850)
unreachable
ok10431:
%t63 = getelementptr inbounds %S.json.Writer, ptr %t61, i32 0, i32 0
%t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1
%t65 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 3
%t66 = load { ptr, i64, i64 }, ptr %t65
%t67 = call { ptr, i64, i64 } @finch.json.quote({ ptr, i64, i64 } %t66)
%t68 = load i64, ptr %t64
%t69 = add i64 %t68, 1
call void @finch_arr_reserve(ptr %t63, i64 %t69, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t70 = load ptr, ptr %t63
%t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i64 %t68
store { ptr, i64, i64 } %t67, ptr %t71
store i64 %t69, ptr %t64
br label %match.end10410
match.next10429:
%t72 = icmp eq i32 %t19, 4
br i1 %t72, label %match.arm10432, label %match.next10433
match.arm10432:
%t73 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4
%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 %then10434, label %endif10436
then10434:
%t77 = load ptr, ptr %a4
%t78 = icmp eq ptr %t77, null
br i1 %t78, label %panic10437, label %ok10438
panic10437:
call void @finch_panic(ptr @.str.6851, i64 212, ptr @.str.6852)
unreachable
ok10438:
%t79 = getelementptr inbounds %S.json.Writer, ptr %t77, i32 0, i32 0
%t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %t79, i32 0, i32 1
%t81 = load i64, ptr %t80
%t82 = add i64 %t81, 1
call void @finch_arr_reserve(ptr %t79, i64 %t82, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t83 = load ptr, ptr %t79
%t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i64 %t81
store { ptr, i64, i64 } { ptr @.str.6853, i64 2, i64 0 }, ptr %t84
store i64 %t82, ptr %t80
ret void
endif10436:
%t85 = load ptr, ptr %a4
%t86 = icmp eq ptr %t85, null
br i1 %t86, label %panic10439, label %ok10440
panic10439:
call void @finch_panic(ptr @.str.6854, i64 215, ptr @.str.6855)
unreachable
ok10440:
%t87 = getelementptr inbounds %S.json.Writer, ptr %t85, i32 0, i32 0
%t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i32 0, i32 1
%t89 = load { ptr, i64, i64 }, ptr %a5
store { ptr, i64, i64 } { ptr @.str.6856, i64 1, 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
%t94 = load i64, ptr %t88
%t95 = add i64 %t94, 1
call void @finch_arr_reserve(ptr %t87, i64 %t95, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t96 = load ptr, ptr %t87
%t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %t96, i64 %t94
store { ptr, i64, i64 } %t93, ptr %t97
store i64 %t95, ptr %t88
%t98 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4
store i64 0, ptr %a99
br label %each.cond10441
each.cond10441:
%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.body10442, label %each.end10444
each.body10442:
%t104 = load ptr, ptr %t98
%t105 = getelementptr inbounds %S.json.Json, ptr %t104, i64 %t102
%t106 = load %S.json.Json, ptr %t105
store i64 %t102, ptr %a107
store %S.json.Json %t106, ptr %a108
%t109 = load i64, ptr %a107
%t110 = icmp sgt i64 %t109, 0
br i1 %t110, label %then10445, label %endif10447
then10445:
%t111 = load ptr, ptr %a4
%t112 = icmp eq ptr %t111, null
br i1 %t112, label %panic10448, label %ok10449
panic10448:
call void @finch_panic(ptr @.str.6857, i64 218, ptr @.str.6858)
unreachable
ok10449:
%t113 = getelementptr inbounds %S.json.Writer, ptr %t111, i32 0, i32 0
%t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %t113, i32 0, i32 1
%t115 = load { ptr, i64, i64 }, ptr %a7
%t116 = load { ptr, i64, i64 }, ptr %a5
store { ptr, i64, i64 } %t115, ptr %a118
store { ptr, i64, i64 } %t116, ptr %a119
call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119)
%t120 = load { ptr, i64, i64 }, ptr %a117
%t121 = load i64, ptr %t114
%t122 = add i64 %t121, 1
call void @finch_arr_reserve(ptr %t113, i64 %t122, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t123 = load ptr, ptr %t113
%t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i64 %t121
store { ptr, i64, i64 } %t120, ptr %t124
store i64 %t122, ptr %t114
br label %endif10447
endif10447:
%t125 = load ptr, ptr %a4
%t126 = icmp eq ptr %t125, null
br i1 %t126, label %panic10450, label %ok10451
panic10450:
call void @finch_panic(ptr @.str.6859, i64 220, ptr @.str.6860)
unreachable
ok10451:
%t127 = getelementptr inbounds %S.json.Writer, ptr %t125, i32 0, i32 0
%t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t127, i32 0, i32 1
%t129 = load { ptr, i64, i64 }, ptr %a6
store { ptr, i64, i64 } %t129, ptr %a130
call void @finch_str_copy(ptr %a131, ptr %a130)
%t132 = load { ptr, i64, i64 }, ptr %a131
%t133 = load i64, ptr %t128
%t134 = add i64 %t133, 1
call void @finch_arr_reserve(ptr %t127, i64 %t134, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t135 = load ptr, ptr %t127
%t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i64 %t133
store { ptr, i64, i64 } %t132, ptr %t136
store i64 %t134, ptr %t128
%t137 = load %S.json.Json, ptr %a108
%t138 = load { ptr, i64, i64 }, ptr %a2
%t139 = load { ptr, i64, i64 }, ptr %a6
%t140 = load ptr, ptr %a4
call void @finch.json.write(%S.json.Json %t137, { ptr, i64, i64 } %t138, { ptr, i64, i64 } %t139, ptr %t140)
br label %each.step10443
each.step10443:
%t141 = load i64, ptr %a99
%t142 = add i64 %t141, 1
store i64 %t142, ptr %a99
br label %each.cond10441
each.end10444:
%t143 = load ptr, ptr %a4
%t144 = icmp eq ptr %t143, null
br i1 %t144, label %panic10452, label %ok10453
panic10452:
call void @finch_panic(ptr @.str.6861, i64 223, ptr @.str.6862)
unreachable
ok10453:
%t145 = getelementptr inbounds %S.json.Writer, ptr %t143, i32 0, i32 0
%t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i32 0, i32 1
%t147 = load { ptr, i64, i64 }, ptr %a5
%t148 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t147, 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.6863, i64 1, i64 0 }, ptr %a155
call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155)
%t156 = load { ptr, i64, i64 }, ptr %a153
%t157 = load i64, ptr %t146
%t158 = add i64 %t157, 1
call void @finch_arr_reserve(ptr %t145, i64 %t158, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t159 = load ptr, ptr %t145
%t160 = getelementptr inbounds { ptr, i64, i64 }, ptr %t159, i64 %t157
store { ptr, i64, i64 } %t156, ptr %t160
store i64 %t158, ptr %t146
br label %match.end10410
match.next10433:
%t161 = icmp eq i32 %t19, 5
br i1 %t161, label %match.arm10454, label %match.next10455
match.arm10454:
%t162 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4
%t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i32 0, i32 1
%t164 = load i64, ptr %t163
%t165 = icmp eq i64 %t164, 0
br i1 %t165, label %then10456, label %endif10458
then10456:
%t166 = load ptr, ptr %a4
%t167 = icmp eq ptr %t166, null
br i1 %t167, label %panic10459, label %ok10460
panic10459:
call void @finch_panic(ptr @.str.6864, i64 227, ptr @.str.6865)
unreachable
ok10460:
%t168 = getelementptr inbounds %S.json.Writer, ptr %t166, i32 0, i32 0
%t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t168, i32 0, i32 1
%t170 = load i64, ptr %t169
%t171 = add i64 %t170, 1
call void @finch_arr_reserve(ptr %t168, i64 %t171, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t172 = load ptr, ptr %t168
%t173 = getelementptr inbounds { ptr, i64, i64 }, ptr %t172, i64 %t170
store { ptr, i64, i64 } { ptr @.str.6866, i64 2, i64 0 }, ptr %t173
store i64 %t171, ptr %t169
ret void
endif10458:
%t174 = load ptr, ptr %a4
%t175 = icmp eq ptr %t174, null
br i1 %t175, label %panic10461, label %ok10462
panic10461:
call void @finch_panic(ptr @.str.6867, i64 230, ptr @.str.6868)
unreachable
ok10462:
%t176 = getelementptr inbounds %S.json.Writer, ptr %t174, i32 0, i32 0
%t177 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i32 0, i32 1
%t178 = load { ptr, i64, i64 }, ptr %a5
store { ptr, i64, i64 } { ptr @.str.6869, 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
%t183 = load i64, ptr %t177
%t184 = add i64 %t183, 1
call void @finch_arr_reserve(ptr %t176, i64 %t184, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t185 = load ptr, ptr %t176
%t186 = getelementptr inbounds { ptr, i64, i64 }, ptr %t185, i64 %t183
store { ptr, i64, i64 } %t182, ptr %t186
store i64 %t184, ptr %t177
%t187 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4
store i64 0, ptr %a188
br label %each.cond10463
each.cond10463:
%t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t187, i32 0, i32 1
%t190 = load i64, ptr %t189
%t191 = load i64, ptr %a188
%t192 = icmp slt i64 %t191, %t190
br i1 %t192, label %each.body10464, label %each.end10466
each.body10464:
%t193 = load ptr, ptr %t187
%t194 = getelementptr inbounds %S.json.Json, ptr %t193, i64 %t191
%t195 = load %S.json.Json, ptr %t194
store i64 %t191, ptr %a196
store %S.json.Json %t195, ptr %a197
%t198 = load i64, ptr %a196
%t199 = icmp sgt i64 %t198, 0
br i1 %t199, label %then10467, label %endif10469
then10467:
%t200 = load ptr, ptr %a4
%t201 = icmp eq ptr %t200, null
br i1 %t201, label %panic10470, label %ok10471
panic10470:
call void @finch_panic(ptr @.str.6870, i64 233, ptr @.str.6871)
unreachable
ok10471:
%t202 = getelementptr inbounds %S.json.Writer, ptr %t200, i32 0, i32 0
%t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i32 0, i32 1
%t204 = load { ptr, i64, i64 }, ptr %a7
%t205 = load { ptr, i64, i64 }, ptr %a5
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)
%t209 = load { ptr, i64, i64 }, ptr %a206
%t210 = load i64, ptr %t203
%t211 = add i64 %t210, 1
call void @finch_arr_reserve(ptr %t202, i64 %t211, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t212 = load ptr, ptr %t202
%t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i64 %t210
store { ptr, i64, i64 } %t209, ptr %t213
store i64 %t211, ptr %t203
br label %endif10469
endif10469:
%t214 = load ptr, ptr %a4
%t215 = icmp eq ptr %t214, null
br i1 %t215, label %panic10472, label %ok10473
panic10472:
call void @finch_panic(ptr @.str.6872, i64 235, ptr @.str.6873)
unreachable
ok10473:
%t216 = getelementptr inbounds %S.json.Writer, ptr %t214, i32 0, i32 0
%t217 = getelementptr inbounds { ptr, i64, i64 }, ptr %t216, i32 0, i32 1
%t218 = load { ptr, i64, i64 }, ptr %a6
%t219 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 5
%t220 = load i64, ptr %a196
%t221 = load { ptr, i64, i64 }, ptr %t219
%t222 = extractvalue { ptr, i64, i64 } %t221, 1
%t223 = icmp uge i64 %t220, %t222
br i1 %t223, label %range10474, label %inrange10475
range10474:
call void @finch_panic_index(ptr @.str.6874, i64 235, i64 %t220, i64 %t222)
unreachable
inrange10475:
%t224 = extractvalue { ptr, i64, i64 } %t221, 0
%t225 = getelementptr inbounds { ptr, i64, i64 }, ptr %t224, i64 %t220
%t226 = load { ptr, i64, i64 }, ptr %t225
%t227 = call { ptr, i64, i64 } @finch.json.quote({ ptr, i64, i64 } %t226)
store { ptr, i64, i64 } %t218, 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
%t232 = load { ptr, i64, i64 }, ptr %a8
store { ptr, i64, i64 } %t231, 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
%t237 = load i64, ptr %t217
%t238 = add i64 %t237, 1
call void @finch_arr_reserve(ptr %t216, i64 %t238, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t239 = load ptr, ptr %t216
%t240 = getelementptr inbounds { ptr, i64, i64 }, ptr %t239, i64 %t237
store { ptr, i64, i64 } %t236, ptr %t240
store i64 %t238, ptr %t217
%t241 = load %S.json.Json, ptr %a197
%t242 = load { ptr, i64, i64 }, ptr %a2
%t243 = load { ptr, i64, i64 }, ptr %a6
%t244 = load ptr, ptr %a4
call void @finch.json.write(%S.json.Json %t241, { ptr, i64, i64 } %t242, { ptr, i64, i64 } %t243, ptr %t244)
br label %each.step10465
each.step10465:
%t245 = load i64, ptr %a188
%t246 = add i64 %t245, 1
store i64 %t246, ptr %a188
br label %each.cond10463
each.end10466:
%t247 = load ptr, ptr %a4
%t248 = icmp eq ptr %t247, null
br i1 %t248, label %panic10476, label %ok10477
panic10476:
call void @finch_panic(ptr @.str.6875, i64 238, ptr @.str.6876)
unreachable
ok10477:
%t249 = getelementptr inbounds %S.json.Writer, ptr %t247, i32 0, i32 0
%t250 = getelementptr inbounds { ptr, i64, i64 }, ptr %t249, i32 0, i32 1
%t251 = load { ptr, i64, i64 }, ptr %a5
%t252 = load { ptr, i64, i64 }, ptr %a3
store { ptr, i64, i64 } %t251, 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.6877, 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 i64, ptr %t250
%t262 = add i64 %t261, 1
call void @finch_arr_reserve(ptr %t249, i64 %t262, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t263 = load ptr, ptr %t249
%t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i64 %t261
store { ptr, i64, i64 } %t260, ptr %t264
store i64 %t262, ptr %t250
br label %match.end10410
match.next10455:
br i1 true, label %panic10478, label %ok10479
panic10478:
call void @finch_panic(ptr @.str.6878, i64 199, ptr @.str.6879)
unreachable
ok10479:
unreachable
match.end10410:
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.6880, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.6881, 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.6882, i64 0, i64 0 }, ptr %a6
call void @finch_str_join(ptr %a7, ptr %t4, ptr %a6)
%t8 = load { ptr, i64, i64 }, ptr %a7
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.6883, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.6884, 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.6885, i64 0, i64 0 }, ptr %a6
call void @finch_str_join(ptr %a7, ptr %t4, ptr %a6)
%t8 = load { ptr, i64, i64 }, ptr %a7
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
%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
%a50 = alloca { ptr, i64, i64 }, align 16
%a51 = alloca { ptr, i64, i64 }, align 16
%a52 = 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 %panic10480, label %ok10481
panic10480:
call void @finch_panic(ptr @.str.6886, i64 268, ptr @.str.6887)
unreachable
ok10481:
%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.cond10482
for.cond10482:
%t9 = load i64, ptr %a8
%t10 = icmp slt i64 %t9, %t7
br i1 %t10, label %for.body10483, label %for.end10485
for.body10483:
%t11 = load i64, ptr %a8
%t12 = load ptr, ptr %a1
%t13 = icmp eq ptr %t12, null
br i1 %t13, label %panic10486, label %ok10487
panic10486:
call void @finch_panic(ptr @.str.6888, i64 269, ptr @.str.6889)
unreachable
ok10487:
%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.from10488
logic.from10488:
br i1 %t17, label %logic.rhs10489, label %logic.end10490
logic.rhs10489:
%t18 = load ptr, ptr %a1
%t19 = icmp eq ptr %t18, null
br i1 %t19, label %panic10491, label %ok10492
panic10491:
call void @finch_panic(ptr @.str.6890, i64 269, ptr @.str.6891)
unreachable
ok10492:
%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 %range10493, label %inrange10494
range10493:
call void @finch_panic_index(ptr @.str.6892, i64 269, i64 %t21, i64 %t23)
unreachable
inrange10494:
%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.rend10495
logic.rend10495:
br label %logic.end10490
logic.end10490:
%t29 = phi i1 [ false, %logic.from10488 ], [ %t28, %logic.rend10495 ]
br i1 %t29, label %then10496, label %else10497
then10496:
%t30 = load i64, ptr %a2
%t31 = add i64 %t30, 1
store i64 %t31, ptr %a2
store i64 1, ptr %a3
br label %endif10498
else10497:
%t32 = load i64, ptr %a3
%t33 = add i64 %t32, 1
store i64 %t33, ptr %a3
br label %endif10498
endif10498:
br label %for.step10484
for.step10484:
%t34 = load i64, ptr %a8
%t35 = add i64 %t34, 1
store i64 %t35, ptr %a8
br label %for.cond10482
for.end10485:
%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.6893, i64 5, i64 0 }, ptr %a40
store { ptr, i64, i64 } %t38, ptr %a41
call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41)
%t42 = load { ptr, i64, i64 }, ptr %a39
store { ptr, i64, i64 } %t42, ptr %a44
store { ptr, i64, i64 } { ptr @.str.6894, i64 9, i64 0 }, ptr %a45
call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45)
%t46 = load { ptr, i64, i64 }, ptr %a43
%t47 = load i64, ptr %a3
call void @finch_str_from_int(ptr %a48, i64 %t47)
%t49 = load { ptr, i64, i64 }, ptr %a48
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)
%t53 = load { ptr, i64, i64 }, ptr %a50
ret { ptr, i64, i64 } %t53
}
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 %panic10499, label %ok10500
panic10499:
call void @finch_panic(ptr @.str.6895, i64 280, ptr @.str.6896)
unreachable
ok10500:
%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 %panic10501, label %ok10502
panic10501:
call void @finch_panic(ptr @.str.6897, i64 280, ptr @.str.6898)
unreachable
ok10502:
%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 %then10503, label %endif10505
then10503:
%t12 = load ptr, ptr %a1
%t13 = icmp eq ptr %t12, null
br i1 %t13, label %panic10506, label %ok10507
panic10506:
call void @finch_panic(ptr @.str.6899, i64 281, ptr @.str.6900)
unreachable
ok10507:
%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 %panic10508, label %ok10509
panic10508:
call void @finch_panic(ptr @.str.6901, i64 281, ptr @.str.6902)
unreachable
ok10509:
%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 %range10510, label %inrange10511
range10510:
call void @finch_panic_index(ptr @.str.6903, i64 281, i64 %t18, i64 %t20)
unreachable
inrange10511:
%t22 = extractvalue { ptr, i64, i64 } %t19, 0
%t23 = getelementptr inbounds i8, ptr %t22, i64 %t18
%t24 = load i8, ptr %t23
ret i8 %t24
endif10505:
%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.cond10512
while.cond10512:
%t2 = load ptr, ptr %a1
%t3 = icmp eq ptr %t2, null
br i1 %t3, label %panic10515, label %ok10516
panic10515:
call void @finch_panic(ptr @.str.6904, i64 287, ptr @.str.6905)
unreachable
ok10516:
%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 %panic10517, label %ok10518
panic10517:
call void @finch_panic(ptr @.str.6906, i64 287, ptr @.str.6907)
unreachable
ok10518:
%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.from10519
logic.from10519:
br i1 %t11, label %logic.rhs10520, label %logic.end10521
logic.rhs10520:
%t12 = load ptr, ptr %a1
%t13 = icmp eq ptr %t12, null
br i1 %t13, label %panic10522, label %ok10523
panic10522:
call void @finch_panic(ptr @.str.6908, i64 287, ptr @.str.6909)
unreachable
ok10523:
%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 %panic10524, label %ok10525
panic10524:
call void @finch_panic(ptr @.str.6910, i64 287, ptr @.str.6911)
unreachable
ok10525:
%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 %range10526, label %inrange10527
range10526:
call void @finch_panic_index(ptr @.str.6912, i64 287, i64 %t18, i64 %t20)
unreachable
inrange10527:
%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.from10528
logic.from10528:
br i1 %t25, label %logic.end10530, label %logic.rhs10529
logic.rhs10529:
%t26 = load ptr, ptr %a1
%t27 = icmp eq ptr %t26, null
br i1 %t27, label %panic10531, label %ok10532
panic10531:
call void @finch_panic(ptr @.str.6913, i64 287, ptr @.str.6914)
unreachable
ok10532:
%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 %panic10533, label %ok10534
panic10533:
call void @finch_panic(ptr @.str.6915, i64 287, ptr @.str.6916)
unreachable
ok10534:
%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 %range10535, label %inrange10536
range10535:
call void @finch_panic_index(ptr @.str.6917, i64 287, i64 %t32, i64 %t34)
unreachable
inrange10536:
%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.rend10537
logic.rend10537:
br label %logic.end10530
logic.end10530:
%t40 = phi i1 [ true, %logic.from10528 ], [ %t39, %logic.rend10537 ]
br label %logic.from10538
logic.from10538:
br i1 %t40, label %logic.end10540, label %logic.rhs10539
logic.rhs10539:
%t41 = load ptr, ptr %a1
%t42 = icmp eq ptr %t41, null
br i1 %t42, label %panic10541, label %ok10542
panic10541:
call void @finch_panic(ptr @.str.6918, i64 287, ptr @.str.6919)
unreachable
ok10542:
%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 %panic10543, label %ok10544
panic10543:
call void @finch_panic(ptr @.str.6920, i64 287, ptr @.str.6921)
unreachable
ok10544:
%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 %range10545, label %inrange10546
range10545:
call void @finch_panic_index(ptr @.str.6922, i64 287, i64 %t47, i64 %t49)
unreachable
inrange10546:
%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.rend10547
logic.rend10547:
br label %logic.end10540
logic.end10540:
%t55 = phi i1 [ true, %logic.from10538 ], [ %t54, %logic.rend10547 ]
br label %logic.from10548
logic.from10548:
br i1 %t55, label %logic.end10550, label %logic.rhs10549
logic.rhs10549:
%t56 = load ptr, ptr %a1
%t57 = icmp eq ptr %t56, null
br i1 %t57, label %panic10551, label %ok10552
panic10551:
call void @finch_panic(ptr @.str.6923, i64 287, ptr @.str.6924)
unreachable
ok10552:
%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 %panic10553, label %ok10554
panic10553:
call void @finch_panic(ptr @.str.6925, i64 287, ptr @.str.6926)
unreachable
ok10554:
%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 %range10555, label %inrange10556
range10555:
call void @finch_panic_index(ptr @.str.6927, i64 287, i64 %t62, i64 %t64)
unreachable
inrange10556:
%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.rend10557
logic.rend10557:
br label %logic.end10550
logic.end10550:
%t70 = phi i1 [ true, %logic.from10548 ], [ %t69, %logic.rend10557 ]
br label %logic.rend10558
logic.rend10558:
br label %logic.end10521
logic.end10521:
%t71 = phi i1 [ false, %logic.from10519 ], [ %t70, %logic.rend10558 ]
br i1 %t71, label %while.body10513, label %while.end10514
while.body10513:
%t72 = load ptr, ptr %a1
%t73 = icmp eq ptr %t72, null
br i1 %t73, label %panic10559, label %ok10560
panic10559:
call void @finch_panic(ptr @.str.6928, i64 288, ptr @.str.6929)
unreachable
ok10560:
%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.cond10512
while.end10514:
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
%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
%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
%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
%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
%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
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 %panic10561, label %ok10562
panic10561:
call void @finch_panic(ptr @.str.6930, i64 293, ptr @.str.6931)
unreachable
ok10562:
%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 %panic10563, label %ok10564
panic10563:
call void @finch_panic(ptr @.str.6932, i64 293, ptr @.str.6933)
unreachable
ok10564:
%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 %then10565, label %endif10567
then10565:
%t13 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.6934, 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.6935, i64 12, i64 0 }, ptr %a20
call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20)
%t21 = load { ptr, i64, i64 }, ptr %a18
%t22 = load ptr, ptr %a1
%t23 = call { ptr, i64, i64 } @finch.json.where(ptr %t22)
store { ptr, i64, i64 } %t21, ptr %a25
store { ptr, i64, i64 } %t23, ptr %a26
call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26)
%t27 = load { ptr, i64, i64 }, ptr %a24
store { ptr, i64, i64 } %t27, ptr %a29
store { ptr, i64, i64 } { ptr @.str.6936, i64 1, i64 0 }, ptr %a30
call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30)
%t31 = load { ptr, i64, i64 }, ptr %a28
ret { ptr, i64, i64 } %t31
endif10567:
%t32 = load ptr, ptr %a1
%t33 = icmp eq ptr %t32, null
br i1 %t33, label %panic10568, label %ok10569
panic10568:
call void @finch_panic(ptr @.str.6938, i64 296, ptr @.str.6939)
unreachable
ok10569:
%t34 = getelementptr inbounds %S.json.Reader, ptr %t32, i32 0, i32 0
%t35 = load ptr, ptr %a1
%t36 = icmp eq ptr %t35, null
br i1 %t36, label %panic10570, label %ok10571
panic10570:
call void @finch_panic(ptr @.str.6940, i64 296, ptr @.str.6941)
unreachable
ok10571:
%t37 = getelementptr inbounds %S.json.Reader, ptr %t35, i32 0, i32 1
%t38 = load i64, ptr %t37
%t39 = load { ptr, i64, i64 }, ptr %t34
%t40 = extractvalue { ptr, i64, i64 } %t39, 1
%t41 = icmp uge i64 %t38, %t40
br i1 %t41, label %range10572, label %inrange10573
range10572:
call void @finch_panic_index(ptr @.str.6942, i64 296, i64 %t38, i64 %t40)
unreachable
inrange10573:
%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
store { ptr, i64, i64 } { ptr @.str.6937, 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.6943, i64 8, 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 %a2
store { ptr, i64, i64 } %t54, 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
store { ptr, i64, i64 } %t59, ptr %a61
store { ptr, i64, i64 } { ptr @.str.6944, i64 12, i64 0 }, ptr %a62
call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62)
%t63 = load { ptr, i64, i64 }, ptr %a60
%t64 = load ptr, ptr %a1
%t65 = call { ptr, i64, i64 } @finch.json.where(ptr %t64)
store { ptr, i64, i64 } %t63, ptr %a67
store { ptr, i64, i64 } %t65, ptr %a68
call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68)
%t69 = load { ptr, i64, i64 }, ptr %a66
store { ptr, i64, i64 } %t69, ptr %a71
store { ptr, i64, i64 } { ptr @.str.6945, i64 1, i64 0 }, ptr %a72
call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72)
%t73 = load { ptr, i64, i64 }, ptr %a70
ret { ptr, i64, i64 } %t73
}
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
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 %panic10574, label %ok10575
panic10574:
call void @finch_panic(ptr @.str.6946, i64 301, ptr @.str.6947)
unreachable
ok10575:
%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 %panic10576, label %ok10577
panic10576:
call void @finch_panic(ptr @.str.6948, i64 301, ptr @.str.6949)
unreachable
ok10577:
%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.from10578
logic.from10578:
br i1 %t15, label %logic.rhs10579, label %logic.end10580
logic.rhs10579:
%t16 = load ptr, ptr %a1
%t17 = icmp eq ptr %t16, null
br i1 %t17, label %panic10581, label %ok10582
panic10581:
call void @finch_panic(ptr @.str.6950, i64 301, ptr @.str.6951)
unreachable
ok10582:
%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 %panic10583, label %ok10584
panic10583:
call void @finch_panic(ptr @.str.6953, i64 301, ptr @.str.6954)
unreachable
ok10584:
%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 %panic10585, label %ok10586
panic10585:
call void @finch_panic(ptr @.str.6955, i64 301, ptr @.str.6956)
unreachable
ok10586:
%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.6952, 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
br label %logic.rend10587
logic.rend10587:
br label %logic.end10580
logic.end10580:
%t39 = phi i1 [ false, %logic.from10578 ], [ %t38, %logic.rend10587 ]
ret i1 %t39
}
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
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 %then10588, label %endif10590
then10588:
%t7 = load ptr, ptr %a1
%t8 = load { ptr, i64, i64 }, ptr %a2
store { ptr, i64, i64 } { ptr @.str.6957, 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.6958, i64 1, i64 0 }, ptr %a15
call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15)
%t16 = load { ptr, i64, i64 }, ptr %a13
%t17 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t7, { ptr, i64, i64 } %t16)
%t18 = insertvalue { i1, i8, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t17, 2
ret { i1, i8, { ptr, i64, i64 } } %t18
endif10590:
%t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1
%t20 = load i64, ptr %t19
%t21 = load ptr, ptr %a1
%t22 = icmp eq ptr %t21, null
br i1 %t22, label %panic10591, label %ok10592
panic10591:
call void @finch_panic(ptr @.str.6959, i64 308, ptr @.str.6960)
unreachable
ok10592:
%t23 = getelementptr inbounds %S.json.Reader, ptr %t21, i32 0, i32 1
%t24 = load i64, ptr %t23
%t25 = add i64 %t24, %t20
store i64 %t25, ptr %t23
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.from10593
logic.from10593:
br i1 %t3, label %logic.rhs10594, label %logic.end10595
logic.rhs10594:
%t4 = load i8, ptr %a1
%t5 = icmp ule i8 %t4, 57
br label %logic.rend10596
logic.rend10596:
br label %logic.end10595
logic.end10595:
%t6 = phi i1 [ false, %logic.from10593 ], [ %t5, %logic.rend10596 ]
br i1 %t6, label %then10597, label %endif10599
then10597:
%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
endif10599:
%t11 = load i8, ptr %a1
%t12 = icmp uge i8 %t11, 97
br label %logic.from10600
logic.from10600:
br i1 %t12, label %logic.rhs10601, label %logic.end10602
logic.rhs10601:
%t13 = load i8, ptr %a1
%t14 = icmp ule i8 %t13, 102
br label %logic.rend10603
logic.rend10603:
br label %logic.end10602
logic.end10602:
%t15 = phi i1 [ false, %logic.from10600 ], [ %t14, %logic.rend10603 ]
br i1 %t15, label %then10604, label %endif10606
then10604:
%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
endif10606:
%t21 = load i8, ptr %a1
%t22 = icmp uge i8 %t21, 65
br label %logic.from10607
logic.from10607:
br i1 %t22, label %logic.rhs10608, label %logic.end10609
logic.rhs10608:
%t23 = load i8, ptr %a1
%t24 = icmp ule i8 %t23, 70
br label %logic.rend10610
logic.rend10610:
br label %logic.end10609
logic.end10609:
%t25 = phi i1 [ false, %logic.from10607 ], [ %t24, %logic.rend10610 ]
br i1 %t25, label %then10611, label %endif10613
then10611:
%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
endif10613:
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 %then10614, label %else10615
then10614:
%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 %endif10616
else10615:
%t12 = load i64, ptr %a1
%t13 = icmp slt i64 %t12, 2048
br i1 %t13, label %then10617, label %else10618
then10617:
%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 %endif10619
else10618:
%t32 = load i64, ptr %a1
%t33 = icmp slt i64 %t32, 65536
br i1 %t33, label %then10620, label %else10621
then10620:
%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 %endif10622
else10621:
%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 %endif10622
endif10622:
br label %endif10619
endif10619:
br label %endif10616
endif10616:
%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
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.cond10623
for.cond10623:
%t4 = load i64, ptr %a3
%t5 = icmp slt i64 %t4, 4
br i1 %t5, label %for.body10624, label %for.end10626
for.body10624:
%t6 = load ptr, ptr %a1
%t7 = icmp eq ptr %t6, null
br i1 %t7, label %panic10627, label %ok10628
panic10627:
call void @finch_panic(ptr @.str.6961, i64 348, ptr @.str.6962)
unreachable
ok10628:
%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 %panic10629, label %ok10630
panic10629:
call void @finch_panic(ptr @.str.6963, i64 348, ptr @.str.6964)
unreachable
ok10630:
%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.from10631
logic.from10631:
br i1 %t15, label %logic.end10633, label %logic.rhs10632
logic.rhs10632:
%t16 = load ptr, ptr %a1
%t17 = icmp eq ptr %t16, null
br i1 %t17, label %panic10634, label %ok10635
panic10634:
call void @finch_panic(ptr @.str.6965, i64 348, ptr @.str.6966)
unreachable
ok10635:
%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 %panic10636, label %ok10637
panic10636:
call void @finch_panic(ptr @.str.6967, i64 348, ptr @.str.6968)
unreachable
ok10637:
%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 %range10638, label %inrange10639
range10638:
call void @finch_panic_index(ptr @.str.6969, i64 348, i64 %t22, i64 %t24)
unreachable
inrange10639:
%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.rend10640
logic.rend10640:
br label %logic.end10633
logic.end10633:
%t31 = phi i1 [ true, %logic.from10631 ], [ %t30, %logic.rend10640 ]
br i1 %t31, label %then10641, label %endif10643
then10641:
%t32 = load ptr, ptr %a1
%t33 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t32, { ptr, i64, i64 } { ptr @.str.6970, i64 19, i64 0 })
%t34 = insertvalue { i1, i64, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t33, 2
ret { i1, i64, { ptr, i64, i64 } } %t34
endif10643:
%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 %panic10644, label %ok10645
panic10644:
call void @finch_panic(ptr @.str.6971, i64 351, ptr @.str.6972)
unreachable
ok10645:
%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 %panic10646, label %ok10647
panic10646:
call void @finch_panic(ptr @.str.6973, i64 351, ptr @.str.6974)
unreachable
ok10647:
%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 %range10648, label %inrange10649
range10648:
call void @finch_panic_index(ptr @.str.6975, i64 351, i64 %t43, i64 %t45)
unreachable
inrange10649:
%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 %panic10650, label %ok10651
panic10650:
call void @finch_panic(ptr @.str.6976, i64 352, ptr @.str.6977)
unreachable
ok10651:
%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.step10625
for.step10625:
%t57 = load i64, ptr %a3
%t58 = add i64 %t57, 1
store i64 %t58, ptr %a3
br label %for.cond10623
for.end10626:
%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
%a29 = alloca { ptr, i64, i64 }, align 16
%a30 = alloca { ptr, i64, i64 }, align 16
%a31 = alloca { ptr, i64, i64 }, align 16
%a47 = alloca i8, align 16
%a55 = alloca { ptr, i64, i64 }, align 16
%a56 = alloca { ptr, i64, i64 }, align 16
%a73 = alloca { ptr, i64, i64 }, align 16
%a74 = 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
%a104 = alloca { ptr, i64, i64 }, align 16
%a105 = alloca { ptr, i64, i64 }, align 16
%a123 = alloca i8, align 16
%a176 = alloca { ptr, i64, i64 }, align 16
%a191 = alloca i64, align 16
%a212 = alloca 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
%a234 = alloca { ptr, i64, i64 }, align 16
%a235 = alloca { ptr, i64, i64 }, align 16
%a236 = 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
store ptr %p0, ptr %a1
%t2 = load ptr, ptr %a1
%t3 = icmp eq ptr %t2, null
br i1 %t3, label %panic10652, label %ok10653
panic10652:
call void @finch_panic(ptr @.str.6978, i64 358, ptr @.str.6979)
unreachable
ok10653:
%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 %panic10654, label %ok10655
panic10654:
call void @finch_panic(ptr @.str.6980, i64 360, ptr @.str.6981)
unreachable
ok10655:
%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.cond10656
while.cond10656:
br label %while.body10657
while.body10657:
%t13 = load ptr, ptr %a1
%t14 = icmp eq ptr %t13, null
br i1 %t14, label %panic10659, label %ok10660
panic10659:
call void @finch_panic(ptr @.str.6982, i64 362, ptr @.str.6983)
unreachable
ok10660:
%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 %panic10661, label %ok10662
panic10661:
call void @finch_panic(ptr @.str.6984, i64 362, ptr @.str.6985)
unreachable
ok10662:
%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 %then10663, label %endif10665
then10663:
%t23 = load ptr, ptr %a1
%t24 = call { ptr, i64, i64 } @finch.json.where(ptr %t23)
store { ptr, i64, i64 } { ptr @.str.6986, i64 30, 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.6987, i64 1, i64 0 }, ptr %a31
call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31)
%t32 = load { ptr, i64, i64 }, ptr %a29
%t33 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t32, 2
ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t33
endif10665:
%t34 = load ptr, ptr %a1
%t35 = icmp eq ptr %t34, null
br i1 %t35, label %panic10666, label %ok10667
panic10666:
call void @finch_panic(ptr @.str.6988, i64 365, ptr @.str.6989)
unreachable
ok10667:
%t36 = getelementptr inbounds %S.json.Reader, ptr %t34, i32 0, i32 0
%t37 = load ptr, ptr %a1
%t38 = icmp eq ptr %t37, null
br i1 %t38, label %panic10668, label %ok10669
panic10668:
call void @finch_panic(ptr @.str.6990, i64 365, ptr @.str.6991)
unreachable
ok10669:
%t39 = getelementptr inbounds %S.json.Reader, ptr %t37, i32 0, i32 1
%t40 = load i64, ptr %t39
%t41 = load { ptr, i64, i64 }, ptr %t36
%t42 = extractvalue { ptr, i64, i64 } %t41, 1
%t43 = icmp uge i64 %t40, %t42
br i1 %t43, label %range10670, label %inrange10671
range10670:
call void @finch_panic_index(ptr @.str.6992, i64 365, i64 %t40, i64 %t42)
unreachable
inrange10671:
%t44 = extractvalue { ptr, i64, i64 } %t41, 0
%t45 = getelementptr inbounds i8, ptr %t44, i64 %t40
%t46 = load i8, ptr %t45
store i8 %t46, ptr %a47
%t48 = load i8, ptr %a47
%t49 = icmp eq i8 %t48, 34
br i1 %t49, label %then10672, label %endif10674
then10672:
%t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1
%t51 = load ptr, ptr %a1
%t52 = icmp eq ptr %t51, null
br i1 %t52, label %panic10675, label %ok10676
panic10675:
call void @finch_panic(ptr @.str.6993, i64 367, ptr @.str.6994)
unreachable
ok10676:
%t53 = getelementptr inbounds %S.json.Reader, ptr %t51, i32 0, i32 0
%t54 = load { ptr, i64, i64 }, ptr %t53
store { ptr, i64, i64 } %t54, ptr %a55
%t57 = load i64, ptr %a12
%t58 = load ptr, ptr %a1
%t59 = icmp eq ptr %t58, null
br i1 %t59, label %panic10677, label %ok10678
panic10677:
call void @finch_panic(ptr @.str.6996, i64 367, ptr @.str.6997)
unreachable
ok10678:
%t60 = getelementptr inbounds %S.json.Reader, ptr %t58, i32 0, i32 1
%t61 = load i64, ptr %t60
call void @finch_str_sub(ptr %a56, ptr %a55, i64 %t57, i64 %t61, ptr @.str.6995, i64 367)
%t62 = load { ptr, i64, i64 }, ptr %a56
%t63 = load i64, ptr %t50
%t64 = add i64 %t63, 1
call void @finch_arr_reserve(ptr %a7, i64 %t64, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t65 = load ptr, ptr %a7
%t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 %t63
store { ptr, i64, i64 } %t62, ptr %t66
store i64 %t64, ptr %t50
%t67 = load ptr, ptr %a1
%t68 = icmp eq ptr %t67, null
br i1 %t68, label %panic10679, label %ok10680
panic10679:
call void @finch_panic(ptr @.str.6998, i64 368, ptr @.str.6999)
unreachable
ok10680:
%t69 = getelementptr inbounds %S.json.Reader, ptr %t67, i32 0, i32 1
%t70 = load i64, ptr %t69
%t71 = add i64 %t70, 1
store i64 %t71, ptr %t69
%t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1
store { ptr, i64, i64 } { ptr @.str.7000, i64 0, i64 0 }, ptr %a73
call void @finch_str_join(ptr %a74, ptr %a7, ptr %a73)
%t75 = load { ptr, i64, i64 }, ptr %a74
%t76 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0
%t77 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t76, { ptr, i64, i64 } %t75, 1
ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t77
endif10674:
%t78 = load i8, ptr %a47
%t79 = zext i8 %t78 to i64
%t80 = icmp slt i64 %t79, 32
br i1 %t80, label %then10681, label %endif10683
then10681:
%t81 = load ptr, ptr %a1
%t82 = call { ptr, i64, i64 } @finch.json.where(ptr %t81)
store { ptr, i64, i64 } { ptr @.str.7001, i64 55, i64 0 }, ptr %a84
store { ptr, i64, i64 } %t82, ptr %a85
call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85)
%t86 = load { ptr, i64, i64 }, ptr %a83
store { ptr, i64, i64 } %t86, ptr %a88
store { ptr, i64, i64 } { ptr @.str.7002, i64 1, i64 0 }, ptr %a89
call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89)
%t90 = load { ptr, i64, i64 }, ptr %a87
%t91 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t90, 2
ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t91
endif10683:
%t92 = load i8, ptr %a47
%t93 = icmp ne i8 %t92, 92
br i1 %t93, label %then10684, label %endif10686
then10684:
%t94 = load ptr, ptr %a1
%t95 = icmp eq ptr %t94, null
br i1 %t95, label %panic10687, label %ok10688
panic10687:
call void @finch_panic(ptr @.str.7003, i64 375, ptr @.str.7004)
unreachable
ok10688:
%t96 = getelementptr inbounds %S.json.Reader, ptr %t94, i32 0, i32 1
%t97 = load i64, ptr %t96
%t98 = add i64 %t97, 1
store i64 %t98, ptr %t96
br label %while.cond10656
endif10686:
%t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1
%t100 = load ptr, ptr %a1
%t101 = icmp eq ptr %t100, null
br i1 %t101, label %panic10689, label %ok10690
panic10689:
call void @finch_panic(ptr @.str.7005, i64 378, ptr @.str.7006)
unreachable
ok10690:
%t102 = getelementptr inbounds %S.json.Reader, ptr %t100, i32 0, i32 0
%t103 = load { ptr, i64, i64 }, ptr %t102
store { ptr, i64, i64 } %t103, ptr %a104
%t106 = load i64, ptr %a12
%t107 = load ptr, ptr %a1
%t108 = icmp eq ptr %t107, null
br i1 %t108, label %panic10691, label %ok10692
panic10691:
call void @finch_panic(ptr @.str.7008, i64 378, ptr @.str.7009)
unreachable
ok10692:
%t109 = getelementptr inbounds %S.json.Reader, ptr %t107, i32 0, i32 1
%t110 = load i64, ptr %t109
call void @finch_str_sub(ptr %a105, ptr %a104, i64 %t106, i64 %t110, ptr @.str.7007, i64 378)
%t111 = load { ptr, i64, i64 }, ptr %a105
%t112 = load i64, ptr %t99
%t113 = add i64 %t112, 1
call void @finch_arr_reserve(ptr %a7, i64 %t113, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t114 = load ptr, ptr %a7
%t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i64 %t112
store { ptr, i64, i64 } %t111, ptr %t115
store i64 %t113, ptr %t99
%t116 = load ptr, ptr %a1
%t117 = icmp eq ptr %t116, null
br i1 %t117, label %panic10693, label %ok10694
panic10693:
call void @finch_panic(ptr @.str.7010, i64 379, ptr @.str.7011)
unreachable
ok10694:
%t118 = getelementptr inbounds %S.json.Reader, ptr %t116, i32 0, i32 1
%t119 = load i64, ptr %t118
%t120 = add i64 %t119, 1
store i64 %t120, ptr %t118
%t121 = load ptr, ptr %a1
%t122 = call i8 @finch.json.peek(ptr %t121)
store i8 %t122, ptr %a123
%t124 = load ptr, ptr %a1
%t125 = icmp eq ptr %t124, null
br i1 %t125, label %panic10695, label %ok10696
panic10695:
call void @finch_panic(ptr @.str.7012, i64 381, ptr @.str.7013)
unreachable
ok10696:
%t126 = getelementptr inbounds %S.json.Reader, ptr %t124, i32 0, i32 1
%t127 = load i64, ptr %t126
%t128 = add i64 %t127, 1
store i64 %t128, ptr %t126
%t129 = load i8, ptr %a123
%t130 = icmp eq i8 %t129, 110
br i1 %t130, label %then10697, label %else10698
then10697:
%t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1
%t132 = load i64, ptr %t131
%t133 = add i64 %t132, 1
call void @finch_arr_reserve(ptr %a7, i64 %t133, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t134 = load ptr, ptr %a7
%t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 %t132
store { ptr, i64, i64 } { ptr @.str.7014, i64 1, i64 0 }, ptr %t135
store i64 %t133, ptr %t131
br label %endif10699
else10698:
%t136 = load i8, ptr %a123
%t137 = icmp eq i8 %t136, 116
br i1 %t137, label %then10700, label %else10701
then10700:
%t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1
%t139 = load i64, ptr %t138
%t140 = add i64 %t139, 1
call void @finch_arr_reserve(ptr %a7, i64 %t140, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t141 = load ptr, ptr %a7
%t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i64 %t139
store { ptr, i64, i64 } { ptr @.str.7015, i64 1, i64 0 }, ptr %t142
store i64 %t140, ptr %t138
br label %endif10702
else10701:
%t143 = load i8, ptr %a123
%t144 = icmp eq i8 %t143, 114
br i1 %t144, label %then10703, label %else10704
then10703:
%t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1
%t146 = load i64, ptr %t145
%t147 = add i64 %t146, 1
call void @finch_arr_reserve(ptr %a7, i64 %t147, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t148 = load ptr, ptr %a7
%t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %t148, i64 %t146
store { ptr, i64, i64 } { ptr @.str.7016, i64 1, i64 0 }, ptr %t149
store i64 %t147, ptr %t145
br label %endif10705
else10704:
%t150 = load i8, ptr %a123
%t151 = icmp eq i8 %t150, 98
br i1 %t151, label %then10706, label %else10707
then10706:
%t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1
%t153 = call { ptr, i64, i64 } @finch.json.utf8(i64 8)
%t154 = load i64, ptr %t152
%t155 = add i64 %t154, 1
call void @finch_arr_reserve(ptr %a7, i64 %t155, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t156 = load ptr, ptr %a7
%t157 = getelementptr inbounds { ptr, i64, i64 }, ptr %t156, i64 %t154
store { ptr, i64, i64 } %t153, ptr %t157
store i64 %t155, ptr %t152
br label %endif10708
else10707:
%t158 = load i8, ptr %a123
%t159 = icmp eq i8 %t158, 102
br i1 %t159, label %then10709, label %else10710
then10709:
%t160 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1
%t161 = call { ptr, i64, i64 } @finch.json.utf8(i64 12)
%t162 = load i64, ptr %t160
%t163 = add i64 %t162, 1
call void @finch_arr_reserve(ptr %a7, i64 %t163, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t164 = load ptr, ptr %a7
%t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %t164, i64 %t162
store { ptr, i64, i64 } %t161, ptr %t165
store i64 %t163, ptr %t160
br label %endif10711
else10710:
%t166 = load i8, ptr %a123
%t167 = icmp eq i8 %t166, 34
br label %logic.from10712
logic.from10712:
br i1 %t167, label %logic.end10714, label %logic.rhs10713
logic.rhs10713:
%t168 = load i8, ptr %a123
%t169 = icmp eq i8 %t168, 92
br label %logic.rend10715
logic.rend10715:
br label %logic.end10714
logic.end10714:
%t170 = phi i1 [ true, %logic.from10712 ], [ %t169, %logic.rend10715 ]
br label %logic.from10716
logic.from10716:
br i1 %t170, label %logic.end10718, label %logic.rhs10717
logic.rhs10717:
%t171 = load i8, ptr %a123
%t172 = icmp eq i8 %t171, 47
br label %logic.rend10719
logic.rend10719:
br label %logic.end10718
logic.end10718:
%t173 = phi i1 [ true, %logic.from10716 ], [ %t172, %logic.rend10719 ]
br i1 %t173, label %then10720, label %else10721
then10720:
%t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1
%t175 = load i8, ptr %a123
call void @finch_str_from_char(ptr %a176, i8 signext %t175)
%t177 = load { ptr, i64, i64 }, ptr %a176
%t178 = load i64, ptr %t174
%t179 = add i64 %t178, 1
call void @finch_arr_reserve(ptr %a7, i64 %t179, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t180 = load ptr, ptr %a7
%t181 = getelementptr inbounds { ptr, i64, i64 }, ptr %t180, i64 %t178
store { ptr, i64, i64 } %t177, ptr %t181
store i64 %t179, ptr %t174
br label %endif10722
else10721:
%t182 = load i8, ptr %a123
%t183 = icmp eq i8 %t182, 117
br i1 %t183, label %then10723, label %else10724
then10723:
%t184 = load ptr, ptr %a1
%t185 = call { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %t184)
%t186 = extractvalue { i1, i64, { ptr, i64, i64 } } %t185, 0
%t187 = xor i1 %t186, true
%t188 = extractvalue { i1, i64, { ptr, i64, i64 } } %t185, 2
%t189 = extractvalue { i1, i64, { ptr, i64, i64 } } %t185, 1
br i1 %t187, label %try.failed10726, label %try.ok10727
try.failed10726:
%t190 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t188, 2
ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t190
try.ok10727:
store i64 %t189, ptr %a191
%t192 = load i64, ptr %a191
%t193 = icmp sge i64 %t192, 55296
br label %logic.from10728
logic.from10728:
br i1 %t193, label %logic.rhs10729, label %logic.end10730
logic.rhs10729:
%t194 = load i64, ptr %a191
%t195 = icmp slt i64 %t194, 56320
br label %logic.rend10731
logic.rend10731:
br label %logic.end10730
logic.end10730:
%t196 = phi i1 [ false, %logic.from10728 ], [ %t195, %logic.rend10731 ]
br label %logic.from10732
logic.from10732:
br i1 %t196, label %logic.rhs10733, label %logic.end10734
logic.rhs10733:
%t197 = load ptr, ptr %a1
%t198 = call i1 @finch.json.comes(ptr %t197, { ptr, i64, i64 } { ptr @.str.7017, i64 2, i64 0 })
br label %logic.rend10735
logic.rend10735:
br label %logic.end10734
logic.end10734:
%t199 = phi i1 [ false, %logic.from10732 ], [ %t198, %logic.rend10735 ]
br i1 %t199, label %then10736, label %endif10738
then10736:
%t200 = load ptr, ptr %a1
%t201 = icmp eq ptr %t200, null
br i1 %t201, label %panic10739, label %ok10740
panic10739:
call void @finch_panic(ptr @.str.7018, i64 398, ptr @.str.7019)
unreachable
ok10740:
%t202 = getelementptr inbounds %S.json.Reader, ptr %t200, i32 0, i32 1
%t203 = load i64, ptr %t202
%t204 = add i64 %t203, 2
store i64 %t204, ptr %t202
%t205 = load ptr, ptr %a1
%t206 = call { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %t205)
%t207 = extractvalue { i1, i64, { ptr, i64, i64 } } %t206, 0
%t208 = xor i1 %t207, true
%t209 = extractvalue { i1, i64, { ptr, i64, i64 } } %t206, 2
%t210 = extractvalue { i1, i64, { ptr, i64, i64 } } %t206, 1
br i1 %t208, label %try.failed10741, label %try.ok10742
try.failed10741:
%t211 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t209, 2
ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t211
try.ok10742:
store i64 %t210, ptr %a212
%t213 = load i64, ptr %a191
%t214 = sub i64 %t213, 55296
%t215 = mul i64 %t214, 1024
%t216 = add i64 65536, %t215
%t217 = load i64, ptr %a212
%t218 = sub i64 %t217, 56320
%t219 = add i64 %t216, %t218
store i64 %t219, ptr %a191
br label %endif10738
endif10738:
%t220 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1
%t221 = load i64, ptr %a191
%t222 = call { ptr, i64, i64 } @finch.json.utf8(i64 %t221)
%t223 = load i64, ptr %t220
%t224 = add i64 %t223, 1
call void @finch_arr_reserve(ptr %a7, i64 %t224, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64))
%t225 = load ptr, ptr %a7
%t226 = getelementptr inbounds { ptr, i64, i64 }, ptr %t225, i64 %t223
store { ptr, i64, i64 } %t222, ptr %t226
store i64 %t224, ptr %t220
br label %endif10725
else10724:
%t227 = load i8, ptr %a123
call void @finch_str_from_char(ptr %a228, i8 signext %t227)
%t229 = load { ptr, i64, i64 }, ptr %a228
store { ptr, i64, i64 } { ptr @.str.7020, i64 22, 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.7021, i64 12, i64 0 }, ptr %a236
call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236)
%t237 = load { ptr, i64, i64 }, ptr %a234
%t238 = load ptr, ptr %a1
%t239 = call { ptr, i64, i64 } @finch.json.where(ptr %t238)
store { ptr, i64, i64 } %t237, ptr %a241
store { ptr, i64, i64 } %t239, ptr %a242
call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242)
%t243 = load { ptr, i64, i64 }, ptr %a240
store { ptr, i64, i64 } %t243, ptr %a245
store { ptr, i64, i64 } { ptr @.str.7022, i64 1, i64 0 }, ptr %a246
call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246)
%t247 = load { ptr, i64, i64 }, ptr %a244
%t248 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t247, 2
ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t248
endif10725:
br label %endif10722
endif10722:
br label %endif10711
endif10711:
br label %endif10708
endif10708:
br label %endif10705
endif10705:
br label %endif10702
endif10702:
br label %endif10699
endif10699:
%t249 = load ptr, ptr %a1
%t250 = icmp eq ptr %t249, null
br i1 %t250, label %panic10743, label %ok10744
panic10743:
call void @finch_panic(ptr @.str.7023, i64 406, ptr @.str.7024)
unreachable
ok10744:
%t251 = getelementptr inbounds %S.json.Reader, ptr %t249, i32 0, i32 1
%t252 = load i64, ptr %t251
store i64 %t252, ptr %a12
br label %while.cond10656
}
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
%a154 = alloca { ptr, i64, i64 }, align 16
%a162 = alloca double, align 16
store ptr %p0, ptr %a1
%t2 = load ptr, ptr %a1
%t3 = icmp eq ptr %t2, null
br i1 %t3, label %panic10745, label %ok10746
panic10745:
call void @finch_panic(ptr @.str.7025, i64 411, ptr @.str.7026)
unreachable
ok10746:
%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 %then10747, label %endif10749
then10747:
%t10 = load ptr, ptr %a1
%t11 = icmp eq ptr %t10, null
br i1 %t11, label %panic10750, label %ok10751
panic10750:
call void @finch_panic(ptr @.str.7027, i64 413, ptr @.str.7028)
unreachable
ok10751:
%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 %endif10749
endif10749:
br label %while.cond10752
while.cond10752:
%t15 = load ptr, ptr %a1
%t16 = icmp eq ptr %t15, null
br i1 %t16, label %panic10755, label %ok10756
panic10755:
call void @finch_panic(ptr @.str.7029, i64 415, ptr @.str.7030)
unreachable
ok10756:
%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 %panic10757, label %ok10758
panic10757:
call void @finch_panic(ptr @.str.7031, i64 415, ptr @.str.7032)
unreachable
ok10758:
%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.from10759
logic.from10759:
br i1 %t24, label %logic.rhs10760, label %logic.end10761
logic.rhs10760:
%t25 = load ptr, ptr %a1
%t26 = icmp eq ptr %t25, null
br i1 %t26, label %panic10762, label %ok10763
panic10762:
call void @finch_panic(ptr @.str.7033, i64 415, ptr @.str.7034)
unreachable
ok10763:
%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 %panic10764, label %ok10765
panic10764:
call void @finch_panic(ptr @.str.7035, i64 415, ptr @.str.7036)
unreachable
ok10765:
%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 %range10766, label %inrange10767
range10766:
call void @finch_panic_index(ptr @.str.7037, i64 415, i64 %t31, i64 %t33)
unreachable
inrange10767:
%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.from10768
logic.from10768:
br i1 %t38, label %logic.rhs10769, label %logic.end10770
logic.rhs10769:
%t39 = load ptr, ptr %a1
%t40 = icmp eq ptr %t39, null
br i1 %t40, label %panic10771, label %ok10772
panic10771:
call void @finch_panic(ptr @.str.7038, i64 415, ptr @.str.7039)
unreachable
ok10772:
%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 %panic10773, label %ok10774
panic10773:
call void @finch_panic(ptr @.str.7040, i64 415, ptr @.str.7041)
unreachable
ok10774:
%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 %range10775, label %inrange10776
range10775:
call void @finch_panic_index(ptr @.str.7042, i64 415, i64 %t45, i64 %t47)
unreachable
inrange10776:
%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.rend10777
logic.rend10777:
br label %logic.end10770
logic.end10770:
%t53 = phi i1 [ false, %logic.from10768 ], [ %t52, %logic.rend10777 ]
br label %logic.from10778
logic.from10778:
br i1 %t53, label %logic.end10780, label %logic.rhs10779
logic.rhs10779:
%t54 = load ptr, ptr %a1
%t55 = icmp eq ptr %t54, null
br i1 %t55, label %panic10781, label %ok10782
panic10781:
call void @finch_panic(ptr @.str.7043, i64 415, ptr @.str.7044)
unreachable
ok10782:
%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 %panic10783, label %ok10784
panic10783:
call void @finch_panic(ptr @.str.7045, i64 415, ptr @.str.7046)
unreachable
ok10784:
%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 %range10785, label %inrange10786
range10785:
call void @finch_panic_index(ptr @.str.7047, i64 415, i64 %t60, i64 %t62)
unreachable
inrange10786:
%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.rend10787
logic.rend10787:
br label %logic.end10780
logic.end10780:
%t68 = phi i1 [ true, %logic.from10778 ], [ %t67, %logic.rend10787 ]
br label %logic.from10788
logic.from10788:
br i1 %t68, label %logic.end10790, label %logic.rhs10789
logic.rhs10789:
%t69 = load ptr, ptr %a1
%t70 = icmp eq ptr %t69, null
br i1 %t70, label %panic10791, label %ok10792
panic10791:
call void @finch_panic(ptr @.str.7048, i64 415, ptr @.str.7049)
unreachable
ok10792:
%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 %panic10793, label %ok10794
panic10793:
call void @finch_panic(ptr @.str.7050, i64 415, ptr @.str.7051)
unreachable
ok10794:
%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 %range10795, label %inrange10796
range10795:
call void @finch_panic_index(ptr @.str.7052, i64 415, i64 %t75, i64 %t77)
unreachable
inrange10796:
%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.rend10797
logic.rend10797:
br label %logic.end10790
logic.end10790:
%t83 = phi i1 [ true, %logic.from10788 ], [ %t82, %logic.rend10797 ]
br label %logic.from10798
logic.from10798:
br i1 %t83, label %logic.end10800, label %logic.rhs10799
logic.rhs10799:
%t84 = load ptr, ptr %a1
%t85 = icmp eq ptr %t84, null
br i1 %t85, label %panic10801, label %ok10802
panic10801:
call void @finch_panic(ptr @.str.7053, i64 415, ptr @.str.7054)
unreachable
ok10802:
%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 %panic10803, label %ok10804
panic10803:
call void @finch_panic(ptr @.str.7055, i64 415, ptr @.str.7056)
unreachable
ok10804:
%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 %range10805, label %inrange10806
range10805:
call void @finch_panic_index(ptr @.str.7057, i64 415, i64 %t90, i64 %t92)
unreachable
inrange10806:
%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.rend10807
logic.rend10807:
br label %logic.end10800
logic.end10800:
%t98 = phi i1 [ true, %logic.from10798 ], [ %t97, %logic.rend10807 ]
br label %logic.from10808
logic.from10808:
br i1 %t98, label %logic.end10810, label %logic.rhs10809
logic.rhs10809:
%t99 = load ptr, ptr %a1
%t100 = icmp eq ptr %t99, null
br i1 %t100, label %panic10811, label %ok10812
panic10811:
call void @finch_panic(ptr @.str.7058, i64 415, ptr @.str.7059)
unreachable
ok10812:
%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 %panic10813, label %ok10814
panic10813:
call void @finch_panic(ptr @.str.7060, i64 415, ptr @.str.7061)
unreachable
ok10814:
%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 %range10815, label %inrange10816
range10815:
call void @finch_panic_index(ptr @.str.7062, i64 415, i64 %t105, i64 %t107)
unreachable
inrange10816:
%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.rend10817
logic.rend10817:
br label %logic.end10810
logic.end10810:
%t113 = phi i1 [ true, %logic.from10808 ], [ %t112, %logic.rend10817 ]
br label %logic.from10818
logic.from10818:
br i1 %t113, label %logic.end10820, label %logic.rhs10819
logic.rhs10819:
%t114 = load ptr, ptr %a1
%t115 = icmp eq ptr %t114, null
br i1 %t115, label %panic10821, label %ok10822
panic10821:
call void @finch_panic(ptr @.str.7063, i64 415, ptr @.str.7064)
unreachable
ok10822:
%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 %panic10823, label %ok10824
panic10823:
call void @finch_panic(ptr @.str.7065, i64 415, ptr @.str.7066)
unreachable
ok10824:
%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 %range10825, label %inrange10826
range10825:
call void @finch_panic_index(ptr @.str.7067, i64 415, i64 %t120, i64 %t122)
unreachable
inrange10826:
%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.rend10827
logic.rend10827:
br label %logic.end10820
logic.end10820:
%t128 = phi i1 [ true, %logic.from10818 ], [ %t127, %logic.rend10827 ]
br label %logic.rend10828
logic.rend10828:
br label %logic.end10761
logic.end10761:
%t129 = phi i1 [ false, %logic.from10759 ], [ %t128, %logic.rend10828 ]
br i1 %t129, label %while.body10753, label %while.end10754
while.body10753:
%t130 = load ptr, ptr %a1
%t131 = icmp eq ptr %t130, null
br i1 %t131, label %panic10829, label %ok10830
panic10829:
call void @finch_panic(ptr @.str.7068, i64 416, ptr @.str.7069)
unreachable
ok10830:
%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.cond10752
while.end10754:
%t135 = load ptr, ptr %a1
%t136 = icmp eq ptr %t135, null
br i1 %t136, label %panic10831, label %ok10832
panic10831:
call void @finch_panic(ptr @.str.7070, i64 418, ptr @.str.7071)
unreachable
ok10832:
%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 %panic10833, label %ok10834
panic10833:
call void @finch_panic(ptr @.str.7073, i64 418, ptr @.str.7074)
unreachable
ok10834:
%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.7072, 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
%t153 = load double, ptr %a148
br i1 %t151, label %or.failed10835, label %or.ok10836
or.failed10835:
store { ptr, i64, i64 } %t152, ptr %a154
%t155 = load i64, ptr %a6
%t156 = load ptr, ptr %a1
%t157 = icmp eq ptr %t156, null
br i1 %t157, label %panic10837, label %ok10838
panic10837:
call void @finch_panic(ptr @.str.7075, i64 419, ptr @.str.7076)
unreachable
ok10838:
%t158 = getelementptr inbounds %S.json.Reader, ptr %t156, i32 0, i32 1
store i64 %t155, ptr %t158
%t159 = load ptr, ptr %a1
%t160 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t159, { ptr, i64, i64 } { ptr @.str.7077, i64 8, i64 0 })
%t161 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t160, 2
ret { i1, %S.json.Json, { ptr, i64, i64 } } %t161
or.ok10836:
store double %t153, ptr %a162
%t163 = load double, ptr %a162
%t164 = call %S.json.Json @finch.json.new_number(double %t163)
%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
}
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 %panic10839, label %ok10840
panic10839:
call void @finch_panic(ptr @.str.7078, i64 428, ptr @.str.7079)
unreachable
ok10840:
%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 %panic10841, label %ok10842
panic10841:
call void @finch_panic(ptr @.str.7080, i64 428, ptr @.str.7081)
unreachable
ok10842:
%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 %then10843, label %endif10845
then10843:
%t16 = load ptr, ptr %a1
%t17 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t16, { ptr, i64, i64 } { ptr @.str.7082, 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
endif10845:
%t19 = load i8, ptr %a5
%t20 = icmp eq i8 %t19, 123
br i1 %t20, label %then10846, label %endif10848
then10846:
%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 %panic10849, label %ok10850
panic10849:
call void @finch_panic(ptr @.str.7083, i64 433, ptr @.str.7084)
unreachable
ok10850:
%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 %then10851, label %endif10853
then10851:
%t32 = load ptr, ptr %a1
%t33 = icmp eq ptr %t32, null
br i1 %t33, label %panic10854, label %ok10855
panic10854:
call void @finch_panic(ptr @.str.7085, i64 436, ptr @.str.7086)
unreachable
ok10855:
%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
endif10853:
br label %while.cond10856
while.cond10856:
br label %while.body10857
while.body10857:
%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 %then10859, label %endif10861
then10859:
%t44 = load ptr, ptr %a1
%t45 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t44, { ptr, i64, i64 } { ptr @.str.7087, i64 15, i64 0 })
%t46 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t45, 2
ret { i1, %S.json.Json, { ptr, i64, i64 } } %t46
endif10861:
%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.failed10862, label %try.ok10863
try.failed10862:
%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.ok10863:
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 %then10864, label %endif10866
then10864:
%t59 = load ptr, ptr %a1
%t60 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t59, { ptr, i64, i64 } { ptr @.str.7088, i64 3, i64 0 })
%t61 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t60, 2
ret { i1, %S.json.Json, { ptr, i64, i64 } } %t61
endif10866:
%t62 = load ptr, ptr %a1
%t63 = icmp eq ptr %t62, null
br i1 %t63, label %panic10867, label %ok10868
panic10867:
call void @finch_panic(ptr @.str.7089, i64 449, ptr @.str.7090)
unreachable
ok10868:
%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.failed10869, label %try.ok10870
try.failed10869:
%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.ok10870:
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 %then10871, label %endif10873
then10871:
%t81 = load ptr, ptr %a1
%t82 = icmp eq ptr %t81, null
br i1 %t82, label %panic10874, label %ok10875
panic10874:
call void @finch_panic(ptr @.str.7091, i64 454, ptr @.str.7092)
unreachable
ok10875:
%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
br label %while.cond10856
endif10873:
%t86 = load ptr, ptr %a1
%t87 = call i8 @finch.json.peek(ptr %t86)
%t88 = icmp eq i8 %t87, 125
br i1 %t88, label %then10876, label %endif10878
then10876:
%t89 = load ptr, ptr %a1
%t90 = icmp eq ptr %t89, null
br i1 %t90, label %panic10879, label %ok10880
panic10879:
call void @finch_panic(ptr @.str.7093, i64 458, ptr @.str.7094)
unreachable
ok10880:
%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
%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
endif10878:
%t97 = load ptr, ptr %a1
%t98 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t97, { ptr, i64, i64 } { ptr @.str.7095, i64 10, i64 0 })
%t99 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t98, 2
ret { i1, %S.json.Json, { ptr, i64, i64 } } %t99
endif10848:
%t100 = load i8, ptr %a5
%t101 = icmp eq i8 %t100, 91
br i1 %t101, label %then10881, label %endif10883
then10881:
%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 %panic10884, label %ok10885
panic10884:
call void @finch_panic(ptr @.str.7096, i64 466, ptr @.str.7097)
unreachable
ok10885:
%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 %then10886, label %endif10888
then10886:
%t113 = load ptr, ptr %a1
%t114 = icmp eq ptr %t113, null
br i1 %t114, label %panic10889, label %ok10890
panic10889:
call void @finch_panic(ptr @.str.7098, i64 469, ptr @.str.7099)
unreachable
ok10890:
%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
endif10888:
br label %while.cond10891
while.cond10891:
br label %while.body10892
while.body10892:
%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.failed10894, label %try.ok10895
try.failed10894:
%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.ok10895:
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 %then10896, label %endif10898
then10896:
%t134 = load ptr, ptr %a1
%t135 = icmp eq ptr %t134, null
br i1 %t135, label %panic10899, label %ok10900
panic10899:
call void @finch_panic(ptr @.str.7100, i64 477, ptr @.str.7101)
unreachable
ok10900:
%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
br label %while.cond10891
endif10898:
%t139 = load ptr, ptr %a1
%t140 = call i8 @finch.json.peek(ptr %t139)
%t141 = icmp eq i8 %t140, 93
br i1 %t141, label %then10901, label %endif10903
then10901:
%t142 = load ptr, ptr %a1
%t143 = icmp eq ptr %t142, null
br i1 %t143, label %panic10904, label %ok10905
panic10904:
call void @finch_panic(ptr @.str.7102, i64 481, ptr @.str.7103)
unreachable
ok10905:
%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
%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
endif10903:
%t150 = load ptr, ptr %a1
%t151 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t150, { ptr, i64, i64 } { ptr @.str.7104, i64 10, i64 0 })
%t152 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t151, 2
ret { i1, %S.json.Json, { ptr, i64, i64 } } %t152
endif10883:
%t153 = load i8, ptr %a5
%t154 = icmp eq i8 %t153, 34
br i1 %t154, label %then10906, label %endif10908
then10906:
%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.failed10909, label %try.ok10910
try.failed10909:
%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.ok10910:
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)
%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
endif10908:
%t167 = load i8, ptr %a5
%t168 = icmp eq i8 %t167, 116
br i1 %t168, label %then10911, label %endif10913
then10911:
%t169 = load ptr, ptr %a1
%t170 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t169, { ptr, i64, i64 } { ptr @.str.7105, 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.failed10914, label %try.ok10915
try.failed10914:
%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.ok10915:
%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
endif10913:
%t178 = load i8, ptr %a5
%t179 = icmp eq i8 %t178, 102
br i1 %t179, label %then10916, label %endif10918
then10916:
%t180 = load ptr, ptr %a1
%t181 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t180, { ptr, i64, i64 } { ptr @.str.7106, 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.failed10919, label %try.ok10920
try.failed10919:
%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.ok10920:
%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
endif10918:
%t189 = load i8, ptr %a5
%t190 = icmp eq i8 %t189, 110
br i1 %t190, label %then10921, label %endif10923
then10921:
%t191 = load ptr, ptr %a1
%t192 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t191, { ptr, i64, i64 } { ptr @.str.7107, 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.failed10924, label %try.ok10925
try.failed10924:
%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.ok10925:
%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
endif10923:
%t200 = load i8, ptr %a5
%t201 = icmp eq i8 %t200, 45
br label %logic.from10926
logic.from10926:
br i1 %t201, label %logic.end10928, label %logic.rhs10927
logic.rhs10927:
%t202 = load i8, ptr %a5
%t203 = icmp uge i8 %t202, 48
br label %logic.from10929
logic.from10929:
br i1 %t203, label %logic.rhs10930, label %logic.end10931
logic.rhs10930:
%t204 = load i8, ptr %a5
%t205 = icmp ule i8 %t204, 57
br label %logic.rend10932
logic.rend10932:
br label %logic.end10931
logic.end10931:
%t206 = phi i1 [ false, %logic.from10929 ], [ %t205, %logic.rend10932 ]
br label %logic.rend10933
logic.rend10933:
br label %logic.end10928
logic.end10928:
%t207 = phi i1 [ true, %logic.from10926 ], [ %t206, %logic.rend10933 ]
br i1 %t207, label %then10934, label %endif10936
then10934:
%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.failed10937, label %try.ok10938
try.failed10937:
%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.ok10938:
%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
endif10936:
%t217 = load ptr, ptr %a1
%t218 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t217, { ptr, i64, i64 } { ptr @.str.7108, 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 { 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
%a24 = alloca %S.json.Json, align 16
%a25 = 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.failed10939, label %try.ok10940
try.failed10939:
%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.ok10940:
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 %then10941, label %endif10943
then10941:
%t21 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %a7, { ptr, i64, i64 } { ptr @.str.7109, i64 19, i64 0 })
%t22 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t21, 2
ret { i1, %S.json.Json, { ptr, i64, i64 } } %t22
endif10943:
%t23 = load %S.json.Json, ptr %a14
store %S.json.Json %t23, ptr %a24
call void @finch.copy.S_json_Json(ptr %a25, ptr %a24)
%t26 = load %S.json.Json, ptr %a25
%t27 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0
%t28 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t27, %S.json.Json %t26, 1
ret { i1, %S.json.Json, { ptr, i64, i64 } } %t28
}
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
}