; generated by the Finch compiler written in Finch target triple = "arm64-apple-macosx11.0.0" %S.main.Loader = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.lexer.Token = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i1 } %S.lexer.Lexer = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i1 } %S.ast.Type = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64 } %S.ast.Node = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, %S.ast.Type, i1, i1, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i64 } %S.ast.Program = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.parser.Parser = type { { ptr, i64, i64 }, i64, i64, i64, { ptr, i64, i64 } } %S.gen.Var = type { { ptr, i64, i64 }, %S.ast.Type, { ptr, i64, i64 }, i1, i64, i1, i1, { ptr, i64, i64 }, i64, i64 } %S.platform.Target = type { { ptr, i64, i64 }, i1, i1, i1, i1, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.gen.Options = type { i1, i1, i1, { ptr, i64, i64 }, %S.platform.Target } %S.gen.Template = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i1, i1 } %S.gen.Binds = type { { ptr, i64, i64 }, { ptr, i64, i64 } } %S.gen.EnumDef = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.gen.Cleanup = type { i1, i64 } %S.gen.SumDef = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.gen.SumPat = type { i64, { ptr, i64, i64 } } %S.gen.Scope = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.gen.Pending = type { { ptr, i64, i64 }, %S.ast.Type, i1 } %S.gen.Loop = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64 } %S.gen.FnSig = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, i1, { ptr, i64, i64 }, %S.ast.Type, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64 } %S.gen.StructDef = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i1 } %S.gen.Val = type { { ptr, i64, i64 }, %S.ast.Type, i1, i1 } %S.gen.Place = type { { ptr, i64, i64 }, %S.ast.Type } %S.gen.Ref = type { i1, %S.gen.Place, %S.gen.Val } %S.cimport.CImports = type { { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64 } } %S.gen.Gen = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, %S.gen.FnSig, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, %S.cimport.CImports, i1, i1, { ptr, i64, i64 }, i1, %S.platform.Target, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, i64, i64 } %S.gen.Saved = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i1, i64 } %S.gen.SizeAlign = type { i64, i64 } %S.gen.Fallible = type { %S.gen.Val, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.gen.Abi = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64 } %S.gen.Leaf = type { i64, i64, i1, i1 } %S.gen.Plan = type { %S.gen.Abi, { ptr, i64, i64 }, { ptr, i64, i64 }, i1 } %S.docs.Doc = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.cimport.CFunc = type { { ptr, i64, i64 }, { ptr, i64, i64 }, %S.ast.Type, { ptr, i64, i64 }, i1, { ptr, i64, i64 } } %S.cimport.CConst = type { i1, i64, double, { ptr, i64, i64 } } %S.cimport.CField = type { { ptr, i64, i64 }, %S.ast.Type, i64, i64, i64, i1 } %S.cimport.CStruct = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, i1 } %S.cimport.Header = type { { ptr, i64, i64 }, { ptr, i64, i64 } } %S.cimport.Mapped = type { %S.ast.Type, { ptr, i64, i64 }, i1 } %S.cimport.Importer = type { %S.cimport.CImports, ptr, { ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, i64 } %S.cimport.FieldCtx = type { ptr, ptr } %S.cimport.Number = type { %S.cimport.CConst, i1 } %S.linker.Names = type { { ptr, i64, i64 } } %S.linker.Build = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, { ptr, i64, i64 } } %S.lsp.Ref = type { { ptr, i64, i64 }, i64, i64, i64, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 } } %S.lsp.VarRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, i64, i64 } %S.lsp.FnRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.lsp.StructRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.lsp.EnumRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 } } %S.lsp.Diag = type { i1, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 } } %S.lsp.Analysis = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, %S.lsp.Diag } %S.lsp.Server = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64 }, i1 } %S.lsp.Names = type { { ptr, i64, i64 } } %S.json.Json = type { i32, i1, double, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.json.Writer = type { { ptr, i64, i64 } } %S.json.Reader = type { { ptr, i64, i64 }, i64 } %S.C.rlimit = type { i64, i64 } %S.C.timeval = type { i64, i32, [4 x i8] } %S.C.rusage = type { %S.C.timeval, %S.C.timeval, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64 } %S.C.siginfo_t = type { i32, i32, i32, i32, i32, i32, ptr, [8 x i8], i64, [7 x i64] } %S.C.div_t = type { i32, i32 } %S.C.ldiv_t = type { i64, i64 } %S.C.lldiv_t = type { i64, i64 } %S.C.CXString = type { ptr, i32, [4 x i8] } %S.C.CXStringSet = type { ptr, i32, [4 x i8] } %S.C.tm = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i8], i64, ptr } %S.C.timespec = type { i64, i64 } %S.C.CXFileUniqueID = type { [3 x i64] } %S.C.CXSourceLocation = type { [2 x ptr], i32, [4 x i8] } %S.C.CXSourceRange = type { [2 x ptr], i32, i32 } %S.C.CXSourceRangeList = type { i32, [4 x i8], ptr } %S.C.CXIndexOptions = type { i32, i8, i8, [2 x i8], ptr, ptr } %S.C.CXUnsavedFile = type { ptr, ptr, i64 } %S.C.CXTUResourceUsageEntry = type { i32, [4 x i8], i64 } %S.C.CXTUResourceUsage = type { ptr, i32, [4 x i8], ptr } %S.C.CXCursor = type { i32, i32, [3 x ptr] } %S.C.CXVersion = type { i32, i32, i32 } %S.C.CXPlatformAvailability = type { %S.C.CXString, %S.C.CXVersion, %S.C.CXVersion, %S.C.CXVersion, i32, %S.C.CXString } %S.C.CXType = type { i32, [4 x i8], [2 x ptr] } %S.C.CXToken = type { [4 x i32], ptr } %S.C.CXCompletionResult = type { i32, [4 x i8], ptr } %S.C.CXCodeCompleteResults = type { ptr, i32, [4 x i8] } %S.C.CXCursorAndRangeVisitor = type { ptr, ptr } %S.C.CXIdxLoc = type { [2 x ptr], i32, [4 x i8] } %S.C.CXIdxAttrInfo = type { i32, [4 x i8], %S.C.CXCursor, %S.C.CXIdxLoc } %S.C.CXIdxEntityInfo = type { i32, i32, i32, [4 x i8], ptr, ptr, %S.C.CXCursor, ptr, i32, [4 x i8] } %S.C.CXIdxContainerInfo = type { %S.C.CXCursor } %S.C.CXIdxDeclInfo = type { ptr, %S.C.CXCursor, %S.C.CXIdxLoc, ptr, ptr, i32, i32, i32, [4 x i8], ptr, i32, [4 x i8], ptr, i32, i32 } %S.C.CXIdxObjCContainerDeclInfo = type { ptr, i32, [4 x i8] } %S.C.CXIdxBaseClassInfo = type { ptr, %S.C.CXCursor, %S.C.CXIdxLoc } %S.C.CXIdxObjCProtocolRefInfo = type { ptr, %S.C.CXCursor, %S.C.CXIdxLoc } %S.C.CXIdxObjCProtocolRefListInfo = type { ptr, i32, [4 x i8] } %S.C.CXIdxObjCInterfaceDeclInfo = type { ptr, ptr, ptr } %S.C.CXIdxObjCCategoryDeclInfo = type { ptr, ptr, %S.C.CXCursor, %S.C.CXIdxLoc, ptr } %S.C.CXIdxObjCPropertyDeclInfo = type { ptr, ptr, ptr } %S.C.CXIdxIBOutletCollectionAttrInfo = type { ptr, ptr, %S.C.CXCursor, %S.C.CXIdxLoc } %S.C.CXIdxCXXClassDeclInfo = type { ptr, ptr, i32, [4 x i8] } %S.C.IndexerCallbacks = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr } %S.C.fd_set = type { [32 x i32] } %S.C.accessx_descriptor = type { i32, i32, [2 x i32] } %S.C.__sbuf = type { ptr, i32, [4 x i8] } %S.C.FILE = type { ptr, i32, i32, i16, i16, [4 x i8], %S.C.__sbuf, i32, [4 x i8], ptr, ptr, ptr, ptr, ptr, %S.C.__sbuf, ptr, i32, [3 x i8], [1 x i8], %S.C.__sbuf, i32, [4 x i8], i64 } @.str.1 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.2 = private unnamed_addr constant [2 x i8] c".\00" @.str.3 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.4 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.5 = private unnamed_addr constant [2 x i8] c".\00" @.str.6 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.7 = private unnamed_addr constant [3 x i8] c"./\00" @.str.8 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.9 = private unnamed_addr constant [2 x i8] c".\00" @.str.10 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.11 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.12 = private unnamed_addr constant [37 x i8] c"used .overlayPaths on a null pointer\00" @.str.13 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.14 = private unnamed_addr constant [37 x i8] c"used .overlayFiles on a null pointer\00" @.str.15 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.16 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.17 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.18 = private unnamed_addr constant [2 x i8] c"/\00" @.str.19 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.20 = private unnamed_addr constant [2 x i8] c"/\00" @.str.21 = private unnamed_addr constant [2 x i8] c"_\00" @.str.22 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.23 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" @.str.24 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.25 = private unnamed_addr constant [2 x i8] c"/\00" @.str.26 = private unnamed_addr constant [2 x i8] c"_\00" @.str.27 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.28 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" @.str.29 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.30 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.31 = private unnamed_addr constant [30 x i8] c"used .paths on a null pointer\00" @.str.32 = private unnamed_addr constant [2 x i8] c"/\00" @.str.33 = private unnamed_addr constant [2 x i8] c"_\00" @.str.34 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.35 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" @.str.36 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.37 = private unnamed_addr constant [2 x i8] c"/\00" @.str.38 = private unnamed_addr constant [2 x i8] c"_\00" @.str.39 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.40 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" @.str.41 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.42 = private unnamed_addr constant [2 x i8] c"/\00" @.str.43 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.44 = private unnamed_addr constant [2 x i8] c"/\00" @.str.45 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.46 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.47 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" @.str.48 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.49 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" @.str.50 = private unnamed_addr constant [2 x i8] c"/\00" @.str.51 = private unnamed_addr constant [2 x i8] c"_\00" @.str.52 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.53 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" @.str.54 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.55 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.56 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" @.str.57 = private unnamed_addr constant [2 x i8] c"/\00" @.str.58 = private unnamed_addr constant [2 x i8] c"_\00" @.str.59 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.60 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" @.str.61 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.62 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.63 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" @.str.64 = private unnamed_addr constant [2 x i8] c"/\00" @.str.65 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.66 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.67 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" @.str.68 = private unnamed_addr constant [2 x i8] c"/\00" @.str.69 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.70 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.71 = private unnamed_addr constant [37 x i8] c"used .overlayPaths on a null pointer\00" @.str.72 = private unnamed_addr constant [31 x i8] c"error: can't find the module '\00" @.str.73 = private unnamed_addr constant [15 x i8] c"' (looked for \00" @.str.74 = private unnamed_addr constant [2 x i8] c")\00" @.str.75 = private unnamed_addr constant [1 x i8] c"\00" @.str.76 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.77 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.78 = private unnamed_addr constant [20 x i8] c"error: can't open '\00" @.str.79 = private unnamed_addr constant [2 x i8] c"'\00" @.str.80 = private unnamed_addr constant [1 x i8] c"\00" @.str.81 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.82 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.83 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.84 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.85 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.86 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.87 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.88 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.89 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.90 = private unnamed_addr constant [31 x i8] c"used .loaded on a null pointer\00" @.str.91 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.92 = private unnamed_addr constant [31 x i8] c"used .loaded on a null pointer\00" @.str.93 = private unnamed_addr constant [42 x i8] c"Finch -- the compiler is written in Finch\00" @.str.94 = private unnamed_addr constant [1 x i8] c"\00" @.str.95 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.96 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.97 = private unnamed_addr constant [7 x i8] c"usage:\00" @.str.98 = private unnamed_addr constant [1 x i8] c"\00" @.str.99 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.100 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.101 = private unnamed_addr constant [61 x i8] c" finch run [args...] build and run a program\00" @.str.102 = private unnamed_addr constant [1 x i8] c"\00" @.str.103 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.104 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.105 = private unnamed_addr constant [53 x i8] c" finch build [-o name] build a program\00" @.str.106 = private unnamed_addr constant [1 x i8] c"\00" @.str.107 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.108 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.109 = private unnamed_addr constant [55 x i8] c" finch ir print the LLVM IR\00" @.str.110 = private unnamed_addr constant [1 x i8] c"\00" @.str.111 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.112 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.113 = private unnamed_addr constant [54 x i8] c" finch version show the version\00" @.str.114 = private unnamed_addr constant [1 x i8] c"\00" @.str.115 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.116 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.117 = private unnamed_addr constant [91 x i8] c" finch lsp the language server, for editors (VS Code, Kate, ...)\00" @.str.118 = private unnamed_addr constant [1 x i8] c"\00" @.str.119 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.120 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.121 = private unnamed_addr constant [9 x i8] c"options:\00" @.str.122 = private unnamed_addr constant [1 x i8] c"\00" @.str.123 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.124 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.125 = private unnamed_addr constant [54 x i8] c" -O0 no optimization (faster to build)\00" @.str.126 = private unnamed_addr constant [1 x i8] c"\00" @.str.127 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.128 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.129 = private unnamed_addr constant [77 x i8] c" -l link a library (the same as link \22lib\22 in the program)\00" @.str.130 = private unnamed_addr constant [1 x i8] c"\00" @.str.131 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.132 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.133 = private unnamed_addr constant [58 x i8] c" -I look for imported C headers there too\00" @.str.134 = private unnamed_addr constant [1 x i8] c"\00" @.str.135 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.136 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.137 = private unnamed_addr constant [67 x i8] c" -g debug info (for gdb and lldb; use -O0 with it)\00" @.str.138 = private unnamed_addr constant [1 x i8] c"\00" @.str.139 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.140 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.141 = private unnamed_addr constant [102 x i8] c" --target build for another system: windows, linux, arm64 (Linux), macos, or an LLVM triple\00" @.str.142 = private unnamed_addr constant [1 x i8] c"\00" @.str.143 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.144 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.145 = private unnamed_addr constant [8 x i8] c"/files-\00" @.str.146 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.147 = private unnamed_addr constant [6 x i8] c"/done\00" @.str.148 = private unnamed_addr constant [2 x i8] c"/\00" @.str.149 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.150 = private unnamed_addr constant [2 x i8] c"/\00" @.str.151 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.152 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.153 = private unnamed_addr constant [6 x i8] c"/done\00" @.str.154 = private unnamed_addr constant [1 x i8] c"\00" @.str.155 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.156 = private unnamed_addr constant [8 x i8] c"version\00" @.str.157 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.158 = private unnamed_addr constant [10 x i8] c"--version\00" @.str.159 = private unnamed_addr constant [47 x i8] c"Finch 2.4.0 (the compiler is written in Finch)\00" @.str.160 = private unnamed_addr constant [1 x i8] c"\00" @.str.161 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.162 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.163 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.164 = private unnamed_addr constant [4 x i8] c"lsp\00" @.str.165 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.166 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.167 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.168 = private unnamed_addr constant [6 x i8] c"build\00" @.str.169 = private unnamed_addr constant [4 x i8] c"run\00" @.str.170 = private unnamed_addr constant [3 x i8] c"ir\00" @.str.171 = private unnamed_addr constant [6 x i8] c"index\00" @.str.172 = private unnamed_addr constant [1 x i8] c"\00" @.str.173 = private unnamed_addr constant [4 x i8] c"-O2\00" @.str.174 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.175 = private unnamed_addr constant [4 x i8] c"run\00" @.str.176 = private unnamed_addr constant [3 x i8] c"-o\00" @.str.177 = private unnamed_addr constant [6 x i8] c"build\00" @.str.178 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.179 = private unnamed_addr constant [9 x i8] c"--shared\00" @.str.180 = private unnamed_addr constant [6 x i8] c"build\00" @.str.181 = private unnamed_addr constant [4 x i8] c"-O0\00" @.str.182 = private unnamed_addr constant [4 x i8] c"-O0\00" @.str.183 = private unnamed_addr constant [3 x i8] c"-l\00" @.str.184 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.185 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.186 = private unnamed_addr constant [3 x i8] c"-l\00" @.str.187 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.188 = private unnamed_addr constant [3 x i8] c"-I\00" @.str.189 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.190 = private unnamed_addr constant [10 x i8] c"--overlay\00" @.str.191 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.192 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.193 = private unnamed_addr constant [2 x i8] c"=\00" @.str.194 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.195 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.196 = private unnamed_addr constant [3 x i8] c"-g\00" @.str.197 = private unnamed_addr constant [9 x i8] c"--target\00" @.str.198 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.199 = private unnamed_addr constant [4 x i8] c"run\00" @.str.200 = private unnamed_addr constant [4 x i8] c"run\00" @.str.201 = private unnamed_addr constant [12 x i8] c"/finch_run_\00" @.str.202 = private unnamed_addr constant [2 x i8] c"_\00" @.str.203 = private unnamed_addr constant [5 x i8] c".dll\00" @.str.204 = private unnamed_addr constant [4 x i8] c"lib\00" @.str.205 = private unnamed_addr constant [7 x i8] c".dylib\00" @.str.206 = private unnamed_addr constant [4 x i8] c"lib\00" @.str.207 = private unnamed_addr constant [4 x i8] c".so\00" @.str.208 = private unnamed_addr constant [6 x i8] c"linux\00" @.str.209 = private unnamed_addr constant [8 x i8] c"windows\00" @.str.210 = private unnamed_addr constant [6 x i8] c"macos\00" @.str.211 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.212 = private unnamed_addr constant [8 x i8] c"/../std\00" @.str.213 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.214 = private unnamed_addr constant [5 x i8] c"/std\00" @.str.215 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.216 = private unnamed_addr constant [20 x i8] c"/../share/finch/std\00" @.str.217 = private unnamed_addr constant [4 x i8] c"std\00" @.str.218 = private unnamed_addr constant [10 x i8] c"/path.fch\00" @.str.219 = private unnamed_addr constant [5 x i8] c"/std\00" @.str.220 = private unnamed_addr constant [11 x i8] c"FINCH_PATH\00" @.str.221 = private unnamed_addr constant [1 x i8] c"\00" declare ptr @getenv(ptr) @.str.222 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.223 = private unnamed_addr constant [1 x i8] c"\00" @.str.224 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.225 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.226 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.227 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.228 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.229 = private unnamed_addr constant [3 x i8] c".c\00" @.str.230 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.231 = private unnamed_addr constant [3 x i8] c".o\00" @.str.232 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.233 = private unnamed_addr constant [3 x i8] c".a\00" @.str.234 = private unnamed_addr constant [2 x i8] c"/\00" @.str.235 = private unnamed_addr constant [1 x i8] c"\00" @.str.236 = private unnamed_addr constant [1 x i8] c"\00" @.str.237 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.238 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.239 = private unnamed_addr constant [6 x i8] c"index\00" @.str.240 = private unnamed_addr constant [3 x i8] c"ir\00" @.str.241 = private unnamed_addr constant [6 x i8] c"index\00" @.str.242 = private unnamed_addr constant [1 x i8] c"\00" @.str.243 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.244 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.245 = private unnamed_addr constant [9 x i8] c"FINCH_RT\00" @.str.246 = private unnamed_addr constant [1 x i8] c"\00" @.str.247 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.248 = private unnamed_addr constant [23 x i8] c"/../runtime/finch_rt.c\00" @.str.249 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.250 = private unnamed_addr constant [20 x i8] c"/runtime/finch_rt.c\00" @.str.251 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.252 = private unnamed_addr constant [35 x i8] c"/../share/finch/runtime/finch_rt.c\00" @.str.253 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" @.str.254 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" @.str.255 = private unnamed_addr constant [20 x i8] c"/runtime/finch_rt.c\00" @.str.256 = private unnamed_addr constant [1 x i8] c"\00" @.str.257 = private unnamed_addr constant [7 x i8] c" -fPIC\00" @.str.258 = private unnamed_addr constant [4 x i8] c" -g\00" @.str.259 = private unnamed_addr constant [4 x i8] c"run\00" @.str.260 = private unnamed_addr constant [2 x i8] c" \00" @.str.261 = private unnamed_addr constant [2 x i8] c" \00" @.str.262 = private unnamed_addr constant [3 x i8] c"fn\00" @.str.263 = private unnamed_addr constant [7 x i8] c"return\00" @.str.264 = private unnamed_addr constant [3 x i8] c"if\00" @.str.265 = private unnamed_addr constant [5 x i8] c"else\00" @.str.266 = private unnamed_addr constant [6 x i8] c"while\00" @.str.267 = private unnamed_addr constant [4 x i8] c"for\00" @.str.268 = private unnamed_addr constant [3 x i8] c"in\00" @.str.269 = private unnamed_addr constant [6 x i8] c"break\00" @.str.270 = private unnamed_addr constant [9 x i8] c"continue\00" @.str.271 = private unnamed_addr constant [5 x i8] c"true\00" @.str.272 = private unnamed_addr constant [6 x i8] c"false\00" @.str.273 = private unnamed_addr constant [5 x i8] c"null\00" @.str.274 = private unnamed_addr constant [7 x i8] c"import\00" @.str.275 = private unnamed_addr constant [5 x i8] c"link\00" @.str.276 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.277 = private unnamed_addr constant [6 x i8] c"defer\00" @.str.278 = private unnamed_addr constant [3 x i8] c"or\00" @.str.279 = private unnamed_addr constant [4 x i8] c"try\00" @.str.280 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.281 = private unnamed_addr constant [6 x i8] c"match\00" @.str.282 = private unnamed_addr constant [7 x i8] c"export\00" @.str.283 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.284 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00" @.str.285 = private unnamed_addr constant [2 x i8] c":\00" @.str.286 = private unnamed_addr constant [2 x i8] c":\00" @.str.287 = private unnamed_addr constant [10 x i8] c": error: \00" @.str.288 = private unnamed_addr constant [1 x i8] c"\00" @.str.289 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.290 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.291 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.292 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.293 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.294 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.295 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.296 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.297 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.298 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.299 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.300 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.301 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.302 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.303 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.304 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.305 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.306 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" @.str.307 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.308 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" @.str.309 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.310 = private unnamed_addr constant [27 x i8] c"used .nl on a null pointer\00" @.str.311 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.312 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" @.str.313 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.314 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.315 = private unnamed_addr constant [3 x i8] c"->\00" @.str.316 = private unnamed_addr constant [3 x i8] c"<<\00" @.str.317 = private unnamed_addr constant [3 x i8] c">>\00" @.str.318 = private unnamed_addr constant [3 x i8] c"<=\00" @.str.319 = private unnamed_addr constant [3 x i8] c">=\00" @.str.320 = private unnamed_addr constant [3 x i8] c"==\00" @.str.321 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.322 = private unnamed_addr constant [3 x i8] c"&&\00" @.str.323 = private unnamed_addr constant [3 x i8] c"||\00" @.str.324 = private unnamed_addr constant [3 x i8] c"..\00" @.str.325 = private unnamed_addr constant [3 x i8] c":=\00" @.str.326 = private unnamed_addr constant [3 x i8] c"+=\00" @.str.327 = private unnamed_addr constant [3 x i8] c"-=\00" @.str.328 = private unnamed_addr constant [3 x i8] c"*=\00" @.str.329 = private unnamed_addr constant [3 x i8] c"/=\00" @.str.330 = private unnamed_addr constant [3 x i8] c"%=\00" @.str.331 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.332 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.333 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.334 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.335 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.336 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.337 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.338 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.339 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.340 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.341 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.342 = private unnamed_addr constant [23 x i8] c"(){}[],.:+-*/%&|^~<>=!\00" @.str.343 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.344 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.345 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.346 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.347 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.348 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.349 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.350 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.351 = private unnamed_addr constant [1 x i8] c"\00" @.str.352 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.353 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" @.str.354 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.355 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" @.str.356 = private unnamed_addr constant [17 x i8] c"unknown escape \5C\00" @.str.357 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.358 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.359 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.360 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.361 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.362 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.363 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.364 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.365 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.366 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.367 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.368 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.369 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.370 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.371 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.372 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.373 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.374 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.375 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.376 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" @.str.377 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.378 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" @.str.379 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.380 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.381 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.382 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.383 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.384 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.385 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.386 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.387 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.388 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.389 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.390 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.391 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.392 = private unnamed_addr constant [37 x i8] c"comment is never closed (missing */)\00" @.str.393 = private unnamed_addr constant [1 x i8] c"\00" @.str.394 = private unnamed_addr constant [1 x i8] c"\00" @.str.395 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.396 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" @.str.397 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.398 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" @.str.399 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.400 = private unnamed_addr constant [27 x i8] c"used .nl on a null pointer\00" @.str.401 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.402 = private unnamed_addr constant [27 x i8] c"used .nl on a null pointer\00" @.str.403 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.404 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.405 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.406 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.407 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.408 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.409 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.410 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.411 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.412 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.413 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.414 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.415 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.416 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.417 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.418 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.419 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.420 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.421 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.422 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.423 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.424 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.425 = private unnamed_addr constant [4 x i8] c"int\00" @.str.426 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.427 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.428 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.429 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.430 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.431 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.432 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.433 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.434 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.435 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.436 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.437 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.438 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.439 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.440 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.441 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.442 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.443 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.444 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.445 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.446 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.447 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.448 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.449 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.450 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.451 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.452 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.453 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.454 = private unnamed_addr constant [6 x i8] c"float\00" @.str.455 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.456 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.457 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.458 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.459 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.460 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.461 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.462 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.463 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.464 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.465 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.466 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.467 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.468 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.469 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.470 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.471 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.472 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.473 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.474 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.475 = private unnamed_addr constant [2 x i8] c"_\00" @.str.476 = private unnamed_addr constant [1 x i8] c"\00" @.str.477 = private unnamed_addr constant [7 x i8] c"string\00" @.str.478 = private unnamed_addr constant [5 x i8] c"char\00" @.str.479 = private unnamed_addr constant [35 x i8] c"string is never closed (missing \22)\00" @.str.480 = private unnamed_addr constant [33 x i8] c"char is never closed (missing ')\00" @.str.481 = private unnamed_addr constant [1 x i8] c"\00" @.str.482 = private unnamed_addr constant [45 x i8] c"a char holds exactly one character, like 'a'\00" @.str.483 = private unnamed_addr constant [1 x i8] c"\00" @.str.484 = private unnamed_addr constant [75 x i8] c" (names use only a-z, A-Z, 0-9 and _; other letters only go inside \22text\22)\00" @.str.485 = private unnamed_addr constant [23 x i8] c"unexpected character '\00" @.str.486 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.487 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.488 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.489 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.490 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.491 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.492 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.493 = private unnamed_addr constant [2 x i8] c"'\00" @.str.494 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.495 = private unnamed_addr constant [1 x i8] c"\00" @.str.496 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.497 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" @.str.498 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.499 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" @.str.500 = private unnamed_addr constant [6 x i8] c"array\00" @.str.501 = private unnamed_addr constant [4 x i8] c"map\00" @.str.502 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.503 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.504 = private unnamed_addr constant [6 x i8] c"named\00" @.str.505 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.506 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.507 = private unnamed_addr constant [6 x i8] c"array\00" @.str.508 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.509 = private unnamed_addr constant [4 x i8] c"map\00" @.str.510 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.511 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" @.str.512 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" @.str.513 = private unnamed_addr constant [6 x i8] c"array\00" @.str.514 = private unnamed_addr constant [3 x i8] c"[]\00" @.str.515 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" @.str.516 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.517 = private unnamed_addr constant [2 x i8] c"[\00" @.str.518 = private unnamed_addr constant [2 x i8] c"]\00" @.str.519 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" @.str.520 = private unnamed_addr constant [4 x i8] c"map\00" @.str.521 = private unnamed_addr constant [5 x i8] c"map[\00" @.str.522 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" @.str.523 = private unnamed_addr constant [2 x i8] c"]\00" @.str.524 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" @.str.525 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.526 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.527 = private unnamed_addr constant [5 x i8] c"ptr[\00" @.str.528 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" @.str.529 = private unnamed_addr constant [2 x i8] c"]\00" @.str.530 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.531 = private unnamed_addr constant [6 x i8] c"named\00" @.str.532 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.533 = private unnamed_addr constant [2 x i8] c".\00" @.str.534 = private unnamed_addr constant [5 x i8] c"void\00" @.str.535 = private unnamed_addr constant [8 x i8] c"nothing\00" @.str.536 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.537 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00" @.str.538 = private unnamed_addr constant [2 x i8] c":\00" @.str.539 = private unnamed_addr constant [2 x i8] c":\00" @.str.540 = private unnamed_addr constant [10 x i8] c": error: \00" @.str.541 = private unnamed_addr constant [1 x i8] c"\00" @.str.542 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.543 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.544 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.545 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.546 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.547 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.548 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.549 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.550 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.551 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.552 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.553 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.554 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.555 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.556 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.557 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.558 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.559 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.560 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.561 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.562 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.563 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.564 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.565 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.566 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.567 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.568 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.569 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.570 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.571 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.572 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.573 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.574 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.575 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.576 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.577 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.578 = private unnamed_addr constant [2 x i8] c"'\00" @.str.579 = private unnamed_addr constant [2 x i8] c"'\00" @.str.580 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.581 = private unnamed_addr constant [12 x i8] c"end of file\00" @.str.582 = private unnamed_addr constant [4 x i8] c"int\00" @.str.583 = private unnamed_addr constant [6 x i8] c"float\00" @.str.584 = private unnamed_addr constant [9 x i8] c"a number\00" @.str.585 = private unnamed_addr constant [7 x i8] c"string\00" @.str.586 = private unnamed_addr constant [9 x i8] c"a string\00" @.str.587 = private unnamed_addr constant [5 x i8] c"char\00" @.str.588 = private unnamed_addr constant [7 x i8] c"a char\00" @.str.589 = private unnamed_addr constant [2 x i8] c"'\00" @.str.590 = private unnamed_addr constant [2 x i8] c"'\00" @.str.591 = private unnamed_addr constant [10 x i8] c"expected \00" @.str.592 = private unnamed_addr constant [9 x i8] c", found \00" @.str.593 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.594 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.595 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.596 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.597 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.598 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.599 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.600 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.601 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.602 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.603 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.604 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.605 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.606 = private unnamed_addr constant [29 x i8] c"used .file on a null pointer\00" @.str.607 = private unnamed_addr constant [4 x i8] c"int\00" @.str.608 = private unnamed_addr constant [6 x i8] c"float\00" @.str.609 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.610 = private unnamed_addr constant [5 x i8] c"char\00" @.str.611 = private unnamed_addr constant [4 x i8] c"str\00" @.str.612 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.613 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.614 = private unnamed_addr constant [4 x i8] c"i16\00" @.str.615 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.616 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.617 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.618 = private unnamed_addr constant [4 x i8] c"u16\00" @.str.619 = private unnamed_addr constant [4 x i8] c"u32\00" @.str.620 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.621 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.622 = private unnamed_addr constant [4 x i8] c"f64\00" @.str.623 = private unnamed_addr constant [2 x i8] c"[\00" @.str.624 = private unnamed_addr constant [2 x i8] c"]\00" @.str.625 = private unnamed_addr constant [37 x i8] c"']' (an array type looks like []int)\00" @.str.626 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.627 = private unnamed_addr constant [12 x i8] c"unexpected \00" @.str.628 = private unnamed_addr constant [57 x i8] c" (expected a type like int, str, []int or a struct name)\00" @.str.629 = private unnamed_addr constant [4 x i8] c"map\00" @.str.630 = private unnamed_addr constant [2 x i8] c"[\00" @.str.631 = private unnamed_addr constant [2 x i8] c"]\00" @.str.632 = private unnamed_addr constant [40 x i8] c"']' (a map type looks like map[str]int)\00" @.str.633 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.634 = private unnamed_addr constant [2 x i8] c"[\00" @.str.635 = private unnamed_addr constant [2 x i8] c"]\00" @.str.636 = private unnamed_addr constant [4 x i8] c"']'\00" @.str.637 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.638 = private unnamed_addr constant [4 x i8] c"int\00" @.str.639 = private unnamed_addr constant [4 x i8] c"f64\00" @.str.640 = private unnamed_addr constant [6 x i8] c"float\00" @.str.641 = private unnamed_addr constant [6 x i8] c"named\00" @.str.642 = private unnamed_addr constant [2 x i8] c".\00" @.str.643 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.644 = private unnamed_addr constant [2 x i8] c"[\00" @.str.645 = private unnamed_addr constant [2 x i8] c"]\00" @.str.646 = private unnamed_addr constant [2 x i8] c",\00" @.str.647 = private unnamed_addr constant [2 x i8] c"]\00" @.str.648 = private unnamed_addr constant [29 x i8] c"']' after the type arguments\00" @.str.649 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.650 = private unnamed_addr constant [2 x i8] c"[\00" @.str.651 = private unnamed_addr constant [2 x i8] c"]\00" @.str.652 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.653 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.654 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.655 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.656 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.657 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.658 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.659 = private unnamed_addr constant [2 x i8] c"[\00" @.str.660 = private unnamed_addr constant [2 x i8] c"]\00" @.str.661 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.662 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.663 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.664 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.665 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.666 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.667 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.668 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.669 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.670 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.671 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.672 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.673 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.674 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.675 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.676 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.677 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.678 = private unnamed_addr constant [2 x i8] c"[\00" @.str.679 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.680 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.681 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.682 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.683 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.684 = private unnamed_addr constant [2 x i8] c"]\00" @.str.685 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.686 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.687 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.688 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.689 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.690 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.691 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.692 = private unnamed_addr constant [2 x i8] c"[\00" @.str.693 = private unnamed_addr constant [2 x i8] c"]\00" @.str.694 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.695 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.696 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.697 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.698 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.699 = private unnamed_addr constant [2 x i8] c"(\00" @.str.700 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.701 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.702 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.703 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.704 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.705 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.706 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.707 = private unnamed_addr constant [2 x i8] c"[\00" @.str.708 = private unnamed_addr constant [2 x i8] c"]\00" @.str.709 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.710 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.711 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.712 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.713 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.714 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.715 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.716 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.717 = private unnamed_addr constant [4 x i8] c"map\00" @.str.718 = private unnamed_addr constant [2 x i8] c"[\00" @.str.719 = private unnamed_addr constant [2 x i8] c".\00" @.str.720 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.721 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.722 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.723 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.724 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.725 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.726 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.727 = private unnamed_addr constant [2 x i8] c"}\00" @.str.728 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.729 = private unnamed_addr constant [12 x i8] c"unexpected \00" @.str.730 = private unnamed_addr constant [38 x i8] c" (put each statement on its own line)\00" @.str.731 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.732 = private unnamed_addr constant [7 x i8] c"import\00" @.str.733 = private unnamed_addr constant [7 x i8] c"string\00" @.str.734 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.735 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00" @.str.736 = private unnamed_addr constant [2 x i8] c":\00" @.str.737 = private unnamed_addr constant [2 x i8] c":\00" @.str.738 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.739 = private unnamed_addr constant [52 x i8] c"expected a module name or a C header after 'import'\00" @.str.740 = private unnamed_addr constant [5 x i8] c"link\00" @.str.741 = private unnamed_addr constant [7 x i8] c"string\00" @.str.742 = private unnamed_addr constant [43 x i8] c"a library name in quotes, like link \22glfw\22\00" @.str.743 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.744 = private unnamed_addr constant [3 x i8] c".c\00" @.str.745 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.746 = private unnamed_addr constant [3 x i8] c".o\00" @.str.747 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.748 = private unnamed_addr constant [3 x i8] c".a\00" @.str.749 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.750 = private unnamed_addr constant [4 x i8] c"lib\00" @.str.751 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.752 = private unnamed_addr constant [4 x i8] c".so\00" @.str.753 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.754 = private unnamed_addr constant [2 x i8] c"/\00" @.str.755 = private unnamed_addr constant [66 x i8] c"write just the library's name: for libglfw.so that's link \22glfw\22\00" @.str.756 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.757 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.758 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.759 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.760 = private unnamed_addr constant [7 x i8] c"'enum'\00" @.str.761 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.762 = private unnamed_addr constant [13 x i8] c"an enum name\00" @.str.763 = private unnamed_addr constant [2 x i8] c"{\00" @.str.764 = private unnamed_addr constant [4 x i8] c"'{'\00" @.str.765 = private unnamed_addr constant [2 x i8] c"}\00" @.str.766 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.767 = private unnamed_addr constant [38 x i8] c"an enum is never closed (missing '}')\00" @.str.768 = private unnamed_addr constant [8 x i8] c"variant\00" @.str.769 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.770 = private unnamed_addr constant [25 x i8] c"a variant name, like Red\00" @.str.771 = private unnamed_addr constant [2 x i8] c"(\00" @.str.772 = private unnamed_addr constant [2 x i8] c")\00" @.str.773 = private unnamed_addr constant [6 x i8] c"field\00" @.str.774 = private unnamed_addr constant [2 x i8] c",\00" @.str.775 = private unnamed_addr constant [2 x i8] c")\00" @.str.776 = private unnamed_addr constant [36 x i8] c"')' after the values of the variant\00" @.str.777 = private unnamed_addr constant [13 x i8] c"the variant \00" @.str.778 = private unnamed_addr constant [28 x i8] c" has empty () : write just \00" @.str.779 = private unnamed_addr constant [21 x i8] c" if it holds nothing\00" @.str.780 = private unnamed_addr constant [2 x i8] c"=\00" @.str.781 = private unnamed_addr constant [53 x i8] c"a variant can't have both values inside and a number\00" @.str.782 = private unnamed_addr constant [1 x i8] c"\00" @.str.783 = private unnamed_addr constant [2 x i8] c"-\00" @.str.784 = private unnamed_addr constant [2 x i8] c"-\00" @.str.785 = private unnamed_addr constant [4 x i8] c"int\00" @.str.786 = private unnamed_addr constant [31 x i8] c"a whole number, like Ok = 200\00" @.str.787 = private unnamed_addr constant [2 x i8] c",\00" @.str.788 = private unnamed_addr constant [10 x i8] c"the enum \00" @.str.789 = private unnamed_addr constant [17 x i8] c" has no variants\00" @.str.790 = private unnamed_addr constant [55 x i8] c"an enum whose variants hold values can't number them (\00" @.str.791 = private unnamed_addr constant [4 x i8] c" = \00" @.str.792 = private unnamed_addr constant [2 x i8] c")\00" @.str.793 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.794 = private unnamed_addr constant [6 x i8] c"field\00" @.str.795 = private unnamed_addr constant [4 x i8] c"tag\00" @.str.796 = private unnamed_addr constant [4 x i8] c"int\00" @.str.797 = private unnamed_addr constant [6 x i8] c"field\00" @.str.798 = private unnamed_addr constant [2 x i8] c"_\00" @.str.799 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.800 = private unnamed_addr constant [6 x i8] c"match\00" @.str.801 = private unnamed_addr constant [6 x i8] c"match\00" @.str.802 = private unnamed_addr constant [8 x i8] c"'match'\00" @.str.803 = private unnamed_addr constant [2 x i8] c"{\00" @.str.804 = private unnamed_addr constant [4 x i8] c"'{'\00" @.str.805 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.806 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.807 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.808 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.809 = private unnamed_addr constant [2 x i8] c"}\00" @.str.810 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.811 = private unnamed_addr constant [38 x i8] c"a match is never closed (missing '}')\00" @.str.812 = private unnamed_addr constant [4 x i8] c"arm\00" @.str.813 = private unnamed_addr constant [9 x i8] c"patterns\00" @.str.814 = private unnamed_addr constant [5 x i8] c"else\00" @.str.815 = private unnamed_addr constant [2 x i8] c",\00" @.str.816 = private unnamed_addr constant [3 x i8] c"->\00" @.str.817 = private unnamed_addr constant [58 x i8] c"'->' after the value to match, like Red -> print(\22red\22)\00" @.str.818 = private unnamed_addr constant [2 x i8] c"{\00" @.str.819 = private unnamed_addr constant [2 x i8] c",\00" @.str.820 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.821 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.822 = private unnamed_addr constant [31 x i8] c"a match needs at least one arm\00" @.str.823 = private unnamed_addr constant [2 x i8] c"[\00" @.str.824 = private unnamed_addr constant [4 x i8] c"'['\00" @.str.825 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.826 = private unnamed_addr constant [30 x i8] c"a type parameter name, like T\00" @.str.827 = private unnamed_addr constant [2 x i8] c",\00" @.str.828 = private unnamed_addr constant [2 x i8] c"]\00" @.str.829 = private unnamed_addr constant [30 x i8] c"']' after the type parameters\00" @.str.830 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.831 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.832 = private unnamed_addr constant [9 x i8] c"'struct'\00" @.str.833 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.834 = private unnamed_addr constant [14 x i8] c"a struct name\00" @.str.835 = private unnamed_addr constant [2 x i8] c"[\00" @.str.836 = private unnamed_addr constant [2 x i8] c"{\00" @.str.837 = private unnamed_addr constant [4 x i8] c"'{'\00" @.str.838 = private unnamed_addr constant [2 x i8] c"}\00" @.str.839 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.840 = private unnamed_addr constant [39 x i8] c"a struct is never closed (missing '}')\00" @.str.841 = private unnamed_addr constant [6 x i8] c"field\00" @.str.842 = private unnamed_addr constant [12 x i8] c"unexpected \00" @.str.843 = private unnamed_addr constant [29 x i8] c" (a field looks like: int x)\00" @.str.844 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.845 = private unnamed_addr constant [13 x i8] c"a field name\00" @.str.846 = private unnamed_addr constant [2 x i8] c"=\00" @.str.847 = private unnamed_addr constant [3 x i8] c"fn\00" @.str.848 = private unnamed_addr constant [7 x i8] c"export\00" @.str.849 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.850 = private unnamed_addr constant [69 x i8] c"functions start with 'fn', like: fn add(int a, int b) -> int { ... }\00" @.str.851 = private unnamed_addr constant [3 x i8] c"fn\00" @.str.852 = private unnamed_addr constant [27 x i8] c"'fn', 'struct' or 'import'\00" @.str.853 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.854 = private unnamed_addr constant [16 x i8] c"a function name\00" @.str.855 = private unnamed_addr constant [2 x i8] c"[\00" @.str.856 = private unnamed_addr constant [2 x i8] c".\00" @.str.857 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.858 = private unnamed_addr constant [14 x i8] c"a method name\00" @.str.859 = private unnamed_addr constant [2 x i8] c"(\00" @.str.860 = private unnamed_addr constant [4 x i8] c"'('\00" @.str.861 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.862 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.863 = private unnamed_addr constant [2 x i8] c")\00" @.str.864 = private unnamed_addr constant [6 x i8] c"param\00" @.str.865 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.866 = private unnamed_addr constant [17 x i8] c"a parameter name\00" @.str.867 = private unnamed_addr constant [2 x i8] c",\00" @.str.868 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.869 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.870 = private unnamed_addr constant [2 x i8] c")\00" @.str.871 = private unnamed_addr constant [4 x i8] c"')'\00" @.str.872 = private unnamed_addr constant [5 x i8] c"void\00" @.str.873 = private unnamed_addr constant [3 x i8] c"->\00" @.str.874 = private unnamed_addr constant [2 x i8] c"!\00" @.str.875 = private unnamed_addr constant [2 x i8] c"!\00" @.str.876 = private unnamed_addr constant [5 x i8] c"void\00" @.str.877 = private unnamed_addr constant [12 x i8] c"unexpected \00" @.str.878 = private unnamed_addr constant [62 x i8] c" (after '->' comes a type, or ! for a function that can fail)\00" @.str.879 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.880 = private unnamed_addr constant [6 x i8] c"block\00" @.str.881 = private unnamed_addr constant [2 x i8] c"{\00" @.str.882 = private unnamed_addr constant [4 x i8] c"'{'\00" @.str.883 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.884 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.885 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.886 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.887 = private unnamed_addr constant [2 x i8] c"}\00" @.str.888 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.889 = private unnamed_addr constant [36 x i8] c"a '{' is never closed (missing '}')\00" @.str.890 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.891 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.892 = private unnamed_addr constant [3 x i8] c"if\00" @.str.893 = private unnamed_addr constant [6 x i8] c"while\00" @.str.894 = private unnamed_addr constant [6 x i8] c"while\00" @.str.895 = private unnamed_addr constant [4 x i8] c"for\00" @.str.896 = private unnamed_addr constant [4 x i8] c"for\00" @.str.897 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.898 = private unnamed_addr constant [21 x i8] c"a loop variable name\00" @.str.899 = private unnamed_addr constant [2 x i8] c",\00" @.str.900 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.901 = private unnamed_addr constant [28 x i8] c"a second loop variable name\00" @.str.902 = private unnamed_addr constant [3 x i8] c"in\00" @.str.903 = private unnamed_addr constant [5 x i8] c"'in'\00" @.str.904 = private unnamed_addr constant [3 x i8] c"..\00" @.str.905 = private unnamed_addr constant [56 x i8] c"a range of numbers has one loop variable: for i in 0..n\00" @.str.906 = private unnamed_addr constant [5 x i8] c"each\00" @.str.907 = private unnamed_addr constant [6 x i8] c"match\00" @.str.908 = private unnamed_addr constant [7 x i8] c"return\00" @.str.909 = private unnamed_addr constant [7 x i8] c"return\00" @.str.910 = private unnamed_addr constant [2 x i8] c"}\00" @.str.911 = private unnamed_addr constant [6 x i8] c"break\00" @.str.912 = private unnamed_addr constant [9 x i8] c"continue\00" @.str.913 = private unnamed_addr constant [2 x i8] c"{\00" @.str.914 = private unnamed_addr constant [6 x i8] c"defer\00" @.str.915 = private unnamed_addr constant [6 x i8] c"defer\00" @.str.916 = private unnamed_addr constant [6 x i8] c"defer\00" @.str.917 = private unnamed_addr constant [34 x i8] c"defer inside defer is not allowed\00" @.str.918 = private unnamed_addr constant [3 x i8] c"fn\00" @.str.919 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.920 = private unnamed_addr constant [7 x i8] c"import\00" @.str.921 = private unnamed_addr constant [5 x i8] c"link\00" @.str.922 = private unnamed_addr constant [2 x i8] c"'\00" @.str.923 = private unnamed_addr constant [49 x i8] c"' can't be used here in the self-hosted compiler\00" @.str.924 = private unnamed_addr constant [5 x i8] c"decl\00" @.str.925 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.926 = private unnamed_addr constant [16 x i8] c"a variable name\00" @.str.927 = private unnamed_addr constant [2 x i8] c"=\00" @.str.928 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.929 = private unnamed_addr constant [3 x i8] c":=\00" @.str.930 = private unnamed_addr constant [5 x i8] c"decl\00" @.str.931 = private unnamed_addr constant [2 x i8] c"=\00" @.str.932 = private unnamed_addr constant [3 x i8] c"+=\00" @.str.933 = private unnamed_addr constant [3 x i8] c"-=\00" @.str.934 = private unnamed_addr constant [3 x i8] c"*=\00" @.str.935 = private unnamed_addr constant [3 x i8] c"/=\00" @.str.936 = private unnamed_addr constant [3 x i8] c"%=\00" @.str.937 = private unnamed_addr constant [4 x i8] c"var\00" @.str.938 = private unnamed_addr constant [7 x i8] c"member\00" @.str.939 = private unnamed_addr constant [6 x i8] c"index\00" @.str.940 = private unnamed_addr constant [67 x i8] c"only a variable, a field, an element or p.value can be assigned to\00" @.str.941 = private unnamed_addr constant [7 x i8] c"assign\00" @.str.942 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.943 = private unnamed_addr constant [29 x i8] c"used .file on a null pointer\00" @.str.944 = private unnamed_addr constant [5 x i8] c"call\00" @.str.945 = private unnamed_addr constant [7 x i8] c"method\00" @.str.946 = private unnamed_addr constant [4 x i8] c"try\00" @.str.947 = private unnamed_addr constant [3 x i8] c"or\00" @.str.948 = private unnamed_addr constant [38 x i8] c"this value is computed but never used\00" @.str.949 = private unnamed_addr constant [5 x i8] c"expr\00" @.str.950 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.951 = private unnamed_addr constant [29 x i8] c"used .file on a null pointer\00" @.str.952 = private unnamed_addr constant [3 x i8] c"if\00" @.str.953 = private unnamed_addr constant [3 x i8] c"if\00" @.str.954 = private unnamed_addr constant [5 x i8] c"'if'\00" @.str.955 = private unnamed_addr constant [5 x i8] c"else\00" @.str.956 = private unnamed_addr constant [3 x i8] c"if\00" @.str.957 = private unnamed_addr constant [3 x i8] c"||\00" @.str.958 = private unnamed_addr constant [3 x i8] c"&&\00" @.str.959 = private unnamed_addr constant [3 x i8] c"==\00" @.str.960 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.961 = private unnamed_addr constant [2 x i8] c"<\00" @.str.962 = private unnamed_addr constant [3 x i8] c"<=\00" @.str.963 = private unnamed_addr constant [2 x i8] c">\00" @.str.964 = private unnamed_addr constant [3 x i8] c">=\00" @.str.965 = private unnamed_addr constant [2 x i8] c"+\00" @.str.966 = private unnamed_addr constant [2 x i8] c"-\00" @.str.967 = private unnamed_addr constant [2 x i8] c"|\00" @.str.968 = private unnamed_addr constant [2 x i8] c"^\00" @.str.969 = private unnamed_addr constant [2 x i8] c"*\00" @.str.970 = private unnamed_addr constant [2 x i8] c"/\00" @.str.971 = private unnamed_addr constant [2 x i8] c"%\00" @.str.972 = private unnamed_addr constant [3 x i8] c"<<\00" @.str.973 = private unnamed_addr constant [3 x i8] c">>\00" @.str.974 = private unnamed_addr constant [2 x i8] c"&\00" @.str.975 = private unnamed_addr constant [3 x i8] c"or\00" @.str.976 = private unnamed_addr constant [3 x i8] c"or\00" @.str.977 = private unnamed_addr constant [2 x i8] c"{\00" @.str.978 = private unnamed_addr constant [7 x i8] c"binary\00" @.str.979 = private unnamed_addr constant [4 x i8] c"try\00" @.str.980 = private unnamed_addr constant [4 x i8] c"try\00" @.str.981 = private unnamed_addr constant [2 x i8] c"-\00" @.str.982 = private unnamed_addr constant [2 x i8] c"!\00" @.str.983 = private unnamed_addr constant [2 x i8] c"~\00" @.str.984 = private unnamed_addr constant [6 x i8] c"unary\00" @.str.985 = private unnamed_addr constant [2 x i8] c"(\00" @.str.986 = private unnamed_addr constant [4 x i8] c"'('\00" @.str.987 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.988 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.989 = private unnamed_addr constant [2 x i8] c")\00" @.str.990 = private unnamed_addr constant [2 x i8] c")\00" @.str.991 = private unnamed_addr constant [1 x i8] c"\00" @.str.992 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.993 = private unnamed_addr constant [2 x i8] c":\00" @.str.994 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.995 = private unnamed_addr constant [30 x i8] c"used .names on a null pointer\00" @.str.996 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.997 = private unnamed_addr constant [29 x i8] c"used .kids on a null pointer\00" @.str.998 = private unnamed_addr constant [2 x i8] c",\00" @.str.999 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.1000 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.1001 = private unnamed_addr constant [2 x i8] c")\00" @.str.1002 = private unnamed_addr constant [4 x i8] c"')'\00" @.str.1003 = private unnamed_addr constant [2 x i8] c".\00" @.str.1004 = private unnamed_addr constant [7 x i8] c"member\00" @.str.1005 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.1006 = private unnamed_addr constant [17 x i8] c"a name after '.'\00" @.str.1007 = private unnamed_addr constant [2 x i8] c"(\00" @.str.1008 = private unnamed_addr constant [7 x i8] c"method\00" @.str.1009 = private unnamed_addr constant [2 x i8] c"[\00" @.str.1010 = private unnamed_addr constant [6 x i8] c"index\00" @.str.1011 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.1012 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.1013 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.1014 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.1015 = private unnamed_addr constant [2 x i8] c"]\00" @.str.1016 = private unnamed_addr constant [4 x i8] c"']'\00" @.str.1017 = private unnamed_addr constant [1 x i8] c"\00" @.str.1018 = private unnamed_addr constant [4 x i8] c"int\00" @.str.1019 = private unnamed_addr constant [6 x i8] c"float\00" @.str.1020 = private unnamed_addr constant [5 x i8] c"char\00" @.str.1021 = private unnamed_addr constant [7 x i8] c"string\00" @.str.1022 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1023 = private unnamed_addr constant [5 x i8] c"true\00" @.str.1024 = private unnamed_addr constant [6 x i8] c"false\00" @.str.1025 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.1026 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1027 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1028 = private unnamed_addr constant [2 x i8] c"(\00" @.str.1029 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.1030 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.1031 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.1032 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.1033 = private unnamed_addr constant [2 x i8] c")\00" @.str.1034 = private unnamed_addr constant [4 x i8] c"')'\00" @.str.1035 = private unnamed_addr constant [6 x i8] c"match\00" @.str.1036 = private unnamed_addr constant [2 x i8] c"[\00" @.str.1037 = private unnamed_addr constant [6 x i8] c"array\00" @.str.1038 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.1039 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.1040 = private unnamed_addr constant [2 x i8] c":\00" @.str.1041 = private unnamed_addr constant [2 x i8] c"]\00" @.str.1042 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1043 = private unnamed_addr constant [2 x i8] c"]\00" @.str.1044 = private unnamed_addr constant [2 x i8] c":\00" @.str.1045 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1046 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1047 = private unnamed_addr constant [2 x i8] c":\00" @.str.1048 = private unnamed_addr constant [42 x i8] c"':' (a map entry looks like \22key\22: value)\00" @.str.1049 = private unnamed_addr constant [2 x i8] c",\00" @.str.1050 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.1051 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.1052 = private unnamed_addr constant [2 x i8] c"]\00" @.str.1053 = private unnamed_addr constant [4 x i8] c"']'\00" @.str.1054 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.1055 = private unnamed_addr constant [2 x i8] c"[\00" @.str.1056 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.1057 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.1058 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.1059 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.1060 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.1061 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.1062 = private unnamed_addr constant [6 x i8] c"targs\00" @.str.1063 = private unnamed_addr constant [2 x i8] c",\00" @.str.1064 = private unnamed_addr constant [2 x i8] c"]\00" @.str.1065 = private unnamed_addr constant [29 x i8] c"']' after the type arguments\00" @.str.1066 = private unnamed_addr constant [5 x i8] c"call\00" @.str.1067 = private unnamed_addr constant [2 x i8] c"(\00" @.str.1068 = private unnamed_addr constant [5 x i8] c"call\00" @.str.1069 = private unnamed_addr constant [4 x i8] c"var\00" @.str.1070 = private unnamed_addr constant [12 x i8] c"unexpected \00" @.str.1071 = private unnamed_addr constant [20 x i8] c" (expected a value)\00" @.str.1072 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1073 = private unnamed_addr constant [2 x i8] c"\5C\00" @.str.1074 = private unnamed_addr constant [3 x i8] c"\5C\5C\00" @.str.1075 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1076 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.1077 = private unnamed_addr constant [3 x i8] c"\5Cn\00" @.str.1078 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1079 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1080 = private unnamed_addr constant [2 x i8] c" \00" @.str.1081 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1082 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.1083 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1084 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1085 = private unnamed_addr constant [4 x i8] c"@R\09\00" @.str.1086 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1087 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1088 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1089 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1090 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1091 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1092 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1093 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1094 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1095 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1096 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1097 = private unnamed_addr constant [2 x i8] c" \00" @.str.1098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1099 = private unnamed_addr constant [2 x i8] c".\00" @.str.1100 = private unnamed_addr constant [4 x i8] c"fn \00" @.str.1101 = private unnamed_addr constant [2 x i8] c"(\00" @.str.1102 = private unnamed_addr constant [3 x i8] c", \00" @.str.1103 = private unnamed_addr constant [2 x i8] c")\00" @.str.1104 = private unnamed_addr constant [5 x i8] c"void\00" @.str.1105 = private unnamed_addr constant [6 x i8] c" -> !\00" @.str.1106 = private unnamed_addr constant [5 x i8] c" -> \00" @.str.1107 = private unnamed_addr constant [2 x i8] c"!\00" @.str.1108 = private unnamed_addr constant [5 x i8] c"void\00" @.str.1109 = private unnamed_addr constant [5 x i8] c" -> \00" @.str.1110 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1111 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.1112 = private unnamed_addr constant [7 x i8] c"method\00" @.str.1113 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1114 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1115 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1117 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" @.str.1118 = private unnamed_addr constant [5 x i8] c"\0A```\00" @.str.1119 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1120 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1122 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1123 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1124 = private unnamed_addr constant [4 x i8] c"@I\09\00" @.str.1125 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1126 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.1127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1128 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1129 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1131 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1132 = private unnamed_addr constant [2 x i8] c" \00" @.str.1133 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1134 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1135 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1136 = private unnamed_addr constant [4 x i8] c"@F\09\00" @.str.1137 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1138 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1139 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1140 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1141 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1142 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1143 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1144 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1145 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1146 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1147 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1148 = private unnamed_addr constant [2 x i8] c"|\00" @.str.1149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1150 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.1151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1152 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1153 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1154 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1156 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1157 = private unnamed_addr constant [4 x i8] c"@F\09\00" @.str.1158 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1159 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1160 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1161 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1162 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1164 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1165 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1166 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1167 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1168 = private unnamed_addr constant [4 x i8] c"fn \00" @.str.1169 = private unnamed_addr constant [2 x i8] c"[\00" @.str.1170 = private unnamed_addr constant [3 x i8] c", \00" @.str.1171 = private unnamed_addr constant [7 x i8] c"](...)\00" @.str.1172 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1173 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1174 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.1175 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1176 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1177 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1178 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1179 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1180 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1181 = private unnamed_addr constant [4 x i8] c"@S\09\00" @.str.1182 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1183 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1185 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1186 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1187 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1188 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1189 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1190 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1191 = private unnamed_addr constant [5 x i8] c"@SF\09\00" @.str.1192 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1193 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1195 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1197 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1198 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1199 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1200 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1201 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1202 = private unnamed_addr constant [1 x i8] c"\00" @.str.1203 = private unnamed_addr constant [2 x i8] c",\00" @.str.1204 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1205 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1206 = private unnamed_addr constant [4 x i8] c"@E\09\00" @.str.1207 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1208 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1209 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1210 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1211 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1212 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1213 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1214 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1215 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1216 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1217 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1218 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1219 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.1220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1221 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1222 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1223 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1224 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.1225 = private unnamed_addr constant [1 x i8] c"\00" @.str.1226 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.1227 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.1228 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1229 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1230 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1231 = private unnamed_addr constant [2 x i8] c":\00" @.str.1232 = private unnamed_addr constant [2 x i8] c":\00" @.str.1233 = private unnamed_addr constant [10 x i8] c": error: \00" @.str.1234 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1235 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.1236 = private unnamed_addr constant [1 x i8] c"\00" @.str.1237 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.1238 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.1239 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1240 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.1241 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1242 = private unnamed_addr constant [6 x i8] c"call \00" @.str.1243 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1244 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.1245 = private unnamed_addr constant [3 x i8] c" \00" @.str.1246 = private unnamed_addr constant [9 x i8] c", !dbg !\00" @.str.1247 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1248 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.1249 = private unnamed_addr constant [3 x i8] c" \00" @.str.1250 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1251 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" @.str.1252 = private unnamed_addr constant [3 x i8] c"%t\00" @.str.1253 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1254 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" @.str.1255 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1256 = private unnamed_addr constant [28 x i8] c"used .lbl on a null pointer\00" @.str.1257 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1258 = private unnamed_addr constant [28 x i8] c"used .lbl on a null pointer\00" @.str.1259 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1260 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.1261 = private unnamed_addr constant [2 x i8] c":\00" @.str.1262 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1263 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1264 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1265 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1266 = private unnamed_addr constant [11 x i8] c"br label %\00" @.str.1267 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1268 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1269 = private unnamed_addr constant [7 x i8] c"br i1 \00" @.str.1270 = private unnamed_addr constant [10 x i8] c", label %\00" @.str.1271 = private unnamed_addr constant [10 x i8] c", label %\00" @.str.1272 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1273 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1274 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1275 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" @.str.1276 = private unnamed_addr constant [3 x i8] c"%a\00" @.str.1277 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1278 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" @.str.1279 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1280 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" @.str.1281 = private unnamed_addr constant [3 x i8] c" \00" @.str.1282 = private unnamed_addr constant [11 x i8] c" = alloca \00" @.str.1283 = private unnamed_addr constant [11 x i8] c", align 16\00" @.str.1284 = private unnamed_addr constant [9 x i8] c" = load \00" @.str.1285 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1286 = private unnamed_addr constant [7 x i8] c"store \00" @.str.1287 = private unnamed_addr constant [2 x i8] c" \00" @.str.1288 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1289 = private unnamed_addr constant [4 x i8] c" = \00" @.str.1290 = private unnamed_addr constant [4 x i8] c"int\00" @.str.1291 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.1292 = private unnamed_addr constant [4 x i8] c"i16\00" @.str.1293 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.1294 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.1295 = private unnamed_addr constant [4 x i8] c"u16\00" @.str.1296 = private unnamed_addr constant [4 x i8] c"u32\00" @.str.1297 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.1298 = private unnamed_addr constant [6 x i8] c"float\00" @.str.1299 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.1300 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.1301 = private unnamed_addr constant [5 x i8] c"char\00" @.str.1302 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.1303 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.1304 = private unnamed_addr constant [4 x i8] c"i16\00" @.str.1305 = private unnamed_addr constant [4 x i8] c"u16\00" @.str.1306 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.1307 = private unnamed_addr constant [4 x i8] c"u32\00" @.str.1308 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.1309 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1310 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1311 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.1312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1313 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.1314 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1315 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1316 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.1317 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1318 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1319 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.1320 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1321 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.1322 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1323 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1324 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.1325 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1326 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1327 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" @.str.1328 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1329 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" @.str.1330 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1331 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1332 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" @.str.1333 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1334 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1335 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1336 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1337 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1338 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1339 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1340 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1341 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1342 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.1343 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1344 = private unnamed_addr constant [6 x i8] c"array\00" @.str.1345 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1346 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1347 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1348 = private unnamed_addr constant [5 x i8] c"char\00" @.str.1349 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.1350 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1351 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.1352 = private unnamed_addr constant [64 x i8] c"a map key must be a whole number, a char, a bool or a str, not \00" @.str.1353 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1354 = private unnamed_addr constant [5 x i8] c"void\00" @.str.1355 = private unnamed_addr constant [42 x i8] c"a map value can't have the type 'nothing'\00" @.str.1356 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.1357 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.1358 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1359 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1360 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1361 = private unnamed_addr constant [6 x i8] c"named\00" @.str.1362 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1363 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.1364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1365 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.1366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1367 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.1368 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1369 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1370 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.1371 = private unnamed_addr constant [2 x i8] c"'\00" @.str.1372 = private unnamed_addr constant [37 x i8] c"' is not imported here (add: import \00" @.str.1373 = private unnamed_addr constant [2 x i8] c")\00" @.str.1374 = private unnamed_addr constant [2 x i8] c"C\00" @.str.1375 = private unnamed_addr constant [2 x i8] c"C\00" @.str.1376 = private unnamed_addr constant [29 x i8] c"there is no C struct named '\00" @.str.1377 = private unnamed_addr constant [2 x i8] c"'\00" @.str.1378 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.1379 = private unnamed_addr constant [2 x i8] c"C\00" @.str.1380 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1381 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.1382 = private unnamed_addr constant [2 x i8] c"'\00" @.str.1383 = private unnamed_addr constant [37 x i8] c"' is not imported here (add: import \00" @.str.1384 = private unnamed_addr constant [2 x i8] c")\00" @.str.1385 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.1386 = private unnamed_addr constant [2 x i8] c"C\00" @.str.1387 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.1388 = private unnamed_addr constant [2 x i8] c"C\00" @.str.1389 = private unnamed_addr constant [25 x i8] c"there is no type named '\00" @.str.1390 = private unnamed_addr constant [2 x i8] c"'\00" @.str.1391 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.1392 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1393 = private unnamed_addr constant [2 x i8] c"[\00" @.str.1394 = private unnamed_addr constant [2 x i8] c".\00" @.str.1395 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1396 = private unnamed_addr constant [2 x i8] c"]\00" @.str.1397 = private unnamed_addr constant [1 x i8] c"\00" @.str.1398 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1399 = private unnamed_addr constant [2 x i8] c",\00" @.str.1400 = private unnamed_addr constant [2 x i8] c".\00" @.str.1401 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1402 = private unnamed_addr constant [2 x i8] c" \00" @.str.1403 = private unnamed_addr constant [1 x i8] c"\00" @.str.1404 = private unnamed_addr constant [5 x i8] c"main\00" @.str.1405 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.1406 = private unnamed_addr constant [3 x i8] c"i1\00" @.str.1407 = private unnamed_addr constant [5 x i8] c"char\00" @.str.1408 = private unnamed_addr constant [2 x i8] c"i\00" @.str.1409 = private unnamed_addr constant [6 x i8] c"float\00" @.str.1410 = private unnamed_addr constant [7 x i8] c"double\00" @.str.1411 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.1412 = private unnamed_addr constant [6 x i8] c"float\00" @.str.1413 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1414 = private unnamed_addr constant [6 x i8] c"array\00" @.str.1415 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.1416 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1417 = private unnamed_addr constant [38 x i8] c"{ ptr, i64, i64, i64, ptr, i64, i64 }\00" @.str.1418 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.1419 = private unnamed_addr constant [2 x i8] c"[\00" @.str.1420 = private unnamed_addr constant [4 x i8] c" x \00" @.str.1421 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1422 = private unnamed_addr constant [2 x i8] c"]\00" @.str.1423 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.1424 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.1425 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1426 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1427 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1428 = private unnamed_addr constant [5 x i8] c"void\00" @.str.1429 = private unnamed_addr constant [5 x i8] c"void\00" @.str.1430 = private unnamed_addr constant [4 x i8] c"%S.\00" @.str.1431 = private unnamed_addr constant [2 x i8] c".\00" @.str.1432 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.1433 = private unnamed_addr constant [5 x i8] c"void\00" @.str.1434 = private unnamed_addr constant [7 x i8] c"{ i1, \00" @.str.1435 = private unnamed_addr constant [22 x i8] c", { ptr, i64, i64 } }\00" @.str.1436 = private unnamed_addr constant [2 x i8] c":\00" @.str.1437 = private unnamed_addr constant [2 x i8] c":\00" @.str.1438 = private unnamed_addr constant [2 x i8] c":\00" @.str.1439 = private unnamed_addr constant [5 x i8] c"char\00" @.str.1440 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.1441 = private unnamed_addr constant [2 x i8] c"0\00" @.str.1442 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.1443 = private unnamed_addr constant [6 x i8] c"false\00" @.str.1444 = private unnamed_addr constant [4 x i8] c"0.0\00" @.str.1445 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1446 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1447 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1448 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.1449 = private unnamed_addr constant [30 x i8] c"ptrtoint (ptr getelementptr (\00" @.str.1450 = private unnamed_addr constant [27 x i8] c", ptr null, i32 1) to i64)\00" @.str.1451 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1452 = private unnamed_addr constant [6 x i8] c"array\00" @.str.1453 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1454 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.1455 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1456 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.1457 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1458 = private unnamed_addr constant [6 x i8] c"array\00" @.str.1459 = private unnamed_addr constant [5 x i8] c"arr_\00" @.str.1460 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1461 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1462 = private unnamed_addr constant [5 x i8] c"map_\00" @.str.1463 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1464 = private unnamed_addr constant [2 x i8] c"_\00" @.str.1465 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1466 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.1467 = private unnamed_addr constant [3 x i8] c"E_\00" @.str.1468 = private unnamed_addr constant [2 x i8] c"_\00" @.str.1469 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.1470 = private unnamed_addr constant [3 x i8] c"S_\00" @.str.1471 = private unnamed_addr constant [2 x i8] c"_\00" @.str.1472 = private unnamed_addr constant [17 x i8] c"0123456789ABCDEF\00" @.str.1473 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1474 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1475 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1476 = private unnamed_addr constant [29 x i8] c"used .nstr on a null pointer\00" @.str.1477 = private unnamed_addr constant [7 x i8] c"@.str.\00" @.str.1478 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1479 = private unnamed_addr constant [29 x i8] c"used .nstr on a null pointer\00" @.str.1480 = private unnamed_addr constant [2 x i8] c"\5C\00" @.str.1481 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1482 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" @.str.1483 = private unnamed_addr constant [35 x i8] c" = private unnamed_addr constant [\00" @.str.1484 = private unnamed_addr constant [10 x i8] c" x i8] c\22\00" @.str.1485 = private unnamed_addr constant [1 x i8] c"\00" @.str.1486 = private unnamed_addr constant [5 x i8] c"\5C00\22\00" @.str.1487 = private unnamed_addr constant [7 x i8] c"{ ptr \00" @.str.1488 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1489 = private unnamed_addr constant [10 x i8] c", i64 0 }\00" @.str.1490 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1491 = private unnamed_addr constant [6 x i8] c"panic\00" @.str.1492 = private unnamed_addr constant [3 x i8] c"ok\00" @.str.1493 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1494 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1495 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1496 = private unnamed_addr constant [28 x i8] c"call void @finch_panic(ptr \00" @.str.1497 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1498 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1499 = private unnamed_addr constant [2 x i8] c")\00" @.str.1500 = private unnamed_addr constant [12 x i8] c"unreachable\00" @.str.1501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1502 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1503 = private unnamed_addr constant [6 x i8] c"range\00" @.str.1504 = private unnamed_addr constant [8 x i8] c"inrange\00" @.str.1505 = private unnamed_addr constant [14 x i8] c"icmp uge i64 \00" @.str.1506 = private unnamed_addr constant [3 x i8] c", \00" @.str.1507 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1508 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1509 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1510 = private unnamed_addr constant [34 x i8] c"call void @finch_panic_index(ptr \00" @.str.1511 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1512 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1513 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1514 = private unnamed_addr constant [2 x i8] c")\00" @.str.1515 = private unnamed_addr constant [12 x i8] c"unreachable\00" @.str.1516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1517 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1519 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.1520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1521 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" @.str.1522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1523 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" @.str.1524 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1525 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1526 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1527 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.1528 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1529 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.1530 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1531 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.1532 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1533 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" @.str.1534 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1535 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" @.str.1536 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1537 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1538 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1539 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.1540 = private unnamed_addr constant [11 x i8] c" {\0Aentry:\0A\00" @.str.1541 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1542 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" @.str.1543 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.1544 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.1545 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1546 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.1547 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.1548 = private unnamed_addr constant [4 x i8] c"\0A}\0A\00" @.str.1549 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1550 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.1551 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1552 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" @.str.1553 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1554 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" @.str.1555 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1556 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1558 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.1559 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1560 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1561 = private unnamed_addr constant [2 x i8] c"0\00" @.str.1562 = private unnamed_addr constant [7 x i8] c"n.cond\00" @.str.1563 = private unnamed_addr constant [7 x i8] c"n.body\00" @.str.1564 = private unnamed_addr constant [6 x i8] c"n.end\00" @.str.1565 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1566 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" @.str.1567 = private unnamed_addr constant [3 x i8] c", \00" @.str.1568 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1569 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1570 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1571 = private unnamed_addr constant [9 x i8] c"add i64 \00" @.str.1572 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.1573 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1574 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1575 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1576 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1577 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00" @.str.1578 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1579 = private unnamed_addr constant [2 x i8] c")\00" @.str.1580 = private unnamed_addr constant [6 x i8] c"array\00" @.str.1581 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1582 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.1583 = private unnamed_addr constant [11 x i8] c"call void \00" @.str.1584 = private unnamed_addr constant [6 x i8] c"(ptr \00" @.str.1585 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1586 = private unnamed_addr constant [2 x i8] c")\00" @.str.1587 = private unnamed_addr constant [13 x i8] c"@finch.copy.\00" @.str.1588 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1589 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" @.str.1590 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1591 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" @.str.1592 = private unnamed_addr constant [6 x i8] c"array\00" @.str.1593 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1594 = private unnamed_addr constant [56 x i8] c"call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 \00" @.str.1595 = private unnamed_addr constant [2 x i8] c")\00" @.str.1596 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1597 = private unnamed_addr constant [5 x i8] c"%dst\00" @.str.1598 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1599 = private unnamed_addr constant [5 x i8] c"%src\00" @.str.1600 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1601 = private unnamed_addr constant [65 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1\00" @.str.1602 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1603 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1604 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1605 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1606 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1607 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1608 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1609 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1610 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1611 = private unnamed_addr constant [56 x i8] c"call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 \00" @.str.1612 = private unnamed_addr constant [2 x i8] c")\00" @.str.1613 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1614 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1615 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1616 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1617 = private unnamed_addr constant [25 x i8] c", ptr %src, i32 0, i32 2\00" @.str.1618 = private unnamed_addr constant [5 x i8] c"%src\00" @.str.1619 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1620 = private unnamed_addr constant [5 x i8] c"%dst\00" @.str.1621 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1622 = private unnamed_addr constant [11 x i8] c"entry.live\00" @.str.1623 = private unnamed_addr constant [11 x i8] c"entry.next\00" @.str.1624 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" @.str.1625 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1626 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1627 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1628 = private unnamed_addr constant [15 x i8] c", i32 0, i32 0\00" @.str.1629 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.1630 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1631 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1632 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1633 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.1634 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1635 = private unnamed_addr constant [5 x i8] c"%src\00" @.str.1636 = private unnamed_addr constant [5 x i8] c"%dst\00" @.str.1637 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1638 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1639 = private unnamed_addr constant [24 x i8] c", ptr %dst, i32 0, i32 \00" @.str.1640 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1641 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1642 = private unnamed_addr constant [24 x i8] c", ptr %src, i32 0, i32 \00" @.str.1643 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1644 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1645 = private unnamed_addr constant [9 x i8] c"ret void\00" @.str.1646 = private unnamed_addr constant [22 x i8] c"define internal void \00" @.str.1647 = private unnamed_addr constant [21 x i8] c"(ptr %dst, ptr %src)\00" @.str.1648 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1649 = private unnamed_addr constant [31 x i8] c"call void @finch_str_drop(ptr \00" @.str.1650 = private unnamed_addr constant [2 x i8] c")\00" @.str.1651 = private unnamed_addr constant [11 x i8] c"call void \00" @.str.1652 = private unnamed_addr constant [6 x i8] c"(ptr \00" @.str.1653 = private unnamed_addr constant [2 x i8] c")\00" @.str.1654 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1655 = private unnamed_addr constant [2 x i8] c"%\00" @.str.1656 = private unnamed_addr constant [13 x i8] c"@finch.drop.\00" @.str.1657 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1658 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" @.str.1659 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1660 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" @.str.1661 = private unnamed_addr constant [6 x i8] c"array\00" @.str.1662 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1663 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1664 = private unnamed_addr constant [3 x i8] c"%a\00" @.str.1665 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1666 = private unnamed_addr constant [63 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1\00" @.str.1667 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1668 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1669 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1670 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1671 = private unnamed_addr constant [34 x i8] c"call void @finch_arr_free(ptr %a)\00" @.str.1672 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1673 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1674 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1675 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1676 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1677 = private unnamed_addr constant [23 x i8] c", ptr %a, i32 0, i32 2\00" @.str.1678 = private unnamed_addr constant [3 x i8] c"%a\00" @.str.1679 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1680 = private unnamed_addr constant [11 x i8] c"entry.live\00" @.str.1681 = private unnamed_addr constant [11 x i8] c"entry.next\00" @.str.1682 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" @.str.1683 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1684 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.1685 = private unnamed_addr constant [34 x i8] c"call void @finch_map_free(ptr %a)\00" @.str.1686 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1687 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.1688 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1689 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1690 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1691 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00" @.str.1692 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1693 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1694 = private unnamed_addr constant [9 x i8] c"ret void\00" @.str.1695 = private unnamed_addr constant [22 x i8] c"define internal void \00" @.str.1696 = private unnamed_addr constant [9 x i8] c"(ptr %a)\00" @.str.1697 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1698 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.1699 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1700 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.1701 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1702 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.1703 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1704 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.1705 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1706 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1707 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.1708 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1709 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.1710 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1711 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.1712 = private unnamed_addr constant [1 x i8] c"\00" @.str.1713 = private unnamed_addr constant [3 x i8] c", \00" @.str.1714 = private unnamed_addr constant [36 x i8] c" = call i32 (ptr, ...) @printf(ptr \00" @.str.1715 = private unnamed_addr constant [2 x i8] c")\00" @.str.1716 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" @.str.1717 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.1718 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" @.str.1719 = private unnamed_addr constant [7 x i8] c", null\00" @.str.1720 = private unnamed_addr constant [1 x i8] c"\00" @.str.1721 = private unnamed_addr constant [11 x i8] c"select i1 \00" @.str.1722 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1723 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1724 = private unnamed_addr constant [5 x i8] c"%lld\00" @.str.1725 = private unnamed_addr constant [5 x i8] c"i64 \00" @.str.1726 = private unnamed_addr constant [4 x i8] c"int\00" @.str.1727 = private unnamed_addr constant [5 x i8] c"%llu\00" @.str.1728 = private unnamed_addr constant [5 x i8] c"i64 \00" @.str.1729 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.1730 = private unnamed_addr constant [3 x i8] c"%g\00" @.str.1731 = private unnamed_addr constant [8 x i8] c"double \00" @.str.1732 = private unnamed_addr constant [6 x i8] c"float\00" @.str.1733 = private unnamed_addr constant [5 x i8] c"char\00" @.str.1734 = private unnamed_addr constant [9 x i8] c"sext i8 \00" @.str.1735 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.1736 = private unnamed_addr constant [5 x i8] c"'%c'\00" @.str.1737 = private unnamed_addr constant [5 x i8] c"i32 \00" @.str.1738 = private unnamed_addr constant [3 x i8] c"%c\00" @.str.1739 = private unnamed_addr constant [5 x i8] c"i32 \00" @.str.1740 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.1741 = private unnamed_addr constant [5 x i8] c"true\00" @.str.1742 = private unnamed_addr constant [6 x i8] c"false\00" @.str.1743 = private unnamed_addr constant [11 x i8] c"select i1 \00" @.str.1744 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1745 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1746 = private unnamed_addr constant [3 x i8] c"%s\00" @.str.1747 = private unnamed_addr constant [5 x i8] c"ptr \00" @.str.1748 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1749 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" @.str.1750 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.1751 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" @.str.1752 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.1753 = private unnamed_addr constant [7 x i8] c"\22%.*s\22\00" @.str.1754 = private unnamed_addr constant [5 x i8] c"i32 \00" @.str.1755 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1756 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.1757 = private unnamed_addr constant [5 x i8] c"i32 \00" @.str.1758 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1759 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1760 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" @.str.1761 = private unnamed_addr constant [7 x i8] c", null\00" @.str.1762 = private unnamed_addr constant [9 x i8] c"ptr.null\00" @.str.1763 = private unnamed_addr constant [9 x i8] c"ptr.addr\00" @.str.1764 = private unnamed_addr constant [9 x i8] c"ptr.done\00" @.str.1765 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1766 = private unnamed_addr constant [1 x i8] c"\00" @.str.1767 = private unnamed_addr constant [7 x i8] c"0x%llx\00" @.str.1768 = private unnamed_addr constant [5 x i8] c"i64 \00" @.str.1769 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" @.str.1770 = private unnamed_addr constant [8 x i8] c" to i64\00" @.str.1771 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1772 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1773 = private unnamed_addr constant [1 x i8] c"\00" @.str.1774 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.1775 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.1776 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.1777 = private unnamed_addr constant [32 x i8] c"call void @finch_buf_print(ptr \00" @.str.1778 = private unnamed_addr constant [2 x i8] c")\00" @.str.1779 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_add(ptr \00" @.str.1780 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1781 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1782 = private unnamed_addr constant [2 x i8] c")\00" @.str.1783 = private unnamed_addr constant [2 x i8] c"0\00" @.str.1784 = private unnamed_addr constant [2 x i8] c"1\00" @.str.1785 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_int(ptr \00" @.str.1786 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1787 = private unnamed_addr constant [4 x i8] c"int\00" @.str.1788 = private unnamed_addr constant [2 x i8] c")\00" @.str.1789 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_uint(ptr \00" @.str.1790 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1791 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.1792 = private unnamed_addr constant [2 x i8] c")\00" @.str.1793 = private unnamed_addr constant [32 x i8] c"call void @finch_buf_float(ptr \00" @.str.1794 = private unnamed_addr constant [10 x i8] c", double \00" @.str.1795 = private unnamed_addr constant [6 x i8] c"float\00" @.str.1796 = private unnamed_addr constant [2 x i8] c")\00" @.str.1797 = private unnamed_addr constant [5 x i8] c"char\00" @.str.1798 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_char(ptr \00" @.str.1799 = private unnamed_addr constant [6 x i8] c", i8 \00" @.str.1800 = private unnamed_addr constant [7 x i8] c", i32 \00" @.str.1801 = private unnamed_addr constant [2 x i8] c")\00" @.str.1802 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.1803 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_bool(ptr \00" @.str.1804 = private unnamed_addr constant [7 x i8] c", i32 \00" @.str.1805 = private unnamed_addr constant [9 x i8] c"zext i1 \00" @.str.1806 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.1807 = private unnamed_addr constant [2 x i8] c")\00" @.str.1808 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1809 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_str(ptr \00" @.str.1810 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1811 = private unnamed_addr constant [7 x i8] c", i32 \00" @.str.1812 = private unnamed_addr constant [2 x i8] c")\00" @.str.1813 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1814 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1815 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_ptr(ptr \00" @.str.1816 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1817 = private unnamed_addr constant [2 x i8] c")\00" @.str.1818 = private unnamed_addr constant [11 x i8] c"call void \00" @.str.1819 = private unnamed_addr constant [6 x i8] c"(ptr \00" @.str.1820 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1821 = private unnamed_addr constant [2 x i8] c")\00" @.str.1822 = private unnamed_addr constant [15 x i8] c"@finch.format.\00" @.str.1823 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1824 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" @.str.1825 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1826 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" @.str.1827 = private unnamed_addr constant [6 x i8] c"array\00" @.str.1828 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1829 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1830 = private unnamed_addr constant [3 x i8] c"%a\00" @.str.1831 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1832 = private unnamed_addr constant [63 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1\00" @.str.1833 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1834 = private unnamed_addr constant [2 x i8] c"[\00" @.str.1835 = private unnamed_addr constant [4 x i8] c"sep\00" @.str.1836 = private unnamed_addr constant [5 x i8] c"item\00" @.str.1837 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00" @.str.1838 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1839 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.1840 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1841 = private unnamed_addr constant [3 x i8] c", \00" @.str.1842 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1843 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1844 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1845 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1846 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1847 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1848 = private unnamed_addr constant [2 x i8] c"]\00" @.str.1849 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.1850 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1851 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.1852 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1853 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.1854 = private unnamed_addr constant [3 x i8] c"%a\00" @.str.1855 = private unnamed_addr constant [11 x i8] c"enum.other\00" @.str.1856 = private unnamed_addr constant [10 x i8] c"enum.done\00" @.str.1857 = private unnamed_addr constant [7 x i8] c"enum.v\00" @.str.1858 = private unnamed_addr constant [5 x i8] c"i32 \00" @.str.1859 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1860 = private unnamed_addr constant [10 x i8] c", label %\00" @.str.1861 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1862 = private unnamed_addr constant [12 x i8] c"switch i32 \00" @.str.1863 = private unnamed_addr constant [10 x i8] c", label %\00" @.str.1864 = private unnamed_addr constant [4 x i8] c" [ \00" @.str.1865 = private unnamed_addr constant [2 x i8] c" \00" @.str.1866 = private unnamed_addr constant [3 x i8] c" ]\00" @.str.1867 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1868 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1869 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1870 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1871 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1872 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1873 = private unnamed_addr constant [2 x i8] c"(\00" @.str.1874 = private unnamed_addr constant [40 x i8] c"call void @finch_buf_int(ptr %buf, i64 \00" @.str.1875 = private unnamed_addr constant [10 x i8] c"sext i32 \00" @.str.1876 = private unnamed_addr constant [8 x i8] c" to i64\00" @.str.1877 = private unnamed_addr constant [2 x i8] c")\00" @.str.1878 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1879 = private unnamed_addr constant [2 x i8] c")\00" @.str.1880 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1881 = private unnamed_addr constant [3 x i8] c"i1\00" @.str.1882 = private unnamed_addr constant [3 x i8] c"i1\00" @.str.1883 = private unnamed_addr constant [5 x i8] c"true\00" @.str.1884 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1885 = private unnamed_addr constant [2 x i8] c"{\00" @.str.1886 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1887 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1888 = private unnamed_addr constant [23 x i8] c", ptr %a, i32 0, i32 2\00" @.str.1889 = private unnamed_addr constant [3 x i8] c"%a\00" @.str.1890 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1891 = private unnamed_addr constant [11 x i8] c"entry.live\00" @.str.1892 = private unnamed_addr constant [11 x i8] c"entry.next\00" @.str.1893 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" @.str.1894 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1895 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.1896 = private unnamed_addr constant [4 x i8] c"sep\00" @.str.1897 = private unnamed_addr constant [5 x i8] c"item\00" @.str.1898 = private unnamed_addr constant [3 x i8] c"i1\00" @.str.1899 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1900 = private unnamed_addr constant [3 x i8] c", \00" @.str.1901 = private unnamed_addr constant [3 x i8] c"i1\00" @.str.1902 = private unnamed_addr constant [6 x i8] c"false\00" @.str.1903 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1904 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1905 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1906 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1907 = private unnamed_addr constant [3 x i8] c": \00" @.str.1908 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1909 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1910 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1911 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1912 = private unnamed_addr constant [2 x i8] c"}\00" @.str.1913 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.1914 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1915 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" @.str.1916 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1917 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1918 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.1919 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1920 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1921 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1922 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00" @.str.1923 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1924 = private unnamed_addr constant [10 x i8] c"sum.other\00" @.str.1925 = private unnamed_addr constant [9 x i8] c"sum.done\00" @.str.1926 = private unnamed_addr constant [6 x i8] c"sum.v\00" @.str.1927 = private unnamed_addr constant [5 x i8] c"i64 \00" @.str.1928 = private unnamed_addr constant [10 x i8] c", label %\00" @.str.1929 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1930 = private unnamed_addr constant [12 x i8] c"switch i64 \00" @.str.1931 = private unnamed_addr constant [10 x i8] c", label %\00" @.str.1932 = private unnamed_addr constant [4 x i8] c" [ \00" @.str.1933 = private unnamed_addr constant [2 x i8] c" \00" @.str.1934 = private unnamed_addr constant [3 x i8] c" ]\00" @.str.1935 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1936 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1937 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1938 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1939 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1940 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1941 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1942 = private unnamed_addr constant [2 x i8] c"(\00" @.str.1943 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1944 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1945 = private unnamed_addr constant [3 x i8] c", \00" @.str.1946 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1947 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1948 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00" @.str.1949 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1950 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1951 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1952 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1953 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1954 = private unnamed_addr constant [2 x i8] c")\00" @.str.1955 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1956 = private unnamed_addr constant [4 x i8] c"(?)\00" @.str.1957 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1958 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.1959 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1960 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1961 = private unnamed_addr constant [2 x i8] c"(\00" @.str.1962 = private unnamed_addr constant [3 x i8] c", \00" @.str.1963 = private unnamed_addr constant [1 x i8] c"\00" @.str.1964 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1965 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1966 = private unnamed_addr constant [3 x i8] c": \00" @.str.1967 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1968 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00" @.str.1969 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1970 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1971 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1972 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1973 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1974 = private unnamed_addr constant [2 x i8] c")\00" @.str.1975 = private unnamed_addr constant [9 x i8] c"ret void\00" @.str.1976 = private unnamed_addr constant [22 x i8] c"define internal void \00" @.str.1977 = private unnamed_addr constant [19 x i8] c"(ptr %buf, ptr %a)\00" @.str.1978 = private unnamed_addr constant [7 x i8] c"trunc \00" @.str.1979 = private unnamed_addr constant [2 x i8] c" \00" @.str.1980 = private unnamed_addr constant [5 x i8] c" to \00" @.str.1981 = private unnamed_addr constant [6 x i8] c"sext \00" @.str.1982 = private unnamed_addr constant [2 x i8] c" \00" @.str.1983 = private unnamed_addr constant [5 x i8] c" to \00" @.str.1984 = private unnamed_addr constant [6 x i8] c"zext \00" @.str.1985 = private unnamed_addr constant [2 x i8] c" \00" @.str.1986 = private unnamed_addr constant [5 x i8] c" to \00" @.str.1987 = private unnamed_addr constant [7 x i8] c"fpext \00" @.str.1988 = private unnamed_addr constant [2 x i8] c" \00" @.str.1989 = private unnamed_addr constant [5 x i8] c" to \00" @.str.1990 = private unnamed_addr constant [9 x i8] c"fptrunc \00" @.str.1991 = private unnamed_addr constant [2 x i8] c" \00" @.str.1992 = private unnamed_addr constant [5 x i8] c" to \00" @.str.1993 = private unnamed_addr constant [8 x i8] c"sitofp \00" @.str.1994 = private unnamed_addr constant [2 x i8] c" \00" @.str.1995 = private unnamed_addr constant [5 x i8] c" to \00" @.str.1996 = private unnamed_addr constant [8 x i8] c"uitofp \00" @.str.1997 = private unnamed_addr constant [2 x i8] c" \00" @.str.1998 = private unnamed_addr constant [5 x i8] c" to \00" @.str.1999 = private unnamed_addr constant [5 x i8] c"null\00" @.str.2000 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.2001 = private unnamed_addr constant [5 x i8] c"null\00" @.str.2002 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.2003 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.2004 = private unnamed_addr constant [12 x i8] c"the number \00" @.str.2005 = private unnamed_addr constant [17 x i8] c" doesn't fit in \00" @.str.2006 = private unnamed_addr constant [6 x i8] c"float\00" @.str.2007 = private unnamed_addr constant [3 x i8] c".0\00" @.str.2008 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.2009 = private unnamed_addr constant [6 x i8] c"float\00" @.str.2010 = private unnamed_addr constant [6 x i8] c"float\00" @.str.2011 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.2012 = private unnamed_addr constant [10 x i8] c" must be \00" @.str.2013 = private unnamed_addr constant [15 x i8] c", but this is \00" @.str.2014 = private unnamed_addr constant [7 x i8] c" (use \00" @.str.2015 = private unnamed_addr constant [17 x i8] c"(...) to convert\00" @.str.2016 = private unnamed_addr constant [27 x i8] c", it cuts off the fraction\00" @.str.2017 = private unnamed_addr constant [2 x i8] c")\00" @.str.2018 = private unnamed_addr constant [4 x i8] c"str\00" @.str.2019 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.2020 = private unnamed_addr constant [5 x i8] c"char\00" @.str.2021 = private unnamed_addr constant [35 x i8] c" (turn it into text with str(...))\00" @.str.2022 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2023 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2024 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2025 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2026 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2027 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2028 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2029 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2030 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2031 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2032 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2033 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2034 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" @.str.2035 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2036 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2037 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2038 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2039 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2040 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" @.str.2041 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2042 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2043 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2044 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2045 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2046 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2047 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2048 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2049 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2050 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2051 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2052 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2053 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2054 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2055 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2056 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2057 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2058 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2059 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2060 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2061 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2062 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2064 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2065 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2066 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2067 = private unnamed_addr constant [6 x i8] c"print\00" @.str.2068 = private unnamed_addr constant [5 x i8] c"addr\00" @.str.2069 = private unnamed_addr constant [4 x i8] c"str\00" @.str.2070 = private unnamed_addr constant [4 x i8] c"int\00" @.str.2071 = private unnamed_addr constant [5 x i8] c"char\00" @.str.2072 = private unnamed_addr constant [6 x i8] c"float\00" @.str.2073 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.2074 = private unnamed_addr constant [10 x i8] c"read_file\00" @.str.2075 = private unnamed_addr constant [11 x i8] c"write_file\00" @.str.2076 = private unnamed_addr constant [12 x i8] c"file_exists\00" @.str.2077 = private unnamed_addr constant [6 x i8] c"shell\00" @.str.2078 = private unnamed_addr constant [5 x i8] c"exit\00" @.str.2079 = private unnamed_addr constant [6 x i8] c"input\00" @.str.2080 = private unnamed_addr constant [4 x i8] c"new\00" @.str.2081 = private unnamed_addr constant [5 x i8] c"free\00" @.str.2082 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.2083 = private unnamed_addr constant [12 x i8] c"delete_file\00" @.str.2084 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.2085 = private unnamed_addr constant [4 x i8] c"i16\00" @.str.2086 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.2087 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.2088 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.2089 = private unnamed_addr constant [4 x i8] c"u16\00" @.str.2090 = private unnamed_addr constant [4 x i8] c"u32\00" @.str.2091 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.2092 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.2093 = private unnamed_addr constant [4 x i8] c"f64\00" @.str.2094 = private unnamed_addr constant [6 x i8] c"error\00" @.str.2095 = private unnamed_addr constant [4 x i8] c"err\00" @.str.2096 = private unnamed_addr constant [19 x i8] c"a variable named '\00" @.str.2097 = private unnamed_addr constant [22 x i8] c"' already exists here\00" @.str.2098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2099 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2100 = private unnamed_addr constant [2 x i8] c"'\00" @.str.2101 = private unnamed_addr constant [36 x i8] c"' is already the name of a function\00" @.str.2102 = private unnamed_addr constant [2 x i8] c"'\00" @.str.2103 = private unnamed_addr constant [39 x i8] c"' is a built-in name, pick another one\00" @.str.2104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2105 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2107 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2109 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2110 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2111 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2112 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2113 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2114 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2115 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2116 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" @.str.2117 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2118 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.2119 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2120 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2121 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" @.str.2122 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2123 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.2124 = private unnamed_addr constant [4 x i8] c"err\00" @.str.2125 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2126 = private unnamed_addr constant [2 x i8] c"$\00" @.str.2127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2128 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2129 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2130 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2131 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2133 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2134 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2136 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.2137 = private unnamed_addr constant [4 x i8] c"@V\09\00" @.str.2138 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.2139 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.2140 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2141 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.2142 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2143 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.2144 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.2145 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.2146 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2147 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.2148 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2149 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.2150 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.2151 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" @.str.2152 = private unnamed_addr constant [2 x i8] c" \00" @.str.2153 = private unnamed_addr constant [5 x i8] c"\0A```\00" @.str.2154 = private unnamed_addr constant [1 x i8] c"\00" @.str.2155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2156 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2157 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2158 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.2159 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2160 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2161 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2162 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2164 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.2165 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2166 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2167 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2168 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2169 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2170 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2171 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2172 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2173 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2174 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2175 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2177 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" @.str.2178 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2179 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" @.str.2180 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2181 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" @.str.2182 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2183 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2185 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2186 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2187 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" @.str.2188 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2189 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" @.str.2190 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2191 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2192 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2193 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2195 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" @.str.2196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2197 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" @.str.2198 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2199 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" @.str.2200 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2201 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2202 = private unnamed_addr constant [4 x i8] c"var\00" @.str.2203 = private unnamed_addr constant [7 x i8] c"member\00" @.str.2204 = private unnamed_addr constant [6 x i8] c"index\00" @.str.2205 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2206 = private unnamed_addr constant [1 x i8] c"\00" @.str.2207 = private unnamed_addr constant [5 x i8] c"push\00" @.str.2208 = private unnamed_addr constant [4 x i8] c"pop\00" @.str.2209 = private unnamed_addr constant [7 x i8] c"insert\00" @.str.2210 = private unnamed_addr constant [7 x i8] c"remove\00" @.str.2211 = private unnamed_addr constant [6 x i8] c"clear\00" @.str.2212 = private unnamed_addr constant [7 x i8] c"resize\00" @.str.2213 = private unnamed_addr constant [5 x i8] c"sort\00" @.str.2214 = private unnamed_addr constant [8 x i8] c"reverse\00" @.str.2215 = private unnamed_addr constant [7 x i8] c"assign\00" @.str.2216 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2217 = private unnamed_addr constant [7 x i8] c"method\00" @.str.2218 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2219 = private unnamed_addr constant [27 x i8] c"used .mm on a null pointer\00" @.str.2220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2221 = private unnamed_addr constant [5 x i8] c"call\00" @.str.2222 = private unnamed_addr constant [5 x i8] c"addr\00" @.str.2223 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2224 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2225 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2226 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2227 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2228 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2229 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2230 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2231 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2232 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2233 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2234 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2235 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2236 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2237 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2238 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2239 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2240 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2241 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2242 = private unnamed_addr constant [1 x i8] c"\00" @.str.2243 = private unnamed_addr constant [13 x i8] c"the struct '\00" @.str.2244 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" @.str.2245 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2246 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2247 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2248 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2249 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2250 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2251 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2252 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2253 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2254 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2255 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2256 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2257 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2258 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2259 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2260 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2261 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2262 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2263 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2264 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2265 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2266 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2267 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2268 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2269 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2270 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2271 = private unnamed_addr constant [2 x i8] c"'\00" @.str.2272 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" @.str.2273 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2274 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2275 = private unnamed_addr constant [10 x i8] c"the enum \00" @.str.2276 = private unnamed_addr constant [18 x i8] c" has the variant \00" @.str.2277 = private unnamed_addr constant [7 x i8] c" twice\00" @.str.2278 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2279 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" @.str.2280 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2281 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2282 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2283 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2284 = private unnamed_addr constant [2 x i8] c"'\00" @.str.2285 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" @.str.2286 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2287 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2288 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2289 = private unnamed_addr constant [10 x i8] c"the enum \00" @.str.2290 = private unnamed_addr constant [18 x i8] c" has the variant \00" @.str.2291 = private unnamed_addr constant [7 x i8] c" twice\00" @.str.2292 = private unnamed_addr constant [17 x i8] c"two variants of \00" @.str.2293 = private unnamed_addr constant [18 x i8] c" have the number \00" @.str.2294 = private unnamed_addr constant [21 x i8] c" (give each its own)\00" @.str.2295 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2296 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.2297 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2298 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.2299 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2300 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2301 = private unnamed_addr constant [2 x i8] c"C\00" @.str.2302 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2303 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.2304 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2305 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2306 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2307 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2308 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2309 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2310 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2311 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2313 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2314 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2315 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2316 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2317 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2318 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2319 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2320 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2321 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2322 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2323 = private unnamed_addr constant [11 x i8] c"function '\00" @.str.2324 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" @.str.2325 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2326 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2327 = private unnamed_addr constant [1 x i8] c"\00" @.str.2328 = private unnamed_addr constant [35 x i8] c"there is no generic struct named '\00" @.str.2329 = private unnamed_addr constant [54 x i8] c"' here (a method goes in the same file as its struct)\00" @.str.2330 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2331 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2332 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2333 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2334 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2335 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2336 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2337 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2338 = private unnamed_addr constant [12 x i8] c"the method \00" @.str.2339 = private unnamed_addr constant [2 x i8] c".\00" @.str.2340 = private unnamed_addr constant [18 x i8] c" is defined twice\00" @.str.2341 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2342 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2343 = private unnamed_addr constant [2 x i8] c"C\00" @.str.2344 = private unnamed_addr constant [2 x i8] c"C\00" @.str.2345 = private unnamed_addr constant [2 x i8] c"C\00" @.str.2346 = private unnamed_addr constant [27 x i8] c"there is no struct named '\00" @.str.2347 = private unnamed_addr constant [77 x i8] c"' here (a method goes in the same file as its struct, or on a struct from C)\00" @.str.2348 = private unnamed_addr constant [12 x i8] c"the method \00" @.str.2349 = private unnamed_addr constant [2 x i8] c".\00" @.str.2350 = private unnamed_addr constant [18 x i8] c" is defined twice\00" @.str.2351 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2352 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2353 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2354 = private unnamed_addr constant [12 x i8] c"the struct \00" @.str.2355 = private unnamed_addr constant [29 x i8] c" already has a field named '\00" @.str.2356 = private unnamed_addr constant [2 x i8] c"'\00" @.str.2357 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2358 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2359 = private unnamed_addr constant [11 x i8] c"function '\00" @.str.2360 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" @.str.2361 = private unnamed_addr constant [2 x i8] c"'\00" @.str.2362 = private unnamed_addr constant [44 x i8] c"' is a built-in function, pick another name\00" @.str.2363 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2364 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2365 = private unnamed_addr constant [8 x i8] c"@finch.\00" @.str.2366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2367 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2368 = private unnamed_addr constant [2 x i8] c".\00" @.str.2369 = private unnamed_addr constant [8 x i8] c"@finch.\00" @.str.2370 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2371 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2372 = private unnamed_addr constant [2 x i8] c".\00" @.str.2373 = private unnamed_addr constant [2 x i8] c".\00" @.str.2374 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2375 = private unnamed_addr constant [5 x i8] c"self\00" @.str.2376 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2377 = private unnamed_addr constant [23 x i8] c"'self' is already the \00" @.str.2378 = private unnamed_addr constant [25 x i8] c" the method is called on\00" @.str.2379 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2380 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2381 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2382 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2383 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2384 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2385 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2386 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2387 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2389 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2390 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2391 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2392 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2393 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2394 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2395 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2396 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2397 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2398 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2399 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2400 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2401 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2402 = private unnamed_addr constant [5 x i8] c"self\00" @.str.2403 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2404 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2405 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2406 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2407 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2408 = private unnamed_addr constant [27 x i8] c"used .mm on a null pointer\00" @.str.2409 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2410 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2411 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2412 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2413 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2414 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2415 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2416 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2417 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2418 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2419 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2420 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2421 = private unnamed_addr constant [5 x i8] c"self\00" @.str.2422 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2424 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2425 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2426 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2427 = private unnamed_addr constant [27 x i8] c"used .mm on a null pointer\00" @.str.2428 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2429 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2430 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2431 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2432 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2433 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2434 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2435 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2436 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2437 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2438 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2439 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2440 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2441 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2442 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2443 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2444 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2445 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2446 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2447 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2449 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2450 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2451 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2452 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2453 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2454 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2455 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2456 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2457 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2458 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2459 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2460 = private unnamed_addr constant [3 x i8] c", \00" @.str.2461 = private unnamed_addr constant [1 x i8] c"\00" @.str.2462 = private unnamed_addr constant [35 x i8] c"there is no generic struct named '\00" @.str.2463 = private unnamed_addr constant [29 x i8] c"' (a struct written struct \00" @.str.2464 = private unnamed_addr constant [35 x i8] c"[T] { ... } takes type arguments)\00" @.str.2465 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2466 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2467 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2468 = private unnamed_addr constant [8 x i8] c" takes \00" @.str.2469 = private unnamed_addr constant [25 x i8] c" type argument(s), like \00" @.str.2470 = private unnamed_addr constant [2 x i8] c"[\00" @.str.2471 = private unnamed_addr constant [3 x i8] c", \00" @.str.2472 = private unnamed_addr constant [12 x i8] c"], but got \00" @.str.2473 = private unnamed_addr constant [2 x i8] c"[\00" @.str.2474 = private unnamed_addr constant [2 x i8] c"]\00" @.str.2475 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2476 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2477 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2478 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2479 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.2480 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2481 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2482 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2483 = private unnamed_addr constant [2 x i8] c"[\00" @.str.2484 = private unnamed_addr constant [2 x i8] c"]\00" @.str.2485 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2486 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2487 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2488 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2489 = private unnamed_addr constant [8 x i8] c"@finch.\00" @.str.2490 = private unnamed_addr constant [2 x i8] c".\00" @.str.2491 = private unnamed_addr constant [2 x i8] c".\00" @.str.2492 = private unnamed_addr constant [8 x i8] c"@finch.\00" @.str.2493 = private unnamed_addr constant [2 x i8] c".\00" @.str.2494 = private unnamed_addr constant [2 x i8] c".\00" @.str.2495 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2496 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.2497 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2498 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.2499 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2500 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2502 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.2503 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2504 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.2505 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2506 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.2507 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2508 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2509 = private unnamed_addr constant [18 x i8] c" (while building \00" @.str.2510 = private unnamed_addr constant [2 x i8] c")\00" @.str.2511 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2512 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.2513 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2514 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2515 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2517 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2519 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.2520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2521 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.2522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2523 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2524 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2525 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.2526 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2527 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2528 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2529 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2530 = private unnamed_addr constant [6 x i8] c"named\00" @.str.2531 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2532 = private unnamed_addr constant [30 x i8] c"used .bound on a null pointer\00" @.str.2533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2534 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2535 = private unnamed_addr constant [30 x i8] c"used .types on a null pointer\00" @.str.2536 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2537 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2538 = private unnamed_addr constant [30 x i8] c"used .bound on a null pointer\00" @.str.2539 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2540 = private unnamed_addr constant [6 x i8] c"array\00" @.str.2541 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.2542 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.2543 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2544 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2545 = private unnamed_addr constant [4 x i8] c"map\00" @.str.2546 = private unnamed_addr constant [4 x i8] c"map\00" @.str.2547 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2548 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2549 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2550 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2551 = private unnamed_addr constant [6 x i8] c"named\00" @.str.2552 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.2553 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2554 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2555 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2556 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2558 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2559 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2560 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2561 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2562 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2563 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2564 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2565 = private unnamed_addr constant [8 x i8] c" takes \00" @.str.2566 = private unnamed_addr constant [28 x i8] c" type argument(s), but got \00" @.str.2567 = private unnamed_addr constant [5 x i8] c"void\00" @.str.2568 = private unnamed_addr constant [1 x i8] c"\00" @.str.2569 = private unnamed_addr constant [1 x i8] c"\00" @.str.2570 = private unnamed_addr constant [5 x i8] c"void\00" @.str.2571 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2572 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.2573 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2574 = private unnamed_addr constant [5 x i8] c"void\00" @.str.2575 = private unnamed_addr constant [5 x i8] c"null\00" @.str.2576 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2577 = private unnamed_addr constant [30 x i8] c"this has no type to work out \00" @.str.2578 = private unnamed_addr constant [3 x i8] c", \00" @.str.2579 = private unnamed_addr constant [6 x i8] c" from\00" @.str.2580 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2581 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2582 = private unnamed_addr constant [17 x i8] c"can't tell what \00" @.str.2583 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2584 = private unnamed_addr constant [25 x i8] c" is here; write it out: \00" @.str.2585 = private unnamed_addr constant [11 x i8] c"[int](...)\00" @.str.2586 = private unnamed_addr constant [5 x i8] c"void\00" @.str.2587 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2588 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2589 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2590 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2591 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2592 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2593 = private unnamed_addr constant [11 x i8] c"argument '\00" @.str.2594 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2595 = private unnamed_addr constant [2 x i8] c"'\00" @.str.2596 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2597 = private unnamed_addr constant [2 x i8] c" \00" @.str.2598 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2599 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.2600 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2601 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2602 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2603 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2604 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2605 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2606 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2607 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.2608 = private unnamed_addr constant [2 x i8] c"[\00" @.str.2609 = private unnamed_addr constant [7 x i8] c" x i8]\00" @.str.2610 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2611 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2612 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2613 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2614 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2615 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2616 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2617 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2618 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2619 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2620 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2621 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2622 = private unnamed_addr constant [2 x i8] c"[\00" @.str.2623 = private unnamed_addr constant [7 x i8] c" x i8]\00" @.str.2624 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2625 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2626 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2627 = private unnamed_addr constant [50 x i8] c"has fields Finch can't see (unions or bit fields)\00" @.str.2628 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2629 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2630 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2631 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2632 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2633 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2634 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2635 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2636 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2637 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2638 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2639 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2640 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2641 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" @.str.2642 = private unnamed_addr constant [6 x i8] c"%S.C.\00" @.str.2643 = private unnamed_addr constant [11 x i8] c" = type { \00" @.str.2644 = private unnamed_addr constant [3 x i8] c", \00" @.str.2645 = private unnamed_addr constant [3 x i8] c" }\00" @.str.2646 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2647 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2648 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2649 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2650 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2651 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2652 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2653 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2654 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2655 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2656 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.2657 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2658 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.2659 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2660 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.2661 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2662 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2663 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2664 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2665 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.2666 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2667 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2668 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2669 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2670 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.2671 = private unnamed_addr constant [18 x i8] c" (while building \00" @.str.2672 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2673 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2674 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2675 = private unnamed_addr constant [2 x i8] c")\00" @.str.2676 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2677 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.2678 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2679 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.2680 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2681 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.2682 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2683 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.2684 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2685 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2686 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2687 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2688 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2689 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2690 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2691 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2692 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2693 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2694 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2695 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2696 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2697 = private unnamed_addr constant [12 x i8] c"the struct \00" @.str.2698 = private unnamed_addr constant [27 x i8] c" contains itself; use ptr[\00" @.str.2699 = private unnamed_addr constant [8 x i8] c"] or []\00" @.str.2700 = private unnamed_addr constant [16 x i8] c" for that field\00" @.str.2701 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2702 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2703 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2704 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2705 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2706 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2707 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2708 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2709 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2710 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2711 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.2712 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2713 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2714 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2715 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2716 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2717 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2718 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2719 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2720 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2721 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2722 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2723 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2724 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2725 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2726 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2727 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2728 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2729 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2730 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2731 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2732 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2733 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" @.str.2734 = private unnamed_addr constant [4 x i8] c"%S.\00" @.str.2735 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2736 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2737 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2738 = private unnamed_addr constant [2 x i8] c".\00" @.str.2739 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2740 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2741 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2742 = private unnamed_addr constant [11 x i8] c" = type { \00" @.str.2743 = private unnamed_addr constant [3 x i8] c", \00" @.str.2744 = private unnamed_addr constant [3 x i8] c" }\00" @.str.2745 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2746 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2747 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2748 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2749 = private unnamed_addr constant [5 x i8] c"null\00" @.str.2750 = private unnamed_addr constant [2 x i8] c"!\00" @.str.2751 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2752 = private unnamed_addr constant [17 x i8] c"division by zero\00" @.str.2753 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.2754 = private unnamed_addr constant [5 x i8] c"char\00" @.str.2755 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.2756 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.2757 = private unnamed_addr constant [4 x i8] c"i16\00" @.str.2758 = private unnamed_addr constant [4 x i8] c"u16\00" @.str.2759 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.2760 = private unnamed_addr constant [4 x i8] c"u32\00" @.str.2761 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.2762 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.2763 = private unnamed_addr constant [4 x i8] c"str\00" @.str.2764 = private unnamed_addr constant [6 x i8] c"array\00" @.str.2765 = private unnamed_addr constant [4 x i8] c"map\00" @.str.2766 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.2767 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2768 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.2769 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2770 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2771 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2772 = private unnamed_addr constant [43 x i8] c"!DIDerivedType(tag: DW_TAG_member, name: \22\00" @.str.2773 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00" @.str.2774 = private unnamed_addr constant [10 x i8] c", file: !\00" @.str.2775 = private unnamed_addr constant [9 x i8] c", line: \00" @.str.2776 = private unnamed_addr constant [13 x i8] c", baseType: \00" @.str.2777 = private unnamed_addr constant [9 x i8] c", size: \00" @.str.2778 = private unnamed_addr constant [11 x i8] c", offset: \00" @.str.2779 = private unnamed_addr constant [2 x i8] c")\00" @.str.2780 = private unnamed_addr constant [21 x i8] c"!DIBasicType(name: \22\00" @.str.2781 = private unnamed_addr constant [10 x i8] c"\22, size: \00" @.str.2782 = private unnamed_addr constant [13 x i8] c", encoding: \00" @.str.2783 = private unnamed_addr constant [2 x i8] c")\00" @.str.2784 = private unnamed_addr constant [5 x i8] c"void\00" @.str.2785 = private unnamed_addr constant [5 x i8] c"null\00" @.str.2786 = private unnamed_addr constant [3 x i8] c"T:\00" @.str.2787 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2788 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" @.str.2789 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2790 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" @.str.2791 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2792 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2793 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" @.str.2794 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2795 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.2796 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.2797 = private unnamed_addr constant [15 x i8] c"DW_ATE_boolean\00" @.str.2798 = private unnamed_addr constant [5 x i8] c"char\00" @.str.2799 = private unnamed_addr constant [5 x i8] c"char\00" @.str.2800 = private unnamed_addr constant [19 x i8] c"DW_ATE_signed_char\00" @.str.2801 = private unnamed_addr constant [4 x i8] c"int\00" @.str.2802 = private unnamed_addr constant [4 x i8] c"int\00" @.str.2803 = private unnamed_addr constant [14 x i8] c"DW_ATE_signed\00" @.str.2804 = private unnamed_addr constant [6 x i8] c"float\00" @.str.2805 = private unnamed_addr constant [6 x i8] c"float\00" @.str.2806 = private unnamed_addr constant [13 x i8] c"DW_ATE_float\00" @.str.2807 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.2808 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.2809 = private unnamed_addr constant [13 x i8] c"DW_ATE_float\00" @.str.2810 = private unnamed_addr constant [16 x i8] c"DW_ATE_unsigned\00" @.str.2811 = private unnamed_addr constant [14 x i8] c"DW_ATE_signed\00" @.str.2812 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.2813 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2814 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.2815 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2816 = private unnamed_addr constant [22 x i8] c"!DIEnumerator(name: \22\00" @.str.2817 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2818 = private unnamed_addr constant [11 x i8] c"\22, value: \00" @.str.2819 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2820 = private unnamed_addr constant [2 x i8] c")\00" @.str.2821 = private unnamed_addr constant [55 x i8] c"!DICompositeType(tag: DW_TAG_enumeration_type, name: \22\00" @.str.2822 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" @.str.2823 = private unnamed_addr constant [25 x i8] c", size: 32, elements: !{\00" @.str.2824 = private unnamed_addr constant [3 x i8] c", \00" @.str.2825 = private unnamed_addr constant [3 x i8] c"})\00" @.str.2826 = private unnamed_addr constant [1 x i8] c"\00" @.str.2827 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2828 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" @.str.2829 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.2830 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2831 = private unnamed_addr constant [52 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: \00" @.str.2832 = private unnamed_addr constant [12 x i8] c", size: 64)\00" @.str.2833 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2834 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2835 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2836 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.2837 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2838 = private unnamed_addr constant [20 x i8] c"!DISubrange(count: \00" @.str.2839 = private unnamed_addr constant [2 x i8] c")\00" @.str.2840 = private unnamed_addr constant [52 x i8] c"!DICompositeType(tag: DW_TAG_array_type, baseType: \00" @.str.2841 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2842 = private unnamed_addr constant [9 x i8] c", size: \00" @.str.2843 = private unnamed_addr constant [16 x i8] c", elements: !{!\00" @.str.2844 = private unnamed_addr constant [3 x i8] c"})\00" @.str.2845 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2846 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2847 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2848 = private unnamed_addr constant [4 x i8] c"str\00" @.str.2849 = private unnamed_addr constant [6 x i8] c"array\00" @.str.2850 = private unnamed_addr constant [5 x i8] c"char\00" @.str.2851 = private unnamed_addr constant [6 x i8] c"array\00" @.str.2852 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2853 = private unnamed_addr constant [52 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: \00" @.str.2854 = private unnamed_addr constant [12 x i8] c", size: 64)\00" @.str.2855 = private unnamed_addr constant [4 x i8] c"int\00" @.str.2856 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.2857 = private unnamed_addr constant [4 x i8] c"len\00" @.str.2858 = private unnamed_addr constant [4 x i8] c"cap\00" @.str.2859 = private unnamed_addr constant [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00" @.str.2860 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" @.str.2861 = private unnamed_addr constant [38 x i8] c", size: 192, align: 64, elements: !{!\00" @.str.2862 = private unnamed_addr constant [4 x i8] c", !\00" @.str.2863 = private unnamed_addr constant [4 x i8] c", !\00" @.str.2864 = private unnamed_addr constant [3 x i8] c"})\00" @.str.2865 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2866 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2867 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2868 = private unnamed_addr constant [4 x i8] c"map\00" @.str.2869 = private unnamed_addr constant [4 x i8] c"int\00" @.str.2870 = private unnamed_addr constant [67 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64)\00" @.str.2871 = private unnamed_addr constant [8 x i8] c"entries\00" @.str.2872 = private unnamed_addr constant [4 x i8] c"len\00" @.str.2873 = private unnamed_addr constant [5 x i8] c"used\00" @.str.2874 = private unnamed_addr constant [4 x i8] c"cap\00" @.str.2875 = private unnamed_addr constant [6 x i8] c"index\00" @.str.2876 = private unnamed_addr constant [5 x i8] c"icap\00" @.str.2877 = private unnamed_addr constant [5 x i8] c"adds\00" @.str.2878 = private unnamed_addr constant [2 x i8] c"!\00" @.str.2879 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2880 = private unnamed_addr constant [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00" @.str.2881 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" @.str.2882 = private unnamed_addr constant [37 x i8] c", size: 448, align: 64, elements: !{\00" @.str.2883 = private unnamed_addr constant [3 x i8] c", \00" @.str.2884 = private unnamed_addr constant [3 x i8] c"})\00" @.str.2885 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2886 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2887 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2888 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.2889 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2890 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2891 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2892 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2893 = private unnamed_addr constant [2 x i8] c"!\00" @.str.2894 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2895 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2896 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2897 = private unnamed_addr constant [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00" @.str.2898 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" @.str.2899 = private unnamed_addr constant [9 x i8] c", size: \00" @.str.2900 = private unnamed_addr constant [25 x i8] c", align: 8, elements: !{\00" @.str.2901 = private unnamed_addr constant [3 x i8] c", \00" @.str.2902 = private unnamed_addr constant [3 x i8] c"})\00" @.str.2903 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2904 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2905 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2906 = private unnamed_addr constant [21 x i8] c"!DIBasicType(name: \22\00" @.str.2907 = private unnamed_addr constant [40 x i8] c"\22, size: 64, encoding: DW_ATE_unsigned)\00" @.str.2908 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2909 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2910 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2911 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2912 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" @.str.2913 = private unnamed_addr constant [3 x i8] c"L:\00" @.str.2914 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2915 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" @.str.2916 = private unnamed_addr constant [2 x i8] c":\00" @.str.2917 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2918 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" @.str.2919 = private unnamed_addr constant [2 x i8] c":\00" @.str.2920 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2921 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.2922 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2923 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" @.str.2924 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2925 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" @.str.2926 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2927 = private unnamed_addr constant [19 x i8] c"!DILocation(line: \00" @.str.2928 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2929 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" @.str.2930 = private unnamed_addr constant [11 x i8] c", column: \00" @.str.2931 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2932 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" @.str.2933 = private unnamed_addr constant [11 x i8] c", scope: !\00" @.str.2934 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2935 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.2936 = private unnamed_addr constant [2 x i8] c")\00" @.str.2937 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2938 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" @.str.2939 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2940 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2941 = private unnamed_addr constant [5 x i8] c"null\00" @.str.2942 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2943 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" @.str.2944 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2945 = private unnamed_addr constant [28 x i8] c"!DISubroutineType(types: !{\00" @.str.2946 = private unnamed_addr constant [3 x i8] c", \00" @.str.2947 = private unnamed_addr constant [3 x i8] c"})\00" @.str.2948 = private unnamed_addr constant [31 x i8] c"distinct !DISubprogram(name: \22\00" @.str.2949 = private unnamed_addr constant [18 x i8] c"\22, linkageName: \22\00" @.str.2950 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2951 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00" @.str.2952 = private unnamed_addr constant [10 x i8] c", file: !\00" @.str.2953 = private unnamed_addr constant [9 x i8] c", line: \00" @.str.2954 = private unnamed_addr constant [10 x i8] c", type: !\00" @.str.2955 = private unnamed_addr constant [14 x i8] c", scopeLine: \00" @.str.2956 = private unnamed_addr constant [88 x i8] c", flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagLocalToUnit, unit: !0)\00" @.str.2957 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2958 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" @.str.2959 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2960 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.2961 = private unnamed_addr constant [1 x i8] c"\00" @.str.2962 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2963 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" @.str.2964 = private unnamed_addr constant [8 x i8] c", arg: \00" @.str.2965 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2966 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" @.str.2967 = private unnamed_addr constant [25 x i8] c"!DILocalVariable(name: \22\00" @.str.2968 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00" @.str.2969 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2970 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.2971 = private unnamed_addr constant [10 x i8] c", file: !\00" @.str.2972 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2973 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" @.str.2974 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2975 = private unnamed_addr constant [9 x i8] c", line: \00" @.str.2976 = private unnamed_addr constant [10 x i8] c", type: !\00" @.str.2977 = private unnamed_addr constant [2 x i8] c")\00" @.str.2978 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2979 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" @.str.2980 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2981 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" @.str.2982 = private unnamed_addr constant [42 x i8] c"call void @llvm.dbg.declare(metadata ptr \00" @.str.2983 = private unnamed_addr constant [13 x i8] c", metadata !\00" @.str.2984 = private unnamed_addr constant [28 x i8] c", metadata !DIExpression())\00" @.str.2985 = private unnamed_addr constant [21 x i8] c"!llvm.dbg.cu = !{!0}\00" @.str.2986 = private unnamed_addr constant [31 x i8] c"!llvm.module.flags = !{!1, !2}\00" @.str.2987 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2988 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2989 = private unnamed_addr constant [2 x i8] c"!\00" @.str.2990 = private unnamed_addr constant [4 x i8] c" = \00" @.str.2991 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2992 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2993 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2994 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.2995 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.2996 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2997 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2998 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2999 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3000 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3001 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3002 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3003 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3004 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.3005 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3006 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3007 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3008 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.3009 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3010 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3011 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3012 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.3013 = private unnamed_addr constant [1 x i8] c"\00" @.str.3014 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3015 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.3016 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3017 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3018 = private unnamed_addr constant [18 x i8] c" (while building \00" @.str.3019 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3020 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3021 = private unnamed_addr constant [2 x i8] c")\00" @.str.3022 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3023 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.3024 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3025 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.3026 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3027 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3028 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3029 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3030 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3031 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3032 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3033 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.3034 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3035 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" @.str.3036 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3037 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" @.str.3038 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3039 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3040 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3041 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" @.str.3042 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3043 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.3044 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3045 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" @.str.3046 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3047 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.3048 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3049 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" @.str.3050 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3051 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" @.str.3052 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3053 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" @.str.3054 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3055 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" @.str.3056 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3057 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3058 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3059 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3060 = private unnamed_addr constant [10 x i8] c"ptr %self\00" @.str.3061 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.3062 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3063 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3064 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.3065 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3066 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3067 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3068 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3069 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3070 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3071 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3072 = private unnamed_addr constant [5 x i8] c"self\00" @.str.3073 = private unnamed_addr constant [6 x i8] c"%self\00" @.str.3074 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3075 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" @.str.3076 = private unnamed_addr constant [5 x i8] c"self\00" @.str.3077 = private unnamed_addr constant [6 x i8] c"%self\00" @.str.3078 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3079 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3080 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3081 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3082 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3083 = private unnamed_addr constant [4 x i8] c" %p\00" @.str.3084 = private unnamed_addr constant [3 x i8] c"%p\00" @.str.3085 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3086 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3087 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3088 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3089 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" @.str.3090 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3091 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3092 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3093 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" @.str.3094 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3095 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3096 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3097 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3099 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3100 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3101 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3102 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" @.str.3103 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3105 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3107 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3108 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3109 = private unnamed_addr constant [11 x i8] c"function '\00" @.str.3110 = private unnamed_addr constant [39 x i8] c"' can reach its end without returning \00" @.str.3111 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3112 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3113 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3114 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3115 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.3116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3117 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3118 = private unnamed_addr constant [54 x i8] c" { i1 true, i8 0, { ptr, i64, i64 } zeroinitializer }\00" @.str.3119 = private unnamed_addr constant [9 x i8] c"ret void\00" @.str.3120 = private unnamed_addr constant [1 x i8] c"\00" @.str.3121 = private unnamed_addr constant [8 x i8] c" !dbg !\00" @.str.3122 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3123 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.3124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3125 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.3126 = private unnamed_addr constant [17 x i8] c"define internal \00" @.str.3127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3128 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3129 = private unnamed_addr constant [2 x i8] c" \00" @.str.3130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3131 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3132 = private unnamed_addr constant [2 x i8] c"(\00" @.str.3133 = private unnamed_addr constant [3 x i8] c", \00" @.str.3134 = private unnamed_addr constant [2 x i8] c")\00" @.str.3135 = private unnamed_addr constant [11 x i8] c" {\0Aentry:\0A\00" @.str.3136 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3137 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" @.str.3138 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.3139 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.3140 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3141 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.3142 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.3143 = private unnamed_addr constant [4 x i8] c"\0A}\0A\00" @.str.3144 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3145 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3146 = private unnamed_addr constant [67 x i8] c"this code can never run (it comes after return, break or continue)\00" @.str.3147 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3148 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" @.str.3149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3150 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" @.str.3151 = private unnamed_addr constant [6 x i8] c"block\00" @.str.3152 = private unnamed_addr constant [5 x i8] c"decl\00" @.str.3153 = private unnamed_addr constant [7 x i8] c"assign\00" @.str.3154 = private unnamed_addr constant [5 x i8] c"expr\00" @.str.3155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3156 = private unnamed_addr constant [3 x i8] c"or\00" @.str.3157 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3158 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3159 = private unnamed_addr constant [6 x i8] c"match\00" @.str.3160 = private unnamed_addr constant [3 x i8] c"if\00" @.str.3161 = private unnamed_addr constant [6 x i8] c"while\00" @.str.3162 = private unnamed_addr constant [4 x i8] c"for\00" @.str.3163 = private unnamed_addr constant [5 x i8] c"each\00" @.str.3164 = private unnamed_addr constant [7 x i8] c"return\00" @.str.3165 = private unnamed_addr constant [6 x i8] c"defer\00" @.str.3166 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3167 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" @.str.3168 = private unnamed_addr constant [34 x i8] c"defer inside defer is not allowed\00" @.str.3169 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3170 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3171 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3172 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3173 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3174 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3175 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3177 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3178 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3179 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3180 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3181 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3182 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3183 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3185 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" @.str.3186 = private unnamed_addr constant [6 x i8] c"break\00" @.str.3187 = private unnamed_addr constant [9 x i8] c"continue\00" @.str.3188 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3189 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" @.str.3190 = private unnamed_addr constant [28 x i8] c" can't be used inside defer\00" @.str.3191 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3192 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3193 = private unnamed_addr constant [32 x i8] c" can only be used inside a loop\00" @.str.3194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3195 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3197 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3198 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3199 = private unnamed_addr constant [6 x i8] c"break\00" @.str.3200 = private unnamed_addr constant [19 x i8] c"unknown statement \00" @.str.3201 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3202 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3203 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3204 = private unnamed_addr constant [47 x i8] c"this gives back nothing, so it can't be stored\00" @.str.3205 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3206 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3207 = private unnamed_addr constant [35 x i8] c"null needs a type, like: ptr[int] \00" @.str.3208 = private unnamed_addr constant [8 x i8] c" = null\00" @.str.3209 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.3210 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3211 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3212 = private unnamed_addr constant [2 x i8] c"'\00" @.str.3213 = private unnamed_addr constant [2 x i8] c"'\00" @.str.3214 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3215 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.3216 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3217 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3218 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.3219 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3221 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3222 = private unnamed_addr constant [4 x i8] c"var\00" @.str.3223 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00" @.str.3224 = private unnamed_addr constant [19 x i8] c"' (create it with \00" @.str.3225 = private unnamed_addr constant [9 x i8] c" := ...)\00" @.str.3226 = private unnamed_addr constant [20 x i8] c"the loop variable '\00" @.str.3227 = private unnamed_addr constant [19 x i8] c"' can't be changed\00" @.str.3228 = private unnamed_addr constant [10 x i8] c"the value\00" @.str.3229 = private unnamed_addr constant [4 x i8] c"var\00" @.str.3230 = private unnamed_addr constant [2 x i8] c"'\00" @.str.3231 = private unnamed_addr constant [2 x i8] c"'\00" @.str.3232 = private unnamed_addr constant [2 x i8] c"=\00" @.str.3233 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3234 = private unnamed_addr constant [4 x i8] c"var\00" @.str.3235 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3236 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3237 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3238 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.3239 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3240 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3241 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3242 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.3243 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3244 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3245 = private unnamed_addr constant [12 x i8] c"a condition\00" @.str.3246 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3247 = private unnamed_addr constant [5 x i8] c"then\00" @.str.3248 = private unnamed_addr constant [5 x i8] c"else\00" @.str.3249 = private unnamed_addr constant [6 x i8] c"endif\00" @.str.3250 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3251 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3252 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3253 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3254 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3255 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3256 = private unnamed_addr constant [11 x i8] c"while.cond\00" @.str.3257 = private unnamed_addr constant [11 x i8] c"while.body\00" @.str.3258 = private unnamed_addr constant [10 x i8] c"while.end\00" @.str.3259 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3260 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3261 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3262 = private unnamed_addr constant [5 x i8] c"true\00" @.str.3263 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3264 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3265 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3266 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3267 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3268 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3269 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.3270 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3271 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3272 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3273 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3274 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3275 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.3276 = private unnamed_addr constant [6 x i8] c"break\00" @.str.3277 = private unnamed_addr constant [6 x i8] c"while\00" @.str.3278 = private unnamed_addr constant [4 x i8] c"for\00" @.str.3279 = private unnamed_addr constant [5 x i8] c"each\00" @.str.3280 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3281 = private unnamed_addr constant [4 x i8] c"int\00" @.str.3282 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3283 = private unnamed_addr constant [21 x i8] c"the start of a range\00" @.str.3284 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3285 = private unnamed_addr constant [4 x i8] c"int\00" @.str.3286 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3287 = private unnamed_addr constant [19 x i8] c"the end of a range\00" @.str.3288 = private unnamed_addr constant [4 x i8] c"int\00" @.str.3289 = private unnamed_addr constant [9 x i8] c"for.cond\00" @.str.3290 = private unnamed_addr constant [9 x i8] c"for.body\00" @.str.3291 = private unnamed_addr constant [9 x i8] c"for.step\00" @.str.3292 = private unnamed_addr constant [8 x i8] c"for.end\00" @.str.3293 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3294 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" @.str.3295 = private unnamed_addr constant [3 x i8] c", \00" @.str.3296 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3297 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3298 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3299 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3300 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3301 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.3302 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3303 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3304 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3305 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3306 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.3307 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3308 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3309 = private unnamed_addr constant [9 x i8] c"add i64 \00" @.str.3310 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.3311 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3313 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3314 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3315 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3316 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3317 = private unnamed_addr constant [2 x i8] c"0\00" @.str.3318 = private unnamed_addr constant [1 x i8] c"\00" @.str.3319 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3320 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3321 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3322 = private unnamed_addr constant [15 x i8] c", i32 0, i32 6\00" @.str.3323 = private unnamed_addr constant [9 x i8] c"map.cond\00" @.str.3324 = private unnamed_addr constant [10 x i8] c"map.check\00" @.str.3325 = private unnamed_addr constant [9 x i8] c"map.body\00" @.str.3326 = private unnamed_addr constant [9 x i8] c"map.step\00" @.str.3327 = private unnamed_addr constant [8 x i8] c"map.end\00" @.str.3328 = private unnamed_addr constant [12 x i8] c"map.changed\00" @.str.3329 = private unnamed_addr constant [9 x i8] c"map.same\00" @.str.3330 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3331 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3332 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3333 = private unnamed_addr constant [15 x i8] c", i32 0, i32 6\00" @.str.3334 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" @.str.3335 = private unnamed_addr constant [3 x i8] c", \00" @.str.3336 = private unnamed_addr constant [34 x i8] c"call void @finch_map_changed(ptr \00" @.str.3337 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3338 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.3339 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3340 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3341 = private unnamed_addr constant [2 x i8] c")\00" @.str.3342 = private unnamed_addr constant [12 x i8] c"unreachable\00" @.str.3343 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3344 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3345 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3346 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3347 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3348 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3349 = private unnamed_addr constant [15 x i8] c", i32 0, i32 2\00" @.str.3350 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" @.str.3351 = private unnamed_addr constant [3 x i8] c", \00" @.str.3352 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3353 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" @.str.3354 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.3355 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3356 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3357 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3358 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3359 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3360 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.3361 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3362 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3363 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3365 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.3366 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3367 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3368 = private unnamed_addr constant [9 x i8] c"add i64 \00" @.str.3369 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.3370 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3371 = private unnamed_addr constant [1 x i8] c"\00" @.str.3372 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3373 = private unnamed_addr constant [6 x i8] c"$list\00" @.str.3374 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3375 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" @.str.3376 = private unnamed_addr constant [4 x i8] c"map\00" @.str.3377 = private unnamed_addr constant [6 x i8] c"array\00" @.str.3378 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3379 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3380 = private unnamed_addr constant [56 x i8] c"for ... in needs an array, a str or a map, but this is \00" @.str.3381 = private unnamed_addr constant [37 x i8] c" (for a range of numbers write 0..n)\00" @.str.3382 = private unnamed_addr constant [5 x i8] c"char\00" @.str.3383 = private unnamed_addr constant [6 x i8] c"array\00" @.str.3384 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3385 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3386 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3387 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3388 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3389 = private unnamed_addr constant [2 x i8] c"0\00" @.str.3390 = private unnamed_addr constant [10 x i8] c"each.cond\00" @.str.3391 = private unnamed_addr constant [10 x i8] c"each.body\00" @.str.3392 = private unnamed_addr constant [10 x i8] c"each.step\00" @.str.3393 = private unnamed_addr constant [9 x i8] c"each.end\00" @.str.3394 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3395 = private unnamed_addr constant [47 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr \00" @.str.3396 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" @.str.3397 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3398 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" @.str.3399 = private unnamed_addr constant [3 x i8] c", \00" @.str.3400 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.3401 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3402 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3403 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3404 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3405 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3406 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3407 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3408 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3409 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.3410 = private unnamed_addr constant [4 x i8] c"int\00" @.str.3411 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3412 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3413 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3414 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3415 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.3416 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3417 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3418 = private unnamed_addr constant [9 x i8] c"add i64 \00" @.str.3419 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.3420 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3421 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" @.str.3422 = private unnamed_addr constant [34 x i8] c"return can't be used inside defer\00" @.str.3423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3424 = private unnamed_addr constant [5 x i8] c"call\00" @.str.3425 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3426 = private unnamed_addr constant [6 x i8] c"error\00" @.str.3427 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3428 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3429 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3430 = private unnamed_addr constant [2 x i8] c"!\00" @.str.3431 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3432 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3433 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3434 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3435 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3436 = private unnamed_addr constant [2 x i8] c"!\00" @.str.3437 = private unnamed_addr constant [2 x i8] c"'\00" @.str.3438 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3439 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3440 = private unnamed_addr constant [65 x i8] c"' can't fail, so it can't return an error (make it fallible: -> \00" @.str.3441 = private unnamed_addr constant [2 x i8] c")\00" @.str.3442 = private unnamed_addr constant [6 x i8] c"error\00" @.str.3443 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3444 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3445 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3446 = private unnamed_addr constant [18 x i8] c"the error message\00" @.str.3447 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.3448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3449 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3450 = private unnamed_addr constant [2 x i8] c" \00" @.str.3451 = private unnamed_addr constant [13 x i8] c"insertvalue \00" @.str.3452 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3453 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3454 = private unnamed_addr constant [37 x i8] c" zeroinitializer, { ptr, i64, i64 } \00" @.str.3455 = private unnamed_addr constant [4 x i8] c", 2\00" @.str.3456 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3457 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3458 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3459 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3460 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3461 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3462 = private unnamed_addr constant [2 x i8] c"'\00" @.str.3463 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3464 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3465 = private unnamed_addr constant [47 x i8] c"' doesn't return a value (it has no '-> type')\00" @.str.3466 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3467 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3468 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.3469 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3470 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3471 = private unnamed_addr constant [54 x i8] c" { i1 true, i8 0, { ptr, i64, i64 } zeroinitializer }\00" @.str.3472 = private unnamed_addr constant [9 x i8] c"ret void\00" @.str.3473 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3474 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3475 = private unnamed_addr constant [2 x i8] c"'\00" @.str.3476 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3477 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3478 = private unnamed_addr constant [15 x i8] c"' must return \00" @.str.3479 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3480 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3481 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3482 = private unnamed_addr constant [4 x i8] c"var\00" @.str.3483 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3484 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3485 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3486 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3487 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3488 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3489 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3490 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3491 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3492 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3493 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3494 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" @.str.3495 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3496 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3497 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3498 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3499 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3500 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" @.str.3501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3502 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3503 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3504 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3505 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3506 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3507 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3508 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3509 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3510 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3511 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3512 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3513 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3514 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3515 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3517 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3519 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3521 = private unnamed_addr constant [19 x i8] c"the returned value\00" @.str.3522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3523 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3524 = private unnamed_addr constant [13 x i8] c"insertvalue \00" @.str.3525 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3526 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3527 = private unnamed_addr constant [29 x i8] c" zeroinitializer, i1 true, 0\00" @.str.3528 = private unnamed_addr constant [13 x i8] c"insertvalue \00" @.str.3529 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3530 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3531 = private unnamed_addr constant [2 x i8] c" \00" @.str.3532 = private unnamed_addr constant [3 x i8] c", \00" @.str.3533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3534 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3535 = private unnamed_addr constant [2 x i8] c" \00" @.str.3536 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.3537 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.3538 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3539 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3540 = private unnamed_addr constant [2 x i8] c" \00" @.str.3541 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.3542 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3543 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3544 = private unnamed_addr constant [2 x i8] c" \00" @.str.3545 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3546 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3547 = private unnamed_addr constant [8 x i8] c"{ i64, \00" @.str.3548 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3549 = private unnamed_addr constant [3 x i8] c", \00" @.str.3550 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3551 = private unnamed_addr constant [3 x i8] c" }\00" @.str.3552 = private unnamed_addr constant [30 x i8] c"ptrtoint (ptr getelementptr (\00" @.str.3553 = private unnamed_addr constant [27 x i8] c", ptr null, i32 1) to i64)\00" @.str.3554 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.3555 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3556 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3557 = private unnamed_addr constant [15 x i8] c", i32 0, i32 0\00" @.str.3558 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3559 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3560 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3561 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3562 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3563 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" @.str.3564 = private unnamed_addr constant [2 x i8] c"0\00" @.str.3565 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3566 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3567 = private unnamed_addr constant [2 x i8] c"1\00" @.str.3568 = private unnamed_addr constant [5 x i8] c"ptr \00" @.str.3569 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3570 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3571 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3572 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3573 = private unnamed_addr constant [7 x i8] c", i32 \00" @.str.3574 = private unnamed_addr constant [26 x i8] c"call i64 @finch_map_find(\00" @.str.3575 = private unnamed_addr constant [2 x i8] c")\00" @.str.3576 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.3577 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.3578 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.3579 = private unnamed_addr constant [2 x i8] c"0\00" @.str.3580 = private unnamed_addr constant [26 x i8] c"call i64 @finch_map_slot(\00" @.str.3581 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3582 = private unnamed_addr constant [2 x i8] c")\00" @.str.3583 = private unnamed_addr constant [8 x i8] c"map.new\00" @.str.3584 = private unnamed_addr constant [9 x i8] c"map.have\00" @.str.3585 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" @.str.3586 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.3587 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.3588 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3589 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3590 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3591 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3592 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3593 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3594 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3595 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3596 = private unnamed_addr constant [8 x i8] c"the key\00" @.str.3597 = private unnamed_addr constant [45 x i8] c"this is a temporary map, it can't be changed\00" @.str.3598 = private unnamed_addr constant [1 x i8] c"\00" @.str.3599 = private unnamed_addr constant [12 x i8] c"map.missing\00" @.str.3600 = private unnamed_addr constant [10 x i8] c"map.found\00" @.str.3601 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" @.str.3602 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.3603 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.3604 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.3605 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.3606 = private unnamed_addr constant [34 x i8] c"call void @finch_map_missing(ptr \00" @.str.3607 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3608 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.3609 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3610 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3611 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3612 = private unnamed_addr constant [2 x i8] c")\00" @.str.3613 = private unnamed_addr constant [12 x i8] c"unreachable\00" @.str.3614 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3615 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3616 = private unnamed_addr constant [4 x i8] c"map\00" @.str.3617 = private unnamed_addr constant [53 x i8] c"an empty [:] needs a type, like: map[str]int m = [:]\00" @.str.3618 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3619 = private unnamed_addr constant [6 x i8] c"unary\00" @.str.3620 = private unnamed_addr constant [2 x i8] c"-\00" @.str.3621 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3622 = private unnamed_addr constant [6 x i8] c"float\00" @.str.3623 = private unnamed_addr constant [4 x i8] c"int\00" @.str.3624 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3625 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3626 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3627 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3628 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3629 = private unnamed_addr constant [36 x i8] c"a map key needs a value with a type\00" @.str.3630 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3631 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3632 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3633 = private unnamed_addr constant [38 x i8] c"a map value needs a value with a type\00" @.str.3634 = private unnamed_addr constant [6 x i8] c"float\00" @.str.3635 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.3636 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3637 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.3638 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3639 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.3640 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3641 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3642 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3643 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3644 = private unnamed_addr constant [22 x i8] c"every key of this map\00" @.str.3645 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3646 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3647 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3648 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3649 = private unnamed_addr constant [24 x i8] c"every value of this map\00" @.str.3650 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3651 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3652 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3653 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3654 = private unnamed_addr constant [4 x i8] c"has\00" @.str.3655 = private unnamed_addr constant [4 x i8] c"get\00" @.str.3656 = private unnamed_addr constant [7 x i8] c"remove\00" @.str.3657 = private unnamed_addr constant [4 x i8] c"get\00" @.str.3658 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3659 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3660 = private unnamed_addr constant [8 x i8] c"the key\00" @.str.3661 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00" @.str.3662 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.3663 = private unnamed_addr constant [4 x i8] c"has\00" @.str.3664 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3665 = private unnamed_addr constant [7 x i8] c"remove\00" @.str.3666 = private unnamed_addr constant [11 x i8] c"remove.hit\00" @.str.3667 = private unnamed_addr constant [11 x i8] c"remove.end\00" @.str.3668 = private unnamed_addr constant [36 x i8] c"call void @finch_map_remove_at(ptr \00" @.str.3669 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3670 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3671 = private unnamed_addr constant [2 x i8] c")\00" @.str.3672 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3673 = private unnamed_addr constant [10 x i8] c"get.found\00" @.str.3674 = private unnamed_addr constant [12 x i8] c"get.missing\00" @.str.3675 = private unnamed_addr constant [9 x i8] c"get.fend\00" @.str.3676 = private unnamed_addr constant [9 x i8] c"get.mend\00" @.str.3677 = private unnamed_addr constant [8 x i8] c"get.end\00" @.str.3678 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3679 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3680 = private unnamed_addr constant [12 x i8] c"the default\00" @.str.3681 = private unnamed_addr constant [5 x i8] c"phi \00" @.str.3682 = private unnamed_addr constant [4 x i8] c" [ \00" @.str.3683 = private unnamed_addr constant [4 x i8] c", %\00" @.str.3684 = private unnamed_addr constant [7 x i8] c" ], [ \00" @.str.3685 = private unnamed_addr constant [4 x i8] c", %\00" @.str.3686 = private unnamed_addr constant [3 x i8] c" ]\00" @.str.3687 = private unnamed_addr constant [6 x i8] c"clear\00" @.str.3688 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3689 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3690 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3691 = private unnamed_addr constant [15 x i8] c", i32 0, i32 2\00" @.str.3692 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3693 = private unnamed_addr constant [11 x i8] c"entry.live\00" @.str.3694 = private unnamed_addr constant [11 x i8] c"entry.next\00" @.str.3695 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" @.str.3696 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3697 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.3698 = private unnamed_addr constant [32 x i8] c"call void @finch_map_clear(ptr \00" @.str.3699 = private unnamed_addr constant [2 x i8] c")\00" @.str.3700 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3701 = private unnamed_addr constant [5 x i8] c"keys\00" @.str.3702 = private unnamed_addr constant [7 x i8] c"values\00" @.str.3703 = private unnamed_addr constant [7 x i8] c"values\00" @.str.3704 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.3705 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.3706 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.3707 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3708 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3709 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3710 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" @.str.3711 = private unnamed_addr constant [31 x i8] c"call void @finch_arr_make(ptr \00" @.str.3712 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3713 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3714 = private unnamed_addr constant [2 x i8] c")\00" @.str.3715 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.3716 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3717 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3718 = private unnamed_addr constant [2 x i8] c"0\00" @.str.3719 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3720 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3721 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3722 = private unnamed_addr constant [15 x i8] c", i32 0, i32 2\00" @.str.3723 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3724 = private unnamed_addr constant [11 x i8] c"entry.live\00" @.str.3725 = private unnamed_addr constant [11 x i8] c"entry.next\00" @.str.3726 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" @.str.3727 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3728 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.3729 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3730 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3731 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3732 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3733 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3734 = private unnamed_addr constant [9 x i8] c"add i64 \00" @.str.3735 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.3736 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.3737 = private unnamed_addr constant [22 x i8] c"a map has no method '\00" @.str.3738 = private unnamed_addr constant [50 x i8] c"' (it has: has, get, remove, clear, keys, values)\00" @.str.3739 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.3740 = private unnamed_addr constant [4 x i8] c"var\00" @.str.3741 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3742 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.3743 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3744 = private unnamed_addr constant [2 x i8] c"'\00" @.str.3745 = private unnamed_addr constant [23 x i8] c"' is not a variant of \00" @.str.3746 = private unnamed_addr constant [11 x i8] c" (it has: \00" @.str.3747 = private unnamed_addr constant [3 x i8] c", \00" @.str.3748 = private unnamed_addr constant [2 x i8] c")\00" @.str.3749 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3750 = private unnamed_addr constant [13 x i8] c"this pattern\00" @.str.3751 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3752 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3753 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3754 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3755 = private unnamed_addr constant [31 x i8] c"there is nothing to match here\00" @.str.3756 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3757 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.3758 = private unnamed_addr constant [1 x i8] c"\00" @.str.3759 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.3760 = private unnamed_addr constant [14 x i8] c"extractvalue \00" @.str.3761 = private unnamed_addr constant [2 x i8] c" \00" @.str.3762 = private unnamed_addr constant [3 x i8] c", \00" @.str.3763 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3764 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.3765 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3766 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3767 = private unnamed_addr constant [10 x i8] c"match.end\00" @.str.3768 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3769 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3770 = private unnamed_addr constant [73 x i8] c"this arm can never be used: 'else' already takes everything that is left\00" @.str.3771 = private unnamed_addr constant [10 x i8] c"match.arm\00" @.str.3772 = private unnamed_addr constant [11 x i8] c"match.next\00" @.str.3773 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3774 = private unnamed_addr constant [1 x i8] c"\00" @.str.3775 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3776 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3777 = private unnamed_addr constant [50 x i8] c"this variant is already handled by an earlier arm\00" @.str.3778 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3779 = private unnamed_addr constant [53 x i8] c"an arm with several variants can't name their values\00" @.str.3780 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" @.str.3781 = private unnamed_addr constant [3 x i8] c", \00" @.str.3782 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3783 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.3784 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3785 = private unnamed_addr constant [50 x i8] c"this variant is already handled by an earlier arm\00" @.str.3786 = private unnamed_addr constant [3 x i8] c"==\00" @.str.3787 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3788 = private unnamed_addr constant [9 x i8] c"match.or\00" @.str.3789 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3790 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.3791 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3792 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3793 = private unnamed_addr constant [2 x i8] c"_\00" @.str.3794 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3795 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" @.str.3796 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3797 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3798 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3799 = private unnamed_addr constant [14 x i8] c"extractvalue \00" @.str.3800 = private unnamed_addr constant [2 x i8] c" \00" @.str.3801 = private unnamed_addr constant [3 x i8] c", \00" @.str.3802 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3803 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3804 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3805 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3806 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3807 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3808 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3809 = private unnamed_addr constant [53 x i8] c"an arm of a match that gives a value has to give one\00" @.str.3810 = private unnamed_addr constant [58 x i8] c"this arm (the arms of a match have to give the same type)\00" @.str.3811 = private unnamed_addr constant [11 x i8] c"match.from\00" @.str.3812 = private unnamed_addr constant [6 x i8] c"block\00" @.str.3813 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3814 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3815 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3816 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" @.str.3817 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3818 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3819 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" @.str.3820 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3821 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3822 = private unnamed_addr constant [27 x i8] c"this match doesn't handle \00" @.str.3823 = private unnamed_addr constant [3 x i8] c", \00" @.str.3824 = private unnamed_addr constant [30 x i8] c" (add them, or an 'else' arm)\00" @.str.3825 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.3826 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3827 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.3828 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3829 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3830 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3831 = private unnamed_addr constant [27 x i8] c"this match doesn't handle \00" @.str.3832 = private unnamed_addr constant [3 x i8] c", \00" @.str.3833 = private unnamed_addr constant [30 x i8] c" (add them, or an 'else' arm)\00" @.str.3834 = private unnamed_addr constant [12 x i8] c"a match on \00" @.str.3835 = private unnamed_addr constant [55 x i8] c" needs an 'else' arm for everything that is not listed\00" @.str.3836 = private unnamed_addr constant [5 x i8] c"true\00" @.str.3837 = private unnamed_addr constant [36 x i8] c"no arm of this match fits the value\00" @.str.3838 = private unnamed_addr constant [12 x i8] c"unreachable\00" @.str.3839 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3840 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3841 = private unnamed_addr constant [12 x i8] c"unreachable\00" @.str.3842 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3843 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3844 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3845 = private unnamed_addr constant [5 x i8] c"phi \00" @.str.3846 = private unnamed_addr constant [2 x i8] c" \00" @.str.3847 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3848 = private unnamed_addr constant [3 x i8] c"[ \00" @.str.3849 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3850 = private unnamed_addr constant [4 x i8] c", %\00" @.str.3851 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3852 = private unnamed_addr constant [3 x i8] c" ]\00" @.str.3853 = private unnamed_addr constant [3 x i8] c", \00" @.str.3854 = private unnamed_addr constant [5 x i8] c"call\00" @.str.3855 = private unnamed_addr constant [7 x i8] c"method\00" @.str.3856 = private unnamed_addr constant [81 x i8] c"only a function call can fail; 'or' and 'try' go after one, like int(text) or 0\00" @.str.3857 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3858 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" @.str.3859 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3860 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.3861 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3862 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.3863 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3864 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" @.str.3865 = private unnamed_addr constant [1 x i8] c"\00" @.str.3866 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3867 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.3868 = private unnamed_addr constant [1 x i8] c"\00" @.str.3869 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3870 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.3871 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3872 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.3873 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3874 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.3875 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3876 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" @.str.3877 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3878 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.3879 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3880 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.3881 = private unnamed_addr constant [51 x i8] c"this call can't fail, so it needs no 'or' or 'try'\00" @.str.3882 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3883 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" @.str.3884 = private unnamed_addr constant [31 x i8] c"try can't be used inside defer\00" @.str.3885 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3886 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3887 = private unnamed_addr constant [2 x i8] c"!\00" @.str.3888 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3889 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3890 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3891 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3892 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3893 = private unnamed_addr constant [2 x i8] c"!\00" @.str.3894 = private unnamed_addr constant [30 x i8] c"try passes the error on, so '\00" @.str.3895 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3896 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3897 = private unnamed_addr constant [32 x i8] c"' must be able to fail too (-> \00" @.str.3898 = private unnamed_addr constant [56 x i8] c"); or handle it here: ... or / ... or { ... }\00" @.str.3899 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3900 = private unnamed_addr constant [11 x i8] c"try.failed\00" @.str.3901 = private unnamed_addr constant [7 x i8] c"try.ok\00" @.str.3902 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.3903 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3904 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3905 = private unnamed_addr constant [2 x i8] c" \00" @.str.3906 = private unnamed_addr constant [13 x i8] c"insertvalue \00" @.str.3907 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3908 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3909 = private unnamed_addr constant [37 x i8] c" zeroinitializer, { ptr, i64, i64 } \00" @.str.3910 = private unnamed_addr constant [4 x i8] c", 2\00" @.str.3911 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3912 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3913 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3914 = private unnamed_addr constant [10 x i8] c"or.failed\00" @.str.3915 = private unnamed_addr constant [6 x i8] c"or.ok\00" @.str.3916 = private unnamed_addr constant [4 x i8] c"err\00" @.str.3917 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3918 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3919 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3920 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3921 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3922 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3923 = private unnamed_addr constant [143 x i8] c"this block must leave with return, break, continue or exit(...): after a failure there is no value to go on with (or give one: ... or )\00" @.str.3924 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3925 = private unnamed_addr constant [7 x i8] c"or.end\00" @.str.3926 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3927 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3928 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3929 = private unnamed_addr constant [99 x i8] c"this call gives back no value, so there is nothing to replace; handle the failure with or { ... }\00" @.str.3930 = private unnamed_addr constant [4 x i8] c"err\00" @.str.3931 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3932 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3933 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3934 = private unnamed_addr constant [21 x i8] c"the value after 'or'\00" @.str.3935 = private unnamed_addr constant [8 x i8] c"or.bend\00" @.str.3936 = private unnamed_addr constant [7 x i8] c"or.end\00" @.str.3937 = private unnamed_addr constant [5 x i8] c"phi \00" @.str.3938 = private unnamed_addr constant [4 x i8] c" [ \00" @.str.3939 = private unnamed_addr constant [4 x i8] c", %\00" @.str.3940 = private unnamed_addr constant [7 x i8] c" ], [ \00" @.str.3941 = private unnamed_addr constant [4 x i8] c", %\00" @.str.3942 = private unnamed_addr constant [3 x i8] c" ]\00" @.str.3943 = private unnamed_addr constant [6 x i8] c"array\00" @.str.3944 = private unnamed_addr constant [4 x i8] c"map\00" @.str.3945 = private unnamed_addr constant [4 x i8] c"int\00" @.str.3946 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3947 = private unnamed_addr constant [3 x i8] c"0x\00" @.str.3948 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3949 = private unnamed_addr constant [3 x i8] c"0X\00" @.str.3950 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3951 = private unnamed_addr constant [4 x i8] c"int\00" @.str.3952 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3953 = private unnamed_addr constant [4 x i8] c"int\00" @.str.3954 = private unnamed_addr constant [6 x i8] c"float\00" @.str.3955 = private unnamed_addr constant [6 x i8] c"float\00" @.str.3956 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3957 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3958 = private unnamed_addr constant [5 x i8] c"char\00" @.str.3959 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3960 = private unnamed_addr constant [5 x i8] c"char\00" @.str.3961 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3962 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3963 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3964 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3965 = private unnamed_addr constant [4 x i8] c"var\00" @.str.3966 = private unnamed_addr constant [7 x i8] c"member\00" @.str.3967 = private unnamed_addr constant [6 x i8] c"index\00" @.str.3968 = private unnamed_addr constant [6 x i8] c"match\00" @.str.3969 = private unnamed_addr constant [4 x i8] c"try\00" @.str.3970 = private unnamed_addr constant [3 x i8] c"or\00" @.str.3971 = private unnamed_addr constant [6 x i8] c"unary\00" @.str.3972 = private unnamed_addr constant [7 x i8] c"binary\00" @.str.3973 = private unnamed_addr constant [5 x i8] c"call\00" @.str.3974 = private unnamed_addr constant [7 x i8] c"method\00" @.str.3975 = private unnamed_addr constant [6 x i8] c"array\00" @.str.3976 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3977 = private unnamed_addr constant [4 x i8] c"map\00" @.str.3978 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3979 = private unnamed_addr constant [20 x i8] c"unknown expression \00" @.str.3980 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3981 = private unnamed_addr constant [2 x i8] c"!\00" @.str.3982 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3983 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3984 = private unnamed_addr constant [20 x i8] c"the value after '!'\00" @.str.3985 = private unnamed_addr constant [8 x i8] c"xor i1 \00" @.str.3986 = private unnamed_addr constant [7 x i8] c", true\00" @.str.3987 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3988 = private unnamed_addr constant [2 x i8] c"~\00" @.str.3989 = private unnamed_addr constant [46 x i8] c"'~' flips the bits of a whole number, not of \00" @.str.3990 = private unnamed_addr constant [5 x i8] c"xor \00" @.str.3991 = private unnamed_addr constant [2 x i8] c" \00" @.str.3992 = private unnamed_addr constant [5 x i8] c", -1\00" @.str.3993 = private unnamed_addr constant [35 x i8] c" can't be negative (it's unsigned)\00" @.str.3994 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3995 = private unnamed_addr constant [2 x i8] c"-\00" @.str.3996 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3997 = private unnamed_addr constant [2 x i8] c"-\00" @.str.3998 = private unnamed_addr constant [5 x i8] c"sub \00" @.str.3999 = private unnamed_addr constant [5 x i8] c" 0, \00" @.str.4000 = private unnamed_addr constant [6 x i8] c"fneg \00" @.str.4001 = private unnamed_addr constant [2 x i8] c" \00" @.str.4002 = private unnamed_addr constant [27 x i8] c"can't put '-' in front of \00" @.str.4003 = private unnamed_addr constant [12 x i8] c"can't use '\00" @.str.4004 = private unnamed_addr constant [6 x i8] c"' on \00" @.str.4005 = private unnamed_addr constant [6 x i8] c" and \00" @.str.4006 = private unnamed_addr constant [2 x i8] c"+\00" @.str.4007 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4008 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4009 = private unnamed_addr constant [49 x i8] c" (turn the other side into text first: str(...))\00" @.str.4010 = private unnamed_addr constant [2 x i8] c"&\00" @.str.4011 = private unnamed_addr constant [2 x i8] c"|\00" @.str.4012 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4013 = private unnamed_addr constant [2 x i8] c"&\00" @.str.4014 = private unnamed_addr constant [27 x i8] c" (for true/false use '&&')\00" @.str.4015 = private unnamed_addr constant [27 x i8] c" (for true/false use '||')\00" @.str.4016 = private unnamed_addr constant [2 x i8] c"&\00" @.str.4017 = private unnamed_addr constant [2 x i8] c"|\00" @.str.4018 = private unnamed_addr constant [2 x i8] c"^\00" @.str.4019 = private unnamed_addr constant [3 x i8] c"<<\00" @.str.4020 = private unnamed_addr constant [3 x i8] c">>\00" @.str.4021 = private unnamed_addr constant [44 x i8] c" (bit operators work on whole numbers only)\00" @.str.4022 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4023 = private unnamed_addr constant [6 x i8] c"array\00" @.str.4024 = private unnamed_addr constant [3 x i8] c"==\00" @.str.4025 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.4026 = private unnamed_addr constant [32 x i8] c" (compare the parts one by one)\00" @.str.4027 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4028 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4029 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4030 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4031 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4032 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4033 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4034 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4035 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4036 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" @.str.4037 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4038 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" @.str.4039 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4040 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" @.str.4041 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4042 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4043 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4044 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4045 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4046 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" @.str.4047 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4048 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4049 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4050 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.4051 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4052 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" @.str.4053 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4054 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" @.str.4055 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4056 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" @.str.4057 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4058 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4059 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4060 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4061 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4062 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" @.str.4063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4064 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4065 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4066 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.4067 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4068 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4069 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4070 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4071 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4072 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" @.str.4073 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4074 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4075 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4076 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4077 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4078 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4079 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4080 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.4081 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4082 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4083 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4084 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4085 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4086 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" @.str.4087 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4088 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4089 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4090 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4091 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4092 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4093 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4094 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.4095 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4096 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4097 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4098 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4099 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4100 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.4101 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4102 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4103 = private unnamed_addr constant [1 x i8] c"\00" @.str.4104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4105 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.4106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4107 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4109 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4110 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4111 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.4112 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4113 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4114 = private unnamed_addr constant [1 x i8] c"\00" @.str.4115 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4116 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.4117 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4118 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4119 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4120 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4122 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4123 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.4124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4125 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" @.str.4126 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4127 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4128 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4129 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4131 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.4132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4133 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4134 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.4135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4136 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" @.str.4137 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4138 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.4139 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4140 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4141 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4142 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.4143 = private unnamed_addr constant [2 x i8] c"+\00" @.str.4144 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4145 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4146 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4147 = private unnamed_addr constant [33 x i8] c"call void @finch_str_concat(ptr \00" @.str.4148 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4149 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4150 = private unnamed_addr constant [2 x i8] c")\00" @.str.4151 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4152 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4153 = private unnamed_addr constant [2 x i8] c"+\00" @.str.4154 = private unnamed_addr constant [2 x i8] c"-\00" @.str.4155 = private unnamed_addr constant [2 x i8] c"*\00" @.str.4156 = private unnamed_addr constant [2 x i8] c"/\00" @.str.4157 = private unnamed_addr constant [2 x i8] c"%\00" @.str.4158 = private unnamed_addr constant [2 x i8] c"&\00" @.str.4159 = private unnamed_addr constant [2 x i8] c"|\00" @.str.4160 = private unnamed_addr constant [2 x i8] c"^\00" @.str.4161 = private unnamed_addr constant [3 x i8] c"<<\00" @.str.4162 = private unnamed_addr constant [3 x i8] c">>\00" @.str.4163 = private unnamed_addr constant [4 x i8] c"add\00" @.str.4164 = private unnamed_addr constant [4 x i8] c"sub\00" @.str.4165 = private unnamed_addr constant [4 x i8] c"mul\00" @.str.4166 = private unnamed_addr constant [5 x i8] c"sdiv\00" @.str.4167 = private unnamed_addr constant [5 x i8] c"srem\00" @.str.4168 = private unnamed_addr constant [4 x i8] c"and\00" @.str.4169 = private unnamed_addr constant [3 x i8] c"or\00" @.str.4170 = private unnamed_addr constant [4 x i8] c"xor\00" @.str.4171 = private unnamed_addr constant [4 x i8] c"shl\00" @.str.4172 = private unnamed_addr constant [5 x i8] c"ashr\00" @.str.4173 = private unnamed_addr constant [4 x i8] c"add\00" @.str.4174 = private unnamed_addr constant [4 x i8] c"sub\00" @.str.4175 = private unnamed_addr constant [4 x i8] c"mul\00" @.str.4176 = private unnamed_addr constant [5 x i8] c"udiv\00" @.str.4177 = private unnamed_addr constant [5 x i8] c"urem\00" @.str.4178 = private unnamed_addr constant [4 x i8] c"and\00" @.str.4179 = private unnamed_addr constant [3 x i8] c"or\00" @.str.4180 = private unnamed_addr constant [4 x i8] c"xor\00" @.str.4181 = private unnamed_addr constant [4 x i8] c"shl\00" @.str.4182 = private unnamed_addr constant [5 x i8] c"lshr\00" @.str.4183 = private unnamed_addr constant [2 x i8] c"/\00" @.str.4184 = private unnamed_addr constant [2 x i8] c"%\00" @.str.4185 = private unnamed_addr constant [2 x i8] c"0\00" @.str.4186 = private unnamed_addr constant [17 x i8] c"division by zero\00" @.str.4187 = private unnamed_addr constant [9 x i8] c"icmp eq \00" @.str.4188 = private unnamed_addr constant [2 x i8] c" \00" @.str.4189 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4190 = private unnamed_addr constant [17 x i8] c"division by zero\00" @.str.4191 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4192 = private unnamed_addr constant [2 x i8] c" \00" @.str.4193 = private unnamed_addr constant [2 x i8] c" \00" @.str.4194 = private unnamed_addr constant [3 x i8] c", \00" @.str.4195 = private unnamed_addr constant [2 x i8] c"+\00" @.str.4196 = private unnamed_addr constant [2 x i8] c"-\00" @.str.4197 = private unnamed_addr constant [2 x i8] c"*\00" @.str.4198 = private unnamed_addr constant [2 x i8] c"/\00" @.str.4199 = private unnamed_addr constant [2 x i8] c"%\00" @.str.4200 = private unnamed_addr constant [5 x i8] c"fadd\00" @.str.4201 = private unnamed_addr constant [5 x i8] c"fsub\00" @.str.4202 = private unnamed_addr constant [5 x i8] c"fmul\00" @.str.4203 = private unnamed_addr constant [5 x i8] c"fdiv\00" @.str.4204 = private unnamed_addr constant [5 x i8] c"frem\00" @.str.4205 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4206 = private unnamed_addr constant [2 x i8] c" \00" @.str.4207 = private unnamed_addr constant [2 x i8] c" \00" @.str.4208 = private unnamed_addr constant [3 x i8] c", \00" @.str.4209 = private unnamed_addr constant [3 x i8] c"==\00" @.str.4210 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.4211 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4212 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4213 = private unnamed_addr constant [5 x i8] c"null\00" @.str.4214 = private unnamed_addr constant [5 x i8] c"null\00" @.str.4215 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4216 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4217 = private unnamed_addr constant [60 x i8] c"a str is never null; to check for empty text use s.len == 0\00" @.str.4218 = private unnamed_addr constant [3 x i8] c"eq\00" @.str.4219 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.4220 = private unnamed_addr constant [3 x i8] c"ne\00" @.str.4221 = private unnamed_addr constant [6 x i8] c"icmp \00" @.str.4222 = private unnamed_addr constant [6 x i8] c" ptr \00" @.str.4223 = private unnamed_addr constant [3 x i8] c", \00" @.str.4224 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4225 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4226 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4227 = private unnamed_addr constant [28 x i8] c"call i32 @finch_str_eq(ptr \00" @.str.4228 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4229 = private unnamed_addr constant [2 x i8] c")\00" @.str.4230 = private unnamed_addr constant [3 x i8] c"ne\00" @.str.4231 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.4232 = private unnamed_addr constant [3 x i8] c"eq\00" @.str.4233 = private unnamed_addr constant [6 x i8] c"icmp \00" @.str.4234 = private unnamed_addr constant [6 x i8] c" i32 \00" @.str.4235 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4236 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4237 = private unnamed_addr constant [29 x i8] c"call i64 @finch_str_cmp(ptr \00" @.str.4238 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4239 = private unnamed_addr constant [2 x i8] c")\00" @.str.4240 = private unnamed_addr constant [6 x i8] c"icmp \00" @.str.4241 = private unnamed_addr constant [6 x i8] c" i64 \00" @.str.4242 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4243 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4244 = private unnamed_addr constant [3 x i8] c"==\00" @.str.4245 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.4246 = private unnamed_addr constant [2 x i8] c"<\00" @.str.4247 = private unnamed_addr constant [3 x i8] c"<=\00" @.str.4248 = private unnamed_addr constant [2 x i8] c">\00" @.str.4249 = private unnamed_addr constant [3 x i8] c">=\00" @.str.4250 = private unnamed_addr constant [4 x i8] c"oeq\00" @.str.4251 = private unnamed_addr constant [4 x i8] c"une\00" @.str.4252 = private unnamed_addr constant [4 x i8] c"olt\00" @.str.4253 = private unnamed_addr constant [4 x i8] c"ole\00" @.str.4254 = private unnamed_addr constant [4 x i8] c"ogt\00" @.str.4255 = private unnamed_addr constant [4 x i8] c"oge\00" @.str.4256 = private unnamed_addr constant [6 x i8] c"fcmp \00" @.str.4257 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4258 = private unnamed_addr constant [2 x i8] c" \00" @.str.4259 = private unnamed_addr constant [2 x i8] c" \00" @.str.4260 = private unnamed_addr constant [3 x i8] c", \00" @.str.4261 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4262 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.4263 = private unnamed_addr constant [116 x i8] c"enums can only be compared with == and != (to go through them in order, give the variants numbers and use int(...))\00" @.str.4264 = private unnamed_addr constant [3 x i8] c"eq\00" @.str.4265 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.4266 = private unnamed_addr constant [3 x i8] c"ne\00" @.str.4267 = private unnamed_addr constant [6 x i8] c"icmp \00" @.str.4268 = private unnamed_addr constant [6 x i8] c" i32 \00" @.str.4269 = private unnamed_addr constant [3 x i8] c", \00" @.str.4270 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4271 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4272 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4273 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4274 = private unnamed_addr constant [6 x i8] c"icmp \00" @.str.4275 = private unnamed_addr constant [2 x i8] c" \00" @.str.4276 = private unnamed_addr constant [2 x i8] c" \00" @.str.4277 = private unnamed_addr constant [3 x i8] c", \00" @.str.4278 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4279 = private unnamed_addr constant [3 x i8] c"==\00" @.str.4280 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.4281 = private unnamed_addr constant [2 x i8] c"<\00" @.str.4282 = private unnamed_addr constant [3 x i8] c"<=\00" @.str.4283 = private unnamed_addr constant [2 x i8] c">\00" @.str.4284 = private unnamed_addr constant [3 x i8] c">=\00" @.str.4285 = private unnamed_addr constant [3 x i8] c"eq\00" @.str.4286 = private unnamed_addr constant [3 x i8] c"ne\00" @.str.4287 = private unnamed_addr constant [4 x i8] c"ult\00" @.str.4288 = private unnamed_addr constant [4 x i8] c"ule\00" @.str.4289 = private unnamed_addr constant [4 x i8] c"ugt\00" @.str.4290 = private unnamed_addr constant [4 x i8] c"uge\00" @.str.4291 = private unnamed_addr constant [3 x i8] c"eq\00" @.str.4292 = private unnamed_addr constant [3 x i8] c"ne\00" @.str.4293 = private unnamed_addr constant [4 x i8] c"slt\00" @.str.4294 = private unnamed_addr constant [4 x i8] c"sle\00" @.str.4295 = private unnamed_addr constant [4 x i8] c"sgt\00" @.str.4296 = private unnamed_addr constant [4 x i8] c"sge\00" @.str.4297 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4298 = private unnamed_addr constant [3 x i8] c"&&\00" @.str.4299 = private unnamed_addr constant [3 x i8] c"||\00" @.str.4300 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4301 = private unnamed_addr constant [11 x i8] c"logic.from\00" @.str.4302 = private unnamed_addr constant [10 x i8] c"logic.rhs\00" @.str.4303 = private unnamed_addr constant [10 x i8] c"logic.end\00" @.str.4304 = private unnamed_addr constant [3 x i8] c"&&\00" @.str.4305 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4306 = private unnamed_addr constant [11 x i8] c"logic.rend\00" @.str.4307 = private unnamed_addr constant [5 x i8] c"true\00" @.str.4308 = private unnamed_addr constant [3 x i8] c"&&\00" @.str.4309 = private unnamed_addr constant [6 x i8] c"false\00" @.str.4310 = private unnamed_addr constant [10 x i8] c"phi i1 [ \00" @.str.4311 = private unnamed_addr constant [4 x i8] c", %\00" @.str.4312 = private unnamed_addr constant [7 x i8] c" ], [ \00" @.str.4313 = private unnamed_addr constant [4 x i8] c", %\00" @.str.4314 = private unnamed_addr constant [3 x i8] c" ]\00" @.str.4315 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4316 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4317 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4318 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.4319 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4320 = private unnamed_addr constant [3 x i8] c"==\00" @.str.4321 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.4322 = private unnamed_addr constant [2 x i8] c"<\00" @.str.4323 = private unnamed_addr constant [3 x i8] c"<=\00" @.str.4324 = private unnamed_addr constant [2 x i8] c">\00" @.str.4325 = private unnamed_addr constant [3 x i8] c">=\00" @.str.4326 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4327 = private unnamed_addr constant [6 x i8] c"array\00" @.str.4328 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4329 = private unnamed_addr constant [48 x i8] c"an empty [] needs a type, like: []int nums = []\00" @.str.4330 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4331 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.4332 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4333 = private unnamed_addr constant [28 x i8] c"every element of this array\00" @.str.4334 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4335 = private unnamed_addr constant [5 x i8] c"null\00" @.str.4336 = private unnamed_addr constant [9 x i8] c"mul i64 \00" @.str.4337 = private unnamed_addr constant [3 x i8] c", \00" @.str.4338 = private unnamed_addr constant [27 x i8] c"call ptr @finch_alloc(i64 \00" @.str.4339 = private unnamed_addr constant [2 x i8] c")\00" @.str.4340 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.4341 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4342 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4343 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4344 = private unnamed_addr constant [42 x i8] c"insertvalue { ptr, i64, i64 } undef, ptr \00" @.str.4345 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4346 = private unnamed_addr constant [31 x i8] c"insertvalue { ptr, i64, i64 } \00" @.str.4347 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4348 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.4349 = private unnamed_addr constant [31 x i8] c"insertvalue { ptr, i64, i64 } \00" @.str.4350 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4351 = private unnamed_addr constant [4 x i8] c", 2\00" @.str.4352 = private unnamed_addr constant [4 x i8] c"var\00" @.str.4353 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00" @.str.4354 = private unnamed_addr constant [2 x i8] c"'\00" @.str.4355 = private unnamed_addr constant [61 x i8] c"this is a temporary value, it can't be changed or pointed to\00" @.str.4356 = private unnamed_addr constant [4 x i8] c"var\00" @.str.4357 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4358 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.4359 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4360 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.4361 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4362 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4363 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4365 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.4366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4367 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.4368 = private unnamed_addr constant [8 x i8] c"fprintf\00" @.str.4369 = private unnamed_addr constant [6 x i8] c"stdin\00" @.str.4370 = private unnamed_addr constant [7 x i8] c"stdout\00" @.str.4371 = private unnamed_addr constant [7 x i8] c"stderr\00" @.str.4372 = private unnamed_addr constant [2 x i8] c"2\00" @.str.4373 = private unnamed_addr constant [6 x i8] c"stdin\00" @.str.4374 = private unnamed_addr constant [2 x i8] c"0\00" @.str.4375 = private unnamed_addr constant [7 x i8] c"stdout\00" @.str.4376 = private unnamed_addr constant [2 x i8] c"1\00" @.str.4377 = private unnamed_addr constant [32 x i8] c"call ptr @finch_std_stream(i32 \00" @.str.4378 = private unnamed_addr constant [2 x i8] c")\00" @.str.4379 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4380 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4381 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.4382 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4383 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.4384 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4385 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4386 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" @.str.4387 = private unnamed_addr constant [3 x i8] c"g:\00" @.str.4388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4389 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" @.str.4390 = private unnamed_addr constant [3 x i8] c"g:\00" @.str.4391 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4392 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" @.str.4393 = private unnamed_addr constant [2 x i8] c"@\00" @.str.4394 = private unnamed_addr constant [20 x i8] c" = external global \00" @.str.4395 = private unnamed_addr constant [2 x i8] c"@\00" @.str.4396 = private unnamed_addr constant [2 x i8] c"'\00" @.str.4397 = private unnamed_addr constant [44 x i8] c"' is a module; use something from it, like \00" @.str.4398 = private unnamed_addr constant [11 x i8] c".name(...)\00" @.str.4399 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00" @.str.4400 = private unnamed_addr constant [2 x i8] c"'\00" @.str.4401 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" @.str.4402 = private unnamed_addr constant [2 x i8] c" \00" @.str.4403 = private unnamed_addr constant [5 x i8] c"\0A```\00" @.str.4404 = private unnamed_addr constant [7 x i8] c"member\00" @.str.4405 = private unnamed_addr constant [6 x i8] c"index\00" @.str.4406 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4407 = private unnamed_addr constant [2 x i8] c".\00" @.str.4408 = private unnamed_addr constant [2 x i8] c"0\00" @.str.4409 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4410 = private unnamed_addr constant [2 x i8] c".\00" @.str.4411 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4412 = private unnamed_addr constant [2 x i8] c"e\00" @.str.4413 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4414 = private unnamed_addr constant [2 x i8] c"E\00" @.str.4415 = private unnamed_addr constant [3 x i8] c".0\00" @.str.4416 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4417 = private unnamed_addr constant [3 x i8] c".0\00" @.str.4418 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4419 = private unnamed_addr constant [4 x i8] c"var\00" @.str.4420 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4421 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.4422 = private unnamed_addr constant [7 x i8] c"member\00" @.str.4423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4424 = private unnamed_addr constant [4 x i8] c"var\00" @.str.4425 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4426 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4427 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4428 = private unnamed_addr constant [4 x i8] c"var\00" @.str.4429 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4430 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.4431 = private unnamed_addr constant [7 x i8] c"member\00" @.str.4432 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4433 = private unnamed_addr constant [4 x i8] c"var\00" @.str.4434 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4435 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4436 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4437 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4438 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" @.str.4439 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4440 = private unnamed_addr constant [10 x i8] c"the enum \00" @.str.4441 = private unnamed_addr constant [18 x i8] c" has no variant '\00" @.str.4442 = private unnamed_addr constant [12 x i8] c"' (it has: \00" @.str.4443 = private unnamed_addr constant [3 x i8] c", \00" @.str.4444 = private unnamed_addr constant [2 x i8] c")\00" @.str.4445 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4446 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" @.str.4447 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4449 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4450 = private unnamed_addr constant [23 x i8] c" holds nothing: write \00" @.str.4451 = private unnamed_addr constant [2 x i8] c".\00" @.str.4452 = private unnamed_addr constant [8 x i8] c" holds \00" @.str.4453 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4454 = private unnamed_addr constant [20 x i8] c" value(s), but got \00" @.str.4455 = private unnamed_addr constant [3 x i8] c": \00" @.str.4456 = private unnamed_addr constant [2 x i8] c".\00" @.str.4457 = private unnamed_addr constant [6 x i8] c"(...)\00" @.str.4458 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4459 = private unnamed_addr constant [4 x i8] c"tag\00" @.str.4460 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4461 = private unnamed_addr constant [2 x i8] c"_\00" @.str.4462 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" @.str.4463 = private unnamed_addr constant [2 x i8] c".\00" @.str.4464 = private unnamed_addr constant [5 x i8] c"\0A```\00" @.str.4465 = private unnamed_addr constant [1 x i8] c"\00" @.str.4466 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4467 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" @.str.4468 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4469 = private unnamed_addr constant [1 x i8] c"\00" @.str.4470 = private unnamed_addr constant [4 x i8] c"var\00" @.str.4471 = private unnamed_addr constant [5 x i8] c"call\00" @.str.4472 = private unnamed_addr constant [7 x i8] c"member\00" @.str.4473 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4474 = private unnamed_addr constant [7 x i8] c"method\00" @.str.4475 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4476 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4477 = private unnamed_addr constant [34 x i8] c"this pattern is not a variant of \00" @.str.4478 = private unnamed_addr constant [11 x i8] c" (it has: \00" @.str.4479 = private unnamed_addr constant [3 x i8] c", \00" @.str.4480 = private unnamed_addr constant [2 x i8] c")\00" @.str.4481 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4482 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4483 = private unnamed_addr constant [28 x i8] c" holds nothing: write just \00" @.str.4484 = private unnamed_addr constant [8 x i8] c" holds \00" @.str.4485 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4486 = private unnamed_addr constant [28 x i8] c" value(s): name them, like \00" @.str.4487 = private unnamed_addr constant [28 x i8] c"(x), or use _ to ignore one\00" @.str.4488 = private unnamed_addr constant [4 x i8] c"var\00" @.str.4489 = private unnamed_addr constant [51 x i8] c"write a name to hold the value (or _ to ignore it)\00" @.str.4490 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4491 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.4492 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4493 = private unnamed_addr constant [10 x i8] c"the enum \00" @.str.4494 = private unnamed_addr constant [18 x i8] c" has no variant '\00" @.str.4495 = private unnamed_addr constant [12 x i8] c"' (it has: \00" @.str.4496 = private unnamed_addr constant [3 x i8] c", \00" @.str.4497 = private unnamed_addr constant [2 x i8] c")\00" @.str.4498 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" @.str.4499 = private unnamed_addr constant [2 x i8] c".\00" @.str.4500 = private unnamed_addr constant [4 x i8] c" = \00" @.str.4501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4502 = private unnamed_addr constant [5 x i8] c"\0A```\00" @.str.4503 = private unnamed_addr constant [1 x i8] c"\00" @.str.4504 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4505 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.4506 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4507 = private unnamed_addr constant [38 x i8] c"a variant of an enum can't be changed\00" @.str.4508 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4509 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" @.str.4510 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4511 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4512 = private unnamed_addr constant [8 x i8] c" holds \00" @.str.4513 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4514 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" @.str.4515 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4517 = private unnamed_addr constant [12 x i8] c" value(s): \00" @.str.4518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4519 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" @.str.4520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4521 = private unnamed_addr constant [2 x i8] c".\00" @.str.4522 = private unnamed_addr constant [6 x i8] c"(...)\00" @.str.4523 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4524 = private unnamed_addr constant [38 x i8] c"a variant of an enum can't be changed\00" @.str.4525 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4526 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4527 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4528 = private unnamed_addr constant [58 x i8] c"this ptr has no type, so Finch doesn't know what's inside\00" @.str.4529 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" @.str.4530 = private unnamed_addr constant [7 x i8] c", null\00" @.str.4531 = private unnamed_addr constant [7 x i8] c"used .\00" @.str.4532 = private unnamed_addr constant [19 x i8] c" on a null pointer\00" @.str.4533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4534 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4535 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4536 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.4537 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4538 = private unnamed_addr constant [6 x i8] c"value\00" @.str.4539 = private unnamed_addr constant [6 x i8] c"value\00" @.str.4540 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4541 = private unnamed_addr constant [3 x i8] c"a \00" @.str.4542 = private unnamed_addr constant [44 x i8] c" only has '.value' (the thing it points to)\00" @.str.4543 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.4544 = private unnamed_addr constant [2 x i8] c".\00" @.str.4545 = private unnamed_addr constant [27 x i8] c" can't be changed directly\00" @.str.4546 = private unnamed_addr constant [4 x i8] c"len\00" @.str.4547 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4548 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4549 = private unnamed_addr constant [35 x i8] c"an array has .len and .ptr, not '.\00" @.str.4550 = private unnamed_addr constant [2 x i8] c"'\00" @.str.4551 = private unnamed_addr constant [49 x i8] c".ptr of a temporary value would point to nothing\00" @.str.4552 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4553 = private unnamed_addr constant [6 x i8] c"array\00" @.str.4554 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4555 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4556 = private unnamed_addr constant [31 x i8] c".ptr can't be changed directly\00" @.str.4557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4558 = private unnamed_addr constant [2 x i8] c"%\00" @.str.4559 = private unnamed_addr constant [54 x i8] c".ptr of a temporary value would point to freed memory\00" @.str.4560 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4561 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4562 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" @.str.4563 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4564 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4565 = private unnamed_addr constant [6 x i8] c"array\00" @.str.4566 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4567 = private unnamed_addr constant [4 x i8] c"map\00" @.str.4568 = private unnamed_addr constant [4 x i8] c"len\00" @.str.4569 = private unnamed_addr constant [38 x i8] c"an array, map or str has .len, not '.\00" @.str.4570 = private unnamed_addr constant [2 x i8] c"'\00" @.str.4571 = private unnamed_addr constant [49 x i8] c".len can't be changed directly (use push or pop)\00" @.str.4572 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.4573 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4574 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" @.str.4575 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.4576 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4577 = private unnamed_addr constant [14 x i8] c"extractvalue \00" @.str.4578 = private unnamed_addr constant [2 x i8] c" \00" @.str.4579 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.4580 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4581 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4582 = private unnamed_addr constant [22 x i8] c" has no fields (no '.\00" @.str.4583 = private unnamed_addr constant [3 x i8] c"')\00" @.str.4584 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4585 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.4586 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4587 = private unnamed_addr constant [12 x i8] c"the struct \00" @.str.4588 = private unnamed_addr constant [16 x i8] c" has no field '\00" @.str.4589 = private unnamed_addr constant [12 x i8] c"' (it has: \00" @.str.4590 = private unnamed_addr constant [3 x i8] c", \00" @.str.4591 = private unnamed_addr constant [2 x i8] c")\00" @.str.4592 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4593 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" @.str.4594 = private unnamed_addr constant [2 x i8] c" \00" @.str.4595 = private unnamed_addr constant [5 x i8] c"\0A```\00" @.str.4596 = private unnamed_addr constant [1 x i8] c"\00" @.str.4597 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.4598 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4599 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" @.str.4600 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4601 = private unnamed_addr constant [14 x i8] c"extractvalue \00" @.str.4602 = private unnamed_addr constant [2 x i8] c" \00" @.str.4603 = private unnamed_addr constant [3 x i8] c", \00" @.str.4604 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4605 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4606 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4607 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.4608 = private unnamed_addr constant [4 x i8] c"map\00" @.str.4609 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4610 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4611 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4612 = private unnamed_addr constant [9 x i8] c"an index\00" @.str.4613 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.4614 = private unnamed_addr constant [1 x i8] c"\00" @.str.4615 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.4616 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4617 = private unnamed_addr constant [14 x i8] c", i64 0, i64 \00" @.str.4618 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4619 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4620 = private unnamed_addr constant [58 x i8] c"this ptr has no type, so Finch doesn't know what's inside\00" @.str.4621 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4622 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4623 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.4624 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4625 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4626 = private unnamed_addr constant [6 x i8] c"array\00" @.str.4627 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4628 = private unnamed_addr constant [47 x i8] c"[ ] works on arrays, str and pointers, not on \00" @.str.4629 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4630 = private unnamed_addr constant [6 x i8] c"array\00" @.str.4631 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4632 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4633 = private unnamed_addr constant [45 x i8] c"this is a temporary str, it can't be changed\00" @.str.4634 = private unnamed_addr constant [30 x i8] c"call void @finch_str_own(ptr \00" @.str.4635 = private unnamed_addr constant [2 x i8] c")\00" @.str.4636 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4637 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" @.str.4638 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.4639 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" @.str.4640 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4641 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.4642 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4643 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4644 = private unnamed_addr constant [18 x i8] c"named arguments (\00" @.str.4645 = private unnamed_addr constant [37 x i8] c": ...) are only for creating structs\00" @.str.4646 = private unnamed_addr constant [2 x i8] c"'\00" @.str.4647 = private unnamed_addr constant [9 x i8] c"' takes \00" @.str.4648 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00" @.str.4649 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4650 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4651 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.4652 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4653 = private unnamed_addr constant [4 x i8] c"f64\00" @.str.4654 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4655 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4656 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4657 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4658 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4659 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.4660 = private unnamed_addr constant [4 x i8] c"i16\00" @.str.4661 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.4662 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.4663 = private unnamed_addr constant [4 x i8] c"u16\00" @.str.4664 = private unnamed_addr constant [4 x i8] c"u32\00" @.str.4665 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.4666 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.4667 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4668 = private unnamed_addr constant [1 x i8] c"\00" @.str.4669 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4670 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4671 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4672 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" @.str.4673 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4674 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4675 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.4676 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.4677 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.4678 = private unnamed_addr constant [2 x i8] c"0\00" @.str.4679 = private unnamed_addr constant [33 x i8] c"call i32 @finch_str_try_int(ptr \00" @.str.4680 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4681 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4682 = private unnamed_addr constant [2 x i8] c")\00" @.str.4683 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" @.str.4684 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4685 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4686 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.4687 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4688 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4689 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.4690 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.4691 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4692 = private unnamed_addr constant [7 x i8] c"double\00" @.str.4693 = private unnamed_addr constant [7 x i8] c"double\00" @.str.4694 = private unnamed_addr constant [4 x i8] c"0.0\00" @.str.4695 = private unnamed_addr constant [35 x i8] c"call i32 @finch_str_try_float(ptr \00" @.str.4696 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4697 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4698 = private unnamed_addr constant [2 x i8] c")\00" @.str.4699 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" @.str.4700 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4701 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4702 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.4703 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4704 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4705 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.4706 = private unnamed_addr constant [7 x i8] c"double\00" @.str.4707 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4708 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4709 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4710 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.4711 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4712 = private unnamed_addr constant [32 x i8] c"call i64 @finch_str_to_int(ptr \00" @.str.4713 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4714 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4715 = private unnamed_addr constant [2 x i8] c")\00" @.str.4716 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4717 = private unnamed_addr constant [37 x i8] c"call double @finch_str_to_float(ptr \00" @.str.4718 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4719 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4720 = private unnamed_addr constant [2 x i8] c")\00" @.str.4721 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4722 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.4723 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.4724 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4725 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4726 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4727 = private unnamed_addr constant [9 x i8] c"zext i1 \00" @.str.4728 = private unnamed_addr constant [5 x i8] c" to \00" @.str.4729 = private unnamed_addr constant [7 x i8] c"fptoui\00" @.str.4730 = private unnamed_addr constant [7 x i8] c"fptosi\00" @.str.4731 = private unnamed_addr constant [2 x i8] c" \00" @.str.4732 = private unnamed_addr constant [2 x i8] c" \00" @.str.4733 = private unnamed_addr constant [5 x i8] c" to \00" @.str.4734 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4735 = private unnamed_addr constant [9 x i8] c"icmp ne \00" @.str.4736 = private unnamed_addr constant [2 x i8] c" \00" @.str.4737 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4738 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4739 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4740 = private unnamed_addr constant [5 x i8] c"null\00" @.str.4741 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4742 = private unnamed_addr constant [14 x i8] c"inttoptr i64 \00" @.str.4743 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.4744 = private unnamed_addr constant [8 x i8] c" to ptr\00" @.str.4745 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4746 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" @.str.4747 = private unnamed_addr constant [5 x i8] c" to \00" @.str.4748 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4749 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4750 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4751 = private unnamed_addr constant [71 x i8] c"use .ptr to get a str's address (it is only valid while the str lives)\00" @.str.4752 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4753 = private unnamed_addr constant [12 x i8] c"can't turn \00" @.str.4754 = private unnamed_addr constant [7 x i8] c" into \00" @.str.4755 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4756 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4757 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.4758 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4759 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.4760 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4761 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4762 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4763 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4764 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.4765 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4766 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4767 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4768 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.4769 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4770 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4771 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4772 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.4773 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4774 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4775 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4776 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4777 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4778 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4779 = private unnamed_addr constant [7 x i8] c"double\00" @.str.4780 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4781 = private unnamed_addr constant [2 x i8] c"[\00" @.str.4782 = private unnamed_addr constant [4 x i8] c" x \00" @.str.4783 = private unnamed_addr constant [2 x i8] c"]\00" @.str.4784 = private unnamed_addr constant [3 x i8] c"{ \00" @.str.4785 = private unnamed_addr constant [3 x i8] c", \00" @.str.4786 = private unnamed_addr constant [3 x i8] c" }\00" @.str.4787 = private unnamed_addr constant [9 x i8] c"indirect\00" @.str.4788 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4789 = private unnamed_addr constant [5 x i8] c"i128\00" @.str.4790 = private unnamed_addr constant [5 x i8] c"i128\00" @.str.4791 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.4792 = private unnamed_addr constant [2 x i8] c"i\00" @.str.4793 = private unnamed_addr constant [10 x i8] c"[2 x i64]\00" @.str.4794 = private unnamed_addr constant [10 x i8] c"[2 x i64]\00" @.str.4795 = private unnamed_addr constant [7 x i8] c"direct\00" @.str.4796 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4797 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4798 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.4799 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4800 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4801 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.4802 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4803 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.4804 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4805 = private unnamed_addr constant [2 x i8] c"i\00" @.str.4806 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4807 = private unnamed_addr constant [9 x i8] c"indirect\00" @.str.4808 = private unnamed_addr constant [7 x i8] c"memory\00" @.str.4809 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4810 = private unnamed_addr constant [17 x i8] c"division by zero\00" @.str.4811 = private unnamed_addr constant [7 x i8] c"memory\00" @.str.4812 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4813 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4814 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4815 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4816 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4817 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4818 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4819 = private unnamed_addr constant [7 x i8] c"double\00" @.str.4820 = private unnamed_addr constant [12 x i8] c"<2 x float>\00" @.str.4821 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4822 = private unnamed_addr constant [2 x i8] c"i\00" @.str.4823 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4824 = private unnamed_addr constant [3 x i8] c"{ \00" @.str.4825 = private unnamed_addr constant [3 x i8] c", \00" @.str.4826 = private unnamed_addr constant [3 x i8] c" }\00" @.str.4827 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4828 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4829 = private unnamed_addr constant [9 x i8] c"indirect\00" @.str.4830 = private unnamed_addr constant [7 x i8] c"memory\00" @.str.4831 = private unnamed_addr constant [7 x i8] c"memory\00" @.str.4832 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4833 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4834 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4835 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4836 = private unnamed_addr constant [2 x i8] c"i\00" @.str.4837 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4838 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.4839 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4840 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.4841 = private unnamed_addr constant [7 x i8] c"memory\00" @.str.4842 = private unnamed_addr constant [7 x i8] c"direct\00" @.str.4843 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4844 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4845 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.4846 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4847 = private unnamed_addr constant [17 x i8] c"the C function '\00" @.str.4848 = private unnamed_addr constant [3 x i8] c"' \00" @.str.4849 = private unnamed_addr constant [19 x i8] c" the Finch struct \00" @.str.4850 = private unnamed_addr constant [21 x i8] c", which C can't take\00" @.str.4851 = private unnamed_addr constant [17 x i8] c"the C function '\00" @.str.4852 = private unnamed_addr constant [3 x i8] c"' \00" @.str.4853 = private unnamed_addr constant [13 x i8] c" the struct \00" @.str.4854 = private unnamed_addr constant [41 x i8] c" by value, which Finch can't do yet: it \00" @.str.4855 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4856 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4857 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4858 = private unnamed_addr constant [60 x i8] c"methods can't be exported (export a plain fn that calls it)\00" @.str.4859 = private unnamed_addr constant [75 x i8] c"an export fn can't fail (C has no errors as values): handle them inside it\00" @.str.4860 = private unnamed_addr constant [30 x i8] c"an export fn can't be generic\00" @.str.4861 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4862 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4863 = private unnamed_addr constant [67 x i8] c"an export fn takes numbers, bool, char and pointers only (this is \00" @.str.4864 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4865 = private unnamed_addr constant [51 x i8] c"; pass text as ptr[char] and make it a str inside)\00" @.str.4866 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4867 = private unnamed_addr constant [70 x i8] c"an export fn returns nothing, a number, bool, char or a pointer (not \00" @.str.4868 = private unnamed_addr constant [2 x i8] c")\00" @.str.4869 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4870 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.4871 = private unnamed_addr constant [2 x i8] c"'\00" @.str.4872 = private unnamed_addr constant [39 x i8] c"' is exported twice (from two modules)\00" @.str.4873 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4874 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4875 = private unnamed_addr constant [14 x i8] c"i8 zeroext %e\00" @.str.4876 = private unnamed_addr constant [4 x i8] c"i1 \00" @.str.4877 = private unnamed_addr constant [14 x i8] c"icmp ne i8 %e\00" @.str.4878 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4879 = private unnamed_addr constant [4 x i8] c" %e\00" @.str.4880 = private unnamed_addr constant [4 x i8] c" %e\00" @.str.4881 = private unnamed_addr constant [6 x i8] c"call \00" @.str.4882 = private unnamed_addr constant [2 x i8] c" \00" @.str.4883 = private unnamed_addr constant [2 x i8] c"(\00" @.str.4884 = private unnamed_addr constant [3 x i8] c", \00" @.str.4885 = private unnamed_addr constant [2 x i8] c")\00" @.str.4886 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4887 = private unnamed_addr constant [1 x i8] c"\00" @.str.4888 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4889 = private unnamed_addr constant [9 x i8] c"ret void\00" @.str.4890 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4891 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.4892 = private unnamed_addr constant [9 x i8] c" zeroext\00" @.str.4893 = private unnamed_addr constant [8 x i8] c"ret i8 \00" @.str.4894 = private unnamed_addr constant [9 x i8] c"zext i1 \00" @.str.4895 = private unnamed_addr constant [7 x i8] c" to i8\00" @.str.4896 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.4897 = private unnamed_addr constant [2 x i8] c" \00" @.str.4898 = private unnamed_addr constant [1 x i8] c"\00" @.str.4899 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4900 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.4901 = private unnamed_addr constant [11 x i8] c" dllexport\00" @.str.4902 = private unnamed_addr constant [7 x i8] c"define\00" @.str.4903 = private unnamed_addr constant [2 x i8] c" \00" @.str.4904 = private unnamed_addr constant [3 x i8] c" @\00" @.str.4905 = private unnamed_addr constant [2 x i8] c"(\00" @.str.4906 = private unnamed_addr constant [3 x i8] c", \00" @.str.4907 = private unnamed_addr constant [2 x i8] c")\00" @.str.4908 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4909 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.4910 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4911 = private unnamed_addr constant [10 x i8] c"@finch.c.\00" @.str.4912 = private unnamed_addr constant [2 x i8] c".\00" @.str.4913 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4914 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" @.str.4915 = private unnamed_addr constant [3 x i8] c"t:\00" @.str.4916 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4917 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" @.str.4918 = private unnamed_addr constant [3 x i8] c"t:\00" @.str.4919 = private unnamed_addr constant [6 x i8] c"addr(\00" @.str.4920 = private unnamed_addr constant [82 x i8] c") gives C a function pointer, so it can't be a method or a function that can fail\00" @.str.4921 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4922 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4923 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4924 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4925 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4926 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.4927 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4928 = private unnamed_addr constant [6 x i8] c"addr(\00" @.str.4929 = private unnamed_addr constant [96 x i8] c") gives C a function pointer, so its parameters must be C types (numbers, ptr, C structs), not \00" @.str.4930 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4931 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4932 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4933 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4934 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4935 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4936 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.4937 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4938 = private unnamed_addr constant [6 x i8] c"addr(\00" @.str.4939 = private unnamed_addr constant [39 x i8] c"): a function given to C can't return \00" @.str.4940 = private unnamed_addr constant [1 x i8] c"\00" @.str.4941 = private unnamed_addr constant [10 x i8] c"ptr sret(\00" @.str.4942 = private unnamed_addr constant [15 x i8] c") align 16 %c0\00" @.str.4943 = private unnamed_addr constant [4 x i8] c"%c0\00" @.str.4944 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4945 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4946 = private unnamed_addr constant [7 x i8] c"memory\00" @.str.4947 = private unnamed_addr constant [11 x i8] c"ptr byval(\00" @.str.4948 = private unnamed_addr constant [9 x i8] c") align \00" @.str.4949 = private unnamed_addr constant [4 x i8] c" %c\00" @.str.4950 = private unnamed_addr constant [2 x i8] c" \00" @.str.4951 = private unnamed_addr constant [3 x i8] c"%c\00" @.str.4952 = private unnamed_addr constant [9 x i8] c"indirect\00" @.str.4953 = private unnamed_addr constant [7 x i8] c"ptr %c\00" @.str.4954 = private unnamed_addr constant [2 x i8] c" \00" @.str.4955 = private unnamed_addr constant [3 x i8] c"%c\00" @.str.4956 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4957 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" @.str.4958 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4959 = private unnamed_addr constant [4 x i8] c" %c\00" @.str.4960 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4961 = private unnamed_addr constant [3 x i8] c"%c\00" @.str.4962 = private unnamed_addr constant [32 x i8] c"getelementptr inbounds i8, ptr \00" @.str.4963 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4964 = private unnamed_addr constant [2 x i8] c" \00" @.str.4965 = private unnamed_addr constant [4 x i8] c" %c\00" @.str.4966 = private unnamed_addr constant [4 x i8] c" %c\00" @.str.4967 = private unnamed_addr constant [6 x i8] c"call \00" @.str.4968 = private unnamed_addr constant [2 x i8] c" \00" @.str.4969 = private unnamed_addr constant [2 x i8] c"(\00" @.str.4970 = private unnamed_addr constant [3 x i8] c", \00" @.str.4971 = private unnamed_addr constant [2 x i8] c")\00" @.str.4972 = private unnamed_addr constant [1 x i8] c"\00" @.str.4973 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4974 = private unnamed_addr constant [9 x i8] c"ret void\00" @.str.4975 = private unnamed_addr constant [9 x i8] c"ret void\00" @.str.4976 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4977 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" @.str.4978 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.4979 = private unnamed_addr constant [2 x i8] c" \00" @.str.4980 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.4981 = private unnamed_addr constant [2 x i8] c" \00" @.str.4982 = private unnamed_addr constant [16 x i8] c"define internal\00" @.str.4983 = private unnamed_addr constant [2 x i8] c" \00" @.str.4984 = private unnamed_addr constant [2 x i8] c" \00" @.str.4985 = private unnamed_addr constant [2 x i8] c"(\00" @.str.4986 = private unnamed_addr constant [3 x i8] c", \00" @.str.4987 = private unnamed_addr constant [2 x i8] c")\00" @.str.4988 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4989 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.4990 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4991 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4992 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4993 = private unnamed_addr constant [55 x i8] c"(...) turns a whole number into the enum, but this is \00" @.str.4994 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.4995 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4996 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4997 = private unnamed_addr constant [38 x i8] c" is not the number of any variant of \00" @.str.4998 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4999 = private unnamed_addr constant [1 x i8] c"\00" @.str.5000 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" @.str.5001 = private unnamed_addr constant [3 x i8] c", \00" @.str.5002 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5003 = private unnamed_addr constant [7 x i8] c"or i1 \00" @.str.5004 = private unnamed_addr constant [3 x i8] c", \00" @.str.5005 = private unnamed_addr constant [8 x i8] c"xor i1 \00" @.str.5006 = private unnamed_addr constant [7 x i8] c", true\00" @.str.5007 = private unnamed_addr constant [33 x i8] c"this number is not a variant of \00" @.str.5008 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" @.str.5009 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.5010 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.5011 = private unnamed_addr constant [9 x i8] c" zeroext\00" @.str.5012 = private unnamed_addr constant [5 x i8] c"char\00" @.str.5013 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5014 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.5015 = private unnamed_addr constant [9 x i8] c" signext\00" @.str.5016 = private unnamed_addr constant [5 x i8] c"char\00" @.str.5017 = private unnamed_addr constant [9 x i8] c" zeroext\00" @.str.5018 = private unnamed_addr constant [1 x i8] c"\00" @.str.5019 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5020 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5021 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5022 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.5023 = private unnamed_addr constant [4 x i8] c"...\00" @.str.5024 = private unnamed_addr constant [18 x i8] c"C function from `\00" @.str.5025 = private unnamed_addr constant [8 x i8] c"`\0A```c\0A\00" @.str.5026 = private unnamed_addr constant [2 x i8] c" \00" @.str.5027 = private unnamed_addr constant [2 x i8] c"(\00" @.str.5028 = private unnamed_addr constant [3 x i8] c", \00" @.str.5029 = private unnamed_addr constant [6 x i8] c")\0A```\00" @.str.5030 = private unnamed_addr constant [1 x i8] c"\00" @.str.5031 = private unnamed_addr constant [17 x i8] c"the C function '\00" @.str.5032 = private unnamed_addr constant [36 x i8] c"' can't be used from Finch yet: it \00" @.str.5033 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5034 = private unnamed_addr constant [18 x i8] c"' takes at least \00" @.str.5035 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00" @.str.5036 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5037 = private unnamed_addr constant [9 x i8] c"' takes \00" @.str.5038 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00" @.str.5039 = private unnamed_addr constant [8 x i8] c"returns\00" @.str.5040 = private unnamed_addr constant [6 x i8] c"takes\00" @.str.5041 = private unnamed_addr constant [1 x i8] c"\00" @.str.5042 = private unnamed_addr constant [10 x i8] c"ptr sret(\00" @.str.5043 = private unnamed_addr constant [11 x i8] c") align 16\00" @.str.5044 = private unnamed_addr constant [10 x i8] c"ptr sret(\00" @.str.5045 = private unnamed_addr constant [12 x i8] c") align 16 \00" @.str.5046 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5047 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.5048 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5049 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5050 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5051 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5052 = private unnamed_addr constant [10 x i8] c"argument \00" @.str.5053 = private unnamed_addr constant [5 x i8] c" of \00" @.str.5054 = private unnamed_addr constant [7 x i8] c"memory\00" @.str.5055 = private unnamed_addr constant [11 x i8] c"ptr byval(\00" @.str.5056 = private unnamed_addr constant [9 x i8] c") align \00" @.str.5057 = private unnamed_addr constant [2 x i8] c" \00" @.str.5058 = private unnamed_addr constant [9 x i8] c"indirect\00" @.str.5059 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5060 = private unnamed_addr constant [5 x i8] c"ptr \00" @.str.5061 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.5062 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" @.str.5063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5064 = private unnamed_addr constant [32 x i8] c"getelementptr inbounds i8, ptr \00" @.str.5065 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5066 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5067 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5068 = private unnamed_addr constant [2 x i8] c" \00" @.str.5069 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5070 = private unnamed_addr constant [5 x i8] c"ptr \00" @.str.5071 = private unnamed_addr constant [2 x i8] c" \00" @.str.5072 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5073 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5074 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5075 = private unnamed_addr constant [24 x i8] c"this gives back nothing\00" @.str.5076 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.5077 = private unnamed_addr constant [6 x i8] c"array\00" @.str.5078 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5079 = private unnamed_addr constant [69 x i8] c"structs and arrays can't be passed to the '...' part of a C function\00" @.str.5080 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.5081 = private unnamed_addr constant [6 x i8] c"float\00" @.str.5082 = private unnamed_addr constant [6 x i8] c"float\00" @.str.5083 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5084 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5085 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.5086 = private unnamed_addr constant [9 x i8] c"zext i1 \00" @.str.5087 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.5088 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.5089 = private unnamed_addr constant [5 x i8] c"char\00" @.str.5090 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.5091 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.5092 = private unnamed_addr constant [2 x i8] c" \00" @.str.5093 = private unnamed_addr constant [1 x i8] c"\00" @.str.5094 = private unnamed_addr constant [7 x i8] c"direct\00" @.str.5095 = private unnamed_addr constant [1 x i8] c"\00" @.str.5096 = private unnamed_addr constant [6 x i8] c", ...\00" @.str.5097 = private unnamed_addr constant [4 x i8] c"...\00" @.str.5098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5099 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" @.str.5100 = private unnamed_addr constant [3 x i8] c"f:\00" @.str.5101 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5102 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" @.str.5103 = private unnamed_addr constant [3 x i8] c"f:\00" @.str.5104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5105 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" @.str.5106 = private unnamed_addr constant [8 x i8] c"declare\00" @.str.5107 = private unnamed_addr constant [2 x i8] c" \00" @.str.5108 = private unnamed_addr constant [3 x i8] c" @\00" @.str.5109 = private unnamed_addr constant [2 x i8] c"(\00" @.str.5110 = private unnamed_addr constant [3 x i8] c", \00" @.str.5111 = private unnamed_addr constant [2 x i8] c")\00" @.str.5112 = private unnamed_addr constant [1 x i8] c"\00" @.str.5113 = private unnamed_addr constant [3 x i8] c" (\00" @.str.5114 = private unnamed_addr constant [3 x i8] c", \00" @.str.5115 = private unnamed_addr constant [2 x i8] c")\00" @.str.5116 = private unnamed_addr constant [5 x i8] c"call\00" @.str.5117 = private unnamed_addr constant [2 x i8] c" \00" @.str.5118 = private unnamed_addr constant [3 x i8] c" @\00" @.str.5119 = private unnamed_addr constant [2 x i8] c"(\00" @.str.5120 = private unnamed_addr constant [3 x i8] c", \00" @.str.5121 = private unnamed_addr constant [2 x i8] c")\00" @.str.5122 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5123 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.5124 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" @.str.5125 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5126 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5127 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.5128 = private unnamed_addr constant [33 x i8] c"call void @finch_str_from_c(ptr \00" @.str.5129 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5130 = private unnamed_addr constant [2 x i8] c")\00" @.str.5131 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5132 = private unnamed_addr constant [7 x i8] c"printf\00" @.str.5133 = private unnamed_addr constant [7 x i8] c"fflush\00" @.str.5134 = private unnamed_addr constant [5 x i8] c"exit\00" @.str.5135 = private unnamed_addr constant [5 x i8] c"free\00" @.str.5136 = private unnamed_addr constant [6 x i8] c"qsort\00" @.str.5137 = private unnamed_addr constant [7 x i8] c"printf\00" @.str.5138 = private unnamed_addr constant [5 x i8] c"puts\00" @.str.5139 = private unnamed_addr constant [8 x i8] c"putchar\00" @.str.5140 = private unnamed_addr constant [6 x i8] c"scanf\00" @.str.5141 = private unnamed_addr constant [6 x i8] c"fopen\00" @.str.5142 = private unnamed_addr constant [8 x i8] c"getchar\00" @.str.5143 = private unnamed_addr constant [5 x i8] c"sqrt\00" @.str.5144 = private unnamed_addr constant [4 x i8] c"pow\00" @.str.5145 = private unnamed_addr constant [4 x i8] c"sin\00" @.str.5146 = private unnamed_addr constant [4 x i8] c"cos\00" @.str.5147 = private unnamed_addr constant [6 x i8] c"floor\00" @.str.5148 = private unnamed_addr constant [5 x i8] c"fabs\00" @.str.5149 = private unnamed_addr constant [7 x i8] c"malloc\00" @.str.5150 = private unnamed_addr constant [5 x i8] c"rand\00" @.str.5151 = private unnamed_addr constant [6 x i8] c"srand\00" @.str.5152 = private unnamed_addr constant [4 x i8] c"abs\00" @.str.5153 = private unnamed_addr constant [5 x i8] c"atoi\00" @.str.5154 = private unnamed_addr constant [7 x i8] c"strlen\00" @.str.5155 = private unnamed_addr constant [7 x i8] c"strcpy\00" @.str.5156 = private unnamed_addr constant [7 x i8] c"memcpy\00" @.str.5157 = private unnamed_addr constant [5 x i8] c"time\00" @.str.5158 = private unnamed_addr constant [6 x i8] c"sleep\00" @.str.5159 = private unnamed_addr constant [7 x i8] c"usleep\00" @.str.5160 = private unnamed_addr constant [8 x i8] c"stdio.h\00" @.str.5161 = private unnamed_addr constant [8 x i8] c"stdio.h\00" @.str.5162 = private unnamed_addr constant [8 x i8] c"stdio.h\00" @.str.5163 = private unnamed_addr constant [8 x i8] c"stdio.h\00" @.str.5164 = private unnamed_addr constant [8 x i8] c"stdio.h\00" @.str.5165 = private unnamed_addr constant [8 x i8] c"stdio.h\00" @.str.5166 = private unnamed_addr constant [7 x i8] c"math.h\00" @.str.5167 = private unnamed_addr constant [7 x i8] c"math.h\00" @.str.5168 = private unnamed_addr constant [7 x i8] c"math.h\00" @.str.5169 = private unnamed_addr constant [7 x i8] c"math.h\00" @.str.5170 = private unnamed_addr constant [7 x i8] c"math.h\00" @.str.5171 = private unnamed_addr constant [7 x i8] c"math.h\00" @.str.5172 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" @.str.5173 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" @.str.5174 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" @.str.5175 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" @.str.5176 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" @.str.5177 = private unnamed_addr constant [9 x i8] c"string.h\00" @.str.5178 = private unnamed_addr constant [9 x i8] c"string.h\00" @.str.5179 = private unnamed_addr constant [9 x i8] c"string.h\00" @.str.5180 = private unnamed_addr constant [7 x i8] c"time.h\00" @.str.5181 = private unnamed_addr constant [9 x i8] c"unistd.h\00" @.str.5182 = private unnamed_addr constant [9 x i8] c"unistd.h\00" @.str.5183 = private unnamed_addr constant [1 x i8] c"\00" @.str.5184 = private unnamed_addr constant [29 x i8] c" (it's from C: add import \22\00" @.str.5185 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5186 = private unnamed_addr constant [15 x i8] c"\22 at the top)\00" @.str.5187 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5188 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.5189 = private unnamed_addr constant [1 x i8] c"\00" @.str.5190 = private unnamed_addr constant [6 x i8] c"error\00" @.str.5191 = private unnamed_addr constant [87 x i8] c"error(...) makes an error to return from a function that can fail: return error(\22...\22)\00" @.str.5192 = private unnamed_addr constant [6 x i8] c"print\00" @.str.5193 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5194 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5195 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5196 = private unnamed_addr constant [54 x i8] c"this gives back nothing, so there is nothing to print\00" @.str.5197 = private unnamed_addr constant [2 x i8] c" \00" @.str.5198 = private unnamed_addr constant [1 x i8] c"\00" @.str.5199 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.5200 = private unnamed_addr constant [1 x i8] c"\00" @.str.5201 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5202 = private unnamed_addr constant [5 x i8] c"addr\00" @.str.5203 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5204 = private unnamed_addr constant [4 x i8] c"var\00" @.str.5205 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5206 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5207 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5208 = private unnamed_addr constant [4 x i8] c"var\00" @.str.5209 = private unnamed_addr constant [7 x i8] c"member\00" @.str.5210 = private unnamed_addr constant [6 x i8] c"index\00" @.str.5211 = private unnamed_addr constant [64 x i8] c"addr(...) needs a variable, a field or an element, like addr(x)\00" @.str.5212 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5213 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5214 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5215 = private unnamed_addr constant [35 x i8] c"call void @finch_str_from_int(ptr \00" @.str.5216 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5217 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5218 = private unnamed_addr constant [2 x i8] c")\00" @.str.5219 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_uint(ptr \00" @.str.5220 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5221 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.5222 = private unnamed_addr constant [2 x i8] c")\00" @.str.5223 = private unnamed_addr constant [37 x i8] c"call void @finch_str_from_float(ptr \00" @.str.5224 = private unnamed_addr constant [10 x i8] c", double \00" @.str.5225 = private unnamed_addr constant [6 x i8] c"float\00" @.str.5226 = private unnamed_addr constant [2 x i8] c")\00" @.str.5227 = private unnamed_addr constant [5 x i8] c"char\00" @.str.5228 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_char(ptr \00" @.str.5229 = private unnamed_addr constant [14 x i8] c", i8 signext \00" @.str.5230 = private unnamed_addr constant [2 x i8] c")\00" @.str.5231 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.5232 = private unnamed_addr constant [9 x i8] c"zext i1 \00" @.str.5233 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.5234 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_bool(ptr \00" @.str.5235 = private unnamed_addr constant [7 x i8] c", i32 \00" @.str.5236 = private unnamed_addr constant [2 x i8] c")\00" @.str.5237 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5238 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5239 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.5240 = private unnamed_addr constant [33 x i8] c"call void @finch_str_from_c(ptr \00" @.str.5241 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5242 = private unnamed_addr constant [2 x i8] c")\00" @.str.5243 = private unnamed_addr constant [6 x i8] c"array\00" @.str.5244 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5245 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.5246 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5247 = private unnamed_addr constant [5 x i8] c"char\00" @.str.5248 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5249 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.5250 = private unnamed_addr constant [37 x i8] c"call void @finch_str_from_bytes(ptr \00" @.str.5251 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5252 = private unnamed_addr constant [2 x i8] c")\00" @.str.5253 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.5254 = private unnamed_addr constant [5 x i8] c"char\00" @.str.5255 = private unnamed_addr constant [6 x i8] c"array\00" @.str.5256 = private unnamed_addr constant [4 x i8] c"map\00" @.str.5257 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.5258 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.5259 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5260 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.5261 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5262 = private unnamed_addr constant [12 x i8] c"can't turn \00" @.str.5263 = private unnamed_addr constant [10 x i8] c" into str\00" @.str.5264 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5265 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5266 = private unnamed_addr constant [10 x i8] c"read_file\00" @.str.5267 = private unnamed_addr constant [12 x i8] c"file_exists\00" @.str.5268 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5269 = private unnamed_addr constant [14 x i8] c"the file name\00" @.str.5270 = private unnamed_addr constant [12 x i8] c"file_exists\00" @.str.5271 = private unnamed_addr constant [33 x i8] c"call i32 @finch_file_exists(ptr \00" @.str.5272 = private unnamed_addr constant [2 x i8] c")\00" @.str.5273 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" @.str.5274 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5275 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.5276 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5277 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" @.str.5278 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5279 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5280 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.5281 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5282 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.5283 = private unnamed_addr constant [35 x i8] c"call i32 @finch_try_read_file(ptr \00" @.str.5284 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5285 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5286 = private unnamed_addr constant [2 x i8] c")\00" @.str.5287 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" @.str.5288 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5289 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5290 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.5291 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5292 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5293 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.5294 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5295 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5296 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5297 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.5298 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5299 = private unnamed_addr constant [32 x i8] c"call void @finch_read_file(ptr \00" @.str.5300 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5301 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5302 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5303 = private unnamed_addr constant [2 x i8] c")\00" @.str.5304 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5305 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5306 = private unnamed_addr constant [11 x i8] c"write_file\00" @.str.5307 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5308 = private unnamed_addr constant [14 x i8] c"the file name\00" @.str.5309 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5310 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.5311 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5312 = private unnamed_addr constant [9 x i8] c"the text\00" @.str.5313 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5314 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" @.str.5315 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5316 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5317 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.5318 = private unnamed_addr constant [36 x i8] c"call i32 @finch_try_write_file(ptr \00" @.str.5319 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5320 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5321 = private unnamed_addr constant [2 x i8] c")\00" @.str.5322 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" @.str.5323 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5324 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5325 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.5326 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5327 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5328 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.5329 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5330 = private unnamed_addr constant [32 x i8] c"call i32 @finch_write_file(ptr \00" @.str.5331 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5332 = private unnamed_addr constant [2 x i8] c")\00" @.str.5333 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" @.str.5334 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5335 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.5336 = private unnamed_addr constant [12 x i8] c"delete_file\00" @.str.5337 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5338 = private unnamed_addr constant [14 x i8] c"the file name\00" @.str.5339 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00" @.str.5340 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5341 = private unnamed_addr constant [2 x i8] c")\00" @.str.5342 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5343 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" @.str.5344 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5345 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5346 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.5347 = private unnamed_addr constant [37 x i8] c"call i32 @finch_try_delete_file(ptr \00" @.str.5348 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5349 = private unnamed_addr constant [2 x i8] c")\00" @.str.5350 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" @.str.5351 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5352 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5353 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.5354 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5355 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5356 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.5357 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5358 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5359 = private unnamed_addr constant [33 x i8] c"call i32 @finch_delete_file(ptr \00" @.str.5360 = private unnamed_addr constant [2 x i8] c")\00" @.str.5361 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5362 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" @.str.5363 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5364 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.5365 = private unnamed_addr constant [6 x i8] c"shell\00" @.str.5366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5367 = private unnamed_addr constant [12 x i8] c"the command\00" @.str.5368 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00" @.str.5369 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5370 = private unnamed_addr constant [2 x i8] c")\00" @.str.5371 = private unnamed_addr constant [27 x i8] c"call i64 @finch_shell(ptr \00" @.str.5372 = private unnamed_addr constant [2 x i8] c")\00" @.str.5373 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5374 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5375 = private unnamed_addr constant [5 x i8] c"exit\00" @.str.5376 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5377 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5378 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5379 = private unnamed_addr constant [14 x i8] c"the exit code\00" @.str.5380 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" @.str.5381 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.5382 = private unnamed_addr constant [27 x i8] c"call i32 @fflush(ptr null)\00" @.str.5383 = private unnamed_addr constant [21 x i8] c"call void @exit(i32 \00" @.str.5384 = private unnamed_addr constant [2 x i8] c")\00" @.str.5385 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5386 = private unnamed_addr constant [6 x i8] c"input\00" @.str.5387 = private unnamed_addr constant [1 x i8] c"\00" @.str.5388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5389 = private unnamed_addr constant [13 x i8] c"the question\00" @.str.5390 = private unnamed_addr constant [28 x i8] c"call void @finch_input(ptr \00" @.str.5391 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5392 = private unnamed_addr constant [2 x i8] c")\00" @.str.5393 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5394 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5395 = private unnamed_addr constant [4 x i8] c"new\00" @.str.5396 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5397 = private unnamed_addr constant [27 x i8] c"call ptr @finch_alloc(i64 \00" @.str.5398 = private unnamed_addr constant [2 x i8] c")\00" @.str.5399 = private unnamed_addr constant [5 x i8] c"free\00" @.str.5400 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5401 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5402 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5403 = private unnamed_addr constant [120 x i8] c"free(...) is only for pointers from new(...) or C; arrays, str and structs are freed by Finch at the end of their block\00" @.str.5404 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5405 = private unnamed_addr constant [10 x i8] c"free.drop\00" @.str.5406 = private unnamed_addr constant [10 x i8] c"free.done\00" @.str.5407 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" @.str.5408 = private unnamed_addr constant [7 x i8] c", null\00" @.str.5409 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5410 = private unnamed_addr constant [21 x i8] c"call void @free(ptr \00" @.str.5411 = private unnamed_addr constant [2 x i8] c")\00" @.str.5412 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5413 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5414 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5415 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5416 = private unnamed_addr constant [48 x i8] c"' is not generic, so it takes no type arguments\00" @.str.5417 = private unnamed_addr constant [1 x i8] c"\00" @.str.5418 = private unnamed_addr constant [1 x i8] c"\00" @.str.5419 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5420 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5421 = private unnamed_addr constant [1 x i8] c"\00" @.str.5422 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5423 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5424 = private unnamed_addr constant [1 x i8] c"\00" @.str.5425 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5426 = private unnamed_addr constant [43 x i8] c"' is generic, so say which type it holds: \00" @.str.5427 = private unnamed_addr constant [11 x i8] c"[int](...)\00" @.str.5428 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5429 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5430 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5431 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5432 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5433 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.5434 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5435 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5436 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.5437 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5438 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.5439 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5440 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5441 = private unnamed_addr constant [17 x i8] c"```finch\0Astruct \00" @.str.5442 = private unnamed_addr constant [4 x i8] c" { \00" @.str.5443 = private unnamed_addr constant [3 x i8] c", \00" @.str.5444 = private unnamed_addr constant [7 x i8] c" }\0A```\00" @.str.5445 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5446 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.5447 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5449 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5450 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5451 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.5452 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5453 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.5454 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5455 = private unnamed_addr constant [2 x i8] c"C\00" @.str.5456 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5457 = private unnamed_addr constant [32 x i8] c"' is a variable, not a function\00" @.str.5458 = private unnamed_addr constant [29 x i8] c"there is no function named '\00" @.str.5459 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5460 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5461 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.5462 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5463 = private unnamed_addr constant [5 x i8] c"main\00" @.str.5464 = private unnamed_addr constant [53 x i8] c"main can't be called, it is where the program starts\00" @.str.5465 = private unnamed_addr constant [5 x i8] c"ptr \00" @.str.5466 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5467 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.5468 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5469 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5470 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5471 = private unnamed_addr constant [11 x i8] c"argument '\00" @.str.5472 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5473 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5474 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5475 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5476 = private unnamed_addr constant [2 x i8] c" \00" @.str.5477 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5478 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" @.str.5479 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5480 = private unnamed_addr constant [40 x i8] c"' can fail, so say what happens then: \00" @.str.5481 = private unnamed_addr constant [20 x i8] c"(...) or , \00" @.str.5482 = private unnamed_addr constant [28 x i8] c"(...) or { ... }, or try \00" @.str.5483 = private unnamed_addr constant [6 x i8] c"(...)\00" @.str.5484 = private unnamed_addr constant [6 x i8] c"call \00" @.str.5485 = private unnamed_addr constant [2 x i8] c" \00" @.str.5486 = private unnamed_addr constant [2 x i8] c"(\00" @.str.5487 = private unnamed_addr constant [3 x i8] c", \00" @.str.5488 = private unnamed_addr constant [2 x i8] c")\00" @.str.5489 = private unnamed_addr constant [14 x i8] c"extractvalue \00" @.str.5490 = private unnamed_addr constant [2 x i8] c" \00" @.str.5491 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5492 = private unnamed_addr constant [8 x i8] c"xor i1 \00" @.str.5493 = private unnamed_addr constant [7 x i8] c", true\00" @.str.5494 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5495 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.5496 = private unnamed_addr constant [14 x i8] c"extractvalue \00" @.str.5497 = private unnamed_addr constant [2 x i8] c" \00" @.str.5498 = private unnamed_addr constant [4 x i8] c", 2\00" @.str.5499 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5500 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.5501 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5502 = private unnamed_addr constant [14 x i8] c"extractvalue \00" @.str.5503 = private unnamed_addr constant [2 x i8] c" \00" @.str.5504 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.5505 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5506 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5507 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.5508 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5509 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5510 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.5511 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5512 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5513 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.5514 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5515 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5517 = private unnamed_addr constant [70 x i8] c"give either all fields by name (x: 1, y: 2) or none (1, 2), not a mix\00" @.str.5518 = private unnamed_addr constant [6 x i8] c" has \00" @.str.5519 = private unnamed_addr constant [18 x i8] c" fields, but got \00" @.str.5520 = private unnamed_addr constant [24 x i8] c" values (or name them: \00" @.str.5521 = private unnamed_addr constant [16 x i8] c"(field: value))\00" @.str.5522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5523 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5524 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5525 = private unnamed_addr constant [16 x i8] c" has no field '\00" @.str.5526 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5527 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5528 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5529 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5530 = private unnamed_addr constant [12 x i8] c"the field '\00" @.str.5531 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5532 = private unnamed_addr constant [17 x i8] c"' is given twice\00" @.str.5533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5534 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.5535 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5536 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.5537 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5538 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5539 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5540 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5541 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5542 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5543 = private unnamed_addr constant [12 x i8] c"the field '\00" @.str.5544 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5545 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5546 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5547 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5548 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.5549 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5550 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5551 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5552 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.5553 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5554 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.5555 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5556 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.5557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5558 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.5559 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5560 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.5561 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5562 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5563 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5564 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5565 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5566 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5567 = private unnamed_addr constant [17 x i8] c"the default of '\00" @.str.5568 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5569 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5570 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5571 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5572 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5573 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.5574 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5575 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.5576 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5577 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.5578 = private unnamed_addr constant [13 x i8] c"insertvalue \00" @.str.5579 = private unnamed_addr constant [2 x i8] c" \00" @.str.5580 = private unnamed_addr constant [3 x i8] c", \00" @.str.5581 = private unnamed_addr constant [2 x i8] c" \00" @.str.5582 = private unnamed_addr constant [3 x i8] c", \00" @.str.5583 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5584 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5585 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.5586 = private unnamed_addr constant [1 x i8] c"\00" @.str.5587 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5588 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5589 = private unnamed_addr constant [4 x i8] c"var\00" @.str.5590 = private unnamed_addr constant [39 x i8] c"there is no variable or module named '\00" @.str.5591 = private unnamed_addr constant [33 x i8] c"' (to use a module, add import \00" @.str.5592 = private unnamed_addr constant [14 x i8] c" at the top)\00" @.str.5593 = private unnamed_addr constant [2 x i8] c".\00" @.str.5594 = private unnamed_addr constant [1 x i8] c"\00" @.str.5595 = private unnamed_addr constant [1 x i8] c"\00" @.str.5596 = private unnamed_addr constant [1 x i8] c"\00" @.str.5597 = private unnamed_addr constant [2 x i8] c".\00" @.str.5598 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5599 = private unnamed_addr constant [13 x i8] c"the module '\00" @.str.5600 = private unnamed_addr constant [36 x i8] c"' has no function or struct named '\00" @.str.5601 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5602 = private unnamed_addr constant [5 x i8] c"push\00" @.str.5603 = private unnamed_addr constant [4 x i8] c"pop\00" @.str.5604 = private unnamed_addr constant [7 x i8] c"insert\00" @.str.5605 = private unnamed_addr constant [7 x i8] c"remove\00" @.str.5606 = private unnamed_addr constant [6 x i8] c"clear\00" @.str.5607 = private unnamed_addr constant [7 x i8] c"resize\00" @.str.5608 = private unnamed_addr constant [5 x i8] c"sort\00" @.str.5609 = private unnamed_addr constant [8 x i8] c"reverse\00" @.str.5610 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5611 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.5612 = private unnamed_addr constant [6 x i8] c"array\00" @.str.5613 = private unnamed_addr constant [1 x i8] c"\00" @.str.5614 = private unnamed_addr constant [64 x i8] c"() would change a temporary array; store it in a variable first\00" @.str.5615 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5616 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5617 = private unnamed_addr constant [4 x i8] c"map\00" @.str.5618 = private unnamed_addr constant [1 x i8] c"\00" @.str.5619 = private unnamed_addr constant [62 x i8] c"() would change a temporary map; store it in a variable first\00" @.str.5620 = private unnamed_addr constant [1 x i8] c"\00" @.str.5621 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5622 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5623 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.5624 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5625 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" @.str.5626 = private unnamed_addr constant [7 x i8] c", null\00" @.str.5627 = private unnamed_addr constant [9 x i8] c"called .\00" @.str.5628 = private unnamed_addr constant [21 x i8] c"() on a null pointer\00" @.str.5629 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5630 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.5631 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.5632 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.5633 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.5634 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.5635 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5636 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.5637 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5638 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5639 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.5640 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5641 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5642 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.5643 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5644 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5645 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.5646 = private unnamed_addr constant [5 x i8] c"the \00" @.str.5647 = private unnamed_addr constant [2 x i8] c" \00" @.str.5648 = private unnamed_addr constant [35 x i8] c" has no methods; add one with fn \00" @.str.5649 = private unnamed_addr constant [2 x i8] c".\00" @.str.5650 = private unnamed_addr constant [14 x i8] c"(...) { ... }\00" @.str.5651 = private unnamed_addr constant [5 x i8] c"the \00" @.str.5652 = private unnamed_addr constant [2 x i8] c" \00" @.str.5653 = private unnamed_addr constant [17 x i8] c" has no method '\00" @.str.5654 = private unnamed_addr constant [12 x i8] c"' (it has: \00" @.str.5655 = private unnamed_addr constant [3 x i8] c", \00" @.str.5656 = private unnamed_addr constant [2 x i8] c")\00" @.str.5657 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5658 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.5659 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5660 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.5661 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.5662 = private unnamed_addr constant [29 x i8] c"() would change a temporary \00" @.str.5663 = private unnamed_addr constant [31 x i8] c"; store it in a variable first\00" @.str.5664 = private unnamed_addr constant [20 x i8] c"the loop variable '\00" @.str.5665 = private unnamed_addr constant [19 x i8] c"' can't be changed\00" @.str.5666 = private unnamed_addr constant [2 x i8] c".\00" @.str.5667 = private unnamed_addr constant [16 x i8] c" has no methods\00" @.str.5668 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5669 = private unnamed_addr constant [47 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr \00" @.str.5670 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" @.str.5671 = private unnamed_addr constant [5 x i8] c"push\00" @.str.5672 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5673 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5674 = private unnamed_addr constant [12 x i8] c"the element\00" @.str.5675 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5676 = private unnamed_addr constant [9 x i8] c"add i64 \00" @.str.5677 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.5678 = private unnamed_addr constant [34 x i8] c"call void @finch_arr_reserve(ptr \00" @.str.5679 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5680 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5681 = private unnamed_addr constant [2 x i8] c")\00" @.str.5682 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5683 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5684 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5685 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5686 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5687 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5688 = private unnamed_addr constant [4 x i8] c"pop\00" @.str.5689 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5690 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" @.str.5691 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5692 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.5693 = private unnamed_addr constant [9 x i8] c"sub i64 \00" @.str.5694 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.5695 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5696 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5697 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5698 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5699 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5700 = private unnamed_addr constant [6 x i8] c"clear\00" @.str.5701 = private unnamed_addr constant [2 x i8] c"0\00" @.str.5702 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5703 = private unnamed_addr constant [2 x i8] c"0\00" @.str.5704 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5705 = private unnamed_addr constant [5 x i8] c"find\00" @.str.5706 = private unnamed_addr constant [9 x i8] c"contains\00" @.str.5707 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5708 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5709 = private unnamed_addr constant [22 x i8] c"the value to look for\00" @.str.5710 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5711 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5712 = private unnamed_addr constant [3 x i8] c"-1\00" @.str.5713 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5714 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5715 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5716 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5717 = private unnamed_addr constant [2 x i8] c"0\00" @.str.5718 = private unnamed_addr constant [10 x i8] c"find.cond\00" @.str.5719 = private unnamed_addr constant [10 x i8] c"find.body\00" @.str.5720 = private unnamed_addr constant [9 x i8] c"find.hit\00" @.str.5721 = private unnamed_addr constant [10 x i8] c"find.next\00" @.str.5722 = private unnamed_addr constant [9 x i8] c"find.end\00" @.str.5723 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5724 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" @.str.5725 = private unnamed_addr constant [3 x i8] c", \00" @.str.5726 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5727 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5728 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5729 = private unnamed_addr constant [3 x i8] c"==\00" @.str.5730 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5731 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5732 = private unnamed_addr constant [9 x i8] c"add i64 \00" @.str.5733 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.5734 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5735 = private unnamed_addr constant [5 x i8] c"find\00" @.str.5736 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5737 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00" @.str.5738 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5739 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.5740 = private unnamed_addr constant [5 x i8] c"join\00" @.str.5741 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5742 = private unnamed_addr constant [32 x i8] c"join() works on an array of str\00" @.str.5743 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5744 = private unnamed_addr constant [14 x i8] c"the separator\00" @.str.5745 = private unnamed_addr constant [31 x i8] c"call void @finch_str_join(ptr \00" @.str.5746 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5747 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5748 = private unnamed_addr constant [2 x i8] c")\00" @.str.5749 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5750 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5751 = private unnamed_addr constant [7 x i8] c"insert\00" @.str.5752 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5753 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5754 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5755 = private unnamed_addr constant [13 x i8] c"the position\00" @.str.5756 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5757 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5758 = private unnamed_addr constant [12 x i8] c"the element\00" @.str.5759 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5760 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.5761 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5762 = private unnamed_addr constant [37 x i8] c"call void @finch_arr_insert_gap(ptr \00" @.str.5763 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5764 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5765 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5766 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5767 = private unnamed_addr constant [2 x i8] c")\00" @.str.5768 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5769 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5770 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5771 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5772 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5773 = private unnamed_addr constant [7 x i8] c"remove\00" @.str.5774 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5775 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5776 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5777 = private unnamed_addr constant [13 x i8] c"the position\00" @.str.5778 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5779 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5780 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5781 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5782 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5783 = private unnamed_addr constant [37 x i8] c"call void @finch_arr_remove_gap(ptr \00" @.str.5784 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5785 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5786 = private unnamed_addr constant [2 x i8] c")\00" @.str.5787 = private unnamed_addr constant [7 x i8] c"resize\00" @.str.5788 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5789 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5790 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5791 = private unnamed_addr constant [15 x i8] c"the new length\00" @.str.5792 = private unnamed_addr constant [33 x i8] c"call void @finch_arr_resize(ptr \00" @.str.5793 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5794 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5795 = private unnamed_addr constant [2 x i8] c")\00" @.str.5796 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5797 = private unnamed_addr constant [8 x i8] c"reverse\00" @.str.5798 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5799 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5800 = private unnamed_addr constant [10 x i8] c"sdiv i64 \00" @.str.5801 = private unnamed_addr constant [4 x i8] c", 2\00" @.str.5802 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5803 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5804 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5805 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5806 = private unnamed_addr constant [9 x i8] c"sub i64 \00" @.str.5807 = private unnamed_addr constant [9 x i8] c"sub i64 \00" @.str.5808 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.5809 = private unnamed_addr constant [3 x i8] c", \00" @.str.5810 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5811 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5812 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5813 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5814 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5815 = private unnamed_addr constant [6 x i8] c"slice\00" @.str.5816 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5817 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5818 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5819 = private unnamed_addr constant [10 x i8] c"the start\00" @.str.5820 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5821 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5822 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5823 = private unnamed_addr constant [8 x i8] c"the end\00" @.str.5824 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5825 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" @.str.5826 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5827 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00" @.str.5828 = private unnamed_addr constant [3 x i8] c", \00" @.str.5829 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00" @.str.5830 = private unnamed_addr constant [3 x i8] c", \00" @.str.5831 = private unnamed_addr constant [7 x i8] c"or i1 \00" @.str.5832 = private unnamed_addr constant [7 x i8] c"or i1 \00" @.str.5833 = private unnamed_addr constant [3 x i8] c", \00" @.str.5834 = private unnamed_addr constant [3 x i8] c", \00" @.str.5835 = private unnamed_addr constant [34 x i8] c"slice(start, end) is out of range\00" @.str.5836 = private unnamed_addr constant [9 x i8] c"sub i64 \00" @.str.5837 = private unnamed_addr constant [3 x i8] c", \00" @.str.5838 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5839 = private unnamed_addr constant [31 x i8] c"call void @finch_arr_make(ptr \00" @.str.5840 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5841 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5842 = private unnamed_addr constant [2 x i8] c")\00" @.str.5843 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5844 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5845 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5846 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5847 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5848 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5849 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5850 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5851 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5852 = private unnamed_addr constant [9 x i8] c"add i64 \00" @.str.5853 = private unnamed_addr constant [3 x i8] c", \00" @.str.5854 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5855 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5856 = private unnamed_addr constant [5 x i8] c"sort\00" @.str.5857 = private unnamed_addr constant [5 x i8] c"char\00" @.str.5858 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5859 = private unnamed_addr constant [48 x i8] c"sort() works on arrays of numbers, chars or str\00" @.str.5860 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5861 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5862 = private unnamed_addr constant [22 x i8] c"call void @qsort(ptr \00" @.str.5863 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5864 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5865 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5866 = private unnamed_addr constant [2 x i8] c")\00" @.str.5867 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5868 = private unnamed_addr constant [25 x i8] c"an array has no method '\00" @.str.5869 = private unnamed_addr constant [97 x i8] c"' (it has: push, pop, insert, remove, clear, resize, find, contains, join, slice, reverse, sort)\00" @.str.5870 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5871 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5872 = private unnamed_addr constant [47 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr \00" @.str.5873 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" @.str.5874 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5875 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" @.str.5876 = private unnamed_addr constant [3 x i8] c", \00" @.str.5877 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" @.str.5878 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5879 = private unnamed_addr constant [11 x i8] c"select i1 \00" @.str.5880 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5881 = private unnamed_addr constant [11 x i8] c"select i1 \00" @.str.5882 = private unnamed_addr constant [14 x i8] c", i64 0, i64 \00" @.str.5883 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5884 = private unnamed_addr constant [9 x i8] c"sub i64 \00" @.str.5885 = private unnamed_addr constant [3 x i8] c", \00" @.str.5886 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5887 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5888 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5889 = private unnamed_addr constant [9 x i8] c"add i64 \00" @.str.5890 = private unnamed_addr constant [3 x i8] c", \00" @.str.5891 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5892 = private unnamed_addr constant [12 x i8] c"@finch.cmp.\00" @.str.5893 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5894 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" @.str.5895 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5896 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" @.str.5897 = private unnamed_addr constant [1 x i8] c"\00" @.str.5898 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5899 = private unnamed_addr constant [40 x i8] c"call i64 @finch_str_cmp(ptr %x, ptr %y)\00" @.str.5900 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" @.str.5901 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.5902 = private unnamed_addr constant [3 x i8] c"%x\00" @.str.5903 = private unnamed_addr constant [3 x i8] c"%y\00" @.str.5904 = private unnamed_addr constant [1 x i8] c"\00" @.str.5905 = private unnamed_addr constant [1 x i8] c"\00" @.str.5906 = private unnamed_addr constant [10 x i8] c"fcmp olt \00" @.str.5907 = private unnamed_addr constant [2 x i8] c" \00" @.str.5908 = private unnamed_addr constant [3 x i8] c", \00" @.str.5909 = private unnamed_addr constant [10 x i8] c"fcmp ogt \00" @.str.5910 = private unnamed_addr constant [2 x i8] c" \00" @.str.5911 = private unnamed_addr constant [3 x i8] c", \00" @.str.5912 = private unnamed_addr constant [6 x i8] c"icmp \00" @.str.5913 = private unnamed_addr constant [2 x i8] c"<\00" @.str.5914 = private unnamed_addr constant [2 x i8] c" \00" @.str.5915 = private unnamed_addr constant [2 x i8] c" \00" @.str.5916 = private unnamed_addr constant [3 x i8] c", \00" @.str.5917 = private unnamed_addr constant [6 x i8] c"icmp \00" @.str.5918 = private unnamed_addr constant [2 x i8] c">\00" @.str.5919 = private unnamed_addr constant [2 x i8] c" \00" @.str.5920 = private unnamed_addr constant [2 x i8] c" \00" @.str.5921 = private unnamed_addr constant [3 x i8] c", \00" @.str.5922 = private unnamed_addr constant [9 x i8] c"sub i32 \00" @.str.5923 = private unnamed_addr constant [9 x i8] c"zext i1 \00" @.str.5924 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.5925 = private unnamed_addr constant [3 x i8] c", \00" @.str.5926 = private unnamed_addr constant [9 x i8] c"zext i1 \00" @.str.5927 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.5928 = private unnamed_addr constant [9 x i8] c"ret i32 \00" @.str.5929 = private unnamed_addr constant [21 x i8] c"define internal i32 \00" @.str.5930 = private unnamed_addr constant [17 x i8] c"(ptr %x, ptr %y)\00" @.str.5931 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5932 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.5933 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5934 = private unnamed_addr constant [4 x i8] c"sub\00" @.str.5935 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5936 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5937 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5938 = private unnamed_addr constant [10 x i8] c"the start\00" @.str.5939 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5940 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5941 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5942 = private unnamed_addr constant [8 x i8] c"the end\00" @.str.5943 = private unnamed_addr constant [30 x i8] c"call void @finch_str_sub(ptr \00" @.str.5944 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5945 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5946 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5947 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5948 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5949 = private unnamed_addr constant [2 x i8] c")\00" @.str.5950 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5951 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5952 = private unnamed_addr constant [5 x i8] c"find\00" @.str.5953 = private unnamed_addr constant [9 x i8] c"contains\00" @.str.5954 = private unnamed_addr constant [12 x i8] c"starts_with\00" @.str.5955 = private unnamed_addr constant [10 x i8] c"ends_with\00" @.str.5956 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5957 = private unnamed_addr constant [21 x i8] c"the text to look for\00" @.str.5958 = private unnamed_addr constant [5 x i8] c"find\00" @.str.5959 = private unnamed_addr constant [30 x i8] c"call i64 @finch_str_find(ptr \00" @.str.5960 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5961 = private unnamed_addr constant [2 x i8] c")\00" @.str.5962 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5963 = private unnamed_addr constant [9 x i8] c"contains\00" @.str.5964 = private unnamed_addr constant [30 x i8] c"call i64 @finch_str_find(ptr \00" @.str.5965 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5966 = private unnamed_addr constant [2 x i8] c")\00" @.str.5967 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00" @.str.5968 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5969 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.5970 = private unnamed_addr constant [18 x i8] c"@finch_str_starts\00" @.str.5971 = private unnamed_addr constant [10 x i8] c"ends_with\00" @.str.5972 = private unnamed_addr constant [16 x i8] c"@finch_str_ends\00" @.str.5973 = private unnamed_addr constant [10 x i8] c"call i32 \00" @.str.5974 = private unnamed_addr constant [6 x i8] c"(ptr \00" @.str.5975 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5976 = private unnamed_addr constant [2 x i8] c")\00" @.str.5977 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" @.str.5978 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5979 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.5980 = private unnamed_addr constant [5 x i8] c"trim\00" @.str.5981 = private unnamed_addr constant [6 x i8] c"upper\00" @.str.5982 = private unnamed_addr constant [6 x i8] c"lower\00" @.str.5983 = private unnamed_addr constant [22 x i8] c"call void @finch_str_\00" @.str.5984 = private unnamed_addr constant [6 x i8] c"(ptr \00" @.str.5985 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5986 = private unnamed_addr constant [2 x i8] c")\00" @.str.5987 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5988 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5989 = private unnamed_addr constant [8 x i8] c"replace\00" @.str.5990 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5991 = private unnamed_addr constant [20 x i8] c"the text to replace\00" @.str.5992 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5993 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" @.str.5994 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5995 = private unnamed_addr constant [13 x i8] c"the new text\00" @.str.5996 = private unnamed_addr constant [34 x i8] c"call void @finch_str_replace(ptr \00" @.str.5997 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5998 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5999 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.6000 = private unnamed_addr constant [2 x i8] c")\00" @.str.6001 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.6002 = private unnamed_addr constant [4 x i8] c"str\00" @.str.6003 = private unnamed_addr constant [6 x i8] c"split\00" @.str.6004 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6005 = private unnamed_addr constant [14 x i8] c"the separator\00" @.str.6006 = private unnamed_addr constant [32 x i8] c"call void @finch_str_split(ptr \00" @.str.6007 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.6008 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.6009 = private unnamed_addr constant [2 x i8] c")\00" @.str.6010 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.6011 = private unnamed_addr constant [4 x i8] c"str\00" @.str.6012 = private unnamed_addr constant [7 x i8] c"repeat\00" @.str.6013 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6014 = private unnamed_addr constant [4 x i8] c"int\00" @.str.6015 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6016 = private unnamed_addr constant [10 x i8] c"the count\00" @.str.6017 = private unnamed_addr constant [33 x i8] c"call void @finch_str_repeat(ptr \00" @.str.6018 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.6019 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.6020 = private unnamed_addr constant [2 x i8] c")\00" @.str.6021 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.6022 = private unnamed_addr constant [4 x i8] c"str\00" @.str.6023 = private unnamed_addr constant [6 x i8] c"bytes\00" @.str.6024 = private unnamed_addr constant [37 x i8] c"call void @finch_bytes_from_str(ptr \00" @.str.6025 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.6026 = private unnamed_addr constant [2 x i8] c")\00" @.str.6027 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.6028 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.6029 = private unnamed_addr constant [22 x i8] c"a str has no method '\00" @.str.6030 = private unnamed_addr constant [107 x i8] c"' (it has: sub, find, contains, starts_with, ends_with, split, trim, upper, lower, replace, repeat, bytes)\00" @.str.6031 = private unnamed_addr constant [55 x i8] c"declare void @finch_panic(ptr, i64, ptr) noreturn cold\00" @.str.6032 = private unnamed_addr constant [66 x i8] c"declare void @finch_panic_index(ptr, i64, i64, i64) noreturn cold\00" @.str.6033 = private unnamed_addr constant [30 x i8] c"declare ptr @finch_alloc(i64)\00" @.str.6034 = private unnamed_addr constant [39 x i8] c"declare void @finch_str_copy(ptr, ptr)\00" @.str.6035 = private unnamed_addr constant [34 x i8] c"declare void @finch_str_drop(ptr)\00" @.str.6036 = private unnamed_addr constant [34 x i8] c"declare void @finch_arr_free(ptr)\00" @.str.6037 = private unnamed_addr constant [34 x i8] c"declare void @finch_map_free(ptr)\00" @.str.6038 = private unnamed_addr constant [33 x i8] c"declare void @finch_str_own(ptr)\00" @.str.6039 = private unnamed_addr constant [46 x i8] c"declare void @finch_str_concat(ptr, ptr, ptr)\00" @.str.6040 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_str_eq(ptr, ptr)\00" @.str.6041 = private unnamed_addr constant [37 x i8] c"declare i64 @finch_str_cmp(ptr, ptr)\00" @.str.6042 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_add(ptr, ptr, i64)\00" @.str.6043 = private unnamed_addr constant [38 x i8] c"declare void @finch_buf_int(ptr, i64)\00" @.str.6044 = private unnamed_addr constant [39 x i8] c"declare void @finch_buf_uint(ptr, i64)\00" @.str.6045 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_float(ptr, double)\00" @.str.6046 = private unnamed_addr constant [39 x i8] c"declare void @finch_buf_bool(ptr, i32)\00" @.str.6047 = private unnamed_addr constant [38 x i8] c"declare void @finch_buf_ptr(ptr, ptr)\00" @.str.6048 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_char(ptr, i8, i32)\00" @.str.6049 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_str(ptr, ptr, i32)\00" @.str.6050 = private unnamed_addr constant [35 x i8] c"declare void @finch_buf_print(ptr)\00" @.str.6051 = private unnamed_addr constant [43 x i8] c"declare void @finch_str_from_int(ptr, i64)\00" @.str.6052 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_from_uint(ptr, i64)\00" @.str.6053 = private unnamed_addr constant [48 x i8] c"declare void @finch_str_from_float(ptr, double)\00" @.str.6054 = private unnamed_addr constant [51 x i8] c"declare void @finch_str_from_char(ptr, i8 signext)\00" @.str.6055 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_from_bool(ptr, i32)\00" @.str.6056 = private unnamed_addr constant [45 x i8] c"declare i64 @finch_str_to_int(ptr, ptr, i64)\00" @.str.6057 = private unnamed_addr constant [50 x i8] c"declare double @finch_str_to_float(ptr, ptr, i64)\00" @.str.6058 = private unnamed_addr constant [58 x i8] c"declare void @finch_str_sub(ptr, ptr, i64, i64, ptr, i64)\00" @.str.6059 = private unnamed_addr constant [38 x i8] c"declare i64 @finch_str_find(ptr, ptr)\00" @.str.6060 = private unnamed_addr constant [40 x i8] c"declare i32 @finch_str_starts(ptr, ptr)\00" @.str.6061 = private unnamed_addr constant [38 x i8] c"declare i32 @finch_str_ends(ptr, ptr)\00" @.str.6062 = private unnamed_addr constant [39 x i8] c"declare void @finch_str_trim(ptr, ptr)\00" @.str.6063 = private unnamed_addr constant [40 x i8] c"declare void @finch_str_upper(ptr, ptr)\00" @.str.6064 = private unnamed_addr constant [40 x i8] c"declare void @finch_str_lower(ptr, ptr)\00" @.str.6065 = private unnamed_addr constant [52 x i8] c"declare void @finch_str_replace(ptr, ptr, ptr, ptr)\00" @.str.6066 = private unnamed_addr constant [45 x i8] c"declare void @finch_str_split(ptr, ptr, ptr)\00" @.str.6067 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_join(ptr, ptr, ptr)\00" @.str.6068 = private unnamed_addr constant [46 x i8] c"declare void @finch_str_repeat(ptr, ptr, i64)\00" @.str.6069 = private unnamed_addr constant [45 x i8] c"declare void @finch_bytes_from_str(ptr, ptr)\00" @.str.6070 = private unnamed_addr constant [53 x i8] c"declare i64 @finch_map_find(ptr, ptr, i64, i64, i32)\00" @.str.6071 = private unnamed_addr constant [58 x i8] c"declare i64 @finch_map_slot(ptr, ptr, i64, i64, i32, ptr)\00" @.str.6072 = private unnamed_addr constant [49 x i8] c"declare void @finch_map_remove_at(ptr, i64, i64)\00" @.str.6073 = private unnamed_addr constant [35 x i8] c"declare void @finch_map_clear(ptr)\00" @.str.6074 = private unnamed_addr constant [49 x i8] c"declare void @finch_map_clone_raw(ptr, ptr, i64)\00" @.str.6075 = private unnamed_addr constant [61 x i8] c"declare void @finch_map_missing(ptr, i64, ptr) noreturn cold\00" @.str.6076 = private unnamed_addr constant [56 x i8] c"declare void @finch_map_changed(ptr, i64) noreturn cold\00" @.str.6077 = private unnamed_addr constant [47 x i8] c"declare void @finch_arr_reserve(ptr, i64, i64)\00" @.str.6078 = private unnamed_addr constant [49 x i8] c"declare void @finch_arr_clone_raw(ptr, ptr, i64)\00" @.str.6079 = private unnamed_addr constant [44 x i8] c"declare void @finch_arr_make(ptr, i64, i64)\00" @.str.6080 = private unnamed_addr constant [46 x i8] c"declare void @finch_arr_resize(ptr, i64, i64)\00" @.str.6081 = private unnamed_addr constant [60 x i8] c"declare void @finch_arr_insert_gap(ptr, i64, i64, ptr, i64)\00" @.str.6082 = private unnamed_addr constant [50 x i8] c"declare void @finch_arr_remove_gap(ptr, i64, i64)\00" @.str.6083 = private unnamed_addr constant [40 x i8] c"declare void @qsort(ptr, i64, i64, ptr)\00" @.str.6084 = private unnamed_addr constant [40 x i8] c"declare void @finch_args(ptr, i32, ptr)\00" @.str.6085 = private unnamed_addr constant [36 x i8] c"declare void @finch_input(ptr, ptr)\00" @.str.6086 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_file_exists(ptr)\00" @.str.6087 = private unnamed_addr constant [46 x i8] c"declare i32 @finch_str_try_int(ptr, ptr, ptr)\00" @.str.6088 = private unnamed_addr constant [48 x i8] c"declare i32 @finch_str_try_float(ptr, ptr, ptr)\00" @.str.6089 = private unnamed_addr constant [48 x i8] c"declare i32 @finch_try_read_file(ptr, ptr, ptr)\00" @.str.6090 = private unnamed_addr constant [49 x i8] c"declare i32 @finch_try_write_file(ptr, ptr, ptr)\00" @.str.6091 = private unnamed_addr constant [45 x i8] c"declare i32 @finch_try_delete_file(ptr, ptr)\00" @.str.6092 = private unnamed_addr constant [38 x i8] c"declare void @finch_report_error(ptr)\00" @.str.6093 = private unnamed_addr constant [50 x i8] c"declare void @finch_read_file(ptr, ptr, ptr, i64)\00" @.str.6094 = private unnamed_addr constant [40 x i8] c"declare i32 @finch_write_file(ptr, ptr)\00" @.str.6095 = private unnamed_addr constant [30 x i8] c"declare i64 @finch_shell(ptr)\00" @.str.6096 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_delete_file(ptr)\00" @.str.6097 = private unnamed_addr constant [30 x i8] c"declare i32 @printf(ptr, ...)\00" @.str.6098 = private unnamed_addr constant [25 x i8] c"declare i32 @fflush(ptr)\00" @.str.6099 = private unnamed_addr constant [41 x i8] c"declare void @finch_str_from_c(ptr, ptr)\00" @.str.6100 = private unnamed_addr constant [34 x i8] c"declare void @finch_on_fatal(ptr)\00" @.str.6101 = private unnamed_addr constant [35 x i8] c"declare ptr @finch_std_stream(i32)\00" @.str.6102 = private unnamed_addr constant [45 x i8] c"declare void @finch_str_from_bytes(ptr, ptr)\00" @.str.6103 = private unnamed_addr constant [33 x i8] c"declare void @exit(i32) noreturn\00" @.str.6104 = private unnamed_addr constant [24 x i8] c"declare void @free(ptr)\00" @.str.6105 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6106 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6107 = private unnamed_addr constant [53 x i8] c"; generated by the Finch compiler written in Finch\0A\0A\00" @.str.6108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6109 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.6110 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6111 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.6112 = private unnamed_addr constant [18 x i8] c"target triple = \22\00" @.str.6113 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6114 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.6115 = private unnamed_addr constant [4 x i8] c"\22\0A\0A\00" @.str.6116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6117 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" @.str.6118 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6119 = private unnamed_addr constant [3 x i8] c"\0A\0A\00" @.str.6120 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6122 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" @.str.6123 = private unnamed_addr constant [63 x i8] c"declare void @llvm.dbg.declare(metadata, metadata, metadata)\0A\0A\00" @.str.6124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6125 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6126 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6128 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" @.str.6129 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6131 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" @.str.6132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6133 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.6134 = private unnamed_addr constant [1 x i8] c"\00" @.str.6135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6136 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.6137 = private unnamed_addr constant [34 x i8] c"!{i32 7, !\22Dwarf Version\22, i32 4}\00" @.str.6138 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6139 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.6140 = private unnamed_addr constant [39 x i8] c"!{i32 2, !\22Debug Info Version\22, i32 3}\00" @.str.6141 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6142 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" @.str.6143 = private unnamed_addr constant [20 x i8] c"!DIFile(filename: \22\00" @.str.6144 = private unnamed_addr constant [16 x i8] c"\22, directory: \22\00" @.str.6145 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6146 = private unnamed_addr constant [28 x i8] c"used .cwd on a null pointer\00" @.str.6147 = private unnamed_addr constant [3 x i8] c"\22)\00" @.str.6148 = private unnamed_addr constant [53 x i8] c"distinct !DICompileUnit(language: DW_LANG_C, file: !\00" @.str.6149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6150 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" @.str.6151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6152 = private unnamed_addr constant [85 x i8] c", producer: \22finch\22, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)\00" @.str.6153 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6154 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.6155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6156 = private unnamed_addr constant [1 x i8] c"\00" @.str.6157 = private unnamed_addr constant [5 x i8] c"main\00" @.str.6158 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6159 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.6160 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6161 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.6162 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6164 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6165 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.6166 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6167 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6168 = private unnamed_addr constant [83 x i8] c"a library (--shared) has no main: the program that loads it calls its 'export fn's\00" @.str.6169 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6170 = private unnamed_addr constant [65 x i8] c":1:1: error: there is no main function (add 'fn main() { ... }')\00" @.str.6171 = private unnamed_addr constant [1 x i8] c"\00" @.str.6172 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6173 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6174 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6175 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.6176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6177 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.6178 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6179 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.6180 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6181 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6182 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.6183 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6185 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.6186 = private unnamed_addr constant [1 x i8] c"\00" @.str.6187 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6188 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.6189 = private unnamed_addr constant [11 x i8] c" dllexport\00" @.str.6190 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6191 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6192 = private unnamed_addr constant [7 x i8] c"define\00" @.str.6193 = private unnamed_addr constant [108 x i8] c" void @finch_module_on_fatal(ptr %handler) {\0Aentry:\0A call void @finch_on_fatal(ptr %handler)\0A ret void\0A}\0A\00" @.str.6194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6195 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.6196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6197 = private unnamed_addr constant [6 x i8] c"call \00" @.str.6198 = private unnamed_addr constant [2 x i8] c" \00" @.str.6199 = private unnamed_addr constant [2 x i8] c"(\00" @.str.6200 = private unnamed_addr constant [1 x i8] c"\00" @.str.6201 = private unnamed_addr constant [134 x i8] c" %args = alloca { ptr, i64, i64 }\0A call void @finch_args(ptr %args, i32 %argc, ptr %argv)\0A %a = load { ptr, i64, i64 }, ptr %args\0A\00" @.str.6202 = private unnamed_addr constant [21 x i8] c"{ ptr, i64, i64 } %a\00" @.str.6203 = private unnamed_addr constant [2 x i8] c")\00" @.str.6204 = private unnamed_addr constant [13 x i8] c" ret i32 0\0A\00" @.str.6205 = private unnamed_addr constant [6 x i8] c"%r = \00" @.str.6206 = private unnamed_addr constant [3 x i8] c" \00" @.str.6207 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6208 = private unnamed_addr constant [1 x i8] c"\00" @.str.6209 = private unnamed_addr constant [22 x i8] c" %ok = extractvalue \00" @.str.6210 = private unnamed_addr constant [63 x i8] c" %r, 0\0A br i1 %ok, label %main.ok, label %main.bad\0Amain.bad:\0A\00" @.str.6211 = private unnamed_addr constant [21 x i8] c" %m = extractvalue \00" @.str.6212 = private unnamed_addr constant [79 x i8] c" %r, 2\0A %mp = alloca { ptr, i64, i64 }\0A store { ptr, i64, i64 } %m, ptr %mp\0A\00" @.str.6213 = private unnamed_addr constant [63 x i8] c" call void @finch_report_error(ptr %mp)\0A ret i32 1\0Amain.ok:\0A\00" @.str.6214 = private unnamed_addr constant [4 x i8] c"int\00" @.str.6215 = private unnamed_addr constant [21 x i8] c" %v = extractvalue \00" @.str.6216 = private unnamed_addr constant [54 x i8] c" %r, 1\0A %code = trunc i64 %v to i32\0A ret i32 %code\0A\00" @.str.6217 = private unnamed_addr constant [4 x i8] c"int\00" @.str.6218 = private unnamed_addr constant [6 x i8] c"%r = \00" @.str.6219 = private unnamed_addr constant [47 x i8] c" %code = trunc i64 %r to i32\0A ret i32 %code\0A\00" @.str.6220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6221 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6222 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" @.str.6223 = private unnamed_addr constant [3 x i8] c" \00" @.str.6224 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6225 = private unnamed_addr constant [3 x i8] c"}\0A\00" @.str.6226 = private unnamed_addr constant [6 x i8] c"print\00" @.str.6227 = private unnamed_addr constant [17 x i8] c"print(a, b, ...)\00" @.str.6228 = private unnamed_addr constant [79 x i8] c"Prints the values separated by spaces, then a new line. Works with every type.\00" @.str.6229 = private unnamed_addr constant [6 x i8] c"input\00" @.str.6230 = private unnamed_addr constant [32 x i8] c"input(str question = \22\22) -> str\00" @.str.6231 = private unnamed_addr constant [78 x i8] c"Shows the question and reads one line typed by the user, without the newline.\00" @.str.6232 = private unnamed_addr constant [10 x i8] c"read_file\00" @.str.6233 = private unnamed_addr constant [27 x i8] c"read_file(str path) -> str\00" @.str.6234 = private unnamed_addr constant [122 x i8] c"The whole file as text. Stops the program if it can't be read, unless handled: read_file(p) or { ... }, try read_file(p).\00" @.str.6235 = private unnamed_addr constant [11 x i8] c"write_file\00" @.str.6236 = private unnamed_addr constant [39 x i8] c"write_file(str path, str text) -> bool\00" @.str.6237 = private unnamed_addr constant [84 x i8] c"Writes (replaces) the file. true if it worked; with or / try, the reason it didn't.\00" @.str.6238 = private unnamed_addr constant [12 x i8] c"file_exists\00" @.str.6239 = private unnamed_addr constant [30 x i8] c"file_exists(str path) -> bool\00" @.str.6240 = private unnamed_addr constant [30 x i8] c"Is there a file at this path?\00" @.str.6241 = private unnamed_addr constant [12 x i8] c"delete_file\00" @.str.6242 = private unnamed_addr constant [30 x i8] c"delete_file(str path) -> bool\00" @.str.6243 = private unnamed_addr constant [74 x i8] c"Deletes the file. true if it worked; with or / try, the reason it didn't.\00" @.str.6244 = private unnamed_addr constant [6 x i8] c"error\00" @.str.6245 = private unnamed_addr constant [19 x i8] c"error(str message)\00" @.str.6246 = private unnamed_addr constant [99 x i8] c"The failure a fallible function returns: return error(\22...\22). The caller handles it with or / try.\00" @.str.6247 = private unnamed_addr constant [6 x i8] c"shell\00" @.str.6248 = private unnamed_addr constant [26 x i8] c"shell(str command) -> int\00" @.str.6249 = private unnamed_addr constant [67 x i8] c"Runs a command in the system's shell and gives back its exit code.\00" @.str.6250 = private unnamed_addr constant [5 x i8] c"exit\00" @.str.6251 = private unnamed_addr constant [15 x i8] c"exit(int code)\00" @.str.6252 = private unnamed_addr constant [49 x i8] c"Ends the program right away with this exit code.\00" @.str.6253 = private unnamed_addr constant [5 x i8] c"addr\00" @.str.6254 = private unnamed_addr constant [18 x i8] c"addr(x) -> ptr[T]\00" @.str.6255 = private unnamed_addr constant [78 x i8] c"A pointer to a variable, field or element. addr(function) gives C a callback.\00" @.str.6256 = private unnamed_addr constant [4 x i8] c"new\00" @.str.6257 = private unnamed_addr constant [21 x i8] c"new(value) -> ptr[T]\00" @.str.6258 = private unnamed_addr constant [67 x i8] c"Puts a copy of the value on the heap. Give it back with free(...).\00" @.str.6259 = private unnamed_addr constant [5 x i8] c"free\00" @.str.6260 = private unnamed_addr constant [12 x i8] c"free(ptr p)\00" @.str.6261 = private unnamed_addr constant [74 x i8] c"Gives back memory from new(...) (or from C), freeing what the value owns.\00" @.str.6262 = private unnamed_addr constant [4 x i8] c"str\00" @.str.6263 = private unnamed_addr constant [14 x i8] c"str(x) -> str\00" @.str.6264 = private unnamed_addr constant [62 x i8] c"Turns a number, bool, char, []u8 or C char pointer into text.\00" @.str.6265 = private unnamed_addr constant [4 x i8] c"int\00" @.str.6266 = private unnamed_addr constant [14 x i8] c"int(x) -> int\00" @.str.6267 = private unnamed_addr constant [131 x i8] c"Converts to a whole number: cuts off fractions, parses text (stops the program if it isn't a number, unless handled: int(s) or 0).\00" @.str.6268 = private unnamed_addr constant [6 x i8] c"float\00" @.str.6269 = private unnamed_addr constant [18 x i8] c"float(x) -> float\00" @.str.6270 = private unnamed_addr constant [76 x i8] c"Converts to a decimal number; parses text (int(s) or 0.0 handles bad text).\00" @.str.6271 = private unnamed_addr constant [5 x i8] c"char\00" @.str.6272 = private unnamed_addr constant [20 x i8] c"char(int n) -> char\00" @.str.6273 = private unnamed_addr constant [30 x i8] c"The character with this code.\00" @.str.6274 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.6275 = private unnamed_addr constant [20 x i8] c"bool(int n) -> bool\00" @.str.6276 = private unnamed_addr constant [27 x i8] c"true for any number but 0.\00" @.str.6277 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.6278 = private unnamed_addr constant [14 x i8] c"ptr(x) -> ptr\00" @.str.6279 = private unnamed_addr constant [89 x i8] c"An untyped pointer: from a typed pointer, or from a number (an address or offset for C).\00" @.str.6280 = private unnamed_addr constant [4 x i8] c"len\00" @.str.6281 = private unnamed_addr constant [12 x i8] c".len -> int\00" @.str.6282 = private unnamed_addr constant [24 x i8] c"The number of elements.\00" @.str.6283 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.6284 = private unnamed_addr constant [15 x i8] c".ptr -> ptr[T]\00" @.str.6285 = private unnamed_addr constant [41 x i8] c"The address of the first element, for C.\00" @.str.6286 = private unnamed_addr constant [5 x i8] c"push\00" @.str.6287 = private unnamed_addr constant [10 x i8] c"push(T x)\00" @.str.6288 = private unnamed_addr constant [19 x i8] c"Adds x at the end.\00" @.str.6289 = private unnamed_addr constant [4 x i8] c"pop\00" @.str.6290 = private unnamed_addr constant [11 x i8] c"pop() -> T\00" @.str.6291 = private unnamed_addr constant [44 x i8] c"Removes the last element and gives it back.\00" @.str.6292 = private unnamed_addr constant [7 x i8] c"insert\00" @.str.6293 = private unnamed_addr constant [19 x i8] c"insert(int i, T x)\00" @.str.6294 = private unnamed_addr constant [39 x i8] c"Puts x at position i, moving the rest.\00" @.str.6295 = private unnamed_addr constant [7 x i8] c"remove\00" @.str.6296 = private unnamed_addr constant [19 x i8] c"remove(int i) -> T\00" @.str.6297 = private unnamed_addr constant [38 x i8] c"Removes position i and gives it back.\00" @.str.6298 = private unnamed_addr constant [6 x i8] c"clear\00" @.str.6299 = private unnamed_addr constant [8 x i8] c"clear()\00" @.str.6300 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" @.str.6301 = private unnamed_addr constant [7 x i8] c"resize\00" @.str.6302 = private unnamed_addr constant [14 x i8] c"resize(int n)\00" @.str.6303 = private unnamed_addr constant [47 x i8] c"Makes the array n long; new elements are zero.\00" @.str.6304 = private unnamed_addr constant [5 x i8] c"find\00" @.str.6305 = private unnamed_addr constant [17 x i8] c"find(T x) -> int\00" @.str.6306 = private unnamed_addr constant [23 x i8] c"The index of x, or -1.\00" @.str.6307 = private unnamed_addr constant [9 x i8] c"contains\00" @.str.6308 = private unnamed_addr constant [22 x i8] c"contains(T x) -> bool\00" @.str.6309 = private unnamed_addr constant [19 x i8] c"Is x in the array?\00" @.str.6310 = private unnamed_addr constant [5 x i8] c"sort\00" @.str.6311 = private unnamed_addr constant [7 x i8] c"sort()\00" @.str.6312 = private unnamed_addr constant [38 x i8] c"Sorts in place (numbers, chars, str).\00" @.str.6313 = private unnamed_addr constant [8 x i8] c"reverse\00" @.str.6314 = private unnamed_addr constant [10 x i8] c"reverse()\00" @.str.6315 = private unnamed_addr constant [19 x i8] c"Reverses in place.\00" @.str.6316 = private unnamed_addr constant [6 x i8] c"slice\00" @.str.6317 = private unnamed_addr constant [33 x i8] c"slice(int start, int end) -> []T\00" @.str.6318 = private unnamed_addr constant [46 x i8] c"A new array with the elements start to end-1.\00" @.str.6319 = private unnamed_addr constant [5 x i8] c"join\00" @.str.6320 = private unnamed_addr constant [21 x i8] c"join(str sep) -> str\00" @.str.6321 = private unnamed_addr constant [48 x i8] c"For []str: one text with sep between the parts.\00" @.str.6322 = private unnamed_addr constant [4 x i8] c"len\00" @.str.6323 = private unnamed_addr constant [12 x i8] c".len -> int\00" @.str.6324 = private unnamed_addr constant [21 x i8] c"The number of bytes.\00" @.str.6325 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.6326 = private unnamed_addr constant [18 x i8] c".ptr -> ptr[char]\00" @.str.6327 = private unnamed_addr constant [60 x i8] c"The address of the text, for C (valid while the str lives).\00" @.str.6328 = private unnamed_addr constant [4 x i8] c"sub\00" @.str.6329 = private unnamed_addr constant [31 x i8] c"sub(int start, int end) -> str\00" @.str.6330 = private unnamed_addr constant [30 x i8] c"The part from start to end-1.\00" @.str.6331 = private unnamed_addr constant [5 x i8] c"find\00" @.str.6332 = private unnamed_addr constant [19 x i8] c"find(str t) -> int\00" @.str.6333 = private unnamed_addr constant [23 x i8] c"Where t starts, or -1.\00" @.str.6334 = private unnamed_addr constant [9 x i8] c"contains\00" @.str.6335 = private unnamed_addr constant [24 x i8] c"contains(str t) -> bool\00" @.str.6336 = private unnamed_addr constant [25 x i8] c"Does the text contain t?\00" @.str.6337 = private unnamed_addr constant [12 x i8] c"starts_with\00" @.str.6338 = private unnamed_addr constant [27 x i8] c"starts_with(str t) -> bool\00" @.str.6339 = private unnamed_addr constant [28 x i8] c"Does the text start with t?\00" @.str.6340 = private unnamed_addr constant [10 x i8] c"ends_with\00" @.str.6341 = private unnamed_addr constant [25 x i8] c"ends_with(str t) -> bool\00" @.str.6342 = private unnamed_addr constant [26 x i8] c"Does the text end with t?\00" @.str.6343 = private unnamed_addr constant [6 x i8] c"split\00" @.str.6344 = private unnamed_addr constant [24 x i8] c"split(str sep) -> []str\00" @.str.6345 = private unnamed_addr constant [63 x i8] c"The parts between each sep; split(\22\22) gives single characters.\00" @.str.6346 = private unnamed_addr constant [5 x i8] c"trim\00" @.str.6347 = private unnamed_addr constant [14 x i8] c"trim() -> str\00" @.str.6348 = private unnamed_addr constant [42 x i8] c"Without spaces and newlines at both ends.\00" @.str.6349 = private unnamed_addr constant [6 x i8] c"upper\00" @.str.6350 = private unnamed_addr constant [15 x i8] c"upper() -> str\00" @.str.6351 = private unnamed_addr constant [25 x i8] c"With a-z changed to A-Z.\00" @.str.6352 = private unnamed_addr constant [6 x i8] c"lower\00" @.str.6353 = private unnamed_addr constant [15 x i8] c"lower() -> str\00" @.str.6354 = private unnamed_addr constant [25 x i8] c"With A-Z changed to a-z.\00" @.str.6355 = private unnamed_addr constant [8 x i8] c"replace\00" @.str.6356 = private unnamed_addr constant [33 x i8] c"replace(str from, str to) -> str\00" @.str.6357 = private unnamed_addr constant [27 x i8] c"Every from replaced by to.\00" @.str.6358 = private unnamed_addr constant [7 x i8] c"repeat\00" @.str.6359 = private unnamed_addr constant [21 x i8] c"repeat(int n) -> str\00" @.str.6360 = private unnamed_addr constant [18 x i8] c"The text n times.\00" @.str.6361 = private unnamed_addr constant [6 x i8] c"bytes\00" @.str.6362 = private unnamed_addr constant [16 x i8] c"bytes() -> []u8\00" @.str.6363 = private unnamed_addr constant [23 x i8] c"The bytes of the text.\00" @.str.6364 = private unnamed_addr constant [4 x i8] c"len\00" @.str.6365 = private unnamed_addr constant [12 x i8] c".len -> int\00" @.str.6366 = private unnamed_addr constant [20 x i8] c"The number of keys.\00" @.str.6367 = private unnamed_addr constant [4 x i8] c"has\00" @.str.6368 = private unnamed_addr constant [19 x i8] c"has(K key) -> bool\00" @.str.6369 = private unnamed_addr constant [23 x i8] c"Is the key in the map?\00" @.str.6370 = private unnamed_addr constant [4 x i8] c"get\00" @.str.6371 = private unnamed_addr constant [27 x i8] c"get(K key, V default) -> V\00" @.str.6372 = private unnamed_addr constant [54 x i8] c"The value for key, or default if the key isn't there.\00" @.str.6373 = private unnamed_addr constant [7 x i8] c"remove\00" @.str.6374 = private unnamed_addr constant [22 x i8] c"remove(K key) -> bool\00" @.str.6375 = private unnamed_addr constant [53 x i8] c"Removes the key and its value; true if it was there.\00" @.str.6376 = private unnamed_addr constant [6 x i8] c"clear\00" @.str.6377 = private unnamed_addr constant [8 x i8] c"clear()\00" @.str.6378 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" @.str.6379 = private unnamed_addr constant [5 x i8] c"keys\00" @.str.6380 = private unnamed_addr constant [14 x i8] c"keys() -> []K\00" @.str.6381 = private unnamed_addr constant [40 x i8] c"The keys, in the order they were added.\00" @.str.6382 = private unnamed_addr constant [7 x i8] c"values\00" @.str.6383 = private unnamed_addr constant [16 x i8] c"values() -> []V\00" @.str.6384 = private unnamed_addr constant [48 x i8] c"The values, in the order their keys were added.\00" @.str.6385 = private unnamed_addr constant [3 x i8] c"fn\00" @.str.6386 = private unnamed_addr constant [7 x i8] c"return\00" @.str.6387 = private unnamed_addr constant [3 x i8] c"if\00" @.str.6388 = private unnamed_addr constant [5 x i8] c"else\00" @.str.6389 = private unnamed_addr constant [6 x i8] c"while\00" @.str.6390 = private unnamed_addr constant [4 x i8] c"for\00" @.str.6391 = private unnamed_addr constant [3 x i8] c"in\00" @.str.6392 = private unnamed_addr constant [6 x i8] c"break\00" @.str.6393 = private unnamed_addr constant [9 x i8] c"continue\00" @.str.6394 = private unnamed_addr constant [5 x i8] c"true\00" @.str.6395 = private unnamed_addr constant [6 x i8] c"false\00" @.str.6396 = private unnamed_addr constant [5 x i8] c"null\00" @.str.6397 = private unnamed_addr constant [7 x i8] c"import\00" @.str.6398 = private unnamed_addr constant [5 x i8] c"link\00" @.str.6399 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.6400 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.6401 = private unnamed_addr constant [6 x i8] c"match\00" @.str.6402 = private unnamed_addr constant [7 x i8] c"export\00" @.str.6403 = private unnamed_addr constant [6 x i8] c"defer\00" @.str.6404 = private unnamed_addr constant [3 x i8] c"or\00" @.str.6405 = private unnamed_addr constant [4 x i8] c"try\00" @.str.6406 = private unnamed_addr constant [5 x i8] c"self\00" @.str.6407 = private unnamed_addr constant [4 x i8] c"int\00" @.str.6408 = private unnamed_addr constant [6 x i8] c"float\00" @.str.6409 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.6410 = private unnamed_addr constant [5 x i8] c"char\00" @.str.6411 = private unnamed_addr constant [4 x i8] c"str\00" @.str.6412 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.6413 = private unnamed_addr constant [4 x i8] c"map\00" @.str.6414 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.6415 = private unnamed_addr constant [4 x i8] c"i16\00" @.str.6416 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.6417 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.6418 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.6419 = private unnamed_addr constant [4 x i8] c"u16\00" @.str.6420 = private unnamed_addr constant [4 x i8] c"u32\00" @.str.6421 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.6422 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.6423 = private unnamed_addr constant [4 x i8] c"f64\00" @.str.6424 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" @.str.6425 = private unnamed_addr constant [6 x i8] c"\0A```\0A\00" declare ptr @clang_getCString([2 x i64]) declare void @clang_disposeString([2 x i64]) @.str.6426 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.6427 = private unnamed_addr constant [16 x i8] c"/finch_cc_dirs_\00" @.str.6428 = private unnamed_addr constant [5 x i8] c".txt\00" @.str.6429 = private unnamed_addr constant [14 x i8] c"/finch_empty_\00" @.str.6430 = private unnamed_addr constant [3 x i8] c".c\00" @.str.6431 = private unnamed_addr constant [1 x i8] c"\00" @.str.6432 = private unnamed_addr constant [13 x i8] c" -E -v -x c \00" @.str.6433 = private unnamed_addr constant [5 x i8] c" 2> \00" @.str.6434 = private unnamed_addr constant [4 x i8] c" > \00" @.str.6435 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6436 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6437 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6438 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6439 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6440 = private unnamed_addr constant [35 x i8] c"#include <...> search starts here:\00" @.str.6441 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6442 = private unnamed_addr constant [20 x i8] c"End of search list.\00" @.str.6443 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6444 = private unnamed_addr constant [23 x i8] c" (framework directory)\00" @.str.6445 = private unnamed_addr constant [12 x i8] c"-iframework\00" @.str.6446 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6447 = private unnamed_addr constant [9 x i8] c"-isystem\00" declare void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16, ptr) declare [2 x i64] @clang_getCursorUSR(ptr) @.str.6448 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6449 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6450 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6451 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6452 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" declare [2 x i64] @clang_getCursorSpelling(ptr) @.str.6453 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6454 = private unnamed_addr constant [2 x i8] c" \00" @.str.6455 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6456 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" @.str.6457 = private unnamed_addr constant [13 x i8] c"anon_struct_\00" @.str.6458 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6459 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" @.str.6460 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6461 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" declare void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16, ptr) @.str.6462 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6463 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6464 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6465 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" declare i64 @clang_Type_getSizeOf(ptr) @.str.6466 = private unnamed_addr constant [1 x i8] c"\00" @.str.6467 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6468 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" declare i64 @clang_Type_getAlignOf(ptr) declare i32 @clang_getCursorKind(ptr) @.str.6469 = private unnamed_addr constant [13 x i8] c"is a C union\00" declare i32 @clang_Type_visitFields(ptr, ptr, ptr) @.str.6470 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6471 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" @.str.6472 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6473 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6474 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6475 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" declare void @clang_getCursorType(ptr sret(%S.C.CXType) align 16, ptr) declare i64 @clang_Cursor_getOffsetOfField(ptr) declare i32 @clang_Cursor_isBitField(ptr) @.str.6476 = private unnamed_addr constant [15 x i8] c"has bit fields\00" @.str.6477 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6478 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" @.str.6479 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6480 = private unnamed_addr constant [36 x i8] c"used .unsupported on a null pointer\00" @.str.6481 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6482 = private unnamed_addr constant [28 x i8] c"used .imp on a null pointer\00" @.str.6483 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6484 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" @.str.6485 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6486 = private unnamed_addr constant [34 x i8] c"used .hasHidden on a null pointer\00" @.str.6487 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6488 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" @.str.6489 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6490 = private unnamed_addr constant [31 x i8] c"used .fields on a null pointer\00" @.str.6491 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.6492 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.6493 = private unnamed_addr constant [4 x i8] c"i16\00" @.str.6494 = private unnamed_addr constant [4 x i8] c"u16\00" @.str.6495 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.6496 = private unnamed_addr constant [4 x i8] c"u32\00" @.str.6497 = private unnamed_addr constant [4 x i8] c"int\00" @.str.6498 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.6499 = private unnamed_addr constant [8 x i8] c"uses a \00" @.str.6500 = private unnamed_addr constant [12 x i8] c"-bit number\00" @.str.6501 = private unnamed_addr constant [5 x i8] c"void\00" @.str.6502 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.6503 = private unnamed_addr constant [5 x i8] c"char\00" @.str.6504 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.6505 = private unnamed_addr constant [6 x i8] c"float\00" declare void @clang_getPointeeType(ptr sret(%S.C.CXType) align 16, ptr) declare i32 @clang_isConstQualifiedType(ptr) @.str.6506 = private unnamed_addr constant [4 x i8] c"str\00" @.str.6507 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.6508 = private unnamed_addr constant [5 x i8] c"void\00" @.str.6509 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.6510 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.6511 = private unnamed_addr constant [24 x i8] c"uses a C union by value\00" @.str.6512 = private unnamed_addr constant [37 x i8] c"uses an incomplete C struct by value\00" @.str.6513 = private unnamed_addr constant [6 x i8] c"named\00" @.str.6514 = private unnamed_addr constant [2 x i8] c"C\00" declare void @clang_getArrayElementType(ptr sret(%S.C.CXType) align 16, ptr) declare i64 @clang_getArraySize(ptr) @.str.6515 = private unnamed_addr constant [17 x i8] c"uses long double\00" @.str.6516 = private unnamed_addr constant [18 x i8] c"uses the C type '\00" declare [2 x i64] @clang_getTypeSpelling(ptr) @.str.6517 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6518 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6519 = private unnamed_addr constant [3 x i8] c"0x\00" @.str.6520 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6521 = private unnamed_addr constant [3 x i8] c"0X\00" @.str.6522 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6523 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6524 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6525 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6526 = private unnamed_addr constant [5 x i8] c"uUlL\00" @.str.6527 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6528 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6529 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6530 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" declare void @clang_getCursorExtent(ptr sret(%S.C.CXSourceRange) align 16, ptr) declare void @clang_tokenize(ptr, ptr, ptr, ptr) declare i32 @clang_getTokenKind(ptr) @.str.6531 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6532 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" declare [2 x i64] @clang_getTokenSpelling(ptr, ptr) @.str.6533 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6534 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" declare void @clang_disposeTokens(ptr, ptr, i32) @.str.6535 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6536 = private unnamed_addr constant [2 x i8] c"(\00" @.str.6537 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6538 = private unnamed_addr constant [2 x i8] c")\00" @.str.6539 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6540 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6541 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.6542 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6543 = private unnamed_addr constant [2 x i8] c"-\00" @.str.6544 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6545 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6546 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6547 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6548 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6549 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6550 = private unnamed_addr constant [2 x i8] c".\00" @.str.6551 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6552 = private unnamed_addr constant [2 x i8] c"e\00" @.str.6553 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6554 = private unnamed_addr constant [2 x i8] c"E\00" @.str.6555 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6556 = private unnamed_addr constant [3 x i8] c"0x\00" @.str.6557 = private unnamed_addr constant [5 x i8] c"fFlL\00" @.str.6558 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6559 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6560 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" declare void @clang_getTypedefDeclUnderlyingType(ptr sret(%S.C.CXType) align 16, ptr) @.str.6561 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6562 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6563 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6564 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6565 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6566 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6567 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6568 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6569 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6570 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6571 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6572 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6573 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6574 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6575 = private unnamed_addr constant [31 x i8] c"used .header on a null pointer\00" declare i32 @clang_Cursor_getStorageClass(ptr) @.str.6576 = private unnamed_addr constant [63 x i8] c"is a static inline C function (it has no code to link against)\00" @.str.6577 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6578 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6579 = private unnamed_addr constant [43 x i8] c"has no parameter list in its C declaration\00" @.str.6580 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6581 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" declare void @clang_getResultType(ptr sret(%S.C.CXType) align 16, ptr) declare i32 @clang_getNumArgTypes(ptr) declare void @clang_getArgType(ptr sret(%S.C.CXType) align 16, ptr, i32) declare i32 @clang_isFunctionTypeVariadic(ptr) @.str.6582 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6583 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6584 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6585 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6586 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6587 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" declare i32 @clang_isCursorDefinition(ptr) @.str.6588 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6589 = private unnamed_addr constant [2 x i8] c" \00" @.str.6590 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6591 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6592 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6593 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" declare i32 @clang_visitChildren(ptr, ptr, ptr) @.str.6594 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6595 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" declare i64 @clang_getEnumConstantDeclValue(ptr) @.str.6596 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6597 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" declare i32 @clang_Cursor_isMacroBuiltin(ptr) declare i32 @clang_Cursor_isMacroFunctionLike(ptr) @.str.6598 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6599 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6600 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6601 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6602 = private unnamed_addr constant [3 x i8] c"-x\00" @.str.6603 = private unnamed_addr constant [2 x i8] c"c\00" @.str.6604 = private unnamed_addr constant [11 x i8] c"-std=gnu11\00" @.str.6605 = private unnamed_addr constant [10 x i8] c"--target=\00" @.str.6606 = private unnamed_addr constant [20 x i8] c"-D_USE_MATH_DEFINES\00" @.str.6607 = private unnamed_addr constant [3 x i8] c"-I\00" @.str.6608 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6609 = private unnamed_addr constant [1 x i8] c"\00" declare ptr @clang_createIndex(i32, i32) @.str.6610 = private unnamed_addr constant [11 x i8] c"#include \22\00" @.str.6611 = private unnamed_addr constant [3 x i8] c"\22\0A\00" @.str.6612 = private unnamed_addr constant [15 x i8] c"finch_import.c\00" @.str.6613 = private unnamed_addr constant [15 x i8] c"finch_import.c\00" @.str.6614 = private unnamed_addr constant [1 x i8] c"\00" declare i32 @clang_parseTranslationUnit2(ptr, ptr, ptr, i32, ptr, i32, i32, ptr) @.str.6615 = private unnamed_addr constant [34 x i8] c": error: couldn't read C header '\00" @.str.6616 = private unnamed_addr constant [2 x i8] c"'\00" declare i32 @clang_getNumDiagnostics(ptr) declare ptr @clang_getDiagnostic(ptr, i32) declare i32 @clang_getDiagnosticSeverity(ptr) declare [2 x i64] @clang_getDiagnosticSpelling(ptr) declare void @clang_disposeDiagnostic(ptr) @.str.6617 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6618 = private unnamed_addr constant [15 x i8] c"file not found\00" @.str.6619 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6620 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6621 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6622 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6623 = private unnamed_addr constant [35 x i8] c": error: can't find the C header '\00" @.str.6624 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6625 = private unnamed_addr constant [35 x i8] c": error: can't find the C header '\00" @.str.6626 = private unnamed_addr constant [11 x i8] c"', which '\00" @.str.6627 = private unnamed_addr constant [61 x i8] c"' includes (is its library's development package installed?)\00" @.str.6628 = private unnamed_addr constant [20 x i8] c": error: C header '\00" @.str.6629 = private unnamed_addr constant [17 x i8] c"' has an error: \00" declare void @clang_getTranslationUnitCursor(ptr sret(%S.C.CXCursor) align 16, ptr) declare void @clang_disposeTranslationUnit(ptr) declare void @clang_disposeIndex(ptr) @.str.6630 = private unnamed_addr constant [1 x i8] c"\00" @.str.6631 = private unnamed_addr constant [1 x i8] c"\00" @.str.6632 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6633 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" @.str.6634 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6635 = private unnamed_addr constant [5 x i8] c"'\5C''\00" @.str.6636 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6637 = private unnamed_addr constant [10 x i8] c"/dev/null\00" @.str.6638 = private unnamed_addr constant [7 x i8] c"TMPDIR\00" @.str.6639 = private unnamed_addr constant [1 x i8] c"\00" @.str.6640 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" @.str.6641 = private unnamed_addr constant [2 x i8] c"/\00" @.str.6642 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" @.str.6643 = private unnamed_addr constant [5 x i8] c"/tmp\00" @.str.6644 = private unnamed_addr constant [2 x i8] c":\00" declare i32 @getpid() @.str.6645 = private unnamed_addr constant [4 x i8] c"PWD\00" @.str.6646 = private unnamed_addr constant [1 x i8] c"\00" @.str.6647 = private unnamed_addr constant [15 x i8] c"XDG_CACHE_HOME\00" @.str.6648 = private unnamed_addr constant [1 x i8] c"\00" @.str.6649 = private unnamed_addr constant [7 x i8] c"/finch\00" @.str.6650 = private unnamed_addr constant [5 x i8] c"HOME\00" @.str.6651 = private unnamed_addr constant [1 x i8] c"\00" @.str.6652 = private unnamed_addr constant [14 x i8] c"/.cache/finch\00" @.str.6653 = private unnamed_addr constant [13 x i8] c"/finch-cache\00" @.str.6654 = private unnamed_addr constant [10 x i8] c"mkdir -p \00" @.str.6655 = private unnamed_addr constant [8 x i8] c"rm -rf \00" @.str.6656 = private unnamed_addr constant [4 x i8] c"mv \00" @.str.6657 = private unnamed_addr constant [2 x i8] c" \00" @.str.6658 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6659 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6660 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6661 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6662 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6663 = private unnamed_addr constant [15 x i8] c"/finch_triple_\00" @.str.6664 = private unnamed_addr constant [5 x i8] c".txt\00" @.str.6665 = private unnamed_addr constant [22 x i8] c"clang -dumpmachine > \00" @.str.6666 = private unnamed_addr constant [5 x i8] c" 2> \00" @.str.6667 = private unnamed_addr constant [1 x i8] c"\00" @.str.6668 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6669 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" @.str.6670 = private unnamed_addr constant [8 x i8] c"windows\00" @.str.6671 = private unnamed_addr constant [19 x i8] c"x86_64-w64-mingw32\00" @.str.6672 = private unnamed_addr constant [6 x i8] c"linux\00" @.str.6673 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" @.str.6674 = private unnamed_addr constant [6 x i8] c"arm64\00" @.str.6675 = private unnamed_addr constant [8 x i8] c"aarch64\00" @.str.6676 = private unnamed_addr constant [12 x i8] c"linux-arm64\00" @.str.6677 = private unnamed_addr constant [26 x i8] c"aarch64-unknown-linux-gnu\00" @.str.6678 = private unnamed_addr constant [6 x i8] c"macos\00" @.str.6679 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6680 = private unnamed_addr constant [8 x i8] c"aarch64\00" @.str.6681 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6682 = private unnamed_addr constant [6 x i8] c"arm64\00" @.str.6683 = private unnamed_addr constant [25 x i8] c"arm64-apple-macosx14.0.0\00" @.str.6684 = private unnamed_addr constant [26 x i8] c"x86_64-apple-macosx14.0.0\00" @.str.6685 = private unnamed_addr constant [23 x i8] c"x86_64-w64-windows-gnu\00" @.str.6686 = private unnamed_addr constant [19 x i8] c"x86_64-w64-mingw32\00" @.str.6687 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6688 = private unnamed_addr constant [8 x i8] c"windows\00" @.str.6689 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6690 = private unnamed_addr constant [6 x i8] c"mingw\00" @.str.6691 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6692 = private unnamed_addr constant [5 x i8] c"msvc\00" @.str.6693 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6694 = private unnamed_addr constant [6 x i8] c"win32\00" @.str.6695 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6696 = private unnamed_addr constant [5 x i8] c"msvc\00" @.str.6697 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6698 = private unnamed_addr constant [6 x i8] c"apple\00" @.str.6699 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6700 = private unnamed_addr constant [7 x i8] c"darwin\00" @.str.6701 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6702 = private unnamed_addr constant [6 x i8] c"macos\00" @.str.6703 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6704 = private unnamed_addr constant [8 x i8] c"aarch64\00" @.str.6705 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6706 = private unnamed_addr constant [6 x i8] c"arm64\00" @.str.6707 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6708 = private unnamed_addr constant [8 x i8] c"aarch64\00" @.str.6709 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6710 = private unnamed_addr constant [6 x i8] c"arm64\00" @.str.6711 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6712 = private unnamed_addr constant [6 x i8] c"apple\00" @.str.6713 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6714 = private unnamed_addr constant [7 x i8] c"darwin\00" @.str.6715 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6716 = private unnamed_addr constant [8 x i8] c"windows\00" @.str.6717 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6718 = private unnamed_addr constant [6 x i8] c"mingw\00" @.str.6719 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6720 = private unnamed_addr constant [5 x i8] c"msvc\00" @.str.6721 = private unnamed_addr constant [1 x i8] c"\00" @.str.6722 = private unnamed_addr constant [5 x i8] c".exe\00" @.str.6723 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" @.str.6724 = private unnamed_addr constant [1 x i8] c"\00" @.str.6725 = private unnamed_addr constant [23 x i8] c"x86_64-w64-mingw32-gcc\00" @.str.6726 = private unnamed_addr constant [22 x i8] c"aarch64-linux-gnu-gcc\00" @.str.6727 = private unnamed_addr constant [16 x i8] c"clang --target=\00" @.str.6728 = private unnamed_addr constant [2 x i8] c";\00" @.str.6729 = private unnamed_addr constant [6 x i8] c"clang\00" @.str.6730 = private unnamed_addr constant [3 x i8] c"cc\00" @.str.6731 = private unnamed_addr constant [6 x i8] c"wine \00" @.str.6732 = private unnamed_addr constant [14 x i8] c"qemu-aarch64 \00" @.str.6733 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" @.str.6734 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6735 = private unnamed_addr constant [1 x i8] c"\00" @.str.6736 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6737 = private unnamed_addr constant [11 x i8] c".framework\00" @.str.6738 = private unnamed_addr constant [12 x i8] c"-framework \00" @.str.6739 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6740 = private unnamed_addr constant [18 x i8] c"/finch_pkg_flags_\00" @.str.6741 = private unnamed_addr constant [5 x i8] c".txt\00" @.str.6742 = private unnamed_addr constant [19 x i8] c"pkg-config --libs \00" @.str.6743 = private unnamed_addr constant [4 x i8] c" > \00" @.str.6744 = private unnamed_addr constant [5 x i8] c" 2> \00" @.str.6745 = private unnamed_addr constant [1 x i8] c"\00" @.str.6746 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6747 = private unnamed_addr constant [3 x i8] c"-l\00" @.str.6748 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6749 = private unnamed_addr constant [2 x i8] c"/\00" @.str.6750 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6751 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6752 = private unnamed_addr constant [2 x i8] c"/\00" @.str.6753 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6754 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6755 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6756 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6757 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6758 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6759 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6760 = private unnamed_addr constant [1 x i8] c"\00" @.str.6761 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6762 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6763 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6764 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6765 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6766 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6767 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6768 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6769 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" @.str.6770 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" @.str.6771 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6772 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6773 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" @.str.6774 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" @.str.6775 = private unnamed_addr constant [3 x i8] c" \0A\00" @.str.6776 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6777 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" @.str.6778 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" @.str.6779 = private unnamed_addr constant [4 x i8] c" \0A\0D\00" @.str.6780 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6781 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" @.str.6782 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" @.str.6783 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" @.str.6784 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6785 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" @.str.6786 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" @.str.6787 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" @.str.6788 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6789 = private unnamed_addr constant [14 x i8] c"ld: library '\00" @.str.6790 = private unnamed_addr constant [14 x i8] c"ld: library '\00" @.str.6791 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6792 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6793 = private unnamed_addr constant [12 x i8] c"framework '\00" @.str.6794 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6795 = private unnamed_addr constant [10 x i8] c"not found\00" @.str.6796 = private unnamed_addr constant [12 x i8] c"framework '\00" @.str.6797 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6798 = private unnamed_addr constant [11 x i8] c".framework\00" @.str.6799 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6800 = private unnamed_addr constant [2 x i8] c"\22\00" @.str.6801 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6802 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" @.str.6803 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6804 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6805 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" @.str.6806 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6807 = private unnamed_addr constant [2 x i8] c"_\00" @.str.6808 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6809 = private unnamed_addr constant [22 x i8] c"error: linking failed\00" @.str.6810 = private unnamed_addr constant [1 x i8] c"\00" @.str.6811 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6812 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6813 = private unnamed_addr constant [21 x i8] c"error: the library '\00" @.str.6814 = private unnamed_addr constant [63 x i8] c"' wasn't found. Is it installed? (on Nix: add it to shell.nix)\00" @.str.6815 = private unnamed_addr constant [1 x i8] c"\00" @.str.6816 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6817 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6818 = private unnamed_addr constant [1 x i8] c"\00" @.str.6819 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6820 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6821 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6822 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6823 = private unnamed_addr constant [3 x i8] c", \00" @.str.6824 = private unnamed_addr constant [6 x i8] c" and \00" @.str.6825 = private unnamed_addr constant [6 x i8] c" more\00" @.str.6826 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6827 = private unnamed_addr constant [26 x i8] c"error: no code found for \00" @.str.6828 = private unnamed_addr constant [1 x i8] c"\00" @.str.6829 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6830 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6831 = private unnamed_addr constant [5 x i8] c"come\00" @.str.6832 = private unnamed_addr constant [6 x i8] c"comes\00" @.str.6833 = private unnamed_addr constant [8 x i8] c"error: \00" @.str.6834 = private unnamed_addr constant [2 x i8] c" \00" @.str.6835 = private unnamed_addr constant [8 x i8] c" from \22\00" @.str.6836 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6837 = private unnamed_addr constant [32 x i8] c"\22, but its library isn't linked\00" @.str.6838 = private unnamed_addr constant [1 x i8] c"\00" @.str.6839 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6840 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6841 = private unnamed_addr constant [75 x i8] c" the header only says the functions exist; their code lives in a library.\00" @.str.6842 = private unnamed_addr constant [1 x i8] c"\00" @.str.6843 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6844 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6845 = private unnamed_addr constant [67 x i8] c" add this at the top of your file (with the library's real name):\00" @.str.6846 = private unnamed_addr constant [1 x i8] c"\00" @.str.6847 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6848 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6849 = private unnamed_addr constant [1 x i8] c"\00" @.str.6850 = private unnamed_addr constant [1 x i8] c"\00" @.str.6851 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6852 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6853 = private unnamed_addr constant [13 x i8] c" link \22\00" @.str.6854 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6855 = private unnamed_addr constant [2 x i8] c"\22\00" @.str.6856 = private unnamed_addr constant [1 x i8] c"\00" @.str.6857 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6858 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6859 = private unnamed_addr constant [1 x i8] c"\00" @.str.6860 = private unnamed_addr constant [1 x i8] c"\00" @.str.6861 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6862 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6863 = private unnamed_addr constant [5 x i8] c"/rt-\00" @.str.6864 = private unnamed_addr constant [4 x i8] c"2.5\00" @.str.6865 = private unnamed_addr constant [3 x i8] c".o\00" @.str.6866 = private unnamed_addr constant [6 x i8] c".part\00" @.str.6867 = private unnamed_addr constant [7 x i8] c" -fPIC\00" @.str.6868 = private unnamed_addr constant [1 x i8] c"\00" @.str.6869 = private unnamed_addr constant [5 x i8] c".log\00" @.str.6870 = private unnamed_addr constant [5 x i8] c" -O2\00" @.str.6871 = private unnamed_addr constant [5 x i8] c" -c \00" @.str.6872 = private unnamed_addr constant [5 x i8] c" -o \00" @.str.6873 = private unnamed_addr constant [4 x i8] c" > \00" @.str.6874 = private unnamed_addr constant [6 x i8] c" 2>&1\00" @.str.6875 = private unnamed_addr constant [1 x i8] c"\00" @.str.6876 = private unnamed_addr constant [47 x i8] c"error: couldn't build the Finch runtime with '\00" @.str.6877 = private unnamed_addr constant [31 x i8] c"' (is a C compiler installed?)\00" @.str.6878 = private unnamed_addr constant [12 x i8] c"FINCH_CLANG\00" @.str.6879 = private unnamed_addr constant [1 x i8] c"\00" @.str.6880 = private unnamed_addr constant [6 x i8] c"clang\00" @.str.6881 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" @.str.6882 = private unnamed_addr constant [1 x i8] c"\00" @.str.6883 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" @.str.6884 = private unnamed_addr constant [1 x i8] c"\00" @.str.6885 = private unnamed_addr constant [1 x i8] c"\00" @.str.6886 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6887 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6888 = private unnamed_addr constant [4 x i8] c".ll\00" @.str.6889 = private unnamed_addr constant [3 x i8] c".o\00" @.str.6890 = private unnamed_addr constant [1 x i8] c"\00" @.str.6891 = private unnamed_addr constant [11 x i8] c" --target=\00" @.str.6892 = private unnamed_addr constant [5 x i8] c".log\00" @.str.6893 = private unnamed_addr constant [2 x i8] c" \00" @.str.6894 = private unnamed_addr constant [8 x i8] c" -w -c \00" @.str.6895 = private unnamed_addr constant [5 x i8] c" -o \00" @.str.6896 = private unnamed_addr constant [4 x i8] c" > \00" @.str.6897 = private unnamed_addr constant [6 x i8] c" 2>&1\00" @.str.6898 = private unnamed_addr constant [1 x i8] c"\00" @.str.6899 = private unnamed_addr constant [1 x i8] c"\00" @.str.6900 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6901 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6902 = private unnamed_addr constant [47 x i8] c"error: clang couldn't compile the program's IR\00" @.str.6903 = private unnamed_addr constant [1 x i8] c"\00" @.str.6904 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6905 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6906 = private unnamed_addr constant [2 x i8] c" \00" @.str.6907 = private unnamed_addr constant [2 x i8] c" \00" @.str.6908 = private unnamed_addr constant [5 x i8] c" -o \00" @.str.6909 = private unnamed_addr constant [5 x i8] c" -lm\00" @.str.6910 = private unnamed_addr constant [14 x i8] c"FINCH_LDFLAGS\00" @.str.6911 = private unnamed_addr constant [1 x i8] c"\00" @.str.6912 = private unnamed_addr constant [2 x i8] c" \00" @.str.6913 = private unnamed_addr constant [14 x i8] c"FINCH_LDFLAGS\00" @.str.6914 = private unnamed_addr constant [1 x i8] c"\00" @.str.6915 = private unnamed_addr constant [13 x i8] c" -dynamiclib\00" @.str.6916 = private unnamed_addr constant [9 x i8] c" -shared\00" @.str.6917 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6918 = private unnamed_addr constant [3 x i8] c".c\00" @.str.6919 = private unnamed_addr constant [2 x i8] c".\00" @.str.6920 = private unnamed_addr constant [3 x i8] c".o\00" @.str.6921 = private unnamed_addr constant [7 x i8] c" -fPIC\00" @.str.6922 = private unnamed_addr constant [1 x i8] c"\00" @.str.6923 = private unnamed_addr constant [5 x i8] c" -O2\00" @.str.6924 = private unnamed_addr constant [5 x i8] c" -c \00" @.str.6925 = private unnamed_addr constant [5 x i8] c" -o \00" @.str.6926 = private unnamed_addr constant [4 x i8] c" > \00" @.str.6927 = private unnamed_addr constant [6 x i8] c" 2>&1\00" @.str.6928 = private unnamed_addr constant [1 x i8] c"\00" @.str.6929 = private unnamed_addr constant [25 x i8] c"error: couldn't compile \00" @.str.6930 = private unnamed_addr constant [1 x i8] c"\00" @.str.6931 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6932 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6933 = private unnamed_addr constant [2 x i8] c" \00" @.str.6934 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6935 = private unnamed_addr constant [3 x i8] c".o\00" @.str.6936 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6937 = private unnamed_addr constant [3 x i8] c".a\00" @.str.6938 = private unnamed_addr constant [2 x i8] c" \00" @.str.6939 = private unnamed_addr constant [2 x i8] c" \00" @.str.6940 = private unnamed_addr constant [4 x i8] c" > \00" @.str.6941 = private unnamed_addr constant [6 x i8] c" 2>&1\00" @.str.6942 = private unnamed_addr constant [1 x i8] c"\00" @.str.6943 = private unnamed_addr constant [43 x i8] c"error: no C compiler found to link with ('\00" @.str.6944 = private unnamed_addr constant [33 x i8] c"'; install one, or set FINCH_CC)\00" @.str.6945 = private unnamed_addr constant [1 x i8] c"\00" @.str.6946 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6947 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6948 = private unnamed_addr constant [1 x i8] c"\00" @.str.6949 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6950 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6951 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6952 = private unnamed_addr constant [8 x i8] c"file://\00" @.str.6953 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6954 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6955 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6956 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6957 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6958 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6959 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6960 = private unnamed_addr constant [17 x i8] c"0123456789ABCDEF\00" @.str.6961 = private unnamed_addr constant [8 x i8] c"file://\00" @.str.6962 = private unnamed_addr constant [6 x i8] c"/-_.~\00" @.str.6963 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6964 = private unnamed_addr constant [2 x i8] c"%\00" @.str.6965 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6966 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6967 = private unnamed_addr constant [1 x i8] c"\00" @.str.6968 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6969 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6970 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6971 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6972 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6973 = private unnamed_addr constant [1 x i8] c"\00" @.str.6974 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6975 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6976 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6977 = private unnamed_addr constant [1 x i8] c"\00" declare i32 @getchar() @.str.6978 = private unnamed_addr constant [1 x i8] c"\00" @.str.6979 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6980 = private unnamed_addr constant [2 x i8] c"\0D\00" @.str.6981 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" declare i32 @feof(ptr) @.str.6982 = private unnamed_addr constant [33 x i8] c"the editor closed the connection\00" @.str.6983 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6984 = private unnamed_addr constant [16 x i8] c"Content-Length:\00" @.str.6985 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6986 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6987 = private unnamed_addr constant [26 x i8] c"the message was cut short\00" @.str.6988 = private unnamed_addr constant [17 x i8] c"Content-Length: \00" @.str.6989 = private unnamed_addr constant [5 x i8] c"\0D\0A\0D\0A\00" @.str.6990 = private unnamed_addr constant [1 x i8] c"\00" declare i64 @fwrite(ptr, i64, i64, ptr) @.str.6991 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" @.str.6992 = private unnamed_addr constant [4 x i8] c"2.0\00" @.str.6993 = private unnamed_addr constant [3 x i8] c"id\00" @.str.6994 = private unnamed_addr constant [7 x i8] c"result\00" @.str.6995 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" @.str.6996 = private unnamed_addr constant [4 x i8] c"2.0\00" @.str.6997 = private unnamed_addr constant [7 x i8] c"method\00" @.str.6998 = private unnamed_addr constant [7 x i8] c"params\00" @.str.6999 = private unnamed_addr constant [5 x i8] c"line\00" @.str.7000 = private unnamed_addr constant [10 x i8] c"character\00" @.str.7001 = private unnamed_addr constant [6 x i8] c"start\00" @.str.7002 = private unnamed_addr constant [4 x i8] c"end\00" @.str.7003 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7004 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.7005 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7006 = private unnamed_addr constant [10 x i8] c": error: \00" @.str.7007 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7008 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7009 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7010 = private unnamed_addr constant [2 x i8] c":\00" @.str.7011 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7012 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7013 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7014 = private unnamed_addr constant [2 x i8] c":\00" @.str.7015 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7016 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.7017 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7018 = private unnamed_addr constant [2 x i8] c"@\00" @.str.7019 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7020 = private unnamed_addr constant [3 x i8] c"@R\00" @.str.7021 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7022 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7023 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7024 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7025 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7026 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7027 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7028 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7029 = private unnamed_addr constant [3 x i8] c"@V\00" @.str.7030 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7031 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7032 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7033 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7034 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7035 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7036 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7037 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7038 = private unnamed_addr constant [3 x i8] c"@F\00" @.str.7039 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7040 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7041 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7042 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7043 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7044 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7045 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7046 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7047 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7048 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7049 = private unnamed_addr constant [2 x i8] c"|\00" @.str.7050 = private unnamed_addr constant [3 x i8] c"@S\00" @.str.7051 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7052 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7053 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7054 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7055 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7056 = private unnamed_addr constant [4 x i8] c"@SF\00" @.str.7057 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7058 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7059 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7060 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7061 = private unnamed_addr constant [3 x i8] c"@E\00" @.str.7062 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7063 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7064 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7065 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7066 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7067 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7068 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7069 = private unnamed_addr constant [2 x i8] c",\00" @.str.7070 = private unnamed_addr constant [3 x i8] c"@I\00" @.str.7071 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7072 = private unnamed_addr constant [1 x i8] c"\00" @.str.7073 = private unnamed_addr constant [5 x i8] c"/doc\00" @.str.7074 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.7075 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7076 = private unnamed_addr constant [12 x i8] c" --overlay \00" @.str.7077 = private unnamed_addr constant [2 x i8] c"=\00" @.str.7078 = private unnamed_addr constant [9 x i8] c"/out.txt\00" @.str.7079 = private unnamed_addr constant [8 x i8] c" index \00" @.str.7080 = private unnamed_addr constant [4 x i8] c" > \00" @.str.7081 = private unnamed_addr constant [6 x i8] c" 2>&1\00" @.str.7082 = private unnamed_addr constant [1 x i8] c"\00" @.str.7083 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7084 = private unnamed_addr constant [6 x i8] c"range\00" @.str.7085 = private unnamed_addr constant [9 x i8] c"severity\00" @.str.7086 = private unnamed_addr constant [7 x i8] c"source\00" @.str.7087 = private unnamed_addr constant [6 x i8] c"finch\00" @.str.7088 = private unnamed_addr constant [8 x i8] c"message\00" @.str.7089 = private unnamed_addr constant [4 x i8] c"uri\00" @.str.7090 = private unnamed_addr constant [12 x i8] c"diagnostics\00" @.str.7091 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" @.str.7092 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7093 = private unnamed_addr constant [5 x i8] c"kind\00" @.str.7094 = private unnamed_addr constant [9 x i8] c"markdown\00" @.str.7095 = private unnamed_addr constant [6 x i8] c"value\00" @.str.7096 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7097 = private unnamed_addr constant [9 x i8] c"contents\00" @.str.7098 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7099 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7100 = private unnamed_addr constant [4 x i8] c"uri\00" @.str.7101 = private unnamed_addr constant [6 x i8] c"range\00" @.str.7102 = private unnamed_addr constant [2 x i8] c".\00" @.str.7103 = private unnamed_addr constant [5 x i8] c"name\00" @.str.7104 = private unnamed_addr constant [5 x i8] c"kind\00" @.str.7105 = private unnamed_addr constant [6 x i8] c"start\00" @.str.7106 = private unnamed_addr constant [4 x i8] c"end\00" @.str.7107 = private unnamed_addr constant [6 x i8] c"range\00" @.str.7108 = private unnamed_addr constant [15 x i8] c"selectionRange\00" @.str.7109 = private unnamed_addr constant [6 x i8] c"label\00" @.str.7110 = private unnamed_addr constant [5 x i8] c"kind\00" @.str.7111 = private unnamed_addr constant [7 x i8] c"detail\00" @.str.7112 = private unnamed_addr constant [5 x i8] c"kind\00" @.str.7113 = private unnamed_addr constant [9 x i8] c"markdown\00" @.str.7114 = private unnamed_addr constant [6 x i8] c"value\00" @.str.7115 = private unnamed_addr constant [14 x i8] c"documentation\00" @.str.7116 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7117 = private unnamed_addr constant [2 x i8] c".\00" @.str.7118 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7119 = private unnamed_addr constant [33 x i8] c"called .push() on a null pointer\00" @.str.7120 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7121 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7122 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7123 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7124 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7125 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7126 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7127 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7128 = private unnamed_addr constant [2 x i8] c"[\00" @.str.7129 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7130 = private unnamed_addr constant [1 x i8] c"\00" @.str.7131 = private unnamed_addr constant [8 x i8] c"struct \00" @.str.7132 = private unnamed_addr constant [1 x i8] c"\00" @.str.7133 = private unnamed_addr constant [6 x i8] c"enum \00" @.str.7134 = private unnamed_addr constant [1 x i8] c"\00" @.str.7135 = private unnamed_addr constant [2 x i8] c".\00" @.str.7136 = private unnamed_addr constant [1 x i8] c"\00" @.str.7137 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7138 = private unnamed_addr constant [3 x i8] c"[]\00" @.str.7139 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7140 = private unnamed_addr constant [4 x i8] c"str\00" @.str.7141 = private unnamed_addr constant [5 x i8] c"char\00" @.str.7142 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7143 = private unnamed_addr constant [5 x i8] c"ptr[\00" @.str.7144 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7145 = private unnamed_addr constant [2 x i8] c"]\00" @.str.7146 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7147 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7148 = private unnamed_addr constant [3 x i8] c"[]\00" @.str.7149 = private unnamed_addr constant [4 x i8] c"str\00" @.str.7150 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7151 = private unnamed_addr constant [5 x i8] c"map[\00" @.str.7152 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7153 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7154 = private unnamed_addr constant [1 x i8] c"\00" @.str.7155 = private unnamed_addr constant [1 x i8] c"\00" @.str.7156 = private unnamed_addr constant [1 x i8] c"\00" @.str.7157 = private unnamed_addr constant [1 x i8] c"\00" @.str.7158 = private unnamed_addr constant [1 x i8] c"\00" @.str.7159 = private unnamed_addr constant [1 x i8] c"\00" @.str.7160 = private unnamed_addr constant [8 x i8] c"struct \00" @.str.7161 = private unnamed_addr constant [1 x i8] c"\00" @.str.7162 = private unnamed_addr constant [1 x i8] c"\00" @.str.7163 = private unnamed_addr constant [6 x i8] c"enum \00" @.str.7164 = private unnamed_addr constant [1 x i8] c"\00" @.str.7165 = private unnamed_addr constant [7 x i8] c"module\00" @.str.7166 = private unnamed_addr constant [1 x i8] c"\00" @.str.7167 = private unnamed_addr constant [1 x i8] c"\00" @.str.7168 = private unnamed_addr constant [1 x i8] c"\00" @.str.7169 = private unnamed_addr constant [1 x i8] c"\00" @.str.7170 = private unnamed_addr constant [1 x i8] c"\00" @.str.7171 = private unnamed_addr constant [13 x i8] c"isIncomplete\00" @.str.7172 = private unnamed_addr constant [6 x i8] c"items\00" @.str.7173 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7174 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7175 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7176 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7177 = private unnamed_addr constant [1 x i8] c"\00" @.str.7178 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7179 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7180 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7181 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7182 = private unnamed_addr constant [5 x i8] c"ptr[\00" @.str.7183 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7184 = private unnamed_addr constant [2 x i8] c"]\00" @.str.7185 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7186 = private unnamed_addr constant [6 x i8] c"label\00" @.str.7187 = private unnamed_addr constant [6 x i8] c"label\00" @.str.7188 = private unnamed_addr constant [11 x i8] c"parameters\00" @.str.7189 = private unnamed_addr constant [11 x i8] c"signatures\00" @.str.7190 = private unnamed_addr constant [16 x i8] c"activeSignature\00" @.str.7191 = private unnamed_addr constant [16 x i8] c"activeParameter\00" @.str.7192 = private unnamed_addr constant [6 x i8] c"label\00" @.str.7193 = private unnamed_addr constant [14 x i8] c"documentation\00" @.str.7194 = private unnamed_addr constant [11 x i8] c"signatures\00" @.str.7195 = private unnamed_addr constant [16 x i8] c"activeSignature\00" @.str.7196 = private unnamed_addr constant [16 x i8] c"activeParameter\00" @.str.7197 = private unnamed_addr constant [13 x i8] c"textDocument\00" @.str.7198 = private unnamed_addr constant [5 x i8] c"text\00" @.str.7199 = private unnamed_addr constant [1 x i8] c"\00" @.str.7200 = private unnamed_addr constant [13 x i8] c"textDocument\00" @.str.7201 = private unnamed_addr constant [4 x i8] c"uri\00" @.str.7202 = private unnamed_addr constant [1 x i8] c"\00" @.str.7203 = private unnamed_addr constant [7 x i8] c"method\00" @.str.7204 = private unnamed_addr constant [1 x i8] c"\00" @.str.7205 = private unnamed_addr constant [7 x i8] c"params\00" @.str.7206 = private unnamed_addr constant [3 x i8] c"id\00" @.str.7207 = private unnamed_addr constant [11 x i8] c"initialize\00" @.str.7208 = private unnamed_addr constant [17 x i8] c"textDocumentSync\00" @.str.7209 = private unnamed_addr constant [14 x i8] c"hoverProvider\00" @.str.7210 = private unnamed_addr constant [19 x i8] c"definitionProvider\00" @.str.7211 = private unnamed_addr constant [23 x i8] c"documentSymbolProvider\00" @.str.7212 = private unnamed_addr constant [2 x i8] c".\00" @.str.7213 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" @.str.7214 = private unnamed_addr constant [19 x i8] c"completionProvider\00" @.str.7215 = private unnamed_addr constant [2 x i8] c"(\00" @.str.7216 = private unnamed_addr constant [2 x i8] c",\00" @.str.7217 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" @.str.7218 = private unnamed_addr constant [22 x i8] c"signatureHelpProvider\00" @.str.7219 = private unnamed_addr constant [13 x i8] c"capabilities\00" @.str.7220 = private unnamed_addr constant [5 x i8] c"name\00" @.str.7221 = private unnamed_addr constant [6 x i8] c"finch\00" @.str.7222 = private unnamed_addr constant [11 x i8] c"serverInfo\00" @.str.7223 = private unnamed_addr constant [9 x i8] c"shutdown\00" @.str.7224 = private unnamed_addr constant [5 x i8] c"exit\00" @.str.7225 = private unnamed_addr constant [21 x i8] c"textDocument/didOpen\00" @.str.7226 = private unnamed_addr constant [23 x i8] c"textDocument/didChange\00" @.str.7227 = private unnamed_addr constant [15 x i8] c"contentChanges\00" @.str.7228 = private unnamed_addr constant [5 x i8] c"text\00" @.str.7229 = private unnamed_addr constant [1 x i8] c"\00" @.str.7230 = private unnamed_addr constant [21 x i8] c"textDocument/didSave\00" @.str.7231 = private unnamed_addr constant [22 x i8] c"textDocument/didClose\00" @.str.7232 = private unnamed_addr constant [4 x i8] c"uri\00" @.str.7233 = private unnamed_addr constant [12 x i8] c"diagnostics\00" @.str.7234 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" @.str.7235 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" @.str.7236 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" @.str.7237 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" @.str.7238 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" @.str.7239 = private unnamed_addr constant [27 x i8] c"textDocument/signatureHelp\00" @.str.7240 = private unnamed_addr constant [9 x i8] c"position\00" @.str.7241 = private unnamed_addr constant [5 x i8] c"line\00" @.str.7242 = private unnamed_addr constant [9 x i8] c"position\00" @.str.7243 = private unnamed_addr constant [10 x i8] c"character\00" @.str.7244 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7245 = private unnamed_addr constant [1 x i8] c"\00" @.str.7246 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7247 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" @.str.7248 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" @.str.7249 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" @.str.7250 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" @.str.7251 = private unnamed_addr constant [12 x i8] c"/finch_lsp_\00" @.str.7252 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7253 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7254 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7255 = private unnamed_addr constant [2 x i8] c"\22\00" @.str.7256 = private unnamed_addr constant [3 x i8] c"\5C\22\00" @.str.7257 = private unnamed_addr constant [3 x i8] c"\5C\5C\00" @.str.7258 = private unnamed_addr constant [3 x i8] c"\5Cn\00" @.str.7259 = private unnamed_addr constant [3 x i8] c"\5Cr\00" @.str.7260 = private unnamed_addr constant [3 x i8] c"\5Ct\00" @.str.7261 = private unnamed_addr constant [5 x i8] c"\5Cu00\00" @.str.7262 = private unnamed_addr constant [2 x i8] c"\22\00" @.str.7263 = private unnamed_addr constant [1 x i8] c"\00" @.str.7264 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" @.str.7265 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7266 = private unnamed_addr constant [1 x i8] c"\00" @.str.7267 = private unnamed_addr constant [1 x i8] c"\00" @.str.7268 = private unnamed_addr constant [2 x i8] c",\00" @.str.7269 = private unnamed_addr constant [2 x i8] c":\00" @.str.7270 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.7271 = private unnamed_addr constant [3 x i8] c": \00" @.str.7272 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7273 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7274 = private unnamed_addr constant [5 x i8] c"null\00" @.str.7275 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7276 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7277 = private unnamed_addr constant [5 x i8] c"true\00" @.str.7278 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7279 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7280 = private unnamed_addr constant [6 x i8] c"false\00" @.str.7281 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7282 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7283 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7284 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7285 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7286 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7287 = private unnamed_addr constant [3 x i8] c"[]\00" @.str.7288 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7289 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7290 = private unnamed_addr constant [2 x i8] c"[\00" @.str.7291 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7292 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7293 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7294 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7295 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7296 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7297 = private unnamed_addr constant [2 x i8] c"]\00" @.str.7298 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7299 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7300 = private unnamed_addr constant [3 x i8] c"{}\00" @.str.7301 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7302 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7303 = private unnamed_addr constant [2 x i8] c"{\00" @.str.7304 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7305 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7306 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7307 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7308 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7309 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7310 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7311 = private unnamed_addr constant [2 x i8] c"}\00" @.str.7312 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7313 = private unnamed_addr constant [36 x i8] c"no arm of this match fits the value\00" @.str.7314 = private unnamed_addr constant [1 x i8] c"\00" @.str.7315 = private unnamed_addr constant [1 x i8] c"\00" @.str.7316 = private unnamed_addr constant [1 x i8] c"\00" @.str.7317 = private unnamed_addr constant [3 x i8] c" \00" @.str.7318 = private unnamed_addr constant [1 x i8] c"\00" @.str.7319 = private unnamed_addr constant [1 x i8] c"\00" @.str.7320 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7321 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7322 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7323 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7324 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7325 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7326 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7327 = private unnamed_addr constant [6 x i8] c"line \00" @.str.7328 = private unnamed_addr constant [10 x i8] c", column \00" @.str.7329 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7330 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7331 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7332 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7333 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7334 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7335 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7336 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7337 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7338 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7339 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7340 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7341 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7342 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7343 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7344 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7345 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7346 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7347 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7348 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7349 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7350 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7351 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7352 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7353 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7354 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7355 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7356 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7357 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7358 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7359 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7360 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7361 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7362 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7363 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7364 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7365 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7366 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7367 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7368 = private unnamed_addr constant [27 x i8] c"json: the text ends where \00" @.str.7369 = private unnamed_addr constant [13 x i8] c" should be (\00" @.str.7370 = private unnamed_addr constant [2 x i8] c")\00" @.str.7371 = private unnamed_addr constant [14 x i8] c"json: found '\00" @.str.7372 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7373 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7374 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7375 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7376 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7377 = private unnamed_addr constant [9 x i8] c"' where \00" @.str.7378 = private unnamed_addr constant [13 x i8] c" should be (\00" @.str.7379 = private unnamed_addr constant [2 x i8] c")\00" @.str.7380 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7381 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7382 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7383 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7384 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7385 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7386 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7387 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7388 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7389 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7390 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7391 = private unnamed_addr constant [2 x i8] c"'\00" @.str.7392 = private unnamed_addr constant [2 x i8] c"'\00" @.str.7393 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7394 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7395 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7396 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7397 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7398 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7399 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7400 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7401 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7402 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7403 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7404 = private unnamed_addr constant [20 x i8] c"a hexadecimal digit\00" @.str.7405 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7406 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7407 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7408 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7409 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7410 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7411 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7412 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7413 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7414 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7415 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7416 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7417 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7418 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7419 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7420 = private unnamed_addr constant [31 x i8] c"json: a text is never closed (\00" @.str.7421 = private unnamed_addr constant [2 x i8] c")\00" @.str.7422 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7423 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7424 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7425 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7426 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7427 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7428 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7429 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7430 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7431 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7432 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7433 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7434 = private unnamed_addr constant [1 x i8] c"\00" @.str.7435 = private unnamed_addr constant [56 x i8] c"json: a line break or control character inside a text (\00" @.str.7436 = private unnamed_addr constant [2 x i8] c")\00" @.str.7437 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7438 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7439 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7440 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7441 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7442 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7443 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7444 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7445 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7446 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7447 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7448 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.7449 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.7450 = private unnamed_addr constant [2 x i8] c"\0D\00" @.str.7451 = private unnamed_addr constant [3 x i8] c"\5Cu\00" @.str.7452 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7453 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7454 = private unnamed_addr constant [23 x i8] c"json: unknown escape \5C\00" @.str.7455 = private unnamed_addr constant [13 x i8] c" in a text (\00" @.str.7456 = private unnamed_addr constant [2 x i8] c")\00" @.str.7457 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7458 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7459 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7460 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7461 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7462 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7463 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7464 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7465 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7466 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7467 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7468 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7469 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7470 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7471 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7472 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7473 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7474 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7475 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7476 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7477 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7478 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7479 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7480 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7481 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7482 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7483 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7484 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7485 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7486 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7487 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7488 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7489 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7490 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7491 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7492 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7493 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7494 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7495 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7496 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7497 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7498 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7499 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7500 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7501 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7502 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7503 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7504 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7505 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7506 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7507 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7508 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7509 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7510 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7511 = private unnamed_addr constant [9 x i8] c"a number\00" @.str.7512 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7513 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7514 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7515 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7516 = private unnamed_addr constant [8 x i8] c"a value\00" @.str.7517 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7518 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7519 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7520 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7521 = private unnamed_addr constant [16 x i8] c"a key in quotes\00" @.str.7522 = private unnamed_addr constant [4 x i8] c"':'\00" @.str.7523 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7524 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7525 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7526 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7527 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7528 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7529 = private unnamed_addr constant [11 x i8] c"',' or '}'\00" @.str.7530 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7531 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7532 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7533 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7534 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7535 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7536 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7537 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7538 = private unnamed_addr constant [11 x i8] c"',' or ']'\00" @.str.7539 = private unnamed_addr constant [5 x i8] c"true\00" @.str.7540 = private unnamed_addr constant [6 x i8] c"false\00" @.str.7541 = private unnamed_addr constant [5 x i8] c"null\00" @.str.7542 = private unnamed_addr constant [8 x i8] c"a value\00" @.str.7543 = private unnamed_addr constant [20 x i8] c"the end of the text\00" @.str.7544 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" @.str.7545 = private unnamed_addr constant [13 x i8] c"std/json.fch\00" @.str.7546 = private unnamed_addr constant [13 x i8] c"std/path.fch\00" @.str.7547 = private unnamed_addr constant [13 x i8] c"std/proc.fch\00" @.str.7548 = private unnamed_addr constant [21 x i8] c"std/proc_windows.fch\00" @.str.7549 = private unnamed_addr constant [13 x i8] c"std/time.fch\00" @.str.7550 = private unnamed_addr constant [21 x i8] c"std/time_windows.fch\00" @.str.7551 = private unnamed_addr constant [16 x i8] c"std/finch_win.h\00" @.str.7552 = private unnamed_addr constant [24982 x i8] c"// The Finch runtime: string and array helpers, input, files and runtime errors.\0A// It is embedded in the compiler, compiled once into a cache folder, and linked\0A// statically into every Finch program. Everything here is plain C with no state.\0A//\0A// Layout shared with the compiler (src/codegen.cpp):\0A// str = { char *ptr; int64 len; int64 cap } ptr is always NUL-terminated\0A// cap > 0 : heap memory owned by the value (cap bytes allocated)\0A// cap == 0 : a string literal, valid forever, never written to\0A// cap == -1: borrowed from C, must be copied before it is kept\0A// []T = { T *ptr; int64 len; int64 cap } owns ptr when cap > 0\0A// map[K]V: see \22maps\22 below\0A\0A#include \0A#include \0A#include \0A#include \0A#include \0A#include \0A#include \0A#ifndef _WIN32\0A#include \0A#endif\0A\0Atypedef struct {\0A char *ptr;\0A int64_t len;\0A int64_t cap;\0A} FStr;\0A\0Atypedef struct {\0A void *ptr;\0A int64_t len;\0A int64_t cap;\0A} FArr;\0A\0Astatic char empty[1] = \22\22;\0A\0A// ---------- runtime errors ----------\0A\0A// A program that loads Finch libraries (finch build --shared) can take runtime errors over\0A// instead of the process exiting: finch_module_on_fatal(handler) in each library. The handler\0A// gets the message and must not return (longjmp out, or exit itself).\0Astatic void (*fatal_hook)(const char *msg);\0Avoid finch_on_fatal(void (*hook)(const char *msg)) { fatal_hook = hook; }\0A\0Astatic __attribute__((noreturn)) void fatal(const char *msg) {\0A if (fatal_hook) fatal_hook(msg);\0A fflush(stdout);\0A fprintf(stderr, \22%s\5Cn\22, msg);\0A exit(1);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_panic(const char *file, int64_t line, const char *msg) {\0A char full[1024];\0A snprintf(full, sizeof full, \22%s:%lld: runtime error: %s\22, file, (long long)line, msg);\0A fflush(stdout);\0A fatal(full);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_panic_index(const char *file, int64_t line, int64_t i, int64_t len) {\0A char msg[128];\0A snprintf(msg, sizeof msg, \22index %lld is out of range (the length is %lld)\22, (long long)i, (long long)len);\0A finch_panic(file, line, msg);\0A}\0A\0Astatic void *must(void *p) {\0A if (!p) {\0A fflush(stdout);\0A fatal(\22runtime error: out of memory\22);\0A }\0A return p;\0A}\0A\0Avoid *finch_alloc(int64_t n) { return must(malloc(n ? (size_t)n : 1)); }\0Avoid *finch_zalloc(int64_t n) { return must(calloc(1, n ? (size_t)n : 1)); }\0A\0A// ---------- strings ----------\0A\0Astatic void str_heap(FStr *out, const char *p, int64_t len) {\0A char *m = finch_alloc(len + 1);\0A if (len) memcpy(m, p, (size_t)len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Astatic void str_static(FStr *out, const char *lit) {\0A out->ptr = (char *)lit;\0A out->len = (int64_t)strlen(lit);\0A out->cap = 0;\0A}\0A\0A// A copy that can be kept: literals are shared, everything else is duplicated.\0Avoid finch_str_copy(FStr *out, const FStr *s) {\0A if (s->cap == 0) *out = *s;\0A else str_heap(out, s->ptr, s->len);\0A}\0A\0A// Make `s` writable (before s[i] = c).\0Avoid finch_str_own(FStr *s) {\0A if (s->cap > 0) return;\0A FStr t;\0A str_heap(&t, s->ptr, s->len);\0A *s = t;\0A}\0A\0Avoid finch_str_drop(FStr *s) {\0A if (s->cap > 0) free(s->ptr);\0A}\0A\0Avoid finch_str_from_c(FStr *out, const char *p) {\0A if (!p) {\0A str_static(out, empty);\0A return;\0A }\0A out->ptr = (char *)p;\0A out->len = (int64_t)strlen(p);\0A out->cap = -1;\0A}\0A\0Avoid finch_str_concat(FStr *out, const FStr *a, const FStr *b) {\0A int64_t len = a->len + b->len;\0A char *m = finch_alloc(len + 1);\0A memcpy(m, a->ptr, (size_t)a->len);\0A memcpy(m + a->len, b->ptr, (size_t)b->len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Aint finch_str_eq(const FStr *a, const FStr *b) {\0A return a->len == b->len && memcmp(a->ptr, b->ptr, (size_t)a->len) == 0;\0A}\0A\0Aint64_t finch_str_cmp(const FStr *a, const FStr *b) {\0A int64_t n = a->len < b->len ? a->len : b->len;\0A int c = memcmp(a->ptr, b->ptr, (size_t)n);\0A if (c) return c < 0 ? -1 : 1;\0A return a->len < b->len ? -1 : a->len > b->len;\0A}\0A\0Avoid finch_str_from_int(FStr *out, int64_t v) {\0A char buf[32];\0A int n = snprintf(buf, sizeof buf, \22%lld\22, (long long)v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_uint(FStr *out, uint64_t v) {\0A char buf[32];\0A int n = snprintf(buf, sizeof buf, \22%llu\22, (unsigned long long)v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_float(FStr *out, double v) {\0A char buf[64];\0A int n = snprintf(buf, sizeof buf, \22%g\22, v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_char(FStr *out, char c) { str_heap(out, &c, 1); }\0A\0Avoid finch_str_from_bool(FStr *out, int b) { str_static(out, b ? \22true\22 : \22false\22); }\0A\0Astatic void number_error(char *msg, size_t size, const FStr *s, const char *kind) {\0A snprintf(msg, size, \22can't turn \5C\22%.*s\5C\22 into %s\22, (int)(s->len > 100 ? 100 : s->len), s->ptr ? s->ptr : \22\22, kind);\0A}\0A\0Astatic int parse_int(const FStr *s, int64_t *out) {\0A const char *p = s->ptr ? s->ptr : \22\22;\0A while (isspace((unsigned char)*p)) p++;\0A char *end;\0A errno = 0;\0A long long v = strtoll(p, &end, 10);\0A while (isspace((unsigned char)*end)) end++;\0A *out = v;\0A return !(end == p || *end || errno == ERANGE);\0A}\0A\0Astatic int parse_float(const FStr *s, double *out) {\0A const char *p = s->ptr ? s->ptr : \22\22;\0A while (isspace((unsigned char)*p)) p++;\0A char *end;\0A double v = strtod(p, &end);\0A while (isspace((unsigned char)*end)) end++;\0A *out = v;\0A return !(end == p || *end);\0A}\0A\0Aint64_t finch_str_to_int(const FStr *s, const char *file, int64_t line) {\0A int64_t v;\0A if (!parse_int(s, &v)) {\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22int\22);\0A finch_panic(file, line, msg);\0A }\0A return v;\0A}\0A\0Adouble finch_str_to_float(const FStr *s, const char *file, int64_t line) {\0A double v;\0A if (!parse_float(s, &v)) {\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22float\22);\0A finch_panic(file, line, msg);\0A }\0A return v;\0A}\0A\0A// ---------- errors as values: int(s) or 0, try read_file(p) ... ----------\0A// Each gives back 1 on success; on failure 0, with the message in *err.\0A\0Astatic void set_error(FStr *err, const char *msg) { str_heap(err, msg, (int64_t)strlen(msg)); }\0A\0Aint finch_str_try_int(const FStr *s, int64_t *out, FStr *err) {\0A if (parse_int(s, out)) return 1;\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22int\22);\0A set_error(err, msg);\0A *out = 0;\0A return 0;\0A}\0A\0Aint finch_str_try_float(const FStr *s, double *out, FStr *err) {\0A if (parse_float(s, out)) return 1;\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22float\22);\0A set_error(err, msg);\0A *out = 0;\0A return 0;\0A}\0A\0Astatic void file_error(FStr *err, const char *what, const FStr *path) {\0A char msg[300];\0A snprintf(msg, sizeof msg, \22can't %s the file \5C\22%.*s\5C\22: %s\22, what, (int)(path->len > 200 ? 200 : path->len),\0A path->ptr ? path->ptr : \22\22, strerror(errno));\0A set_error(err, msg);\0A}\0A\0A// when `fn main() -> !` fails\0Avoid finch_report_error(const FStr *msg) {\0A fflush(stdout);\0A fprintf(stderr, \22error: %.*s\5Cn\22, (int)msg->len, msg->ptr ? msg->ptr : \22\22);\0A}\0A\0Avoid finch_str_sub(FStr *out, const FStr *s, int64_t start, int64_t end, const char *file, int64_t line) {\0A if (start < 0 || end > s->len || start > end) {\0A char msg[160];\0A snprintf(msg, sizeof msg, \22sub(%lld, %lld) is out of range (the length is %lld)\22, (long long)start,\0A (long long)end, (long long)s->len);\0A finch_panic(file, line, msg);\0A }\0A str_heap(out, s->ptr + start, end - start);\0A}\0A\0Aint64_t finch_str_find(const FStr *s, const FStr *t) {\0A if (t->len == 0) return 0;\0A for (int64_t i = 0; i + t->len <= s->len; i++)\0A if (s->ptr[i] == t->ptr[0] && memcmp(s->ptr + i, t->ptr, (size_t)t->len) == 0) return i;\0A return -1;\0A}\0A\0Aint finch_str_starts(const FStr *s, const FStr *t) {\0A return t->len <= s->len && memcmp(s->ptr, t->ptr, (size_t)t->len) == 0;\0A}\0A\0Aint finch_str_ends(const FStr *s, const FStr *t) {\0A return t->len <= s->len && memcmp(s->ptr + s->len - t->len, t->ptr, (size_t)t->len) == 0;\0A}\0A\0Avoid finch_str_trim(FStr *out, const FStr *s) {\0A int64_t a = 0, b = s->len;\0A while (a < b && isspace((unsigned char)s->ptr[a])) a++;\0A while (b > a && isspace((unsigned char)s->ptr[b - 1])) b--;\0A str_heap(out, s->ptr + a, b - a);\0A}\0A\0Avoid finch_str_upper(FStr *out, const FStr *s) {\0A str_heap(out, s->ptr, s->len);\0A for (int64_t i = 0; i < out->len; i++) out->ptr[i] = (char)toupper((unsigned char)out->ptr[i]);\0A}\0A\0Avoid finch_str_lower(FStr *out, const FStr *s) {\0A str_heap(out, s->ptr, s->len);\0A for (int64_t i = 0; i < out->len; i++) out->ptr[i] = (char)tolower((unsigned char)out->ptr[i]);\0A}\0A\0Avoid finch_str_replace(FStr *out, const FStr *s, const FStr *from, const FStr *to) {\0A if (from->len == 0) {\0A str_heap(out, s->ptr, s->len);\0A return;\0A }\0A int64_t count = 0;\0A for (int64_t i = 0; i + from->len <= s->len;) {\0A if (memcmp(s->ptr + i, from->ptr, (size_t)from->len) == 0) {\0A count++;\0A i += from->len;\0A } else {\0A i++;\0A }\0A }\0A int64_t len = s->len + count * (to->len - from->len);\0A char *m = finch_alloc(len + 1), *w = m;\0A for (int64_t i = 0; i < s->len;) {\0A if (i + from->len <= s->len && memcmp(s->ptr + i, from->ptr, (size_t)from->len) == 0) {\0A memcpy(w, to->ptr, (size_t)to->len);\0A w += to->len;\0A i += from->len;\0A } else {\0A *w++ = s->ptr[i++];\0A }\0A }\0A *w = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Astatic void arr_push_str(FArr *a, const char *p, int64_t len);\0A\0A// \22a,b,,c\22.split(\22,\22) -> [\22a\22, \22b\22, \22\22, \22c\22]; split(\22\22) gives single characters.\0Avoid finch_str_split(FArr *out, const FStr *s, const FStr *sep) {\0A out->ptr = NULL;\0A out->len = out->cap = 0;\0A if (sep->len == 0) {\0A for (int64_t i = 0; i < s->len; i++) arr_push_str(out, s->ptr + i, 1);\0A return;\0A }\0A int64_t start = 0;\0A for (int64_t i = 0; i + sep->len <= s->len;) {\0A if (memcmp(s->ptr + i, sep->ptr, (size_t)sep->len) == 0) {\0A arr_push_str(out, s->ptr + start, i - start);\0A i += sep->len;\0A start = i;\0A } else {\0A i++;\0A }\0A }\0A arr_push_str(out, s->ptr + start, s->len - start);\0A}\0A\0Avoid finch_str_join(FStr *out, const FArr *parts, const FStr *sep) {\0A const FStr *p = parts->ptr;\0A int64_t len = 0;\0A for (int64_t i = 0; i < parts->len; i++) len += p[i].len + (i ? sep->len : 0);\0A char *m = finch_alloc(len + 1), *w = m;\0A for (int64_t i = 0; i < parts->len; i++) {\0A if (i) {\0A memcpy(w, sep->ptr, (size_t)sep->len);\0A w += sep->len;\0A }\0A memcpy(w, p[i].ptr, (size_t)p[i].len);\0A w += p[i].len;\0A }\0A *w = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Avoid finch_str_repeat(FStr *out, const FStr *s, int64_t n) {\0A if (n < 0) n = 0;\0A int64_t len = s->len * n;\0A char *m = finch_alloc(len + 1);\0A for (int64_t i = 0; i < n; i++) memcpy(m + i * s->len, s->ptr, (size_t)s->len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Avoid finch_str_from_bytes(FStr *out, const FArr *bytes) { str_heap(out, bytes->ptr, bytes->len); }\0A\0A// ---------- building text: print(x) and str(x) of arrays, maps and structs ----------\0A// A buffer starts as an empty str and grows on the heap.\0A\0Avoid finch_buf_add(FStr *b, const char *p, int64_t n) {\0A if (b->len + n + 1 > b->cap) {\0A int64_t cap = b->cap > 0 ? b->cap * 2 : 32;\0A while (cap < b->len + n + 1) cap *= 2;\0A b->ptr = must(realloc(b->cap > 0 ? b->ptr : NULL, (size_t)cap));\0A b->cap = cap;\0A }\0A if (n) memcpy(b->ptr + b->len, p, (size_t)n);\0A b->len += n;\0A b->ptr[b->len] = 0;\0A}\0A\0Astatic void buf_fmt(FStr *b, const char *fmt, ...) __attribute__((format(printf, 2, 3)));\0Astatic void buf_fmt(FStr *b, const char *fmt, ...) {\0A char t[64];\0A va_list ap;\0A va_start(ap, fmt);\0A int n = vsnprintf(t, sizeof t, fmt, ap);\0A va_end(ap);\0A finch_buf_add(b, t, n);\0A}\0A\0Avoid finch_buf_int(FStr *b, int64_t v) { buf_fmt(b, \22%lld\22, (long long)v); }\0Avoid finch_buf_uint(FStr *b, uint64_t v) { buf_fmt(b, \22%llu\22, (unsigned long long)v); }\0Avoid finch_buf_float(FStr *b, double v) { buf_fmt(b, \22%g\22, v); }\0Avoid finch_buf_bool(FStr *b, int v) { finch_buf_add(b, v ? \22true\22 : \22false\22, v ? 4 : 5); }\0Avoid finch_buf_ptr(FStr *b, const void *p) {\0A if (p) buf_fmt(b, \220x%llx\22, (unsigned long long)(uintptr_t)p);\0A else finch_buf_add(b, \22null\22, 4);\0A}\0A\0Avoid finch_buf_char(FStr *b, char c, int quoted) {\0A if (quoted) finch_buf_add(b, \22'\22, 1);\0A finch_buf_add(b, &c, 1);\0A if (quoted) finch_buf_add(b, \22'\22, 1);\0A}\0A\0Avoid finch_buf_str(FStr *b, const FStr *s, int quoted) {\0A if (quoted) finch_buf_add(b, \22\5C\22\22, 1);\0A finch_buf_add(b, s->ptr, s->len);\0A if (quoted) finch_buf_add(b, \22\5C\22\22, 1);\0A}\0A\0A// print the buffer and free it\0Avoid finch_buf_print(FStr *b) {\0A if (b->len) fwrite(b->ptr, 1, (size_t)b->len, stdout);\0A if (b->cap > 0) free(b->ptr);\0A}\0A\0A// ---------- arrays ----------\0A\0Avoid finch_arr_reserve(FArr *a, int64_t need, int64_t es) {\0A if (need <= a->cap) return;\0A int64_t cap = a->cap * 2;\0A if (cap < 4) cap = 4;\0A if (cap < need) cap = need;\0A a->ptr = must(realloc(a->cap > 0 ? a->ptr : NULL, (size_t)(cap * es)));\0A a->cap = cap;\0A}\0A\0Avoid finch_arr_make(FArr *out, int64_t len, int64_t es) {\0A if (len < 0) len = 0;\0A out->ptr = len ? finch_zalloc(len * es) : NULL;\0A out->len = len;\0A out->cap = len;\0A}\0A\0A// grow or shrink to `len`; new elements are zero\0Avoid finch_arr_resize(FArr *a, int64_t len, int64_t es) {\0A if (len < 0) len = 0;\0A finch_arr_reserve(a, len, es);\0A if (len > a->len) memset((char *)a->ptr + a->len * es, 0, (size_t)((len - a->len) * es));\0A a->len = len;\0A}\0A\0A// a byte-for-byte copy of the elements (the compiler deep-copies owning elements afterwards)\0Avoid finch_arr_clone_raw(FArr *out, const FArr *a, int64_t es) {\0A out->len = a->len;\0A out->cap = a->len;\0A out->ptr = a->len ? finch_alloc(a->len * es) : NULL;\0A if (a->len) memcpy(out->ptr, a->ptr, (size_t)(a->len * es));\0A}\0A\0Avoid finch_arr_free(FArr *a) {\0A if (a->cap > 0) free(a->ptr);\0A}\0A\0A// open a hole at i (0 <= i <= len), len grows by one\0Avoid finch_arr_insert_gap(FArr *a, int64_t i, int64_t es, const char *file, int64_t line) {\0A if (i < 0 || i > a->len) finch_panic_index(file, line, i, a->len);\0A finch_arr_reserve(a, a->len + 1, es);\0A char *p = a->ptr;\0A memmove(p + (i + 1) * es, p + i * es, (size_t)((a->len - i) * es));\0A a->len++;\0A}\0A\0A// close the hole at i (the element was already moved out), len shrinks by one\0Avoid finch_arr_remove_gap(FArr *a, int64_t i, int64_t es) {\0A char *p = a->ptr;\0A memmove(p + i * es, p + (i + 1) * es, (size_t)((a->len - i - 1) * es));\0A a->len--;\0A}\0A\0Astatic void arr_push_str(FArr *a, const char *p, int64_t len) {\0A finch_arr_reserve(a, a->len + 1, (int64_t)sizeof(FStr));\0A str_heap((FStr *)a->ptr + a->len, p, len);\0A a->len++;\0A}\0A\0Avoid finch_bytes_from_str(FArr *out, const FStr *s) {\0A out->len = out->cap = s->len;\0A out->ptr = s->len ? finch_alloc(s->len) : NULL;\0A if (s->len) memcpy(out->ptr, s->ptr, (size_t)s->len);\0A}\0A\0A// ---------- program arguments, input and files ----------\0A\0Avoid finch_args(FArr *out, int argc, char **argv) {\0A out->len = out->cap = argc;\0A out->ptr = finch_alloc((int64_t)sizeof(FStr) * (argc ? argc : 1));\0A for (int i = 0; i < argc; i++) str_heap((FStr *)out->ptr + i, argv[i], (int64_t)strlen(argv[i]));\0A}\0A\0A// input(\22Name? \22) prints the prompt and reads one line, without the newline.\0Avoid finch_input(FStr *out, const FStr *prompt) {\0A if (prompt->len) fwrite(prompt->ptr, 1, (size_t)prompt->len, stdout);\0A fflush(stdout);\0A // read one line of any length (getline isn't available everywhere)\0A size_t size = 128, n = 0;\0A char *line = finch_alloc((int64_t)size);\0A int c, got = 0;\0A while ((c = fgetc(stdin)) != EOF) {\0A got = 1;\0A if (c == '\5Cn') break;\0A if (n + 1 >= size) line = must(realloc(line, size *= 2));\0A line[n++] = (char)c;\0A }\0A if (!got) {\0A free(line);\0A str_static(out, empty);\0A return;\0A }\0A while (n > 0 && line[n - 1] == '\5Cr') n--;\0A line[n] = 0;\0A out->ptr = line;\0A out->len = (int64_t)n;\0A out->cap = (int64_t)size;\0A}\0A\0Aint finch_file_exists(const FStr *path) {\0A FILE *f = fopen(path->ptr, \22rb\22);\0A if (f) fclose(f);\0A return f != NULL;\0A}\0A\0Aint finch_try_read_file(FStr *out, const FStr *path, FStr *err) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22rb\22);\0A if (!f) {\0A file_error(err, \22read\22, path);\0A return 0;\0A }\0A fseek(f, 0, SEEK_END);\0A long size = ftell(f);\0A fseek(f, 0, SEEK_SET);\0A char *m = finch_alloc(size + 1);\0A size_t got = fread(m, 1, (size_t)size, f);\0A fclose(f);\0A m[got] = 0;\0A out->ptr = m;\0A out->len = (int64_t)got;\0A out->cap = size + 1;\0A return 1;\0A}\0A\0Avoid finch_read_file(FStr *out, const FStr *path, const char *file, int64_t line) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22rb\22);\0A if (!f) {\0A char msg[300];\0A snprintf(msg, sizeof msg, \22can't read the file \5C\22%.*s\5C\22: %s\22, (int)(path->len > 200 ? 200 : path->len),\0A path->ptr, strerror(errno));\0A finch_panic(file, line, msg);\0A }\0A fseek(f, 0, SEEK_END);\0A long size = ftell(f);\0A fseek(f, 0, SEEK_SET);\0A char *m = finch_alloc(size + 1);\0A size_t got = fread(m, 1, (size_t)size, f);\0A fclose(f);\0A m[got] = 0;\0A out->ptr = m;\0A out->len = (int64_t)got;\0A out->cap = size + 1;\0A}\0A\0A// shell(\22ls -l\22): run a command, give back its exit code\0Aint64_t finch_shell(const FStr *cmd) {\0A fflush(stdout);\0A int status = system(cmd->ptr ? cmd->ptr : \22\22);\0A#ifdef _WIN32\0A return status; // Windows gives the exit code directly\0A#else\0A if (status == -1) return -1;\0A if (WIFEXITED(status)) return WEXITSTATUS(status);\0A return 128 + (WIFSIGNALED(status) ? WTERMSIG(status) : 0);\0A#endif\0A}\0A\0Aint finch_delete_file(const FStr *path) { return remove(path->ptr ? path->ptr : \22\22) == 0; }\0A\0Aint finch_try_delete_file(const FStr *path, FStr *err) {\0A if (remove(path->ptr ? path->ptr : \22\22) == 0) return 1;\0A file_error(err, \22delete\22, path);\0A return 0;\0A}\0A\0A// stdin/stdout/stderr are macros on some systems (Windows), so Finch asks for them here\0Avoid *finch_std_stream(int i) { return i == 0 ? (void *)stdin : i == 1 ? (void *)stdout : (void *)stderr; }\0A\0Aint finch_write_file(const FStr *path, const FStr *text) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22wb\22);\0A if (!f) return 0;\0A size_t put = text->len ? fwrite(text->ptr, 1, (size_t)text->len, f) : 0;\0A return fclose(f) == 0 && put == (size_t)text->len;\0A}\0A\0Aint finch_try_write_file(const FStr *path, const FStr *text, FStr *err) {\0A errno = 0;\0A if (finch_write_file(path, text)) return 1;\0A if (!errno) errno = EIO;\0A file_error(err, \22write\22, path);\0A return 0;\0A}\0A\0A// ---------- maps ----------\0A// map[K]V = { entries; len; used; cap; index; icap; adds }\0A// entries: `used` slots of es bytes, each { uint64 hash; K key; V value }, in insertion order.\0A// A removed entry keeps its slot (hash 0) until the next resize packs the slots.\0A// index: icap slots (a power of two, at least 2 * cap): -1 empty, -2 removed, else an entry number.\0A// adds: how many keys were ever added; a `for` over the map stops with an error if it changes.\0A// The compiler stores, copies and drops keys and values; the runtime only finds and places entries.\0A// Keys are compared byte for byte (numbers, chars, bools) or as text (kstr).\0A\0Atypedef struct {\0A char *entries;\0A int64_t len, used, cap;\0A int64_t *index;\0A int64_t icap;\0A int64_t adds;\0A} FMap;\0A\0Astatic uint64_t map_hash(const void *key, int64_t ks, int kstr) {\0A const unsigned char *p;\0A size_t n;\0A if (kstr) {\0A const FStr *s = key;\0A p = (const unsigned char *)s->ptr;\0A n = (size_t)s->len;\0A } else {\0A p = key;\0A n = (size_t)ks;\0A }\0A uint64_t h = 1469598103934665603ULL; // FNV-1a, then mixed so the low bits spread well\0A for (size_t i = 0; i < n; i++) {\0A h ^= p[i];\0A h *= 1099511628211ULL;\0A }\0A h ^= h >> 31;\0A h *= 0xbf58476d1ce4e5b9ULL;\0A h ^= h >> 29;\0A return h | 1; // 0 marks a removed entry\0A}\0A\0Astatic int map_key_eq(const char *a, const void *b, int64_t ks, int kstr) {\0A if (!kstr) return memcmp(a, b, (size_t)ks) == 0;\0A const FStr *x = (const FStr *)a, *y = b;\0A return x->len == y->len && (x->len == 0 || memcmp(x->ptr, y->ptr, (size_t)x->len) == 0);\0A}\0A\0Astatic void map_reindex(FMap *m, int64_t es) {\0A if (m->len != m->used) { // pack the slots of removed entries away\0A int64_t j = 0;\0A for (int64_t i = 0; i < m->used; i++) {\0A char *e = m->entries + i * es;\0A if (*(uint64_t *)e == 0) continue;\0A if (i != j) memmove(m->entries + j * es, e, (size_t)es);\0A j++;\0A }\0A m->used = j;\0A }\0A int64_t icap = 16;\0A while (icap < m->cap * 2) icap *= 2;\0A free(m->index);\0A m->index = finch_alloc(icap * (int64_t)sizeof(int64_t));\0A memset(m->index, 0xff, (size_t)icap * sizeof(int64_t));\0A m->icap = icap;\0A for (int64_t i = 0; i < m->used; i++) {\0A uint64_t h = *(uint64_t *)(m->entries + i * es);\0A int64_t s = (int64_t)(h & (uint64_t)(icap - 1));\0A while (m->index[s] != -1) s = (s + 1) & (icap - 1);\0A m->index[s] = i;\0A }\0A}\0A\0A// the entry number of `key`, or -1\0Aint64_t finch_map_find(const FMap *m, const void *key, int64_t es, int64_t ks, int32_t kstr) {\0A if (m->len == 0) return -1;\0A uint64_t h = map_hash(key, ks, kstr);\0A for (int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));; s = (s + 1) & (m->icap - 1)) {\0A int64_t i = m->index[s];\0A if (i == -1) return -1;\0A if (i < 0) continue;\0A char *e = m->entries + i * es;\0A if (*(uint64_t *)e == h && map_key_eq(e + 8, key, ks, kstr)) return i;\0A }\0A}\0A\0A// The entry for `key`. A new one is zeroed except its hash (*added = 1); the compiler then stores the key.\0Aint64_t finch_map_slot(FMap *m, const void *key, int64_t es, int64_t ks, int32_t kstr, int32_t *added) {\0A int64_t i = finch_map_find(m, key, es, ks, kstr);\0A *added = i < 0;\0A if (i >= 0) return i;\0A if (m->used == m->cap) {\0A if (m->len * 4 < m->cap * 3) { // many removed slots: pack them instead of growing\0A map_reindex(m, es);\0A } else {\0A m->cap = m->cap ? m->cap * 2 : 8;\0A m->entries = must(realloc(m->entries, (size_t)(m->cap * es)));\0A map_reindex(m, es);\0A }\0A }\0A uint64_t h = map_hash(key, ks, kstr);\0A i = m->used++;\0A char *e = m->entries + i * es;\0A memset(e, 0, (size_t)es);\0A *(uint64_t *)e = h;\0A int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));\0A while (m->index[s] >= 0) s = (s + 1) & (m->icap - 1);\0A m->index[s] = i;\0A m->len++;\0A m->adds++;\0A return i;\0A}\0A\0A// Forget entry i (its key and value were already dropped by the compiler).\0Avoid finch_map_remove_at(FMap *m, int64_t i, int64_t es) {\0A char *e = m->entries + i * es;\0A uint64_t h = *(uint64_t *)e;\0A int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));\0A while (m->index[s] != i) s = (s + 1) & (m->icap - 1);\0A m->index[s] = -2;\0A *(uint64_t *)e = 0;\0A if (--m->len == 0) {\0A m->used = 0;\0A memset(m->index, 0xff, (size_t)m->icap * sizeof(int64_t));\0A }\0A}\0A\0Avoid finch_map_clear(FMap *m) {\0A m->len = m->used = 0;\0A if (m->index) memset(m->index, 0xff, (size_t)m->icap * sizeof(int64_t));\0A}\0A\0Avoid finch_map_free(FMap *m) {\0A free(m->entries);\0A free(m->index);\0A}\0A\0A// A copy of the slots and the index; the compiler then copies the keys and values that own memory.\0Avoid finch_map_clone_raw(FMap *out, const FMap *m, int64_t es) {\0A *out = *m;\0A if (!m->cap) return;\0A out->entries = finch_alloc(m->cap * es);\0A memcpy(out->entries, m->entries, (size_t)(m->used * es));\0A out->index = finch_alloc(m->icap * (int64_t)sizeof(int64_t));\0A memcpy(out->index, m->index, (size_t)m->icap * sizeof(int64_t));\0A}\0A\0A__attribute__((noreturn, cold)) void finch_map_changed(const char *file, int64_t line) {\0A finch_panic(file, line, \22a key was added to the map while looping over it (collect the new keys, and add them after the loop)\22);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_map_missing(const char *file, int64_t line, const FStr *key) {\0A char msg[200];\0A snprintf(msg, sizeof msg, \22the key %.*s is not in the map (check with .has(key), or use .get(key, default))\22,\0A (int)(key->len > 100 ? 100 : key->len), key->ptr ? key->ptr : \22\22);\0A finch_panic(file, line, msg);\0A}\0A\00" @.str.7553 = private unnamed_addr constant [12885 x i8] c"// JSON: read it, build it, write it.\0A//\0A// import json\0A//\0A// doc := try json.parse(\22{\5C\22name\5C\22: \5C\22Finch\5C\22, \5C\22tags\5C\22: [\5C\22fast\5C\22, \5C\22small\5C\22], \5C\22stars\5C\22: 5}\22)\0A// print(doc.get(\22name\22).str_or(\22\22)) Finch\0A// print(doc.get(\22tags\22).at(1).str_or(\22\22)) small\0A// print(doc.get(\22stars\22).int_or(0)) 5\0A// print(doc.get(\22missing\22).is_null()) true (a missing key is null, so chains never fail)\0A//\0A// out := json.new_object()\0A// out.set(\22ok\22, json.new_bool(true))\0A// list := json.new_list()\0A// list.push(json.new_number(1.5))\0A// out.set(\22values\22, list)\0A// print(json.stringify(out)) {\22ok\22:true,\22values\22:[1.5]}\0A// print(json.pretty(out)) the same, over several lines\0A\0Aenum Kind { Null, Bool, Number, Text, List, Object }\0A\0A// One JSON value. `kind` says which of the other fields it uses: flag for Bool, num for Number,\0A// text for Text, items for List, and items with keys (the same length, in the same order) for Object.\0Astruct Json {\0A Kind kind\0A bool flag\0A float num\0A str text\0A []Json items\0A []str keys\0A}\0A\0Afn new_null() -> Json {\0A return Json(kind: Kind.Null)\0A}\0A\0Afn new_bool(bool b) -> Json {\0A return Json(kind: Kind.Bool, flag: b)\0A}\0A\0Afn new_number(float n) -> Json {\0A return Json(kind: Kind.Number, num: n)\0A}\0A\0Afn new_text(str s) -> Json {\0A return Json(kind: Kind.Text, text: s)\0A}\0A\0Afn new_list() -> Json {\0A return Json(kind: Kind.List)\0A}\0A\0Afn new_object() -> Json {\0A return Json(kind: Kind.Object)\0A}\0A\0A// ---------- looking inside ----------\0A\0Afn Json.is_null() -> bool {\0A return self.kind == Kind.Null\0A}\0A\0A// the number of elements of a list, of keys of an object, of bytes of a text; 0 for the rest\0Afn Json.len() -> int {\0A return match self.kind {\0A List, Object -> self.items.len\0A Text -> self.text.len\0A else -> 0\0A }\0A}\0A\0Afn Json.has(str key) -> bool {\0A return self.kind == Kind.Object && self.keys.contains(key)\0A}\0A\0A// the value of a key of an object; null if there is none (or this is not an object)\0Afn Json.get(str key) -> Json {\0A if self.kind != Kind.Object {\0A return new_null()\0A }\0A i := self.keys.find(key)\0A if i < 0 {\0A return new_null()\0A }\0A return self.items[i]\0A}\0A\0A// the element of a list; null if there is none\0Afn Json.at(int i) -> Json {\0A if self.kind != Kind.List || i < 0 || i >= self.items.len {\0A return new_null()\0A }\0A return self.items[i]\0A}\0A\0A// the value if it is of that kind, else what was given\0Afn Json.str_or(str fallback) -> str {\0A if self.kind == Kind.Text {\0A return self.text\0A }\0A return fallback\0A}\0A\0Afn Json.float_or(float fallback) -> float {\0A if self.kind == Kind.Number {\0A return self.num\0A }\0A return fallback\0A}\0A\0Afn Json.int_or(int fallback) -> int {\0A if self.kind == Kind.Number {\0A return int(self.num)\0A }\0A return fallback\0A}\0A\0Afn Json.bool_or(bool fallback) -> bool {\0A if self.kind == Kind.Bool {\0A return self.flag\0A }\0A return fallback\0A}\0A\0A// the keys of an object, in the order they were written\0Afn Json.names() -> []str {\0A return self.keys\0A}\0A\0A// ---------- building ----------\0A\0A// add to the end of a list\0Afn Json.push(Json v) {\0A self.items.push(v)\0A}\0A\0A// give a key a value in an object; a key that is already there is replaced\0Afn Json.set(str key, Json v) {\0A i := self.keys.find(key)\0A if i >= 0 {\0A self.items[i] = v\0A return\0A }\0A self.keys.push(key)\0A self.items.push(v)\0A}\0A\0A// ---------- writing ----------\0A\0Afn quote(str s) -> str {\0A []str parts = [\22\5C\22\22]\0A for c in s {\0A n := int(c)\0A if c == '\22' {\0A parts.push(\22\5C\5C\5C\22\22)\0A } else if c == '\5C\5C' {\0A parts.push(\22\5C\5C\5C\5C\22)\0A } else if c == '\5Cn' {\0A parts.push(\22\5C\5Cn\22)\0A } else if c == '\5Cr' {\0A parts.push(\22\5C\5Cr\22)\0A } else if c == '\5Ct' {\0A parts.push(\22\5C\5Ct\22)\0A } else if n < 32 {\0A parts.push(\22\5C\5Cu00\22 + hexdigit(n / 16) + hexdigit(n % 16))\0A } else {\0A parts.push(str(c))\0A }\0A }\0A parts.push(\22\5C\22\22)\0A return parts.join(\22\22)\0A}\0A\0Afn hexdigit(int n) -> str {\0A digits := \220123456789abcdef\22\0A return str(digits[n])\0A}\0A\0Afn number_text(float n) -> str {\0A if n == float(int(n)) && n > -1000000000000000.0 && n < 1000000000000000.0 {\0A return str(int(n))\0A }\0A return str(n)\0A}\0A\0Astruct Writer {\0A []str out\0A}\0A\0Afn write(Json j, str indent, str pad, ptr[Writer] w) {\0A nl := \22\22\0A inner := \22\22\0A sep := \22,\22\0A colon := \22:\22\0A if indent.len > 0 {\0A nl = \22\5Cn\22\0A inner = pad + indent\0A colon = \22: \22\0A }\0A match j.kind {\0A Null -> w.out.push(\22null\22)\0A Bool -> {\0A if j.flag {\0A w.out.push(\22true\22)\0A } else {\0A w.out.push(\22false\22)\0A }\0A }\0A Number -> w.out.push(number_text(j.num))\0A Text -> w.out.push(quote(j.text))\0A List -> {\0A if j.items.len == 0 {\0A w.out.push(\22[]\22)\0A return\0A }\0A w.out.push(\22[\22 + nl)\0A for i, item in j.items {\0A if i > 0 {\0A w.out.push(sep + nl)\0A }\0A w.out.push(inner)\0A write(item, indent, inner, w)\0A }\0A w.out.push(nl + pad + \22]\22)\0A }\0A Object -> {\0A if j.items.len == 0 {\0A w.out.push(\22{}\22)\0A return\0A }\0A w.out.push(\22{\22 + nl)\0A for i, item in j.items {\0A if i > 0 {\0A w.out.push(sep + nl)\0A }\0A w.out.push(inner + quote(j.keys[i]) + colon)\0A write(item, indent, inner, w)\0A }\0A w.out.push(nl + pad + \22}\22)\0A }\0A }\0A}\0A\0A// the value as text on one line\0Afn stringify(Json j) -> str {\0A w := Writer()\0A write(j, \22\22, \22\22, addr(w))\0A return w.out.join(\22\22)\0A}\0A\0A// the value as text over several lines, indented by two spaces\0Afn pretty(Json j) -> str {\0A w := Writer()\0A write(j, \22 \22, \22\22, addr(w))\0A return w.out.join(\22\22)\0A}\0A\0A// ---------- reading ----------\0A\0Astruct Reader {\0A str src\0A int i\0A}\0A\0A// the line and column of a position, for a message\0Afn where(ptr[Reader] r) -> str {\0A line := 1\0A col := 1\0A for k in 0..r.i {\0A if k < r.src.len && r.src[k] == '\5Cn' {\0A line += 1\0A col = 1\0A } else {\0A col += 1\0A }\0A }\0A return \22line \22 + str(line) + \22, column \22 + str(col)\0A}\0A\0Afn peek(ptr[Reader] r) -> char {\0A if r.i < r.src.len {\0A return r.src[r.i]\0A }\0A return char(0)\0A}\0A\0Afn skip_space(ptr[Reader] r) {\0A while r.i < r.src.len && (r.src[r.i] == ' ' || r.src[r.i] == '\5Cn' || r.src[r.i] == '\5Ct' || r.src[r.i] == '\5Cr') {\0A r.i += 1\0A }\0A}\0A\0Afn unexpected(ptr[Reader] r, str wanted) -> str {\0A if r.i >= r.src.len {\0A return \22json: the text ends where \22 + wanted + \22 should be (\22 + where(r) + \22)\22\0A }\0A return \22json: found '\22 + str(r.src[r.i]) + \22' where \22 + wanted + \22 should be (\22 + where(r) + \22)\22\0A}\0A\0A// does `word` come next?\0Afn comes(ptr[Reader] r, str word) -> bool {\0A return r.src.len - r.i >= word.len && r.src.sub(r.i, r.i + word.len) == word\0A}\0A\0Afn expect_word(ptr[Reader] r, str word) -> ! {\0A if !comes(r, word) {\0A return error(unexpected(r, \22'\22 + word + \22'\22))\0A }\0A r.i += word.len\0A}\0A\0Afn hex_value(char c) -> int {\0A if c >= '0' && c <= '9' {\0A return int(c) - int('0')\0A }\0A if c >= 'a' && c <= 'f' {\0A return int(c) - int('a') + 10\0A }\0A if c >= 'A' && c <= 'F' {\0A return int(c) - int('A') + 10\0A }\0A return -1\0A}\0A\0A// a code point as UTF-8\0Afn utf8(int cp) -> str {\0A []u8 b\0A if cp < 128 {\0A b.push(u8(cp))\0A } else if cp < 2048 {\0A b.push(u8(192 + cp / 64))\0A b.push(u8(128 + cp % 64))\0A } else if cp < 65536 {\0A b.push(u8(224 + cp / 4096))\0A b.push(u8(128 + (cp / 64) % 64))\0A b.push(u8(128 + cp % 64))\0A } else {\0A b.push(u8(240 + cp / 262144))\0A b.push(u8(128 + (cp / 4096) % 64))\0A b.push(u8(128 + (cp / 64) % 64))\0A b.push(u8(128 + cp % 64))\0A }\0A return str(b)\0A}\0A\0Afn read_hex4(ptr[Reader] r) -> int! {\0A n := 0\0A for k in 0..4 {\0A if r.i >= r.src.len || hex_value(r.src[r.i]) < 0 {\0A return error(unexpected(r, \22a hexadecimal digit\22))\0A }\0A n = n * 16 + hex_value(r.src[r.i])\0A r.i += 1\0A }\0A return n\0A}\0A\0Afn read_string(ptr[Reader] r) -> str! {\0A r.i += 1 // the opening quote\0A []str parts\0A start := r.i\0A while true {\0A if r.i >= r.src.len {\0A return error(\22json: a text is never closed (\22 + where(r) + \22)\22)\0A }\0A c := r.src[r.i]\0A if c == '\22' {\0A parts.push(r.src.sub(start, r.i))\0A r.i += 1\0A return parts.join(\22\22)\0A }\0A if int(c) < 32 {\0A return error(\22json: a line break or control character inside a text (\22 + where(r) + \22)\22)\0A }\0A if c != '\5C\5C' {\0A r.i += 1\0A continue\0A }\0A parts.push(r.src.sub(start, r.i))\0A r.i += 1\0A e := peek(r)\0A r.i += 1\0A if e == 'n' {\0A parts.push(\22\5Cn\22)\0A } else if e == 't' {\0A parts.push(\22\5Ct\22)\0A } else if e == 'r' {\0A parts.push(\22\5Cr\22)\0A } else if e == 'b' {\0A parts.push(utf8(8))\0A } else if e == 'f' {\0A parts.push(utf8(12))\0A } else if e == '\22' || e == '\5C\5C' || e == '/' {\0A parts.push(str(e))\0A } else if e == 'u' {\0A cp := try read_hex4(r)\0A // a pair of \F0\9F\98\80 stands for one character above U+FFFF\0A if cp >= 55296 && cp < 56320 && comes(r, \22\5C\5Cu\22) {\0A r.i += 2\0A low := try read_hex4(r)\0A cp = 65536 + (cp - 55296) * 1024 + (low - 56320)\0A }\0A parts.push(utf8(cp))\0A } else {\0A return error(\22json: unknown escape \5C\5C\22 + str(e) + \22 in a text (\22 + where(r) + \22)\22)\0A }\0A start = r.i\0A }\0A}\0A\0Afn read_number(ptr[Reader] r) -> Json! {\0A start := r.i\0A if peek(r) == '-' {\0A r.i += 1\0A }\0A while r.i < r.src.len && ((r.src[r.i] >= '0' && r.src[r.i] <= '9') || r.src[r.i] == '.' || r.src[r.i] == 'e' || r.src[r.i] == 'E' || r.src[r.i] == '+' || r.src[r.i] == '-') {\0A r.i += 1\0A }\0A n := float(r.src.sub(start, r.i)) or {\0A r.i = start\0A return error(unexpected(r, \22a number\22))\0A }\0A return new_number(n)\0A}\0A\0Afn read_value(ptr[Reader] r) -> Json! {\0A skip_space(r)\0A c := peek(r)\0A if r.i >= r.src.len {\0A return error(unexpected(r, \22a value\22))\0A }\0A if c == '{' {\0A obj := new_object()\0A r.i += 1\0A skip_space(r)\0A if peek(r) == '}' {\0A r.i += 1\0A return obj\0A }\0A while true {\0A skip_space(r)\0A if peek(r) != '\22' {\0A return error(unexpected(r, \22a key in quotes\22))\0A }\0A key := try read_string(r)\0A skip_space(r)\0A if peek(r) != ':' {\0A return error(unexpected(r, \22':'\22))\0A }\0A r.i += 1\0A v := try read_value(r)\0A obj.set(key, v)\0A skip_space(r)\0A if peek(r) == ',' {\0A r.i += 1\0A continue\0A }\0A if peek(r) == '}' {\0A r.i += 1\0A return obj\0A }\0A return error(unexpected(r, \22',' or '}'\22))\0A }\0A }\0A if c == '[' {\0A list := new_list()\0A r.i += 1\0A skip_space(r)\0A if peek(r) == ']' {\0A r.i += 1\0A return list\0A }\0A while true {\0A v := try read_value(r)\0A list.push(v)\0A skip_space(r)\0A if peek(r) == ',' {\0A r.i += 1\0A continue\0A }\0A if peek(r) == ']' {\0A r.i += 1\0A return list\0A }\0A return error(unexpected(r, \22',' or ']'\22))\0A }\0A }\0A if c == '\22' {\0A s := try read_string(r)\0A return new_text(s)\0A }\0A if c == 't' {\0A try expect_word(r, \22true\22)\0A return new_bool(true)\0A }\0A if c == 'f' {\0A try expect_word(r, \22false\22)\0A return new_bool(false)\0A }\0A if c == 'n' {\0A try expect_word(r, \22null\22)\0A return new_null()\0A }\0A if c == '-' || (c >= '0' && c <= '9') {\0A return try read_number(r)\0A }\0A return error(unexpected(r, \22a value\22))\0A}\0A\0A// the JSON in `text`; an error with the line and column where it went wrong\0Afn parse(str text) -> Json! {\0A r := Reader(src: text)\0A v := try read_value(addr(r))\0A skip_space(addr(r))\0A if r.i < r.src.len {\0A return error(unexpected(addr(r), \22the end of the text\22))\0A }\0A return v\0A}\0A\00" @.str.7554 = private unnamed_addr constant [2847 x i8] c"// Paths, as text. Elements are separated by \22/\22.\0A//\0A// import path\0A// path.join(\22a\22, \22b.txt\22) a/b.txt\0A// path.base(\22/tmp/x/a.tar.gz\22) a.tar.gz path.stem(...) a.tar path.ext(...) .gz\0A// path.dir(\22/tmp/x/a.txt\22) /tmp/x\0A// path.clean(\22a//b/../c/./d\22) a/c/d\0A\0A// a and b with one separator between; an absolute b replaces a\0Afn join(str a, str b) -> str {\0A if a.len == 0 {\0A return b\0A }\0A if b.len == 0 {\0A return a\0A }\0A if b[0] == '/' {\0A return b\0A }\0A if a[a.len - 1] == '/' {\0A return a + b\0A }\0A return a + \22/\22 + b\0A}\0A\0Afn is_abs(str p) -> bool {\0A return p.len > 0 && p[0] == '/'\0A}\0A\0A// the last element: \22a/b.txt\22 -> \22b.txt\22, \22a/b/\22 -> \22b\22, \22\22 -> \22.\22, \22/\22 -> \22/\22\0Afn base(str p) -> str {\0A if p.len == 0 {\0A return \22.\22\0A }\0A end := p.len\0A while end > 1 && p[end - 1] == '/' {\0A end -= 1\0A }\0A if end == 1 && p[0] == '/' {\0A return \22/\22\0A }\0A start := end\0A while start > 0 && p[start - 1] != '/' {\0A start -= 1\0A }\0A return p.sub(start, end)\0A}\0A\0A// everything before the last element: \22a/b.txt\22 -> \22a\22, \22b.txt\22 -> \22.\22, \22/b\22 -> \22/\22\0Afn dir(str p) -> str {\0A end := p.len\0A while end > 1 && p[end - 1] == '/' {\0A end -= 1\0A }\0A i := end\0A while i > 0 && p[i - 1] != '/' {\0A i -= 1\0A }\0A if i == 0 {\0A return \22.\22\0A }\0A while i > 1 && p[i - 1] == '/' {\0A i -= 1\0A }\0A return p.sub(0, i)\0A}\0A\0A// the part of the last element from its last dot: \22a.tar.gz\22 -> \22.gz\22; \22\22 when there is none\0Afn ext(str p) -> str {\0A b := base(p)\0A i := b.len\0A while i > 0 && b[i - 1] != '.' {\0A i -= 1\0A }\0A if i <= 1 { // no dot, or a name that only starts with one (.bashrc)\0A return \22\22\0A }\0A return b.sub(i - 1, b.len)\0A}\0A\0A// the last element without its extension\0Afn stem(str p) -> str {\0A b := base(p)\0A e := ext(p)\0A return b.sub(0, b.len - e.len)\0A}\0A\0A// the elements of a path: \22/a/b/c\22 -> [\22a\22, \22b\22, \22c\22]\0Afn parts(str p) -> []str {\0A []str out\0A for piece in p.split(\22/\22) {\0A if piece.len > 0 {\0A out.push(piece)\0A }\0A }\0A return out\0A}\0A\0A// the shortest path with the same meaning: no \22//\22, no \22.\22, and \22..\22 resolved where it can be\0Afn clean(str p) -> str {\0A if p.len == 0 {\0A return \22.\22\0A }\0A abs := is_abs(p)\0A []str out\0A for piece in parts(p) {\0A if piece == \22.\22 {\0A continue\0A }\0A if piece == \22..\22 {\0A if out.len > 0 && out[out.len - 1] != \22..\22 {\0A out.pop()\0A } else if !abs {\0A out.push(\22..\22)\0A }\0A continue\0A }\0A out.push(piece)\0A }\0A joined := out.join(\22/\22)\0A if abs {\0A return \22/\22 + joined\0A }\0A if joined.len == 0 {\0A return \22.\22\0A }\0A return joined\0A}\0A\00" @.str.7555 = private unnamed_addr constant [1407 x i8] c"// Programs: run a command, read what it printed, look at the environment.\0A//\0A// import proc\0A// code := proc.run(\22make\22) the exit code; what the command prints goes to the screen\0A// text := try proc.output(\22git describe\22) what the command printed; an error if it failed\0A// proc.env(\22HOME\22, \22/\22) an environment variable, or the second value if it is not set\0Aimport \22stdlib.h\22\0Aimport \22unistd.h\22\0Aimport \22time.h\22\0A\0A// run a command; its output goes to the screen. Gives its exit code.\0Afn run(str command) -> int {\0A return shell(command)\0A}\0A\0A// run a command and give what it printed. Fails, with its output as the message, if it exits with an error.\0Afn output(str command) -> str! {\0A tmp := \22/tmp/finch_out_\22 + str(getpid()) + \22_\22 + str(int(time(null)))\0A code := shell(\22(\22 + command + \22) > '\22 + tmp + \22' 2>&1\22)\0A text := read_file(tmp) or \22\22\0A delete_file(tmp)\0A if code != 0 {\0A return error(\22'\22 + command + \22' exited with code \22 + str(code) + \22: \22 + text.trim())\0A }\0A return text\0A}\0A\0Afn env(str name, str fallback) -> str {\0A v := getenv(name)\0A if v.len == 0 {\0A return fallback\0A }\0A return v\0A}\0A\0Afn pid() -> int {\0A return int(getpid())\0A}\0A\0A// the folder the program is running in\0Afn cwd() -> str {\0A []char buf\0A for i in 0..4096 {\0A buf.push(char(0))\0A }\0A getcwd(buf.ptr, 4096)\0A return str(buf.ptr)\0A}\0A\00" @.str.7556 = private unnamed_addr constant [996 x i8] c"// Programs, for Windows. The same functions as proc.fch (that file is for Linux and macOS).\0Aimport \22stdlib.h\22\0Aimport \22process.h\22\0Aimport \22direct.h\22\0Aimport \22time.h\22\0A\0Afn run(str command) -> int {\0A return shell(command)\0A}\0A\0Afn output(str command) -> str! {\0A tmp := proc_env(\22TEMP\22, \22.\22) + \22\5C\5Cfinch_out_\22 + str(getpid()) + \22_\22 + str(int(time(null)))\0A code := shell(command + \22 > \5C\22\22 + tmp + \22\5C\22 2>&1\22)\0A text := read_file(tmp) or \22\22\0A delete_file(tmp)\0A if code != 0 {\0A return error(\22'\22 + command + \22' exited with code \22 + str(code) + \22: \22 + text.trim())\0A }\0A return text\0A}\0A\0Afn proc_env(str name, str fallback) -> str {\0A v := getenv(name)\0A if v.len == 0 {\0A return fallback\0A }\0A return v\0A}\0A\0Afn env(str name, str fallback) -> str {\0A return proc_env(name, fallback)\0A}\0A\0Afn pid() -> int {\0A return int(getpid())\0A}\0A\0Afn cwd() -> str {\0A []char buf\0A for i in 0..4096 {\0A buf.push(char(0))\0A }\0A getcwd(buf.ptr, 4096)\0A return str(buf.ptr)\0A}\0A\00" @.str.7557 = private unnamed_addr constant [2540 x i8] c"// Time: the clock, sleeping, and dates.\0A//\0A// import time\0A// start := time.millis() milliseconds from a clock that only goes forward (to measure with)\0A// time.sleep(250) wait a quarter of a second\0A// time.now() seconds since 1970-01-01 00:00 UTC\0A// d := time.date(time.now()) the parts: d.year, d.month, d.day, d.hour, d.minute, d.second\0A// time.format(time.now(), \22%Y-%m-%d %H:%M\22) as text, in the computer's time zone\0Aimport \22time.h\22\0A\0Astruct Date {\0A int year\0A int month // 1 to 12\0A int day // 1 to 31\0A int hour\0A int minute\0A int second\0A int weekday // 0 is Sunday\0A int yearday // 1 to 366\0A}\0A\0A// seconds since 1970-01-01 00:00 UTC\0Afn now() -> int {\0A return int(time(null))\0A}\0A\0A// milliseconds on a clock that only goes forward: for measuring how long something took\0Afn millis() -> int {\0A timespec ts\0A clock_gettime(CLOCK_MONOTONIC, addr(ts))\0A return int(ts.tv_sec) * 1000 + int(ts.tv_nsec) / 1000000\0A}\0A\0Afn sleep(int ms) {\0A timespec ts\0A ts.tv_sec = ms / 1000\0A ts.tv_nsec = (ms % 1000) * 1000000\0A nanosleep(addr(ts), null)\0A}\0A\0Afn parts(tm t) -> Date {\0A return Date(year: int(t.tm_year) + 1900, month: int(t.tm_mon) + 1, day: int(t.tm_mday), hour: int(t.tm_hour),\0A minute: int(t.tm_min), second: int(t.tm_sec), weekday: int(t.tm_wday), yearday: int(t.tm_yday) + 1)\0A}\0A\0A// the date and time of a moment, in UTC\0Afn date(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A gmtime_r(addr(stamp), addr(t))\0A return parts(t)\0A}\0A\0A// the date and time of a moment, in the computer's time zone\0Afn local(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A localtime_r(addr(stamp), addr(t))\0A return parts(t)\0A}\0A\0A// a moment as text, in the computer's time zone: %Y year, %m month, %d day, %H hour, %M minute, %S second\0A// (the rest of C's strftime works too: %A weekday name, %B month name, ...)\0Afn format(int unix, str pattern) -> str {\0A tm t\0A i64 stamp = unix\0A localtime_r(addr(stamp), addr(t))\0A []char buf\0A for i in 0..256 {\0A buf.push(char(0))\0A }\0A strftime(buf.ptr, 256, pattern, addr(t))\0A return str(buf.ptr)\0A}\0A\0A// the number of days in a month (month is 1 to 12)\0Afn days_in_month(int year, int month) -> int {\0A if month == 2 {\0A if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) {\0A return 29\0A }\0A return 28\0A }\0A if month == 4 || month == 6 || month == 9 || month == 11 {\0A return 30\0A }\0A return 31\0A}\0A\00" @.str.7558 = private unnamed_addr constant [1793 x i8] c"// Time, for Windows. The same functions as time.fch (that file is for Linux and macOS).\0Aimport \22time.h\22\0Aimport \22finch_win.h\22\0A\0Astruct Date {\0A int year\0A int month // 1 to 12\0A int day // 1 to 31\0A int hour\0A int minute\0A int second\0A int weekday // 0 is Sunday\0A int yearday // 1 to 366\0A}\0A\0Afn now() -> int {\0A return int(time(null))\0A}\0A\0A// milliseconds on a clock that only goes forward (the performance counter: GetTickCount64 ticks every 15 ms)\0Afn millis() -> int {\0A i64 count = 0\0A i64 freq = 1\0A QueryPerformanceFrequency(addr(freq))\0A QueryPerformanceCounter(addr(count))\0A return int(count / freq) * 1000 + int(count % freq) * 1000 / int(freq)\0A}\0A\0Afn sleep(int ms) {\0A Sleep(u32(ms))\0A}\0A\0Afn parts(tm t) -> Date {\0A return Date(year: int(t.tm_year) + 1900, month: int(t.tm_mon) + 1, day: int(t.tm_mday), hour: int(t.tm_hour),\0A minute: int(t.tm_min), second: int(t.tm_sec), weekday: int(t.tm_wday), yearday: int(t.tm_yday) + 1)\0A}\0A\0Afn date(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A _gmtime64_s(addr(t), addr(stamp))\0A return parts(t)\0A}\0A\0Afn local(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A _localtime64_s(addr(t), addr(stamp))\0A return parts(t)\0A}\0A\0Afn format(int unix, str pattern) -> str {\0A tm t\0A i64 stamp = unix\0A _localtime64_s(addr(t), addr(stamp))\0A []char buf\0A for i in 0..256 {\0A buf.push(char(0))\0A }\0A strftime(buf.ptr, 256, pattern, addr(t))\0A return str(buf.ptr)\0A}\0A\0Afn days_in_month(int year, int month) -> int {\0A if month == 2 {\0A if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) {\0A return 29\0A }\0A return 28\0A }\0A if month == 4 || month == 6 || month == 9 || month == 11 {\0A return 30\0A }\0A return 31\0A}\0A\00" @.str.7559 = private unnamed_addr constant [366 x i8] c"/* The Windows functions std/time_windows.fch needs. Declared here, not by including :\0A libclang can't parse that header with MinGW's intrinsics. Both are in kernel32. */\0Aunsigned long long GetTickCount64(void);\0Avoid Sleep(unsigned long milliseconds);\0Aint QueryPerformanceCounter(long long *count);\0Aint QueryPerformanceFrequency(long long *frequency);\0A\00" declare void @finch_panic(ptr, i64, ptr) noreturn cold declare void @finch_panic_index(ptr, i64, i64, i64) noreturn cold declare ptr @finch_alloc(i64) declare void @finch_str_copy(ptr, ptr) declare void @finch_str_drop(ptr) declare void @finch_arr_free(ptr) declare void @finch_map_free(ptr) declare void @finch_str_own(ptr) declare void @finch_str_concat(ptr, ptr, ptr) declare i32 @finch_str_eq(ptr, ptr) declare i64 @finch_str_cmp(ptr, ptr) declare void @finch_buf_add(ptr, ptr, i64) declare void @finch_buf_int(ptr, i64) declare void @finch_buf_uint(ptr, i64) declare void @finch_buf_float(ptr, double) declare void @finch_buf_bool(ptr, i32) declare void @finch_buf_ptr(ptr, ptr) declare void @finch_buf_char(ptr, i8, i32) declare void @finch_buf_str(ptr, ptr, i32) declare void @finch_buf_print(ptr) declare void @finch_str_from_int(ptr, i64) declare void @finch_str_from_uint(ptr, i64) declare void @finch_str_from_float(ptr, double) declare void @finch_str_from_char(ptr, i8 signext) declare void @finch_str_from_bool(ptr, i32) declare i64 @finch_str_to_int(ptr, ptr, i64) declare double @finch_str_to_float(ptr, ptr, i64) declare void @finch_str_sub(ptr, ptr, i64, i64, ptr, i64) declare i64 @finch_str_find(ptr, ptr) declare i32 @finch_str_starts(ptr, ptr) declare i32 @finch_str_ends(ptr, ptr) declare void @finch_str_trim(ptr, ptr) declare void @finch_str_upper(ptr, ptr) declare void @finch_str_lower(ptr, ptr) declare void @finch_str_replace(ptr, ptr, ptr, ptr) declare void @finch_str_split(ptr, ptr, ptr) declare void @finch_str_join(ptr, ptr, ptr) declare void @finch_str_repeat(ptr, ptr, i64) declare void @finch_bytes_from_str(ptr, ptr) declare i64 @finch_map_find(ptr, ptr, i64, i64, i32) declare i64 @finch_map_slot(ptr, ptr, i64, i64, i32, ptr) declare void @finch_map_remove_at(ptr, i64, i64) declare void @finch_map_clear(ptr) declare void @finch_map_clone_raw(ptr, ptr, i64) declare void @finch_map_missing(ptr, i64, ptr) noreturn cold declare void @finch_map_changed(ptr, i64) noreturn cold declare void @finch_arr_reserve(ptr, i64, i64) declare void @finch_arr_clone_raw(ptr, ptr, i64) declare void @finch_arr_make(ptr, i64, i64) declare void @finch_arr_resize(ptr, i64, i64) declare void @finch_arr_insert_gap(ptr, i64, i64, ptr, i64) declare void @finch_arr_remove_gap(ptr, i64, i64) declare void @qsort(ptr, i64, i64, ptr) declare void @finch_args(ptr, i32, ptr) declare void @finch_input(ptr, ptr) declare i32 @finch_file_exists(ptr) declare i32 @finch_str_try_int(ptr, ptr, ptr) declare i32 @finch_str_try_float(ptr, ptr, ptr) declare i32 @finch_try_read_file(ptr, ptr, ptr) declare i32 @finch_try_write_file(ptr, ptr, ptr) declare i32 @finch_try_delete_file(ptr, ptr) declare void @finch_report_error(ptr) declare void @finch_read_file(ptr, ptr, ptr, i64) declare i32 @finch_write_file(ptr, ptr) declare i64 @finch_shell(ptr) declare i32 @finch_delete_file(ptr) declare i32 @printf(ptr, ...) declare i32 @fflush(ptr) declare void @finch_str_from_c(ptr, ptr) declare void @finch_on_fatal(ptr) declare ptr @finch_std_stream(i32) declare void @finch_str_from_bytes(ptr, ptr) declare void @exit(i32) noreturn declare void @free(ptr) define internal { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca i64, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t3 = load i64, ptr %t2 %t4 = sub i64 %t3, 1 store i64 %t4, ptr %a5 br label %while.cond1 while.cond1: %t6 = load i64, ptr %a5 %t7 = icmp sge i64 %t6, 0 br label %logic.from4 logic.from4: br i1 %t7, label %logic.rhs5, label %logic.end6 logic.rhs5: %t8 = load i64, ptr %a5 %t9 = load { ptr, i64, i64 }, ptr %a1 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 br i1 %t11, label %range7, label %inrange8 range7: call void @finch_panic_index(ptr @.str.1, i64 22, i64 %t8, i64 %t10) unreachable inrange8: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 %t14 = load i8, ptr %t13 %t15 = icmp ne i8 %t14, 47 br label %logic.rend9 logic.rend9: br label %logic.end6 logic.end6: %t16 = phi i1 [ false, %logic.from4 ], [ %t15, %logic.rend9 ] br i1 %t16, label %while.body2, label %while.end3 while.body2: %t17 = load i64, ptr %a5 %t18 = sub i64 %t17, 1 store i64 %t18, ptr %a5 br label %while.cond1 while.end3: %t19 = load i64, ptr %a5 %t20 = icmp slt i64 %t19, 0 br i1 %t20, label %then10, label %endif12 then10: ret { ptr, i64, i64 } { ptr @.str.2, i64 1, i64 0 } endif12: %t21 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t21, ptr %a22 %t24 = load i64, ptr %a5 call void @finch_str_sub(ptr %a23, ptr %a22, i64 0, i64 %t24, ptr @.str.3, i64 28) %t25 = load { ptr, i64, i64 }, ptr %a23 ret { ptr, i64, i64 } %t25 } define internal { ptr, i64, i64 } @finch.main.stem({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca i64, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 %t5 = load { ptr, i64, i64 }, ptr %a1 %t6 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t5) %t7 = extractvalue { ptr, i64, i64 } %t6, 1 store { ptr, i64, i64 } %t6, ptr %a8 call void @finch_str_drop(ptr %a8) %t9 = add i64 %t7, 1 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t11 = load i64, ptr %t10 call void @finch_str_sub(ptr %a4, ptr %a3, i64 %t9, i64 %t11, ptr @.str.4, i64 32) %t12 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t12, ptr %a13 %t14 = load { ptr, i64, i64 }, ptr %a1 %t15 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t14) store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } { ptr @.str.5, i64 1, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 store { ptr, i64, i64 } %t15, ptr %a20 call void @finch_str_drop(ptr %a20) br label %logic.from13 logic.from13: br i1 %t19, label %logic.rhs14, label %logic.end15 logic.rhs14: %t21 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t21, ptr %a22 store { ptr, i64, i64 } { ptr @.str.7, i64 2, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_starts(ptr %a22, ptr %a24) %t26 = icmp ne i32 %t25, 0 %t27 = xor i1 %t26, true br label %logic.rend16 logic.rend16: br label %logic.end15 logic.end15: %t28 = phi i1 [ false, %logic.from13 ], [ %t27, %logic.rend16 ] br i1 %t28, label %then17, label %endif19 then17: %t29 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t29, ptr %a30 call void @finch_str_copy(ptr %a31, ptr %a30) %t32 = load { ptr, i64, i64 }, ptr %a31 %t33 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t32, ptr %a13 store { ptr, i64, i64 } %t33, ptr %a34 call void @finch_str_drop(ptr %a34) br label %endif19 endif19: %t35 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.9, i64 1, i64 0 }, ptr %a38 %t39 = call i64 @finch_str_find(ptr %a36, ptr %a38) store i64 %t39, ptr %a40 %t41 = load i64, ptr %a40 %t42 = icmp sgt i64 %t41, 0 br i1 %t42, label %then20, label %endif22 then20: %t43 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t43, ptr %a44 %t46 = load i64, ptr %a40 call void @finch_str_sub(ptr %a45, ptr %a44, i64 0, i64 %t46, ptr @.str.10, i64 38) %t47 = load { ptr, i64, i64 }, ptr %a45 call void @finch_str_drop(ptr %a13) ret { ptr, i64, i64 } %t47 endif22: %t48 = load { ptr, i64, i64 }, ptr %a13 ret { ptr, i64, i64 } %t48 } define internal { ptr, i64, i64 } @finch.main.textOfFile(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca i64, align 16 %a11 = alloca i64, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca i64, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic23, label %ok24 panic23: call void @finch_panic(ptr @.str.11, i64 55, ptr @.str.12) unreachable ok24: %t5 = getelementptr inbounds %S.main.Loader, ptr %t3, i32 0, i32 6 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a2 store i64 -1, ptr %a8 %t9 = load i64, ptr %t6 %t10 = load ptr, ptr %t5 store i64 0, ptr %a11 br label %find.cond25 find.cond25: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t9 br i1 %t13, label %find.body26, label %find.end29 find.body26: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } %t7, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %find.hit27, label %find.next28 find.hit27: store i64 %t12, ptr %a8 br label %find.end29 find.next28: %t20 = add i64 %t12, 1 store i64 %t20, ptr %a11 br label %find.cond25 find.end29: %t21 = load i64, ptr %a8 store i64 %t21, ptr %a22 %t23 = load i64, ptr %a22 %t24 = icmp sge i64 %t23, 0 br i1 %t24, label %then30, label %endif32 then30: %t25 = load ptr, ptr %a1 %t26 = icmp eq ptr %t25, null br i1 %t26, label %panic33, label %ok34 panic33: call void @finch_panic(ptr @.str.13, i64 57, ptr @.str.14) unreachable ok34: %t27 = getelementptr inbounds %S.main.Loader, ptr %t25, i32 0, i32 7 %t28 = load i64, ptr %a22 %t29 = load { ptr, i64, i64 }, ptr %t27 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 %t28, %t30 br i1 %t31, label %range35, label %inrange36 range35: call void @finch_panic_index(ptr @.str.15, i64 57, i64 %t28, i64 %t30) unreachable inrange36: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 %t28 %t34 = load { ptr, i64, i64 }, ptr %t33 store { ptr, i64, i64 } %t34, ptr %a35 call void @finch_read_file(ptr %a36, ptr %a35, ptr @.str.16, i64 57) %t37 = load { ptr, i64, i64 }, ptr %a36 ret { ptr, i64, i64 } %t37 endif32: %t38 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t38, ptr %a39 call void @finch_read_file(ptr %a40, ptr %a39, ptr @.str.17, i64 59) %t41 = load { ptr, i64, i64 }, ptr %a40 ret { ptr, i64, i64 } %t41 } define internal { ptr, i64, i64 } @finch.main.findModule(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca i64, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t4) store { ptr, i64, i64 } %t5, ptr %a7 store { ptr, i64, i64 } { ptr @.str.18, i64 1, i64 0 }, ptr %a8 call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) store { ptr, i64, i64 } %t5, ptr %a9 call void @finch_str_drop(ptr %a9) %t10 = load { ptr, i64, i64 }, ptr %a6 %t11 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t10, ptr %a13 store { ptr, i64, i64 } %t11, ptr %a14 call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) store { ptr, i64, i64 } %t10, ptr %a15 call void @finch_str_drop(ptr %a15) %t16 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t16, ptr %a18 store { ptr, i64, i64 } { ptr @.str.19, i64 4, i64 0 }, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) store { ptr, i64, i64 } %t16, ptr %a20 call void @finch_str_drop(ptr %a20) %t21 = load { ptr, i64, i64 }, ptr %a17 store { ptr, i64, i64 } %t21, ptr %a22 %t23 = load { ptr, i64, i64 }, ptr %a2 %t24 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t23) store { ptr, i64, i64 } %t24, ptr %a26 store { ptr, i64, i64 } { ptr @.str.20, i64 1, i64 0 }, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) store { ptr, i64, i64 } %t24, ptr %a28 call void @finch_str_drop(ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a25 %t30 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t29, ptr %a32 store { ptr, i64, i64 } %t30, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) store { ptr, i64, i64 } %t29, ptr %a34 call void @finch_str_drop(ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t35, ptr %a37 store { ptr, i64, i64 } { ptr @.str.21, i64 1, i64 0 }, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) store { ptr, i64, i64 } %t35, ptr %a39 call void @finch_str_drop(ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a36 %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null br i1 %t42, label %panic37, label %ok38 panic37: call void @finch_panic(ptr @.str.22, i64 67, ptr @.str.23) unreachable ok38: %t43 = getelementptr inbounds %S.main.Loader, ptr %t41, i32 0, i32 3 %t44 = load { ptr, i64, i64 }, ptr %t43 store { ptr, i64, i64 } %t40, ptr %a46 store { ptr, i64, i64 } %t44, ptr %a47 call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) store { ptr, i64, i64 } %t40, ptr %a48 call void @finch_str_drop(ptr %a48) %t49 = load { ptr, i64, i64 }, ptr %a45 store { ptr, i64, i64 } %t49, ptr %a51 store { ptr, i64, i64 } { ptr @.str.24, i64 4, i64 0 }, ptr %a52 call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) store { ptr, i64, i64 } %t49, ptr %a53 call void @finch_str_drop(ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } %t54, ptr %a55 %t56 = call i32 @finch_file_exists(ptr %a55) store { ptr, i64, i64 } %t54, ptr %a57 call void @finch_str_drop(ptr %a57) %t58 = icmp ne i32 %t56, 0 br i1 %t58, label %then39, label %endif41 then39: %t59 = load { ptr, i64, i64 }, ptr %a2 %t60 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t59) store { ptr, i64, i64 } %t60, ptr %a62 store { ptr, i64, i64 } { ptr @.str.25, i64 1, i64 0 }, ptr %a63 call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) store { ptr, i64, i64 } %t60, ptr %a64 call void @finch_str_drop(ptr %a64) %t65 = load { ptr, i64, i64 }, ptr %a61 %t66 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t65, ptr %a68 store { ptr, i64, i64 } %t66, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) store { ptr, i64, i64 } %t65, ptr %a70 call void @finch_str_drop(ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t71, ptr %a73 store { ptr, i64, i64 } { ptr @.str.26, i64 1, i64 0 }, ptr %a74 call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) store { ptr, i64, i64 } %t71, ptr %a75 call void @finch_str_drop(ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a72 %t77 = load ptr, ptr %a1 %t78 = icmp eq ptr %t77, null br i1 %t78, label %panic42, label %ok43 panic42: call void @finch_panic(ptr @.str.27, i64 68, ptr @.str.28) unreachable ok43: %t79 = getelementptr inbounds %S.main.Loader, ptr %t77, i32 0, i32 3 %t80 = load { ptr, i64, i64 }, ptr %t79 store { ptr, i64, i64 } %t76, ptr %a82 store { ptr, i64, i64 } %t80, ptr %a83 call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) store { ptr, i64, i64 } %t76, ptr %a84 call void @finch_str_drop(ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a81 store { ptr, i64, i64 } %t85, ptr %a87 store { ptr, i64, i64 } { ptr @.str.29, i64 4, i64 0 }, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) store { ptr, i64, i64 } %t85, ptr %a89 call void @finch_str_drop(ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a86 call void @finch_str_drop(ptr %a22) ret { ptr, i64, i64 } %t90 endif41: %t91 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t91, ptr %a92 %t93 = call i32 @finch_file_exists(ptr %a92) %t94 = icmp ne i32 %t93, 0 br i1 %t94, label %then44, label %endif46 then44: %t95 = load { ptr, i64, i64 }, ptr %a22 ret { ptr, i64, i64 } %t95 endif46: %t96 = load ptr, ptr %a1 %t97 = icmp eq ptr %t96, null br i1 %t97, label %panic47, label %ok48 panic47: call void @finch_panic(ptr @.str.30, i64 73, ptr @.str.31) unreachable ok48: %t98 = getelementptr inbounds %S.main.Loader, ptr %t96, i32 0, i32 5 store i64 0, ptr %a99 br label %each.cond49 each.cond49: %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1 %t101 = load i64, ptr %t100 %t102 = load i64, ptr %a99 %t103 = icmp slt i64 %t102, %t101 br i1 %t103, label %each.body50, label %each.end52 each.body50: %t104 = load ptr, ptr %t98 %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i64 %t102 %t106 = load { ptr, i64, i64 }, ptr %t105 store { ptr, i64, i64 } %t106, ptr %a107 %t108 = load { ptr, i64, i64 }, ptr %a107 store { ptr, i64, i64 } %t108, ptr %a110 store { ptr, i64, i64 } { ptr @.str.32, i64 1, i64 0 }, ptr %a111 call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) %t112 = load { ptr, i64, i64 }, ptr %a109 %t113 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t112, ptr %a115 store { ptr, i64, i64 } %t113, ptr %a116 call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) store { ptr, i64, i64 } %t112, ptr %a117 call void @finch_str_drop(ptr %a117) %t118 = load { ptr, i64, i64 }, ptr %a114 store { ptr, i64, i64 } %t118, ptr %a120 store { ptr, i64, i64 } { ptr @.str.33, i64 1, i64 0 }, ptr %a121 call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) store { ptr, i64, i64 } %t118, ptr %a122 call void @finch_str_drop(ptr %a122) %t123 = load { ptr, i64, i64 }, ptr %a119 %t124 = load ptr, ptr %a1 %t125 = icmp eq ptr %t124, null br i1 %t125, label %panic53, label %ok54 panic53: call void @finch_panic(ptr @.str.34, i64 74, ptr @.str.35) unreachable ok54: %t126 = getelementptr inbounds %S.main.Loader, ptr %t124, i32 0, i32 3 %t127 = load { ptr, i64, i64 }, ptr %t126 store { ptr, i64, i64 } %t123, ptr %a129 store { ptr, i64, i64 } %t127, ptr %a130 call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) store { ptr, i64, i64 } %t123, ptr %a131 call void @finch_str_drop(ptr %a131) %t132 = load { ptr, i64, i64 }, ptr %a128 store { ptr, i64, i64 } %t132, ptr %a134 store { ptr, i64, i64 } { ptr @.str.36, i64 4, i64 0 }, ptr %a135 call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) store { ptr, i64, i64 } %t132, ptr %a136 call void @finch_str_drop(ptr %a136) %t137 = load { ptr, i64, i64 }, ptr %a133 store { ptr, i64, i64 } %t137, ptr %a138 %t139 = call i32 @finch_file_exists(ptr %a138) store { ptr, i64, i64 } %t137, ptr %a140 call void @finch_str_drop(ptr %a140) %t141 = icmp ne i32 %t139, 0 br i1 %t141, label %then55, label %endif57 then55: %t142 = load { ptr, i64, i64 }, ptr %a107 store { ptr, i64, i64 } %t142, ptr %a144 store { ptr, i64, i64 } { ptr @.str.37, i64 1, i64 0 }, ptr %a145 call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145) %t146 = load { ptr, i64, i64 }, ptr %a143 %t147 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t146, ptr %a149 store { ptr, i64, i64 } %t147, ptr %a150 call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) store { ptr, i64, i64 } %t146, ptr %a151 call void @finch_str_drop(ptr %a151) %t152 = load { ptr, i64, i64 }, ptr %a148 store { ptr, i64, i64 } %t152, ptr %a154 store { ptr, i64, i64 } { ptr @.str.38, i64 1, i64 0 }, ptr %a155 call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) store { ptr, i64, i64 } %t152, ptr %a156 call void @finch_str_drop(ptr %a156) %t157 = load { ptr, i64, i64 }, ptr %a153 %t158 = load ptr, ptr %a1 %t159 = icmp eq ptr %t158, null br i1 %t159, label %panic58, label %ok59 panic58: call void @finch_panic(ptr @.str.39, i64 75, ptr @.str.40) unreachable ok59: %t160 = getelementptr inbounds %S.main.Loader, ptr %t158, i32 0, i32 3 %t161 = load { ptr, i64, i64 }, ptr %t160 store { ptr, i64, i64 } %t157, ptr %a163 store { ptr, i64, i64 } %t161, ptr %a164 call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164) store { ptr, i64, i64 } %t157, ptr %a165 call void @finch_str_drop(ptr %a165) %t166 = load { ptr, i64, i64 }, ptr %a162 store { ptr, i64, i64 } %t166, ptr %a168 store { ptr, i64, i64 } { ptr @.str.41, i64 4, i64 0 }, ptr %a169 call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) store { ptr, i64, i64 } %t166, ptr %a170 call void @finch_str_drop(ptr %a170) %t171 = load { ptr, i64, i64 }, ptr %a167 call void @finch_str_drop(ptr %a22) ret { ptr, i64, i64 } %t171 endif57: %t172 = load { ptr, i64, i64 }, ptr %a107 store { ptr, i64, i64 } %t172, ptr %a174 store { ptr, i64, i64 } { ptr @.str.42, i64 1, i64 0 }, ptr %a175 call void @finch_str_concat(ptr %a173, ptr %a174, ptr %a175) %t176 = load { ptr, i64, i64 }, ptr %a173 %t177 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t176, ptr %a179 store { ptr, i64, i64 } %t177, ptr %a180 call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) store { ptr, i64, i64 } %t176, ptr %a181 call void @finch_str_drop(ptr %a181) %t182 = load { ptr, i64, i64 }, ptr %a178 store { ptr, i64, i64 } %t182, ptr %a184 store { ptr, i64, i64 } { ptr @.str.43, i64 4, i64 0 }, ptr %a185 call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) store { ptr, i64, i64 } %t182, ptr %a186 call void @finch_str_drop(ptr %a186) %t187 = load { ptr, i64, i64 }, ptr %a183 store { ptr, i64, i64 } %t187, ptr %a188 %t189 = call i32 @finch_file_exists(ptr %a188) store { ptr, i64, i64 } %t187, ptr %a190 call void @finch_str_drop(ptr %a190) %t191 = icmp ne i32 %t189, 0 br i1 %t191, label %then60, label %endif62 then60: %t192 = load { ptr, i64, i64 }, ptr %a107 store { ptr, i64, i64 } %t192, ptr %a194 store { ptr, i64, i64 } { ptr @.str.44, i64 1, i64 0 }, ptr %a195 call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) %t196 = load { ptr, i64, i64 }, ptr %a193 %t197 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t196, ptr %a199 store { ptr, i64, i64 } %t197, ptr %a200 call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200) store { ptr, i64, i64 } %t196, ptr %a201 call void @finch_str_drop(ptr %a201) %t202 = load { ptr, i64, i64 }, ptr %a198 store { ptr, i64, i64 } %t202, ptr %a204 store { ptr, i64, i64 } { ptr @.str.45, i64 4, i64 0 }, ptr %a205 call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) store { ptr, i64, i64 } %t202, ptr %a206 call void @finch_str_drop(ptr %a206) %t207 = load { ptr, i64, i64 }, ptr %a203 call void @finch_str_drop(ptr %a22) ret { ptr, i64, i64 } %t207 endif62: br label %each.step51 each.step51: %t208 = load i64, ptr %a99 %t209 = add i64 %t208, 1 store i64 %t209, ptr %a99 br label %each.cond49 each.end52: %t210 = load ptr, ptr %a1 %t211 = icmp eq ptr %t210, null br i1 %t211, label %panic63, label %ok64 panic63: call void @finch_panic(ptr @.str.46, i64 81, ptr @.str.47) unreachable ok64: %t212 = getelementptr inbounds %S.main.Loader, ptr %t210, i32 0, i32 4 %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i32 0, i32 1 %t214 = load i64, ptr %t213 %t215 = icmp sgt i64 %t214, 0 br i1 %t215, label %then65, label %endif67 then65: %t216 = load ptr, ptr %a1 %t217 = icmp eq ptr %t216, null br i1 %t217, label %panic68, label %ok69 panic68: call void @finch_panic(ptr @.str.48, i64 82, ptr @.str.49) unreachable ok69: %t218 = getelementptr inbounds %S.main.Loader, ptr %t216, i32 0, i32 4 %t219 = load { ptr, i64, i64 }, ptr %t218 store { ptr, i64, i64 } %t219, ptr %a221 store { ptr, i64, i64 } { ptr @.str.50, i64 1, i64 0 }, ptr %a222 call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) %t223 = load { ptr, i64, i64 }, ptr %a220 %t224 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t223, ptr %a226 store { ptr, i64, i64 } %t224, ptr %a227 call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227) store { ptr, i64, i64 } %t223, ptr %a228 call void @finch_str_drop(ptr %a228) %t229 = load { ptr, i64, i64 }, ptr %a225 store { ptr, i64, i64 } %t229, ptr %a231 store { ptr, i64, i64 } { ptr @.str.51, i64 1, i64 0 }, ptr %a232 call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) store { ptr, i64, i64 } %t229, ptr %a233 call void @finch_str_drop(ptr %a233) %t234 = load { ptr, i64, i64 }, ptr %a230 %t235 = load ptr, ptr %a1 %t236 = icmp eq ptr %t235, null br i1 %t236, label %panic70, label %ok71 panic70: call void @finch_panic(ptr @.str.52, i64 82, ptr @.str.53) unreachable ok71: %t237 = getelementptr inbounds %S.main.Loader, ptr %t235, i32 0, i32 3 %t238 = load { ptr, i64, i64 }, ptr %t237 store { ptr, i64, i64 } %t234, ptr %a240 store { ptr, i64, i64 } %t238, ptr %a241 call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) store { ptr, i64, i64 } %t234, ptr %a242 call void @finch_str_drop(ptr %a242) %t243 = load { ptr, i64, i64 }, ptr %a239 store { ptr, i64, i64 } %t243, ptr %a245 store { ptr, i64, i64 } { ptr @.str.54, i64 4, i64 0 }, ptr %a246 call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) store { ptr, i64, i64 } %t243, ptr %a247 call void @finch_str_drop(ptr %a247) %t248 = load { ptr, i64, i64 }, ptr %a244 store { ptr, i64, i64 } %t248, ptr %a249 %t250 = call i32 @finch_file_exists(ptr %a249) store { ptr, i64, i64 } %t248, ptr %a251 call void @finch_str_drop(ptr %a251) %t252 = icmp ne i32 %t250, 0 br i1 %t252, label %then72, label %endif74 then72: %t253 = load ptr, ptr %a1 %t254 = icmp eq ptr %t253, null br i1 %t254, label %panic75, label %ok76 panic75: call void @finch_panic(ptr @.str.55, i64 83, ptr @.str.56) unreachable ok76: %t255 = getelementptr inbounds %S.main.Loader, ptr %t253, i32 0, i32 4 %t256 = load { ptr, i64, i64 }, ptr %t255 store { ptr, i64, i64 } %t256, ptr %a258 store { ptr, i64, i64 } { ptr @.str.57, i64 1, i64 0 }, ptr %a259 call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) %t260 = load { ptr, i64, i64 }, ptr %a257 %t261 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t260, ptr %a263 store { ptr, i64, i64 } %t261, ptr %a264 call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) store { ptr, i64, i64 } %t260, ptr %a265 call void @finch_str_drop(ptr %a265) %t266 = load { ptr, i64, i64 }, ptr %a262 store { ptr, i64, i64 } %t266, ptr %a268 store { ptr, i64, i64 } { ptr @.str.58, i64 1, i64 0 }, ptr %a269 call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269) store { ptr, i64, i64 } %t266, ptr %a270 call void @finch_str_drop(ptr %a270) %t271 = load { ptr, i64, i64 }, ptr %a267 %t272 = load ptr, ptr %a1 %t273 = icmp eq ptr %t272, null br i1 %t273, label %panic77, label %ok78 panic77: call void @finch_panic(ptr @.str.59, i64 83, ptr @.str.60) unreachable ok78: %t274 = getelementptr inbounds %S.main.Loader, ptr %t272, i32 0, i32 3 %t275 = load { ptr, i64, i64 }, ptr %t274 store { ptr, i64, i64 } %t271, ptr %a277 store { ptr, i64, i64 } %t275, ptr %a278 call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) store { ptr, i64, i64 } %t271, ptr %a279 call void @finch_str_drop(ptr %a279) %t280 = load { ptr, i64, i64 }, ptr %a276 store { ptr, i64, i64 } %t280, ptr %a282 store { ptr, i64, i64 } { ptr @.str.61, i64 4, i64 0 }, ptr %a283 call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) store { ptr, i64, i64 } %t280, ptr %a284 call void @finch_str_drop(ptr %a284) %t285 = load { ptr, i64, i64 }, ptr %a281 call void @finch_str_drop(ptr %a22) ret { ptr, i64, i64 } %t285 endif74: %t286 = load ptr, ptr %a1 %t287 = icmp eq ptr %t286, null br i1 %t287, label %panic79, label %ok80 panic79: call void @finch_panic(ptr @.str.62, i64 85, ptr @.str.63) unreachable ok80: %t288 = getelementptr inbounds %S.main.Loader, ptr %t286, i32 0, i32 4 %t289 = load { ptr, i64, i64 }, ptr %t288 store { ptr, i64, i64 } %t289, ptr %a291 store { ptr, i64, i64 } { ptr @.str.64, i64 1, i64 0 }, ptr %a292 call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) %t293 = load { ptr, i64, i64 }, ptr %a290 %t294 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t293, ptr %a296 store { ptr, i64, i64 } %t294, ptr %a297 call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297) store { ptr, i64, i64 } %t293, ptr %a298 call void @finch_str_drop(ptr %a298) %t299 = load { ptr, i64, i64 }, ptr %a295 store { ptr, i64, i64 } %t299, ptr %a301 store { ptr, i64, i64 } { ptr @.str.65, i64 4, i64 0 }, ptr %a302 call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) store { ptr, i64, i64 } %t299, ptr %a303 call void @finch_str_drop(ptr %a303) %t304 = load { ptr, i64, i64 }, ptr %a300 store { ptr, i64, i64 } %t304, ptr %a305 %t306 = call i32 @finch_file_exists(ptr %a305) store { ptr, i64, i64 } %t304, ptr %a307 call void @finch_str_drop(ptr %a307) %t308 = icmp ne i32 %t306, 0 br i1 %t308, label %then81, label %endif83 then81: %t309 = load ptr, ptr %a1 %t310 = icmp eq ptr %t309, null br i1 %t310, label %panic84, label %ok85 panic84: call void @finch_panic(ptr @.str.66, i64 86, ptr @.str.67) unreachable ok85: %t311 = getelementptr inbounds %S.main.Loader, ptr %t309, i32 0, i32 4 %t312 = load { ptr, i64, i64 }, ptr %t311 store { ptr, i64, i64 } %t312, ptr %a314 store { ptr, i64, i64 } { ptr @.str.68, i64 1, i64 0 }, ptr %a315 call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) %t316 = load { ptr, i64, i64 }, ptr %a313 %t317 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t316, ptr %a319 store { ptr, i64, i64 } %t317, ptr %a320 call void @finch_str_concat(ptr %a318, ptr %a319, ptr %a320) store { ptr, i64, i64 } %t316, ptr %a321 call void @finch_str_drop(ptr %a321) %t322 = load { ptr, i64, i64 }, ptr %a318 store { ptr, i64, i64 } %t322, ptr %a324 store { ptr, i64, i64 } { ptr @.str.69, i64 4, i64 0 }, ptr %a325 call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325) store { ptr, i64, i64 } %t322, ptr %a326 call void @finch_str_drop(ptr %a326) %t327 = load { ptr, i64, i64 }, ptr %a323 call void @finch_str_drop(ptr %a22) ret { ptr, i64, i64 } %t327 endif83: br label %endif67 endif67: %t328 = load { ptr, i64, i64 }, ptr %a22 ret { ptr, i64, i64 } %t328 } define internal void @finch.drop.S_lexer_Token(ptr %a) { entry: %t1 = getelementptr inbounds %S.lexer.Token, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.lexer.Token, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) ret void } define internal void @finch.drop.arr_S_lexer_Token(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond107 n.cond107: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body108, label %n.end109 n.body108: %t7 = getelementptr inbounds %S.lexer.Token, ptr %t1, i64 %t5 call void @finch.drop.S_lexer_Token(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond107 n.end109: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.copy.arr_str(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond110 n.cond110: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body111, label %n.end112 n.body111: %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1, i64 %t6 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 %t6 call void @finch_str_copy(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond110 n.end112: ret void } define internal void @finch.copy.arr_S_ast_Type(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond118 n.cond118: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body119, label %n.end120 n.body119: %t8 = getelementptr inbounds %S.ast.Type, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.ast.Type, ptr %t2, i64 %t6 call void @finch.copy.S_ast_Type(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond118 n.end120: ret void } define internal void @finch.copy.S_ast_Type(ptr %dst, ptr %src) { entry: %t1 = load %S.ast.Type, ptr %src store %S.ast.Type %t1, ptr %dst %t2 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 1 call void @finch.copy.arr_S_ast_Type(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 3 call void @finch_str_copy(ptr %t8, ptr %t9) ret void } define internal void @finch.copy.S_ast_Node(ptr %dst, ptr %src) { entry: %t1 = load %S.ast.Node, ptr %src store %S.ast.Node %t1, ptr %dst %t2 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 3 call void @finch.copy.arr_str(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 4 %t11 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 4 call void @finch_str_copy(ptr %t10, ptr %t11) %t12 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 5 %t13 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 5 call void @finch.copy.S_ast_Type(ptr %t12, ptr %t13) %t14 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 9 %t15 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 9 call void @finch.copy.arr_S_ast_Node(ptr %t14, ptr %t15) %t16 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 10 %t17 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 10 call void @finch.copy.arr_str(ptr %t16, ptr %t17) ret void } define internal void @finch.copy.arr_S_ast_Node(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond115 n.cond115: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body116, label %n.end117 n.body116: %t8 = getelementptr inbounds %S.ast.Node, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.ast.Node, ptr %t2, i64 %t6 call void @finch.copy.S_ast_Node(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond115 n.end117: ret void } define internal void @finch.copy.S_ast_Program(ptr %dst, ptr %src) { entry: %t1 = load %S.ast.Program, ptr %src store %S.ast.Program %t1, ptr %dst %t2 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 2 call void @finch.copy.arr_str(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 3 call void @finch.copy.arr_str(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 4 %t11 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 4 call void @finch.copy.arr_str(ptr %t10, ptr %t11) %t12 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 5 %t13 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 5 call void @finch.copy.arr_str(ptr %t12, ptr %t13) %t14 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 6 %t15 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 6 call void @finch.copy.arr_S_ast_Node(ptr %t14, ptr %t15) %t16 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 7 %t17 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 7 call void @finch.copy.arr_S_ast_Node(ptr %t16, ptr %t17) %t18 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 8 %t19 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 8 call void @finch.copy.arr_S_ast_Node(ptr %t18, ptr %t19) ret void } define internal void @finch.drop.arr_str(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond137 n.cond137: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body138, label %n.end139 n.body138: %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1, i64 %t5 call void @finch_str_drop(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond137 n.end139: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.arr_S_ast_Type(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond143 n.cond143: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body144, label %n.end145 n.body144: %t7 = getelementptr inbounds %S.ast.Type, ptr %t1, i64 %t5 call void @finch.drop.S_ast_Type(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond143 n.end145: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.S_ast_Type(ptr %a) { entry: %t1 = getelementptr inbounds %S.ast.Type, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.ast.Type, ptr %a, i32 0, i32 1 call void @finch.drop.arr_S_ast_Type(ptr %t2) %t3 = getelementptr inbounds %S.ast.Type, ptr %a, i32 0, i32 2 call void @finch_str_drop(ptr %t3) %t4 = getelementptr inbounds %S.ast.Type, ptr %a, i32 0, i32 3 call void @finch_str_drop(ptr %t4) ret void } define internal void @finch.drop.S_ast_Node(ptr %a) { entry: %t1 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 2 call void @finch_str_drop(ptr %t3) %t4 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 3 call void @finch.drop.arr_str(ptr %t4) %t5 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 4 call void @finch_str_drop(ptr %t5) %t6 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 5 call void @finch.drop.S_ast_Type(ptr %t6) %t7 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 9 call void @finch.drop.arr_S_ast_Node(ptr %t7) %t8 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 10 call void @finch.drop.arr_str(ptr %t8) ret void } define internal void @finch.drop.arr_S_ast_Node(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond140 n.cond140: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body141, label %n.end142 n.body141: %t7 = getelementptr inbounds %S.ast.Node, ptr %t1, i64 %t5 call void @finch.drop.S_ast_Node(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond140 n.end142: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.S_ast_Program(ptr %a) { entry: %t1 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 2 call void @finch.drop.arr_str(ptr %t3) %t4 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 3 call void @finch.drop.arr_str(ptr %t4) %t5 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 4 call void @finch.drop.arr_str(ptr %t5) %t6 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 5 call void @finch.drop.arr_str(ptr %t6) %t7 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 6 call void @finch.drop.arr_S_ast_Node(ptr %t7) %t8 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 7 call void @finch.drop.arr_S_ast_Node(ptr %t8) %t9 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 8 call void @finch.drop.arr_S_ast_Node(ptr %t9) ret void } define internal void @finch.main.load(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca i64, align 16 %a17 = alloca i64, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca i64, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca %S.ast.Program, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca %S.ast.Program, align 16 %a139 = alloca %S.ast.Program, align 16 %a145 = alloca i64, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca i64, align 16 %a162 = alloca i64, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t4, ptr %a5 %t6 = call i32 @finch_file_exists(ptr %a5) %t7 = icmp ne i32 %t6, 0 %t8 = xor i1 %t7, true br label %logic.from86 logic.from86: br i1 %t8, label %logic.rhs87, label %logic.end88 logic.rhs87: %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null br i1 %t10, label %panic89, label %ok90 panic89: call void @finch_panic(ptr @.str.70, i64 93, ptr @.str.71) unreachable ok90: %t11 = getelementptr inbounds %S.main.Loader, ptr %t9, i32 0, i32 6 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i32 0, i32 1 %t13 = load { ptr, i64, i64 }, ptr %a2 store i64 -1, ptr %a14 %t15 = load i64, ptr %t12 %t16 = load ptr, ptr %t11 store i64 0, ptr %a17 br label %find.cond91 find.cond91: %t18 = load i64, ptr %a17 %t19 = icmp slt i64 %t18, %t15 br i1 %t19, label %find.body92, label %find.end95 find.body92: %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 %t18 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a22 store { ptr, i64, i64 } %t13, ptr %a23 %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) %t25 = icmp ne i32 %t24, 0 br i1 %t25, label %find.hit93, label %find.next94 find.hit93: store i64 %t18, ptr %a14 br label %find.end95 find.next94: %t26 = add i64 %t18, 1 store i64 %t26, ptr %a17 br label %find.cond91 find.end95: %t27 = load i64, ptr %a14 %t28 = icmp sge i64 %t27, 0 %t29 = xor i1 %t28, true br label %logic.rend96 logic.rend96: br label %logic.end88 logic.end88: %t30 = phi i1 [ false, %logic.from86 ], [ %t29, %logic.rend96 ] br i1 %t30, label %then97, label %endif99 then97: %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = icmp sgt i64 %t32, 0 br i1 %t33, label %then100, label %else101 then100: %t34 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.72, i64 30, i64 0 }, ptr %a36 store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t38, ptr %a40 store { ptr, i64, i64 } { ptr @.str.73, i64 14, i64 0 }, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) store { ptr, i64, i64 } %t38, ptr %a42 call void @finch_str_drop(ptr %a42) %t43 = load { ptr, i64, i64 }, ptr %a39 %t44 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t43, ptr %a46 store { ptr, i64, i64 } %t44, ptr %a47 call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) store { ptr, i64, i64 } %t43, ptr %a48 call void @finch_str_drop(ptr %a48) %t49 = load { ptr, i64, i64 }, ptr %a45 store { ptr, i64, i64 } %t49, ptr %a51 store { ptr, i64, i64 } { ptr @.str.74, i64 1, i64 0 }, ptr %a52 call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) store { ptr, i64, i64 } %t49, ptr %a53 call void @finch_str_drop(ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a50 %t55 = extractvalue { ptr, i64, i64 } %t54, 1 %t56 = trunc i64 %t55 to i32 %t57 = extractvalue { ptr, i64, i64 } %t54, 0 %t58 = icmp eq ptr %t57, null %t59 = select i1 %t58, ptr @.str.75, ptr %t57 %t60 = call i32 (ptr, ...) @printf(ptr @.str.76, i32 %t56, ptr %t59) store { ptr, i64, i64 } %t54, ptr %a61 call void @finch_str_drop(ptr %a61) %t62 = call i32 (ptr, ...) @printf(ptr @.str.77) br label %endif102 else101: %t63 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.78, i64 19, i64 0 }, ptr %a65 store { ptr, i64, i64 } %t63, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) %t67 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } %t67, ptr %a69 store { ptr, i64, i64 } { ptr @.str.79, i64 1, i64 0 }, ptr %a70 call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) store { ptr, i64, i64 } %t67, ptr %a71 call void @finch_str_drop(ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a68 %t73 = extractvalue { ptr, i64, i64 } %t72, 1 %t74 = trunc i64 %t73 to i32 %t75 = extractvalue { ptr, i64, i64 } %t72, 0 %t76 = icmp eq ptr %t75, null %t77 = select i1 %t76, ptr @.str.80, ptr %t75 %t78 = call i32 (ptr, ...) @printf(ptr @.str.81, i32 %t74, ptr %t77) store { ptr, i64, i64 } %t72, ptr %a79 call void @finch_str_drop(ptr %a79) %t80 = call i32 (ptr, ...) @printf(ptr @.str.82) br label %endif102 endif102: %t81 = trunc i64 1 to i32 %t82 = call i32 @fflush(ptr null) call void @exit(i32 %t81) br label %endif99 endif99: %t83 = load ptr, ptr %a1 %t84 = load { ptr, i64, i64 }, ptr %a2 %t85 = call { ptr, i64, i64 } @finch.main.textOfFile(ptr %t83, { ptr, i64, i64 } %t84) store { ptr, i64, i64 } %t85, ptr %a86 %t87 = load ptr, ptr %a1 %t88 = icmp eq ptr %t87, null br i1 %t88, label %panic103, label %ok104 panic103: call void @finch_panic(ptr @.str.83, i64 102, ptr @.str.84) unreachable ok104: %t89 = getelementptr inbounds %S.main.Loader, ptr %t87, i32 0, i32 1 %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i32 0, i32 1 %t91 = load i64, ptr %t90 store i64 %t91, ptr %a92 %t93 = load ptr, ptr %a1 %t94 = icmp eq ptr %t93, null br i1 %t94, label %panic105, label %ok106 panic105: call void @finch_panic(ptr @.str.85, i64 103, ptr @.str.86) unreachable ok106: %t95 = getelementptr inbounds %S.main.Loader, ptr %t93, i32 0, i32 1 %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i32 0, i32 1 %t97 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t97, ptr %a98 call void @finch_str_copy(ptr %a99, ptr %a98) %t100 = load { ptr, i64, i64 }, ptr %a99 %t101 = load i64, ptr %t96 %t102 = add i64 %t101, 1 call void @finch_arr_reserve(ptr %t95, i64 %t102, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t103 = load ptr, ptr %t95 %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 %t101 store { ptr, i64, i64 } %t100, ptr %t104 store i64 %t102, ptr %t96 %t105 = load { ptr, i64, i64 }, ptr %a86 %t106 = load { ptr, i64, i64 }, ptr %a2 %t107 = call { ptr, i64, i64 } @finch.lexer.lex({ ptr, i64, i64 } %t105, { ptr, i64, i64 } %t106) %t108 = load i64, ptr %a92 %t109 = load { ptr, i64, i64 }, ptr %a2 %t110 = call %S.ast.Program @finch.parser.parse({ ptr, i64, i64 } %t107, i64 %t108, { ptr, i64, i64 } %t109) store { ptr, i64, i64 } %t107, ptr %a111 call void @finch.drop.arr_S_lexer_Token(ptr %a111) store %S.ast.Program %t110, ptr %a112 %t113 = load { ptr, i64, i64 }, ptr %a3 %t114 = getelementptr inbounds %S.ast.Program, ptr %a112, i32 0, i32 0 store { ptr, i64, i64 } %t113, ptr %a115 call void @finch_str_copy(ptr %a116, ptr %a115) %t117 = load { ptr, i64, i64 }, ptr %a116 %t118 = load { ptr, i64, i64 }, ptr %t114 store { ptr, i64, i64 } %t117, ptr %t114 store { ptr, i64, i64 } %t118, ptr %a119 call void @finch_str_drop(ptr %a119) %t120 = load { ptr, i64, i64 }, ptr %a2 %t121 = getelementptr inbounds %S.ast.Program, ptr %a112, i32 0, i32 1 store { ptr, i64, i64 } %t120, ptr %a122 call void @finch_str_copy(ptr %a123, ptr %a122) %t124 = load { ptr, i64, i64 }, ptr %a123 %t125 = load { ptr, i64, i64 }, ptr %t121 store { ptr, i64, i64 } %t124, ptr %t121 store { ptr, i64, i64 } %t125, ptr %a126 call void @finch_str_drop(ptr %a126) %t127 = getelementptr inbounds %S.ast.Program, ptr %a112, i32 0, i32 2 %t128 = load { ptr, i64, i64 }, ptr %t127 store { ptr, i64, i64 } %t128, ptr %a129 call void @finch.copy.arr_str(ptr %a130, ptr %a129) %t131 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t131, ptr %a132 %t133 = load ptr, ptr %a1 %t134 = icmp eq ptr %t133, null br i1 %t134, label %panic113, label %ok114 panic113: call void @finch_panic(ptr @.str.87, i64 108, ptr @.str.88) unreachable ok114: %t135 = getelementptr inbounds %S.main.Loader, ptr %t133, i32 0, i32 0 %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i32 0, i32 1 %t137 = load %S.ast.Program, ptr %a112 store %S.ast.Program %t137, ptr %a138 call void @finch.copy.S_ast_Program(ptr %a139, ptr %a138) %t140 = load %S.ast.Program, ptr %a139 %t141 = load i64, ptr %t136 %t142 = add i64 %t141, 1 call void @finch_arr_reserve(ptr %t135, i64 %t142, i64 ptrtoint (ptr getelementptr (%S.ast.Program, ptr null, i32 1) to i64)) %t143 = load ptr, ptr %t135 %t144 = getelementptr inbounds %S.ast.Program, ptr %t143, i64 %t141 store %S.ast.Program %t140, ptr %t144 store i64 %t142, ptr %t136 store i64 0, ptr %a145 br label %each.cond121 each.cond121: %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 %t147 = load i64, ptr %t146 %t148 = load i64, ptr %a145 %t149 = icmp slt i64 %t148, %t147 br i1 %t149, label %each.body122, label %each.end124 each.body122: %t150 = load ptr, ptr %a132 %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i64 %t148 %t152 = load { ptr, i64, i64 }, ptr %t151 store { ptr, i64, i64 } %t152, ptr %a153 %t154 = load ptr, ptr %a1 %t155 = icmp eq ptr %t154, null br i1 %t155, label %panic125, label %ok126 panic125: call void @finch_panic(ptr @.str.89, i64 110, ptr @.str.90) unreachable ok126: %t156 = getelementptr inbounds %S.main.Loader, ptr %t154, i32 0, i32 2 %t157 = getelementptr inbounds { ptr, i64, i64 }, ptr %t156, i32 0, i32 1 %t158 = load { ptr, i64, i64 }, ptr %a153 store i64 -1, ptr %a159 %t160 = load i64, ptr %t157 %t161 = load ptr, ptr %t156 store i64 0, ptr %a162 br label %find.cond127 find.cond127: %t163 = load i64, ptr %a162 %t164 = icmp slt i64 %t163, %t160 br i1 %t164, label %find.body128, label %find.end131 find.body128: %t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %t161, i64 %t163 %t166 = load { ptr, i64, i64 }, ptr %t165 store { ptr, i64, i64 } %t166, ptr %a167 store { ptr, i64, i64 } %t158, ptr %a168 %t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168) %t170 = icmp ne i32 %t169, 0 br i1 %t170, label %find.hit129, label %find.next130 find.hit129: store i64 %t163, ptr %a159 br label %find.end131 find.next130: %t171 = add i64 %t163, 1 store i64 %t171, ptr %a162 br label %find.cond127 find.end131: %t172 = load i64, ptr %a159 %t173 = icmp sge i64 %t172, 0 %t174 = xor i1 %t173, true br i1 %t174, label %then132, label %endif134 then132: %t175 = load ptr, ptr %a1 %t176 = icmp eq ptr %t175, null br i1 %t176, label %panic135, label %ok136 panic135: call void @finch_panic(ptr @.str.91, i64 111, ptr @.str.92) unreachable ok136: %t177 = getelementptr inbounds %S.main.Loader, ptr %t175, i32 0, i32 2 %t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %t177, i32 0, i32 1 %t179 = load { ptr, i64, i64 }, ptr %a153 store { ptr, i64, i64 } %t179, ptr %a180 call void @finch_str_copy(ptr %a181, ptr %a180) %t182 = load { ptr, i64, i64 }, ptr %a181 %t183 = load i64, ptr %t178 %t184 = add i64 %t183, 1 call void @finch_arr_reserve(ptr %t177, i64 %t184, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t185 = load ptr, ptr %t177 %t186 = getelementptr inbounds { ptr, i64, i64 }, ptr %t185, i64 %t183 store { ptr, i64, i64 } %t182, ptr %t186 store i64 %t184, ptr %t178 %t187 = load ptr, ptr %a1 %t188 = load ptr, ptr %a1 %t189 = load { ptr, i64, i64 }, ptr %a2 %t190 = load { ptr, i64, i64 }, ptr %a153 %t191 = call { ptr, i64, i64 } @finch.main.findModule(ptr %t188, { ptr, i64, i64 } %t189, { ptr, i64, i64 } %t190) %t192 = load { ptr, i64, i64 }, ptr %a153 call void @finch.main.load(ptr %t187, { ptr, i64, i64 } %t191, { ptr, i64, i64 } %t192) store { ptr, i64, i64 } %t191, ptr %a193 call void @finch_str_drop(ptr %a193) br label %endif134 endif134: br label %each.step123 each.step123: %t194 = load i64, ptr %a145 %t195 = add i64 %t194, 1 store i64 %t195, ptr %a145 br label %each.cond121 each.end124: call void @finch.drop.arr_str(ptr %a132) call void @finch.drop.S_ast_Program(ptr %a112) call void @finch_str_drop(ptr %a86) ret void } define internal void @finch.main.usage() { entry: %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.93, i64 41, i64 0 }, 1 %t2 = trunc i64 %t1 to i32 %t3 = extractvalue { ptr, i64, i64 } { ptr @.str.93, i64 41, i64 0 }, 0 %t4 = icmp eq ptr %t3, null %t5 = select i1 %t4, ptr @.str.94, ptr %t3 %t6 = call i32 (ptr, ...) @printf(ptr @.str.95, i32 %t2, ptr %t5) %t7 = call i32 (ptr, ...) @printf(ptr @.str.96) %t8 = extractvalue { ptr, i64, i64 } { ptr @.str.97, i64 6, i64 0 }, 1 %t9 = trunc i64 %t8 to i32 %t10 = extractvalue { ptr, i64, i64 } { ptr @.str.97, i64 6, i64 0 }, 0 %t11 = icmp eq ptr %t10, null %t12 = select i1 %t11, ptr @.str.98, ptr %t10 %t13 = call i32 (ptr, ...) @printf(ptr @.str.99, i32 %t9, ptr %t12) %t14 = call i32 (ptr, ...) @printf(ptr @.str.100) %t15 = extractvalue { ptr, i64, i64 } { ptr @.str.101, i64 60, i64 0 }, 1 %t16 = trunc i64 %t15 to i32 %t17 = extractvalue { ptr, i64, i64 } { ptr @.str.101, i64 60, i64 0 }, 0 %t18 = icmp eq ptr %t17, null %t19 = select i1 %t18, ptr @.str.102, ptr %t17 %t20 = call i32 (ptr, ...) @printf(ptr @.str.103, i32 %t16, ptr %t19) %t21 = call i32 (ptr, ...) @printf(ptr @.str.104) %t22 = extractvalue { ptr, i64, i64 } { ptr @.str.105, i64 52, i64 0 }, 1 %t23 = trunc i64 %t22 to i32 %t24 = extractvalue { ptr, i64, i64 } { ptr @.str.105, i64 52, i64 0 }, 0 %t25 = icmp eq ptr %t24, null %t26 = select i1 %t25, ptr @.str.106, ptr %t24 %t27 = call i32 (ptr, ...) @printf(ptr @.str.107, i32 %t23, ptr %t26) %t28 = call i32 (ptr, ...) @printf(ptr @.str.108) %t29 = extractvalue { ptr, i64, i64 } { ptr @.str.109, i64 54, i64 0 }, 1 %t30 = trunc i64 %t29 to i32 %t31 = extractvalue { ptr, i64, i64 } { ptr @.str.109, i64 54, i64 0 }, 0 %t32 = icmp eq ptr %t31, null %t33 = select i1 %t32, ptr @.str.110, ptr %t31 %t34 = call i32 (ptr, ...) @printf(ptr @.str.111, i32 %t30, ptr %t33) %t35 = call i32 (ptr, ...) @printf(ptr @.str.112) %t36 = extractvalue { ptr, i64, i64 } { ptr @.str.113, i64 53, i64 0 }, 1 %t37 = trunc i64 %t36 to i32 %t38 = extractvalue { ptr, i64, i64 } { ptr @.str.113, i64 53, i64 0 }, 0 %t39 = icmp eq ptr %t38, null %t40 = select i1 %t39, ptr @.str.114, ptr %t38 %t41 = call i32 (ptr, ...) @printf(ptr @.str.115, i32 %t37, ptr %t40) %t42 = call i32 (ptr, ...) @printf(ptr @.str.116) %t43 = extractvalue { ptr, i64, i64 } { ptr @.str.117, i64 90, i64 0 }, 1 %t44 = trunc i64 %t43 to i32 %t45 = extractvalue { ptr, i64, i64 } { ptr @.str.117, i64 90, i64 0 }, 0 %t46 = icmp eq ptr %t45, null %t47 = select i1 %t46, ptr @.str.118, ptr %t45 %t48 = call i32 (ptr, ...) @printf(ptr @.str.119, i32 %t44, ptr %t47) %t49 = call i32 (ptr, ...) @printf(ptr @.str.120) %t50 = extractvalue { ptr, i64, i64 } { ptr @.str.121, i64 8, i64 0 }, 1 %t51 = trunc i64 %t50 to i32 %t52 = extractvalue { ptr, i64, i64 } { ptr @.str.121, i64 8, i64 0 }, 0 %t53 = icmp eq ptr %t52, null %t54 = select i1 %t53, ptr @.str.122, ptr %t52 %t55 = call i32 (ptr, ...) @printf(ptr @.str.123, i32 %t51, ptr %t54) %t56 = call i32 (ptr, ...) @printf(ptr @.str.124) %t57 = extractvalue { ptr, i64, i64 } { ptr @.str.125, i64 53, i64 0 }, 1 %t58 = trunc i64 %t57 to i32 %t59 = extractvalue { ptr, i64, i64 } { ptr @.str.125, i64 53, i64 0 }, 0 %t60 = icmp eq ptr %t59, null %t61 = select i1 %t60, ptr @.str.126, ptr %t59 %t62 = call i32 (ptr, ...) @printf(ptr @.str.127, i32 %t58, ptr %t61) %t63 = call i32 (ptr, ...) @printf(ptr @.str.128) %t64 = extractvalue { ptr, i64, i64 } { ptr @.str.129, i64 76, i64 0 }, 1 %t65 = trunc i64 %t64 to i32 %t66 = extractvalue { ptr, i64, i64 } { ptr @.str.129, i64 76, i64 0 }, 0 %t67 = icmp eq ptr %t66, null %t68 = select i1 %t67, ptr @.str.130, ptr %t66 %t69 = call i32 (ptr, ...) @printf(ptr @.str.131, i32 %t65, ptr %t68) %t70 = call i32 (ptr, ...) @printf(ptr @.str.132) %t71 = extractvalue { ptr, i64, i64 } { ptr @.str.133, i64 57, i64 0 }, 1 %t72 = trunc i64 %t71 to i32 %t73 = extractvalue { ptr, i64, i64 } { ptr @.str.133, i64 57, i64 0 }, 0 %t74 = icmp eq ptr %t73, null %t75 = select i1 %t74, ptr @.str.134, ptr %t73 %t76 = call i32 (ptr, ...) @printf(ptr @.str.135, i32 %t72, ptr %t75) %t77 = call i32 (ptr, ...) @printf(ptr @.str.136) %t78 = extractvalue { ptr, i64, i64 } { ptr @.str.137, i64 66, i64 0 }, 1 %t79 = trunc i64 %t78 to i32 %t80 = extractvalue { ptr, i64, i64 } { ptr @.str.137, i64 66, i64 0 }, 0 %t81 = icmp eq ptr %t80, null %t82 = select i1 %t81, ptr @.str.138, ptr %t80 %t83 = call i32 (ptr, ...) @printf(ptr @.str.139, i32 %t79, ptr %t82) %t84 = call i32 (ptr, ...) @printf(ptr @.str.140) %t85 = extractvalue { ptr, i64, i64 } { ptr @.str.141, i64 101, i64 0 }, 1 %t86 = trunc i64 %t85 to i32 %t87 = extractvalue { ptr, i64, i64 } { ptr @.str.141, i64 101, i64 0 }, 0 %t88 = icmp eq ptr %t87, null %t89 = select i1 %t88, ptr @.str.142, ptr %t87 %t90 = call i32 (ptr, ...) @printf(ptr @.str.143, i32 %t86, ptr %t89) %t91 = call i32 (ptr, ...) @printf(ptr @.str.144) %t92 = trunc i64 1 to i32 %t93 = call i32 @fflush(ptr null) call void @exit(i32 %t92) ret void } define internal { ptr, i64, i64 } @finch.main.unpack() { entry: %a2 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca i64, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %t1 = call { ptr, i64, i64 } @finch.embedded.names() store { ptr, i64, i64 } %t1, ptr %a2 %t3 = call { ptr, i64, i64 } @finch.host.cacheDir() store { ptr, i64, i64 } %t3, ptr %a5 store { ptr, i64, i64 } { ptr @.str.145, i64 7, i64 0 }, ptr %a6 call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) store { ptr, i64, i64 } %t3, ptr %a7 call void @finch_str_drop(ptr %a7) %t8 = load { ptr, i64, i64 }, ptr %a4 %t9 = call { ptr, i64, i64 } @finch.embedded.texts() store { ptr, i64, i64 } %t9, ptr %a10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.146, i64 1, i64 0 }, ptr %a12 call void @finch_str_join(ptr %a13, ptr %a10, ptr %a12) %t14 = load { ptr, i64, i64 }, ptr %a13 call void @finch.drop.arr_str(ptr %a10) %t15 = call { ptr, i64, i64 } @finch.linker.fingerprint({ ptr, i64, i64 } %t14) store { ptr, i64, i64 } %t14, ptr %a16 call void @finch_str_drop(ptr %a16) store { ptr, i64, i64 } %t8, ptr %a18 store { ptr, i64, i64 } %t15, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) store { ptr, i64, i64 } %t8, ptr %a20 call void @finch_str_drop(ptr %a20) store { ptr, i64, i64 } %t15, ptr %a21 call void @finch_str_drop(ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a17 store { ptr, i64, i64 } %t22, ptr %a23 %t24 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t24, ptr %a26 store { ptr, i64, i64 } { ptr @.str.147, i64 5, i64 0 }, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t28, ptr %a29 %t30 = call i32 @finch_file_exists(ptr %a29) store { ptr, i64, i64 } %t28, ptr %a31 call void @finch_str_drop(ptr %a31) %t32 = icmp ne i32 %t30, 0 br i1 %t32, label %then146, label %endif148 then146: %t33 = load { ptr, i64, i64 }, ptr %a23 call void @finch.drop.arr_str(ptr %a2) ret { ptr, i64, i64 } %t33 endif148: %t34 = call { ptr, i64, i64 } @finch.embedded.texts() store { ptr, i64, i64 } %t34, ptr %a35 %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t37 = load i64, ptr %t36 store i64 0, ptr %a38 br label %for.cond149 for.cond149: %t39 = load i64, ptr %a38 %t40 = icmp slt i64 %t39, %t37 br i1 %t40, label %for.body150, label %for.end152 for.body150: %t41 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t41, ptr %a43 store { ptr, i64, i64 } { ptr @.str.148, i64 1, i64 0 }, ptr %a44 call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) %t45 = load { ptr, i64, i64 }, ptr %a42 %t46 = load i64, ptr %a38 %t47 = load { ptr, i64, i64 }, ptr %a2 %t48 = extractvalue { ptr, i64, i64 } %t47, 1 %t49 = icmp uge i64 %t46, %t48 br i1 %t49, label %range153, label %inrange154 range153: call void @finch_panic_index(ptr @.str.149, i64 144, i64 %t46, i64 %t48) unreachable inrange154: %t50 = extractvalue { ptr, i64, i64 } %t47, 0 %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t46 %t52 = load { ptr, i64, i64 }, ptr %t51 store { ptr, i64, i64 } %t45, ptr %a54 store { ptr, i64, i64 } %t52, ptr %a55 call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) store { ptr, i64, i64 } %t45, ptr %a56 call void @finch_str_drop(ptr %a56) %t57 = load { ptr, i64, i64 }, ptr %a53 %t58 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t57) store { ptr, i64, i64 } %t57, ptr %a59 call void @finch_str_drop(ptr %a59) call void @finch.host.makeDirs({ ptr, i64, i64 } %t58) store { ptr, i64, i64 } %t58, ptr %a60 call void @finch_str_drop(ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t61, ptr %a63 store { ptr, i64, i64 } { ptr @.str.150, i64 1, i64 0 }, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) %t65 = load { ptr, i64, i64 }, ptr %a62 %t66 = load i64, ptr %a38 %t67 = load { ptr, i64, i64 }, ptr %a2 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 %t66, %t68 br i1 %t69, label %range155, label %inrange156 range155: call void @finch_panic_index(ptr @.str.151, i64 145, i64 %t66, i64 %t68) unreachable inrange156: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i64 %t66 %t72 = load { ptr, i64, i64 }, ptr %t71 store { ptr, i64, i64 } %t65, ptr %a74 store { ptr, i64, i64 } %t72, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) store { ptr, i64, i64 } %t65, ptr %a76 call void @finch_str_drop(ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a73 %t78 = load i64, ptr %a38 %t79 = load { ptr, i64, i64 }, ptr %a35 %t80 = extractvalue { ptr, i64, i64 } %t79, 1 %t81 = icmp uge i64 %t78, %t80 br i1 %t81, label %range157, label %inrange158 range157: call void @finch_panic_index(ptr @.str.152, i64 145, i64 %t78, i64 %t80) unreachable inrange158: %t82 = extractvalue { ptr, i64, i64 } %t79, 0 %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i64 %t78 %t84 = load { ptr, i64, i64 }, ptr %t83 store { ptr, i64, i64 } %t77, ptr %a85 store { ptr, i64, i64 } %t84, ptr %a86 %t87 = call i32 @finch_write_file(ptr %a85, ptr %a86) store { ptr, i64, i64 } %t77, ptr %a88 call void @finch_str_drop(ptr %a88) %t89 = icmp ne i32 %t87, 0 br label %for.step151 for.step151: %t90 = load i64, ptr %a38 %t91 = add i64 %t90, 1 store i64 %t91, ptr %a38 br label %for.cond149 for.end152: %t92 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t92, ptr %a94 store { ptr, i64, i64 } { ptr @.str.153, i64 5, i64 0 }, ptr %a95 call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) %t96 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t96, ptr %a97 store { ptr, i64, i64 } { ptr @.str.154, i64 0, i64 0 }, ptr %a98 %t99 = call i32 @finch_write_file(ptr %a97, ptr %a98) store { ptr, i64, i64 } %t96, ptr %a100 call void @finch_str_drop(ptr %a100) %t101 = icmp ne i32 %t99, 0 %t102 = load { ptr, i64, i64 }, ptr %a23 call void @finch.drop.arr_str(ptr %a35) call void @finch.drop.arr_str(ptr %a2) ret { ptr, i64, i64 } %t102 } define internal void @finch.drop.S_cimport_Header(ptr %a) { entry: %t1 = getelementptr inbounds %S.cimport.Header, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.cimport.Header, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) ret void } define internal void @finch.drop.arr_S_cimport_Header(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond403 n.cond403: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body404, label %n.end405 n.body404: %t7 = getelementptr inbounds %S.cimport.Header, ptr %t1, i64 %t5 call void @finch.drop.S_cimport_Header(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond403 n.end405: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.arr_S_ast_Program(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond406 n.cond406: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body407, label %n.end408 n.body407: %t7 = getelementptr inbounds %S.ast.Program, ptr %t1, i64 %t5 call void @finch.drop.S_ast_Program(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond406 n.end408: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.S_main_Loader(ptr %a) { entry: %t1 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 0 call void @finch.drop.arr_S_ast_Program(ptr %t1) %t2 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 1 call void @finch.drop.arr_str(ptr %t2) %t3 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 2 call void @finch.drop.arr_str(ptr %t3) %t4 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 3 call void @finch_str_drop(ptr %t4) %t5 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 4 call void @finch_str_drop(ptr %t5) %t6 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 5 call void @finch.drop.arr_str(ptr %t6) %t7 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 6 call void @finch.drop.arr_str(ptr %t7) %t8 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 7 call void @finch.drop.arr_str(ptr %t8) ret void } define internal void @finch.drop.S_platform_Target(ptr %a) { entry: %t1 = getelementptr inbounds %S.platform.Target, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.platform.Target, ptr %a, i32 0, i32 6 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.platform.Target, ptr %a, i32 0, i32 7 call void @finch_str_drop(ptr %t3) %t4 = getelementptr inbounds %S.platform.Target, ptr %a, i32 0, i32 8 call void @finch_str_drop(ptr %t4) ret void } define internal void @finch.copy.S_platform_Target(ptr %dst, ptr %src) { entry: %t1 = load %S.platform.Target, ptr %src store %S.platform.Target %t1, ptr %dst %t2 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 6 %t5 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 6 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 7 %t7 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 7 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 8 %t9 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 8 call void @finch_str_copy(ptr %t8, ptr %t9) ret void } define internal void @finch.drop.S_gen_Options(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.Options, ptr %a, i32 0, i32 3 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.gen.Options, ptr %a, i32 0, i32 4 call void @finch.drop.S_platform_Target(ptr %t2) ret void } define internal void @finch.drop.S_cimport_CFunc(ptr %a) { entry: %t1 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 2 call void @finch.drop.S_ast_Type(ptr %t3) %t4 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 3 call void @finch.drop.arr_S_ast_Type(ptr %t4) %t5 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 5 call void @finch_str_drop(ptr %t5) ret void } define internal void @finch.drop.map_str_S_cimport_CFunc(ptr %a) { entry: %a3 = alloca i64, align 16 %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 br label %n.cond416 n.cond416: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 br i1 %t5, label %n.body417, label %n.end418 n.body417: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 br i1 %t11, label %entry.live419, label %entry.next420 entry.live419: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 2 call void @finch.drop.S_cimport_CFunc(ptr %t13) br label %entry.next420 entry.next420: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 br label %n.cond416 n.end418: call void @finch_map_free(ptr %a) ret void } define internal void @finch.drop.S_cimport_CConst(ptr %a) { entry: %t1 = getelementptr inbounds %S.cimport.CConst, ptr %a, i32 0, i32 3 call void @finch_str_drop(ptr %t1) ret void } define internal void @finch.drop.map_str_S_cimport_CConst(ptr %a) { entry: %a3 = alloca i64, align 16 %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 br label %n.cond421 n.cond421: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 br i1 %t5, label %n.body422, label %n.end423 n.body422: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 br i1 %t11, label %entry.live424, label %entry.next425 entry.live424: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 2 call void @finch.drop.S_cimport_CConst(ptr %t13) br label %entry.next425 entry.next425: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 br label %n.cond421 n.end423: call void @finch_map_free(ptr %a) ret void } define internal void @finch.drop.map_str_S_ast_Type(ptr %a) { entry: %a3 = alloca i64, align 16 %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 br label %n.cond426 n.cond426: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 br i1 %t5, label %n.body427, label %n.end428 n.body427: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 br i1 %t11, label %entry.live429, label %entry.next430 entry.live429: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 2 call void @finch.drop.S_ast_Type(ptr %t13) br label %entry.next430 entry.next430: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 br label %n.cond426 n.end428: call void @finch_map_free(ptr %a) ret void } define internal void @finch.drop.S_cimport_CField(ptr %a) { entry: %t1 = getelementptr inbounds %S.cimport.CField, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.cimport.CField, ptr %a, i32 0, i32 1 call void @finch.drop.S_ast_Type(ptr %t2) ret void } define internal void @finch.drop.arr_S_cimport_CField(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond436 n.cond436: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body437, label %n.end438 n.body437: %t7 = getelementptr inbounds %S.cimport.CField, ptr %t1, i64 %t5 call void @finch.drop.S_cimport_CField(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond436 n.end438: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.S_cimport_CStruct(ptr %a) { entry: %t1 = getelementptr inbounds %S.cimport.CStruct, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.cimport.CStruct, ptr %a, i32 0, i32 1 call void @finch.drop.arr_S_cimport_CField(ptr %t2) %t3 = getelementptr inbounds %S.cimport.CStruct, ptr %a, i32 0, i32 4 call void @finch_str_drop(ptr %t3) ret void } define internal void @finch.drop.map_str_S_cimport_CStruct(ptr %a) { entry: %a3 = alloca i64, align 16 %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 br label %n.cond431 n.cond431: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 br i1 %t5, label %n.body432, label %n.end433 n.body432: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 br i1 %t11, label %entry.live434, label %entry.next435 entry.live434: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 2 call void @finch.drop.S_cimport_CStruct(ptr %t13) br label %entry.next435 entry.next435: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 br label %n.cond431 n.end433: call void @finch_map_free(ptr %a) ret void } define internal void @finch.drop.S_cimport_CImports(ptr %a) { entry: %t1 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 0 call void @finch.drop.map_str_S_cimport_CFunc(ptr %t1) %t2 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 1 call void @finch.drop.map_str_S_cimport_CConst(ptr %t2) %t3 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 2 call void @finch.drop.map_str_S_ast_Type(ptr %t3) %t4 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 3 call void @finch.drop.map_str_S_cimport_CStruct(ptr %t4) %t5 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 4 call void @finch.drop.arr_str(ptr %t5) ret void } define internal void @finch.drop.S_linker_Build(ptr %a) { entry: %t1 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 2 call void @finch_str_drop(ptr %t3) %t4 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 3 call void @finch_str_drop(ptr %t4) %t5 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 4 call void @finch_str_drop(ptr %t5) %t6 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 6 call void @finch.drop.arr_str(ptr %t6) ret void } define internal i64 @finch.main.main({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca i1, align 16 %a105 = alloca i1, align 16 %a106 = alloca i1, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca i64, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca %S.platform.Target, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a384 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a399 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a403 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a410 = alloca { ptr, i64, i64 }, align 16 %a411 = alloca { ptr, i64, i64 }, align 16 %a412 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a417 = alloca { ptr, i64, i64 }, align 16 %a418 = alloca { ptr, i64, i64 }, align 16 %a419 = alloca { ptr, i64, i64 }, align 16 %a420 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a432 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a436 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca { ptr, i64, i64 }, align 16 %a441 = alloca { ptr, i64, i64 }, align 16 %a442 = alloca { ptr, i64, i64 }, align 16 %a444 = alloca { ptr, i64, i64 }, align 16 %a445 = alloca { ptr, i64, i64 }, align 16 %a446 = alloca { ptr, i64, i64 }, align 16 %a447 = alloca { ptr, i64, i64 }, align 16 %a450 = alloca { ptr, i64, i64 }, align 16 %a452 = alloca { ptr, i64, i64 }, align 16 %a453 = alloca { ptr, i64, i64 }, align 16 %a454 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a458 = alloca { ptr, i64, i64 }, align 16 %a459 = alloca { ptr, i64, i64 }, align 16 %a462 = alloca { ptr, i64, i64 }, align 16 %a468 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a470 = alloca { ptr, i64, i64 }, align 16 %a473 = alloca { ptr, i64, i64 }, align 16 %a474 = alloca %S.main.Loader, align 16 %a477 = alloca { ptr, i64, i64 }, align 16 %a482 = alloca { ptr, i64, i64 }, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a495 = alloca { ptr, i64, i64 }, align 16 %a496 = alloca { ptr, i64, i64 }, align 16 %a497 = alloca { ptr, i64, i64 }, align 16 %a498 = alloca { ptr, i64, i64 }, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a508 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca { ptr, i64, i64 }, align 16 %a519 = alloca { ptr, i64, i64 }, align 16 %a520 = alloca { ptr, i64, i64 }, align 16 %a521 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca { ptr, i64, i64 }, align 16 %a533 = alloca { ptr, i64, i64 }, align 16 %a534 = alloca i64, align 16 %a542 = alloca { ptr, i64, i64 }, align 16 %a548 = alloca { ptr, i64, i64 }, align 16 %a549 = alloca { ptr, i64, i64 }, align 16 %a550 = alloca { ptr, i64, i64 }, align 16 %a552 = alloca { ptr, i64, i64 }, align 16 %a554 = alloca { ptr, i64, i64 }, align 16 %a559 = alloca { ptr, i64, i64 }, align 16 %a560 = alloca { ptr, i64, i64 }, align 16 %a563 = alloca { ptr, i64, i64 }, align 16 %a571 = alloca { ptr, i64, i64 }, align 16 %a572 = alloca { ptr, i64, i64 }, align 16 %a573 = alloca { ptr, i64, i64 }, align 16 %a574 = alloca { ptr, i64, i64 }, align 16 %a578 = alloca { ptr, i64, i64 }, align 16 %a581 = alloca { ptr, i64, i64 }, align 16 %a582 = alloca { ptr, i64, i64 }, align 16 %a585 = alloca { ptr, i64, i64 }, align 16 %a588 = alloca { ptr, i64, i64 }, align 16 %a589 = alloca { ptr, i64, i64 }, align 16 %a592 = alloca { ptr, i64, i64 }, align 16 %a597 = alloca { ptr, i64, i64 }, align 16 %a599 = alloca { ptr, i64, i64 }, align 16 %a600 = alloca { ptr, i64, i64 }, align 16 %a602 = alloca { ptr, i64, i64 }, align 16 %a603 = alloca { ptr, i64, i64 }, align 16 %a604 = alloca { ptr, i64, i64 }, align 16 %a606 = alloca { ptr, i64, i64 }, align 16 %a607 = alloca i64, align 16 %a615 = alloca { ptr, i64, i64 }, align 16 %a622 = alloca { ptr, i64, i64 }, align 16 %a623 = alloca { ptr, i64, i64 }, align 16 %a632 = alloca { ptr, i64, i64 }, align 16 %a633 = alloca { ptr, i64, i64 }, align 16 %a635 = alloca { ptr, i64, i64 }, align 16 %a636 = alloca { ptr, i64, i64 }, align 16 %a638 = alloca { ptr, i64, i64 }, align 16 %a640 = alloca { ptr, i64, i64 }, align 16 %a641 = alloca { ptr, i64, i64 }, align 16 %a643 = alloca { ptr, i64, i64 }, align 16 %a645 = alloca i64, align 16 %a653 = alloca %S.ast.Program, align 16 %a657 = alloca { ptr, i64, i64 }, align 16 %a660 = alloca i64, align 16 %a663 = alloca i64, align 16 %a668 = alloca { ptr, i64, i64 }, align 16 %a669 = alloca { ptr, i64, i64 }, align 16 %a678 = alloca { ptr, i64, i64 }, align 16 %a679 = alloca { ptr, i64, i64 }, align 16 %a688 = alloca i64, align 16 %a700 = alloca i64, align 16 %a703 = alloca i64, align 16 %a708 = alloca { ptr, i64, i64 }, align 16 %a709 = alloca { ptr, i64, i64 }, align 16 %a725 = alloca { ptr, i64, i64 }, align 16 %a726 = alloca { ptr, i64, i64 }, align 16 %a741 = alloca { ptr, i64, i64 }, align 16 %a742 = alloca { ptr, i64, i64 }, align 16 %a753 = alloca { ptr, i64, i64 }, align 16 %a754 = alloca { ptr, i64, i64 }, align 16 %a764 = alloca i64, align 16 %a772 = alloca { ptr, i64, i64 }, align 16 %a774 = alloca { ptr, i64, i64 }, align 16 %a775 = alloca { ptr, i64, i64 }, align 16 %a776 = alloca { ptr, i64, i64 }, align 16 %a780 = alloca { ptr, i64, i64 }, align 16 %a781 = alloca { ptr, i64, i64 }, align 16 %a782 = alloca { ptr, i64, i64 }, align 16 %a787 = alloca { ptr, i64, i64 }, align 16 %a788 = alloca { ptr, i64, i64 }, align 16 %a789 = alloca { ptr, i64, i64 }, align 16 %a795 = alloca { ptr, i64, i64 }, align 16 %a796 = alloca { ptr, i64, i64 }, align 16 %a797 = alloca { ptr, i64, i64 }, align 16 %a800 = alloca { ptr, i64, i64 }, align 16 %a801 = alloca { ptr, i64, i64 }, align 16 %a802 = alloca { ptr, i64, i64 }, align 16 %a803 = alloca { ptr, i64, i64 }, align 16 %a811 = alloca { ptr, i64, i64 }, align 16 %a812 = alloca { ptr, i64, i64 }, align 16 %a822 = alloca { ptr, i64, i64 }, align 16 %a830 = alloca { ptr, i64, i64 }, align 16 %a831 = alloca { ptr, i64, i64 }, align 16 %a834 = alloca { ptr, i64, i64 }, align 16 %a847 = alloca { ptr, i64, i64 }, align 16 %a856 = alloca %S.cimport.CImports, align 16 %a865 = alloca { ptr, i64, i64 }, align 16 %a866 = alloca { ptr, i64, i64 }, align 16 %a875 = alloca %S.platform.Target, align 16 %a876 = alloca %S.platform.Target, align 16 %a880 = alloca %S.gen.Options, align 16 %a881 = alloca { ptr, i64, i64 }, align 16 %a883 = alloca { ptr, i64, i64 }, align 16 %a884 = alloca { ptr, i64, i64 }, align 16 %a888 = alloca { ptr, i64, i64 }, align 16 %a889 = alloca { ptr, i64, i64 }, align 16 %a905 = alloca { ptr, i64, i64 }, align 16 %a907 = alloca { ptr, i64, i64 }, align 16 %a908 = alloca { ptr, i64, i64 }, align 16 %a910 = alloca { ptr, i64, i64 }, align 16 %a921 = alloca { ptr, i64, i64 }, align 16 %a922 = alloca { ptr, i64, i64 }, align 16 %a923 = alloca { ptr, i64, i64 }, align 16 %a924 = alloca { ptr, i64, i64 }, align 16 %a927 = alloca { ptr, i64, i64 }, align 16 %a929 = alloca { ptr, i64, i64 }, align 16 %a940 = alloca { ptr, i64, i64 }, align 16 %a941 = alloca { ptr, i64, i64 }, align 16 %a942 = alloca { ptr, i64, i64 }, align 16 %a943 = alloca { ptr, i64, i64 }, align 16 %a946 = alloca { ptr, i64, i64 }, align 16 %a948 = alloca { ptr, i64, i64 }, align 16 %a959 = alloca { ptr, i64, i64 }, align 16 %a960 = alloca { ptr, i64, i64 }, align 16 %a961 = alloca { ptr, i64, i64 }, align 16 %a962 = alloca { ptr, i64, i64 }, align 16 %a965 = alloca { ptr, i64, i64 }, align 16 %a967 = alloca { ptr, i64, i64 }, align 16 %a971 = alloca { ptr, i64, i64 }, align 16 %a976 = alloca { ptr, i64, i64 }, align 16 %a978 = alloca { ptr, i64, i64 }, align 16 %a983 = alloca { ptr, i64, i64 }, align 16 %a984 = alloca { ptr, i64, i64 }, align 16 %a985 = alloca { ptr, i64, i64 }, align 16 %a986 = alloca { ptr, i64, i64 }, align 16 %a989 = alloca { ptr, i64, i64 }, align 16 %a990 = alloca { ptr, i64, i64 }, align 16 %a993 = alloca { ptr, i64, i64 }, align 16 %a996 = alloca { ptr, i64, i64 }, align 16 %a997 = alloca { ptr, i64, i64 }, align 16 %a998 = alloca { ptr, i64, i64 }, align 16 %a1001 = alloca { ptr, i64, i64 }, align 16 %a1003 = alloca { ptr, i64, i64 }, align 16 %a1004 = alloca { ptr, i64, i64 }, align 16 %a1008 = alloca { ptr, i64, i64 }, align 16 %a1009 = alloca { ptr, i64, i64 }, align 16 %a1013 = alloca { ptr, i64, i64 }, align 16 %a1014 = alloca { ptr, i64, i64 }, align 16 %a1018 = alloca { ptr, i64, i64 }, align 16 %a1019 = alloca { ptr, i64, i64 }, align 16 %a1023 = alloca { ptr, i64, i64 }, align 16 %a1024 = alloca { ptr, i64, i64 }, align 16 %a1030 = alloca { ptr, i64, i64 }, align 16 %a1031 = alloca { ptr, i64, i64 }, align 16 %a1037 = alloca %S.linker.Build, align 16 %a1040 = alloca { ptr, i64, i64 }, align 16 %a1041 = alloca { ptr, i64, i64 }, align 16 %a1044 = alloca { ptr, i64, i64 }, align 16 %a1045 = alloca i64, align 16 %a1053 = alloca { ptr, i64, i64 }, align 16 %a1067 = alloca { ptr, i64, i64 }, align 16 %a1068 = alloca { ptr, i64, i64 }, align 16 %a1069 = alloca { ptr, i64, i64 }, align 16 %a1070 = alloca { ptr, i64, i64 }, align 16 %a1072 = alloca { ptr, i64, i64 }, align 16 %a1073 = alloca { ptr, i64, i64 }, align 16 %a1074 = alloca { ptr, i64, i64 }, align 16 %a1075 = alloca { ptr, i64, i64 }, align 16 %a1078 = alloca { ptr, i64, i64 }, align 16 %a1079 = alloca { ptr, i64, i64 }, align 16 %a1081 = alloca { ptr, i64, i64 }, align 16 %a1082 = alloca { ptr, i64, i64 }, align 16 %a1083 = alloca { ptr, i64, i64 }, align 16 %a1084 = alloca { ptr, i64, i64 }, align 16 %a1085 = alloca { ptr, i64, i64 }, align 16 %a1088 = alloca { ptr, i64, i64 }, align 16 %a1089 = alloca i64, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t3 = load i64, ptr %t2 %t4 = icmp eq i64 %t3, 2 br label %logic.from159 logic.from159: br i1 %t4, label %logic.rhs160, label %logic.end161 logic.rhs160: %t5 = load { ptr, i64, i64 }, ptr %a1 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 1, %t6 br i1 %t7, label %range162, label %inrange163 range162: call void @finch_panic_index(ptr @.str.155, i64 152, i64 1, i64 %t6) unreachable inrange163: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 1 %t10 = load { ptr, i64, i64 }, ptr %t9 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.156, i64 7, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp ne i32 %t13, 0 br label %logic.from164 logic.from164: br i1 %t14, label %logic.end166, label %logic.rhs165 logic.rhs165: %t15 = load { ptr, i64, i64 }, ptr %a1 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 1, %t16 br i1 %t17, label %range167, label %inrange168 range167: call void @finch_panic_index(ptr @.str.157, i64 152, i64 1, i64 %t16) unreachable inrange168: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 1 %t20 = load { ptr, i64, i64 }, ptr %t19 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.158, i64 9, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) %t24 = icmp ne i32 %t23, 0 br label %logic.rend169 logic.rend169: br label %logic.end166 logic.end166: %t25 = phi i1 [ true, %logic.from164 ], [ %t24, %logic.rend169 ] br label %logic.rend170 logic.rend170: br label %logic.end161 logic.end161: %t26 = phi i1 [ false, %logic.from159 ], [ %t25, %logic.rend170 ] br i1 %t26, label %then171, label %endif173 then171: %t27 = extractvalue { ptr, i64, i64 } { ptr @.str.159, i64 46, i64 0 }, 1 %t28 = trunc i64 %t27 to i32 %t29 = extractvalue { ptr, i64, i64 } { ptr @.str.159, i64 46, i64 0 }, 0 %t30 = icmp eq ptr %t29, null %t31 = select i1 %t30, ptr @.str.160, ptr %t29 %t32 = call i32 (ptr, ...) @printf(ptr @.str.161, i32 %t28, ptr %t31) %t33 = call i32 (ptr, ...) @printf(ptr @.str.162) ret i64 0 endif173: %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t35 = load i64, ptr %t34 %t36 = icmp eq i64 %t35, 2 br label %logic.from174 logic.from174: br i1 %t36, label %logic.rhs175, label %logic.end176 logic.rhs175: %t37 = load { ptr, i64, i64 }, ptr %a1 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 1, %t38 br i1 %t39, label %range177, label %inrange178 range177: call void @finch_panic_index(ptr @.str.163, i64 156, i64 1, i64 %t38) unreachable inrange178: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 1 %t42 = load { ptr, i64, i64 }, ptr %t41 store { ptr, i64, i64 } %t42, ptr %a43 store { ptr, i64, i64 } { ptr @.str.164, i64 3, i64 0 }, ptr %a44 %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) %t46 = icmp ne i32 %t45, 0 br label %logic.rend179 logic.rend179: br label %logic.end176 logic.end176: %t47 = phi i1 [ false, %logic.from174 ], [ %t46, %logic.rend179 ] br i1 %t47, label %then180, label %endif182 then180: %t48 = load { ptr, i64, i64 }, ptr %a1 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 0, %t49 br i1 %t50, label %range183, label %inrange184 range183: call void @finch_panic_index(ptr @.str.165, i64 157, i64 0, i64 %t49) unreachable inrange184: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t51, i64 0 %t53 = load { ptr, i64, i64 }, ptr %t52 %t54 = call i64 @finch.lsp.run({ ptr, i64, i64 } %t53) ret i64 %t54 endif182: %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t56 = load i64, ptr %t55 %t57 = icmp slt i64 %t56, 3 br i1 %t57, label %then185, label %endif187 then185: call void @finch.main.usage() br label %endif187 endif187: %t58 = load { ptr, i64, i64 }, ptr %a1 %t59 = extractvalue { ptr, i64, i64 } %t58, 1 %t60 = icmp uge i64 1, %t59 br i1 %t60, label %range188, label %inrange189 range188: call void @finch_panic_index(ptr @.str.166, i64 162, i64 1, i64 %t59) unreachable inrange189: %t61 = extractvalue { ptr, i64, i64 } %t58, 0 %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t61, i64 1 %t63 = load { ptr, i64, i64 }, ptr %t62 store { ptr, i64, i64 } %t63, ptr %a64 call void @finch_str_copy(ptr %a65, ptr %a64) %t66 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } %t66, ptr %a67 %t68 = load { ptr, i64, i64 }, ptr %a1 %t69 = extractvalue { ptr, i64, i64 } %t68, 1 %t70 = icmp uge i64 2, %t69 br i1 %t70, label %range190, label %inrange191 range190: call void @finch_panic_index(ptr @.str.167, i64 163, i64 2, i64 %t69) unreachable inrange191: %t71 = extractvalue { ptr, i64, i64 } %t68, 0 %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i64 2 %t73 = load { ptr, i64, i64 }, ptr %t72 store { ptr, i64, i64 } %t73, ptr %a74 call void @finch_str_copy(ptr %a75, ptr %a74) %t76 = load { ptr, i64, i64 }, ptr %a75 store { ptr, i64, i64 } %t76, ptr %a77 %t78 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t78, ptr %a79 store { ptr, i64, i64 } { ptr @.str.168, i64 5, i64 0 }, ptr %a80 %t81 = call i32 @finch_str_eq(ptr %a79, ptr %a80) %t82 = icmp eq i32 %t81, 0 br label %logic.from192 logic.from192: br i1 %t82, label %logic.rhs193, label %logic.end194 logic.rhs193: %t83 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t83, ptr %a84 store { ptr, i64, i64 } { ptr @.str.169, i64 3, i64 0 }, ptr %a85 %t86 = call i32 @finch_str_eq(ptr %a84, ptr %a85) %t87 = icmp eq i32 %t86, 0 br label %logic.rend195 logic.rend195: br label %logic.end194 logic.end194: %t88 = phi i1 [ false, %logic.from192 ], [ %t87, %logic.rend195 ] br label %logic.from196 logic.from196: br i1 %t88, label %logic.rhs197, label %logic.end198 logic.rhs197: %t89 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t89, ptr %a90 store { ptr, i64, i64 } { ptr @.str.170, i64 2, i64 0 }, ptr %a91 %t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91) %t93 = icmp eq i32 %t92, 0 br label %logic.rend199 logic.rend199: br label %logic.end198 logic.end198: %t94 = phi i1 [ false, %logic.from196 ], [ %t93, %logic.rend199 ] br label %logic.from200 logic.from200: br i1 %t94, label %logic.rhs201, label %logic.end202 logic.rhs201: %t95 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t95, ptr %a96 store { ptr, i64, i64 } { ptr @.str.171, i64 5, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) %t99 = icmp eq i32 %t98, 0 br label %logic.rend203 logic.rend203: br label %logic.end202 logic.end202: %t100 = phi i1 [ false, %logic.from200 ], [ %t99, %logic.rend203 ] br i1 %t100, label %then204, label %endif206 then204: call void @finch.main.usage() br label %endif206 endif206: %t101 = load { ptr, i64, i64 }, ptr %a77 %t102 = call { ptr, i64, i64 } @finch.main.stem({ ptr, i64, i64 } %t101) store { ptr, i64, i64 } %t102, ptr %a103 store i1 false, ptr %a104 store i1 false, ptr %a105 store i1 false, ptr %a106 store { ptr, i64, i64 } { ptr @.str.172, i64 0, i64 0 }, ptr %a107 store { ptr, i64, i64 } { ptr @.str.173, i64 3, i64 0 }, ptr %a108 store { ptr, i64, i64 } zeroinitializer, ptr %a109 store { ptr, i64, i64 } zeroinitializer, ptr %a110 store { ptr, i64, i64 } zeroinitializer, ptr %a111 store { ptr, i64, i64 } zeroinitializer, ptr %a112 store { ptr, i64, i64 } zeroinitializer, ptr %a113 store i64 3, ptr %a114 br label %while.cond207 while.cond207: %t115 = load i64, ptr %a114 %t116 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t117 = load i64, ptr %t116 %t118 = icmp slt i64 %t115, %t117 br i1 %t118, label %while.body208, label %while.end209 while.body208: %t119 = load i64, ptr %a114 %t120 = load { ptr, i64, i64 }, ptr %a1 %t121 = extractvalue { ptr, i64, i64 } %t120, 1 %t122 = icmp uge i64 %t119, %t121 br i1 %t122, label %range210, label %inrange211 range210: call void @finch_panic_index(ptr @.str.174, i64 180, i64 %t119, i64 %t121) unreachable inrange211: %t123 = extractvalue { ptr, i64, i64 } %t120, 0 %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i64 %t119 %t125 = load { ptr, i64, i64 }, ptr %t124 store { ptr, i64, i64 } %t125, ptr %a126 call void @finch_str_copy(ptr %a127, ptr %a126) %t128 = load { ptr, i64, i64 }, ptr %a127 store { ptr, i64, i64 } %t128, ptr %a129 %t130 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t130, ptr %a131 store { ptr, i64, i64 } { ptr @.str.175, i64 3, i64 0 }, ptr %a132 %t133 = call i32 @finch_str_eq(ptr %a131, ptr %a132) %t134 = icmp ne i32 %t133, 0 br label %logic.from212 logic.from212: br i1 %t134, label %logic.rhs213, label %logic.end214 logic.rhs213: %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 %t136 = load i64, ptr %t135 %t137 = icmp sgt i64 %t136, 0 br label %logic.rend215 logic.rend215: br label %logic.end214 logic.end214: %t138 = phi i1 [ false, %logic.from212 ], [ %t137, %logic.rend215 ] br i1 %t138, label %then216, label %else217 then216: %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 %t140 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t140, ptr %a141 call void @finch_str_copy(ptr %a142, ptr %a141) %t143 = load { ptr, i64, i64 }, ptr %a142 %t144 = load i64, ptr %t139 %t145 = add i64 %t144, 1 call void @finch_arr_reserve(ptr %a113, i64 %t145, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t146 = load ptr, ptr %a113 %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i64 %t144 store { ptr, i64, i64 } %t143, ptr %t147 store i64 %t145, ptr %t139 br label %endif218 else217: %t148 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t148, ptr %a149 store { ptr, i64, i64 } { ptr @.str.176, i64 2, i64 0 }, ptr %a150 %t151 = call i32 @finch_str_eq(ptr %a149, ptr %a150) %t152 = icmp ne i32 %t151, 0 br label %logic.from219 logic.from219: br i1 %t152, label %logic.rhs220, label %logic.end221 logic.rhs220: %t153 = load i64, ptr %a114 %t154 = add i64 %t153, 1 %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t156 = load i64, ptr %t155 %t157 = icmp slt i64 %t154, %t156 br label %logic.rend222 logic.rend222: br label %logic.end221 logic.end221: %t158 = phi i1 [ false, %logic.from219 ], [ %t157, %logic.rend222 ] br label %logic.from223 logic.from223: br i1 %t158, label %logic.rhs224, label %logic.end225 logic.rhs224: %t159 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t159, ptr %a160 store { ptr, i64, i64 } { ptr @.str.177, i64 5, i64 0 }, ptr %a161 %t162 = call i32 @finch_str_eq(ptr %a160, ptr %a161) %t163 = icmp ne i32 %t162, 0 br label %logic.rend226 logic.rend226: br label %logic.end225 logic.end225: %t164 = phi i1 [ false, %logic.from223 ], [ %t163, %logic.rend226 ] br i1 %t164, label %then227, label %else228 then227: %t165 = load i64, ptr %a114 %t166 = add i64 %t165, 1 %t167 = load { ptr, i64, i64 }, ptr %a1 %t168 = extractvalue { ptr, i64, i64 } %t167, 1 %t169 = icmp uge i64 %t166, %t168 br i1 %t169, label %range230, label %inrange231 range230: call void @finch_panic_index(ptr @.str.178, i64 184, i64 %t166, i64 %t168) unreachable inrange231: %t170 = extractvalue { ptr, i64, i64 } %t167, 0 %t171 = getelementptr inbounds { ptr, i64, i64 }, ptr %t170, i64 %t166 %t172 = load { ptr, i64, i64 }, ptr %t171 store { ptr, i64, i64 } %t172, ptr %a173 call void @finch_str_copy(ptr %a174, ptr %a173) %t175 = load { ptr, i64, i64 }, ptr %a174 %t176 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t175, ptr %a103 store { ptr, i64, i64 } %t176, ptr %a177 call void @finch_str_drop(ptr %a177) store i1 true, ptr %a104 %t178 = load i64, ptr %a114 %t179 = add i64 %t178, 1 store i64 %t179, ptr %a114 br label %endif229 else228: %t180 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t180, ptr %a181 store { ptr, i64, i64 } { ptr @.str.179, i64 8, i64 0 }, ptr %a182 %t183 = call i32 @finch_str_eq(ptr %a181, ptr %a182) %t184 = icmp ne i32 %t183, 0 br label %logic.from232 logic.from232: br i1 %t184, label %logic.rhs233, label %logic.end234 logic.rhs233: %t185 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t185, ptr %a186 store { ptr, i64, i64 } { ptr @.str.180, i64 5, i64 0 }, ptr %a187 %t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187) %t189 = icmp ne i32 %t188, 0 br label %logic.rend235 logic.rend235: br label %logic.end234 logic.end234: %t190 = phi i1 [ false, %logic.from232 ], [ %t189, %logic.rend235 ] br i1 %t190, label %then236, label %else237 then236: store i1 true, ptr %a105 br label %endif238 else237: %t191 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t191, ptr %a192 store { ptr, i64, i64 } { ptr @.str.181, i64 3, i64 0 }, ptr %a193 %t194 = call i32 @finch_str_eq(ptr %a192, ptr %a193) %t195 = icmp ne i32 %t194, 0 br i1 %t195, label %then239, label %else240 then239: %t196 = load { ptr, i64, i64 }, ptr %a108 store { ptr, i64, i64 } { ptr @.str.182, i64 3, i64 0 }, ptr %a108 store { ptr, i64, i64 } %t196, ptr %a197 call void @finch_str_drop(ptr %a197) br label %endif241 else240: %t198 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t198, ptr %a199 store { ptr, i64, i64 } { ptr @.str.183, i64 2, i64 0 }, ptr %a200 %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) %t202 = icmp ne i32 %t201, 0 br label %logic.from242 logic.from242: br i1 %t202, label %logic.rhs243, label %logic.end244 logic.rhs243: %t203 = load i64, ptr %a114 %t204 = add i64 %t203, 1 %t205 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t206 = load i64, ptr %t205 %t207 = icmp slt i64 %t204, %t206 br label %logic.rend245 logic.rend245: br label %logic.end244 logic.end244: %t208 = phi i1 [ false, %logic.from242 ], [ %t207, %logic.rend245 ] br i1 %t208, label %then246, label %else247 then246: %t209 = getelementptr inbounds { ptr, i64, i64 }, ptr %a109, i32 0, i32 1 %t210 = load i64, ptr %a114 %t211 = add i64 %t210, 1 %t212 = load { ptr, i64, i64 }, ptr %a1 %t213 = extractvalue { ptr, i64, i64 } %t212, 1 %t214 = icmp uge i64 %t211, %t213 br i1 %t214, label %range249, label %inrange250 range249: call void @finch_panic_index(ptr @.str.184, i64 192, i64 %t211, i64 %t213) unreachable inrange250: %t215 = extractvalue { ptr, i64, i64 } %t212, 0 %t216 = getelementptr inbounds { ptr, i64, i64 }, ptr %t215, i64 %t211 %t217 = load { ptr, i64, i64 }, ptr %t216 store { ptr, i64, i64 } %t217, ptr %a218 call void @finch_str_copy(ptr %a219, ptr %a218) %t220 = load { ptr, i64, i64 }, ptr %a219 %t221 = load i64, ptr %t209 %t222 = add i64 %t221, 1 call void @finch_arr_reserve(ptr %a109, i64 %t222, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t223 = load ptr, ptr %a109 %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i64 %t221 store { ptr, i64, i64 } %t220, ptr %t224 store i64 %t222, ptr %t209 %t225 = load i64, ptr %a114 %t226 = add i64 %t225, 1 store i64 %t226, ptr %a114 br label %endif248 else247: %t227 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t227, ptr %a228 store { ptr, i64, i64 } { ptr @.str.186, i64 2, i64 0 }, ptr %a230 %t231 = call i32 @finch_str_starts(ptr %a228, ptr %a230) %t232 = icmp ne i32 %t231, 0 br label %logic.from251 logic.from251: br i1 %t232, label %logic.rhs252, label %logic.end253 logic.rhs252: %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t234 = load i64, ptr %t233 %t235 = icmp sgt i64 %t234, 2 br label %logic.rend254 logic.rend254: br label %logic.end253 logic.end253: %t236 = phi i1 [ false, %logic.from251 ], [ %t235, %logic.rend254 ] br i1 %t236, label %then255, label %else256 then255: %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %a109, i32 0, i32 1 %t238 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t238, ptr %a239 %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t242 = load i64, ptr %t241 call void @finch_str_sub(ptr %a240, ptr %a239, i64 2, i64 %t242, ptr @.str.187, i64 195) %t243 = load { ptr, i64, i64 }, ptr %a240 %t244 = load i64, ptr %t237 %t245 = add i64 %t244, 1 call void @finch_arr_reserve(ptr %a109, i64 %t245, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t246 = load ptr, ptr %a109 %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i64 %t244 store { ptr, i64, i64 } %t243, ptr %t247 store i64 %t245, ptr %t237 br label %endif257 else256: %t248 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t248, ptr %a249 store { ptr, i64, i64 } { ptr @.str.188, i64 2, i64 0 }, ptr %a250 %t251 = call i32 @finch_str_eq(ptr %a249, ptr %a250) %t252 = icmp ne i32 %t251, 0 br label %logic.from258 logic.from258: br i1 %t252, label %logic.rhs259, label %logic.end260 logic.rhs259: %t253 = load i64, ptr %a114 %t254 = add i64 %t253, 1 %t255 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t256 = load i64, ptr %t255 %t257 = icmp slt i64 %t254, %t256 br label %logic.rend261 logic.rend261: br label %logic.end260 logic.end260: %t258 = phi i1 [ false, %logic.from258 ], [ %t257, %logic.rend261 ] br i1 %t258, label %then262, label %else263 then262: %t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %a110, i32 0, i32 1 %t260 = load i64, ptr %a114 %t261 = add i64 %t260, 1 %t262 = load { ptr, i64, i64 }, ptr %a1 %t263 = extractvalue { ptr, i64, i64 } %t262, 1 %t264 = icmp uge i64 %t261, %t263 br i1 %t264, label %range265, label %inrange266 range265: call void @finch_panic_index(ptr @.str.189, i64 197, i64 %t261, i64 %t263) unreachable inrange266: %t265 = extractvalue { ptr, i64, i64 } %t262, 0 %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i64 %t261 %t267 = load { ptr, i64, i64 }, ptr %t266 store { ptr, i64, i64 } %t267, ptr %a268 call void @finch_str_copy(ptr %a269, ptr %a268) %t270 = load { ptr, i64, i64 }, ptr %a269 %t271 = load i64, ptr %t259 %t272 = add i64 %t271, 1 call void @finch_arr_reserve(ptr %a110, i64 %t272, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t273 = load ptr, ptr %a110 %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 %t271 store { ptr, i64, i64 } %t270, ptr %t274 store i64 %t272, ptr %t259 %t275 = load i64, ptr %a114 %t276 = add i64 %t275, 1 store i64 %t276, ptr %a114 br label %endif264 else263: %t277 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t277, ptr %a278 store { ptr, i64, i64 } { ptr @.str.190, i64 9, i64 0 }, ptr %a279 %t280 = call i32 @finch_str_eq(ptr %a278, ptr %a279) %t281 = icmp ne i32 %t280, 0 br label %logic.from267 logic.from267: br i1 %t281, label %logic.rhs268, label %logic.end269 logic.rhs268: %t282 = load i64, ptr %a114 %t283 = add i64 %t282, 1 %t284 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t285 = load i64, ptr %t284 %t286 = icmp slt i64 %t283, %t285 br label %logic.rend270 logic.rend270: br label %logic.end269 logic.end269: %t287 = phi i1 [ false, %logic.from267 ], [ %t286, %logic.rend270 ] br i1 %t287, label %then271, label %else272 then271: %t288 = load i64, ptr %a114 %t289 = add i64 %t288, 1 %t290 = load { ptr, i64, i64 }, ptr %a1 %t291 = extractvalue { ptr, i64, i64 } %t290, 1 %t292 = icmp uge i64 %t289, %t291 br i1 %t292, label %range274, label %inrange275 range274: call void @finch_panic_index(ptr @.str.191, i64 200, i64 %t289, i64 %t291) unreachable inrange275: %t293 = extractvalue { ptr, i64, i64 } %t290, 0 %t294 = getelementptr inbounds { ptr, i64, i64 }, ptr %t293, i64 %t289 %t295 = load { ptr, i64, i64 }, ptr %t294 store { ptr, i64, i64 } %t295, ptr %a296 store { ptr, i64, i64 } { ptr @.str.193, i64 1, i64 0 }, ptr %a298 call void @finch_str_split(ptr %a299, ptr %a296, ptr %a298) %t300 = load { ptr, i64, i64 }, ptr %a299 store { ptr, i64, i64 } %t300, ptr %a301 %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %a111, i32 0, i32 1 %t303 = load { ptr, i64, i64 }, ptr %a301 %t304 = extractvalue { ptr, i64, i64 } %t303, 1 %t305 = icmp uge i64 0, %t304 br i1 %t305, label %range276, label %inrange277 range276: call void @finch_panic_index(ptr @.str.194, i64 201, i64 0, i64 %t304) unreachable inrange277: %t306 = extractvalue { ptr, i64, i64 } %t303, 0 %t307 = getelementptr inbounds { ptr, i64, i64 }, ptr %t306, i64 0 %t308 = load { ptr, i64, i64 }, ptr %t307 store { ptr, i64, i64 } %t308, ptr %a309 call void @finch_str_copy(ptr %a310, ptr %a309) %t311 = load { ptr, i64, i64 }, ptr %a310 %t312 = load i64, ptr %t302 %t313 = add i64 %t312, 1 call void @finch_arr_reserve(ptr %a111, i64 %t313, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t314 = load ptr, ptr %a111 %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 %t312 store { ptr, i64, i64 } %t311, ptr %t315 store i64 %t313, ptr %t302 %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %a112, i32 0, i32 1 %t317 = load { ptr, i64, i64 }, ptr %a301 %t318 = extractvalue { ptr, i64, i64 } %t317, 1 %t319 = icmp uge i64 1, %t318 br i1 %t319, label %range278, label %inrange279 range278: call void @finch_panic_index(ptr @.str.195, i64 202, i64 1, i64 %t318) unreachable inrange279: %t320 = extractvalue { ptr, i64, i64 } %t317, 0 %t321 = getelementptr inbounds { ptr, i64, i64 }, ptr %t320, i64 1 %t322 = load { ptr, i64, i64 }, ptr %t321 store { ptr, i64, i64 } %t322, ptr %a323 call void @finch_str_copy(ptr %a324, ptr %a323) %t325 = load { ptr, i64, i64 }, ptr %a324 %t326 = load i64, ptr %t316 %t327 = add i64 %t326, 1 call void @finch_arr_reserve(ptr %a112, i64 %t327, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t328 = load ptr, ptr %a112 %t329 = getelementptr inbounds { ptr, i64, i64 }, ptr %t328, i64 %t326 store { ptr, i64, i64 } %t325, ptr %t329 store i64 %t327, ptr %t316 %t330 = load i64, ptr %a114 %t331 = add i64 %t330, 1 store i64 %t331, ptr %a114 call void @finch.drop.arr_str(ptr %a301) br label %endif273 else272: %t332 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t332, ptr %a333 store { ptr, i64, i64 } { ptr @.str.196, i64 2, i64 0 }, ptr %a334 %t335 = call i32 @finch_str_eq(ptr %a333, ptr %a334) %t336 = icmp ne i32 %t335, 0 br i1 %t336, label %then280, label %else281 then280: store i1 true, ptr %a106 br label %endif282 else281: %t337 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t337, ptr %a338 store { ptr, i64, i64 } { ptr @.str.197, i64 8, i64 0 }, ptr %a339 %t340 = call i32 @finch_str_eq(ptr %a338, ptr %a339) %t341 = icmp ne i32 %t340, 0 br label %logic.from283 logic.from283: br i1 %t341, label %logic.rhs284, label %logic.end285 logic.rhs284: %t342 = load i64, ptr %a114 %t343 = add i64 %t342, 1 %t344 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t345 = load i64, ptr %t344 %t346 = icmp slt i64 %t343, %t345 br label %logic.rend286 logic.rend286: br label %logic.end285 logic.end285: %t347 = phi i1 [ false, %logic.from283 ], [ %t346, %logic.rend286 ] br i1 %t347, label %then287, label %else288 then287: %t348 = load i64, ptr %a114 %t349 = add i64 %t348, 1 %t350 = load { ptr, i64, i64 }, ptr %a1 %t351 = extractvalue { ptr, i64, i64 } %t350, 1 %t352 = icmp uge i64 %t349, %t351 br i1 %t352, label %range290, label %inrange291 range290: call void @finch_panic_index(ptr @.str.198, i64 207, i64 %t349, i64 %t351) unreachable inrange291: %t353 = extractvalue { ptr, i64, i64 } %t350, 0 %t354 = getelementptr inbounds { ptr, i64, i64 }, ptr %t353, i64 %t349 %t355 = load { ptr, i64, i64 }, ptr %t354 store { ptr, i64, i64 } %t355, ptr %a356 call void @finch_str_copy(ptr %a357, ptr %a356) %t358 = load { ptr, i64, i64 }, ptr %a357 %t359 = load { ptr, i64, i64 }, ptr %a107 store { ptr, i64, i64 } %t358, ptr %a107 store { ptr, i64, i64 } %t359, ptr %a360 call void @finch_str_drop(ptr %a360) %t361 = load i64, ptr %a114 %t362 = add i64 %t361, 1 store i64 %t362, ptr %a114 br label %endif289 else288: %t363 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t363, ptr %a364 store { ptr, i64, i64 } { ptr @.str.199, i64 3, i64 0 }, ptr %a365 %t366 = call i32 @finch_str_eq(ptr %a364, ptr %a365) %t367 = icmp ne i32 %t366, 0 br i1 %t367, label %then292, label %else293 then292: %t368 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 %t369 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t369, ptr %a370 call void @finch_str_copy(ptr %a371, ptr %a370) %t372 = load { ptr, i64, i64 }, ptr %a371 %t373 = load i64, ptr %t368 %t374 = add i64 %t373, 1 call void @finch_arr_reserve(ptr %a113, i64 %t374, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t375 = load ptr, ptr %a113 %t376 = getelementptr inbounds { ptr, i64, i64 }, ptr %t375, i64 %t373 store { ptr, i64, i64 } %t372, ptr %t376 store i64 %t374, ptr %t368 br label %endif294 else293: call void @finch.main.usage() br label %endif294 endif294: br label %endif289 endif289: br label %endif282 endif282: br label %endif273 endif273: br label %endif264 endif264: br label %endif257 endif257: br label %endif248 endif248: br label %endif241 endif241: br label %endif238 endif238: br label %endif229 endif229: br label %endif218 endif218: %t377 = load i64, ptr %a114 %t378 = add i64 %t377, 1 store i64 %t378, ptr %a114 call void @finch_str_drop(ptr %a129) br label %while.cond207 while.end209: %t379 = load { ptr, i64, i64 }, ptr %a107 %t380 = call %S.platform.Target @finch.platform.select({ ptr, i64, i64 } %t379) store %S.platform.Target %t380, ptr %a381 %t382 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t382, ptr %a383 store { ptr, i64, i64 } { ptr @.str.200, i64 3, i64 0 }, ptr %a384 %t385 = call i32 @finch_str_eq(ptr %a383, ptr %a384) %t386 = icmp ne i32 %t385, 0 br i1 %t386, label %then295, label %else296 then295: %t387 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t387, ptr %a389 store { ptr, i64, i64 } { ptr @.str.201, i64 11, i64 0 }, ptr %a390 call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390) store { ptr, i64, i64 } %t387, ptr %a391 call void @finch_str_drop(ptr %a391) %t392 = load { ptr, i64, i64 }, ptr %a388 %t393 = call i64 @finch.host.pid() call void @finch_str_from_int(ptr %a394, i64 %t393) %t395 = load { ptr, i64, i64 }, ptr %a394 store { ptr, i64, i64 } %t392, ptr %a397 store { ptr, i64, i64 } %t395, ptr %a398 call void @finch_str_concat(ptr %a396, ptr %a397, ptr %a398) store { ptr, i64, i64 } %t392, ptr %a399 call void @finch_str_drop(ptr %a399) store { ptr, i64, i64 } %t395, ptr %a400 call void @finch_str_drop(ptr %a400) %t401 = load { ptr, i64, i64 }, ptr %a396 store { ptr, i64, i64 } %t401, ptr %a403 store { ptr, i64, i64 } { ptr @.str.202, i64 1, i64 0 }, ptr %a404 call void @finch_str_concat(ptr %a402, ptr %a403, ptr %a404) store { ptr, i64, i64 } %t401, ptr %a405 call void @finch_str_drop(ptr %a405) %t406 = load { ptr, i64, i64 }, ptr %a402 %t407 = load { ptr, i64, i64 }, ptr %a77 %t408 = call { ptr, i64, i64 } @finch.main.stem({ ptr, i64, i64 } %t407) store { ptr, i64, i64 } %t406, ptr %a410 store { ptr, i64, i64 } %t408, ptr %a411 call void @finch_str_concat(ptr %a409, ptr %a410, ptr %a411) store { ptr, i64, i64 } %t406, ptr %a412 call void @finch_str_drop(ptr %a412) store { ptr, i64, i64 } %t408, ptr %a413 call void @finch_str_drop(ptr %a413) %t414 = load { ptr, i64, i64 }, ptr %a409 %t415 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 6 %t416 = load { ptr, i64, i64 }, ptr %t415 store { ptr, i64, i64 } %t414, ptr %a418 store { ptr, i64, i64 } %t416, ptr %a419 call void @finch_str_concat(ptr %a417, ptr %a418, ptr %a419) store { ptr, i64, i64 } %t414, ptr %a420 call void @finch_str_drop(ptr %a420) %t421 = load { ptr, i64, i64 }, ptr %a417 %t422 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t421, ptr %a103 store { ptr, i64, i64 } %t422, ptr %a423 call void @finch_str_drop(ptr %a423) br label %endif297 else296: %t424 = load i1, ptr %a105 br label %logic.from298 logic.from298: br i1 %t424, label %logic.rhs299, label %logic.end300 logic.rhs299: %t425 = load i1, ptr %a104 %t426 = xor i1 %t425, true br label %logic.rend301 logic.rend301: br label %logic.end300 logic.end300: %t427 = phi i1 [ false, %logic.from298 ], [ %t426, %logic.rend301 ] br i1 %t427, label %then302, label %else303 then302: %t428 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 %t429 = load i1, ptr %t428 br i1 %t429, label %then305, label %else306 then305: %t430 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t430, ptr %a432 store { ptr, i64, i64 } { ptr @.str.203, i64 4, i64 0 }, ptr %a433 call void @finch_str_concat(ptr %a431, ptr %a432, ptr %a433) %t434 = load { ptr, i64, i64 }, ptr %a431 %t435 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t434, ptr %a103 store { ptr, i64, i64 } %t435, ptr %a436 call void @finch_str_drop(ptr %a436) br label %endif307 else306: %t437 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 3 %t438 = load i1, ptr %t437 br i1 %t438, label %then308, label %else309 then308: %t439 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } { ptr @.str.204, i64 3, i64 0 }, ptr %a441 store { ptr, i64, i64 } %t439, ptr %a442 call void @finch_str_concat(ptr %a440, ptr %a441, ptr %a442) %t443 = load { ptr, i64, i64 }, ptr %a440 store { ptr, i64, i64 } %t443, ptr %a445 store { ptr, i64, i64 } { ptr @.str.205, i64 6, i64 0 }, ptr %a446 call void @finch_str_concat(ptr %a444, ptr %a445, ptr %a446) store { ptr, i64, i64 } %t443, ptr %a447 call void @finch_str_drop(ptr %a447) %t448 = load { ptr, i64, i64 }, ptr %a444 %t449 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t448, ptr %a103 store { ptr, i64, i64 } %t449, ptr %a450 call void @finch_str_drop(ptr %a450) br label %endif310 else309: %t451 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } { ptr @.str.206, i64 3, i64 0 }, ptr %a453 store { ptr, i64, i64 } %t451, ptr %a454 call void @finch_str_concat(ptr %a452, ptr %a453, ptr %a454) %t455 = load { ptr, i64, i64 }, ptr %a452 store { ptr, i64, i64 } %t455, ptr %a457 store { ptr, i64, i64 } { ptr @.str.207, i64 3, i64 0 }, ptr %a458 call void @finch_str_concat(ptr %a456, ptr %a457, ptr %a458) store { ptr, i64, i64 } %t455, ptr %a459 call void @finch_str_drop(ptr %a459) %t460 = load { ptr, i64, i64 }, ptr %a456 %t461 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t460, ptr %a103 store { ptr, i64, i64 } %t461, ptr %a462 call void @finch_str_drop(ptr %a462) br label %endif310 endif310: br label %endif307 endif307: br label %endif304 else303: %t463 = load i1, ptr %a104 %t464 = xor i1 %t463, true br i1 %t464, label %then311, label %endif313 then311: %t465 = load { ptr, i64, i64 }, ptr %a103 %t466 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 6 %t467 = load { ptr, i64, i64 }, ptr %t466 store { ptr, i64, i64 } %t465, ptr %a469 store { ptr, i64, i64 } %t467, ptr %a470 call void @finch_str_concat(ptr %a468, ptr %a469, ptr %a470) %t471 = load { ptr, i64, i64 }, ptr %a468 %t472 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t471, ptr %a103 store { ptr, i64, i64 } %t472, ptr %a473 call void @finch_str_drop(ptr %a473) br label %endif313 endif313: br label %endif304 endif304: br label %endif297 endif297: store %S.main.Loader zeroinitializer, ptr %a474 %t475 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 3 %t476 = load { ptr, i64, i64 }, ptr %t475 store { ptr, i64, i64 } { ptr @.str.208, i64 5, i64 0 }, ptr %t475 store { ptr, i64, i64 } %t476, ptr %a477 call void @finch_str_drop(ptr %a477) %t478 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 %t479 = load i1, ptr %t478 br i1 %t479, label %then314, label %else315 then314: %t480 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 3 %t481 = load { ptr, i64, i64 }, ptr %t480 store { ptr, i64, i64 } { ptr @.str.209, i64 7, i64 0 }, ptr %t480 store { ptr, i64, i64 } %t481, ptr %a482 call void @finch_str_drop(ptr %a482) br label %endif316 else315: %t483 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 3 %t484 = load i1, ptr %t483 br i1 %t484, label %then317, label %endif319 then317: %t485 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 3 %t486 = load { ptr, i64, i64 }, ptr %t485 store { ptr, i64, i64 } { ptr @.str.210, i64 5, i64 0 }, ptr %t485 store { ptr, i64, i64 } %t486, ptr %a487 call void @finch_str_drop(ptr %a487) br label %endif319 endif319: br label %endif316 endif316: %t488 = load { ptr, i64, i64 }, ptr %a1 %t489 = extractvalue { ptr, i64, i64 } %t488, 1 %t490 = icmp uge i64 0, %t489 br i1 %t490, label %range320, label %inrange321 range320: call void @finch_panic_index(ptr @.str.211, i64 238, i64 0, i64 %t489) unreachable inrange321: %t491 = extractvalue { ptr, i64, i64 } %t488, 0 %t492 = getelementptr inbounds { ptr, i64, i64 }, ptr %t491, i64 0 %t493 = load { ptr, i64, i64 }, ptr %t492 %t494 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t493) store { ptr, i64, i64 } %t494, ptr %a496 store { ptr, i64, i64 } { ptr @.str.212, i64 7, i64 0 }, ptr %a497 call void @finch_str_concat(ptr %a495, ptr %a496, ptr %a497) store { ptr, i64, i64 } %t494, ptr %a498 call void @finch_str_drop(ptr %a498) %t499 = load { ptr, i64, i64 }, ptr %a495 %t500 = load { ptr, i64, i64 }, ptr %a1 %t501 = extractvalue { ptr, i64, i64 } %t500, 1 %t502 = icmp uge i64 0, %t501 br i1 %t502, label %range322, label %inrange323 range322: call void @finch_panic_index(ptr @.str.213, i64 238, i64 0, i64 %t501) unreachable inrange323: %t503 = extractvalue { ptr, i64, i64 } %t500, 0 %t504 = getelementptr inbounds { ptr, i64, i64 }, ptr %t503, i64 0 %t505 = load { ptr, i64, i64 }, ptr %t504 %t506 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t505) store { ptr, i64, i64 } %t506, ptr %a508 store { ptr, i64, i64 } { ptr @.str.214, i64 4, i64 0 }, ptr %a509 call void @finch_str_concat(ptr %a507, ptr %a508, ptr %a509) store { ptr, i64, i64 } %t506, ptr %a510 call void @finch_str_drop(ptr %a510) %t511 = load { ptr, i64, i64 }, ptr %a507 %t512 = load { ptr, i64, i64 }, ptr %a1 %t513 = extractvalue { ptr, i64, i64 } %t512, 1 %t514 = icmp uge i64 0, %t513 br i1 %t514, label %range324, label %inrange325 range324: call void @finch_panic_index(ptr @.str.215, i64 238, i64 0, i64 %t513) unreachable inrange325: %t515 = extractvalue { ptr, i64, i64 } %t512, 0 %t516 = getelementptr inbounds { ptr, i64, i64 }, ptr %t515, i64 0 %t517 = load { ptr, i64, i64 }, ptr %t516 %t518 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t517) store { ptr, i64, i64 } %t518, ptr %a520 store { ptr, i64, i64 } { ptr @.str.216, i64 19, i64 0 }, ptr %a521 call void @finch_str_concat(ptr %a519, ptr %a520, ptr %a521) store { ptr, i64, i64 } %t518, ptr %a522 call void @finch_str_drop(ptr %a522) %t523 = load { ptr, i64, i64 }, ptr %a519 %t524 = mul i64 4, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t525 = call ptr @finch_alloc(i64 %t524) %t526 = getelementptr inbounds { ptr, i64, i64 }, ptr %t525, i64 0 store { ptr, i64, i64 } %t499, ptr %t526 %t527 = getelementptr inbounds { ptr, i64, i64 }, ptr %t525, i64 1 store { ptr, i64, i64 } %t511, ptr %t527 %t528 = getelementptr inbounds { ptr, i64, i64 }, ptr %t525, i64 2 store { ptr, i64, i64 } %t523, ptr %t528 %t529 = getelementptr inbounds { ptr, i64, i64 }, ptr %t525, i64 3 store { ptr, i64, i64 } { ptr @.str.217, i64 3, i64 0 }, ptr %t529 %t530 = insertvalue { ptr, i64, i64 } undef, ptr %t525, 0 %t531 = insertvalue { ptr, i64, i64 } %t530, i64 4, 1 %t532 = insertvalue { ptr, i64, i64 } %t531, i64 4, 2 store { ptr, i64, i64 } %t532, ptr %a533 store i64 0, ptr %a534 br label %each.cond326 each.cond326: %t535 = getelementptr inbounds { ptr, i64, i64 }, ptr %a533, i32 0, i32 1 %t536 = load i64, ptr %t535 %t537 = load i64, ptr %a534 %t538 = icmp slt i64 %t537, %t536 br i1 %t538, label %each.body327, label %each.end329 each.body327: %t539 = load ptr, ptr %a533 %t540 = getelementptr inbounds { ptr, i64, i64 }, ptr %t539, i64 %t537 %t541 = load { ptr, i64, i64 }, ptr %t540 store { ptr, i64, i64 } %t541, ptr %a542 %t543 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 4 %t544 = getelementptr inbounds { ptr, i64, i64 }, ptr %t543, i32 0, i32 1 %t545 = load i64, ptr %t544 %t546 = icmp eq i64 %t545, 0 br label %logic.from330 logic.from330: br i1 %t546, label %logic.rhs331, label %logic.end332 logic.rhs331: %t547 = load { ptr, i64, i64 }, ptr %a542 store { ptr, i64, i64 } %t547, ptr %a549 store { ptr, i64, i64 } { ptr @.str.218, i64 9, i64 0 }, ptr %a550 call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) %t551 = load { ptr, i64, i64 }, ptr %a548 store { ptr, i64, i64 } %t551, ptr %a552 %t553 = call i32 @finch_file_exists(ptr %a552) store { ptr, i64, i64 } %t551, ptr %a554 call void @finch_str_drop(ptr %a554) %t555 = icmp ne i32 %t553, 0 br label %logic.rend333 logic.rend333: br label %logic.end332 logic.end332: %t556 = phi i1 [ false, %logic.from330 ], [ %t555, %logic.rend333 ] br i1 %t556, label %then334, label %endif336 then334: %t557 = load { ptr, i64, i64 }, ptr %a542 %t558 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 4 store { ptr, i64, i64 } %t557, ptr %a559 call void @finch_str_copy(ptr %a560, ptr %a559) %t561 = load { ptr, i64, i64 }, ptr %a560 %t562 = load { ptr, i64, i64 }, ptr %t558 store { ptr, i64, i64 } %t561, ptr %t558 store { ptr, i64, i64 } %t562, ptr %a563 call void @finch_str_drop(ptr %a563) br label %endif336 endif336: br label %each.step328 each.step328: %t564 = load i64, ptr %a534 %t565 = add i64 %t564, 1 store i64 %t565, ptr %a534 br label %each.cond326 each.end329: call void @finch.drop.arr_str(ptr %a533) %t566 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 4 %t567 = getelementptr inbounds { ptr, i64, i64 }, ptr %t566, i32 0, i32 1 %t568 = load i64, ptr %t567 %t569 = icmp eq i64 %t568, 0 br i1 %t569, label %then337, label %endif339 then337: %t570 = call { ptr, i64, i64 } @finch.main.unpack() store { ptr, i64, i64 } %t570, ptr %a572 store { ptr, i64, i64 } { ptr @.str.219, i64 4, i64 0 }, ptr %a573 call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573) store { ptr, i64, i64 } %t570, ptr %a574 call void @finch_str_drop(ptr %a574) %t575 = load { ptr, i64, i64 }, ptr %a571 %t576 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 4 %t577 = load { ptr, i64, i64 }, ptr %t576 store { ptr, i64, i64 } %t575, ptr %t576 store { ptr, i64, i64 } %t577, ptr %a578 call void @finch_str_drop(ptr %a578) br label %endif339 endif339: %t579 = load { ptr, i64, i64 }, ptr %a111 %t580 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 6 store { ptr, i64, i64 } %t579, ptr %a581 call void @finch.copy.arr_str(ptr %a582, ptr %a581) %t583 = load { ptr, i64, i64 }, ptr %a582 %t584 = load { ptr, i64, i64 }, ptr %t580 store { ptr, i64, i64 } %t583, ptr %t580 store { ptr, i64, i64 } %t584, ptr %a585 call void @finch.drop.arr_str(ptr %a585) %t586 = load { ptr, i64, i64 }, ptr %a112 %t587 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 7 store { ptr, i64, i64 } %t586, ptr %a588 call void @finch.copy.arr_str(ptr %a589, ptr %a588) %t590 = load { ptr, i64, i64 }, ptr %a589 %t591 = load { ptr, i64, i64 }, ptr %t587 store { ptr, i64, i64 } %t590, ptr %t587 store { ptr, i64, i64 } %t591, ptr %a592 call void @finch.drop.arr_str(ptr %a592) %t593 = extractvalue { ptr, i64, i64 } { ptr @.str.220, i64 10, i64 0 }, 0 %t594 = icmp eq ptr %t593, null %t595 = select i1 %t594, ptr @.str.221, ptr %t593 %t596 = call ptr @getenv(ptr %t595) store { ptr, i64, i64 } zeroinitializer, ptr %a597 call void @finch_str_from_c(ptr %a597, ptr %t596) %t598 = load { ptr, i64, i64 }, ptr %a597 store { ptr, i64, i64 } %t598, ptr %a599 %t601 = call { ptr, i64, i64 } @finch.host.pathSeparator() store { ptr, i64, i64 } %t601, ptr %a602 call void @finch_str_split(ptr %a603, ptr %a599, ptr %a602) store { ptr, i64, i64 } %t601, ptr %a604 call void @finch_str_drop(ptr %a604) %t605 = load { ptr, i64, i64 }, ptr %a603 store { ptr, i64, i64 } %t605, ptr %a606 store i64 0, ptr %a607 br label %each.cond340 each.cond340: %t608 = getelementptr inbounds { ptr, i64, i64 }, ptr %a606, i32 0, i32 1 %t609 = load i64, ptr %t608 %t610 = load i64, ptr %a607 %t611 = icmp slt i64 %t610, %t609 br i1 %t611, label %each.body341, label %each.end343 each.body341: %t612 = load ptr, ptr %a606 %t613 = getelementptr inbounds { ptr, i64, i64 }, ptr %t612, i64 %t610 %t614 = load { ptr, i64, i64 }, ptr %t613 store { ptr, i64, i64 } %t614, ptr %a615 %t616 = getelementptr inbounds { ptr, i64, i64 }, ptr %a615, i32 0, i32 1 %t617 = load i64, ptr %t616 %t618 = icmp sgt i64 %t617, 0 br i1 %t618, label %then344, label %endif346 then344: %t619 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 5 %t620 = getelementptr inbounds { ptr, i64, i64 }, ptr %t619, i32 0, i32 1 %t621 = load { ptr, i64, i64 }, ptr %a615 store { ptr, i64, i64 } %t621, ptr %a622 call void @finch_str_copy(ptr %a623, ptr %a622) %t624 = load { ptr, i64, i64 }, ptr %a623 %t625 = load i64, ptr %t620 %t626 = add i64 %t625, 1 call void @finch_arr_reserve(ptr %t619, i64 %t626, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t627 = load ptr, ptr %t619 %t628 = getelementptr inbounds { ptr, i64, i64 }, ptr %t627, i64 %t625 store { ptr, i64, i64 } %t624, ptr %t628 store i64 %t626, ptr %t620 br label %endif346 endif346: br label %each.step342 each.step342: %t629 = load i64, ptr %a607 %t630 = add i64 %t629, 1 store i64 %t630, ptr %a607 br label %each.cond340 each.end343: call void @finch.drop.arr_str(ptr %a606) %t631 = load { ptr, i64, i64 }, ptr %a77 call void @finch.main.load(ptr %a474, { ptr, i64, i64 } %t631, { ptr, i64, i64 } { ptr @.str.223, i64 0, i64 0 }) store { ptr, i64, i64 } zeroinitializer, ptr %a632 store { ptr, i64, i64 } zeroinitializer, ptr %a633 %t634 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } %t634, ptr %a635 call void @finch.copy.arr_str(ptr %a636, ptr %a635) %t637 = load { ptr, i64, i64 }, ptr %a636 store { ptr, i64, i64 } %t637, ptr %a638 %t639 = load { ptr, i64, i64 }, ptr %a109 store { ptr, i64, i64 } %t639, ptr %a640 call void @finch.copy.arr_str(ptr %a641, ptr %a640) %t642 = load { ptr, i64, i64 }, ptr %a641 store { ptr, i64, i64 } %t642, ptr %a643 %t644 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 0 store i64 0, ptr %a645 br label %each.cond347 each.cond347: %t646 = getelementptr inbounds { ptr, i64, i64 }, ptr %t644, i32 0, i32 1 %t647 = load i64, ptr %t646 %t648 = load i64, ptr %a645 %t649 = icmp slt i64 %t648, %t647 br i1 %t649, label %each.body348, label %each.end350 each.body348: %t650 = load ptr, ptr %t644 %t651 = getelementptr inbounds %S.ast.Program, ptr %t650, i64 %t648 %t652 = load %S.ast.Program, ptr %t651 store %S.ast.Program %t652, ptr %a653 %t654 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 1 %t655 = load { ptr, i64, i64 }, ptr %t654 %t656 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t655) store { ptr, i64, i64 } %t656, ptr %a657 %t658 = getelementptr inbounds { ptr, i64, i64 }, ptr %a638, i32 0, i32 1 %t659 = load { ptr, i64, i64 }, ptr %a657 store i64 -1, ptr %a660 %t661 = load i64, ptr %t658 %t662 = load ptr, ptr %a638 store i64 0, ptr %a663 br label %find.cond351 find.cond351: %t664 = load i64, ptr %a663 %t665 = icmp slt i64 %t664, %t661 br i1 %t665, label %find.body352, label %find.end355 find.body352: %t666 = getelementptr inbounds { ptr, i64, i64 }, ptr %t662, i64 %t664 %t667 = load { ptr, i64, i64 }, ptr %t666 store { ptr, i64, i64 } %t667, ptr %a668 store { ptr, i64, i64 } %t659, ptr %a669 %t670 = call i32 @finch_str_eq(ptr %a668, ptr %a669) %t671 = icmp ne i32 %t670, 0 br i1 %t671, label %find.hit353, label %find.next354 find.hit353: store i64 %t664, ptr %a660 br label %find.end355 find.next354: %t672 = add i64 %t664, 1 store i64 %t672, ptr %a663 br label %find.cond351 find.end355: %t673 = load i64, ptr %a660 %t674 = icmp sge i64 %t673, 0 %t675 = xor i1 %t674, true br i1 %t675, label %then356, label %endif358 then356: %t676 = getelementptr inbounds { ptr, i64, i64 }, ptr %a638, i32 0, i32 1 %t677 = load { ptr, i64, i64 }, ptr %a657 store { ptr, i64, i64 } %t677, ptr %a678 call void @finch_str_copy(ptr %a679, ptr %a678) %t680 = load { ptr, i64, i64 }, ptr %a679 %t681 = load i64, ptr %t676 %t682 = add i64 %t681, 1 call void @finch_arr_reserve(ptr %a638, i64 %t682, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t683 = load ptr, ptr %a638 %t684 = getelementptr inbounds { ptr, i64, i64 }, ptr %t683, i64 %t681 store { ptr, i64, i64 } %t680, ptr %t684 store i64 %t682, ptr %t676 br label %endif358 endif358: %t685 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 3 %t686 = getelementptr inbounds { ptr, i64, i64 }, ptr %t685, i32 0, i32 1 %t687 = load i64, ptr %t686 store i64 0, ptr %a688 br label %for.cond359 for.cond359: %t689 = load i64, ptr %a688 %t690 = icmp slt i64 %t689, %t687 br i1 %t690, label %for.body360, label %for.end362 for.body360: %t691 = getelementptr inbounds { ptr, i64, i64 }, ptr %a633, i32 0, i32 1 %t692 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 3 %t693 = load i64, ptr %a688 %t694 = load { ptr, i64, i64 }, ptr %t692 %t695 = extractvalue { ptr, i64, i64 } %t694, 1 %t696 = icmp uge i64 %t693, %t695 br i1 %t696, label %range363, label %inrange364 range363: call void @finch_panic_index(ptr @.str.224, i64 266, i64 %t693, i64 %t695) unreachable inrange364: %t697 = extractvalue { ptr, i64, i64 } %t694, 0 %t698 = getelementptr inbounds { ptr, i64, i64 }, ptr %t697, i64 %t693 %t699 = load { ptr, i64, i64 }, ptr %t698 store i64 -1, ptr %a700 %t701 = load i64, ptr %t691 %t702 = load ptr, ptr %a633 store i64 0, ptr %a703 br label %find.cond365 find.cond365: %t704 = load i64, ptr %a703 %t705 = icmp slt i64 %t704, %t701 br i1 %t705, label %find.body366, label %find.end369 find.body366: %t706 = getelementptr inbounds { ptr, i64, i64 }, ptr %t702, i64 %t704 %t707 = load { ptr, i64, i64 }, ptr %t706 store { ptr, i64, i64 } %t707, ptr %a708 store { ptr, i64, i64 } %t699, ptr %a709 %t710 = call i32 @finch_str_eq(ptr %a708, ptr %a709) %t711 = icmp ne i32 %t710, 0 br i1 %t711, label %find.hit367, label %find.next368 find.hit367: store i64 %t704, ptr %a700 br label %find.end369 find.next368: %t712 = add i64 %t704, 1 store i64 %t712, ptr %a703 br label %find.cond365 find.end369: %t713 = load i64, ptr %a700 %t714 = icmp sge i64 %t713, 0 %t715 = xor i1 %t714, true br i1 %t715, label %then370, label %endif372 then370: %t716 = getelementptr inbounds { ptr, i64, i64 }, ptr %a633, i32 0, i32 1 %t717 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 3 %t718 = load i64, ptr %a688 %t719 = load { ptr, i64, i64 }, ptr %t717 %t720 = extractvalue { ptr, i64, i64 } %t719, 1 %t721 = icmp uge i64 %t718, %t720 br i1 %t721, label %range373, label %inrange374 range373: call void @finch_panic_index(ptr @.str.225, i64 267, i64 %t718, i64 %t720) unreachable inrange374: %t722 = extractvalue { ptr, i64, i64 } %t719, 0 %t723 = getelementptr inbounds { ptr, i64, i64 }, ptr %t722, i64 %t718 %t724 = load { ptr, i64, i64 }, ptr %t723 store { ptr, i64, i64 } %t724, ptr %a725 call void @finch_str_copy(ptr %a726, ptr %a725) %t727 = load { ptr, i64, i64 }, ptr %a726 %t728 = load i64, ptr %t716 %t729 = add i64 %t728, 1 call void @finch_arr_reserve(ptr %a633, i64 %t729, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t730 = load ptr, ptr %a633 %t731 = getelementptr inbounds { ptr, i64, i64 }, ptr %t730, i64 %t728 store { ptr, i64, i64 } %t727, ptr %t731 store i64 %t729, ptr %t716 %t732 = getelementptr inbounds { ptr, i64, i64 }, ptr %a632, i32 0, i32 1 %t733 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 3 %t734 = load i64, ptr %a688 %t735 = load { ptr, i64, i64 }, ptr %t733 %t736 = extractvalue { ptr, i64, i64 } %t735, 1 %t737 = icmp uge i64 %t734, %t736 br i1 %t737, label %range375, label %inrange376 range375: call void @finch_panic_index(ptr @.str.226, i64 268, i64 %t734, i64 %t736) unreachable inrange376: %t738 = extractvalue { ptr, i64, i64 } %t735, 0 %t739 = getelementptr inbounds { ptr, i64, i64 }, ptr %t738, i64 %t734 %t740 = load { ptr, i64, i64 }, ptr %t739 store { ptr, i64, i64 } %t740, ptr %a741 call void @finch_str_copy(ptr %a742, ptr %a741) %t743 = load { ptr, i64, i64 }, ptr %a742 %t744 = insertvalue %S.cimport.Header zeroinitializer, { ptr, i64, i64 } %t743, 0 %t745 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 4 %t746 = load i64, ptr %a688 %t747 = load { ptr, i64, i64 }, ptr %t745 %t748 = extractvalue { ptr, i64, i64 } %t747, 1 %t749 = icmp uge i64 %t746, %t748 br i1 %t749, label %range377, label %inrange378 range377: call void @finch_panic_index(ptr @.str.227, i64 268, i64 %t746, i64 %t748) unreachable inrange378: %t750 = extractvalue { ptr, i64, i64 } %t747, 0 %t751 = getelementptr inbounds { ptr, i64, i64 }, ptr %t750, i64 %t746 %t752 = load { ptr, i64, i64 }, ptr %t751 store { ptr, i64, i64 } %t752, ptr %a753 call void @finch_str_copy(ptr %a754, ptr %a753) %t755 = load { ptr, i64, i64 }, ptr %a754 %t756 = insertvalue %S.cimport.Header %t744, { ptr, i64, i64 } %t755, 1 %t757 = load i64, ptr %t732 %t758 = add i64 %t757, 1 call void @finch_arr_reserve(ptr %a632, i64 %t758, i64 ptrtoint (ptr getelementptr (%S.cimport.Header, ptr null, i32 1) to i64)) %t759 = load ptr, ptr %a632 %t760 = getelementptr inbounds %S.cimport.Header, ptr %t759, i64 %t757 store %S.cimport.Header %t756, ptr %t760 store i64 %t758, ptr %t732 br label %endif372 endif372: br label %for.step361 for.step361: %t761 = load i64, ptr %a688 %t762 = add i64 %t761, 1 store i64 %t762, ptr %a688 br label %for.cond359 for.end362: %t763 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 5 store i64 0, ptr %a764 br label %each.cond379 each.cond379: %t765 = getelementptr inbounds { ptr, i64, i64 }, ptr %t763, i32 0, i32 1 %t766 = load i64, ptr %t765 %t767 = load i64, ptr %a764 %t768 = icmp slt i64 %t767, %t766 br i1 %t768, label %each.body380, label %each.end382 each.body380: %t769 = load ptr, ptr %t763 %t770 = getelementptr inbounds { ptr, i64, i64 }, ptr %t769, i64 %t767 %t771 = load { ptr, i64, i64 }, ptr %t770 store { ptr, i64, i64 } %t771, ptr %a772 %t773 = load { ptr, i64, i64 }, ptr %a772 store { ptr, i64, i64 } %t773, ptr %a774 store { ptr, i64, i64 } { ptr @.str.229, i64 2, i64 0 }, ptr %a776 %t777 = call i32 @finch_str_ends(ptr %a774, ptr %a776) %t778 = icmp ne i32 %t777, 0 br label %logic.from383 logic.from383: br i1 %t778, label %logic.end385, label %logic.rhs384 logic.rhs384: %t779 = load { ptr, i64, i64 }, ptr %a772 store { ptr, i64, i64 } %t779, ptr %a780 store { ptr, i64, i64 } { ptr @.str.231, i64 2, i64 0 }, ptr %a782 %t783 = call i32 @finch_str_ends(ptr %a780, ptr %a782) %t784 = icmp ne i32 %t783, 0 br label %logic.rend386 logic.rend386: br label %logic.end385 logic.end385: %t785 = phi i1 [ true, %logic.from383 ], [ %t784, %logic.rend386 ] br label %logic.from387 logic.from387: br i1 %t785, label %logic.end389, label %logic.rhs388 logic.rhs388: %t786 = load { ptr, i64, i64 }, ptr %a772 store { ptr, i64, i64 } %t786, ptr %a787 store { ptr, i64, i64 } { ptr @.str.233, i64 2, i64 0 }, ptr %a789 %t790 = call i32 @finch_str_ends(ptr %a787, ptr %a789) %t791 = icmp ne i32 %t790, 0 br label %logic.rend390 logic.rend390: br label %logic.end389 logic.end389: %t792 = phi i1 [ true, %logic.from387 ], [ %t791, %logic.rend390 ] br i1 %t792, label %then391, label %else392 then391: %t793 = getelementptr inbounds { ptr, i64, i64 }, ptr %a643, i32 0, i32 1 %t794 = load { ptr, i64, i64 }, ptr %a657 store { ptr, i64, i64 } %t794, ptr %a796 store { ptr, i64, i64 } { ptr @.str.234, i64 1, i64 0 }, ptr %a797 call void @finch_str_concat(ptr %a795, ptr %a796, ptr %a797) %t798 = load { ptr, i64, i64 }, ptr %a795 %t799 = load { ptr, i64, i64 }, ptr %a772 store { ptr, i64, i64 } %t798, ptr %a801 store { ptr, i64, i64 } %t799, ptr %a802 call void @finch_str_concat(ptr %a800, ptr %a801, ptr %a802) store { ptr, i64, i64 } %t798, ptr %a803 call void @finch_str_drop(ptr %a803) %t804 = load { ptr, i64, i64 }, ptr %a800 %t805 = load i64, ptr %t793 %t806 = add i64 %t805, 1 call void @finch_arr_reserve(ptr %a643, i64 %t806, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t807 = load ptr, ptr %a643 %t808 = getelementptr inbounds { ptr, i64, i64 }, ptr %t807, i64 %t805 store { ptr, i64, i64 } %t804, ptr %t808 store i64 %t806, ptr %t793 br label %endif393 else392: %t809 = getelementptr inbounds { ptr, i64, i64 }, ptr %a643, i32 0, i32 1 %t810 = load { ptr, i64, i64 }, ptr %a772 store { ptr, i64, i64 } %t810, ptr %a811 call void @finch_str_copy(ptr %a812, ptr %a811) %t813 = load { ptr, i64, i64 }, ptr %a812 %t814 = load i64, ptr %t809 %t815 = add i64 %t814, 1 call void @finch_arr_reserve(ptr %a643, i64 %t815, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t816 = load ptr, ptr %a643 %t817 = getelementptr inbounds { ptr, i64, i64 }, ptr %t816, i64 %t814 store { ptr, i64, i64 } %t813, ptr %t817 store i64 %t815, ptr %t809 br label %endif393 endif393: br label %each.step381 each.step381: %t818 = load i64, ptr %a764 %t819 = add i64 %t818, 1 store i64 %t819, ptr %a764 br label %each.cond379 each.end382: call void @finch_str_drop(ptr %a657) br label %each.step349 each.step349: %t820 = load i64, ptr %a645 %t821 = add i64 %t820, 1 store i64 %t821, ptr %a645 br label %each.cond347 each.end350: store { ptr, i64, i64 } { ptr @.str.235, i64 0, i64 0 }, ptr %a822 %t823 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 5 %t824 = load i1, ptr %t823 br label %logic.from394 logic.from394: br i1 %t824, label %logic.end396, label %logic.rhs395 logic.rhs395: %t825 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 %t826 = load i1, ptr %t825 br label %logic.rend397 logic.rend397: br label %logic.end396 logic.end396: %t827 = phi i1 [ true, %logic.from394 ], [ %t826, %logic.rend397 ] br i1 %t827, label %then398, label %endif400 then398: %t828 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 0 %t829 = load { ptr, i64, i64 }, ptr %t828 store { ptr, i64, i64 } %t829, ptr %a830 call void @finch_str_copy(ptr %a831, ptr %a830) %t832 = load { ptr, i64, i64 }, ptr %a831 %t833 = load { ptr, i64, i64 }, ptr %a822 store { ptr, i64, i64 } %t832, ptr %a822 store { ptr, i64, i64 } %t833, ptr %a834 call void @finch_str_drop(ptr %a834) br label %endif400 endif400: %t835 = load { ptr, i64, i64 }, ptr %a632 %t836 = load { ptr, i64, i64 }, ptr %a638 %t837 = load { ptr, i64, i64 }, ptr %a822 %t838 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 %t839 = load i1, ptr %t838 %t840 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 7 %t841 = load { ptr, i64, i64 }, ptr %t840 %t842 = call { i1, %S.cimport.CImports, { ptr, i64, i64 } } @finch.cimport.importHeaders({ ptr, i64, i64 } %t835, { ptr, i64, i64 } %t836, { ptr, i64, i64 } %t837, i1 %t839, { ptr, i64, i64 } %t841) %t843 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 0 %t844 = xor i1 %t843, true %t845 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 2 %t846 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 1 br i1 %t844, label %or.failed401, label %or.ok402 or.failed401: store { ptr, i64, i64 } %t845, ptr %a847 %t848 = load { ptr, i64, i64 }, ptr %a847 %t849 = extractvalue { ptr, i64, i64 } %t848, 1 %t850 = trunc i64 %t849 to i32 %t851 = extractvalue { ptr, i64, i64 } %t848, 0 %t852 = icmp eq ptr %t851, null %t853 = select i1 %t852, ptr @.str.236, ptr %t851 %t854 = call i32 (ptr, ...) @printf(ptr @.str.237, i32 %t850, ptr %t853) %t855 = call i32 (ptr, ...) @printf(ptr @.str.238) call void @finch_str_drop(ptr %a847) call void @finch_str_drop(ptr %a822) call void @finch.drop.arr_str(ptr %a643) call void @finch.drop.arr_str(ptr %a638) call void @finch.drop.arr_str(ptr %a633) call void @finch.drop.arr_S_cimport_Header(ptr %a632) call void @finch.drop.S_main_Loader(ptr %a474) call void @finch.drop.S_platform_Target(ptr %a381) call void @finch.drop.arr_str(ptr %a113) call void @finch.drop.arr_str(ptr %a112) call void @finch.drop.arr_str(ptr %a111) call void @finch.drop.arr_str(ptr %a110) call void @finch.drop.arr_str(ptr %a109) call void @finch_str_drop(ptr %a108) call void @finch_str_drop(ptr %a107) call void @finch_str_drop(ptr %a103) call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a67) ret i64 1 or.ok402: store %S.cimport.CImports %t846, ptr %a856 %t857 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 0 %t858 = load { ptr, i64, i64 }, ptr %t857 %t859 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 1 %t860 = load { ptr, i64, i64 }, ptr %t859 %t861 = load %S.cimport.CImports, ptr %a856 %t862 = load i1, ptr %a105 %t863 = insertvalue %S.gen.Options zeroinitializer, i1 %t862, 0 %t864 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t864, ptr %a865 store { ptr, i64, i64 } { ptr @.str.239, i64 5, i64 0 }, ptr %a866 %t867 = call i32 @finch_str_eq(ptr %a865, ptr %a866) %t868 = icmp ne i32 %t867, 0 %t869 = insertvalue %S.gen.Options %t863, i1 %t868, 1 %t870 = load i1, ptr %a106 %t871 = insertvalue %S.gen.Options %t869, i1 %t870, 2 %t872 = call { ptr, i64, i64 } @finch.host.cwd() %t873 = insertvalue %S.gen.Options %t871, { ptr, i64, i64 } %t872, 3 %t874 = load %S.platform.Target, ptr %a381 store %S.platform.Target %t874, ptr %a875 call void @finch.copy.S_platform_Target(ptr %a876, ptr %a875) %t877 = load %S.platform.Target, ptr %a876 %t878 = insertvalue %S.gen.Options %t873, %S.platform.Target %t877, 4 %t879 = call { ptr, i64, i64 } @finch.gen.generate({ ptr, i64, i64 } %t858, { ptr, i64, i64 } %t860, %S.cimport.CImports %t861, %S.gen.Options %t878) store %S.gen.Options %t878, ptr %a880 call void @finch.drop.S_gen_Options(ptr %a880) store { ptr, i64, i64 } %t879, ptr %a881 %t882 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t882, ptr %a883 store { ptr, i64, i64 } { ptr @.str.240, i64 2, i64 0 }, ptr %a884 %t885 = call i32 @finch_str_eq(ptr %a883, ptr %a884) %t886 = icmp ne i32 %t885, 0 br label %logic.from409 logic.from409: br i1 %t886, label %logic.end411, label %logic.rhs410 logic.rhs410: %t887 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t887, ptr %a888 store { ptr, i64, i64 } { ptr @.str.241, i64 5, i64 0 }, ptr %a889 %t890 = call i32 @finch_str_eq(ptr %a888, ptr %a889) %t891 = icmp ne i32 %t890, 0 br label %logic.rend412 logic.rend412: br label %logic.end411 logic.end411: %t892 = phi i1 [ true, %logic.from409 ], [ %t891, %logic.rend412 ] br i1 %t892, label %then413, label %endif415 then413: %t893 = load { ptr, i64, i64 }, ptr %a881 %t894 = extractvalue { ptr, i64, i64 } %t893, 1 %t895 = trunc i64 %t894 to i32 %t896 = extractvalue { ptr, i64, i64 } %t893, 0 %t897 = icmp eq ptr %t896, null %t898 = select i1 %t897, ptr @.str.242, ptr %t896 %t899 = call i32 (ptr, ...) @printf(ptr @.str.243, i32 %t895, ptr %t898) %t900 = call i32 (ptr, ...) @printf(ptr @.str.244) call void @finch_str_drop(ptr %a881) call void @finch.drop.S_cimport_CImports(ptr %a856) call void @finch_str_drop(ptr %a822) call void @finch.drop.arr_str(ptr %a643) call void @finch.drop.arr_str(ptr %a638) call void @finch.drop.arr_str(ptr %a633) call void @finch.drop.arr_S_cimport_Header(ptr %a632) call void @finch.drop.S_main_Loader(ptr %a474) call void @finch.drop.S_platform_Target(ptr %a381) call void @finch.drop.arr_str(ptr %a113) call void @finch.drop.arr_str(ptr %a112) call void @finch.drop.arr_str(ptr %a111) call void @finch.drop.arr_str(ptr %a110) call void @finch.drop.arr_str(ptr %a109) call void @finch_str_drop(ptr %a108) call void @finch_str_drop(ptr %a107) call void @finch_str_drop(ptr %a103) call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a67) ret i64 0 endif415: %t901 = extractvalue { ptr, i64, i64 } { ptr @.str.245, i64 8, i64 0 }, 0 %t902 = icmp eq ptr %t901, null %t903 = select i1 %t902, ptr @.str.246, ptr %t901 %t904 = call ptr @getenv(ptr %t903) store { ptr, i64, i64 } zeroinitializer, ptr %a905 call void @finch_str_from_c(ptr %a905, ptr %t904) %t906 = load { ptr, i64, i64 }, ptr %a905 store { ptr, i64, i64 } %t906, ptr %a907 call void @finch_str_copy(ptr %a908, ptr %a907) %t909 = load { ptr, i64, i64 }, ptr %a908 store { ptr, i64, i64 } %t909, ptr %a910 %t911 = getelementptr inbounds { ptr, i64, i64 }, ptr %a910, i32 0, i32 1 %t912 = load i64, ptr %t911 %t913 = icmp eq i64 %t912, 0 br i1 %t913, label %then439, label %endif441 then439: %t914 = load { ptr, i64, i64 }, ptr %a1 %t915 = extractvalue { ptr, i64, i64 } %t914, 1 %t916 = icmp uge i64 0, %t915 br i1 %t916, label %range442, label %inrange443 range442: call void @finch_panic_index(ptr @.str.247, i64 296, i64 0, i64 %t915) unreachable inrange443: %t917 = extractvalue { ptr, i64, i64 } %t914, 0 %t918 = getelementptr inbounds { ptr, i64, i64 }, ptr %t917, i64 0 %t919 = load { ptr, i64, i64 }, ptr %t918 %t920 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t919) store { ptr, i64, i64 } %t920, ptr %a922 store { ptr, i64, i64 } { ptr @.str.248, i64 22, i64 0 }, ptr %a923 call void @finch_str_concat(ptr %a921, ptr %a922, ptr %a923) store { ptr, i64, i64 } %t920, ptr %a924 call void @finch_str_drop(ptr %a924) %t925 = load { ptr, i64, i64 }, ptr %a921 %t926 = load { ptr, i64, i64 }, ptr %a910 store { ptr, i64, i64 } %t925, ptr %a910 store { ptr, i64, i64 } %t926, ptr %a927 call void @finch_str_drop(ptr %a927) br label %endif441 endif441: %t928 = load { ptr, i64, i64 }, ptr %a910 store { ptr, i64, i64 } %t928, ptr %a929 %t930 = call i32 @finch_file_exists(ptr %a929) %t931 = icmp ne i32 %t930, 0 %t932 = xor i1 %t931, true br i1 %t932, label %then444, label %endif446 then444: %t933 = load { ptr, i64, i64 }, ptr %a1 %t934 = extractvalue { ptr, i64, i64 } %t933, 1 %t935 = icmp uge i64 0, %t934 br i1 %t935, label %range447, label %inrange448 range447: call void @finch_panic_index(ptr @.str.249, i64 299, i64 0, i64 %t934) unreachable inrange448: %t936 = extractvalue { ptr, i64, i64 } %t933, 0 %t937 = getelementptr inbounds { ptr, i64, i64 }, ptr %t936, i64 0 %t938 = load { ptr, i64, i64 }, ptr %t937 %t939 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t938) store { ptr, i64, i64 } %t939, ptr %a941 store { ptr, i64, i64 } { ptr @.str.250, i64 19, i64 0 }, ptr %a942 call void @finch_str_concat(ptr %a940, ptr %a941, ptr %a942) store { ptr, i64, i64 } %t939, ptr %a943 call void @finch_str_drop(ptr %a943) %t944 = load { ptr, i64, i64 }, ptr %a940 %t945 = load { ptr, i64, i64 }, ptr %a910 store { ptr, i64, i64 } %t944, ptr %a910 store { ptr, i64, i64 } %t945, ptr %a946 call void @finch_str_drop(ptr %a946) br label %endif446 endif446: %t947 = load { ptr, i64, i64 }, ptr %a910 store { ptr, i64, i64 } %t947, ptr %a948 %t949 = call i32 @finch_file_exists(ptr %a948) %t950 = icmp ne i32 %t949, 0 %t951 = xor i1 %t950, true br i1 %t951, label %then449, label %endif451 then449: %t952 = load { ptr, i64, i64 }, ptr %a1 %t953 = extractvalue { ptr, i64, i64 } %t952, 1 %t954 = icmp uge i64 0, %t953 br i1 %t954, label %range452, label %inrange453 range452: call void @finch_panic_index(ptr @.str.251, i64 302, i64 0, i64 %t953) unreachable inrange453: %t955 = extractvalue { ptr, i64, i64 } %t952, 0 %t956 = getelementptr inbounds { ptr, i64, i64 }, ptr %t955, i64 0 %t957 = load { ptr, i64, i64 }, ptr %t956 %t958 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t957) store { ptr, i64, i64 } %t958, ptr %a960 store { ptr, i64, i64 } { ptr @.str.252, i64 34, i64 0 }, ptr %a961 call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) store { ptr, i64, i64 } %t958, ptr %a962 call void @finch_str_drop(ptr %a962) %t963 = load { ptr, i64, i64 }, ptr %a959 %t964 = load { ptr, i64, i64 }, ptr %a910 store { ptr, i64, i64 } %t963, ptr %a910 store { ptr, i64, i64 } %t964, ptr %a965 call void @finch_str_drop(ptr %a965) br label %endif451 endif451: %t966 = load { ptr, i64, i64 }, ptr %a910 store { ptr, i64, i64 } %t966, ptr %a967 %t968 = call i32 @finch_file_exists(ptr %a967) %t969 = icmp ne i32 %t968, 0 %t970 = xor i1 %t969, true br label %logic.from454 logic.from454: br i1 %t970, label %logic.rhs455, label %logic.end456 logic.rhs455: store { ptr, i64, i64 } { ptr @.str.253, i64 18, i64 0 }, ptr %a971 %t972 = call i32 @finch_file_exists(ptr %a971) %t973 = icmp ne i32 %t972, 0 br label %logic.rend457 logic.rend457: br label %logic.end456 logic.end456: %t974 = phi i1 [ false, %logic.from454 ], [ %t973, %logic.rend457 ] br i1 %t974, label %then458, label %endif460 then458: %t975 = load { ptr, i64, i64 }, ptr %a910 store { ptr, i64, i64 } { ptr @.str.254, i64 18, i64 0 }, ptr %a910 store { ptr, i64, i64 } %t975, ptr %a976 call void @finch_str_drop(ptr %a976) br label %endif460 endif460: %t977 = load { ptr, i64, i64 }, ptr %a910 store { ptr, i64, i64 } %t977, ptr %a978 %t979 = call i32 @finch_file_exists(ptr %a978) %t980 = icmp ne i32 %t979, 0 %t981 = xor i1 %t980, true br i1 %t981, label %then461, label %endif463 then461: %t982 = call { ptr, i64, i64 } @finch.main.unpack() store { ptr, i64, i64 } %t982, ptr %a984 store { ptr, i64, i64 } { ptr @.str.255, i64 19, i64 0 }, ptr %a985 call void @finch_str_concat(ptr %a983, ptr %a984, ptr %a985) store { ptr, i64, i64 } %t982, ptr %a986 call void @finch_str_drop(ptr %a986) %t987 = load { ptr, i64, i64 }, ptr %a983 %t988 = load { ptr, i64, i64 }, ptr %a910 store { ptr, i64, i64 } %t987, ptr %a910 store { ptr, i64, i64 } %t988, ptr %a989 call void @finch_str_drop(ptr %a989) br label %endif463 endif463: store { ptr, i64, i64 } { ptr @.str.256, i64 0, i64 0 }, ptr %a990 %t991 = load i1, ptr %a105 br i1 %t991, label %then464, label %endif466 then464: %t992 = load { ptr, i64, i64 }, ptr %a990 store { ptr, i64, i64 } { ptr @.str.257, i64 6, i64 0 }, ptr %a990 store { ptr, i64, i64 } %t992, ptr %a993 call void @finch_str_drop(ptr %a993) br label %endif466 endif466: %t994 = load i1, ptr %a106 br i1 %t994, label %then467, label %endif469 then467: %t995 = load { ptr, i64, i64 }, ptr %a990 store { ptr, i64, i64 } %t995, ptr %a997 store { ptr, i64, i64 } { ptr @.str.258, i64 3, i64 0 }, ptr %a998 call void @finch_str_concat(ptr %a996, ptr %a997, ptr %a998) %t999 = load { ptr, i64, i64 }, ptr %a996 %t1000 = load { ptr, i64, i64 }, ptr %a990 store { ptr, i64, i64 } %t999, ptr %a990 store { ptr, i64, i64 } %t1000, ptr %a1001 call void @finch_str_drop(ptr %a1001) br label %endif469 endif469: %t1002 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t1002, ptr %a1003 call void @finch_str_copy(ptr %a1004, ptr %a1003) %t1005 = load { ptr, i64, i64 }, ptr %a1004 %t1006 = insertvalue %S.linker.Build zeroinitializer, { ptr, i64, i64 } %t1005, 0 %t1007 = load { ptr, i64, i64 }, ptr %a881 store { ptr, i64, i64 } %t1007, ptr %a1008 call void @finch_str_copy(ptr %a1009, ptr %a1008) %t1010 = load { ptr, i64, i64 }, ptr %a1009 %t1011 = insertvalue %S.linker.Build %t1006, { ptr, i64, i64 } %t1010, 1 %t1012 = load { ptr, i64, i64 }, ptr %a910 store { ptr, i64, i64 } %t1012, ptr %a1013 call void @finch_str_copy(ptr %a1014, ptr %a1013) %t1015 = load { ptr, i64, i64 }, ptr %a1014 %t1016 = insertvalue %S.linker.Build %t1011, { ptr, i64, i64 } %t1015, 2 %t1017 = load { ptr, i64, i64 }, ptr %a108 store { ptr, i64, i64 } %t1017, ptr %a1018 call void @finch_str_copy(ptr %a1019, ptr %a1018) %t1020 = load { ptr, i64, i64 }, ptr %a1019 %t1021 = insertvalue %S.linker.Build %t1016, { ptr, i64, i64 } %t1020, 3 %t1022 = load { ptr, i64, i64 }, ptr %a990 store { ptr, i64, i64 } %t1022, ptr %a1023 call void @finch_str_copy(ptr %a1024, ptr %a1023) %t1025 = load { ptr, i64, i64 }, ptr %a1024 %t1026 = insertvalue %S.linker.Build %t1021, { ptr, i64, i64 } %t1025, 4 %t1027 = load i1, ptr %a105 %t1028 = insertvalue %S.linker.Build %t1026, i1 %t1027, 5 %t1029 = load { ptr, i64, i64 }, ptr %a643 store { ptr, i64, i64 } %t1029, ptr %a1030 call void @finch.copy.arr_str(ptr %a1031, ptr %a1030) %t1032 = load { ptr, i64, i64 }, ptr %a1031 %t1033 = insertvalue %S.linker.Build %t1028, { ptr, i64, i64 } %t1032, 6 %t1034 = load %S.platform.Target, ptr %a381 %t1035 = load %S.cimport.CImports, ptr %a856 %t1036 = call i64 @finch.linker.build(%S.linker.Build %t1033, %S.platform.Target %t1034, %S.cimport.CImports %t1035) store %S.linker.Build %t1033, ptr %a1037 call void @finch.drop.S_linker_Build(ptr %a1037) %t1038 = icmp ne i64 %t1036, 0 br i1 %t1038, label %then470, label %endif472 then470: call void @finch_str_drop(ptr %a990) call void @finch_str_drop(ptr %a910) call void @finch_str_drop(ptr %a881) call void @finch.drop.S_cimport_CImports(ptr %a856) call void @finch_str_drop(ptr %a822) call void @finch.drop.arr_str(ptr %a643) call void @finch.drop.arr_str(ptr %a638) call void @finch.drop.arr_str(ptr %a633) call void @finch.drop.arr_S_cimport_Header(ptr %a632) call void @finch.drop.S_main_Loader(ptr %a474) call void @finch.drop.S_platform_Target(ptr %a381) call void @finch.drop.arr_str(ptr %a113) call void @finch.drop.arr_str(ptr %a112) call void @finch.drop.arr_str(ptr %a111) call void @finch.drop.arr_str(ptr %a110) call void @finch.drop.arr_str(ptr %a109) call void @finch_str_drop(ptr %a108) call void @finch_str_drop(ptr %a107) call void @finch_str_drop(ptr %a103) call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a67) ret i64 1 endif472: %t1039 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t1039, ptr %a1040 store { ptr, i64, i64 } { ptr @.str.259, i64 3, i64 0 }, ptr %a1041 %t1042 = call i32 @finch_str_eq(ptr %a1040, ptr %a1041) %t1043 = icmp ne i32 %t1042, 0 br i1 %t1043, label %then473, label %endif475 then473: store { ptr, i64, i64 } zeroinitializer, ptr %a1044 store i64 0, ptr %a1045 br label %each.cond476 each.cond476: %t1046 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 %t1047 = load i64, ptr %t1046 %t1048 = load i64, ptr %a1045 %t1049 = icmp slt i64 %t1048, %t1047 br i1 %t1049, label %each.body477, label %each.end479 each.body477: %t1050 = load ptr, ptr %a113 %t1051 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1050, i64 %t1048 %t1052 = load { ptr, i64, i64 }, ptr %t1051 store { ptr, i64, i64 } %t1052, ptr %a1053 %t1054 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1044, i32 0, i32 1 %t1055 = load { ptr, i64, i64 }, ptr %a1053 %t1056 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t1055) %t1057 = load i64, ptr %t1054 %t1058 = add i64 %t1057, 1 call void @finch_arr_reserve(ptr %a1044, i64 %t1058, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t1059 = load ptr, ptr %a1044 %t1060 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1059, i64 %t1057 store { ptr, i64, i64 } %t1056, ptr %t1060 store i64 %t1058, ptr %t1054 br label %each.step478 each.step478: %t1061 = load i64, ptr %a1045 %t1062 = add i64 %t1061, 1 store i64 %t1062, ptr %a1045 br label %each.cond476 each.end479: %t1063 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 8 %t1064 = load { ptr, i64, i64 }, ptr %t1063 %t1065 = load { ptr, i64, i64 }, ptr %a103 %t1066 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t1065) store { ptr, i64, i64 } %t1064, ptr %a1068 store { ptr, i64, i64 } %t1066, ptr %a1069 call void @finch_str_concat(ptr %a1067, ptr %a1068, ptr %a1069) store { ptr, i64, i64 } %t1066, ptr %a1070 call void @finch_str_drop(ptr %a1070) %t1071 = load { ptr, i64, i64 }, ptr %a1067 store { ptr, i64, i64 } %t1071, ptr %a1073 store { ptr, i64, i64 } { ptr @.str.260, i64 1, i64 0 }, ptr %a1074 call void @finch_str_concat(ptr %a1072, ptr %a1073, ptr %a1074) store { ptr, i64, i64 } %t1071, ptr %a1075 call void @finch_str_drop(ptr %a1075) %t1076 = load { ptr, i64, i64 }, ptr %a1072 %t1077 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1044, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.261, i64 1, i64 0 }, ptr %a1078 call void @finch_str_join(ptr %a1079, ptr %a1044, ptr %a1078) %t1080 = load { ptr, i64, i64 }, ptr %a1079 store { ptr, i64, i64 } %t1076, ptr %a1082 store { ptr, i64, i64 } %t1080, ptr %a1083 call void @finch_str_concat(ptr %a1081, ptr %a1082, ptr %a1083) store { ptr, i64, i64 } %t1076, ptr %a1084 call void @finch_str_drop(ptr %a1084) store { ptr, i64, i64 } %t1080, ptr %a1085 call void @finch_str_drop(ptr %a1085) %t1086 = load { ptr, i64, i64 }, ptr %a1081 %t1087 = call i64 @finch.host.run({ ptr, i64, i64 } %t1086) store { ptr, i64, i64 } %t1086, ptr %a1088 call void @finch_str_drop(ptr %a1088) store i64 %t1087, ptr %a1089 %t1090 = load { ptr, i64, i64 }, ptr %a103 call void @finch.host.remove({ ptr, i64, i64 } %t1090) %t1091 = load i64, ptr %a1089 call void @finch.drop.arr_str(ptr %a1044) call void @finch_str_drop(ptr %a990) call void @finch_str_drop(ptr %a910) call void @finch_str_drop(ptr %a881) call void @finch.drop.S_cimport_CImports(ptr %a856) call void @finch_str_drop(ptr %a822) call void @finch.drop.arr_str(ptr %a643) call void @finch.drop.arr_str(ptr %a638) call void @finch.drop.arr_str(ptr %a633) call void @finch.drop.arr_S_cimport_Header(ptr %a632) call void @finch.drop.S_main_Loader(ptr %a474) call void @finch.drop.S_platform_Target(ptr %a381) call void @finch.drop.arr_str(ptr %a113) call void @finch.drop.arr_str(ptr %a112) call void @finch.drop.arr_str(ptr %a111) call void @finch.drop.arr_str(ptr %a110) call void @finch.drop.arr_str(ptr %a109) call void @finch_str_drop(ptr %a108) call void @finch_str_drop(ptr %a107) call void @finch_str_drop(ptr %a103) call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a67) ret i64 %t1091 endif475: call void @finch_str_drop(ptr %a990) call void @finch_str_drop(ptr %a910) call void @finch_str_drop(ptr %a881) call void @finch.drop.S_cimport_CImports(ptr %a856) call void @finch_str_drop(ptr %a822) call void @finch.drop.arr_str(ptr %a643) call void @finch.drop.arr_str(ptr %a638) call void @finch.drop.arr_str(ptr %a633) call void @finch.drop.arr_S_cimport_Header(ptr %a632) call void @finch.drop.S_main_Loader(ptr %a474) call void @finch.drop.S_platform_Target(ptr %a381) call void @finch.drop.arr_str(ptr %a113) call void @finch.drop.arr_str(ptr %a112) call void @finch.drop.arr_str(ptr %a111) call void @finch.drop.arr_str(ptr %a110) call void @finch.drop.arr_str(ptr %a109) call void @finch_str_drop(ptr %a108) call void @finch_str_drop(ptr %a107) call void @finch_str_drop(ptr %a103) call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a67) ret i64 0 } define internal i1 @finch.lexer.isAlpha(i8 %p0) { entry: %a1 = alloca i8, align 16 store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 97 br label %logic.from480 logic.from480: br i1 %t3, label %logic.rhs481, label %logic.end482 logic.rhs481: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 122 br label %logic.rend483 logic.rend483: br label %logic.end482 logic.end482: %t6 = phi i1 [ false, %logic.from480 ], [ %t5, %logic.rend483 ] br label %logic.from484 logic.from484: br i1 %t6, label %logic.end486, label %logic.rhs485 logic.rhs485: %t7 = load i8, ptr %a1 %t8 = icmp uge i8 %t7, 65 br label %logic.from487 logic.from487: br i1 %t8, label %logic.rhs488, label %logic.end489 logic.rhs488: %t9 = load i8, ptr %a1 %t10 = icmp ule i8 %t9, 90 br label %logic.rend490 logic.rend490: br label %logic.end489 logic.end489: %t11 = phi i1 [ false, %logic.from487 ], [ %t10, %logic.rend490 ] br label %logic.rend491 logic.rend491: br label %logic.end486 logic.end486: %t12 = phi i1 [ true, %logic.from484 ], [ %t11, %logic.rend491 ] br label %logic.from492 logic.from492: br i1 %t12, label %logic.end494, label %logic.rhs493 logic.rhs493: %t13 = load i8, ptr %a1 %t14 = icmp eq i8 %t13, 95 br label %logic.rend495 logic.rend495: br label %logic.end494 logic.end494: %t15 = phi i1 [ true, %logic.from492 ], [ %t14, %logic.rend495 ] ret i1 %t15 } define internal i1 @finch.lexer.isDigit(i8 %p0) { entry: %a1 = alloca i8, align 16 store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 48 br label %logic.from496 logic.from496: br i1 %t3, label %logic.rhs497, label %logic.end498 logic.rhs497: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 57 br label %logic.rend499 logic.rend499: br label %logic.end498 logic.end498: %t6 = phi i1 [ false, %logic.from496 ], [ %t5, %logic.rend499 ] ret i1 %t6 } define internal i1 @finch.lexer.isHex(i8 %p0) { entry: %a1 = alloca i8, align 16 store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = call i1 @finch.lexer.isDigit(i8 %t2) br label %logic.from500 logic.from500: br i1 %t3, label %logic.end502, label %logic.rhs501 logic.rhs501: %t4 = load i8, ptr %a1 %t5 = icmp uge i8 %t4, 97 br label %logic.from503 logic.from503: br i1 %t5, label %logic.rhs504, label %logic.end505 logic.rhs504: %t6 = load i8, ptr %a1 %t7 = icmp ule i8 %t6, 102 br label %logic.rend506 logic.rend506: br label %logic.end505 logic.end505: %t8 = phi i1 [ false, %logic.from503 ], [ %t7, %logic.rend506 ] br label %logic.rend507 logic.rend507: br label %logic.end502 logic.end502: %t9 = phi i1 [ true, %logic.from500 ], [ %t8, %logic.rend507 ] br label %logic.from508 logic.from508: br i1 %t9, label %logic.end510, label %logic.rhs509 logic.rhs509: %t10 = load i8, ptr %a1 %t11 = icmp uge i8 %t10, 65 br label %logic.from511 logic.from511: br i1 %t11, label %logic.rhs512, label %logic.end513 logic.rhs512: %t12 = load i8, ptr %a1 %t13 = icmp ule i8 %t12, 70 br label %logic.rend514 logic.rend514: br label %logic.end513 logic.end513: %t14 = phi i1 [ false, %logic.from511 ], [ %t13, %logic.rend514 ] br label %logic.rend515 logic.rend515: br label %logic.end510 logic.end510: %t15 = phi i1 [ true, %logic.from508 ], [ %t14, %logic.rend515 ] ret i1 %t15 } define internal i1 @finch.lexer.isKeyword({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca i64, align 16 %a34 = alloca i64, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = mul i64 21, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 store { ptr, i64, i64 } { ptr @.str.262, i64 2, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 store { ptr, i64, i64 } { ptr @.str.263, i64 6, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 store { ptr, i64, i64 } { ptr @.str.264, i64 2, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 store { ptr, i64, i64 } { ptr @.str.265, i64 4, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 store { ptr, i64, i64 } { ptr @.str.266, i64 5, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 store { ptr, i64, i64 } { ptr @.str.267, i64 3, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 store { ptr, i64, i64 } { ptr @.str.268, i64 2, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 store { ptr, i64, i64 } { ptr @.str.269, i64 5, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 store { ptr, i64, i64 } { ptr @.str.270, i64 8, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 store { ptr, i64, i64 } { ptr @.str.271, i64 4, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 store { ptr, i64, i64 } { ptr @.str.272, i64 5, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 store { ptr, i64, i64 } { ptr @.str.273, i64 4, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 store { ptr, i64, i64 } { ptr @.str.274, i64 6, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 store { ptr, i64, i64 } { ptr @.str.275, i64 4, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 store { ptr, i64, i64 } { ptr @.str.276, i64 6, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 store { ptr, i64, i64 } { ptr @.str.277, i64 5, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16 store { ptr, i64, i64 } { ptr @.str.278, i64 2, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17 store { ptr, i64, i64 } { ptr @.str.279, i64 3, i64 0 }, ptr %t21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18 store { ptr, i64, i64 } { ptr @.str.280, i64 4, i64 0 }, ptr %t22 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19 store { ptr, i64, i64 } { ptr @.str.281, i64 5, i64 0 }, ptr %t23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20 store { ptr, i64, i64 } { ptr @.str.282, i64 6, i64 0 }, ptr %t24 %t25 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t26 = insertvalue { ptr, i64, i64 } %t25, i64 21, 1 %t27 = insertvalue { ptr, i64, i64 } %t26, i64 21, 2 store { ptr, i64, i64 } %t27, ptr %a28 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1 %t30 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a31 %t32 = load i64, ptr %t29 %t33 = load ptr, ptr %a28 store i64 0, ptr %a34 br label %find.cond516 find.cond516: %t35 = load i64, ptr %a34 %t36 = icmp slt i64 %t35, %t32 br i1 %t36, label %find.body517, label %find.end520 find.body517: %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t35 %t38 = load { ptr, i64, i64 }, ptr %t37 store { ptr, i64, i64 } %t38, ptr %a39 store { ptr, i64, i64 } %t30, ptr %a40 %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) %t42 = icmp ne i32 %t41, 0 br i1 %t42, label %find.hit518, label %find.next519 find.hit518: store i64 %t35, ptr %a31 br label %find.end520 find.next519: %t43 = add i64 %t35, 1 store i64 %t43, ptr %a34 br label %find.cond516 find.end520: %t44 = load i64, ptr %a31 %t45 = icmp sge i64 %t44, 0 call void @finch.drop.arr_str(ptr %a28) ret i1 %t45 } define internal void @finch.lexer.fail(ptr %p0, i64 %p1, i64 %p2, { ptr, i64, i64 } %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a3 = alloca i64, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 store i64 %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic521, label %ok522 panic521: call void @finch_panic(ptr @.str.283, i64 41, ptr @.str.284) unreachable ok522: %t7 = getelementptr inbounds %S.lexer.Lexer, ptr %t5, i32 0, i32 1 %t8 = load { ptr, i64, i64 }, ptr %t7 store { ptr, i64, i64 } %t8, ptr %a10 store { ptr, i64, i64 } { ptr @.str.285, i64 1, i64 0 }, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 %t13 = load i64, ptr %a2 call void @finch_str_from_int(ptr %a14, i64 %t13) %t15 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t12, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) store { ptr, i64, i64 } %t12, ptr %a19 call void @finch_str_drop(ptr %a19) store { ptr, i64, i64 } %t15, ptr %a20 call void @finch_str_drop(ptr %a20) %t21 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t21, ptr %a23 store { ptr, i64, i64 } { ptr @.str.286, i64 1, i64 0 }, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) store { ptr, i64, i64 } %t21, ptr %a25 call void @finch_str_drop(ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a22 %t27 = load i64, ptr %a3 call void @finch_str_from_int(ptr %a28, i64 %t27) %t29 = load { ptr, i64, i64 }, ptr %a28 store { ptr, i64, i64 } %t26, ptr %a31 store { ptr, i64, i64 } %t29, ptr %a32 call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) store { ptr, i64, i64 } %t26, ptr %a33 call void @finch_str_drop(ptr %a33) store { ptr, i64, i64 } %t29, ptr %a34 call void @finch_str_drop(ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a30 store { ptr, i64, i64 } %t35, ptr %a37 store { ptr, i64, i64 } { ptr @.str.287, i64 9, i64 0 }, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) store { ptr, i64, i64 } %t35, ptr %a39 call void @finch_str_drop(ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a36 %t41 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t40, ptr %a43 store { ptr, i64, i64 } %t41, ptr %a44 call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) store { ptr, i64, i64 } %t40, ptr %a45 call void @finch_str_drop(ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a42 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = trunc i64 %t47 to i32 %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = icmp eq ptr %t49, null %t51 = select i1 %t50, ptr @.str.288, ptr %t49 %t52 = call i32 (ptr, ...) @printf(ptr @.str.289, i32 %t48, ptr %t51) store { ptr, i64, i64 } %t46, ptr %a53 call void @finch_str_drop(ptr %a53) %t54 = call i32 (ptr, ...) @printf(ptr @.str.290) %t55 = trunc i64 1 to i32 %t56 = call i32 @fflush(ptr null) call void @exit(i32 %t55) ret void } define internal i8 @finch.lexer.peek(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic523, label %ok524 panic523: call void @finch_panic(ptr @.str.291, i64 46, ptr @.str.292) unreachable ok524: %t5 = getelementptr inbounds %S.lexer.Lexer, ptr %t3, i32 0, i32 2 %t6 = load i64, ptr %t5 %t7 = load i64, ptr %a2 %t8 = add i64 %t6, %t7 %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null br i1 %t10, label %panic525, label %ok526 panic525: call void @finch_panic(ptr @.str.293, i64 46, ptr @.str.294) unreachable ok526: %t11 = getelementptr inbounds %S.lexer.Lexer, ptr %t9, i32 0, i32 0 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = icmp slt i64 %t8, %t13 br i1 %t14, label %then527, label %endif529 then527: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic530, label %ok531 panic530: call void @finch_panic(ptr @.str.295, i64 47, ptr @.str.296) unreachable ok531: %t17 = getelementptr inbounds %S.lexer.Lexer, ptr %t15, i32 0, i32 0 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic532, label %ok533 panic532: call void @finch_panic(ptr @.str.297, i64 47, ptr @.str.298) unreachable ok533: %t20 = getelementptr inbounds %S.lexer.Lexer, ptr %t18, i32 0, i32 2 %t21 = load i64, ptr %t20 %t22 = load i64, ptr %a2 %t23 = add i64 %t21, %t22 %t24 = load { ptr, i64, i64 }, ptr %t17 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 %t23, %t25 br i1 %t26, label %range534, label %inrange535 range534: call void @finch_panic_index(ptr @.str.299, i64 47, i64 %t23, i64 %t25) unreachable inrange535: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds i8, ptr %t27, i64 %t23 %t29 = load i8, ptr %t28 ret i8 %t29 endif529: %t30 = trunc i64 0 to i8 ret i8 %t30 } define internal void @finch.lexer.advance(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a15 = alloca i8, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic536, label %ok537 panic536: call void @finch_panic(ptr @.str.300, i64 53, ptr @.str.301) unreachable ok537: %t4 = getelementptr inbounds %S.lexer.Lexer, ptr %t2, i32 0, i32 0 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic538, label %ok539 panic538: call void @finch_panic(ptr @.str.302, i64 53, ptr @.str.303) unreachable ok539: %t7 = getelementptr inbounds %S.lexer.Lexer, ptr %t5, i32 0, i32 2 %t8 = load i64, ptr %t7 %t9 = load { ptr, i64, i64 }, ptr %t4 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 br i1 %t11, label %range540, label %inrange541 range540: call void @finch_panic_index(ptr @.str.304, i64 53, i64 %t8, i64 %t10) unreachable inrange541: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 %t14 = load i8, ptr %t13 store i8 %t14, ptr %a15 %t16 = load i8, ptr %a15 %t17 = icmp eq i8 %t16, 10 br i1 %t17, label %then542, label %else543 then542: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic545, label %ok546 panic545: call void @finch_panic(ptr @.str.305, i64 55, ptr @.str.306) unreachable ok546: %t20 = getelementptr inbounds %S.lexer.Lexer, ptr %t18, i32 0, i32 3 %t21 = load i64, ptr %t20 %t22 = add i64 %t21, 1 store i64 %t22, ptr %t20 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null br i1 %t24, label %panic547, label %ok548 panic547: call void @finch_panic(ptr @.str.307, i64 56, ptr @.str.308) unreachable ok548: %t25 = getelementptr inbounds %S.lexer.Lexer, ptr %t23, i32 0, i32 4 store i64 1, ptr %t25 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null br i1 %t27, label %panic549, label %ok550 panic549: call void @finch_panic(ptr @.str.309, i64 57, ptr @.str.310) unreachable ok550: %t28 = getelementptr inbounds %S.lexer.Lexer, ptr %t26, i32 0, i32 5 store i1 true, ptr %t28 br label %endif544 else543: %t29 = load i8, ptr %a15 %t30 = zext i8 %t29 to i64 %t31 = and i64 %t30, 192 %t32 = icmp ne i64 %t31, 128 br i1 %t32, label %then551, label %endif553 then551: %t33 = load ptr, ptr %a1 %t34 = icmp eq ptr %t33, null br i1 %t34, label %panic554, label %ok555 panic554: call void @finch_panic(ptr @.str.311, i64 59, ptr @.str.312) unreachable ok555: %t35 = getelementptr inbounds %S.lexer.Lexer, ptr %t33, i32 0, i32 4 %t36 = load i64, ptr %t35 %t37 = add i64 %t36, 1 store i64 %t37, ptr %t35 br label %endif553 endif553: br label %endif544 endif544: %t38 = load ptr, ptr %a1 %t39 = icmp eq ptr %t38, null br i1 %t39, label %panic556, label %ok557 panic556: call void @finch_panic(ptr @.str.313, i64 61, ptr @.str.314) unreachable ok557: %t40 = getelementptr inbounds %S.lexer.Lexer, ptr %t38, i32 0, i32 2 %t41 = load i64, ptr %t40 %t42 = add i64 %t41, 1 store i64 %t42, ptr %t40 ret void } define internal { ptr, i64, i64 } @finch.lexer.operator(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca i64, align 16 %a57 = alloca i64, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = mul i64 16, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 store { ptr, i64, i64 } { ptr @.str.315, i64 2, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 store { ptr, i64, i64 } { ptr @.str.316, i64 2, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 store { ptr, i64, i64 } { ptr @.str.317, i64 2, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 store { ptr, i64, i64 } { ptr @.str.318, i64 2, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 store { ptr, i64, i64 } { ptr @.str.319, i64 2, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 store { ptr, i64, i64 } { ptr @.str.320, i64 2, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 store { ptr, i64, i64 } { ptr @.str.321, i64 2, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 store { ptr, i64, i64 } { ptr @.str.322, i64 2, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 store { ptr, i64, i64 } { ptr @.str.323, i64 2, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 store { ptr, i64, i64 } { ptr @.str.324, i64 2, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 store { ptr, i64, i64 } { ptr @.str.325, i64 2, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 store { ptr, i64, i64 } { ptr @.str.326, i64 2, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 store { ptr, i64, i64 } { ptr @.str.327, i64 2, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 store { ptr, i64, i64 } { ptr @.str.328, i64 2, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 store { ptr, i64, i64 } { ptr @.str.329, i64 2, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 store { ptr, i64, i64 } { ptr @.str.330, i64 2, i64 0 }, ptr %t19 %t20 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t21 = insertvalue { ptr, i64, i64 } %t20, i64 16, 1 %t22 = insertvalue { ptr, i64, i64 } %t21, i64 16, 2 store { ptr, i64, i64 } %t22, ptr %a23 %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null br i1 %t25, label %panic558, label %ok559 panic558: call void @finch_panic(ptr @.str.331, i64 67, ptr @.str.332) unreachable ok559: %t26 = getelementptr inbounds %S.lexer.Lexer, ptr %t24, i32 0, i32 2 %t27 = load i64, ptr %t26 %t28 = add i64 %t27, 1 %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null br i1 %t30, label %panic560, label %ok561 panic560: call void @finch_panic(ptr @.str.333, i64 67, ptr @.str.334) unreachable ok561: %t31 = getelementptr inbounds %S.lexer.Lexer, ptr %t29, i32 0, i32 0 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 %t33 = load i64, ptr %t32 %t34 = icmp slt i64 %t28, %t33 br i1 %t34, label %then562, label %endif564 then562: %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null br i1 %t36, label %panic565, label %ok566 panic565: call void @finch_panic(ptr @.str.335, i64 68, ptr @.str.336) unreachable ok566: %t37 = getelementptr inbounds %S.lexer.Lexer, ptr %t35, i32 0, i32 0 %t38 = load { ptr, i64, i64 }, ptr %t37 store { ptr, i64, i64 } %t38, ptr %a39 %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null br i1 %t42, label %panic567, label %ok568 panic567: call void @finch_panic(ptr @.str.338, i64 68, ptr @.str.339) unreachable ok568: %t43 = getelementptr inbounds %S.lexer.Lexer, ptr %t41, i32 0, i32 2 %t44 = load i64, ptr %t43 %t45 = load ptr, ptr %a1 %t46 = icmp eq ptr %t45, null br i1 %t46, label %panic569, label %ok570 panic569: call void @finch_panic(ptr @.str.340, i64 68, ptr @.str.341) unreachable ok570: %t47 = getelementptr inbounds %S.lexer.Lexer, ptr %t45, i32 0, i32 2 %t48 = load i64, ptr %t47 %t49 = add i64 %t48, 2 call void @finch_str_sub(ptr %a40, ptr %a39, i64 %t44, i64 %t49, ptr @.str.337, i64 68) %t50 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t50, ptr %a51 %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a23, i32 0, i32 1 %t53 = load { ptr, i64, i64 }, ptr %a51 store i64 -1, ptr %a54 %t55 = load i64, ptr %t52 %t56 = load ptr, ptr %a23 store i64 0, ptr %a57 br label %find.cond571 find.cond571: %t58 = load i64, ptr %a57 %t59 = icmp slt i64 %t58, %t55 br i1 %t59, label %find.body572, label %find.end575 find.body572: %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t56, i64 %t58 %t61 = load { ptr, i64, i64 }, ptr %t60 store { ptr, i64, i64 } %t61, ptr %a62 store { ptr, i64, i64 } %t53, ptr %a63 %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) %t65 = icmp ne i32 %t64, 0 br i1 %t65, label %find.hit573, label %find.next574 find.hit573: store i64 %t58, ptr %a54 br label %find.end575 find.next574: %t66 = add i64 %t58, 1 store i64 %t66, ptr %a57 br label %find.cond571 find.end575: %t67 = load i64, ptr %a54 %t68 = icmp sge i64 %t67, 0 br i1 %t68, label %then576, label %endif578 then576: %t69 = load { ptr, i64, i64 }, ptr %a51 call void @finch.drop.arr_str(ptr %a23) ret { ptr, i64, i64 } %t69 endif578: call void @finch_str_drop(ptr %a51) br label %endif564 endif564: store { ptr, i64, i64 } { ptr @.str.342, i64 22, i64 0 }, ptr %a70 %t71 = load ptr, ptr %a1 %t72 = icmp eq ptr %t71, null br i1 %t72, label %panic579, label %ok580 panic579: call void @finch_panic(ptr @.str.343, i64 74, ptr @.str.344) unreachable ok580: %t73 = getelementptr inbounds %S.lexer.Lexer, ptr %t71, i32 0, i32 0 %t74 = load { ptr, i64, i64 }, ptr %t73 store { ptr, i64, i64 } %t74, ptr %a75 %t77 = load ptr, ptr %a1 %t78 = icmp eq ptr %t77, null br i1 %t78, label %panic581, label %ok582 panic581: call void @finch_panic(ptr @.str.346, i64 74, ptr @.str.347) unreachable ok582: %t79 = getelementptr inbounds %S.lexer.Lexer, ptr %t77, i32 0, i32 2 %t80 = load i64, ptr %t79 %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null br i1 %t82, label %panic583, label %ok584 panic583: call void @finch_panic(ptr @.str.348, i64 74, ptr @.str.349) unreachable ok584: %t83 = getelementptr inbounds %S.lexer.Lexer, ptr %t81, i32 0, i32 2 %t84 = load i64, ptr %t83 %t85 = add i64 %t84, 1 call void @finch_str_sub(ptr %a76, ptr %a75, i64 %t80, i64 %t85, ptr @.str.345, i64 74) %t86 = load { ptr, i64, i64 }, ptr %a76 store { ptr, i64, i64 } %t86, ptr %a87 %t88 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } %t88, ptr %a89 %t91 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t91, ptr %a92 %t93 = call i64 @finch_str_find(ptr %a89, ptr %a92) %t94 = icmp sge i64 %t93, 0 br i1 %t94, label %then585, label %endif587 then585: %t95 = load { ptr, i64, i64 }, ptr %a87 call void @finch_str_drop(ptr %a70) call void @finch.drop.arr_str(ptr %a23) ret { ptr, i64, i64 } %t95 endif587: call void @finch_str_drop(ptr %a87) call void @finch_str_drop(ptr %a70) call void @finch.drop.arr_str(ptr %a23) ret { ptr, i64, i64 } { ptr @.str.351, i64 0, i64 0 } } define internal i8 @finch.lexer.escape(ptr %p0, i8 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i8, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i8 %p1, ptr %a2 %t3 = load i8, ptr %a2 %t4 = icmp eq i8 %t3, 110 br i1 %t4, label %then588, label %endif590 then588: ret i8 10 endif590: %t5 = load i8, ptr %a2 %t6 = icmp eq i8 %t5, 116 br i1 %t6, label %then591, label %endif593 then591: ret i8 9 endif593: %t7 = load i8, ptr %a2 %t8 = icmp eq i8 %t7, 114 br i1 %t8, label %then594, label %endif596 then594: ret i8 13 endif596: %t9 = load i8, ptr %a2 %t10 = icmp eq i8 %t9, 48 br i1 %t10, label %then597, label %endif599 then597: %t11 = trunc i64 0 to i8 ret i8 %t11 endif599: %t12 = load i8, ptr %a2 %t13 = icmp eq i8 %t12, 92 br label %logic.from600 logic.from600: br i1 %t13, label %logic.end602, label %logic.rhs601 logic.rhs601: %t14 = load i8, ptr %a2 %t15 = icmp eq i8 %t14, 34 br label %logic.rend603 logic.rend603: br label %logic.end602 logic.end602: %t16 = phi i1 [ true, %logic.from600 ], [ %t15, %logic.rend603 ] br label %logic.from604 logic.from604: br i1 %t16, label %logic.end606, label %logic.rhs605 logic.rhs605: %t17 = load i8, ptr %a2 %t18 = icmp eq i8 %t17, 39 br label %logic.rend607 logic.rend607: br label %logic.end606 logic.end606: %t19 = phi i1 [ true, %logic.from604 ], [ %t18, %logic.rend607 ] br i1 %t19, label %then608, label %endif610 then608: %t20 = load i8, ptr %a2 ret i8 %t20 endif610: %t21 = load ptr, ptr %a1 %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null br i1 %t23, label %panic611, label %ok612 panic611: call void @finch_panic(ptr @.str.352, i64 97, ptr @.str.353) unreachable ok612: %t24 = getelementptr inbounds %S.lexer.Lexer, ptr %t22, i32 0, i32 3 %t25 = load i64, ptr %t24 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null br i1 %t27, label %panic613, label %ok614 panic613: call void @finch_panic(ptr @.str.354, i64 97, ptr @.str.355) unreachable ok614: %t28 = getelementptr inbounds %S.lexer.Lexer, ptr %t26, i32 0, i32 4 %t29 = load i64, ptr %t28 %t30 = sub i64 %t29, 1 %t31 = load i8, ptr %a2 call void @finch_str_from_char(ptr %a32, i8 signext %t31) %t33 = load { ptr, i64, i64 }, ptr %a32 store { ptr, i64, i64 } { ptr @.str.356, i64 16, i64 0 }, ptr %a35 store { ptr, i64, i64 } %t33, ptr %a36 call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) store { ptr, i64, i64 } %t33, ptr %a37 call void @finch_str_drop(ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a34 call void @finch.lexer.fail(ptr %t21, i64 %t25, i64 %t30, { ptr, i64, i64 } %t38) store { ptr, i64, i64 } %t38, ptr %a39 call void @finch_str_drop(ptr %a39) %t40 = load i8, ptr %a2 ret i8 %t40 } define internal void @finch.copy.S_lexer_Token(ptr %dst, ptr %src) { entry: %t1 = load %S.lexer.Token, ptr %src store %S.lexer.Token %t1, ptr %dst %t2 = getelementptr inbounds %S.lexer.Token, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.lexer.Token, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.lexer.Token, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.lexer.Token, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) ret void } define internal void @finch.drop.S_lexer_Lexer(ptr %a) { entry: %t1 = getelementptr inbounds %S.lexer.Lexer, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.lexer.Lexer, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) ret void } define internal { ptr, i64, i64 } @finch.lexer.lex({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca %S.lexer.Lexer, align 16 %a18 = alloca ptr, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca i8, align 16 %a98 = alloca i64, align 16 %a103 = alloca i64, align 16 %a169 = alloca %S.lexer.Token, align 16 %a177 = alloca i64, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca { ptr, i64, i64 }, align 16 %a406 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a415 = alloca { ptr, i64, i64 }, align 16 %a416 = alloca { ptr, i64, i64 }, align 16 %a418 = alloca { ptr, i64, i64 }, align 16 %a421 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca i8, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a436 = alloca { ptr, i64, i64 }, align 16 %a438 = alloca { ptr, i64, i64 }, align 16 %a465 = alloca i8, align 16 %a471 = alloca i8, align 16 %a478 = alloca { ptr, i64, i64 }, align 16 %a486 = alloca { ptr, i64, i64 }, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca i64, align 16 %a523 = alloca { ptr, i64, i64 }, align 16 %a528 = alloca { ptr, i64, i64 }, align 16 %a538 = alloca { ptr, i64, i64 }, align 16 %a539 = alloca { ptr, i64, i64 }, align 16 %a551 = alloca { ptr, i64, i64 }, align 16 %a552 = alloca { ptr, i64, i64 }, align 16 %a553 = alloca { ptr, i64, i64 }, align 16 %a554 = alloca { ptr, i64, i64 }, align 16 %a556 = alloca { ptr, i64, i64 }, align 16 %a557 = alloca { ptr, i64, i64 }, align 16 %a558 = alloca { ptr, i64, i64 }, align 16 %a559 = alloca { ptr, i64, i64 }, align 16 %a562 = alloca { ptr, i64, i64 }, align 16 %a563 = alloca { ptr, i64, i64 }, align 16 %a564 = alloca { ptr, i64, i64 }, align 16 %a565 = alloca { ptr, i64, i64 }, align 16 %a567 = alloca { ptr, i64, i64 }, align 16 %a570 = alloca i64, align 16 %a578 = alloca { ptr, i64, i64 }, align 16 %a579 = alloca { ptr, i64, i64 }, align 16 %a582 = alloca { ptr, i64, i64 }, align 16 %a585 = alloca { ptr, i64, i64 }, align 16 %a586 = alloca { ptr, i64, i64 }, align 16 %a589 = alloca { ptr, i64, i64 }, align 16 %a592 = alloca %S.lexer.Token, align 16 %a593 = alloca %S.lexer.Token, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 call void @finch_str_copy(ptr %a5, ptr %a4) %t6 = load { ptr, i64, i64 }, ptr %a5 %t7 = insertvalue %S.lexer.Lexer zeroinitializer, { ptr, i64, i64 } %t6, 0 %t8 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t8, ptr %a9 call void @finch_str_copy(ptr %a10, ptr %a9) %t11 = load { ptr, i64, i64 }, ptr %a10 %t12 = insertvalue %S.lexer.Lexer %t7, { ptr, i64, i64 } %t11, 1 %t13 = insertvalue %S.lexer.Lexer %t12, i64 0, 2 %t14 = insertvalue %S.lexer.Lexer %t13, i64 1, 3 %t15 = insertvalue %S.lexer.Lexer %t14, i64 1, 4 %t16 = insertvalue %S.lexer.Lexer %t15, i1 true, 5 store %S.lexer.Lexer %t16, ptr %a17 store ptr %a17, ptr %a18 store { ptr, i64, i64 } zeroinitializer, ptr %a19 br label %while.cond615 while.cond615: %t20 = load ptr, ptr %a18 %t21 = icmp eq ptr %t20, null br i1 %t21, label %panic618, label %ok619 panic618: call void @finch_panic(ptr @.str.357, i64 105, ptr @.str.358) unreachable ok619: %t22 = getelementptr inbounds %S.lexer.Lexer, ptr %t20, i32 0, i32 2 %t23 = load i64, ptr %t22 %t24 = load ptr, ptr %a18 %t25 = icmp eq ptr %t24, null br i1 %t25, label %panic620, label %ok621 panic620: call void @finch_panic(ptr @.str.359, i64 105, ptr @.str.360) unreachable ok621: %t26 = getelementptr inbounds %S.lexer.Lexer, ptr %t24, i32 0, i32 0 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i32 0, i32 1 %t28 = load i64, ptr %t27 %t29 = icmp slt i64 %t23, %t28 br i1 %t29, label %while.body616, label %while.end617 while.body616: %t30 = load ptr, ptr %a18 %t31 = icmp eq ptr %t30, null br i1 %t31, label %panic622, label %ok623 panic622: call void @finch_panic(ptr @.str.361, i64 106, ptr @.str.362) unreachable ok623: %t32 = getelementptr inbounds %S.lexer.Lexer, ptr %t30, i32 0, i32 0 %t33 = load ptr, ptr %a18 %t34 = icmp eq ptr %t33, null br i1 %t34, label %panic624, label %ok625 panic624: call void @finch_panic(ptr @.str.363, i64 106, ptr @.str.364) unreachable ok625: %t35 = getelementptr inbounds %S.lexer.Lexer, ptr %t33, i32 0, i32 2 %t36 = load i64, ptr %t35 %t37 = load { ptr, i64, i64 }, ptr %t32 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 br i1 %t39, label %range626, label %inrange627 range626: call void @finch_panic_index(ptr @.str.365, i64 106, i64 %t36, i64 %t38) unreachable inrange627: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds i8, ptr %t40, i64 %t36 %t42 = load i8, ptr %t41 store i8 %t42, ptr %a43 %t44 = load i8, ptr %a43 %t45 = icmp eq i8 %t44, 32 br label %logic.from628 logic.from628: br i1 %t45, label %logic.end630, label %logic.rhs629 logic.rhs629: %t46 = load i8, ptr %a43 %t47 = icmp eq i8 %t46, 9 br label %logic.rend631 logic.rend631: br label %logic.end630 logic.end630: %t48 = phi i1 [ true, %logic.from628 ], [ %t47, %logic.rend631 ] br label %logic.from632 logic.from632: br i1 %t48, label %logic.end634, label %logic.rhs633 logic.rhs633: %t49 = load i8, ptr %a43 %t50 = icmp eq i8 %t49, 10 br label %logic.rend635 logic.rend635: br label %logic.end634 logic.end634: %t51 = phi i1 [ true, %logic.from632 ], [ %t50, %logic.rend635 ] br label %logic.from636 logic.from636: br i1 %t51, label %logic.end638, label %logic.rhs637 logic.rhs637: %t52 = load i8, ptr %a43 %t53 = icmp eq i8 %t52, 13 br label %logic.rend639 logic.rend639: br label %logic.end638 logic.end638: %t54 = phi i1 [ true, %logic.from636 ], [ %t53, %logic.rend639 ] br i1 %t54, label %then640, label %endif642 then640: %t55 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t55) br label %while.cond615 endif642: %t56 = load i8, ptr %a43 %t57 = icmp eq i8 %t56, 47 br label %logic.from643 logic.from643: br i1 %t57, label %logic.rhs644, label %logic.end645 logic.rhs644: %t58 = load ptr, ptr %a18 %t59 = call i8 @finch.lexer.peek(ptr %t58, i64 1) %t60 = icmp eq i8 %t59, 47 br label %logic.rend646 logic.rend646: br label %logic.end645 logic.end645: %t61 = phi i1 [ false, %logic.from643 ], [ %t60, %logic.rend646 ] br i1 %t61, label %then647, label %endif649 then647: br label %while.cond650 while.cond650: %t62 = load ptr, ptr %a18 %t63 = icmp eq ptr %t62, null br i1 %t63, label %panic653, label %ok654 panic653: call void @finch_panic(ptr @.str.366, i64 112, ptr @.str.367) unreachable ok654: %t64 = getelementptr inbounds %S.lexer.Lexer, ptr %t62, i32 0, i32 2 %t65 = load i64, ptr %t64 %t66 = load ptr, ptr %a18 %t67 = icmp eq ptr %t66, null br i1 %t67, label %panic655, label %ok656 panic655: call void @finch_panic(ptr @.str.368, i64 112, ptr @.str.369) unreachable ok656: %t68 = getelementptr inbounds %S.lexer.Lexer, ptr %t66, i32 0, i32 0 %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i32 0, i32 1 %t70 = load i64, ptr %t69 %t71 = icmp slt i64 %t65, %t70 br label %logic.from657 logic.from657: br i1 %t71, label %logic.rhs658, label %logic.end659 logic.rhs658: %t72 = load ptr, ptr %a18 %t73 = icmp eq ptr %t72, null br i1 %t73, label %panic660, label %ok661 panic660: call void @finch_panic(ptr @.str.370, i64 112, ptr @.str.371) unreachable ok661: %t74 = getelementptr inbounds %S.lexer.Lexer, ptr %t72, i32 0, i32 0 %t75 = load ptr, ptr %a18 %t76 = icmp eq ptr %t75, null br i1 %t76, label %panic662, label %ok663 panic662: call void @finch_panic(ptr @.str.372, i64 112, ptr @.str.373) unreachable ok663: %t77 = getelementptr inbounds %S.lexer.Lexer, ptr %t75, i32 0, i32 2 %t78 = load i64, ptr %t77 %t79 = load { ptr, i64, i64 }, ptr %t74 %t80 = extractvalue { ptr, i64, i64 } %t79, 1 %t81 = icmp uge i64 %t78, %t80 br i1 %t81, label %range664, label %inrange665 range664: call void @finch_panic_index(ptr @.str.374, i64 112, i64 %t78, i64 %t80) unreachable inrange665: %t82 = extractvalue { ptr, i64, i64 } %t79, 0 %t83 = getelementptr inbounds i8, ptr %t82, i64 %t78 %t84 = load i8, ptr %t83 %t85 = icmp ne i8 %t84, 10 br label %logic.rend666 logic.rend666: br label %logic.end659 logic.end659: %t86 = phi i1 [ false, %logic.from657 ], [ %t85, %logic.rend666 ] br i1 %t86, label %while.body651, label %while.end652 while.body651: %t87 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t87) br label %while.cond650 while.end652: br label %while.cond615 endif649: %t88 = load i8, ptr %a43 %t89 = icmp eq i8 %t88, 47 br label %logic.from667 logic.from667: br i1 %t89, label %logic.rhs668, label %logic.end669 logic.rhs668: %t90 = load ptr, ptr %a18 %t91 = call i8 @finch.lexer.peek(ptr %t90, i64 1) %t92 = icmp eq i8 %t91, 42 br label %logic.rend670 logic.rend670: br label %logic.end669 logic.end669: %t93 = phi i1 [ false, %logic.from667 ], [ %t92, %logic.rend670 ] br i1 %t93, label %then671, label %endif673 then671: %t94 = load ptr, ptr %a18 %t95 = icmp eq ptr %t94, null br i1 %t95, label %panic674, label %ok675 panic674: call void @finch_panic(ptr @.str.375, i64 118, ptr @.str.376) unreachable ok675: %t96 = getelementptr inbounds %S.lexer.Lexer, ptr %t94, i32 0, i32 3 %t97 = load i64, ptr %t96 store i64 %t97, ptr %a98 %t99 = load ptr, ptr %a18 %t100 = icmp eq ptr %t99, null br i1 %t100, label %panic676, label %ok677 panic676: call void @finch_panic(ptr @.str.377, i64 119, ptr @.str.378) unreachable ok677: %t101 = getelementptr inbounds %S.lexer.Lexer, ptr %t99, i32 0, i32 4 %t102 = load i64, ptr %t101 store i64 %t102, ptr %a103 %t104 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t104) %t105 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t105) br label %while.cond678 while.cond678: %t106 = load ptr, ptr %a18 %t107 = icmp eq ptr %t106, null br i1 %t107, label %panic681, label %ok682 panic681: call void @finch_panic(ptr @.str.379, i64 122, ptr @.str.380) unreachable ok682: %t108 = getelementptr inbounds %S.lexer.Lexer, ptr %t106, i32 0, i32 2 %t109 = load i64, ptr %t108 %t110 = load ptr, ptr %a18 %t111 = icmp eq ptr %t110, null br i1 %t111, label %panic683, label %ok684 panic683: call void @finch_panic(ptr @.str.381, i64 122, ptr @.str.382) unreachable ok684: %t112 = getelementptr inbounds %S.lexer.Lexer, ptr %t110, i32 0, i32 0 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 %t114 = load i64, ptr %t113 %t115 = icmp slt i64 %t109, %t114 br label %logic.from685 logic.from685: br i1 %t115, label %logic.rhs686, label %logic.end687 logic.rhs686: %t116 = load ptr, ptr %a18 %t117 = icmp eq ptr %t116, null br i1 %t117, label %panic688, label %ok689 panic688: call void @finch_panic(ptr @.str.383, i64 122, ptr @.str.384) unreachable ok689: %t118 = getelementptr inbounds %S.lexer.Lexer, ptr %t116, i32 0, i32 0 %t119 = load ptr, ptr %a18 %t120 = icmp eq ptr %t119, null br i1 %t120, label %panic690, label %ok691 panic690: call void @finch_panic(ptr @.str.385, i64 122, ptr @.str.386) unreachable ok691: %t121 = getelementptr inbounds %S.lexer.Lexer, ptr %t119, i32 0, i32 2 %t122 = load i64, ptr %t121 %t123 = load { ptr, i64, i64 }, ptr %t118 %t124 = extractvalue { ptr, i64, i64 } %t123, 1 %t125 = icmp uge i64 %t122, %t124 br i1 %t125, label %range692, label %inrange693 range692: call void @finch_panic_index(ptr @.str.387, i64 122, i64 %t122, i64 %t124) unreachable inrange693: %t126 = extractvalue { ptr, i64, i64 } %t123, 0 %t127 = getelementptr inbounds i8, ptr %t126, i64 %t122 %t128 = load i8, ptr %t127 %t129 = icmp eq i8 %t128, 42 br label %logic.from694 logic.from694: br i1 %t129, label %logic.rhs695, label %logic.end696 logic.rhs695: %t130 = load ptr, ptr %a18 %t131 = call i8 @finch.lexer.peek(ptr %t130, i64 1) %t132 = icmp eq i8 %t131, 47 br label %logic.rend697 logic.rend697: br label %logic.end696 logic.end696: %t133 = phi i1 [ false, %logic.from694 ], [ %t132, %logic.rend697 ] %t134 = xor i1 %t133, true br label %logic.rend698 logic.rend698: br label %logic.end687 logic.end687: %t135 = phi i1 [ false, %logic.from685 ], [ %t134, %logic.rend698 ] br i1 %t135, label %while.body679, label %while.end680 while.body679: %t136 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t136) br label %while.cond678 while.end680: %t137 = load ptr, ptr %a18 %t138 = icmp eq ptr %t137, null br i1 %t138, label %panic699, label %ok700 panic699: call void @finch_panic(ptr @.str.388, i64 125, ptr @.str.389) unreachable ok700: %t139 = getelementptr inbounds %S.lexer.Lexer, ptr %t137, i32 0, i32 2 %t140 = load i64, ptr %t139 %t141 = load ptr, ptr %a18 %t142 = icmp eq ptr %t141, null br i1 %t142, label %panic701, label %ok702 panic701: call void @finch_panic(ptr @.str.390, i64 125, ptr @.str.391) unreachable ok702: %t143 = getelementptr inbounds %S.lexer.Lexer, ptr %t141, i32 0, i32 0 %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t143, i32 0, i32 1 %t145 = load i64, ptr %t144 %t146 = icmp sge i64 %t140, %t145 br i1 %t146, label %then703, label %endif705 then703: %t147 = load ptr, ptr %a18 %t148 = load i64, ptr %a98 %t149 = load i64, ptr %a103 call void @finch.lexer.fail(ptr %t147, i64 %t148, i64 %t149, { ptr, i64, i64 } { ptr @.str.392, i64 36, i64 0 }) br label %endif705 endif705: %t150 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t150) %t151 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t151) br label %while.cond615 endif673: %t152 = insertvalue %S.lexer.Token zeroinitializer, { ptr, i64, i64 } { ptr @.str.393, i64 0, i64 0 }, 0 %t153 = insertvalue %S.lexer.Token %t152, { ptr, i64, i64 } { ptr @.str.394, i64 0, i64 0 }, 1 %t154 = load ptr, ptr %a18 %t155 = icmp eq ptr %t154, null br i1 %t155, label %panic706, label %ok707 panic706: call void @finch_panic(ptr @.str.395, i64 133, ptr @.str.396) unreachable ok707: %t156 = getelementptr inbounds %S.lexer.Lexer, ptr %t154, i32 0, i32 3 %t157 = load i64, ptr %t156 %t158 = insertvalue %S.lexer.Token %t153, i64 %t157, 2 %t159 = load ptr, ptr %a18 %t160 = icmp eq ptr %t159, null br i1 %t160, label %panic708, label %ok709 panic708: call void @finch_panic(ptr @.str.397, i64 133, ptr @.str.398) unreachable ok709: %t161 = getelementptr inbounds %S.lexer.Lexer, ptr %t159, i32 0, i32 4 %t162 = load i64, ptr %t161 %t163 = insertvalue %S.lexer.Token %t158, i64 %t162, 3 %t164 = load ptr, ptr %a18 %t165 = icmp eq ptr %t164, null br i1 %t165, label %panic710, label %ok711 panic710: call void @finch_panic(ptr @.str.399, i64 133, ptr @.str.400) unreachable ok711: %t166 = getelementptr inbounds %S.lexer.Lexer, ptr %t164, i32 0, i32 5 %t167 = load i1, ptr %t166 %t168 = insertvalue %S.lexer.Token %t163, i1 %t167, 4 store %S.lexer.Token %t168, ptr %a169 %t170 = load ptr, ptr %a18 %t171 = icmp eq ptr %t170, null br i1 %t171, label %panic712, label %ok713 panic712: call void @finch_panic(ptr @.str.401, i64 134, ptr @.str.402) unreachable ok713: %t172 = getelementptr inbounds %S.lexer.Lexer, ptr %t170, i32 0, i32 5 store i1 false, ptr %t172 %t173 = load ptr, ptr %a18 %t174 = icmp eq ptr %t173, null br i1 %t174, label %panic714, label %ok715 panic714: call void @finch_panic(ptr @.str.403, i64 135, ptr @.str.404) unreachable ok715: %t175 = getelementptr inbounds %S.lexer.Lexer, ptr %t173, i32 0, i32 2 %t176 = load i64, ptr %t175 store i64 %t176, ptr %a177 %t178 = load i8, ptr %a43 %t179 = call i1 @finch.lexer.isAlpha(i8 %t178) br i1 %t179, label %then716, label %else717 then716: br label %while.cond719 while.cond719: %t180 = load ptr, ptr %a18 %t181 = icmp eq ptr %t180, null br i1 %t181, label %panic722, label %ok723 panic722: call void @finch_panic(ptr @.str.405, i64 137, ptr @.str.406) unreachable ok723: %t182 = getelementptr inbounds %S.lexer.Lexer, ptr %t180, i32 0, i32 2 %t183 = load i64, ptr %t182 %t184 = load ptr, ptr %a18 %t185 = icmp eq ptr %t184, null br i1 %t185, label %panic724, label %ok725 panic724: call void @finch_panic(ptr @.str.407, i64 137, ptr @.str.408) unreachable ok725: %t186 = getelementptr inbounds %S.lexer.Lexer, ptr %t184, i32 0, i32 0 %t187 = getelementptr inbounds { ptr, i64, i64 }, ptr %t186, i32 0, i32 1 %t188 = load i64, ptr %t187 %t189 = icmp slt i64 %t183, %t188 br label %logic.from726 logic.from726: br i1 %t189, label %logic.rhs727, label %logic.end728 logic.rhs727: %t190 = load ptr, ptr %a18 %t191 = icmp eq ptr %t190, null br i1 %t191, label %panic729, label %ok730 panic729: call void @finch_panic(ptr @.str.409, i64 137, ptr @.str.410) unreachable ok730: %t192 = getelementptr inbounds %S.lexer.Lexer, ptr %t190, i32 0, i32 0 %t193 = load ptr, ptr %a18 %t194 = icmp eq ptr %t193, null br i1 %t194, label %panic731, label %ok732 panic731: call void @finch_panic(ptr @.str.411, i64 137, ptr @.str.412) unreachable ok732: %t195 = getelementptr inbounds %S.lexer.Lexer, ptr %t193, i32 0, i32 2 %t196 = load i64, ptr %t195 %t197 = load { ptr, i64, i64 }, ptr %t192 %t198 = extractvalue { ptr, i64, i64 } %t197, 1 %t199 = icmp uge i64 %t196, %t198 br i1 %t199, label %range733, label %inrange734 range733: call void @finch_panic_index(ptr @.str.413, i64 137, i64 %t196, i64 %t198) unreachable inrange734: %t200 = extractvalue { ptr, i64, i64 } %t197, 0 %t201 = getelementptr inbounds i8, ptr %t200, i64 %t196 %t202 = load i8, ptr %t201 %t203 = call i1 @finch.lexer.isAlpha(i8 %t202) br label %logic.from735 logic.from735: br i1 %t203, label %logic.end737, label %logic.rhs736 logic.rhs736: %t204 = load ptr, ptr %a18 %t205 = icmp eq ptr %t204, null br i1 %t205, label %panic738, label %ok739 panic738: call void @finch_panic(ptr @.str.414, i64 137, ptr @.str.415) unreachable ok739: %t206 = getelementptr inbounds %S.lexer.Lexer, ptr %t204, i32 0, i32 0 %t207 = load ptr, ptr %a18 %t208 = icmp eq ptr %t207, null br i1 %t208, label %panic740, label %ok741 panic740: call void @finch_panic(ptr @.str.416, i64 137, ptr @.str.417) unreachable ok741: %t209 = getelementptr inbounds %S.lexer.Lexer, ptr %t207, i32 0, i32 2 %t210 = load i64, ptr %t209 %t211 = load { ptr, i64, i64 }, ptr %t206 %t212 = extractvalue { ptr, i64, i64 } %t211, 1 %t213 = icmp uge i64 %t210, %t212 br i1 %t213, label %range742, label %inrange743 range742: call void @finch_panic_index(ptr @.str.418, i64 137, i64 %t210, i64 %t212) unreachable inrange743: %t214 = extractvalue { ptr, i64, i64 } %t211, 0 %t215 = getelementptr inbounds i8, ptr %t214, i64 %t210 %t216 = load i8, ptr %t215 %t217 = call i1 @finch.lexer.isDigit(i8 %t216) br label %logic.rend744 logic.rend744: br label %logic.end737 logic.end737: %t218 = phi i1 [ true, %logic.from735 ], [ %t217, %logic.rend744 ] br label %logic.rend745 logic.rend745: br label %logic.end728 logic.end728: %t219 = phi i1 [ false, %logic.from726 ], [ %t218, %logic.rend745 ] br i1 %t219, label %while.body720, label %while.end721 while.body720: %t220 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t220) br label %while.cond719 while.end721: %t221 = load ptr, ptr %a18 %t222 = icmp eq ptr %t221, null br i1 %t222, label %panic746, label %ok747 panic746: call void @finch_panic(ptr @.str.419, i64 140, ptr @.str.420) unreachable ok747: %t223 = getelementptr inbounds %S.lexer.Lexer, ptr %t221, i32 0, i32 0 %t224 = load { ptr, i64, i64 }, ptr %t223 store { ptr, i64, i64 } %t224, ptr %a225 %t227 = load i64, ptr %a177 %t228 = load ptr, ptr %a18 %t229 = icmp eq ptr %t228, null br i1 %t229, label %panic748, label %ok749 panic748: call void @finch_panic(ptr @.str.422, i64 140, ptr @.str.423) unreachable ok749: %t230 = getelementptr inbounds %S.lexer.Lexer, ptr %t228, i32 0, i32 2 %t231 = load i64, ptr %t230 call void @finch_str_sub(ptr %a226, ptr %a225, i64 %t227, i64 %t231, ptr @.str.421, i64 140) %t232 = load { ptr, i64, i64 }, ptr %a226 %t233 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 %t234 = load { ptr, i64, i64 }, ptr %t233 store { ptr, i64, i64 } %t232, ptr %t233 store { ptr, i64, i64 } %t234, ptr %a235 call void @finch_str_drop(ptr %a235) %t236 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 %t237 = load { ptr, i64, i64 }, ptr %t236 store { ptr, i64, i64 } { ptr @.str.424, i64 5, i64 0 }, ptr %t236 store { ptr, i64, i64 } %t237, ptr %a238 call void @finch_str_drop(ptr %a238) %t239 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 %t240 = load { ptr, i64, i64 }, ptr %t239 %t241 = call i1 @finch.lexer.isKeyword({ ptr, i64, i64 } %t240) br i1 %t241, label %then750, label %endif752 then750: %t242 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 %t243 = load { ptr, i64, i64 }, ptr %t242 %t244 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 store { ptr, i64, i64 } %t243, ptr %a245 call void @finch_str_copy(ptr %a246, ptr %a245) %t247 = load { ptr, i64, i64 }, ptr %a246 %t248 = load { ptr, i64, i64 }, ptr %t244 store { ptr, i64, i64 } %t247, ptr %t244 store { ptr, i64, i64 } %t248, ptr %a249 call void @finch_str_drop(ptr %a249) br label %endif752 endif752: br label %endif718 else717: %t250 = load i8, ptr %a43 %t251 = call i1 @finch.lexer.isDigit(i8 %t250) br i1 %t251, label %then753, label %else754 then753: %t252 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 %t253 = load { ptr, i64, i64 }, ptr %t252 store { ptr, i64, i64 } { ptr @.str.425, i64 3, i64 0 }, ptr %t252 store { ptr, i64, i64 } %t253, ptr %a254 call void @finch_str_drop(ptr %a254) %t255 = load i8, ptr %a43 %t256 = icmp eq i8 %t255, 48 br label %logic.from756 logic.from756: br i1 %t256, label %logic.rhs757, label %logic.end758 logic.rhs757: %t257 = load ptr, ptr %a18 %t258 = call i8 @finch.lexer.peek(ptr %t257, i64 1) %t259 = icmp eq i8 %t258, 120 br label %logic.from759 logic.from759: br i1 %t259, label %logic.end761, label %logic.rhs760 logic.rhs760: %t260 = load ptr, ptr %a18 %t261 = call i8 @finch.lexer.peek(ptr %t260, i64 1) %t262 = icmp eq i8 %t261, 88 br label %logic.rend762 logic.rend762: br label %logic.end761 logic.end761: %t263 = phi i1 [ true, %logic.from759 ], [ %t262, %logic.rend762 ] br label %logic.rend763 logic.rend763: br label %logic.end758 logic.end758: %t264 = phi i1 [ false, %logic.from756 ], [ %t263, %logic.rend763 ] br i1 %t264, label %then764, label %else765 then764: %t265 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t265) %t266 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t266) br label %while.cond767 while.cond767: %t267 = load ptr, ptr %a18 %t268 = icmp eq ptr %t267, null br i1 %t268, label %panic770, label %ok771 panic770: call void @finch_panic(ptr @.str.426, i64 150, ptr @.str.427) unreachable ok771: %t269 = getelementptr inbounds %S.lexer.Lexer, ptr %t267, i32 0, i32 2 %t270 = load i64, ptr %t269 %t271 = load ptr, ptr %a18 %t272 = icmp eq ptr %t271, null br i1 %t272, label %panic772, label %ok773 panic772: call void @finch_panic(ptr @.str.428, i64 150, ptr @.str.429) unreachable ok773: %t273 = getelementptr inbounds %S.lexer.Lexer, ptr %t271, i32 0, i32 0 %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i32 0, i32 1 %t275 = load i64, ptr %t274 %t276 = icmp slt i64 %t270, %t275 br label %logic.from774 logic.from774: br i1 %t276, label %logic.rhs775, label %logic.end776 logic.rhs775: %t277 = load ptr, ptr %a18 %t278 = icmp eq ptr %t277, null br i1 %t278, label %panic777, label %ok778 panic777: call void @finch_panic(ptr @.str.430, i64 150, ptr @.str.431) unreachable ok778: %t279 = getelementptr inbounds %S.lexer.Lexer, ptr %t277, i32 0, i32 0 %t280 = load ptr, ptr %a18 %t281 = icmp eq ptr %t280, null br i1 %t281, label %panic779, label %ok780 panic779: call void @finch_panic(ptr @.str.432, i64 150, ptr @.str.433) unreachable ok780: %t282 = getelementptr inbounds %S.lexer.Lexer, ptr %t280, i32 0, i32 2 %t283 = load i64, ptr %t282 %t284 = load { ptr, i64, i64 }, ptr %t279 %t285 = extractvalue { ptr, i64, i64 } %t284, 1 %t286 = icmp uge i64 %t283, %t285 br i1 %t286, label %range781, label %inrange782 range781: call void @finch_panic_index(ptr @.str.434, i64 150, i64 %t283, i64 %t285) unreachable inrange782: %t287 = extractvalue { ptr, i64, i64 } %t284, 0 %t288 = getelementptr inbounds i8, ptr %t287, i64 %t283 %t289 = load i8, ptr %t288 %t290 = call i1 @finch.lexer.isHex(i8 %t289) br label %logic.from783 logic.from783: br i1 %t290, label %logic.end785, label %logic.rhs784 logic.rhs784: %t291 = load ptr, ptr %a18 %t292 = icmp eq ptr %t291, null br i1 %t292, label %panic786, label %ok787 panic786: call void @finch_panic(ptr @.str.435, i64 150, ptr @.str.436) unreachable ok787: %t293 = getelementptr inbounds %S.lexer.Lexer, ptr %t291, i32 0, i32 0 %t294 = load ptr, ptr %a18 %t295 = icmp eq ptr %t294, null br i1 %t295, label %panic788, label %ok789 panic788: call void @finch_panic(ptr @.str.437, i64 150, ptr @.str.438) unreachable ok789: %t296 = getelementptr inbounds %S.lexer.Lexer, ptr %t294, i32 0, i32 2 %t297 = load i64, ptr %t296 %t298 = load { ptr, i64, i64 }, ptr %t293 %t299 = extractvalue { ptr, i64, i64 } %t298, 1 %t300 = icmp uge i64 %t297, %t299 br i1 %t300, label %range790, label %inrange791 range790: call void @finch_panic_index(ptr @.str.439, i64 150, i64 %t297, i64 %t299) unreachable inrange791: %t301 = extractvalue { ptr, i64, i64 } %t298, 0 %t302 = getelementptr inbounds i8, ptr %t301, i64 %t297 %t303 = load i8, ptr %t302 %t304 = icmp eq i8 %t303, 95 br label %logic.rend792 logic.rend792: br label %logic.end785 logic.end785: %t305 = phi i1 [ true, %logic.from783 ], [ %t304, %logic.rend792 ] br label %logic.rend793 logic.rend793: br label %logic.end776 logic.end776: %t306 = phi i1 [ false, %logic.from774 ], [ %t305, %logic.rend793 ] br i1 %t306, label %while.body768, label %while.end769 while.body768: %t307 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t307) br label %while.cond767 while.end769: br label %endif766 else765: br label %while.cond794 while.cond794: %t308 = load ptr, ptr %a18 %t309 = icmp eq ptr %t308, null br i1 %t309, label %panic797, label %ok798 panic797: call void @finch_panic(ptr @.str.440, i64 154, ptr @.str.441) unreachable ok798: %t310 = getelementptr inbounds %S.lexer.Lexer, ptr %t308, i32 0, i32 2 %t311 = load i64, ptr %t310 %t312 = load ptr, ptr %a18 %t313 = icmp eq ptr %t312, null br i1 %t313, label %panic799, label %ok800 panic799: call void @finch_panic(ptr @.str.442, i64 154, ptr @.str.443) unreachable ok800: %t314 = getelementptr inbounds %S.lexer.Lexer, ptr %t312, i32 0, i32 0 %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i32 0, i32 1 %t316 = load i64, ptr %t315 %t317 = icmp slt i64 %t311, %t316 br label %logic.from801 logic.from801: br i1 %t317, label %logic.rhs802, label %logic.end803 logic.rhs802: %t318 = load ptr, ptr %a18 %t319 = icmp eq ptr %t318, null br i1 %t319, label %panic804, label %ok805 panic804: call void @finch_panic(ptr @.str.444, i64 154, ptr @.str.445) unreachable ok805: %t320 = getelementptr inbounds %S.lexer.Lexer, ptr %t318, i32 0, i32 0 %t321 = load ptr, ptr %a18 %t322 = icmp eq ptr %t321, null br i1 %t322, label %panic806, label %ok807 panic806: call void @finch_panic(ptr @.str.446, i64 154, ptr @.str.447) unreachable ok807: %t323 = getelementptr inbounds %S.lexer.Lexer, ptr %t321, i32 0, i32 2 %t324 = load i64, ptr %t323 %t325 = load { ptr, i64, i64 }, ptr %t320 %t326 = extractvalue { ptr, i64, i64 } %t325, 1 %t327 = icmp uge i64 %t324, %t326 br i1 %t327, label %range808, label %inrange809 range808: call void @finch_panic_index(ptr @.str.448, i64 154, i64 %t324, i64 %t326) unreachable inrange809: %t328 = extractvalue { ptr, i64, i64 } %t325, 0 %t329 = getelementptr inbounds i8, ptr %t328, i64 %t324 %t330 = load i8, ptr %t329 %t331 = call i1 @finch.lexer.isDigit(i8 %t330) br label %logic.from810 logic.from810: br i1 %t331, label %logic.end812, label %logic.rhs811 logic.rhs811: %t332 = load ptr, ptr %a18 %t333 = icmp eq ptr %t332, null br i1 %t333, label %panic813, label %ok814 panic813: call void @finch_panic(ptr @.str.449, i64 154, ptr @.str.450) unreachable ok814: %t334 = getelementptr inbounds %S.lexer.Lexer, ptr %t332, i32 0, i32 0 %t335 = load ptr, ptr %a18 %t336 = icmp eq ptr %t335, null br i1 %t336, label %panic815, label %ok816 panic815: call void @finch_panic(ptr @.str.451, i64 154, ptr @.str.452) unreachable ok816: %t337 = getelementptr inbounds %S.lexer.Lexer, ptr %t335, i32 0, i32 2 %t338 = load i64, ptr %t337 %t339 = load { ptr, i64, i64 }, ptr %t334 %t340 = extractvalue { ptr, i64, i64 } %t339, 1 %t341 = icmp uge i64 %t338, %t340 br i1 %t341, label %range817, label %inrange818 range817: call void @finch_panic_index(ptr @.str.453, i64 154, i64 %t338, i64 %t340) unreachable inrange818: %t342 = extractvalue { ptr, i64, i64 } %t339, 0 %t343 = getelementptr inbounds i8, ptr %t342, i64 %t338 %t344 = load i8, ptr %t343 %t345 = icmp eq i8 %t344, 95 br label %logic.rend819 logic.rend819: br label %logic.end812 logic.end812: %t346 = phi i1 [ true, %logic.from810 ], [ %t345, %logic.rend819 ] br label %logic.rend820 logic.rend820: br label %logic.end803 logic.end803: %t347 = phi i1 [ false, %logic.from801 ], [ %t346, %logic.rend820 ] br i1 %t347, label %while.body795, label %while.end796 while.body795: %t348 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t348) br label %while.cond794 while.end796: %t349 = load ptr, ptr %a18 %t350 = call i8 @finch.lexer.peek(ptr %t349, i64 0) %t351 = icmp eq i8 %t350, 46 br label %logic.from821 logic.from821: br i1 %t351, label %logic.rhs822, label %logic.end823 logic.rhs822: %t352 = load ptr, ptr %a18 %t353 = call i8 @finch.lexer.peek(ptr %t352, i64 1) %t354 = call i1 @finch.lexer.isDigit(i8 %t353) br label %logic.rend824 logic.rend824: br label %logic.end823 logic.end823: %t355 = phi i1 [ false, %logic.from821 ], [ %t354, %logic.rend824 ] br i1 %t355, label %then825, label %endif827 then825: %t356 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 %t357 = load { ptr, i64, i64 }, ptr %t356 store { ptr, i64, i64 } { ptr @.str.454, i64 5, i64 0 }, ptr %t356 store { ptr, i64, i64 } %t357, ptr %a358 call void @finch_str_drop(ptr %a358) %t359 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t359) br label %while.cond828 while.cond828: %t360 = load ptr, ptr %a18 %t361 = icmp eq ptr %t360, null br i1 %t361, label %panic831, label %ok832 panic831: call void @finch_panic(ptr @.str.455, i64 160, ptr @.str.456) unreachable ok832: %t362 = getelementptr inbounds %S.lexer.Lexer, ptr %t360, i32 0, i32 2 %t363 = load i64, ptr %t362 %t364 = load ptr, ptr %a18 %t365 = icmp eq ptr %t364, null br i1 %t365, label %panic833, label %ok834 panic833: call void @finch_panic(ptr @.str.457, i64 160, ptr @.str.458) unreachable ok834: %t366 = getelementptr inbounds %S.lexer.Lexer, ptr %t364, i32 0, i32 0 %t367 = getelementptr inbounds { ptr, i64, i64 }, ptr %t366, i32 0, i32 1 %t368 = load i64, ptr %t367 %t369 = icmp slt i64 %t363, %t368 br label %logic.from835 logic.from835: br i1 %t369, label %logic.rhs836, label %logic.end837 logic.rhs836: %t370 = load ptr, ptr %a18 %t371 = icmp eq ptr %t370, null br i1 %t371, label %panic838, label %ok839 panic838: call void @finch_panic(ptr @.str.459, i64 160, ptr @.str.460) unreachable ok839: %t372 = getelementptr inbounds %S.lexer.Lexer, ptr %t370, i32 0, i32 0 %t373 = load ptr, ptr %a18 %t374 = icmp eq ptr %t373, null br i1 %t374, label %panic840, label %ok841 panic840: call void @finch_panic(ptr @.str.461, i64 160, ptr @.str.462) unreachable ok841: %t375 = getelementptr inbounds %S.lexer.Lexer, ptr %t373, i32 0, i32 2 %t376 = load i64, ptr %t375 %t377 = load { ptr, i64, i64 }, ptr %t372 %t378 = extractvalue { ptr, i64, i64 } %t377, 1 %t379 = icmp uge i64 %t376, %t378 br i1 %t379, label %range842, label %inrange843 range842: call void @finch_panic_index(ptr @.str.463, i64 160, i64 %t376, i64 %t378) unreachable inrange843: %t380 = extractvalue { ptr, i64, i64 } %t377, 0 %t381 = getelementptr inbounds i8, ptr %t380, i64 %t376 %t382 = load i8, ptr %t381 %t383 = call i1 @finch.lexer.isDigit(i8 %t382) br label %logic.from844 logic.from844: br i1 %t383, label %logic.end846, label %logic.rhs845 logic.rhs845: %t384 = load ptr, ptr %a18 %t385 = icmp eq ptr %t384, null br i1 %t385, label %panic847, label %ok848 panic847: call void @finch_panic(ptr @.str.464, i64 160, ptr @.str.465) unreachable ok848: %t386 = getelementptr inbounds %S.lexer.Lexer, ptr %t384, i32 0, i32 0 %t387 = load ptr, ptr %a18 %t388 = icmp eq ptr %t387, null br i1 %t388, label %panic849, label %ok850 panic849: call void @finch_panic(ptr @.str.466, i64 160, ptr @.str.467) unreachable ok850: %t389 = getelementptr inbounds %S.lexer.Lexer, ptr %t387, i32 0, i32 2 %t390 = load i64, ptr %t389 %t391 = load { ptr, i64, i64 }, ptr %t386 %t392 = extractvalue { ptr, i64, i64 } %t391, 1 %t393 = icmp uge i64 %t390, %t392 br i1 %t393, label %range851, label %inrange852 range851: call void @finch_panic_index(ptr @.str.468, i64 160, i64 %t390, i64 %t392) unreachable inrange852: %t394 = extractvalue { ptr, i64, i64 } %t391, 0 %t395 = getelementptr inbounds i8, ptr %t394, i64 %t390 %t396 = load i8, ptr %t395 %t397 = icmp eq i8 %t396, 95 br label %logic.rend853 logic.rend853: br label %logic.end846 logic.end846: %t398 = phi i1 [ true, %logic.from844 ], [ %t397, %logic.rend853 ] br label %logic.rend854 logic.rend854: br label %logic.end837 logic.end837: %t399 = phi i1 [ false, %logic.from835 ], [ %t398, %logic.rend854 ] br i1 %t399, label %while.body829, label %while.end830 while.body829: %t400 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t400) br label %while.cond828 while.end830: br label %endif827 endif827: br label %endif766 endif766: %t401 = load ptr, ptr %a18 %t402 = icmp eq ptr %t401, null br i1 %t402, label %panic855, label %ok856 panic855: call void @finch_panic(ptr @.str.469, i64 165, ptr @.str.470) unreachable ok856: %t403 = getelementptr inbounds %S.lexer.Lexer, ptr %t401, i32 0, i32 0 %t404 = load { ptr, i64, i64 }, ptr %t403 store { ptr, i64, i64 } %t404, ptr %a405 %t407 = load i64, ptr %a177 %t408 = load ptr, ptr %a18 %t409 = icmp eq ptr %t408, null br i1 %t409, label %panic857, label %ok858 panic857: call void @finch_panic(ptr @.str.472, i64 165, ptr @.str.473) unreachable ok858: %t410 = getelementptr inbounds %S.lexer.Lexer, ptr %t408, i32 0, i32 2 %t411 = load i64, ptr %t410 call void @finch_str_sub(ptr %a406, ptr %a405, i64 %t407, i64 %t411, ptr @.str.471, i64 165) %t412 = load { ptr, i64, i64 }, ptr %a406 store { ptr, i64, i64 } %t412, ptr %a413 store { ptr, i64, i64 } { ptr @.str.475, i64 1, i64 0 }, ptr %a415 store { ptr, i64, i64 } { ptr @.str.476, i64 0, i64 0 }, ptr %a416 call void @finch_str_replace(ptr %a414, ptr %a413, ptr %a415, ptr %a416) %t417 = load { ptr, i64, i64 }, ptr %a414 store { ptr, i64, i64 } %t412, ptr %a418 call void @finch_str_drop(ptr %a418) %t419 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 %t420 = load { ptr, i64, i64 }, ptr %t419 store { ptr, i64, i64 } %t417, ptr %t419 store { ptr, i64, i64 } %t420, ptr %a421 call void @finch_str_drop(ptr %a421) br label %endif755 else754: %t422 = load i8, ptr %a43 %t423 = icmp eq i8 %t422, 34 br label %logic.from859 logic.from859: br i1 %t423, label %logic.end861, label %logic.rhs860 logic.rhs860: %t424 = load i8, ptr %a43 %t425 = icmp eq i8 %t424, 39 br label %logic.rend862 logic.rend862: br label %logic.end861 logic.end861: %t426 = phi i1 [ true, %logic.from859 ], [ %t425, %logic.rend862 ] br i1 %t426, label %then863, label %else864 then863: %t427 = load i8, ptr %a43 store i8 %t427, ptr %a428 %t429 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 %t430 = load { ptr, i64, i64 }, ptr %t429 store { ptr, i64, i64 } { ptr @.str.477, i64 6, i64 0 }, ptr %t429 store { ptr, i64, i64 } %t430, ptr %a431 call void @finch_str_drop(ptr %a431) %t432 = load i8, ptr %a428 %t433 = icmp eq i8 %t432, 39 br i1 %t433, label %then866, label %endif868 then866: %t434 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 %t435 = load { ptr, i64, i64 }, ptr %t434 store { ptr, i64, i64 } { ptr @.str.478, i64 4, i64 0 }, ptr %t434 store { ptr, i64, i64 } %t435, ptr %a436 call void @finch_str_drop(ptr %a436) br label %endif868 endif868: %t437 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t437) store { ptr, i64, i64 } zeroinitializer, ptr %a438 br label %while.cond869 while.cond869: %t439 = load ptr, ptr %a18 %t440 = call i8 @finch.lexer.peek(ptr %t439, i64 0) %t441 = load i8, ptr %a428 %t442 = icmp ne i8 %t440, %t441 br i1 %t442, label %while.body870, label %while.end871 while.body870: %t443 = load ptr, ptr %a18 %t444 = call i8 @finch.lexer.peek(ptr %t443, i64 0) %t445 = trunc i64 0 to i8 %t446 = icmp eq i8 %t444, %t445 br label %logic.from872 logic.from872: br i1 %t446, label %logic.end874, label %logic.rhs873 logic.rhs873: %t447 = load ptr, ptr %a18 %t448 = call i8 @finch.lexer.peek(ptr %t447, i64 0) %t449 = icmp eq i8 %t448, 10 br label %logic.rend875 logic.rend875: br label %logic.end874 logic.end874: %t450 = phi i1 [ true, %logic.from872 ], [ %t449, %logic.rend875 ] br i1 %t450, label %then876, label %endif878 then876: %t451 = load i8, ptr %a428 %t452 = icmp eq i8 %t451, 34 br i1 %t452, label %then879, label %endif881 then879: %t453 = load ptr, ptr %a18 %t454 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 %t455 = load i64, ptr %t454 %t456 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 %t457 = load i64, ptr %t456 call void @finch.lexer.fail(ptr %t453, i64 %t455, i64 %t457, { ptr, i64, i64 } { ptr @.str.479, i64 34, i64 0 }) br label %endif881 endif881: %t458 = load ptr, ptr %a18 %t459 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 %t460 = load i64, ptr %t459 %t461 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 %t462 = load i64, ptr %t461 call void @finch.lexer.fail(ptr %t458, i64 %t460, i64 %t462, { ptr, i64, i64 } { ptr @.str.480, i64 32, i64 0 }) br label %endif878 endif878: %t463 = load ptr, ptr %a18 %t464 = call i8 @finch.lexer.peek(ptr %t463, i64 0) store i8 %t464, ptr %a465 %t466 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t466) %t467 = load i8, ptr %a465 %t468 = icmp eq i8 %t467, 92 br i1 %t468, label %then882, label %endif884 then882: %t469 = load ptr, ptr %a18 %t470 = call i8 @finch.lexer.peek(ptr %t469, i64 0) store i8 %t470, ptr %a471 %t472 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t472) %t473 = load ptr, ptr %a18 %t474 = load i8, ptr %a471 %t475 = call i8 @finch.lexer.escape(ptr %t473, i8 %t474) store i8 %t475, ptr %a465 br label %endif884 endif884: %t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %a438, i32 0, i32 1 %t477 = load i8, ptr %a465 call void @finch_str_from_char(ptr %a478, i8 signext %t477) %t479 = load { ptr, i64, i64 }, ptr %a478 %t480 = load i64, ptr %t476 %t481 = add i64 %t480, 1 call void @finch_arr_reserve(ptr %a438, i64 %t481, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t482 = load ptr, ptr %a438 %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i64 %t480 store { ptr, i64, i64 } %t479, ptr %t483 store i64 %t481, ptr %t476 br label %while.cond869 while.end871: %t484 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t484) %t485 = getelementptr inbounds { ptr, i64, i64 }, ptr %a438, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.481, i64 0, i64 0 }, ptr %a486 call void @finch_str_join(ptr %a487, ptr %a438, ptr %a486) %t488 = load { ptr, i64, i64 }, ptr %a487 %t489 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 %t490 = load { ptr, i64, i64 }, ptr %t489 store { ptr, i64, i64 } %t488, ptr %t489 store { ptr, i64, i64 } %t490, ptr %a491 call void @finch_str_drop(ptr %a491) %t492 = load i8, ptr %a428 %t493 = icmp eq i8 %t492, 39 br label %logic.from885 logic.from885: br i1 %t493, label %logic.rhs886, label %logic.end887 logic.rhs886: %t494 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 %t495 = getelementptr inbounds { ptr, i64, i64 }, ptr %t494, i32 0, i32 1 %t496 = load i64, ptr %t495 %t497 = icmp ne i64 %t496, 1 br label %logic.rend888 logic.rend888: br label %logic.end887 logic.end887: %t498 = phi i1 [ false, %logic.from885 ], [ %t497, %logic.rend888 ] br i1 %t498, label %then889, label %endif891 then889: %t499 = load ptr, ptr %a18 %t500 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 %t501 = load i64, ptr %t500 %t502 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 %t503 = load i64, ptr %t502 call void @finch.lexer.fail(ptr %t499, i64 %t501, i64 %t503, { ptr, i64, i64 } { ptr @.str.482, i64 44, i64 0 }) br label %endif891 endif891: call void @finch.drop.arr_str(ptr %a438) br label %endif865 else864: %t504 = load ptr, ptr %a18 %t505 = call { ptr, i64, i64 } @finch.lexer.operator(ptr %t504) store { ptr, i64, i64 } %t505, ptr %a506 %t507 = getelementptr inbounds { ptr, i64, i64 }, ptr %a506, i32 0, i32 1 %t508 = load i64, ptr %t507 %t509 = icmp eq i64 %t508, 0 br i1 %t509, label %then892, label %endif894 then892: store i64 1, ptr %a510 %t511 = load i8, ptr %a43 %t512 = zext i8 %t511 to i64 %t513 = and i64 %t512, 224 %t514 = icmp eq i64 %t513, 192 br i1 %t514, label %then895, label %else896 then895: store i64 2, ptr %a510 br label %endif897 else896: %t515 = load i8, ptr %a43 %t516 = zext i8 %t515 to i64 %t517 = and i64 %t516, 240 %t518 = icmp eq i64 %t517, 224 br i1 %t518, label %then898, label %else899 then898: store i64 3, ptr %a510 br label %endif900 else899: %t519 = load i8, ptr %a43 %t520 = zext i8 %t519 to i64 %t521 = and i64 %t520, 248 %t522 = icmp eq i64 %t521, 240 br i1 %t522, label %then901, label %endif903 then901: store i64 4, ptr %a510 br label %endif903 endif903: br label %endif900 endif900: br label %endif897 endif897: store { ptr, i64, i64 } { ptr @.str.483, i64 0, i64 0 }, ptr %a523 %t524 = load i8, ptr %a43 %t525 = zext i8 %t524 to i64 %t526 = icmp sge i64 %t525, 128 br i1 %t526, label %then904, label %endif906 then904: %t527 = load { ptr, i64, i64 }, ptr %a523 store { ptr, i64, i64 } { ptr @.str.484, i64 74, i64 0 }, ptr %a523 store { ptr, i64, i64 } %t527, ptr %a528 call void @finch_str_drop(ptr %a528) br label %endif906 endif906: %t529 = load ptr, ptr %a18 %t530 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 %t531 = load i64, ptr %t530 %t532 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 %t533 = load i64, ptr %t532 %t534 = load ptr, ptr %a18 %t535 = icmp eq ptr %t534, null br i1 %t535, label %panic907, label %ok908 panic907: call void @finch_panic(ptr @.str.486, i64 211, ptr @.str.487) unreachable ok908: %t536 = getelementptr inbounds %S.lexer.Lexer, ptr %t534, i32 0, i32 0 %t537 = load { ptr, i64, i64 }, ptr %t536 store { ptr, i64, i64 } %t537, ptr %a538 %t540 = load ptr, ptr %a18 %t541 = icmp eq ptr %t540, null br i1 %t541, label %panic909, label %ok910 panic909: call void @finch_panic(ptr @.str.489, i64 211, ptr @.str.490) unreachable ok910: %t542 = getelementptr inbounds %S.lexer.Lexer, ptr %t540, i32 0, i32 2 %t543 = load i64, ptr %t542 %t544 = load ptr, ptr %a18 %t545 = icmp eq ptr %t544, null br i1 %t545, label %panic911, label %ok912 panic911: call void @finch_panic(ptr @.str.491, i64 211, ptr @.str.492) unreachable ok912: %t546 = getelementptr inbounds %S.lexer.Lexer, ptr %t544, i32 0, i32 2 %t547 = load i64, ptr %t546 %t548 = load i64, ptr %a510 %t549 = add i64 %t547, %t548 call void @finch_str_sub(ptr %a539, ptr %a538, i64 %t543, i64 %t549, ptr @.str.488, i64 211) %t550 = load { ptr, i64, i64 }, ptr %a539 store { ptr, i64, i64 } { ptr @.str.485, i64 22, i64 0 }, ptr %a552 store { ptr, i64, i64 } %t550, ptr %a553 call void @finch_str_concat(ptr %a551, ptr %a552, ptr %a553) store { ptr, i64, i64 } %t550, ptr %a554 call void @finch_str_drop(ptr %a554) %t555 = load { ptr, i64, i64 }, ptr %a551 store { ptr, i64, i64 } %t555, ptr %a557 store { ptr, i64, i64 } { ptr @.str.493, i64 1, i64 0 }, ptr %a558 call void @finch_str_concat(ptr %a556, ptr %a557, ptr %a558) store { ptr, i64, i64 } %t555, ptr %a559 call void @finch_str_drop(ptr %a559) %t560 = load { ptr, i64, i64 }, ptr %a556 %t561 = load { ptr, i64, i64 }, ptr %a523 store { ptr, i64, i64 } %t560, ptr %a563 store { ptr, i64, i64 } %t561, ptr %a564 call void @finch_str_concat(ptr %a562, ptr %a563, ptr %a564) store { ptr, i64, i64 } %t560, ptr %a565 call void @finch_str_drop(ptr %a565) %t566 = load { ptr, i64, i64 }, ptr %a562 call void @finch.lexer.fail(ptr %t529, i64 %t531, i64 %t533, { ptr, i64, i64 } %t566) store { ptr, i64, i64 } %t566, ptr %a567 call void @finch_str_drop(ptr %a567) call void @finch_str_drop(ptr %a523) br label %endif894 endif894: %t568 = getelementptr inbounds { ptr, i64, i64 }, ptr %a506, i32 0, i32 1 %t569 = load i64, ptr %t568 store i64 0, ptr %a570 br label %for.cond913 for.cond913: %t571 = load i64, ptr %a570 %t572 = icmp slt i64 %t571, %t569 br i1 %t572, label %for.body914, label %for.end916 for.body914: %t573 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t573) br label %for.step915 for.step915: %t574 = load i64, ptr %a570 %t575 = add i64 %t574, 1 store i64 %t575, ptr %a570 br label %for.cond913 for.end916: %t576 = load { ptr, i64, i64 }, ptr %a506 %t577 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 store { ptr, i64, i64 } %t576, ptr %a578 call void @finch_str_copy(ptr %a579, ptr %a578) %t580 = load { ptr, i64, i64 }, ptr %a579 %t581 = load { ptr, i64, i64 }, ptr %t577 store { ptr, i64, i64 } %t580, ptr %t577 store { ptr, i64, i64 } %t581, ptr %a582 call void @finch_str_drop(ptr %a582) %t583 = load { ptr, i64, i64 }, ptr %a506 %t584 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 store { ptr, i64, i64 } %t583, ptr %a585 call void @finch_str_copy(ptr %a586, ptr %a585) %t587 = load { ptr, i64, i64 }, ptr %a586 %t588 = load { ptr, i64, i64 }, ptr %t584 store { ptr, i64, i64 } %t587, ptr %t584 store { ptr, i64, i64 } %t588, ptr %a589 call void @finch_str_drop(ptr %a589) call void @finch_str_drop(ptr %a506) br label %endif865 endif865: br label %endif755 endif755: br label %endif718 endif718: %t590 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t591 = load %S.lexer.Token, ptr %a169 store %S.lexer.Token %t591, ptr %a592 call void @finch.copy.S_lexer_Token(ptr %a593, ptr %a592) %t594 = load %S.lexer.Token, ptr %a593 %t595 = load i64, ptr %t590 %t596 = add i64 %t595, 1 call void @finch_arr_reserve(ptr %a19, i64 %t596, i64 ptrtoint (ptr getelementptr (%S.lexer.Token, ptr null, i32 1) to i64)) %t597 = load ptr, ptr %a19 %t598 = getelementptr inbounds %S.lexer.Token, ptr %t597, i64 %t595 store %S.lexer.Token %t594, ptr %t598 store i64 %t596, ptr %t590 call void @finch.drop.S_lexer_Token(ptr %a169) br label %while.cond615 while.end617: %t599 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t600 = insertvalue %S.lexer.Token zeroinitializer, { ptr, i64, i64 } { ptr @.str.494, i64 3, i64 0 }, 0 %t601 = insertvalue %S.lexer.Token %t600, { ptr, i64, i64 } { ptr @.str.495, i64 0, i64 0 }, 1 %t602 = load ptr, ptr %a18 %t603 = icmp eq ptr %t602, null br i1 %t603, label %panic917, label %ok918 panic917: call void @finch_panic(ptr @.str.496, i64 221, ptr @.str.497) unreachable ok918: %t604 = getelementptr inbounds %S.lexer.Lexer, ptr %t602, i32 0, i32 3 %t605 = load i64, ptr %t604 %t606 = insertvalue %S.lexer.Token %t601, i64 %t605, 2 %t607 = load ptr, ptr %a18 %t608 = icmp eq ptr %t607, null br i1 %t608, label %panic919, label %ok920 panic919: call void @finch_panic(ptr @.str.498, i64 221, ptr @.str.499) unreachable ok920: %t609 = getelementptr inbounds %S.lexer.Lexer, ptr %t607, i32 0, i32 4 %t610 = load i64, ptr %t609 %t611 = insertvalue %S.lexer.Token %t606, i64 %t610, 3 %t612 = insertvalue %S.lexer.Token %t611, i1 true, 4 %t613 = load i64, ptr %t599 %t614 = add i64 %t613, 1 call void @finch_arr_reserve(ptr %a19, i64 %t614, i64 ptrtoint (ptr getelementptr (%S.lexer.Token, ptr null, i32 1) to i64)) %t615 = load ptr, ptr %a19 %t616 = getelementptr inbounds %S.lexer.Token, ptr %t615, i64 %t613 store %S.lexer.Token %t612, ptr %t616 store i64 %t614, ptr %t599 %t617 = load { ptr, i64, i64 }, ptr %a19 call void @finch.drop.S_lexer_Lexer(ptr %a17) ret { ptr, i64, i64 } %t617 } define internal %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_copy(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 %t6 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } %t5, 0 ret %S.ast.Type %t6 } define internal %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a3 = alloca %S.ast.Type, align 16 %a7 = alloca %S.ast.Type, align 16 %a8 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.500, i64 5, i64 0 }, 0 store %S.ast.Type %t2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 %t6 = load %S.ast.Type, ptr %a1 store %S.ast.Type %t6, ptr %a7 call void @finch.copy.S_ast_Type(ptr %a8, ptr %a7) %t9 = load %S.ast.Type, ptr %a8 %t10 = load i64, ptr %t5 %t11 = add i64 %t10, 1 call void @finch_arr_reserve(ptr %t4, i64 %t11, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t12 = load ptr, ptr %t4 %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 %t10 store %S.ast.Type %t9, ptr %t13 store i64 %t11, ptr %t5 %t14 = load %S.ast.Type, ptr %a3 ret %S.ast.Type %t14 } define internal %S.ast.Type @finch.ast.mapOf(%S.ast.Type %p0, %S.ast.Type %p1) { entry: %a1 = alloca %S.ast.Type, align 16 %a2 = alloca %S.ast.Type, align 16 %a4 = alloca %S.ast.Type, align 16 %a8 = alloca %S.ast.Type, align 16 %a9 = alloca %S.ast.Type, align 16 %a18 = alloca %S.ast.Type, align 16 %a19 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.501, i64 3, i64 0 }, 0 store %S.ast.Type %t3, ptr %a4 %t5 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load %S.ast.Type, ptr %a1 store %S.ast.Type %t7, ptr %a8 call void @finch.copy.S_ast_Type(ptr %a9, ptr %a8) %t10 = load %S.ast.Type, ptr %a9 %t11 = load i64, ptr %t6 %t12 = add i64 %t11, 1 call void @finch_arr_reserve(ptr %t5, i64 %t12, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t13 = load ptr, ptr %t5 %t14 = getelementptr inbounds %S.ast.Type, ptr %t13, i64 %t11 store %S.ast.Type %t10, ptr %t14 store i64 %t12, ptr %t6 %t15 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i32 0, i32 1 %t17 = load %S.ast.Type, ptr %a2 store %S.ast.Type %t17, ptr %a18 call void @finch.copy.S_ast_Type(ptr %a19, ptr %a18) %t20 = load %S.ast.Type, ptr %a19 %t21 = load i64, ptr %t16 %t22 = add i64 %t21, 1 call void @finch_arr_reserve(ptr %t15, i64 %t22, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t23 = load ptr, ptr %t15 %t24 = getelementptr inbounds %S.ast.Type, ptr %t23, i64 %t21 store %S.ast.Type %t20, ptr %t24 store i64 %t22, ptr %t16 %t25 = load %S.ast.Type, ptr %a4 ret %S.ast.Type %t25 } define internal %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a3 = alloca %S.ast.Type, align 16 %a7 = alloca %S.ast.Type, align 16 %a8 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.502, i64 3, i64 0 }, 0 store %S.ast.Type %t2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 %t6 = load %S.ast.Type, ptr %a1 store %S.ast.Type %t6, ptr %a7 call void @finch.copy.S_ast_Type(ptr %a8, ptr %a7) %t9 = load %S.ast.Type, ptr %a8 %t10 = load i64, ptr %t5 %t11 = add i64 %t10, 1 call void @finch_arr_reserve(ptr %t4, i64 %t11, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t12 = load ptr, ptr %t4 %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 %t10 store %S.ast.Type %t9, ptr %t13 store i64 %t11, ptr %t5 %t14 = load %S.ast.Type, ptr %a3 ret %S.ast.Type %t14 } define internal i1 @finch.ast.same(%S.ast.Type %p0, %S.ast.Type %p1) { entry: %a1 = alloca %S.ast.Type, align 16 %a2 = alloca %S.ast.Type, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca i64, align 16 store %S.ast.Type %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 %t5 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t4, ptr %a7 store { ptr, i64, i64 } %t6, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp eq i32 %t9, 0 br i1 %t10, label %then921, label %endif923 then921: ret i1 false endif923: %t11 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.503, i64 6, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 br label %logic.from924 logic.from924: br i1 %t16, label %logic.end926, label %logic.rhs925 logic.rhs925: %t17 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t18 = load { ptr, i64, i64 }, ptr %t17 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } { ptr @.str.504, i64 5, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 br label %logic.rend927 logic.rend927: br label %logic.end926 logic.end926: %t23 = phi i1 [ true, %logic.from924 ], [ %t22, %logic.rend927 ] br label %logic.from928 logic.from928: br i1 %t23, label %logic.end930, label %logic.rhs929 logic.rhs929: %t24 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t25 = load { ptr, i64, i64 }, ptr %t24 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.505, i64 4, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 br label %logic.rend931 logic.rend931: br label %logic.end930 logic.end930: %t30 = phi i1 [ true, %logic.from928 ], [ %t29, %logic.rend931 ] br i1 %t30, label %then932, label %endif934 then932: %t31 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 %t32 = load { ptr, i64, i64 }, ptr %t31 %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t34 = load { ptr, i64, i64 }, ptr %t33 store { ptr, i64, i64 } %t32, ptr %a35 store { ptr, i64, i64 } %t34, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 br label %logic.from935 logic.from935: br i1 %t38, label %logic.rhs936, label %logic.end937 logic.rhs936: %t39 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t42 = load { ptr, i64, i64 }, ptr %t41 store { ptr, i64, i64 } %t40, ptr %a43 store { ptr, i64, i64 } %t42, ptr %a44 %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) %t46 = icmp ne i32 %t45, 0 br label %logic.rend938 logic.rend938: br label %logic.end937 logic.end937: %t47 = phi i1 [ false, %logic.from935 ], [ %t46, %logic.rend938 ] ret i1 %t47 endif934: %t48 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t49 = load { ptr, i64, i64 }, ptr %t48 store { ptr, i64, i64 } %t49, ptr %a50 store { ptr, i64, i64 } { ptr @.str.506, i64 5, i64 0 }, ptr %a51 %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) %t53 = icmp ne i32 %t52, 0 br label %logic.from939 logic.from939: br i1 %t53, label %logic.rhs940, label %logic.end941 logic.rhs940: %t54 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 4 %t55 = load i64, ptr %t54 %t56 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t57 = load i64, ptr %t56 %t58 = icmp ne i64 %t55, %t57 br label %logic.rend942 logic.rend942: br label %logic.end941 logic.end941: %t59 = phi i1 [ false, %logic.from939 ], [ %t58, %logic.rend942 ] br i1 %t59, label %then943, label %endif945 then943: ret i1 false endif945: %t60 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t61 = load { ptr, i64, i64 }, ptr %t60 store { ptr, i64, i64 } %t61, ptr %a62 store { ptr, i64, i64 } { ptr @.str.507, i64 5, i64 0 }, ptr %a63 %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) %t65 = icmp ne i32 %t64, 0 br label %logic.from946 logic.from946: br i1 %t65, label %logic.end948, label %logic.rhs947 logic.rhs947: %t66 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t67 = load { ptr, i64, i64 }, ptr %t66 store { ptr, i64, i64 } %t67, ptr %a68 store { ptr, i64, i64 } { ptr @.str.508, i64 3, i64 0 }, ptr %a69 %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) %t71 = icmp ne i32 %t70, 0 br label %logic.rend949 logic.rend949: br label %logic.end948 logic.end948: %t72 = phi i1 [ true, %logic.from946 ], [ %t71, %logic.rend949 ] br label %logic.from950 logic.from950: br i1 %t72, label %logic.end952, label %logic.rhs951 logic.rhs951: %t73 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t74 = load { ptr, i64, i64 }, ptr %t73 store { ptr, i64, i64 } %t74, ptr %a75 store { ptr, i64, i64 } { ptr @.str.509, i64 3, i64 0 }, ptr %a76 %t77 = call i32 @finch_str_eq(ptr %a75, ptr %a76) %t78 = icmp ne i32 %t77, 0 br label %logic.rend953 logic.rend953: br label %logic.end952 logic.end952: %t79 = phi i1 [ true, %logic.from950 ], [ %t78, %logic.rend953 ] br label %logic.from954 logic.from954: br i1 %t79, label %logic.end956, label %logic.rhs955 logic.rhs955: %t80 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t81 = load { ptr, i64, i64 }, ptr %t80 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.510, i64 5, i64 0 }, ptr %a83 %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) %t85 = icmp ne i32 %t84, 0 br label %logic.rend957 logic.rend957: br label %logic.end956 logic.end956: %t86 = phi i1 [ true, %logic.from954 ], [ %t85, %logic.rend957 ] br i1 %t86, label %then958, label %endif960 then958: %t87 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i32 0, i32 1 %t89 = load i64, ptr %t88 %t90 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t90, i32 0, i32 1 %t92 = load i64, ptr %t91 %t93 = icmp ne i64 %t89, %t92 br i1 %t93, label %then961, label %endif963 then961: ret i1 false endif963: %t94 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 %t96 = load i64, ptr %t95 store i64 0, ptr %a97 br label %for.cond964 for.cond964: %t98 = load i64, ptr %a97 %t99 = icmp slt i64 %t98, %t96 br i1 %t99, label %for.body965, label %for.end967 for.body965: %t100 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t101 = load i64, ptr %a97 %t102 = load { ptr, i64, i64 }, ptr %t100 %t103 = extractvalue { ptr, i64, i64 } %t102, 1 %t104 = icmp uge i64 %t101, %t103 br i1 %t104, label %range968, label %inrange969 range968: call void @finch_panic_index(ptr @.str.511, i64 54, i64 %t101, i64 %t103) unreachable inrange969: %t105 = extractvalue { ptr, i64, i64 } %t102, 0 %t106 = getelementptr inbounds %S.ast.Type, ptr %t105, i64 %t101 %t107 = load %S.ast.Type, ptr %t106 %t108 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t109 = load i64, ptr %a97 %t110 = load { ptr, i64, i64 }, ptr %t108 %t111 = extractvalue { ptr, i64, i64 } %t110, 1 %t112 = icmp uge i64 %t109, %t111 br i1 %t112, label %range970, label %inrange971 range970: call void @finch_panic_index(ptr @.str.512, i64 54, i64 %t109, i64 %t111) unreachable inrange971: %t113 = extractvalue { ptr, i64, i64 } %t110, 0 %t114 = getelementptr inbounds %S.ast.Type, ptr %t113, i64 %t109 %t115 = load %S.ast.Type, ptr %t114 %t116 = call i1 @finch.ast.same(%S.ast.Type %t107, %S.ast.Type %t115) %t117 = xor i1 %t116, true br i1 %t117, label %then972, label %endif974 then972: ret i1 false endif974: br label %for.step966 for.step966: %t118 = load i64, ptr %a97 %t119 = add i64 %t118, 1 store i64 %t119, ptr %a97 br label %for.cond964 for.end967: ret i1 true endif960: ret i1 true } define internal { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.513, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then975, label %endif977 then975: %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t9 = load { ptr, i64, i64 }, ptr %t8 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 0, %t10 br i1 %t11, label %range978, label %inrange979 range978: call void @finch_panic_index(ptr @.str.515, i64 65, i64 0, i64 %t10) unreachable inrange979: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 0 %t14 = load %S.ast.Type, ptr %t13 %t15 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t14) store { ptr, i64, i64 } { ptr @.str.514, i64 2, i64 0 }, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) store { ptr, i64, i64 } %t15, ptr %a19 call void @finch_str_drop(ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a16 ret { ptr, i64, i64 } %t20 endif977: %t21 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.516, i64 5, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 br i1 %t26, label %then980, label %endif982 then980: %t27 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 4 %t28 = load i64, ptr %t27 call void @finch_str_from_int(ptr %a29, i64 %t28) %t30 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } { ptr @.str.517, i64 1, i64 0 }, ptr %a32 store { ptr, i64, i64 } %t30, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) store { ptr, i64, i64 } %t30, ptr %a34 call void @finch_str_drop(ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t35, ptr %a37 store { ptr, i64, i64 } { ptr @.str.518, i64 1, i64 0 }, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) store { ptr, i64, i64 } %t35, ptr %a39 call void @finch_str_drop(ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a36 %t41 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t42 = load { ptr, i64, i64 }, ptr %t41 %t43 = extractvalue { ptr, i64, i64 } %t42, 1 %t44 = icmp uge i64 0, %t43 br i1 %t44, label %range983, label %inrange984 range983: call void @finch_panic_index(ptr @.str.519, i64 68, i64 0, i64 %t43) unreachable inrange984: %t45 = extractvalue { ptr, i64, i64 } %t42, 0 %t46 = getelementptr inbounds %S.ast.Type, ptr %t45, i64 0 %t47 = load %S.ast.Type, ptr %t46 %t48 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t47) store { ptr, i64, i64 } %t40, ptr %a50 store { ptr, i64, i64 } %t48, ptr %a51 call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) store { ptr, i64, i64 } %t40, ptr %a52 call void @finch_str_drop(ptr %a52) store { ptr, i64, i64 } %t48, ptr %a53 call void @finch_str_drop(ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a49 ret { ptr, i64, i64 } %t54 endif982: %t55 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t56 = load { ptr, i64, i64 }, ptr %t55 store { ptr, i64, i64 } %t56, ptr %a57 store { ptr, i64, i64 } { ptr @.str.520, i64 3, i64 0 }, ptr %a58 %t59 = call i32 @finch_str_eq(ptr %a57, ptr %a58) %t60 = icmp ne i32 %t59, 0 br i1 %t60, label %then985, label %endif987 then985: %t61 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t62 = load { ptr, i64, i64 }, ptr %t61 %t63 = extractvalue { ptr, i64, i64 } %t62, 1 %t64 = icmp uge i64 0, %t63 br i1 %t64, label %range988, label %inrange989 range988: call void @finch_panic_index(ptr @.str.522, i64 71, i64 0, i64 %t63) unreachable inrange989: %t65 = extractvalue { ptr, i64, i64 } %t62, 0 %t66 = getelementptr inbounds %S.ast.Type, ptr %t65, i64 0 %t67 = load %S.ast.Type, ptr %t66 %t68 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t67) store { ptr, i64, i64 } { ptr @.str.521, i64 4, i64 0 }, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) store { ptr, i64, i64 } %t68, ptr %a72 call void @finch_str_drop(ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t73, ptr %a75 store { ptr, i64, i64 } { ptr @.str.523, i64 1, i64 0 }, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) store { ptr, i64, i64 } %t73, ptr %a77 call void @finch_str_drop(ptr %a77) %t78 = load { ptr, i64, i64 }, ptr %a74 %t79 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t80 = load { ptr, i64, i64 }, ptr %t79 %t81 = extractvalue { ptr, i64, i64 } %t80, 1 %t82 = icmp uge i64 1, %t81 br i1 %t82, label %range990, label %inrange991 range990: call void @finch_panic_index(ptr @.str.524, i64 71, i64 1, i64 %t81) unreachable inrange991: %t83 = extractvalue { ptr, i64, i64 } %t80, 0 %t84 = getelementptr inbounds %S.ast.Type, ptr %t83, i64 1 %t85 = load %S.ast.Type, ptr %t84 %t86 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t85) store { ptr, i64, i64 } %t78, ptr %a88 store { ptr, i64, i64 } %t86, ptr %a89 call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) store { ptr, i64, i64 } %t78, ptr %a90 call void @finch_str_drop(ptr %a90) store { ptr, i64, i64 } %t86, ptr %a91 call void @finch_str_drop(ptr %a91) %t92 = load { ptr, i64, i64 }, ptr %a87 ret { ptr, i64, i64 } %t92 endif987: %t93 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t94 = load { ptr, i64, i64 }, ptr %t93 store { ptr, i64, i64 } %t94, ptr %a95 store { ptr, i64, i64 } { ptr @.str.525, i64 3, i64 0 }, ptr %a96 %t97 = call i32 @finch_str_eq(ptr %a95, ptr %a96) %t98 = icmp ne i32 %t97, 0 br i1 %t98, label %then992, label %endif994 then992: %t99 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i32 0, i32 1 %t101 = load i64, ptr %t100 %t102 = icmp eq i64 %t101, 0 br i1 %t102, label %then995, label %endif997 then995: ret { ptr, i64, i64 } { ptr @.str.526, i64 3, i64 0 } endif997: %t103 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t104 = load { ptr, i64, i64 }, ptr %t103 %t105 = extractvalue { ptr, i64, i64 } %t104, 1 %t106 = icmp uge i64 0, %t105 br i1 %t106, label %range998, label %inrange999 range998: call void @finch_panic_index(ptr @.str.528, i64 77, i64 0, i64 %t105) unreachable inrange999: %t107 = extractvalue { ptr, i64, i64 } %t104, 0 %t108 = getelementptr inbounds %S.ast.Type, ptr %t107, i64 0 %t109 = load %S.ast.Type, ptr %t108 %t110 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t109) store { ptr, i64, i64 } { ptr @.str.527, i64 4, i64 0 }, ptr %a112 store { ptr, i64, i64 } %t110, ptr %a113 call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) store { ptr, i64, i64 } %t110, ptr %a114 call void @finch_str_drop(ptr %a114) %t115 = load { ptr, i64, i64 }, ptr %a111 store { ptr, i64, i64 } %t115, ptr %a117 store { ptr, i64, i64 } { ptr @.str.529, i64 1, i64 0 }, ptr %a118 call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) store { ptr, i64, i64 } %t115, ptr %a119 call void @finch_str_drop(ptr %a119) %t120 = load { ptr, i64, i64 }, ptr %a116 ret { ptr, i64, i64 } %t120 endif994: %t121 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t122 = load { ptr, i64, i64 }, ptr %t121 store { ptr, i64, i64 } %t122, ptr %a123 store { ptr, i64, i64 } { ptr @.str.530, i64 6, i64 0 }, ptr %a124 %t125 = call i32 @finch_str_eq(ptr %a123, ptr %a124) %t126 = icmp ne i32 %t125, 0 br label %logic.from1000 logic.from1000: br i1 %t126, label %logic.end1002, label %logic.rhs1001 logic.rhs1001: %t127 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t128 = load { ptr, i64, i64 }, ptr %t127 store { ptr, i64, i64 } %t128, ptr %a129 store { ptr, i64, i64 } { ptr @.str.531, i64 5, i64 0 }, ptr %a130 %t131 = call i32 @finch_str_eq(ptr %a129, ptr %a130) %t132 = icmp ne i32 %t131, 0 br label %logic.rend1003 logic.rend1003: br label %logic.end1002 logic.end1002: %t133 = phi i1 [ true, %logic.from1000 ], [ %t132, %logic.rend1003 ] br label %logic.from1004 logic.from1004: br i1 %t133, label %logic.end1006, label %logic.rhs1005 logic.rhs1005: %t134 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t135 = load { ptr, i64, i64 }, ptr %t134 store { ptr, i64, i64 } %t135, ptr %a136 store { ptr, i64, i64 } { ptr @.str.532, i64 4, i64 0 }, ptr %a137 %t138 = call i32 @finch_str_eq(ptr %a136, ptr %a137) %t139 = icmp ne i32 %t138, 0 br label %logic.rend1007 logic.rend1007: br label %logic.end1006 logic.end1006: %t140 = phi i1 [ true, %logic.from1004 ], [ %t139, %logic.rend1007 ] br i1 %t140, label %then1008, label %endif1010 then1008: %t141 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i32 0, i32 1 %t143 = load i64, ptr %t142 %t144 = icmp sgt i64 %t143, 0 br i1 %t144, label %then1011, label %endif1013 then1011: %t145 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t146 = load { ptr, i64, i64 }, ptr %t145 store { ptr, i64, i64 } %t146, ptr %a148 store { ptr, i64, i64 } { ptr @.str.533, i64 1, i64 0 }, ptr %a149 call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) %t150 = load { ptr, i64, i64 }, ptr %a147 %t151 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 %t152 = load { ptr, i64, i64 }, ptr %t151 store { ptr, i64, i64 } %t150, ptr %a154 store { ptr, i64, i64 } %t152, ptr %a155 call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) store { ptr, i64, i64 } %t150, ptr %a156 call void @finch_str_drop(ptr %a156) %t157 = load { ptr, i64, i64 }, ptr %a153 ret { ptr, i64, i64 } %t157 endif1013: %t158 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 %t159 = load { ptr, i64, i64 }, ptr %t158 store { ptr, i64, i64 } %t159, ptr %a160 call void @finch_str_copy(ptr %a161, ptr %a160) %t162 = load { ptr, i64, i64 }, ptr %a161 ret { ptr, i64, i64 } %t162 endif1010: %t163 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t164 = load { ptr, i64, i64 }, ptr %t163 store { ptr, i64, i64 } %t164, ptr %a165 store { ptr, i64, i64 } { ptr @.str.534, i64 4, i64 0 }, ptr %a166 %t167 = call i32 @finch_str_eq(ptr %a165, ptr %a166) %t168 = icmp ne i32 %t167, 0 br i1 %t168, label %then1014, label %endif1016 then1014: ret { ptr, i64, i64 } { ptr @.str.535, i64 7, i64 0 } endif1016: %t169 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t170 = load { ptr, i64, i64 }, ptr %t169 store { ptr, i64, i64 } %t170, ptr %a171 call void @finch_str_copy(ptr %a172, ptr %a171) %t173 = load { ptr, i64, i64 }, ptr %a172 ret { ptr, i64, i64 } %t173 } define internal void @finch.parser.fail(ptr %p0, %S.lexer.Token %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.lexer.Token, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.lexer.Token %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic1017, label %ok1018 panic1017: call void @finch_panic(ptr @.str.536, i64 14, ptr @.str.537) unreachable ok1018: %t6 = getelementptr inbounds %S.parser.Parser, ptr %t4, i32 0, i32 4 %t7 = load { ptr, i64, i64 }, ptr %t6 store { ptr, i64, i64 } %t7, ptr %a9 store { ptr, i64, i64 } { ptr @.str.538, i64 1, i64 0 }, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) %t11 = load { ptr, i64, i64 }, ptr %a8 %t12 = getelementptr inbounds %S.lexer.Token, ptr %a2, i32 0, i32 2 %t13 = load i64, ptr %t12 call void @finch_str_from_int(ptr %a14, i64 %t13) %t15 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t11, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) store { ptr, i64, i64 } %t11, ptr %a19 call void @finch_str_drop(ptr %a19) store { ptr, i64, i64 } %t15, ptr %a20 call void @finch_str_drop(ptr %a20) %t21 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t21, ptr %a23 store { ptr, i64, i64 } { ptr @.str.539, i64 1, i64 0 }, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) store { ptr, i64, i64 } %t21, ptr %a25 call void @finch_str_drop(ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a22 %t27 = getelementptr inbounds %S.lexer.Token, ptr %a2, i32 0, i32 3 %t28 = load i64, ptr %t27 call void @finch_str_from_int(ptr %a29, i64 %t28) %t30 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t26, ptr %a32 store { ptr, i64, i64 } %t30, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) store { ptr, i64, i64 } %t26, ptr %a34 call void @finch_str_drop(ptr %a34) store { ptr, i64, i64 } %t30, ptr %a35 call void @finch_str_drop(ptr %a35) %t36 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t36, ptr %a38 store { ptr, i64, i64 } { ptr @.str.540, i64 9, i64 0 }, ptr %a39 call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) store { ptr, i64, i64 } %t36, ptr %a40 call void @finch_str_drop(ptr %a40) %t41 = load { ptr, i64, i64 }, ptr %a37 %t42 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t41, ptr %a44 store { ptr, i64, i64 } %t42, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) store { ptr, i64, i64 } %t41, ptr %a46 call void @finch_str_drop(ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a43 %t48 = extractvalue { ptr, i64, i64 } %t47, 1 %t49 = trunc i64 %t48 to i32 %t50 = extractvalue { ptr, i64, i64 } %t47, 0 %t51 = icmp eq ptr %t50, null %t52 = select i1 %t51, ptr @.str.541, ptr %t50 %t53 = call i32 (ptr, ...) @printf(ptr @.str.542, i32 %t49, ptr %t52) store { ptr, i64, i64 } %t47, ptr %a54 call void @finch_str_drop(ptr %a54) %t55 = call i32 (ptr, ...) @printf(ptr @.str.543) %t56 = trunc i64 1 to i32 %t57 = call i32 @fflush(ptr null) call void @exit(i32 %t56) ret void } define internal %S.lexer.Token @finch.parser.cur(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a15 = alloca %S.lexer.Token, align 16 %a16 = alloca %S.lexer.Token, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic1019, label %ok1020 panic1019: call void @finch_panic(ptr @.str.544, i64 19, ptr @.str.545) unreachable ok1020: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic1021, label %ok1022 panic1021: call void @finch_panic(ptr @.str.546, i64 19, ptr @.str.547) unreachable ok1022: %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load { ptr, i64, i64 }, ptr %t4 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 br i1 %t11, label %range1023, label %inrange1024 range1023: call void @finch_panic_index(ptr @.str.548, i64 19, i64 %t8, i64 %t10) unreachable inrange1024: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 %t14 = load %S.lexer.Token, ptr %t13 store %S.lexer.Token %t14, ptr %a15 call void @finch.copy.S_lexer_Token(ptr %a16, ptr %a15) %t17 = load %S.lexer.Token, ptr %a16 ret %S.lexer.Token %t17 } define internal { ptr, i64, i64 } @finch.parser.curKind(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic1025, label %ok1026 panic1025: call void @finch_panic(ptr @.str.549, i64 23, ptr @.str.550) unreachable ok1026: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic1027, label %ok1028 panic1027: call void @finch_panic(ptr @.str.551, i64 23, ptr @.str.552) unreachable ok1028: %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load { ptr, i64, i64 }, ptr %t4 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 br i1 %t11, label %range1029, label %inrange1030 range1029: call void @finch_panic_index(ptr @.str.553, i64 23, i64 %t8, i64 %t10) unreachable inrange1030: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i32 0, i32 0 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 call void @finch_str_copy(ptr %a17, ptr %a16) %t18 = load { ptr, i64, i64 }, ptr %a17 ret { ptr, i64, i64 } %t18 } define internal { ptr, i64, i64 } @finch.parser.peekKind(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a9 = alloca i64, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic1031, label %ok1032 panic1031: call void @finch_panic(ptr @.str.554, i64 27, ptr @.str.555) unreachable ok1032: %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = load i64, ptr %a2 %t8 = add i64 %t6, %t7 store i64 %t8, ptr %a9 %t10 = load i64, ptr %a9 %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null br i1 %t12, label %panic1033, label %ok1034 panic1033: call void @finch_panic(ptr @.str.556, i64 28, ptr @.str.557) unreachable ok1034: %t13 = getelementptr inbounds %S.parser.Parser, ptr %t11, i32 0, i32 0 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = icmp sge i64 %t10, %t15 br i1 %t16, label %then1035, label %endif1037 then1035: %t17 = load ptr, ptr %a1 %t18 = icmp eq ptr %t17, null br i1 %t18, label %panic1038, label %ok1039 panic1038: call void @finch_panic(ptr @.str.558, i64 29, ptr @.str.559) unreachable ok1039: %t19 = getelementptr inbounds %S.parser.Parser, ptr %t17, i32 0, i32 0 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 %t21 = load i64, ptr %t20 %t22 = sub i64 %t21, 1 store i64 %t22, ptr %a9 br label %endif1037 endif1037: %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null br i1 %t24, label %panic1040, label %ok1041 panic1040: call void @finch_panic(ptr @.str.560, i64 31, ptr @.str.561) unreachable ok1041: %t25 = getelementptr inbounds %S.parser.Parser, ptr %t23, i32 0, i32 0 %t26 = load i64, ptr %a9 %t27 = load { ptr, i64, i64 }, ptr %t25 %t28 = extractvalue { ptr, i64, i64 } %t27, 1 %t29 = icmp uge i64 %t26, %t28 br i1 %t29, label %range1042, label %inrange1043 range1042: call void @finch_panic_index(ptr @.str.562, i64 31, i64 %t26, i64 %t28) unreachable inrange1043: %t30 = extractvalue { ptr, i64, i64 } %t27, 0 %t31 = getelementptr inbounds %S.lexer.Token, ptr %t30, i64 %t26 %t32 = getelementptr inbounds %S.lexer.Token, ptr %t31, i32 0, i32 0 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 call void @finch_str_copy(ptr %a35, ptr %a34) %t36 = load { ptr, i64, i64 }, ptr %a35 ret { ptr, i64, i64 } %t36 } define internal i1 @finch.parser.at(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic1044, label %ok1045 panic1044: call void @finch_panic(ptr @.str.563, i64 35, ptr @.str.564) unreachable ok1045: %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 0 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic1046, label %ok1047 panic1046: call void @finch_panic(ptr @.str.565, i64 35, ptr @.str.566) unreachable ok1047: %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load { ptr, i64, i64 }, ptr %t5 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 br i1 %t12, label %range1048, label %inrange1049 range1048: call void @finch_panic_index(ptr @.str.567, i64 35, i64 %t9, i64 %t11) unreachable inrange1049: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i64 %t9 %t15 = getelementptr inbounds %S.lexer.Token, ptr %t14, i32 0, i32 0 %t16 = load { ptr, i64, i64 }, ptr %t15 %t17 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t16, ptr %a18 store { ptr, i64, i64 } %t17, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp ne i32 %t20, 0 ret i1 %t21 } define internal %S.lexer.Token @finch.parser.next(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a15 = alloca %S.lexer.Token, align 16 %a16 = alloca %S.lexer.Token, align 16 %a18 = alloca %S.lexer.Token, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic1050, label %ok1051 panic1050: call void @finch_panic(ptr @.str.568, i64 39, ptr @.str.569) unreachable ok1051: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic1052, label %ok1053 panic1052: call void @finch_panic(ptr @.str.570, i64 39, ptr @.str.571) unreachable ok1053: %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load { ptr, i64, i64 }, ptr %t4 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 br i1 %t11, label %range1054, label %inrange1055 range1054: call void @finch_panic_index(ptr @.str.572, i64 39, i64 %t8, i64 %t10) unreachable inrange1055: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 %t14 = load %S.lexer.Token, ptr %t13 store %S.lexer.Token %t14, ptr %a15 call void @finch.copy.S_lexer_Token(ptr %a16, ptr %a15) %t17 = load %S.lexer.Token, ptr %a16 store %S.lexer.Token %t17, ptr %a18 %t19 = load ptr, ptr %a1 %t20 = icmp eq ptr %t19, null br i1 %t20, label %panic1056, label %ok1057 panic1056: call void @finch_panic(ptr @.str.573, i64 40, ptr @.str.574) unreachable ok1057: %t21 = getelementptr inbounds %S.parser.Parser, ptr %t19, i32 0, i32 1 %t22 = load i64, ptr %t21 %t23 = add i64 %t22, 1 store i64 %t23, ptr %t21 %t24 = load %S.lexer.Token, ptr %a18 ret %S.lexer.Token %t24 } define internal i1 @finch.parser.accept(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = call i1 @finch.parser.at(ptr %t3, { ptr, i64, i64 } %t4) br i1 %t5, label %then1058, label %endif1060 then1058: %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic1061, label %ok1062 panic1061: call void @finch_panic(ptr @.str.575, i64 46, ptr @.str.576) unreachable ok1062: %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = add i64 %t9, 1 store i64 %t10, ptr %t8 ret i1 true endif1060: ret i1 false } define internal { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %p0) { entry: %a1 = alloca %S.lexer.Token, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 store %S.lexer.Token %p0, ptr %a1 %t2 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.577, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then1063, label %endif1065 then1063: %t8 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 1 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } { ptr @.str.578, i64 1, i64 0 }, ptr %a11 store { ptr, i64, i64 } %t9, ptr %a12 call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) %t13 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t13, ptr %a15 store { ptr, i64, i64 } { ptr @.str.579, i64 1, i64 0 }, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) store { ptr, i64, i64 } %t13, ptr %a17 call void @finch_str_drop(ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a14 ret { ptr, i64, i64 } %t18 endif1065: %t19 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t20 = load { ptr, i64, i64 }, ptr %t19 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.580, i64 3, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) %t24 = icmp ne i32 %t23, 0 br i1 %t24, label %then1066, label %endif1068 then1066: ret { ptr, i64, i64 } { ptr @.str.581, i64 11, i64 0 } endif1068: %t25 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t26 = load { ptr, i64, i64 }, ptr %t25 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.582, i64 3, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 br label %logic.from1069 logic.from1069: br i1 %t30, label %logic.end1071, label %logic.rhs1070 logic.rhs1070: %t31 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t32 = load { ptr, i64, i64 }, ptr %t31 store { ptr, i64, i64 } %t32, ptr %a33 store { ptr, i64, i64 } { ptr @.str.583, i64 5, i64 0 }, ptr %a34 %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) %t36 = icmp ne i32 %t35, 0 br label %logic.rend1072 logic.rend1072: br label %logic.end1071 logic.end1071: %t37 = phi i1 [ true, %logic.from1069 ], [ %t36, %logic.rend1072 ] br i1 %t37, label %then1073, label %endif1075 then1073: ret { ptr, i64, i64 } { ptr @.str.584, i64 8, i64 0 } endif1075: %t38 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t39 = load { ptr, i64, i64 }, ptr %t38 store { ptr, i64, i64 } %t39, ptr %a40 store { ptr, i64, i64 } { ptr @.str.585, i64 6, i64 0 }, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 br i1 %t43, label %then1076, label %endif1078 then1076: ret { ptr, i64, i64 } { ptr @.str.586, i64 8, i64 0 } endif1078: %t44 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t45 = load { ptr, i64, i64 }, ptr %t44 store { ptr, i64, i64 } %t45, ptr %a46 store { ptr, i64, i64 } { ptr @.str.587, i64 4, i64 0 }, ptr %a47 %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) %t49 = icmp ne i32 %t48, 0 br i1 %t49, label %then1079, label %endif1081 then1079: ret { ptr, i64, i64 } { ptr @.str.588, i64 6, i64 0 } endif1081: %t50 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t51 = load { ptr, i64, i64 }, ptr %t50 store { ptr, i64, i64 } { ptr @.str.589, i64 1, i64 0 }, ptr %a53 store { ptr, i64, i64 } %t51, ptr %a54 call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a52 store { ptr, i64, i64 } %t55, ptr %a57 store { ptr, i64, i64 } { ptr @.str.590, i64 1, i64 0 }, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) store { ptr, i64, i64 } %t55, ptr %a59 call void @finch_str_drop(ptr %a59) %t60 = load { ptr, i64, i64 }, ptr %a56 ret { ptr, i64, i64 } %t60 } define internal %S.lexer.Token @finch.parser.expect(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca %S.lexer.Token, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca %S.lexer.Token, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = load { ptr, i64, i64 }, ptr %a2 %t6 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } %t5) %t7 = xor i1 %t6, true br i1 %t7, label %then1082, label %endif1084 then1082: %t8 = load ptr, ptr %a1 %t9 = load ptr, ptr %a1 %t10 = call %S.lexer.Token @finch.parser.cur(ptr %t9) %t11 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.591, i64 9, i64 0 }, ptr %a13 store { ptr, i64, i64 } %t11, ptr %a14 call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t15, ptr %a17 store { ptr, i64, i64 } { ptr @.str.592, i64 8, i64 0 }, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) store { ptr, i64, i64 } %t15, ptr %a19 call void @finch_str_drop(ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a16 %t21 = load ptr, ptr %a1 %t22 = call %S.lexer.Token @finch.parser.cur(ptr %t21) %t23 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t22) store %S.lexer.Token %t22, ptr %a24 call void @finch.drop.S_lexer_Token(ptr %a24) store { ptr, i64, i64 } %t20, ptr %a26 store { ptr, i64, i64 } %t23, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) store { ptr, i64, i64 } %t20, ptr %a28 call void @finch_str_drop(ptr %a28) store { ptr, i64, i64 } %t23, ptr %a29 call void @finch_str_drop(ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a25 call void @finch.parser.fail(ptr %t8, %S.lexer.Token %t10, { ptr, i64, i64 } %t30) store %S.lexer.Token %t10, ptr %a31 call void @finch.drop.S_lexer_Token(ptr %a31) store { ptr, i64, i64 } %t30, ptr %a32 call void @finch_str_drop(ptr %a32) br label %endif1084 endif1084: %t33 = load ptr, ptr %a1 %t34 = call %S.lexer.Token @finch.parser.next(ptr %t33) ret %S.lexer.Token %t34 } define internal i1 @finch.parser.sameLine(ptr %p0) { entry: %a1 = alloca ptr, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic1085, label %ok1086 panic1085: call void @finch_panic(ptr @.str.593, i64 79, ptr @.str.594) unreachable ok1086: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 2 %t5 = load i64, ptr %t4 %t6 = icmp sgt i64 %t5, 0 br label %logic.from1087 logic.from1087: br i1 %t6, label %logic.end1089, label %logic.rhs1088 logic.rhs1088: %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null br i1 %t8, label %panic1090, label %ok1091 panic1090: call void @finch_panic(ptr @.str.595, i64 79, ptr @.str.596) unreachable ok1091: %t9 = getelementptr inbounds %S.parser.Parser, ptr %t7, i32 0, i32 0 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic1092, label %ok1093 panic1092: call void @finch_panic(ptr @.str.597, i64 79, ptr @.str.598) unreachable ok1093: %t12 = getelementptr inbounds %S.parser.Parser, ptr %t10, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = load { ptr, i64, i64 }, ptr %t9 %t15 = extractvalue { ptr, i64, i64 } %t14, 1 %t16 = icmp uge i64 %t13, %t15 br i1 %t16, label %range1094, label %inrange1095 range1094: call void @finch_panic_index(ptr @.str.599, i64 79, i64 %t13, i64 %t15) unreachable inrange1095: %t17 = extractvalue { ptr, i64, i64 } %t14, 0 %t18 = getelementptr inbounds %S.lexer.Token, ptr %t17, i64 %t13 %t19 = getelementptr inbounds %S.lexer.Token, ptr %t18, i32 0, i32 4 %t20 = load i1, ptr %t19 %t21 = xor i1 %t20, true br label %logic.rend1096 logic.rend1096: br label %logic.end1089 logic.end1089: %t22 = phi i1 [ true, %logic.from1087 ], [ %t21, %logic.rend1096 ] ret i1 %t22 } define internal %S.ast.Node @finch.parser.node(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca %S.lexer.Token, align 16 %a17 = alloca %S.lexer.Token, align 16 %a19 = alloca %S.lexer.Token, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic1097, label %ok1098 panic1097: call void @finch_panic(ptr @.str.600, i64 83, ptr @.str.601) unreachable ok1098: %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 0 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic1099, label %ok1100 panic1099: call void @finch_panic(ptr @.str.602, i64 83, ptr @.str.603) unreachable ok1100: %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load { ptr, i64, i64 }, ptr %t5 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 br i1 %t12, label %range1101, label %inrange1102 range1101: call void @finch_panic_index(ptr @.str.604, i64 83, i64 %t9, i64 %t11) unreachable inrange1102: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i64 %t9 %t15 = load %S.lexer.Token, ptr %t14 store %S.lexer.Token %t15, ptr %a16 call void @finch.copy.S_lexer_Token(ptr %a17, ptr %a16) %t18 = load %S.lexer.Token, ptr %a17 store %S.lexer.Token %t18, ptr %a19 %t20 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t20, ptr %a21 call void @finch_str_copy(ptr %a22, ptr %a21) %t23 = load { ptr, i64, i64 }, ptr %a22 %t24 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } %t23, 0 %t25 = getelementptr inbounds %S.lexer.Token, ptr %a19, i32 0, i32 2 %t26 = load i64, ptr %t25 %t27 = insertvalue %S.ast.Node %t24, i64 %t26, 11 %t28 = getelementptr inbounds %S.lexer.Token, ptr %a19, i32 0, i32 3 %t29 = load i64, ptr %t28 %t30 = insertvalue %S.ast.Node %t27, i64 %t29, 12 %t31 = load ptr, ptr %a1 %t32 = icmp eq ptr %t31, null br i1 %t32, label %panic1103, label %ok1104 panic1103: call void @finch_panic(ptr @.str.605, i64 84, ptr @.str.606) unreachable ok1104: %t33 = getelementptr inbounds %S.parser.Parser, ptr %t31, i32 0, i32 3 %t34 = load i64, ptr %t33 %t35 = insertvalue %S.ast.Node %t30, i64 %t34, 13 call void @finch.drop.S_lexer_Token(ptr %a19) ret %S.ast.Node %t35 } define internal i1 @finch.parser.isTypeName({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca i64, align 16 %a29 = alloca i64, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = mul i64 16, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 store { ptr, i64, i64 } { ptr @.str.607, i64 3, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 store { ptr, i64, i64 } { ptr @.str.608, i64 5, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 store { ptr, i64, i64 } { ptr @.str.609, i64 4, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 store { ptr, i64, i64 } { ptr @.str.610, i64 4, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 store { ptr, i64, i64 } { ptr @.str.611, i64 3, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 store { ptr, i64, i64 } { ptr @.str.612, i64 3, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 store { ptr, i64, i64 } { ptr @.str.613, i64 2, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 store { ptr, i64, i64 } { ptr @.str.614, i64 3, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 store { ptr, i64, i64 } { ptr @.str.615, i64 3, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 store { ptr, i64, i64 } { ptr @.str.616, i64 3, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 store { ptr, i64, i64 } { ptr @.str.617, i64 2, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 store { ptr, i64, i64 } { ptr @.str.618, i64 3, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 store { ptr, i64, i64 } { ptr @.str.619, i64 3, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 store { ptr, i64, i64 } { ptr @.str.620, i64 3, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 store { ptr, i64, i64 } { ptr @.str.621, i64 3, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 store { ptr, i64, i64 } { ptr @.str.622, i64 3, i64 0 }, ptr %t19 %t20 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t21 = insertvalue { ptr, i64, i64 } %t20, i64 16, 1 %t22 = insertvalue { ptr, i64, i64 } %t21, i64 16, 2 store { ptr, i64, i64 } %t22, ptr %a23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a23, i32 0, i32 1 %t25 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a26 %t27 = load i64, ptr %t24 %t28 = load ptr, ptr %a23 store i64 0, ptr %a29 br label %find.cond1105 find.cond1105: %t30 = load i64, ptr %a29 %t31 = icmp slt i64 %t30, %t27 br i1 %t31, label %find.body1106, label %find.end1109 find.body1106: %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t30 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } %t25, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 br i1 %t37, label %find.hit1107, label %find.next1108 find.hit1107: store i64 %t30, ptr %a26 br label %find.end1109 find.next1108: %t38 = add i64 %t30, 1 store i64 %t38, ptr %a29 br label %find.cond1105 find.end1109: %t39 = load i64, ptr %a26 %t40 = icmp sge i64 %t39, 0 call void @finch.drop.arr_str(ptr %a23) ret i1 %t40 } define internal %S.ast.Type @finch.parser.parseType(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a6 = alloca %S.lexer.Token, align 16 %a10 = alloca %S.ast.Type, align 16 %a20 = alloca %S.lexer.Token, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca %S.lexer.Token, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca %S.lexer.Token, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca %S.lexer.Token, align 16 %a54 = alloca %S.ast.Type, align 16 %a57 = alloca %S.lexer.Token, align 16 %a62 = alloca %S.ast.Type, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca %S.ast.Type, align 16 %a77 = alloca %S.ast.Type, align 16 %a80 = alloca %S.lexer.Token, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca %S.ast.Type, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca %S.lexer.Token, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca %S.lexer.Token, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca %S.lexer.Token, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca %S.lexer.Token, align 16 %a165 = alloca %S.lexer.Token, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.accept(ptr %t2, { ptr, i64, i64 } { ptr @.str.623, i64 1, i64 0 }) br i1 %t3, label %then1110, label %endif1112 then1110: %t4 = load ptr, ptr %a1 %t5 = call %S.lexer.Token @finch.parser.expect(ptr %t4, { ptr, i64, i64 } { ptr @.str.624, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.625, i64 36, i64 0 }) store %S.lexer.Token %t5, ptr %a6 call void @finch.drop.S_lexer_Token(ptr %a6) %t7 = load ptr, ptr %a1 %t8 = call %S.ast.Type @finch.parser.parseType(ptr %t7) %t9 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t8) store %S.ast.Type %t8, ptr %a10 call void @finch.drop.S_ast_Type(ptr %a10) ret %S.ast.Type %t9 endif1112: %t11 = load ptr, ptr %a1 %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.626, i64 5, i64 0 }) %t13 = xor i1 %t12, true br i1 %t13, label %then1113, label %endif1115 then1113: %t14 = load ptr, ptr %a1 %t15 = load ptr, ptr %a1 %t16 = call %S.lexer.Token @finch.parser.cur(ptr %t15) %t17 = load ptr, ptr %a1 %t18 = call %S.lexer.Token @finch.parser.cur(ptr %t17) %t19 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t18) store %S.lexer.Token %t18, ptr %a20 call void @finch.drop.S_lexer_Token(ptr %a20) store { ptr, i64, i64 } { ptr @.str.627, i64 11, i64 0 }, ptr %a22 store { ptr, i64, i64 } %t19, ptr %a23 call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) store { ptr, i64, i64 } %t19, ptr %a24 call void @finch_str_drop(ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t25, ptr %a27 store { ptr, i64, i64 } { ptr @.str.628, i64 56, i64 0 }, ptr %a28 call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) store { ptr, i64, i64 } %t25, ptr %a29 call void @finch_str_drop(ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a26 call void @finch.parser.fail(ptr %t14, %S.lexer.Token %t16, { ptr, i64, i64 } %t30) store %S.lexer.Token %t16, ptr %a31 call void @finch.drop.S_lexer_Token(ptr %a31) store { ptr, i64, i64 } %t30, ptr %a32 call void @finch_str_drop(ptr %a32) br label %endif1115 endif1115: %t33 = load ptr, ptr %a1 %t34 = call %S.lexer.Token @finch.parser.next(ptr %t33) %t35 = extractvalue %S.lexer.Token %t34, 1 store { ptr, i64, i64 } %t35, ptr %a36 call void @finch_str_copy(ptr %a37, ptr %a36) %t38 = load { ptr, i64, i64 }, ptr %a37 store %S.lexer.Token %t34, ptr %a39 call void @finch.drop.S_lexer_Token(ptr %a39) store { ptr, i64, i64 } %t38, ptr %a40 %t41 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.629, i64 3, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 br label %logic.from1116 logic.from1116: br i1 %t45, label %logic.rhs1117, label %logic.end1118 logic.rhs1117: %t46 = load ptr, ptr %a1 %t47 = call i1 @finch.parser.at(ptr %t46, { ptr, i64, i64 } { ptr @.str.630, i64 1, i64 0 }) br label %logic.rend1119 logic.rend1119: br label %logic.end1118 logic.end1118: %t48 = phi i1 [ false, %logic.from1116 ], [ %t47, %logic.rend1119 ] br i1 %t48, label %then1120, label %endif1122 then1120: %t49 = load ptr, ptr %a1 %t50 = call %S.lexer.Token @finch.parser.next(ptr %t49) store %S.lexer.Token %t50, ptr %a51 call void @finch.drop.S_lexer_Token(ptr %a51) %t52 = load ptr, ptr %a1 %t53 = call %S.ast.Type @finch.parser.parseType(ptr %t52) store %S.ast.Type %t53, ptr %a54 %t55 = load ptr, ptr %a1 %t56 = call %S.lexer.Token @finch.parser.expect(ptr %t55, { ptr, i64, i64 } { ptr @.str.631, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.632, i64 39, i64 0 }) store %S.lexer.Token %t56, ptr %a57 call void @finch.drop.S_lexer_Token(ptr %a57) %t58 = load %S.ast.Type, ptr %a54 %t59 = load ptr, ptr %a1 %t60 = call %S.ast.Type @finch.parser.parseType(ptr %t59) %t61 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t58, %S.ast.Type %t60) store %S.ast.Type %t60, ptr %a62 call void @finch.drop.S_ast_Type(ptr %a62) call void @finch.drop.S_ast_Type(ptr %a54) call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t61 endif1122: %t63 = load { ptr, i64, i64 }, ptr %a40 %t64 = call i1 @finch.parser.isTypeName({ ptr, i64, i64 } %t63) br i1 %t64, label %then1123, label %endif1125 then1123: %t65 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t65, ptr %a66 store { ptr, i64, i64 } { ptr @.str.633, i64 3, i64 0 }, ptr %a67 %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) %t69 = icmp ne i32 %t68, 0 br label %logic.from1126 logic.from1126: br i1 %t69, label %logic.rhs1127, label %logic.end1128 logic.rhs1127: %t70 = load ptr, ptr %a1 %t71 = call i1 @finch.parser.accept(ptr %t70, { ptr, i64, i64 } { ptr @.str.634, i64 1, i64 0 }) br label %logic.rend1129 logic.rend1129: br label %logic.end1128 logic.end1128: %t72 = phi i1 [ false, %logic.from1126 ], [ %t71, %logic.rend1129 ] br i1 %t72, label %then1130, label %endif1132 then1130: %t73 = load ptr, ptr %a1 %t74 = call %S.ast.Type @finch.parser.parseType(ptr %t73) %t75 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t74) store %S.ast.Type %t74, ptr %a76 call void @finch.drop.S_ast_Type(ptr %a76) store %S.ast.Type %t75, ptr %a77 %t78 = load ptr, ptr %a1 %t79 = call %S.lexer.Token @finch.parser.expect(ptr %t78, { ptr, i64, i64 } { ptr @.str.635, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.636, i64 3, i64 0 }) store %S.lexer.Token %t79, ptr %a80 call void @finch.drop.S_lexer_Token(ptr %a80) %t81 = load %S.ast.Type, ptr %a77 call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t81 endif1132: %t82 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t82, ptr %a83 store { ptr, i64, i64 } { ptr @.str.637, i64 3, i64 0 }, ptr %a84 %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) %t86 = icmp ne i32 %t85, 0 br i1 %t86, label %then1133, label %endif1135 then1133: %t87 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.638, i64 3, i64 0 }) call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t87 endif1135: %t88 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t88, ptr %a89 store { ptr, i64, i64 } { ptr @.str.639, i64 3, i64 0 }, ptr %a90 %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) %t92 = icmp ne i32 %t91, 0 br i1 %t92, label %then1136, label %endif1138 then1136: %t93 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.640, i64 5, i64 0 }) call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t93 endif1138: %t94 = load { ptr, i64, i64 }, ptr %a40 %t95 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %t94) call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t95 endif1125: %t96 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.641, i64 5, i64 0 }, 0 %t97 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t97, ptr %a98 call void @finch_str_copy(ptr %a99, ptr %a98) %t100 = load { ptr, i64, i64 }, ptr %a99 %t101 = insertvalue %S.ast.Type %t96, { ptr, i64, i64 } %t100, 2 store %S.ast.Type %t101, ptr %a102 %t103 = load ptr, ptr %a1 %t104 = call i1 @finch.parser.at(ptr %t103, { ptr, i64, i64 } { ptr @.str.642, i64 1, i64 0 }) br label %logic.from1139 logic.from1139: br i1 %t104, label %logic.rhs1140, label %logic.end1141 logic.rhs1140: %t105 = load ptr, ptr %a1 %t106 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t105, i64 1) store { ptr, i64, i64 } %t106, ptr %a107 store { ptr, i64, i64 } { ptr @.str.643, i64 5, i64 0 }, ptr %a108 %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) %t110 = icmp ne i32 %t109, 0 store { ptr, i64, i64 } %t106, ptr %a111 call void @finch_str_drop(ptr %a111) br label %logic.rend1142 logic.rend1142: br label %logic.end1141 logic.end1141: %t112 = phi i1 [ false, %logic.from1139 ], [ %t110, %logic.rend1142 ] br i1 %t112, label %then1143, label %endif1145 then1143: %t113 = load ptr, ptr %a1 %t114 = call %S.lexer.Token @finch.parser.next(ptr %t113) store %S.lexer.Token %t114, ptr %a115 call void @finch.drop.S_lexer_Token(ptr %a115) %t116 = load { ptr, i64, i64 }, ptr %a40 %t117 = getelementptr inbounds %S.ast.Type, ptr %a102, i32 0, i32 3 store { ptr, i64, i64 } %t116, ptr %a118 call void @finch_str_copy(ptr %a119, ptr %a118) %t120 = load { ptr, i64, i64 }, ptr %a119 %t121 = load { ptr, i64, i64 }, ptr %t117 store { ptr, i64, i64 } %t120, ptr %t117 store { ptr, i64, i64 } %t121, ptr %a122 call void @finch_str_drop(ptr %a122) %t123 = load ptr, ptr %a1 %t124 = call %S.lexer.Token @finch.parser.next(ptr %t123) %t125 = extractvalue %S.lexer.Token %t124, 1 store { ptr, i64, i64 } %t125, ptr %a126 call void @finch_str_copy(ptr %a127, ptr %a126) %t128 = load { ptr, i64, i64 }, ptr %a127 store %S.lexer.Token %t124, ptr %a129 call void @finch.drop.S_lexer_Token(ptr %a129) %t130 = getelementptr inbounds %S.ast.Type, ptr %a102, i32 0, i32 2 %t131 = load { ptr, i64, i64 }, ptr %t130 store { ptr, i64, i64 } %t128, ptr %t130 store { ptr, i64, i64 } %t131, ptr %a132 call void @finch_str_drop(ptr %a132) br label %endif1145 endif1145: %t133 = load ptr, ptr %a1 %t134 = call i1 @finch.parser.at(ptr %t133, { ptr, i64, i64 } { ptr @.str.644, i64 1, i64 0 }) br label %logic.from1146 logic.from1146: br i1 %t134, label %logic.rhs1147, label %logic.end1148 logic.rhs1147: %t135 = load ptr, ptr %a1 %t136 = call %S.lexer.Token @finch.parser.cur(ptr %t135) %t137 = extractvalue %S.lexer.Token %t136, 4 store %S.lexer.Token %t136, ptr %a138 call void @finch.drop.S_lexer_Token(ptr %a138) %t139 = xor i1 %t137, true br label %logic.rend1149 logic.rend1149: br label %logic.end1148 logic.end1148: %t140 = phi i1 [ false, %logic.from1146 ], [ %t139, %logic.rend1149 ] br label %logic.from1150 logic.from1150: br i1 %t140, label %logic.rhs1151, label %logic.end1152 logic.rhs1151: %t141 = load ptr, ptr %a1 %t142 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t141, i64 1) store { ptr, i64, i64 } %t142, ptr %a143 store { ptr, i64, i64 } { ptr @.str.645, i64 1, i64 0 }, ptr %a144 %t145 = call i32 @finch_str_eq(ptr %a143, ptr %a144) %t146 = icmp eq i32 %t145, 0 store { ptr, i64, i64 } %t142, ptr %a147 call void @finch_str_drop(ptr %a147) br label %logic.rend1153 logic.rend1153: br label %logic.end1152 logic.end1152: %t148 = phi i1 [ false, %logic.from1150 ], [ %t146, %logic.rend1153 ] br i1 %t148, label %then1154, label %endif1156 then1154: %t149 = load ptr, ptr %a1 %t150 = call %S.lexer.Token @finch.parser.next(ptr %t149) store %S.lexer.Token %t150, ptr %a151 call void @finch.drop.S_lexer_Token(ptr %a151) br label %while.cond1157 while.cond1157: br label %while.body1158 while.body1158: %t152 = getelementptr inbounds %S.ast.Type, ptr %a102, i32 0, i32 1 %t153 = getelementptr inbounds { ptr, i64, i64 }, ptr %t152, i32 0, i32 1 %t154 = load ptr, ptr %a1 %t155 = call %S.ast.Type @finch.parser.parseType(ptr %t154) %t156 = load i64, ptr %t153 %t157 = add i64 %t156, 1 call void @finch_arr_reserve(ptr %t152, i64 %t157, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t158 = load ptr, ptr %t152 %t159 = getelementptr inbounds %S.ast.Type, ptr %t158, i64 %t156 store %S.ast.Type %t155, ptr %t159 store i64 %t157, ptr %t153 %t160 = load ptr, ptr %a1 %t161 = call i1 @finch.parser.accept(ptr %t160, { ptr, i64, i64 } { ptr @.str.646, i64 1, i64 0 }) %t162 = xor i1 %t161, true br i1 %t162, label %then1160, label %endif1162 then1160: br label %while.end1159 endif1162: br label %while.cond1157 while.end1159: %t163 = load ptr, ptr %a1 %t164 = call %S.lexer.Token @finch.parser.expect(ptr %t163, { ptr, i64, i64 } { ptr @.str.647, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.648, i64 28, i64 0 }) store %S.lexer.Token %t164, ptr %a165 call void @finch.drop.S_lexer_Token(ptr %a165) br label %endif1156 endif1156: %t166 = load %S.ast.Type, ptr %a102 call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t166 } define internal i1 @finch.parser.genericDeclAhead(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca i64, align 16 %a27 = alloca i64, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.649, i64 5, i64 0 }) %t4 = xor i1 %t3, true br label %logic.from1163 logic.from1163: br i1 %t4, label %logic.end1165, label %logic.rhs1164 logic.rhs1164: %t5 = load ptr, ptr %a1 %t6 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t5, i64 1) store { ptr, i64, i64 } %t6, ptr %a7 store { ptr, i64, i64 } { ptr @.str.650, i64 1, i64 0 }, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp eq i32 %t9, 0 store { ptr, i64, i64 } %t6, ptr %a11 call void @finch_str_drop(ptr %a11) br label %logic.rend1166 logic.rend1166: br label %logic.end1165 logic.end1165: %t12 = phi i1 [ true, %logic.from1163 ], [ %t10, %logic.rend1166 ] br label %logic.from1167 logic.from1167: br i1 %t12, label %logic.end1169, label %logic.rhs1168 logic.rhs1168: %t13 = load ptr, ptr %a1 %t14 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t13, i64 2) store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.651, i64 1, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 store { ptr, i64, i64 } %t14, ptr %a19 call void @finch_str_drop(ptr %a19) br label %logic.rend1170 logic.rend1170: br label %logic.end1169 logic.end1169: %t20 = phi i1 [ true, %logic.from1167 ], [ %t18, %logic.rend1170 ] br i1 %t20, label %then1171, label %endif1173 then1171: ret i1 false endif1173: store i64 0, ptr %a21 %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null br i1 %t23, label %panic1174, label %ok1175 panic1174: call void @finch_panic(ptr @.str.652, i64 148, ptr @.str.653) unreachable ok1175: %t24 = getelementptr inbounds %S.parser.Parser, ptr %t22, i32 0, i32 1 %t25 = load i64, ptr %t24 %t26 = add i64 %t25, 1 store i64 %t26, ptr %a27 br label %while.cond1176 while.cond1176: %t28 = load i64, ptr %a27 %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null br i1 %t30, label %panic1179, label %ok1180 panic1179: call void @finch_panic(ptr @.str.654, i64 149, ptr @.str.655) unreachable ok1180: %t31 = getelementptr inbounds %S.parser.Parser, ptr %t29, i32 0, i32 0 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 %t33 = load i64, ptr %t32 %t34 = icmp slt i64 %t28, %t33 br i1 %t34, label %while.body1177, label %while.end1178 while.body1177: %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null br i1 %t36, label %panic1181, label %ok1182 panic1181: call void @finch_panic(ptr @.str.656, i64 150, ptr @.str.657) unreachable ok1182: %t37 = getelementptr inbounds %S.parser.Parser, ptr %t35, i32 0, i32 0 %t38 = load i64, ptr %a27 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 br i1 %t41, label %range1183, label %inrange1184 range1183: call void @finch_panic_index(ptr @.str.658, i64 150, i64 %t38, i64 %t40) unreachable inrange1184: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.lexer.Token, ptr %t42, i64 %t38 %t44 = getelementptr inbounds %S.lexer.Token, ptr %t43, i32 0, i32 0 %t45 = load { ptr, i64, i64 }, ptr %t44 store { ptr, i64, i64 } %t45, ptr %a46 call void @finch_str_copy(ptr %a47, ptr %a46) %t48 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t48, ptr %a49 %t50 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.659, i64 1, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 br i1 %t54, label %then1185, label %else1186 then1185: %t55 = load i64, ptr %a21 %t56 = add i64 %t55, 1 store i64 %t56, ptr %a21 br label %endif1187 else1186: %t57 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t57, ptr %a58 store { ptr, i64, i64 } { ptr @.str.660, i64 1, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 br i1 %t61, label %then1188, label %else1189 then1188: %t62 = load i64, ptr %a21 %t63 = sub i64 %t62, 1 store i64 %t63, ptr %a21 %t64 = load i64, ptr %a21 %t65 = icmp eq i64 %t64, 0 br i1 %t65, label %then1191, label %endif1193 then1191: %t66 = load i64, ptr %a27 %t67 = add i64 %t66, 1 %t68 = load ptr, ptr %a1 %t69 = icmp eq ptr %t68, null br i1 %t69, label %panic1194, label %ok1195 panic1194: call void @finch_panic(ptr @.str.661, i64 156, ptr @.str.662) unreachable ok1195: %t70 = getelementptr inbounds %S.parser.Parser, ptr %t68, i32 0, i32 0 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 %t72 = load i64, ptr %t71 %t73 = icmp slt i64 %t67, %t72 br label %logic.from1196 logic.from1196: br i1 %t73, label %logic.rhs1197, label %logic.end1198 logic.rhs1197: %t74 = load ptr, ptr %a1 %t75 = icmp eq ptr %t74, null br i1 %t75, label %panic1199, label %ok1200 panic1199: call void @finch_panic(ptr @.str.663, i64 156, ptr @.str.664) unreachable ok1200: %t76 = getelementptr inbounds %S.parser.Parser, ptr %t74, i32 0, i32 0 %t77 = load i64, ptr %a27 %t78 = add i64 %t77, 1 %t79 = load { ptr, i64, i64 }, ptr %t76 %t80 = extractvalue { ptr, i64, i64 } %t79, 1 %t81 = icmp uge i64 %t78, %t80 br i1 %t81, label %range1201, label %inrange1202 range1201: call void @finch_panic_index(ptr @.str.665, i64 156, i64 %t78, i64 %t80) unreachable inrange1202: %t82 = extractvalue { ptr, i64, i64 } %t79, 0 %t83 = getelementptr inbounds %S.lexer.Token, ptr %t82, i64 %t78 %t84 = getelementptr inbounds %S.lexer.Token, ptr %t83, i32 0, i32 0 %t85 = load { ptr, i64, i64 }, ptr %t84 store { ptr, i64, i64 } %t85, ptr %a86 store { ptr, i64, i64 } { ptr @.str.666, i64 5, i64 0 }, ptr %a87 %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) %t89 = icmp ne i32 %t88, 0 br label %logic.rend1203 logic.rend1203: br label %logic.end1198 logic.end1198: %t90 = phi i1 [ false, %logic.from1196 ], [ %t89, %logic.rend1203 ] br label %logic.from1204 logic.from1204: br i1 %t90, label %logic.rhs1205, label %logic.end1206 logic.rhs1205: %t91 = load ptr, ptr %a1 %t92 = icmp eq ptr %t91, null br i1 %t92, label %panic1207, label %ok1208 panic1207: call void @finch_panic(ptr @.str.667, i64 156, ptr @.str.668) unreachable ok1208: %t93 = getelementptr inbounds %S.parser.Parser, ptr %t91, i32 0, i32 0 %t94 = load i64, ptr %a27 %t95 = add i64 %t94, 1 %t96 = load { ptr, i64, i64 }, ptr %t93 %t97 = extractvalue { ptr, i64, i64 } %t96, 1 %t98 = icmp uge i64 %t95, %t97 br i1 %t98, label %range1209, label %inrange1210 range1209: call void @finch_panic_index(ptr @.str.669, i64 156, i64 %t95, i64 %t97) unreachable inrange1210: %t99 = extractvalue { ptr, i64, i64 } %t96, 0 %t100 = getelementptr inbounds %S.lexer.Token, ptr %t99, i64 %t95 %t101 = getelementptr inbounds %S.lexer.Token, ptr %t100, i32 0, i32 4 %t102 = load i1, ptr %t101 %t103 = xor i1 %t102, true br label %logic.rend1211 logic.rend1211: br label %logic.end1206 logic.end1206: %t104 = phi i1 [ false, %logic.from1204 ], [ %t103, %logic.rend1211 ] call void @finch_str_drop(ptr %a49) ret i1 %t104 endif1193: br label %endif1190 else1189: %t105 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t105, ptr %a106 store { ptr, i64, i64 } { ptr @.str.670, i64 3, i64 0 }, ptr %a107 %t108 = call i32 @finch_str_eq(ptr %a106, ptr %a107) %t109 = icmp ne i32 %t108, 0 br label %logic.from1212 logic.from1212: br i1 %t109, label %logic.end1214, label %logic.rhs1213 logic.rhs1213: %t110 = load ptr, ptr %a1 %t111 = icmp eq ptr %t110, null br i1 %t111, label %panic1215, label %ok1216 panic1215: call void @finch_panic(ptr @.str.671, i64 158, ptr @.str.672) unreachable ok1216: %t112 = getelementptr inbounds %S.parser.Parser, ptr %t110, i32 0, i32 0 %t113 = load i64, ptr %a27 %t114 = load { ptr, i64, i64 }, ptr %t112 %t115 = extractvalue { ptr, i64, i64 } %t114, 1 %t116 = icmp uge i64 %t113, %t115 br i1 %t116, label %range1217, label %inrange1218 range1217: call void @finch_panic_index(ptr @.str.673, i64 158, i64 %t113, i64 %t115) unreachable inrange1218: %t117 = extractvalue { ptr, i64, i64 } %t114, 0 %t118 = getelementptr inbounds %S.lexer.Token, ptr %t117, i64 %t113 %t119 = getelementptr inbounds %S.lexer.Token, ptr %t118, i32 0, i32 4 %t120 = load i1, ptr %t119 br label %logic.from1219 logic.from1219: br i1 %t120, label %logic.rhs1220, label %logic.end1221 logic.rhs1220: %t121 = load i64, ptr %a21 %t122 = icmp eq i64 %t121, 0 br label %logic.rend1222 logic.rend1222: br label %logic.end1221 logic.end1221: %t123 = phi i1 [ false, %logic.from1219 ], [ %t122, %logic.rend1222 ] br label %logic.rend1223 logic.rend1223: br label %logic.end1214 logic.end1214: %t124 = phi i1 [ true, %logic.from1212 ], [ %t123, %logic.rend1223 ] br i1 %t124, label %then1224, label %endif1226 then1224: call void @finch_str_drop(ptr %a49) ret i1 false endif1226: br label %endif1190 endif1190: br label %endif1187 endif1187: %t125 = load i64, ptr %a27 %t126 = add i64 %t125, 1 store i64 %t126, ptr %a27 call void @finch_str_drop(ptr %a49) br label %while.cond1176 while.end1178: ret i1 false } define internal i1 @finch.parser.genericCallAheadFrom(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a9 = alloca i1, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic1227, label %ok1228 panic1227: call void @finch_panic(ptr @.str.674, i64 168, ptr @.str.675) unreachable ok1228: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = sub i64 %t5, 1 store i64 %t6, ptr %t4 %t7 = load ptr, ptr %a1 %t8 = call i1 @finch.parser.genericCallAhead(ptr %t7) store i1 %t8, ptr %a9 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic1229, label %ok1230 panic1229: call void @finch_panic(ptr @.str.676, i64 170, ptr @.str.677) unreachable ok1230: %t12 = getelementptr inbounds %S.parser.Parser, ptr %t10, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = add i64 %t13, 1 store i64 %t14, ptr %t12 %t15 = load i1, ptr %a9 ret i1 %t15 } define internal i1 @finch.parser.genericCallAhead(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca i64, align 16 %a39 = alloca i64, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t2, i64 1) store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.678, i64 1, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp eq i32 %t6, 0 store { ptr, i64, i64 } %t3, ptr %a8 call void @finch_str_drop(ptr %a8) br label %logic.from1231 logic.from1231: br i1 %t7, label %logic.end1233, label %logic.rhs1232 logic.rhs1232: %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null br i1 %t10, label %panic1234, label %ok1235 panic1234: call void @finch_panic(ptr @.str.679, i64 176, ptr @.str.680) unreachable ok1235: %t11 = getelementptr inbounds %S.parser.Parser, ptr %t9, i32 0, i32 0 %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic1236, label %ok1237 panic1236: call void @finch_panic(ptr @.str.681, i64 176, ptr @.str.682) unreachable ok1237: %t14 = getelementptr inbounds %S.parser.Parser, ptr %t12, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = add i64 %t15, 1 %t17 = load { ptr, i64, i64 }, ptr %t11 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 %t16, %t18 br i1 %t19, label %range1238, label %inrange1239 range1238: call void @finch_panic_index(ptr @.str.683, i64 176, i64 %t16, i64 %t18) unreachable inrange1239: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.lexer.Token, ptr %t20, i64 %t16 %t22 = getelementptr inbounds %S.lexer.Token, ptr %t21, i32 0, i32 4 %t23 = load i1, ptr %t22 br label %logic.rend1240 logic.rend1240: br label %logic.end1233 logic.end1233: %t24 = phi i1 [ true, %logic.from1231 ], [ %t23, %logic.rend1240 ] br label %logic.from1241 logic.from1241: br i1 %t24, label %logic.end1243, label %logic.rhs1242 logic.rhs1242: %t25 = load ptr, ptr %a1 %t26 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t25, i64 2) store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.684, i64 1, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 store { ptr, i64, i64 } %t26, ptr %a31 call void @finch_str_drop(ptr %a31) br label %logic.rend1244 logic.rend1244: br label %logic.end1243 logic.end1243: %t32 = phi i1 [ true, %logic.from1241 ], [ %t30, %logic.rend1244 ] br i1 %t32, label %then1245, label %endif1247 then1245: ret i1 false endif1247: store i64 0, ptr %a33 %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null br i1 %t35, label %panic1248, label %ok1249 panic1248: call void @finch_panic(ptr @.str.685, i64 180, ptr @.str.686) unreachable ok1249: %t36 = getelementptr inbounds %S.parser.Parser, ptr %t34, i32 0, i32 1 %t37 = load i64, ptr %t36 %t38 = add i64 %t37, 1 store i64 %t38, ptr %a39 br label %while.cond1250 while.cond1250: %t40 = load i64, ptr %a39 %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null br i1 %t42, label %panic1253, label %ok1254 panic1253: call void @finch_panic(ptr @.str.687, i64 181, ptr @.str.688) unreachable ok1254: %t43 = getelementptr inbounds %S.parser.Parser, ptr %t41, i32 0, i32 0 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i32 0, i32 1 %t45 = load i64, ptr %t44 %t46 = icmp slt i64 %t40, %t45 br i1 %t46, label %while.body1251, label %while.end1252 while.body1251: %t47 = load ptr, ptr %a1 %t48 = icmp eq ptr %t47, null br i1 %t48, label %panic1255, label %ok1256 panic1255: call void @finch_panic(ptr @.str.689, i64 182, ptr @.str.690) unreachable ok1256: %t49 = getelementptr inbounds %S.parser.Parser, ptr %t47, i32 0, i32 0 %t50 = load i64, ptr %a39 %t51 = load { ptr, i64, i64 }, ptr %t49 %t52 = extractvalue { ptr, i64, i64 } %t51, 1 %t53 = icmp uge i64 %t50, %t52 br i1 %t53, label %range1257, label %inrange1258 range1257: call void @finch_panic_index(ptr @.str.691, i64 182, i64 %t50, i64 %t52) unreachable inrange1258: %t54 = extractvalue { ptr, i64, i64 } %t51, 0 %t55 = getelementptr inbounds %S.lexer.Token, ptr %t54, i64 %t50 %t56 = getelementptr inbounds %S.lexer.Token, ptr %t55, i32 0, i32 0 %t57 = load { ptr, i64, i64 }, ptr %t56 store { ptr, i64, i64 } %t57, ptr %a58 call void @finch_str_copy(ptr %a59, ptr %a58) %t60 = load { ptr, i64, i64 }, ptr %a59 store { ptr, i64, i64 } %t60, ptr %a61 %t62 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } %t62, ptr %a63 store { ptr, i64, i64 } { ptr @.str.692, i64 1, i64 0 }, ptr %a64 %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) %t66 = icmp ne i32 %t65, 0 br i1 %t66, label %then1259, label %else1260 then1259: %t67 = load i64, ptr %a33 %t68 = add i64 %t67, 1 store i64 %t68, ptr %a33 br label %endif1261 else1260: %t69 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } %t69, ptr %a70 store { ptr, i64, i64 } { ptr @.str.693, i64 1, i64 0 }, ptr %a71 %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) %t73 = icmp ne i32 %t72, 0 br i1 %t73, label %then1262, label %else1263 then1262: %t74 = load i64, ptr %a33 %t75 = sub i64 %t74, 1 store i64 %t75, ptr %a33 %t76 = load i64, ptr %a33 %t77 = icmp eq i64 %t76, 0 br i1 %t77, label %then1265, label %endif1267 then1265: %t78 = load i64, ptr %a39 %t79 = add i64 %t78, 1 %t80 = load ptr, ptr %a1 %t81 = icmp eq ptr %t80, null br i1 %t81, label %panic1268, label %ok1269 panic1268: call void @finch_panic(ptr @.str.694, i64 188, ptr @.str.695) unreachable ok1269: %t82 = getelementptr inbounds %S.parser.Parser, ptr %t80, i32 0, i32 0 %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i32 0, i32 1 %t84 = load i64, ptr %t83 %t85 = icmp slt i64 %t79, %t84 br label %logic.from1270 logic.from1270: br i1 %t85, label %logic.rhs1271, label %logic.end1272 logic.rhs1271: %t86 = load ptr, ptr %a1 %t87 = icmp eq ptr %t86, null br i1 %t87, label %panic1273, label %ok1274 panic1273: call void @finch_panic(ptr @.str.696, i64 188, ptr @.str.697) unreachable ok1274: %t88 = getelementptr inbounds %S.parser.Parser, ptr %t86, i32 0, i32 0 %t89 = load i64, ptr %a39 %t90 = add i64 %t89, 1 %t91 = load { ptr, i64, i64 }, ptr %t88 %t92 = extractvalue { ptr, i64, i64 } %t91, 1 %t93 = icmp uge i64 %t90, %t92 br i1 %t93, label %range1275, label %inrange1276 range1275: call void @finch_panic_index(ptr @.str.698, i64 188, i64 %t90, i64 %t92) unreachable inrange1276: %t94 = extractvalue { ptr, i64, i64 } %t91, 0 %t95 = getelementptr inbounds %S.lexer.Token, ptr %t94, i64 %t90 %t96 = getelementptr inbounds %S.lexer.Token, ptr %t95, i32 0, i32 0 %t97 = load { ptr, i64, i64 }, ptr %t96 store { ptr, i64, i64 } %t97, ptr %a98 store { ptr, i64, i64 } { ptr @.str.699, i64 1, i64 0 }, ptr %a99 %t100 = call i32 @finch_str_eq(ptr %a98, ptr %a99) %t101 = icmp ne i32 %t100, 0 br label %logic.rend1277 logic.rend1277: br label %logic.end1272 logic.end1272: %t102 = phi i1 [ false, %logic.from1270 ], [ %t101, %logic.rend1277 ] br label %logic.from1278 logic.from1278: br i1 %t102, label %logic.rhs1279, label %logic.end1280 logic.rhs1279: %t103 = load ptr, ptr %a1 %t104 = icmp eq ptr %t103, null br i1 %t104, label %panic1281, label %ok1282 panic1281: call void @finch_panic(ptr @.str.700, i64 188, ptr @.str.701) unreachable ok1282: %t105 = getelementptr inbounds %S.parser.Parser, ptr %t103, i32 0, i32 0 %t106 = load i64, ptr %a39 %t107 = add i64 %t106, 1 %t108 = load { ptr, i64, i64 }, ptr %t105 %t109 = extractvalue { ptr, i64, i64 } %t108, 1 %t110 = icmp uge i64 %t107, %t109 br i1 %t110, label %range1283, label %inrange1284 range1283: call void @finch_panic_index(ptr @.str.702, i64 188, i64 %t107, i64 %t109) unreachable inrange1284: %t111 = extractvalue { ptr, i64, i64 } %t108, 0 %t112 = getelementptr inbounds %S.lexer.Token, ptr %t111, i64 %t107 %t113 = getelementptr inbounds %S.lexer.Token, ptr %t112, i32 0, i32 4 %t114 = load i1, ptr %t113 %t115 = xor i1 %t114, true br label %logic.rend1285 logic.rend1285: br label %logic.end1280 logic.end1280: %t116 = phi i1 [ false, %logic.from1278 ], [ %t115, %logic.rend1285 ] call void @finch_str_drop(ptr %a61) ret i1 %t116 endif1267: br label %endif1264 else1263: %t117 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } %t117, ptr %a118 store { ptr, i64, i64 } { ptr @.str.703, i64 3, i64 0 }, ptr %a119 %t120 = call i32 @finch_str_eq(ptr %a118, ptr %a119) %t121 = icmp ne i32 %t120, 0 br label %logic.from1286 logic.from1286: br i1 %t121, label %logic.end1288, label %logic.rhs1287 logic.rhs1287: %t122 = load ptr, ptr %a1 %t123 = icmp eq ptr %t122, null br i1 %t123, label %panic1289, label %ok1290 panic1289: call void @finch_panic(ptr @.str.704, i64 190, ptr @.str.705) unreachable ok1290: %t124 = getelementptr inbounds %S.parser.Parser, ptr %t122, i32 0, i32 0 %t125 = load i64, ptr %a39 %t126 = load { ptr, i64, i64 }, ptr %t124 %t127 = extractvalue { ptr, i64, i64 } %t126, 1 %t128 = icmp uge i64 %t125, %t127 br i1 %t128, label %range1291, label %inrange1292 range1291: call void @finch_panic_index(ptr @.str.706, i64 190, i64 %t125, i64 %t127) unreachable inrange1292: %t129 = extractvalue { ptr, i64, i64 } %t126, 0 %t130 = getelementptr inbounds %S.lexer.Token, ptr %t129, i64 %t125 %t131 = getelementptr inbounds %S.lexer.Token, ptr %t130, i32 0, i32 4 %t132 = load i1, ptr %t131 br label %logic.rend1293 logic.rend1293: br label %logic.end1288 logic.end1288: %t133 = phi i1 [ true, %logic.from1286 ], [ %t132, %logic.rend1293 ] br i1 %t133, label %then1294, label %endif1296 then1294: call void @finch_str_drop(ptr %a61) ret i1 false endif1296: br label %endif1264 endif1264: br label %endif1261 endif1261: %t134 = load i64, ptr %a39 %t135 = add i64 %t134, 1 store i64 %t135, ptr %a39 call void @finch_str_drop(ptr %a61) br label %while.cond1250 while.end1252: ret i1 false } define internal i1 @finch.parser.atDeclaration(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca %S.lexer.Token, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca %S.lexer.Token, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.genericDeclAhead(ptr %t2) br i1 %t3, label %then1297, label %endif1299 then1297: ret i1 true endif1299: %t4 = load ptr, ptr %a1 %t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.707, i64 1, i64 0 }) br i1 %t5, label %then1300, label %endif1302 then1300: %t6 = load ptr, ptr %a1 %t7 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t6, i64 1) store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.708, i64 1, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 store { ptr, i64, i64 } %t7, ptr %a12 call void @finch_str_drop(ptr %a12) ret i1 %t11 endif1302: %t13 = load ptr, ptr %a1 %t14 = call i1 @finch.parser.at(ptr %t13, { ptr, i64, i64 } { ptr @.str.709, i64 5, i64 0 }) %t15 = xor i1 %t14, true br i1 %t15, label %then1303, label %endif1305 then1303: ret i1 false endif1305: %t16 = load ptr, ptr %a1 %t17 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t16, i64 1) store { ptr, i64, i64 } %t17, ptr %a18 %t19 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.710, i64 5, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 br i1 %t23, label %then1306, label %endif1308 then1306: %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null br i1 %t25, label %panic1309, label %ok1310 panic1309: call void @finch_panic(ptr @.str.711, i64 210, ptr @.str.712) unreachable ok1310: %t26 = getelementptr inbounds %S.parser.Parser, ptr %t24, i32 0, i32 0 %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null br i1 %t28, label %panic1311, label %ok1312 panic1311: call void @finch_panic(ptr @.str.713, i64 210, ptr @.str.714) unreachable ok1312: %t29 = getelementptr inbounds %S.parser.Parser, ptr %t27, i32 0, i32 1 %t30 = load i64, ptr %t29 %t31 = add i64 %t30, 1 %t32 = load { ptr, i64, i64 }, ptr %t26 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 br i1 %t34, label %range1313, label %inrange1314 range1313: call void @finch_panic_index(ptr @.str.715, i64 210, i64 %t31, i64 %t33) unreachable inrange1314: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.lexer.Token, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.lexer.Token, ptr %t36, i32 0, i32 4 %t38 = load i1, ptr %t37 %t39 = xor i1 %t38, true call void @finch_str_drop(ptr %a18) ret i1 %t39 endif1308: %t40 = load ptr, ptr %a1 %t41 = call %S.lexer.Token @finch.parser.cur(ptr %t40) %t42 = extractvalue %S.lexer.Token %t41, 1 store { ptr, i64, i64 } %t42, ptr %a43 call void @finch_str_copy(ptr %a44, ptr %a43) %t45 = load { ptr, i64, i64 }, ptr %a44 store %S.lexer.Token %t41, ptr %a46 call void @finch.drop.S_lexer_Token(ptr %a46) store { ptr, i64, i64 } %t45, ptr %a47 store { ptr, i64, i64 } { ptr @.str.716, i64 3, i64 0 }, ptr %a48 %t49 = call i32 @finch_str_eq(ptr %a47, ptr %a48) %t50 = icmp ne i32 %t49, 0 store { ptr, i64, i64 } %t45, ptr %a51 call void @finch_str_drop(ptr %a51) br label %logic.from1315 logic.from1315: br i1 %t50, label %logic.end1317, label %logic.rhs1316 logic.rhs1316: %t52 = load ptr, ptr %a1 %t53 = call %S.lexer.Token @finch.parser.cur(ptr %t52) %t54 = extractvalue %S.lexer.Token %t53, 1 store { ptr, i64, i64 } %t54, ptr %a55 call void @finch_str_copy(ptr %a56, ptr %a55) %t57 = load { ptr, i64, i64 }, ptr %a56 store %S.lexer.Token %t53, ptr %a58 call void @finch.drop.S_lexer_Token(ptr %a58) store { ptr, i64, i64 } %t57, ptr %a59 store { ptr, i64, i64 } { ptr @.str.717, i64 3, i64 0 }, ptr %a60 %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) %t62 = icmp ne i32 %t61, 0 store { ptr, i64, i64 } %t57, ptr %a63 call void @finch_str_drop(ptr %a63) br label %logic.rend1318 logic.rend1318: br label %logic.end1317 logic.end1317: %t64 = phi i1 [ true, %logic.from1315 ], [ %t62, %logic.rend1318 ] br label %logic.from1319 logic.from1319: br i1 %t64, label %logic.rhs1320, label %logic.end1321 logic.rhs1320: %t65 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t65, ptr %a66 store { ptr, i64, i64 } { ptr @.str.718, i64 1, i64 0 }, ptr %a67 %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) %t69 = icmp ne i32 %t68, 0 br label %logic.rend1322 logic.rend1322: br label %logic.end1321 logic.end1321: %t70 = phi i1 [ false, %logic.from1319 ], [ %t69, %logic.rend1322 ] br i1 %t70, label %then1323, label %endif1325 then1323: call void @finch_str_drop(ptr %a18) ret i1 true endif1325: %t71 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t71, ptr %a72 store { ptr, i64, i64 } { ptr @.str.719, i64 1, i64 0 }, ptr %a73 %t74 = call i32 @finch_str_eq(ptr %a72, ptr %a73) %t75 = icmp ne i32 %t74, 0 br label %logic.from1326 logic.from1326: br i1 %t75, label %logic.rhs1327, label %logic.end1328 logic.rhs1327: %t76 = load ptr, ptr %a1 %t77 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t76, i64 2) store { ptr, i64, i64 } %t77, ptr %a78 store { ptr, i64, i64 } { ptr @.str.720, i64 5, i64 0 }, ptr %a79 %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) %t81 = icmp ne i32 %t80, 0 store { ptr, i64, i64 } %t77, ptr %a82 call void @finch_str_drop(ptr %a82) br label %logic.rend1329 logic.rend1329: br label %logic.end1328 logic.end1328: %t83 = phi i1 [ false, %logic.from1326 ], [ %t81, %logic.rend1329 ] br label %logic.from1330 logic.from1330: br i1 %t83, label %logic.rhs1331, label %logic.end1332 logic.rhs1331: %t84 = load ptr, ptr %a1 %t85 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t84, i64 3) store { ptr, i64, i64 } %t85, ptr %a86 store { ptr, i64, i64 } { ptr @.str.721, i64 5, i64 0 }, ptr %a87 %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) %t89 = icmp ne i32 %t88, 0 store { ptr, i64, i64 } %t85, ptr %a90 call void @finch_str_drop(ptr %a90) br label %logic.rend1333 logic.rend1333: br label %logic.end1332 logic.end1332: %t91 = phi i1 [ false, %logic.from1330 ], [ %t89, %logic.rend1333 ] br label %logic.from1334 logic.from1334: br i1 %t91, label %logic.rhs1335, label %logic.end1336 logic.rhs1335: %t92 = load ptr, ptr %a1 %t93 = icmp eq ptr %t92, null br i1 %t93, label %panic1337, label %ok1338 panic1337: call void @finch_panic(ptr @.str.722, i64 215, ptr @.str.723) unreachable ok1338: %t94 = getelementptr inbounds %S.parser.Parser, ptr %t92, i32 0, i32 0 %t95 = load ptr, ptr %a1 %t96 = icmp eq ptr %t95, null br i1 %t96, label %panic1339, label %ok1340 panic1339: call void @finch_panic(ptr @.str.724, i64 215, ptr @.str.725) unreachable ok1340: %t97 = getelementptr inbounds %S.parser.Parser, ptr %t95, i32 0, i32 1 %t98 = load i64, ptr %t97 %t99 = add i64 %t98, 3 %t100 = load { ptr, i64, i64 }, ptr %t94 %t101 = extractvalue { ptr, i64, i64 } %t100, 1 %t102 = icmp uge i64 %t99, %t101 br i1 %t102, label %range1341, label %inrange1342 range1341: call void @finch_panic_index(ptr @.str.726, i64 215, i64 %t99, i64 %t101) unreachable inrange1342: %t103 = extractvalue { ptr, i64, i64 } %t100, 0 %t104 = getelementptr inbounds %S.lexer.Token, ptr %t103, i64 %t99 %t105 = getelementptr inbounds %S.lexer.Token, ptr %t104, i32 0, i32 4 %t106 = load i1, ptr %t105 %t107 = xor i1 %t106, true br label %logic.rend1343 logic.rend1343: br label %logic.end1336 logic.end1336: %t108 = phi i1 [ false, %logic.from1334 ], [ %t107, %logic.rend1343 ] call void @finch_str_drop(ptr %a18) ret i1 %t108 } define internal void @finch.parser.endOfStatement(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a10 = alloca %S.lexer.Token, align 16 %a18 = alloca %S.lexer.Token, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca %S.lexer.Token, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.727, i64 1, i64 0 }) br label %logic.from1344 logic.from1344: br i1 %t3, label %logic.end1346, label %logic.rhs1345 logic.rhs1345: %t4 = load ptr, ptr %a1 %t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.728, i64 3, i64 0 }) br label %logic.rend1347 logic.rend1347: br label %logic.end1346 logic.end1346: %t6 = phi i1 [ true, %logic.from1344 ], [ %t5, %logic.rend1347 ] br label %logic.from1348 logic.from1348: br i1 %t6, label %logic.end1350, label %logic.rhs1349 logic.rhs1349: %t7 = load ptr, ptr %a1 %t8 = call %S.lexer.Token @finch.parser.cur(ptr %t7) %t9 = extractvalue %S.lexer.Token %t8, 4 store %S.lexer.Token %t8, ptr %a10 call void @finch.drop.S_lexer_Token(ptr %a10) br label %logic.rend1351 logic.rend1351: br label %logic.end1350 logic.end1350: %t11 = phi i1 [ true, %logic.from1348 ], [ %t9, %logic.rend1351 ] br i1 %t11, label %then1352, label %endif1354 then1352: ret void endif1354: %t12 = load ptr, ptr %a1 %t13 = load ptr, ptr %a1 %t14 = call %S.lexer.Token @finch.parser.cur(ptr %t13) %t15 = load ptr, ptr %a1 %t16 = call %S.lexer.Token @finch.parser.cur(ptr %t15) %t17 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t16) store %S.lexer.Token %t16, ptr %a18 call void @finch.drop.S_lexer_Token(ptr %a18) store { ptr, i64, i64 } { ptr @.str.729, i64 11, i64 0 }, ptr %a20 store { ptr, i64, i64 } %t17, ptr %a21 call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) store { ptr, i64, i64 } %t17, ptr %a22 call void @finch_str_drop(ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t23, ptr %a25 store { ptr, i64, i64 } { ptr @.str.730, i64 37, i64 0 }, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) store { ptr, i64, i64 } %t23, ptr %a27 call void @finch_str_drop(ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a24 call void @finch.parser.fail(ptr %t12, %S.lexer.Token %t14, { ptr, i64, i64 } %t28) store %S.lexer.Token %t14, ptr %a29 call void @finch.drop.S_lexer_Token(ptr %a29) store { ptr, i64, i64 } %t28, ptr %a30 call void @finch_str_drop(ptr %a30) ret void } define internal %S.ast.Program @finch.parser.parseProgram(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Program, align 16 %a10 = alloca %S.lexer.Token, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca %S.lexer.Token, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca %S.lexer.Token, align 16 %a87 = alloca %S.lexer.Token, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca %S.lexer.Token, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca i1, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca %S.ast.Node, align 16 %a170 = alloca %S.ast.Node, align 16 %a171 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 store %S.ast.Program zeroinitializer, ptr %a2 br label %while.cond1355 while.cond1355: %t3 = load ptr, ptr %a1 %t4 = call i1 @finch.parser.at(ptr %t3, { ptr, i64, i64 } { ptr @.str.731, i64 3, i64 0 }) %t5 = xor i1 %t4, true br i1 %t5, label %while.body1356, label %while.end1357 while.body1356: %t6 = load ptr, ptr %a1 %t7 = call i1 @finch.parser.at(ptr %t6, { ptr, i64, i64 } { ptr @.str.732, i64 6, i64 0 }) br i1 %t7, label %then1358, label %else1359 then1358: %t8 = load ptr, ptr %a1 %t9 = call %S.lexer.Token @finch.parser.next(ptr %t8) store %S.lexer.Token %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.733, i64 6, i64 0 }) br i1 %t12, label %then1361, label %else1362 then1361: %t13 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 4 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic1364, label %ok1365 panic1364: call void @finch_panic(ptr @.str.734, i64 233, ptr @.str.735) unreachable ok1365: %t17 = getelementptr inbounds %S.parser.Parser, ptr %t15, i32 0, i32 4 %t18 = load { ptr, i64, i64 }, ptr %t17 store { ptr, i64, i64 } %t18, ptr %a20 store { ptr, i64, i64 } { ptr @.str.736, i64 1, i64 0 }, ptr %a21 call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a19 %t23 = getelementptr inbounds %S.lexer.Token, ptr %a10, i32 0, i32 2 %t24 = load i64, ptr %t23 call void @finch_str_from_int(ptr %a25, i64 %t24) %t26 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t22, ptr %a28 store { ptr, i64, i64 } %t26, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) store { ptr, i64, i64 } %t22, ptr %a30 call void @finch_str_drop(ptr %a30) store { ptr, i64, i64 } %t26, ptr %a31 call void @finch_str_drop(ptr %a31) %t32 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t32, ptr %a34 store { ptr, i64, i64 } { ptr @.str.737, i64 1, i64 0 }, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) store { ptr, i64, i64 } %t32, ptr %a36 call void @finch_str_drop(ptr %a36) %t37 = load { ptr, i64, i64 }, ptr %a33 %t38 = getelementptr inbounds %S.lexer.Token, ptr %a10, i32 0, i32 3 %t39 = load i64, ptr %t38 call void @finch_str_from_int(ptr %a40, i64 %t39) %t41 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t37, ptr %a43 store { ptr, i64, i64 } %t41, ptr %a44 call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) store { ptr, i64, i64 } %t37, ptr %a45 call void @finch_str_drop(ptr %a45) store { ptr, i64, i64 } %t41, ptr %a46 call void @finch_str_drop(ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a42 %t48 = load i64, ptr %t14 %t49 = add i64 %t48, 1 call void @finch_arr_reserve(ptr %t13, i64 %t49, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t50 = load ptr, ptr %t13 %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t48 store { ptr, i64, i64 } %t47, ptr %t51 store i64 %t49, ptr %t14 %t52 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 3 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 %t54 = load ptr, ptr %a1 %t55 = call %S.lexer.Token @finch.parser.next(ptr %t54) %t56 = extractvalue %S.lexer.Token %t55, 1 store { ptr, i64, i64 } %t56, ptr %a57 call void @finch_str_copy(ptr %a58, ptr %a57) %t59 = load { ptr, i64, i64 }, ptr %a58 store %S.lexer.Token %t55, ptr %a60 call void @finch.drop.S_lexer_Token(ptr %a60) %t61 = load i64, ptr %t53 %t62 = add i64 %t61, 1 call void @finch_arr_reserve(ptr %t52, i64 %t62, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t63 = load ptr, ptr %t52 %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i64 %t61 store { ptr, i64, i64 } %t59, ptr %t64 store i64 %t62, ptr %t53 br label %endif1363 else1362: %t65 = load ptr, ptr %a1 %t66 = call i1 @finch.parser.at(ptr %t65, { ptr, i64, i64 } { ptr @.str.738, i64 5, i64 0 }) %t67 = xor i1 %t66, true br i1 %t67, label %then1366, label %endif1368 then1366: %t68 = load ptr, ptr %a1 %t69 = load %S.lexer.Token, ptr %a10 call void @finch.parser.fail(ptr %t68, %S.lexer.Token %t69, { ptr, i64, i64 } { ptr @.str.739, i64 51, i64 0 }) br label %endif1368 endif1368: %t70 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 2 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 %t72 = load ptr, ptr %a1 %t73 = call %S.lexer.Token @finch.parser.next(ptr %t72) %t74 = extractvalue %S.lexer.Token %t73, 1 store { ptr, i64, i64 } %t74, ptr %a75 call void @finch_str_copy(ptr %a76, ptr %a75) %t77 = load { ptr, i64, i64 }, ptr %a76 store %S.lexer.Token %t73, ptr %a78 call void @finch.drop.S_lexer_Token(ptr %a78) %t79 = load i64, ptr %t71 %t80 = add i64 %t79, 1 call void @finch_arr_reserve(ptr %t70, i64 %t80, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t81 = load ptr, ptr %t70 %t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %t81, i64 %t79 store { ptr, i64, i64 } %t77, ptr %t82 store i64 %t80, ptr %t71 br label %endif1363 endif1363: call void @finch.drop.S_lexer_Token(ptr %a10) br label %endif1360 else1359: %t83 = load ptr, ptr %a1 %t84 = call i1 @finch.parser.at(ptr %t83, { ptr, i64, i64 } { ptr @.str.740, i64 4, i64 0 }) br i1 %t84, label %then1369, label %else1370 then1369: %t85 = load ptr, ptr %a1 %t86 = call %S.lexer.Token @finch.parser.next(ptr %t85) store %S.lexer.Token %t86, ptr %a87 %t88 = load ptr, ptr %a1 %t89 = call %S.lexer.Token @finch.parser.expect(ptr %t88, { ptr, i64, i64 } { ptr @.str.741, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.742, i64 42, i64 0 }) %t90 = extractvalue %S.lexer.Token %t89, 1 store { ptr, i64, i64 } %t90, ptr %a91 call void @finch_str_copy(ptr %a92, ptr %a91) %t93 = load { ptr, i64, i64 }, ptr %a92 store %S.lexer.Token %t89, ptr %a94 call void @finch.drop.S_lexer_Token(ptr %a94) store { ptr, i64, i64 } %t93, ptr %a95 %t96 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t96, ptr %a97 store { ptr, i64, i64 } { ptr @.str.744, i64 2, i64 0 }, ptr %a99 %t100 = call i32 @finch_str_ends(ptr %a97, ptr %a99) %t101 = icmp ne i32 %t100, 0 br label %logic.from1372 logic.from1372: br i1 %t101, label %logic.end1374, label %logic.rhs1373 logic.rhs1373: %t102 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t102, ptr %a103 store { ptr, i64, i64 } { ptr @.str.746, i64 2, i64 0 }, ptr %a105 %t106 = call i32 @finch_str_ends(ptr %a103, ptr %a105) %t107 = icmp ne i32 %t106, 0 br label %logic.rend1375 logic.rend1375: br label %logic.end1374 logic.end1374: %t108 = phi i1 [ true, %logic.from1372 ], [ %t107, %logic.rend1375 ] br label %logic.from1376 logic.from1376: br i1 %t108, label %logic.end1378, label %logic.rhs1377 logic.rhs1377: %t109 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t109, ptr %a110 store { ptr, i64, i64 } { ptr @.str.748, i64 2, i64 0 }, ptr %a112 %t113 = call i32 @finch_str_ends(ptr %a110, ptr %a112) %t114 = icmp ne i32 %t113, 0 br label %logic.rend1379 logic.rend1379: br label %logic.end1378 logic.end1378: %t115 = phi i1 [ true, %logic.from1376 ], [ %t114, %logic.rend1379 ] store i1 %t115, ptr %a116 %t117 = load i1, ptr %a116 %t118 = xor i1 %t117, true br label %logic.from1380 logic.from1380: br i1 %t118, label %logic.rhs1381, label %logic.end1382 logic.rhs1381: %t119 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t119, ptr %a120 store { ptr, i64, i64 } { ptr @.str.750, i64 3, i64 0 }, ptr %a122 %t123 = call i32 @finch_str_starts(ptr %a120, ptr %a122) %t124 = icmp ne i32 %t123, 0 br label %logic.from1383 logic.from1383: br i1 %t124, label %logic.end1385, label %logic.rhs1384 logic.rhs1384: %t125 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t125, ptr %a126 store { ptr, i64, i64 } { ptr @.str.752, i64 3, i64 0 }, ptr %a128 %t129 = call i64 @finch_str_find(ptr %a126, ptr %a128) %t130 = icmp sge i64 %t129, 0 br label %logic.rend1386 logic.rend1386: br label %logic.end1385 logic.end1385: %t131 = phi i1 [ true, %logic.from1383 ], [ %t130, %logic.rend1386 ] br label %logic.from1387 logic.from1387: br i1 %t131, label %logic.end1389, label %logic.rhs1388 logic.rhs1388: %t132 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t132, ptr %a133 store { ptr, i64, i64 } { ptr @.str.754, i64 1, i64 0 }, ptr %a135 %t136 = call i64 @finch_str_find(ptr %a133, ptr %a135) %t137 = icmp sge i64 %t136, 0 br label %logic.rend1390 logic.rend1390: br label %logic.end1389 logic.end1389: %t138 = phi i1 [ true, %logic.from1387 ], [ %t137, %logic.rend1390 ] br label %logic.rend1391 logic.rend1391: br label %logic.end1382 logic.end1382: %t139 = phi i1 [ false, %logic.from1380 ], [ %t138, %logic.rend1391 ] br i1 %t139, label %then1392, label %endif1394 then1392: %t140 = load ptr, ptr %a1 %t141 = load %S.lexer.Token, ptr %a87 call void @finch.parser.fail(ptr %t140, %S.lexer.Token %t141, { ptr, i64, i64 } { ptr @.str.755, i64 65, i64 0 }) br label %endif1394 endif1394: %t142 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 5 %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t142, i32 0, i32 1 %t144 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t144, ptr %a145 call void @finch_str_copy(ptr %a146, ptr %a145) %t147 = load { ptr, i64, i64 }, ptr %a146 %t148 = load i64, ptr %t143 %t149 = add i64 %t148, 1 call void @finch_arr_reserve(ptr %t142, i64 %t149, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t150 = load ptr, ptr %t142 %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i64 %t148 store { ptr, i64, i64 } %t147, ptr %t151 store i64 %t149, ptr %t143 call void @finch_str_drop(ptr %a95) call void @finch.drop.S_lexer_Token(ptr %a87) br label %endif1371 else1370: %t152 = load ptr, ptr %a1 %t153 = call i1 @finch.parser.at(ptr %t152, { ptr, i64, i64 } { ptr @.str.756, i64 6, i64 0 }) br i1 %t153, label %then1395, label %else1396 then1395: %t154 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 6 %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 %t156 = load ptr, ptr %a1 %t157 = call %S.ast.Node @finch.parser.parseStruct(ptr %t156) %t158 = load i64, ptr %t155 %t159 = add i64 %t158, 1 call void @finch_arr_reserve(ptr %t154, i64 %t159, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t160 = load ptr, ptr %t154 %t161 = getelementptr inbounds %S.ast.Node, ptr %t160, i64 %t158 store %S.ast.Node %t157, ptr %t161 store i64 %t159, ptr %t155 br label %endif1397 else1396: %t162 = load ptr, ptr %a1 %t163 = call i1 @finch.parser.at(ptr %t162, { ptr, i64, i64 } { ptr @.str.757, i64 4, i64 0 }) br i1 %t163, label %then1398, label %else1399 then1398: %t164 = load ptr, ptr %a1 %t165 = call %S.ast.Node @finch.parser.parseEnum(ptr %t164) store %S.ast.Node %t165, ptr %a166 %t167 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 7 %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 %t169 = load %S.ast.Node, ptr %a166 store %S.ast.Node %t169, ptr %a170 call void @finch.copy.S_ast_Node(ptr %a171, ptr %a170) %t172 = load %S.ast.Node, ptr %a171 %t173 = load i64, ptr %t168 %t174 = add i64 %t173, 1 call void @finch_arr_reserve(ptr %t167, i64 %t174, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t175 = load ptr, ptr %t167 %t176 = getelementptr inbounds %S.ast.Node, ptr %t175, i64 %t173 store %S.ast.Node %t172, ptr %t176 store i64 %t174, ptr %t168 %t177 = getelementptr inbounds %S.ast.Node, ptr %a166, i32 0, i32 6 %t178 = load i1, ptr %t177 br i1 %t178, label %then1401, label %endif1403 then1401: %t179 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 6 %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 %t181 = load %S.ast.Node, ptr %a166 %t182 = call %S.ast.Node @finch.parser.sumStruct(%S.ast.Node %t181) %t183 = load i64, ptr %t180 %t184 = add i64 %t183, 1 call void @finch_arr_reserve(ptr %t179, i64 %t184, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t185 = load ptr, ptr %t179 %t186 = getelementptr inbounds %S.ast.Node, ptr %t185, i64 %t183 store %S.ast.Node %t182, ptr %t186 store i64 %t184, ptr %t180 br label %endif1403 endif1403: call void @finch.drop.S_ast_Node(ptr %a166) br label %endif1400 else1399: %t187 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 8 %t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t187, i32 0, i32 1 %t189 = load ptr, ptr %a1 %t190 = call %S.ast.Node @finch.parser.parseFn(ptr %t189) %t191 = load i64, ptr %t188 %t192 = add i64 %t191, 1 call void @finch_arr_reserve(ptr %t187, i64 %t192, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t193 = load ptr, ptr %t187 %t194 = getelementptr inbounds %S.ast.Node, ptr %t193, i64 %t191 store %S.ast.Node %t190, ptr %t194 store i64 %t192, ptr %t188 br label %endif1400 endif1400: br label %endif1397 endif1397: br label %endif1371 endif1371: br label %endif1360 endif1360: br label %while.cond1355 while.end1357: %t195 = load %S.ast.Program, ptr %a2 ret %S.ast.Program %t195 } define internal %S.ast.Node @finch.parser.parseEnum(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca %S.ast.Node, align 16 %a7 = alloca %S.lexer.Token, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca %S.lexer.Token, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca %S.lexer.Token, align 16 %a29 = alloca %S.lexer.Token, align 16 %a32 = alloca %S.ast.Node, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca %S.lexer.Token, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca %S.ast.Node, align 16 %a56 = alloca %S.ast.Type, align 16 %a60 = alloca %S.ast.Node, align 16 %a61 = alloca %S.ast.Node, align 16 %a72 = alloca %S.lexer.Token, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca %S.lexer.Token, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca %S.lexer.Token, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca %S.lexer.Token, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca %S.ast.Node, align 16 %a138 = alloca %S.ast.Node, align 16 %a150 = alloca %S.lexer.Token, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca %S.lexer.Token, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca i64, align 16 %a182 = alloca %S.ast.Node, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca %S.lexer.Token, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.758, i64 4, i64 0 }) store %S.ast.Node %t3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.759, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.760, i64 6, i64 0 }) store %S.lexer.Token %t6, ptr %a7 call void @finch.drop.S_lexer_Token(ptr %a7) %t8 = load ptr, ptr %a1 %t9 = call %S.lexer.Token @finch.parser.expect(ptr %t8, { ptr, i64, i64 } { ptr @.str.761, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.762, i64 12, i64 0 }) %t10 = extractvalue %S.lexer.Token %t9, 1 store { ptr, i64, i64 } %t10, ptr %a11 call void @finch_str_copy(ptr %a12, ptr %a11) %t13 = load { ptr, i64, i64 }, ptr %a12 store %S.lexer.Token %t9, ptr %a14 call void @finch.drop.S_lexer_Token(ptr %a14) %t15 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 %t16 = load { ptr, i64, i64 }, ptr %t15 store { ptr, i64, i64 } %t13, ptr %t15 store { ptr, i64, i64 } %t16, ptr %a17 call void @finch_str_drop(ptr %a17) %t18 = load ptr, ptr %a1 %t19 = call %S.lexer.Token @finch.parser.expect(ptr %t18, { ptr, i64, i64 } { ptr @.str.763, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.764, i64 3, i64 0 }) store %S.lexer.Token %t19, ptr %a20 call void @finch.drop.S_lexer_Token(ptr %a20) br label %while.cond1404 while.cond1404: %t21 = load ptr, ptr %a1 %t22 = call i1 @finch.parser.at(ptr %t21, { ptr, i64, i64 } { ptr @.str.765, i64 1, i64 0 }) %t23 = xor i1 %t22, true br i1 %t23, label %while.body1405, label %while.end1406 while.body1405: %t24 = load ptr, ptr %a1 %t25 = call i1 @finch.parser.at(ptr %t24, { ptr, i64, i64 } { ptr @.str.766, i64 3, i64 0 }) br i1 %t25, label %then1407, label %endif1409 then1407: %t26 = load ptr, ptr %a1 %t27 = load ptr, ptr %a1 %t28 = call %S.lexer.Token @finch.parser.cur(ptr %t27) call void @finch.parser.fail(ptr %t26, %S.lexer.Token %t28, { ptr, i64, i64 } { ptr @.str.767, i64 37, i64 0 }) store %S.lexer.Token %t28, ptr %a29 call void @finch.drop.S_lexer_Token(ptr %a29) br label %endif1409 endif1409: %t30 = load ptr, ptr %a1 %t31 = call %S.ast.Node @finch.parser.node(ptr %t30, { ptr, i64, i64 } { ptr @.str.768, i64 7, i64 0 }) store %S.ast.Node %t31, ptr %a32 %t33 = load ptr, ptr %a1 %t34 = call %S.lexer.Token @finch.parser.expect(ptr %t33, { ptr, i64, i64 } { ptr @.str.769, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.770, i64 24, i64 0 }) %t35 = extractvalue %S.lexer.Token %t34, 1 store { ptr, i64, i64 } %t35, ptr %a36 call void @finch_str_copy(ptr %a37, ptr %a36) %t38 = load { ptr, i64, i64 }, ptr %a37 store %S.lexer.Token %t34, ptr %a39 call void @finch.drop.S_lexer_Token(ptr %a39) %t40 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 1 %t41 = load { ptr, i64, i64 }, ptr %t40 store { ptr, i64, i64 } %t38, ptr %t40 store { ptr, i64, i64 } %t41, ptr %a42 call void @finch_str_drop(ptr %a42) %t43 = load ptr, ptr %a1 %t44 = call i1 @finch.parser.accept(ptr %t43, { ptr, i64, i64 } { ptr @.str.771, i64 1, i64 0 }) br i1 %t44, label %then1410, label %endif1412 then1410: %t45 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 store i1 true, ptr %t45 br label %while.cond1413 while.cond1413: %t46 = load ptr, ptr %a1 %t47 = call i1 @finch.parser.at(ptr %t46, { ptr, i64, i64 } { ptr @.str.772, i64 1, i64 0 }) %t48 = xor i1 %t47, true br i1 %t48, label %while.body1414, label %while.end1415 while.body1414: %t49 = load ptr, ptr %a1 %t50 = call %S.ast.Node @finch.parser.node(ptr %t49, { ptr, i64, i64 } { ptr @.str.773, i64 5, i64 0 }) store %S.ast.Node %t50, ptr %a51 %t52 = load ptr, ptr %a1 %t53 = call %S.ast.Type @finch.parser.parseType(ptr %t52) %t54 = getelementptr inbounds %S.ast.Node, ptr %a51, i32 0, i32 5 %t55 = load %S.ast.Type, ptr %t54 store %S.ast.Type %t53, ptr %t54 store %S.ast.Type %t55, ptr %a56 call void @finch.drop.S_ast_Type(ptr %a56) %t57 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 9 %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i32 0, i32 1 %t59 = load %S.ast.Node, ptr %a51 store %S.ast.Node %t59, ptr %a60 call void @finch.copy.S_ast_Node(ptr %a61, ptr %a60) %t62 = load %S.ast.Node, ptr %a61 %t63 = load i64, ptr %t58 %t64 = add i64 %t63, 1 call void @finch_arr_reserve(ptr %t57, i64 %t64, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t65 = load ptr, ptr %t57 %t66 = getelementptr inbounds %S.ast.Node, ptr %t65, i64 %t63 store %S.ast.Node %t62, ptr %t66 store i64 %t64, ptr %t58 %t67 = load ptr, ptr %a1 %t68 = call i1 @finch.parser.accept(ptr %t67, { ptr, i64, i64 } { ptr @.str.774, i64 1, i64 0 }) %t69 = xor i1 %t68, true br i1 %t69, label %then1416, label %endif1418 then1416: call void @finch.drop.S_ast_Node(ptr %a51) br label %while.end1415 endif1418: call void @finch.drop.S_ast_Node(ptr %a51) br label %while.cond1413 while.end1415: %t70 = load ptr, ptr %a1 %t71 = call %S.lexer.Token @finch.parser.expect(ptr %t70, { ptr, i64, i64 } { ptr @.str.775, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.776, i64 35, i64 0 }) store %S.lexer.Token %t71, ptr %a72 call void @finch.drop.S_lexer_Token(ptr %a72) %t73 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 9 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1 %t75 = load i64, ptr %t74 %t76 = icmp eq i64 %t75, 0 br i1 %t76, label %then1419, label %endif1421 then1419: %t77 = load ptr, ptr %a1 %t78 = load ptr, ptr %a1 %t79 = call %S.lexer.Token @finch.parser.cur(ptr %t78) %t80 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 1 %t81 = load { ptr, i64, i64 }, ptr %t80 store { ptr, i64, i64 } { ptr @.str.777, i64 12, i64 0 }, ptr %a83 store { ptr, i64, i64 } %t81, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a82 store { ptr, i64, i64 } %t85, ptr %a87 store { ptr, i64, i64 } { ptr @.str.778, i64 27, i64 0 }, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) store { ptr, i64, i64 } %t85, ptr %a89 call void @finch_str_drop(ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a86 %t91 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 1 %t92 = load { ptr, i64, i64 }, ptr %t91 store { ptr, i64, i64 } %t90, ptr %a94 store { ptr, i64, i64 } %t92, ptr %a95 call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) store { ptr, i64, i64 } %t90, ptr %a96 call void @finch_str_drop(ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t97, ptr %a99 store { ptr, i64, i64 } { ptr @.str.779, i64 20, i64 0 }, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) store { ptr, i64, i64 } %t97, ptr %a101 call void @finch_str_drop(ptr %a101) %t102 = load { ptr, i64, i64 }, ptr %a98 call void @finch.parser.fail(ptr %t77, %S.lexer.Token %t79, { ptr, i64, i64 } %t102) store %S.lexer.Token %t79, ptr %a103 call void @finch.drop.S_lexer_Token(ptr %a103) store { ptr, i64, i64 } %t102, ptr %a104 call void @finch_str_drop(ptr %a104) br label %endif1421 endif1421: br label %endif1412 endif1412: %t105 = load ptr, ptr %a1 %t106 = call i1 @finch.parser.accept(ptr %t105, { ptr, i64, i64 } { ptr @.str.780, i64 1, i64 0 }) br i1 %t106, label %then1422, label %endif1424 then1422: %t107 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 %t108 = load i1, ptr %t107 br i1 %t108, label %then1425, label %endif1427 then1425: %t109 = load ptr, ptr %a1 %t110 = load ptr, ptr %a1 %t111 = call %S.lexer.Token @finch.parser.cur(ptr %t110) call void @finch.parser.fail(ptr %t109, %S.lexer.Token %t111, { ptr, i64, i64 } { ptr @.str.781, i64 52, i64 0 }) store %S.lexer.Token %t111, ptr %a112 call void @finch.drop.S_lexer_Token(ptr %a112) br label %endif1427 endif1427: store { ptr, i64, i64 } { ptr @.str.782, i64 0, i64 0 }, ptr %a113 %t114 = load ptr, ptr %a1 %t115 = call i1 @finch.parser.accept(ptr %t114, { ptr, i64, i64 } { ptr @.str.783, i64 1, i64 0 }) br i1 %t115, label %then1428, label %endif1430 then1428: %t116 = load { ptr, i64, i64 }, ptr %a113 store { ptr, i64, i64 } { ptr @.str.784, i64 1, i64 0 }, ptr %a113 store { ptr, i64, i64 } %t116, ptr %a117 call void @finch_str_drop(ptr %a117) br label %endif1430 endif1430: %t118 = load { ptr, i64, i64 }, ptr %a113 %t119 = load ptr, ptr %a1 %t120 = call %S.lexer.Token @finch.parser.expect(ptr %t119, { ptr, i64, i64 } { ptr @.str.785, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.786, i64 30, i64 0 }) %t121 = extractvalue %S.lexer.Token %t120, 1 store { ptr, i64, i64 } %t121, ptr %a122 call void @finch_str_copy(ptr %a123, ptr %a122) %t124 = load { ptr, i64, i64 }, ptr %a123 store %S.lexer.Token %t120, ptr %a125 call void @finch.drop.S_lexer_Token(ptr %a125) store { ptr, i64, i64 } %t118, ptr %a127 store { ptr, i64, i64 } %t124, ptr %a128 call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) store { ptr, i64, i64 } %t124, ptr %a129 call void @finch_str_drop(ptr %a129) %t130 = load { ptr, i64, i64 }, ptr %a126 %t131 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 4 %t132 = load { ptr, i64, i64 }, ptr %t131 store { ptr, i64, i64 } %t130, ptr %t131 store { ptr, i64, i64 } %t132, ptr %a133 call void @finch_str_drop(ptr %a133) call void @finch_str_drop(ptr %a113) br label %endif1424 endif1424: %t134 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1 %t136 = load %S.ast.Node, ptr %a32 store %S.ast.Node %t136, ptr %a137 call void @finch.copy.S_ast_Node(ptr %a138, ptr %a137) %t139 = load %S.ast.Node, ptr %a138 %t140 = load i64, ptr %t135 %t141 = add i64 %t140, 1 call void @finch_arr_reserve(ptr %t134, i64 %t141, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t142 = load ptr, ptr %t134 %t143 = getelementptr inbounds %S.ast.Node, ptr %t142, i64 %t140 store %S.ast.Node %t139, ptr %t143 store i64 %t141, ptr %t135 %t144 = load ptr, ptr %a1 %t145 = call i1 @finch.parser.accept(ptr %t144, { ptr, i64, i64 } { ptr @.str.787, i64 1, i64 0 }) %t146 = xor i1 %t145, true br i1 %t146, label %then1431, label %endif1433 then1431: %t147 = load ptr, ptr %a1 call void @finch.parser.endOfStatement(ptr %t147) br label %endif1433 endif1433: call void @finch.drop.S_ast_Node(ptr %a32) br label %while.cond1404 while.end1406: %t148 = load ptr, ptr %a1 %t149 = call %S.lexer.Token @finch.parser.next(ptr %t148) store %S.lexer.Token %t149, ptr %a150 call void @finch.drop.S_lexer_Token(ptr %a150) %t151 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 %t153 = load i64, ptr %t152 %t154 = icmp eq i64 %t153, 0 br i1 %t154, label %then1434, label %endif1436 then1434: %t155 = load ptr, ptr %a1 %t156 = load ptr, ptr %a1 %t157 = call %S.lexer.Token @finch.parser.cur(ptr %t156) %t158 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 %t159 = load { ptr, i64, i64 }, ptr %t158 store { ptr, i64, i64 } { ptr @.str.788, i64 9, i64 0 }, ptr %a161 store { ptr, i64, i64 } %t159, ptr %a162 call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) %t163 = load { ptr, i64, i64 }, ptr %a160 store { ptr, i64, i64 } %t163, ptr %a165 store { ptr, i64, i64 } { ptr @.str.789, i64 16, i64 0 }, ptr %a166 call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) store { ptr, i64, i64 } %t163, ptr %a167 call void @finch_str_drop(ptr %a167) %t168 = load { ptr, i64, i64 }, ptr %a164 call void @finch.parser.fail(ptr %t155, %S.lexer.Token %t157, { ptr, i64, i64 } %t168) store %S.lexer.Token %t157, ptr %a169 call void @finch.drop.S_lexer_Token(ptr %a169) store { ptr, i64, i64 } %t168, ptr %a170 call void @finch_str_drop(ptr %a170) br label %endif1436 endif1436: %t171 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 %t172 = load i1, ptr %t171 br i1 %t172, label %then1437, label %endif1439 then1437: %t173 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 store i64 0, ptr %a174 br label %each.cond1440 each.cond1440: %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i32 0, i32 1 %t176 = load i64, ptr %t175 %t177 = load i64, ptr %a174 %t178 = icmp slt i64 %t177, %t176 br i1 %t178, label %each.body1441, label %each.end1443 each.body1441: %t179 = load ptr, ptr %t173 %t180 = getelementptr inbounds %S.ast.Node, ptr %t179, i64 %t177 %t181 = load %S.ast.Node, ptr %t180 store %S.ast.Node %t181, ptr %a182 %t183 = getelementptr inbounds %S.ast.Node, ptr %a182, i32 0, i32 4 %t184 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i32 0, i32 1 %t185 = load i64, ptr %t184 %t186 = icmp sgt i64 %t185, 0 br i1 %t186, label %then1444, label %endif1446 then1444: %t187 = load ptr, ptr %a1 %t188 = load ptr, ptr %a1 %t189 = call %S.lexer.Token @finch.parser.cur(ptr %t188) %t190 = getelementptr inbounds %S.ast.Node, ptr %a182, i32 0, i32 1 %t191 = load { ptr, i64, i64 }, ptr %t190 store { ptr, i64, i64 } { ptr @.str.790, i64 54, i64 0 }, ptr %a193 store { ptr, i64, i64 } %t191, ptr %a194 call void @finch_str_concat(ptr %a192, ptr %a193, ptr %a194) %t195 = load { ptr, i64, i64 }, ptr %a192 store { ptr, i64, i64 } %t195, ptr %a197 store { ptr, i64, i64 } { ptr @.str.791, i64 3, i64 0 }, ptr %a198 call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198) store { ptr, i64, i64 } %t195, ptr %a199 call void @finch_str_drop(ptr %a199) %t200 = load { ptr, i64, i64 }, ptr %a196 %t201 = getelementptr inbounds %S.ast.Node, ptr %a182, i32 0, i32 4 %t202 = load { ptr, i64, i64 }, ptr %t201 store { ptr, i64, i64 } %t200, ptr %a204 store { ptr, i64, i64 } %t202, ptr %a205 call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) store { ptr, i64, i64 } %t200, ptr %a206 call void @finch_str_drop(ptr %a206) %t207 = load { ptr, i64, i64 }, ptr %a203 store { ptr, i64, i64 } %t207, ptr %a209 store { ptr, i64, i64 } { ptr @.str.792, i64 1, i64 0 }, ptr %a210 call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) store { ptr, i64, i64 } %t207, ptr %a211 call void @finch_str_drop(ptr %a211) %t212 = load { ptr, i64, i64 }, ptr %a208 call void @finch.parser.fail(ptr %t187, %S.lexer.Token %t189, { ptr, i64, i64 } %t212) store %S.lexer.Token %t189, ptr %a213 call void @finch.drop.S_lexer_Token(ptr %a213) store { ptr, i64, i64 } %t212, ptr %a214 call void @finch_str_drop(ptr %a214) br label %endif1446 endif1446: br label %each.step1442 each.step1442: %t215 = load i64, ptr %a174 %t216 = add i64 %t215, 1 store i64 %t216, ptr %a174 br label %each.cond1440 each.end1443: br label %endif1439 endif1439: %t217 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t217 } define internal %S.ast.Node @finch.parser.sumStruct(%S.ast.Node %p0) { entry: %a1 = alloca %S.ast.Node, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca %S.ast.Node, align 16 %a30 = alloca %S.ast.Node, align 16 %a34 = alloca %S.ast.Type, align 16 %a38 = alloca %S.ast.Node, align 16 %a39 = alloca %S.ast.Node, align 16 %a46 = alloca i64, align 16 %a54 = alloca %S.ast.Node, align 16 %a58 = alloca i64, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca %S.ast.Node, align 16 %a98 = alloca %S.ast.Type, align 16 %a99 = alloca %S.ast.Type, align 16 %a102 = alloca %S.ast.Type, align 16 %a106 = alloca %S.ast.Node, align 16 %a107 = alloca %S.ast.Node, align 16 store %S.ast.Node %p0, ptr %a1 %t2 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.793, i64 6, i64 0 }, 0 %t3 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 1 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch_str_copy(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 %t8 = insertvalue %S.ast.Node %t2, { ptr, i64, i64 } %t7, 1 %t9 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 11 %t10 = load i64, ptr %t9 %t11 = insertvalue %S.ast.Node %t8, i64 %t10, 11 %t12 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 12 %t13 = load i64, ptr %t12 %t14 = insertvalue %S.ast.Node %t11, i64 %t13, 12 %t15 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 13 %t16 = load i64, ptr %t15 %t17 = insertvalue %S.ast.Node %t14, i64 %t16, 13 store %S.ast.Node %t17, ptr %a18 %t19 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.794, i64 5, i64 0 }, 0 %t20 = insertvalue %S.ast.Node %t19, { ptr, i64, i64 } { ptr @.str.795, i64 3, i64 0 }, 1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 11 %t22 = load i64, ptr %t21 %t23 = insertvalue %S.ast.Node %t20, i64 %t22, 11 %t24 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 12 %t25 = load i64, ptr %t24 %t26 = insertvalue %S.ast.Node %t23, i64 %t25, 12 %t27 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 13 %t28 = load i64, ptr %t27 %t29 = insertvalue %S.ast.Node %t26, i64 %t28, 13 store %S.ast.Node %t29, ptr %a30 %t31 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.796, i64 3, i64 0 }) %t32 = getelementptr inbounds %S.ast.Node, ptr %a30, i32 0, i32 5 %t33 = load %S.ast.Type, ptr %t32 store %S.ast.Type %t31, ptr %t32 store %S.ast.Type %t33, ptr %a34 call void @finch.drop.S_ast_Type(ptr %a34) %t35 = getelementptr inbounds %S.ast.Node, ptr %a18, i32 0, i32 9 %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i32 0, i32 1 %t37 = load %S.ast.Node, ptr %a30 store %S.ast.Node %t37, ptr %a38 call void @finch.copy.S_ast_Node(ptr %a39, ptr %a38) %t40 = load %S.ast.Node, ptr %a39 %t41 = load i64, ptr %t36 %t42 = add i64 %t41, 1 call void @finch_arr_reserve(ptr %t35, i64 %t42, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t43 = load ptr, ptr %t35 %t44 = getelementptr inbounds %S.ast.Node, ptr %t43, i64 %t41 store %S.ast.Node %t40, ptr %t44 store i64 %t42, ptr %t36 %t45 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 store i64 0, ptr %a46 br label %each.cond1447 each.cond1447: %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i32 0, i32 1 %t48 = load i64, ptr %t47 %t49 = load i64, ptr %a46 %t50 = icmp slt i64 %t49, %t48 br i1 %t50, label %each.body1448, label %each.end1450 each.body1448: %t51 = load ptr, ptr %t45 %t52 = getelementptr inbounds %S.ast.Node, ptr %t51, i64 %t49 %t53 = load %S.ast.Node, ptr %t52 store %S.ast.Node %t53, ptr %a54 %t55 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 9 %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i32 0, i32 1 %t57 = load i64, ptr %t56 store i64 0, ptr %a58 br label %for.cond1451 for.cond1451: %t59 = load i64, ptr %a58 %t60 = icmp slt i64 %t59, %t57 br i1 %t60, label %for.body1452, label %for.end1454 for.body1452: %t61 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.797, i64 5, i64 0 }, 0 %t62 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 1 %t63 = load { ptr, i64, i64 }, ptr %t62 store { ptr, i64, i64 } %t63, ptr %a65 store { ptr, i64, i64 } { ptr @.str.798, i64 1, i64 0 }, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) %t67 = load { ptr, i64, i64 }, ptr %a64 %t68 = load i64, ptr %a58 call void @finch_str_from_int(ptr %a69, i64 %t68) %t70 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t67, ptr %a72 store { ptr, i64, i64 } %t70, ptr %a73 call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) store { ptr, i64, i64 } %t67, ptr %a74 call void @finch_str_drop(ptr %a74) store { ptr, i64, i64 } %t70, ptr %a75 call void @finch_str_drop(ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a71 %t77 = insertvalue %S.ast.Node %t61, { ptr, i64, i64 } %t76, 1 %t78 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 11 %t79 = load i64, ptr %t78 %t80 = insertvalue %S.ast.Node %t77, i64 %t79, 11 %t81 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 12 %t82 = load i64, ptr %t81 %t83 = insertvalue %S.ast.Node %t80, i64 %t82, 12 %t84 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 13 %t85 = load i64, ptr %t84 %t86 = insertvalue %S.ast.Node %t83, i64 %t85, 13 store %S.ast.Node %t86, ptr %a87 %t88 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 9 %t89 = load i64, ptr %a58 %t90 = load { ptr, i64, i64 }, ptr %t88 %t91 = extractvalue { ptr, i64, i64 } %t90, 1 %t92 = icmp uge i64 %t89, %t91 br i1 %t92, label %range1455, label %inrange1456 range1455: call void @finch_panic_index(ptr @.str.799, i64 333, i64 %t89, i64 %t91) unreachable inrange1456: %t93 = extractvalue { ptr, i64, i64 } %t90, 0 %t94 = getelementptr inbounds %S.ast.Node, ptr %t93, i64 %t89 %t95 = getelementptr inbounds %S.ast.Node, ptr %t94, i32 0, i32 5 %t96 = load %S.ast.Type, ptr %t95 %t97 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 5 store %S.ast.Type %t96, ptr %a98 call void @finch.copy.S_ast_Type(ptr %a99, ptr %a98) %t100 = load %S.ast.Type, ptr %a99 %t101 = load %S.ast.Type, ptr %t97 store %S.ast.Type %t100, ptr %t97 store %S.ast.Type %t101, ptr %a102 call void @finch.drop.S_ast_Type(ptr %a102) %t103 = getelementptr inbounds %S.ast.Node, ptr %a18, i32 0, i32 9 %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i32 0, i32 1 %t105 = load %S.ast.Node, ptr %a87 store %S.ast.Node %t105, ptr %a106 call void @finch.copy.S_ast_Node(ptr %a107, ptr %a106) %t108 = load %S.ast.Node, ptr %a107 %t109 = load i64, ptr %t104 %t110 = add i64 %t109, 1 call void @finch_arr_reserve(ptr %t103, i64 %t110, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t111 = load ptr, ptr %t103 %t112 = getelementptr inbounds %S.ast.Node, ptr %t111, i64 %t109 store %S.ast.Node %t108, ptr %t112 store i64 %t110, ptr %t104 call void @finch.drop.S_ast_Node(ptr %a87) br label %for.step1453 for.step1453: %t113 = load i64, ptr %a58 %t114 = add i64 %t113, 1 store i64 %t114, ptr %a58 br label %for.cond1451 for.end1454: br label %each.step1449 each.step1449: %t115 = load i64, ptr %a46 %t116 = add i64 %t115, 1 store i64 %t116, ptr %a46 br label %each.cond1447 each.end1450: %t117 = load %S.ast.Node, ptr %a18 call void @finch.drop.S_ast_Node(ptr %a30) ret %S.ast.Node %t117 } define internal %S.ast.Node @finch.parser.parseMatch(ptr %p0, i1 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i1, align 16 %a5 = alloca %S.ast.Node, align 16 %a10 = alloca %S.lexer.Token, align 16 %a21 = alloca %S.lexer.Token, align 16 %a26 = alloca i64, align 16 %a38 = alloca %S.lexer.Token, align 16 %a41 = alloca %S.ast.Node, align 16 %a44 = alloca %S.ast.Node, align 16 %a62 = alloca %S.ast.Node, align 16 %a63 = alloca %S.ast.Node, align 16 %a71 = alloca %S.lexer.Token, align 16 %a105 = alloca %S.ast.Node, align 16 %a106 = alloca %S.ast.Node, align 16 %a122 = alloca %S.lexer.Token, align 16 %a130 = alloca %S.lexer.Token, align 16 store ptr %p0, ptr %a1 store i1 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = call %S.ast.Node @finch.parser.node(ptr %t3, { ptr, i64, i64 } { ptr @.str.800, i64 5, i64 0 }) store %S.ast.Node %t4, ptr %a5 %t6 = load i1, ptr %a2 %t7 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 6 store i1 %t6, ptr %t7 %t8 = load ptr, ptr %a1 %t9 = call %S.lexer.Token @finch.parser.expect(ptr %t8, { ptr, i64, i64 } { ptr @.str.801, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.802, i64 7, i64 0 }) store %S.lexer.Token %t9, ptr %a10 call void @finch.drop.S_lexer_Token(ptr %a10) %t11 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i32 0, i32 1 %t13 = load ptr, ptr %a1 %t14 = call %S.ast.Node @finch.parser.parseExpr(ptr %t13) %t15 = load i64, ptr %t12 %t16 = add i64 %t15, 1 call void @finch_arr_reserve(ptr %t11, i64 %t16, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t17 = load ptr, ptr %t11 %t18 = getelementptr inbounds %S.ast.Node, ptr %t17, i64 %t15 store %S.ast.Node %t14, ptr %t18 store i64 %t16, ptr %t12 %t19 = load ptr, ptr %a1 %t20 = call %S.lexer.Token @finch.parser.expect(ptr %t19, { ptr, i64, i64 } { ptr @.str.803, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.804, i64 3, i64 0 }) store %S.lexer.Token %t20, ptr %a21 call void @finch.drop.S_lexer_Token(ptr %a21) %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null br i1 %t23, label %panic1457, label %ok1458 panic1457: call void @finch_panic(ptr @.str.805, i64 348, ptr @.str.806) unreachable ok1458: %t24 = getelementptr inbounds %S.parser.Parser, ptr %t22, i32 0, i32 2 %t25 = load i64, ptr %t24 store i64 %t25, ptr %a26 %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null br i1 %t28, label %panic1459, label %ok1460 panic1459: call void @finch_panic(ptr @.str.807, i64 349, ptr @.str.808) unreachable ok1460: %t29 = getelementptr inbounds %S.parser.Parser, ptr %t27, i32 0, i32 2 store i64 0, ptr %t29 br label %while.cond1461 while.cond1461: %t30 = load ptr, ptr %a1 %t31 = call i1 @finch.parser.at(ptr %t30, { ptr, i64, i64 } { ptr @.str.809, i64 1, i64 0 }) %t32 = xor i1 %t31, true br i1 %t32, label %while.body1462, label %while.end1463 while.body1462: %t33 = load ptr, ptr %a1 %t34 = call i1 @finch.parser.at(ptr %t33, { ptr, i64, i64 } { ptr @.str.810, i64 3, i64 0 }) br i1 %t34, label %then1464, label %endif1466 then1464: %t35 = load ptr, ptr %a1 %t36 = load ptr, ptr %a1 %t37 = call %S.lexer.Token @finch.parser.cur(ptr %t36) call void @finch.parser.fail(ptr %t35, %S.lexer.Token %t37, { ptr, i64, i64 } { ptr @.str.811, i64 37, i64 0 }) store %S.lexer.Token %t37, ptr %a38 call void @finch.drop.S_lexer_Token(ptr %a38) br label %endif1466 endif1466: %t39 = load ptr, ptr %a1 %t40 = call %S.ast.Node @finch.parser.node(ptr %t39, { ptr, i64, i64 } { ptr @.str.812, i64 3, i64 0 }) store %S.ast.Node %t40, ptr %a41 %t42 = load ptr, ptr %a1 %t43 = call %S.ast.Node @finch.parser.node(ptr %t42, { ptr, i64, i64 } { ptr @.str.813, i64 8, i64 0 }) store %S.ast.Node %t43, ptr %a44 %t45 = load ptr, ptr %a1 %t46 = call i1 @finch.parser.accept(ptr %t45, { ptr, i64, i64 } { ptr @.str.814, i64 4, i64 0 }) br i1 %t46, label %then1467, label %else1468 then1467: %t47 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 6 store i1 true, ptr %t47 br label %endif1469 else1468: br label %while.cond1470 while.cond1470: br label %while.body1471 while.body1471: %t48 = getelementptr inbounds %S.ast.Node, ptr %a44, i32 0, i32 9 %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i32 0, i32 1 %t50 = load ptr, ptr %a1 %t51 = call %S.ast.Node @finch.parser.parseExpr(ptr %t50) %t52 = load i64, ptr %t49 %t53 = add i64 %t52, 1 call void @finch_arr_reserve(ptr %t48, i64 %t53, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t54 = load ptr, ptr %t48 %t55 = getelementptr inbounds %S.ast.Node, ptr %t54, i64 %t52 store %S.ast.Node %t51, ptr %t55 store i64 %t53, ptr %t49 %t56 = load ptr, ptr %a1 %t57 = call i1 @finch.parser.accept(ptr %t56, { ptr, i64, i64 } { ptr @.str.815, i64 1, i64 0 }) %t58 = xor i1 %t57, true br i1 %t58, label %then1473, label %endif1475 then1473: br label %while.end1472 endif1475: br label %while.cond1470 while.end1472: br label %endif1469 endif1469: %t59 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i32 0, i32 1 %t61 = load %S.ast.Node, ptr %a44 store %S.ast.Node %t61, ptr %a62 call void @finch.copy.S_ast_Node(ptr %a63, ptr %a62) %t64 = load %S.ast.Node, ptr %a63 %t65 = load i64, ptr %t60 %t66 = add i64 %t65, 1 call void @finch_arr_reserve(ptr %t59, i64 %t66, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t67 = load ptr, ptr %t59 %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 %t65 store %S.ast.Node %t64, ptr %t68 store i64 %t66, ptr %t60 %t69 = load ptr, ptr %a1 %t70 = call %S.lexer.Token @finch.parser.expect(ptr %t69, { ptr, i64, i64 } { ptr @.str.816, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.817, i64 57, i64 0 }) store %S.lexer.Token %t70, ptr %a71 call void @finch.drop.S_lexer_Token(ptr %a71) %t72 = load ptr, ptr %a1 %t73 = call i1 @finch.parser.at(ptr %t72, { ptr, i64, i64 } { ptr @.str.818, i64 1, i64 0 }) br label %logic.from1476 logic.from1476: br i1 %t73, label %logic.rhs1477, label %logic.end1478 logic.rhs1477: %t74 = load i1, ptr %a2 %t75 = xor i1 %t74, true br label %logic.rend1479 logic.rend1479: br label %logic.end1478 logic.end1478: %t76 = phi i1 [ false, %logic.from1476 ], [ %t75, %logic.rend1479 ] br i1 %t76, label %then1480, label %else1481 then1480: %t77 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1 %t79 = load ptr, ptr %a1 %t80 = call %S.ast.Node @finch.parser.parseBlock(ptr %t79) %t81 = load i64, ptr %t78 %t82 = add i64 %t81, 1 call void @finch_arr_reserve(ptr %t77, i64 %t82, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t83 = load ptr, ptr %t77 %t84 = getelementptr inbounds %S.ast.Node, ptr %t83, i64 %t81 store %S.ast.Node %t80, ptr %t84 store i64 %t82, ptr %t78 br label %endif1482 else1481: %t85 = load i1, ptr %a2 br i1 %t85, label %then1483, label %else1484 then1483: %t86 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 %t88 = load ptr, ptr %a1 %t89 = call %S.ast.Node @finch.parser.parseExpr(ptr %t88) %t90 = load i64, ptr %t87 %t91 = add i64 %t90, 1 call void @finch_arr_reserve(ptr %t86, i64 %t91, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t92 = load ptr, ptr %t86 %t93 = getelementptr inbounds %S.ast.Node, ptr %t92, i64 %t90 store %S.ast.Node %t89, ptr %t93 store i64 %t91, ptr %t87 br label %endif1485 else1484: %t94 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 %t96 = load ptr, ptr %a1 %t97 = call %S.ast.Node @finch.parser.parseStatement(ptr %t96) %t98 = load i64, ptr %t95 %t99 = add i64 %t98, 1 call void @finch_arr_reserve(ptr %t94, i64 %t99, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t100 = load ptr, ptr %t94 %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 %t98 store %S.ast.Node %t97, ptr %t101 store i64 %t99, ptr %t95 br label %endif1485 endif1485: br label %endif1482 endif1482: %t102 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9 %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i32 0, i32 1 %t104 = load %S.ast.Node, ptr %a41 store %S.ast.Node %t104, ptr %a105 call void @finch.copy.S_ast_Node(ptr %a106, ptr %a105) %t107 = load %S.ast.Node, ptr %a106 %t108 = load i64, ptr %t103 %t109 = add i64 %t108, 1 call void @finch_arr_reserve(ptr %t102, i64 %t109, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t110 = load ptr, ptr %t102 %t111 = getelementptr inbounds %S.ast.Node, ptr %t110, i64 %t108 store %S.ast.Node %t107, ptr %t111 store i64 %t109, ptr %t103 %t112 = load ptr, ptr %a1 %t113 = call i1 @finch.parser.accept(ptr %t112, { ptr, i64, i64 } { ptr @.str.819, i64 1, i64 0 }) %t114 = xor i1 %t113, true br i1 %t114, label %then1486, label %endif1488 then1486: %t115 = load ptr, ptr %a1 call void @finch.parser.endOfStatement(ptr %t115) br label %endif1488 endif1488: call void @finch.drop.S_ast_Node(ptr %a44) call void @finch.drop.S_ast_Node(ptr %a41) br label %while.cond1461 while.end1463: %t116 = load i64, ptr %a26 %t117 = load ptr, ptr %a1 %t118 = icmp eq ptr %t117, null br i1 %t118, label %panic1489, label %ok1490 panic1489: call void @finch_panic(ptr @.str.820, i64 380, ptr @.str.821) unreachable ok1490: %t119 = getelementptr inbounds %S.parser.Parser, ptr %t117, i32 0, i32 2 store i64 %t116, ptr %t119 %t120 = load ptr, ptr %a1 %t121 = call %S.lexer.Token @finch.parser.next(ptr %t120) store %S.lexer.Token %t121, ptr %a122 call void @finch.drop.S_lexer_Token(ptr %a122) %t123 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9 %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i32 0, i32 1 %t125 = load i64, ptr %t124 %t126 = icmp eq i64 %t125, 1 br i1 %t126, label %then1491, label %endif1493 then1491: %t127 = load ptr, ptr %a1 %t128 = load ptr, ptr %a1 %t129 = call %S.lexer.Token @finch.parser.cur(ptr %t128) call void @finch.parser.fail(ptr %t127, %S.lexer.Token %t129, { ptr, i64, i64 } { ptr @.str.822, i64 30, i64 0 }) store %S.lexer.Token %t129, ptr %a130 call void @finch.drop.S_lexer_Token(ptr %a130) br label %endif1493 endif1493: %t131 = load %S.ast.Node, ptr %a5 ret %S.ast.Node %t131 } define internal { ptr, i64, i64 } @finch.parser.parseTParams(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca %S.lexer.Token, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca %S.lexer.Token, align 16 %a23 = alloca %S.lexer.Token, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = call %S.lexer.Token @finch.parser.expect(ptr %t3, { ptr, i64, i64 } { ptr @.str.823, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.824, i64 3, i64 0 }) store %S.lexer.Token %t4, ptr %a5 call void @finch.drop.S_lexer_Token(ptr %a5) br label %while.cond1494 while.cond1494: br label %while.body1495 while.body1495: %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t7 = load ptr, ptr %a1 %t8 = call %S.lexer.Token @finch.parser.expect(ptr %t7, { ptr, i64, i64 } { ptr @.str.825, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.826, i64 29, i64 0 }) %t9 = extractvalue %S.lexer.Token %t8, 1 store { ptr, i64, i64 } %t9, ptr %a10 call void @finch_str_copy(ptr %a11, ptr %a10) %t12 = load { ptr, i64, i64 }, ptr %a11 store %S.lexer.Token %t8, ptr %a13 call void @finch.drop.S_lexer_Token(ptr %a13) %t14 = load i64, ptr %t6 %t15 = add i64 %t14, 1 call void @finch_arr_reserve(ptr %a2, i64 %t15, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t16 = load ptr, ptr %a2 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 %t14 store { ptr, i64, i64 } %t12, ptr %t17 store i64 %t15, ptr %t6 %t18 = load ptr, ptr %a1 %t19 = call i1 @finch.parser.accept(ptr %t18, { ptr, i64, i64 } { ptr @.str.827, i64 1, i64 0 }) %t20 = xor i1 %t19, true br i1 %t20, label %then1497, label %endif1499 then1497: br label %while.end1496 endif1499: br label %while.cond1494 while.end1496: %t21 = load ptr, ptr %a1 %t22 = call %S.lexer.Token @finch.parser.expect(ptr %t21, { ptr, i64, i64 } { ptr @.str.828, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.829, i64 29, i64 0 }) store %S.lexer.Token %t22, ptr %a23 call void @finch.drop.S_lexer_Token(ptr %a23) %t24 = load { ptr, i64, i64 }, ptr %a2 ret { ptr, i64, i64 } %t24 } define internal %S.ast.Node @finch.parser.parseStruct(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca %S.ast.Node, align 16 %a7 = alloca %S.lexer.Token, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca %S.lexer.Token, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca %S.lexer.Token, align 16 %a36 = alloca %S.lexer.Token, align 16 %a39 = alloca %S.ast.Node, align 16 %a49 = alloca %S.lexer.Token, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca %S.lexer.Token, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca %S.ast.Type, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca %S.lexer.Token, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca %S.ast.Node, align 16 %a91 = alloca %S.ast.Node, align 16 %a100 = alloca %S.lexer.Token, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.830, i64 6, i64 0 }) store %S.ast.Node %t3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.831, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.832, i64 8, i64 0 }) store %S.lexer.Token %t6, ptr %a7 call void @finch.drop.S_lexer_Token(ptr %a7) %t8 = load ptr, ptr %a1 %t9 = call %S.lexer.Token @finch.parser.expect(ptr %t8, { ptr, i64, i64 } { ptr @.str.833, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.834, i64 13, i64 0 }) %t10 = extractvalue %S.lexer.Token %t9, 1 store { ptr, i64, i64 } %t10, ptr %a11 call void @finch_str_copy(ptr %a12, ptr %a11) %t13 = load { ptr, i64, i64 }, ptr %a12 store %S.lexer.Token %t9, ptr %a14 call void @finch.drop.S_lexer_Token(ptr %a14) %t15 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 %t16 = load { ptr, i64, i64 }, ptr %t15 store { ptr, i64, i64 } %t13, ptr %t15 store { ptr, i64, i64 } %t16, ptr %a17 call void @finch_str_drop(ptr %a17) %t18 = load ptr, ptr %a1 %t19 = call i1 @finch.parser.at(ptr %t18, { ptr, i64, i64 } { ptr @.str.835, i64 1, i64 0 }) br i1 %t19, label %then1500, label %endif1502 then1500: %t20 = load ptr, ptr %a1 %t21 = call { ptr, i64, i64 } @finch.parser.parseTParams(ptr %t20) %t22 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 3 %t23 = load { ptr, i64, i64 }, ptr %t22 store { ptr, i64, i64 } %t21, ptr %t22 store { ptr, i64, i64 } %t23, ptr %a24 call void @finch.drop.arr_str(ptr %a24) br label %endif1502 endif1502: %t25 = load ptr, ptr %a1 %t26 = call %S.lexer.Token @finch.parser.expect(ptr %t25, { ptr, i64, i64 } { ptr @.str.836, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.837, i64 3, i64 0 }) store %S.lexer.Token %t26, ptr %a27 call void @finch.drop.S_lexer_Token(ptr %a27) br label %while.cond1503 while.cond1503: %t28 = load ptr, ptr %a1 %t29 = call i1 @finch.parser.at(ptr %t28, { ptr, i64, i64 } { ptr @.str.838, i64 1, i64 0 }) %t30 = xor i1 %t29, true br i1 %t30, label %while.body1504, label %while.end1505 while.body1504: %t31 = load ptr, ptr %a1 %t32 = call i1 @finch.parser.at(ptr %t31, { ptr, i64, i64 } { ptr @.str.839, i64 3, i64 0 }) br i1 %t32, label %then1506, label %endif1508 then1506: %t33 = load ptr, ptr %a1 %t34 = load ptr, ptr %a1 %t35 = call %S.lexer.Token @finch.parser.cur(ptr %t34) call void @finch.parser.fail(ptr %t33, %S.lexer.Token %t35, { ptr, i64, i64 } { ptr @.str.840, i64 38, i64 0 }) store %S.lexer.Token %t35, ptr %a36 call void @finch.drop.S_lexer_Token(ptr %a36) br label %endif1508 endif1508: %t37 = load ptr, ptr %a1 %t38 = call %S.ast.Node @finch.parser.node(ptr %t37, { ptr, i64, i64 } { ptr @.str.841, i64 5, i64 0 }) store %S.ast.Node %t38, ptr %a39 %t40 = load ptr, ptr %a1 %t41 = call i1 @finch.parser.atDeclaration(ptr %t40) %t42 = xor i1 %t41, true br i1 %t42, label %then1509, label %endif1511 then1509: %t43 = load ptr, ptr %a1 %t44 = load ptr, ptr %a1 %t45 = call %S.lexer.Token @finch.parser.cur(ptr %t44) %t46 = load ptr, ptr %a1 %t47 = call %S.lexer.Token @finch.parser.cur(ptr %t46) %t48 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t47) store %S.lexer.Token %t47, ptr %a49 call void @finch.drop.S_lexer_Token(ptr %a49) store { ptr, i64, i64 } { ptr @.str.842, i64 11, i64 0 }, ptr %a51 store { ptr, i64, i64 } %t48, ptr %a52 call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) store { ptr, i64, i64 } %t48, ptr %a53 call void @finch_str_drop(ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } %t54, ptr %a56 store { ptr, i64, i64 } { ptr @.str.843, i64 28, i64 0 }, ptr %a57 call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) store { ptr, i64, i64 } %t54, ptr %a58 call void @finch_str_drop(ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a55 call void @finch.parser.fail(ptr %t43, %S.lexer.Token %t45, { ptr, i64, i64 } %t59) store %S.lexer.Token %t45, ptr %a60 call void @finch.drop.S_lexer_Token(ptr %a60) store { ptr, i64, i64 } %t59, ptr %a61 call void @finch_str_drop(ptr %a61) br label %endif1511 endif1511: %t62 = load ptr, ptr %a1 %t63 = call %S.ast.Type @finch.parser.parseType(ptr %t62) %t64 = getelementptr inbounds %S.ast.Node, ptr %a39, i32 0, i32 5 %t65 = load %S.ast.Type, ptr %t64 store %S.ast.Type %t63, ptr %t64 store %S.ast.Type %t65, ptr %a66 call void @finch.drop.S_ast_Type(ptr %a66) %t67 = load ptr, ptr %a1 %t68 = call %S.lexer.Token @finch.parser.expect(ptr %t67, { ptr, i64, i64 } { ptr @.str.844, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.845, i64 12, i64 0 }) %t69 = extractvalue %S.lexer.Token %t68, 1 store { ptr, i64, i64 } %t69, ptr %a70 call void @finch_str_copy(ptr %a71, ptr %a70) %t72 = load { ptr, i64, i64 }, ptr %a71 store %S.lexer.Token %t68, ptr %a73 call void @finch.drop.S_lexer_Token(ptr %a73) %t74 = getelementptr inbounds %S.ast.Node, ptr %a39, i32 0, i32 1 %t75 = load { ptr, i64, i64 }, ptr %t74 store { ptr, i64, i64 } %t72, ptr %t74 store { ptr, i64, i64 } %t75, ptr %a76 call void @finch_str_drop(ptr %a76) %t77 = load ptr, ptr %a1 %t78 = call i1 @finch.parser.accept(ptr %t77, { ptr, i64, i64 } { ptr @.str.846, i64 1, i64 0 }) br i1 %t78, label %then1512, label %endif1514 then1512: %t79 = getelementptr inbounds %S.ast.Node, ptr %a39, i32 0, i32 9 %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %t79, i32 0, i32 1 %t81 = load ptr, ptr %a1 %t82 = call %S.ast.Node @finch.parser.parseExpr(ptr %t81) %t83 = load i64, ptr %t80 %t84 = add i64 %t83, 1 call void @finch_arr_reserve(ptr %t79, i64 %t84, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t85 = load ptr, ptr %t79 %t86 = getelementptr inbounds %S.ast.Node, ptr %t85, i64 %t83 store %S.ast.Node %t82, ptr %t86 store i64 %t84, ptr %t80 br label %endif1514 endif1514: %t87 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i32 0, i32 1 %t89 = load %S.ast.Node, ptr %a39 store %S.ast.Node %t89, ptr %a90 call void @finch.copy.S_ast_Node(ptr %a91, ptr %a90) %t92 = load %S.ast.Node, ptr %a91 %t93 = load i64, ptr %t88 %t94 = add i64 %t93, 1 call void @finch_arr_reserve(ptr %t87, i64 %t94, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t95 = load ptr, ptr %t87 %t96 = getelementptr inbounds %S.ast.Node, ptr %t95, i64 %t93 store %S.ast.Node %t92, ptr %t96 store i64 %t94, ptr %t88 %t97 = load ptr, ptr %a1 call void @finch.parser.endOfStatement(ptr %t97) call void @finch.drop.S_ast_Node(ptr %a39) br label %while.cond1503 while.end1505: %t98 = load ptr, ptr %a1 %t99 = call %S.lexer.Token @finch.parser.next(ptr %t98) store %S.lexer.Token %t99, ptr %a100 call void @finch.drop.S_lexer_Token(ptr %a100) %t101 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t101 } define internal %S.ast.Node @finch.parser.parseFn(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca %S.ast.Node, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca %S.lexer.Token, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca %S.lexer.Token, align 16 %a26 = alloca %S.lexer.Token, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca %S.lexer.Token, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca %S.lexer.Token, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca %S.lexer.Token, align 16 %a77 = alloca %S.ast.Node, align 16 %a82 = alloca %S.ast.Type, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca %S.lexer.Token, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca %S.ast.Node, align 16 %a97 = alloca %S.ast.Node, align 16 %a113 = alloca %S.lexer.Token, align 16 %a117 = alloca %S.ast.Type, align 16 %a127 = alloca %S.ast.Type, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca %S.lexer.Token, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca %S.lexer.Token, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.847, i64 2, i64 0 }) store %S.ast.Node %t3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call i1 @finch.parser.accept(ptr %t5, { ptr, i64, i64 } { ptr @.str.848, i64 6, i64 0 }) %t7 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 8 store i1 %t6, ptr %t7 %t8 = load ptr, ptr %a1 %t9 = call i1 @finch.parser.at(ptr %t8, { ptr, i64, i64 } { ptr @.str.849, i64 5, i64 0 }) br label %logic.from1515 logic.from1515: br i1 %t9, label %logic.rhs1516, label %logic.end1517 logic.rhs1516: %t10 = load ptr, ptr %a1 %t11 = call %S.lexer.Token @finch.parser.cur(ptr %t10) %t12 = extractvalue %S.lexer.Token %t11, 1 store { ptr, i64, i64 } %t12, ptr %a13 call void @finch_str_copy(ptr %a14, ptr %a13) %t15 = load { ptr, i64, i64 }, ptr %a14 store %S.lexer.Token %t11, ptr %a16 call void @finch.drop.S_lexer_Token(ptr %a16) %t17 = call i1 @finch.parser.isTypeName({ ptr, i64, i64 } %t15) store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_drop(ptr %a18) br label %logic.rend1518 logic.rend1518: br label %logic.end1517 logic.end1517: %t19 = phi i1 [ false, %logic.from1515 ], [ %t17, %logic.rend1518 ] br i1 %t19, label %then1519, label %endif1521 then1519: %t20 = load ptr, ptr %a1 %t21 = load ptr, ptr %a1 %t22 = call %S.lexer.Token @finch.parser.cur(ptr %t21) call void @finch.parser.fail(ptr %t20, %S.lexer.Token %t22, { ptr, i64, i64 } { ptr @.str.850, i64 68, i64 0 }) store %S.lexer.Token %t22, ptr %a23 call void @finch.drop.S_lexer_Token(ptr %a23) br label %endif1521 endif1521: %t24 = load ptr, ptr %a1 %t25 = call %S.lexer.Token @finch.parser.expect(ptr %t24, { ptr, i64, i64 } { ptr @.str.851, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.852, i64 26, i64 0 }) store %S.lexer.Token %t25, ptr %a26 call void @finch.drop.S_lexer_Token(ptr %a26) %t27 = load ptr, ptr %a1 %t28 = call %S.lexer.Token @finch.parser.expect(ptr %t27, { ptr, i64, i64 } { ptr @.str.853, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.854, i64 15, i64 0 }) %t29 = extractvalue %S.lexer.Token %t28, 1 store { ptr, i64, i64 } %t29, ptr %a30 call void @finch_str_copy(ptr %a31, ptr %a30) %t32 = load { ptr, i64, i64 }, ptr %a31 store %S.lexer.Token %t28, ptr %a33 call void @finch.drop.S_lexer_Token(ptr %a33) %t34 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 %t35 = load { ptr, i64, i64 }, ptr %t34 store { ptr, i64, i64 } %t32, ptr %t34 store { ptr, i64, i64 } %t35, ptr %a36 call void @finch_str_drop(ptr %a36) %t37 = load ptr, ptr %a1 %t38 = call i1 @finch.parser.at(ptr %t37, { ptr, i64, i64 } { ptr @.str.855, i64 1, i64 0 }) br i1 %t38, label %then1522, label %endif1524 then1522: %t39 = load ptr, ptr %a1 %t40 = call { ptr, i64, i64 } @finch.parser.parseTParams(ptr %t39) %t41 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 3 %t42 = load { ptr, i64, i64 }, ptr %t41 store { ptr, i64, i64 } %t40, ptr %t41 store { ptr, i64, i64 } %t42, ptr %a43 call void @finch.drop.arr_str(ptr %a43) br label %endif1524 endif1524: %t44 = load ptr, ptr %a1 %t45 = call i1 @finch.parser.accept(ptr %t44, { ptr, i64, i64 } { ptr @.str.856, i64 1, i64 0 }) br i1 %t45, label %then1525, label %endif1527 then1525: %t46 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 %t47 = load { ptr, i64, i64 }, ptr %t46 %t48 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 2 store { ptr, i64, i64 } %t47, ptr %a49 call void @finch_str_copy(ptr %a50, ptr %a49) %t51 = load { ptr, i64, i64 }, ptr %a50 %t52 = load { ptr, i64, i64 }, ptr %t48 store { ptr, i64, i64 } %t51, ptr %t48 store { ptr, i64, i64 } %t52, ptr %a53 call void @finch_str_drop(ptr %a53) %t54 = load ptr, ptr %a1 %t55 = call %S.lexer.Token @finch.parser.expect(ptr %t54, { ptr, i64, i64 } { ptr @.str.857, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.858, i64 13, i64 0 }) %t56 = extractvalue %S.lexer.Token %t55, 1 store { ptr, i64, i64 } %t56, ptr %a57 call void @finch_str_copy(ptr %a58, ptr %a57) %t59 = load { ptr, i64, i64 }, ptr %a58 store %S.lexer.Token %t55, ptr %a60 call void @finch.drop.S_lexer_Token(ptr %a60) %t61 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 %t62 = load { ptr, i64, i64 }, ptr %t61 store { ptr, i64, i64 } %t59, ptr %t61 store { ptr, i64, i64 } %t62, ptr %a63 call void @finch_str_drop(ptr %a63) br label %endif1527 endif1527: %t64 = load ptr, ptr %a1 %t65 = call %S.lexer.Token @finch.parser.expect(ptr %t64, { ptr, i64, i64 } { ptr @.str.859, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.860, i64 3, i64 0 }) store %S.lexer.Token %t65, ptr %a66 call void @finch.drop.S_lexer_Token(ptr %a66) %t67 = load ptr, ptr %a1 %t68 = icmp eq ptr %t67, null br i1 %t68, label %panic1528, label %ok1529 panic1528: call void @finch_panic(ptr @.str.861, i64 446, ptr @.str.862) unreachable ok1529: %t69 = getelementptr inbounds %S.parser.Parser, ptr %t67, i32 0, i32 2 %t70 = load i64, ptr %t69 %t71 = add i64 %t70, 1 store i64 %t71, ptr %t69 %t72 = load ptr, ptr %a1 %t73 = call i1 @finch.parser.at(ptr %t72, { ptr, i64, i64 } { ptr @.str.863, i64 1, i64 0 }) %t74 = xor i1 %t73, true br i1 %t74, label %then1530, label %endif1532 then1530: br label %while.cond1533 while.cond1533: br label %while.body1534 while.body1534: %t75 = load ptr, ptr %a1 %t76 = call %S.ast.Node @finch.parser.node(ptr %t75, { ptr, i64, i64 } { ptr @.str.864, i64 5, i64 0 }) store %S.ast.Node %t76, ptr %a77 %t78 = load ptr, ptr %a1 %t79 = call %S.ast.Type @finch.parser.parseType(ptr %t78) %t80 = getelementptr inbounds %S.ast.Node, ptr %a77, i32 0, i32 5 %t81 = load %S.ast.Type, ptr %t80 store %S.ast.Type %t79, ptr %t80 store %S.ast.Type %t81, ptr %a82 call void @finch.drop.S_ast_Type(ptr %a82) %t83 = load ptr, ptr %a1 %t84 = call %S.lexer.Token @finch.parser.expect(ptr %t83, { ptr, i64, i64 } { ptr @.str.865, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.866, i64 16, i64 0 }) %t85 = extractvalue %S.lexer.Token %t84, 1 store { ptr, i64, i64 } %t85, ptr %a86 call void @finch_str_copy(ptr %a87, ptr %a86) %t88 = load { ptr, i64, i64 }, ptr %a87 store %S.lexer.Token %t84, ptr %a89 call void @finch.drop.S_lexer_Token(ptr %a89) %t90 = getelementptr inbounds %S.ast.Node, ptr %a77, i32 0, i32 1 %t91 = load { ptr, i64, i64 }, ptr %t90 store { ptr, i64, i64 } %t88, ptr %t90 store { ptr, i64, i64 } %t91, ptr %a92 call void @finch_str_drop(ptr %a92) %t93 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i32 0, i32 1 %t95 = load %S.ast.Node, ptr %a77 store %S.ast.Node %t95, ptr %a96 call void @finch.copy.S_ast_Node(ptr %a97, ptr %a96) %t98 = load %S.ast.Node, ptr %a97 %t99 = load i64, ptr %t94 %t100 = add i64 %t99, 1 call void @finch_arr_reserve(ptr %t93, i64 %t100, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t101 = load ptr, ptr %t93 %t102 = getelementptr inbounds %S.ast.Node, ptr %t101, i64 %t99 store %S.ast.Node %t98, ptr %t102 store i64 %t100, ptr %t94 %t103 = load ptr, ptr %a1 %t104 = call i1 @finch.parser.accept(ptr %t103, { ptr, i64, i64 } { ptr @.str.867, i64 1, i64 0 }) %t105 = xor i1 %t104, true br i1 %t105, label %then1536, label %endif1538 then1536: call void @finch.drop.S_ast_Node(ptr %a77) br label %while.end1535 endif1538: call void @finch.drop.S_ast_Node(ptr %a77) br label %while.cond1533 while.end1535: br label %endif1532 endif1532: %t106 = load ptr, ptr %a1 %t107 = icmp eq ptr %t106, null br i1 %t107, label %panic1539, label %ok1540 panic1539: call void @finch_panic(ptr @.str.868, i64 458, ptr @.str.869) unreachable ok1540: %t108 = getelementptr inbounds %S.parser.Parser, ptr %t106, i32 0, i32 2 %t109 = load i64, ptr %t108 %t110 = sub i64 %t109, 1 store i64 %t110, ptr %t108 %t111 = load ptr, ptr %a1 %t112 = call %S.lexer.Token @finch.parser.expect(ptr %t111, { ptr, i64, i64 } { ptr @.str.870, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.871, i64 3, i64 0 }) store %S.lexer.Token %t112, ptr %a113 call void @finch.drop.S_lexer_Token(ptr %a113) %t114 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.872, i64 4, i64 0 }) %t115 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 %t116 = load %S.ast.Type, ptr %t115 store %S.ast.Type %t114, ptr %t115 store %S.ast.Type %t116, ptr %a117 call void @finch.drop.S_ast_Type(ptr %a117) %t118 = load ptr, ptr %a1 %t119 = call i1 @finch.parser.accept(ptr %t118, { ptr, i64, i64 } { ptr @.str.873, i64 2, i64 0 }) br i1 %t119, label %then1541, label %endif1543 then1541: %t120 = load ptr, ptr %a1 %t121 = call i1 @finch.parser.at(ptr %t120, { ptr, i64, i64 } { ptr @.str.874, i64 1, i64 0 }) %t122 = xor i1 %t121, true br i1 %t122, label %then1544, label %endif1546 then1544: %t123 = load ptr, ptr %a1 %t124 = call %S.ast.Type @finch.parser.parseType(ptr %t123) %t125 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 %t126 = load %S.ast.Type, ptr %t125 store %S.ast.Type %t124, ptr %t125 store %S.ast.Type %t126, ptr %a127 call void @finch.drop.S_ast_Type(ptr %a127) br label %endif1546 endif1546: %t128 = load ptr, ptr %a1 %t129 = call i1 @finch.parser.accept(ptr %t128, { ptr, i64, i64 } { ptr @.str.875, i64 1, i64 0 }) %t130 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 7 store i1 %t129, ptr %t130 %t131 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 7 %t132 = load i1, ptr %t131 %t133 = xor i1 %t132, true br label %logic.from1547 logic.from1547: br i1 %t133, label %logic.rhs1548, label %logic.end1549 logic.rhs1548: %t134 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 %t135 = getelementptr inbounds %S.ast.Type, ptr %t134, i32 0, i32 0 %t136 = load { ptr, i64, i64 }, ptr %t135 store { ptr, i64, i64 } %t136, ptr %a137 store { ptr, i64, i64 } { ptr @.str.876, i64 4, i64 0 }, ptr %a138 %t139 = call i32 @finch_str_eq(ptr %a137, ptr %a138) %t140 = icmp ne i32 %t139, 0 br label %logic.rend1550 logic.rend1550: br label %logic.end1549 logic.end1549: %t141 = phi i1 [ false, %logic.from1547 ], [ %t140, %logic.rend1550 ] br i1 %t141, label %then1551, label %endif1553 then1551: %t142 = load ptr, ptr %a1 %t143 = load ptr, ptr %a1 %t144 = call %S.lexer.Token @finch.parser.cur(ptr %t143) %t145 = load ptr, ptr %a1 %t146 = call %S.lexer.Token @finch.parser.cur(ptr %t145) %t147 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t146) store %S.lexer.Token %t146, ptr %a148 call void @finch.drop.S_lexer_Token(ptr %a148) store { ptr, i64, i64 } { ptr @.str.877, i64 11, i64 0 }, ptr %a150 store { ptr, i64, i64 } %t147, ptr %a151 call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) store { ptr, i64, i64 } %t147, ptr %a152 call void @finch_str_drop(ptr %a152) %t153 = load { ptr, i64, i64 }, ptr %a149 store { ptr, i64, i64 } %t153, ptr %a155 store { ptr, i64, i64 } { ptr @.str.878, i64 61, i64 0 }, ptr %a156 call void @finch_str_concat(ptr %a154, ptr %a155, ptr %a156) store { ptr, i64, i64 } %t153, ptr %a157 call void @finch_str_drop(ptr %a157) %t158 = load { ptr, i64, i64 }, ptr %a154 call void @finch.parser.fail(ptr %t142, %S.lexer.Token %t144, { ptr, i64, i64 } %t158) store %S.lexer.Token %t144, ptr %a159 call void @finch.drop.S_lexer_Token(ptr %a159) store { ptr, i64, i64 } %t158, ptr %a160 call void @finch_str_drop(ptr %a160) br label %endif1553 endif1553: br label %endif1543 endif1543: %t161 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t162 = getelementptr inbounds { ptr, i64, i64 }, ptr %t161, i32 0, i32 1 %t163 = load ptr, ptr %a1 %t164 = call %S.ast.Node @finch.parser.parseBlock(ptr %t163) %t165 = load i64, ptr %t162 %t166 = add i64 %t165, 1 call void @finch_arr_reserve(ptr %t161, i64 %t166, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t167 = load ptr, ptr %t161 %t168 = getelementptr inbounds %S.ast.Node, ptr %t167, i64 %t165 store %S.ast.Node %t164, ptr %t168 store i64 %t166, ptr %t162 %t169 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t170 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t171 = getelementptr inbounds { ptr, i64, i64 }, ptr %t170, i32 0, i32 1 %t172 = load i64, ptr %t171 %t173 = sub i64 %t172, 1 %t174 = load { ptr, i64, i64 }, ptr %t169 %t175 = extractvalue { ptr, i64, i64 } %t174, 1 %t176 = icmp uge i64 %t173, %t175 br i1 %t176, label %range1554, label %inrange1555 range1554: call void @finch_panic_index(ptr @.str.879, i64 471, i64 %t173, i64 %t175) unreachable inrange1555: %t177 = extractvalue { ptr, i64, i64 } %t174, 0 %t178 = getelementptr inbounds %S.ast.Node, ptr %t177, i64 %t173 %t179 = getelementptr inbounds %S.ast.Node, ptr %t178, i32 0, i32 14 %t180 = load i64, ptr %t179 %t181 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 14 store i64 %t180, ptr %t181 %t182 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t182 } define internal %S.ast.Node @finch.parser.parseBlock(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca %S.ast.Node, align 16 %a7 = alloca %S.lexer.Token, align 16 %a12 = alloca i64, align 16 %a24 = alloca %S.lexer.Token, align 16 %a41 = alloca %S.lexer.Token, align 16 %a45 = alloca %S.lexer.Token, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.880, i64 5, i64 0 }) store %S.ast.Node %t3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.881, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.882, i64 3, i64 0 }) store %S.lexer.Token %t6, ptr %a7 call void @finch.drop.S_lexer_Token(ptr %a7) %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic1556, label %ok1557 panic1556: call void @finch_panic(ptr @.str.883, i64 480, ptr @.str.884) unreachable ok1557: %t10 = getelementptr inbounds %S.parser.Parser, ptr %t8, i32 0, i32 2 %t11 = load i64, ptr %t10 store i64 %t11, ptr %a12 %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null br i1 %t14, label %panic1558, label %ok1559 panic1558: call void @finch_panic(ptr @.str.885, i64 481, ptr @.str.886) unreachable ok1559: %t15 = getelementptr inbounds %S.parser.Parser, ptr %t13, i32 0, i32 2 store i64 0, ptr %t15 br label %while.cond1560 while.cond1560: %t16 = load ptr, ptr %a1 %t17 = call i1 @finch.parser.at(ptr %t16, { ptr, i64, i64 } { ptr @.str.887, i64 1, i64 0 }) %t18 = xor i1 %t17, true br i1 %t18, label %while.body1561, label %while.end1562 while.body1561: %t19 = load ptr, ptr %a1 %t20 = call i1 @finch.parser.at(ptr %t19, { ptr, i64, i64 } { ptr @.str.888, i64 3, i64 0 }) br i1 %t20, label %then1563, label %endif1565 then1563: %t21 = load ptr, ptr %a1 %t22 = load ptr, ptr %a1 %t23 = call %S.lexer.Token @finch.parser.cur(ptr %t22) call void @finch.parser.fail(ptr %t21, %S.lexer.Token %t23, { ptr, i64, i64 } { ptr @.str.889, i64 35, i64 0 }) store %S.lexer.Token %t23, ptr %a24 call void @finch.drop.S_lexer_Token(ptr %a24) br label %endif1565 endif1565: %t25 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i32 0, i32 1 %t27 = load ptr, ptr %a1 %t28 = call %S.ast.Node @finch.parser.parseStatement(ptr %t27) %t29 = load i64, ptr %t26 %t30 = add i64 %t29, 1 call void @finch_arr_reserve(ptr %t25, i64 %t30, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t31 = load ptr, ptr %t25 %t32 = getelementptr inbounds %S.ast.Node, ptr %t31, i64 %t29 store %S.ast.Node %t28, ptr %t32 store i64 %t30, ptr %t26 %t33 = load ptr, ptr %a1 call void @finch.parser.endOfStatement(ptr %t33) br label %while.cond1560 while.end1562: %t34 = load i64, ptr %a12 %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null br i1 %t36, label %panic1566, label %ok1567 panic1566: call void @finch_panic(ptr @.str.890, i64 489, ptr @.str.891) unreachable ok1567: %t37 = getelementptr inbounds %S.parser.Parser, ptr %t35, i32 0, i32 2 store i64 %t34, ptr %t37 %t38 = load ptr, ptr %a1 %t39 = call %S.lexer.Token @finch.parser.cur(ptr %t38) %t40 = extractvalue %S.lexer.Token %t39, 2 store %S.lexer.Token %t39, ptr %a41 call void @finch.drop.S_lexer_Token(ptr %a41) %t42 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 14 store i64 %t40, ptr %t42 %t43 = load ptr, ptr %a1 %t44 = call %S.lexer.Token @finch.parser.next(ptr %t43) store %S.lexer.Token %t44, ptr %a45 call void @finch.drop.S_lexer_Token(ptr %a45) %t46 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t46 } define internal %S.ast.Node @finch.parser.parseStatement(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca %S.ast.Node, align 16 %a22 = alloca %S.lexer.Token, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca %S.ast.Node, align 16 %a50 = alloca %S.lexer.Token, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca %S.lexer.Token, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca %S.lexer.Token, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca %S.lexer.Token, align 16 %a93 = alloca %S.lexer.Token, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca %S.ast.Node, align 16 %a131 = alloca %S.lexer.Token, align 16 %a138 = alloca %S.lexer.Token, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca %S.ast.Node, align 16 %a167 = alloca %S.lexer.Token, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca %S.ast.Node, align 16 %a186 = alloca %S.lexer.Token, align 16 %a192 = alloca %S.lexer.Token, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca %S.lexer.Token, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca %S.ast.Node, align 16 %a250 = alloca %S.ast.Type, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca %S.lexer.Token, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca %S.ast.Node, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca %S.lexer.Token, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca %S.lexer.Token, align 16 %a309 = alloca %S.lexer.Token, align 16 %a312 = alloca %S.ast.Node, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca i64, align 16 %a331 = alloca i64, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a355 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca %S.ast.Node, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca %S.lexer.Token, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca %S.ast.Node, align 16 %a396 = alloca %S.ast.Node, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a419 = alloca { ptr, i64, i64 }, align 16 %a420 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a434 = alloca { ptr, i64, i64 }, align 16 %a452 = alloca %S.ast.Node, align 16 %a456 = alloca %S.ast.Node, align 16 %a457 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t2) store { ptr, i64, i64 } %t3, ptr %a4 %t5 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.892, i64 2, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then1568, label %endif1570 then1568: %t10 = load ptr, ptr %a1 %t11 = call %S.ast.Node @finch.parser.parseIf(ptr %t10) call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t11 endif1570: %t12 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.893, i64 5, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 br i1 %t16, label %then1571, label %endif1573 then1571: %t17 = load ptr, ptr %a1 %t18 = call %S.ast.Node @finch.parser.node(ptr %t17, { ptr, i64, i64 } { ptr @.str.894, i64 5, i64 0 }) store %S.ast.Node %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = call %S.lexer.Token @finch.parser.next(ptr %t20) store %S.lexer.Token %t21, ptr %a22 call void @finch.drop.S_lexer_Token(ptr %a22) %t23 = getelementptr inbounds %S.ast.Node, ptr %a19, i32 0, i32 9 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i32 0, i32 1 %t25 = load ptr, ptr %a1 %t26 = call %S.ast.Node @finch.parser.parseExpr(ptr %t25) %t27 = load i64, ptr %t24 %t28 = add i64 %t27, 1 call void @finch_arr_reserve(ptr %t23, i64 %t28, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t29 = load ptr, ptr %t23 %t30 = getelementptr inbounds %S.ast.Node, ptr %t29, i64 %t27 store %S.ast.Node %t26, ptr %t30 store i64 %t28, ptr %t24 %t31 = getelementptr inbounds %S.ast.Node, ptr %a19, i32 0, i32 9 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 %t33 = load ptr, ptr %a1 %t34 = call %S.ast.Node @finch.parser.parseBlock(ptr %t33) %t35 = load i64, ptr %t32 %t36 = add i64 %t35, 1 call void @finch_arr_reserve(ptr %t31, i64 %t36, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t37 = load ptr, ptr %t31 %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t35 store %S.ast.Node %t34, ptr %t38 store i64 %t36, ptr %t32 %t39 = load %S.ast.Node, ptr %a19 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t39 endif1573: %t40 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } { ptr @.str.895, i64 3, i64 0 }, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 br i1 %t44, label %then1574, label %endif1576 then1574: %t45 = load ptr, ptr %a1 %t46 = call %S.ast.Node @finch.parser.node(ptr %t45, { ptr, i64, i64 } { ptr @.str.896, i64 3, i64 0 }) store %S.ast.Node %t46, ptr %a47 %t48 = load ptr, ptr %a1 %t49 = call %S.lexer.Token @finch.parser.next(ptr %t48) store %S.lexer.Token %t49, ptr %a50 call void @finch.drop.S_lexer_Token(ptr %a50) %t51 = load ptr, ptr %a1 %t52 = call %S.lexer.Token @finch.parser.expect(ptr %t51, { ptr, i64, i64 } { ptr @.str.897, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.898, i64 20, i64 0 }) %t53 = extractvalue %S.lexer.Token %t52, 1 store { ptr, i64, i64 } %t53, ptr %a54 call void @finch_str_copy(ptr %a55, ptr %a54) %t56 = load { ptr, i64, i64 }, ptr %a55 store %S.lexer.Token %t52, ptr %a57 call void @finch.drop.S_lexer_Token(ptr %a57) %t58 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 1 %t59 = load { ptr, i64, i64 }, ptr %t58 store { ptr, i64, i64 } %t56, ptr %t58 store { ptr, i64, i64 } %t59, ptr %a60 call void @finch_str_drop(ptr %a60) %t61 = load ptr, ptr %a1 %t62 = call i1 @finch.parser.accept(ptr %t61, { ptr, i64, i64 } { ptr @.str.899, i64 1, i64 0 }) br i1 %t62, label %then1577, label %endif1579 then1577: %t63 = load ptr, ptr %a1 %t64 = call %S.lexer.Token @finch.parser.expect(ptr %t63, { ptr, i64, i64 } { ptr @.str.900, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.901, i64 27, i64 0 }) %t65 = extractvalue %S.lexer.Token %t64, 1 store { ptr, i64, i64 } %t65, ptr %a66 call void @finch_str_copy(ptr %a67, ptr %a66) %t68 = load { ptr, i64, i64 }, ptr %a67 store %S.lexer.Token %t64, ptr %a69 call void @finch.drop.S_lexer_Token(ptr %a69) %t70 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 4 %t71 = load { ptr, i64, i64 }, ptr %t70 store { ptr, i64, i64 } %t68, ptr %t70 store { ptr, i64, i64 } %t71, ptr %a72 call void @finch_str_drop(ptr %a72) br label %endif1579 endif1579: %t73 = load ptr, ptr %a1 %t74 = call %S.lexer.Token @finch.parser.expect(ptr %t73, { ptr, i64, i64 } { ptr @.str.902, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.903, i64 4, i64 0 }) store %S.lexer.Token %t74, ptr %a75 call void @finch.drop.S_lexer_Token(ptr %a75) %t76 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 9 %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 %t78 = load ptr, ptr %a1 %t79 = call %S.ast.Node @finch.parser.parseExpr(ptr %t78) %t80 = load i64, ptr %t77 %t81 = add i64 %t80, 1 call void @finch_arr_reserve(ptr %t76, i64 %t81, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t82 = load ptr, ptr %t76 %t83 = getelementptr inbounds %S.ast.Node, ptr %t82, i64 %t80 store %S.ast.Node %t79, ptr %t83 store i64 %t81, ptr %t77 %t84 = load ptr, ptr %a1 %t85 = call i1 @finch.parser.accept(ptr %t84, { ptr, i64, i64 } { ptr @.str.904, i64 2, i64 0 }) br i1 %t85, label %then1580, label %else1581 then1580: %t86 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 4 %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 %t88 = load i64, ptr %t87 %t89 = icmp sgt i64 %t88, 0 br i1 %t89, label %then1583, label %endif1585 then1583: %t90 = load ptr, ptr %a1 %t91 = load ptr, ptr %a1 %t92 = call %S.lexer.Token @finch.parser.cur(ptr %t91) call void @finch.parser.fail(ptr %t90, %S.lexer.Token %t92, { ptr, i64, i64 } { ptr @.str.905, i64 55, i64 0 }) store %S.lexer.Token %t92, ptr %a93 call void @finch.drop.S_lexer_Token(ptr %a93) br label %endif1585 endif1585: %t94 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 9 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 %t96 = load ptr, ptr %a1 %t97 = call %S.ast.Node @finch.parser.parseExpr(ptr %t96) %t98 = load i64, ptr %t95 %t99 = add i64 %t98, 1 call void @finch_arr_reserve(ptr %t94, i64 %t99, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t100 = load ptr, ptr %t94 %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 %t98 store %S.ast.Node %t97, ptr %t101 store i64 %t99, ptr %t95 br label %endif1582 else1581: %t102 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 0 %t103 = load { ptr, i64, i64 }, ptr %t102 store { ptr, i64, i64 } { ptr @.str.906, i64 4, i64 0 }, ptr %t102 store { ptr, i64, i64 } %t103, ptr %a104 call void @finch_str_drop(ptr %a104) br label %endif1582 endif1582: %t105 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 9 %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t105, i32 0, i32 1 %t107 = load ptr, ptr %a1 %t108 = call %S.ast.Node @finch.parser.parseBlock(ptr %t107) %t109 = load i64, ptr %t106 %t110 = add i64 %t109, 1 call void @finch_arr_reserve(ptr %t105, i64 %t110, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t111 = load ptr, ptr %t105 %t112 = getelementptr inbounds %S.ast.Node, ptr %t111, i64 %t109 store %S.ast.Node %t108, ptr %t112 store i64 %t110, ptr %t106 %t113 = load %S.ast.Node, ptr %a47 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t113 endif1576: %t114 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t114, ptr %a115 store { ptr, i64, i64 } { ptr @.str.907, i64 5, i64 0 }, ptr %a116 %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) %t118 = icmp ne i32 %t117, 0 br i1 %t118, label %then1586, label %endif1588 then1586: %t119 = load ptr, ptr %a1 %t120 = call %S.ast.Node @finch.parser.parseMatch(ptr %t119, i1 false) call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t120 endif1588: %t121 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t121, ptr %a122 store { ptr, i64, i64 } { ptr @.str.908, i64 6, i64 0 }, ptr %a123 %t124 = call i32 @finch_str_eq(ptr %a122, ptr %a123) %t125 = icmp ne i32 %t124, 0 br i1 %t125, label %then1589, label %endif1591 then1589: %t126 = load ptr, ptr %a1 %t127 = call %S.ast.Node @finch.parser.node(ptr %t126, { ptr, i64, i64 } { ptr @.str.909, i64 6, i64 0 }) store %S.ast.Node %t127, ptr %a128 %t129 = load ptr, ptr %a1 %t130 = call %S.lexer.Token @finch.parser.next(ptr %t129) store %S.lexer.Token %t130, ptr %a131 call void @finch.drop.S_lexer_Token(ptr %a131) %t132 = load ptr, ptr %a1 %t133 = call i1 @finch.parser.at(ptr %t132, { ptr, i64, i64 } { ptr @.str.910, i64 1, i64 0 }) %t134 = xor i1 %t133, true br label %logic.from1592 logic.from1592: br i1 %t134, label %logic.rhs1593, label %logic.end1594 logic.rhs1593: %t135 = load ptr, ptr %a1 %t136 = call %S.lexer.Token @finch.parser.cur(ptr %t135) %t137 = extractvalue %S.lexer.Token %t136, 4 store %S.lexer.Token %t136, ptr %a138 call void @finch.drop.S_lexer_Token(ptr %a138) %t139 = xor i1 %t137, true br label %logic.rend1595 logic.rend1595: br label %logic.end1594 logic.end1594: %t140 = phi i1 [ false, %logic.from1592 ], [ %t139, %logic.rend1595 ] br i1 %t140, label %then1596, label %endif1598 then1596: %t141 = getelementptr inbounds %S.ast.Node, ptr %a128, i32 0, i32 9 %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i32 0, i32 1 %t143 = load ptr, ptr %a1 %t144 = call %S.ast.Node @finch.parser.parseExpr(ptr %t143) %t145 = load i64, ptr %t142 %t146 = add i64 %t145, 1 call void @finch_arr_reserve(ptr %t141, i64 %t146, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t147 = load ptr, ptr %t141 %t148 = getelementptr inbounds %S.ast.Node, ptr %t147, i64 %t145 store %S.ast.Node %t144, ptr %t148 store i64 %t146, ptr %t142 br label %endif1598 endif1598: %t149 = load %S.ast.Node, ptr %a128 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t149 endif1591: %t150 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t150, ptr %a151 store { ptr, i64, i64 } { ptr @.str.911, i64 5, i64 0 }, ptr %a152 %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) %t154 = icmp ne i32 %t153, 0 br label %logic.from1599 logic.from1599: br i1 %t154, label %logic.end1601, label %logic.rhs1600 logic.rhs1600: %t155 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t155, ptr %a156 store { ptr, i64, i64 } { ptr @.str.912, i64 8, i64 0 }, ptr %a157 %t158 = call i32 @finch_str_eq(ptr %a156, ptr %a157) %t159 = icmp ne i32 %t158, 0 br label %logic.rend1602 logic.rend1602: br label %logic.end1601 logic.end1601: %t160 = phi i1 [ true, %logic.from1599 ], [ %t159, %logic.rend1602 ] br i1 %t160, label %then1603, label %endif1605 then1603: %t161 = load ptr, ptr %a1 %t162 = load { ptr, i64, i64 }, ptr %a4 %t163 = call %S.ast.Node @finch.parser.node(ptr %t161, { ptr, i64, i64 } %t162) store %S.ast.Node %t163, ptr %a164 %t165 = load ptr, ptr %a1 %t166 = call %S.lexer.Token @finch.parser.next(ptr %t165) store %S.lexer.Token %t166, ptr %a167 call void @finch.drop.S_lexer_Token(ptr %a167) %t168 = load %S.ast.Node, ptr %a164 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t168 endif1605: %t169 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t169, ptr %a170 store { ptr, i64, i64 } { ptr @.str.913, i64 1, i64 0 }, ptr %a171 %t172 = call i32 @finch_str_eq(ptr %a170, ptr %a171) %t173 = icmp ne i32 %t172, 0 br i1 %t173, label %then1606, label %endif1608 then1606: %t174 = load ptr, ptr %a1 %t175 = call %S.ast.Node @finch.parser.parseBlock(ptr %t174) call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t175 endif1608: %t176 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t176, ptr %a177 store { ptr, i64, i64 } { ptr @.str.914, i64 5, i64 0 }, ptr %a178 %t179 = call i32 @finch_str_eq(ptr %a177, ptr %a178) %t180 = icmp ne i32 %t179, 0 br i1 %t180, label %then1609, label %endif1611 then1609: %t181 = load ptr, ptr %a1 %t182 = call %S.ast.Node @finch.parser.node(ptr %t181, { ptr, i64, i64 } { ptr @.str.915, i64 5, i64 0 }) store %S.ast.Node %t182, ptr %a183 %t184 = load ptr, ptr %a1 %t185 = call %S.lexer.Token @finch.parser.next(ptr %t184) store %S.lexer.Token %t185, ptr %a186 call void @finch.drop.S_lexer_Token(ptr %a186) %t187 = load ptr, ptr %a1 %t188 = call i1 @finch.parser.at(ptr %t187, { ptr, i64, i64 } { ptr @.str.916, i64 5, i64 0 }) br i1 %t188, label %then1612, label %endif1614 then1612: %t189 = load ptr, ptr %a1 %t190 = load ptr, ptr %a1 %t191 = call %S.lexer.Token @finch.parser.cur(ptr %t190) call void @finch.parser.fail(ptr %t189, %S.lexer.Token %t191, { ptr, i64, i64 } { ptr @.str.917, i64 33, i64 0 }) store %S.lexer.Token %t191, ptr %a192 call void @finch.drop.S_lexer_Token(ptr %a192) br label %endif1614 endif1614: %t193 = getelementptr inbounds %S.ast.Node, ptr %a183, i32 0, i32 9 %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %t193, i32 0, i32 1 %t195 = load ptr, ptr %a1 %t196 = call %S.ast.Node @finch.parser.parseStatement(ptr %t195) %t197 = load i64, ptr %t194 %t198 = add i64 %t197, 1 call void @finch_arr_reserve(ptr %t193, i64 %t198, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t199 = load ptr, ptr %t193 %t200 = getelementptr inbounds %S.ast.Node, ptr %t199, i64 %t197 store %S.ast.Node %t196, ptr %t200 store i64 %t198, ptr %t194 %t201 = load %S.ast.Node, ptr %a183 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t201 endif1611: %t202 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t202, ptr %a203 store { ptr, i64, i64 } { ptr @.str.918, i64 2, i64 0 }, ptr %a204 %t205 = call i32 @finch_str_eq(ptr %a203, ptr %a204) %t206 = icmp ne i32 %t205, 0 br label %logic.from1615 logic.from1615: br i1 %t206, label %logic.end1617, label %logic.rhs1616 logic.rhs1616: %t207 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t207, ptr %a208 store { ptr, i64, i64 } { ptr @.str.919, i64 6, i64 0 }, ptr %a209 %t210 = call i32 @finch_str_eq(ptr %a208, ptr %a209) %t211 = icmp ne i32 %t210, 0 br label %logic.rend1618 logic.rend1618: br label %logic.end1617 logic.end1617: %t212 = phi i1 [ true, %logic.from1615 ], [ %t211, %logic.rend1618 ] br label %logic.from1619 logic.from1619: br i1 %t212, label %logic.end1621, label %logic.rhs1620 logic.rhs1620: %t213 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t213, ptr %a214 store { ptr, i64, i64 } { ptr @.str.920, i64 6, i64 0 }, ptr %a215 %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) %t217 = icmp ne i32 %t216, 0 br label %logic.rend1622 logic.rend1622: br label %logic.end1621 logic.end1621: %t218 = phi i1 [ true, %logic.from1619 ], [ %t217, %logic.rend1622 ] br label %logic.from1623 logic.from1623: br i1 %t218, label %logic.end1625, label %logic.rhs1624 logic.rhs1624: %t219 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t219, ptr %a220 store { ptr, i64, i64 } { ptr @.str.921, i64 4, i64 0 }, ptr %a221 %t222 = call i32 @finch_str_eq(ptr %a220, ptr %a221) %t223 = icmp ne i32 %t222, 0 br label %logic.rend1626 logic.rend1626: br label %logic.end1625 logic.end1625: %t224 = phi i1 [ true, %logic.from1623 ], [ %t223, %logic.rend1626 ] br i1 %t224, label %then1627, label %endif1629 then1627: %t225 = load ptr, ptr %a1 %t226 = load ptr, ptr %a1 %t227 = call %S.lexer.Token @finch.parser.cur(ptr %t226) %t228 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } { ptr @.str.922, i64 1, i64 0 }, ptr %a230 store { ptr, i64, i64 } %t228, ptr %a231 call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) %t232 = load { ptr, i64, i64 }, ptr %a229 store { ptr, i64, i64 } %t232, ptr %a234 store { ptr, i64, i64 } { ptr @.str.923, i64 48, i64 0 }, ptr %a235 call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) store { ptr, i64, i64 } %t232, ptr %a236 call void @finch_str_drop(ptr %a236) %t237 = load { ptr, i64, i64 }, ptr %a233 call void @finch.parser.fail(ptr %t225, %S.lexer.Token %t227, { ptr, i64, i64 } %t237) store %S.lexer.Token %t227, ptr %a238 call void @finch.drop.S_lexer_Token(ptr %a238) store { ptr, i64, i64 } %t237, ptr %a239 call void @finch_str_drop(ptr %a239) br label %endif1629 endif1629: %t240 = load ptr, ptr %a1 %t241 = call i1 @finch.parser.atDeclaration(ptr %t240) br i1 %t241, label %then1630, label %endif1632 then1630: %t242 = load ptr, ptr %a1 %t243 = call %S.ast.Node @finch.parser.node(ptr %t242, { ptr, i64, i64 } { ptr @.str.924, i64 4, i64 0 }) store %S.ast.Node %t243, ptr %a244 %t245 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 6 store i1 true, ptr %t245 %t246 = load ptr, ptr %a1 %t247 = call %S.ast.Type @finch.parser.parseType(ptr %t246) %t248 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 5 %t249 = load %S.ast.Type, ptr %t248 store %S.ast.Type %t247, ptr %t248 store %S.ast.Type %t249, ptr %a250 call void @finch.drop.S_ast_Type(ptr %a250) %t251 = load ptr, ptr %a1 %t252 = call %S.lexer.Token @finch.parser.expect(ptr %t251, { ptr, i64, i64 } { ptr @.str.925, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.926, i64 15, i64 0 }) %t253 = extractvalue %S.lexer.Token %t252, 1 store { ptr, i64, i64 } %t253, ptr %a254 call void @finch_str_copy(ptr %a255, ptr %a254) %t256 = load { ptr, i64, i64 }, ptr %a255 store %S.lexer.Token %t252, ptr %a257 call void @finch.drop.S_lexer_Token(ptr %a257) %t258 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 1 %t259 = load { ptr, i64, i64 }, ptr %t258 store { ptr, i64, i64 } %t256, ptr %t258 store { ptr, i64, i64 } %t259, ptr %a260 call void @finch_str_drop(ptr %a260) %t261 = load ptr, ptr %a1 %t262 = call i1 @finch.parser.accept(ptr %t261, { ptr, i64, i64 } { ptr @.str.927, i64 1, i64 0 }) br i1 %t262, label %then1633, label %endif1635 then1633: %t263 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 9 %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 %t265 = load ptr, ptr %a1 %t266 = call %S.ast.Node @finch.parser.parseExpr(ptr %t265) %t267 = load i64, ptr %t264 %t268 = add i64 %t267, 1 call void @finch_arr_reserve(ptr %t263, i64 %t268, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t269 = load ptr, ptr %t263 %t270 = getelementptr inbounds %S.ast.Node, ptr %t269, i64 %t267 store %S.ast.Node %t266, ptr %t270 store i64 %t268, ptr %t264 br label %endif1635 endif1635: %t271 = load %S.ast.Node, ptr %a244 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t271 endif1632: %t272 = load ptr, ptr %a1 %t273 = call i1 @finch.parser.at(ptr %t272, { ptr, i64, i64 } { ptr @.str.928, i64 5, i64 0 }) br label %logic.from1636 logic.from1636: br i1 %t273, label %logic.rhs1637, label %logic.end1638 logic.rhs1637: %t274 = load ptr, ptr %a1 %t275 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t274, i64 1) store { ptr, i64, i64 } %t275, ptr %a276 store { ptr, i64, i64 } { ptr @.str.929, i64 2, i64 0 }, ptr %a277 %t278 = call i32 @finch_str_eq(ptr %a276, ptr %a277) %t279 = icmp ne i32 %t278, 0 store { ptr, i64, i64 } %t275, ptr %a280 call void @finch_str_drop(ptr %a280) br label %logic.rend1639 logic.rend1639: br label %logic.end1638 logic.end1638: %t281 = phi i1 [ false, %logic.from1636 ], [ %t279, %logic.rend1639 ] br i1 %t281, label %then1640, label %endif1642 then1640: %t282 = load ptr, ptr %a1 %t283 = call %S.ast.Node @finch.parser.node(ptr %t282, { ptr, i64, i64 } { ptr @.str.930, i64 4, i64 0 }) store %S.ast.Node %t283, ptr %a284 %t285 = load ptr, ptr %a1 %t286 = call %S.lexer.Token @finch.parser.next(ptr %t285) %t287 = extractvalue %S.lexer.Token %t286, 1 store { ptr, i64, i64 } %t287, ptr %a288 call void @finch_str_copy(ptr %a289, ptr %a288) %t290 = load { ptr, i64, i64 }, ptr %a289 store %S.lexer.Token %t286, ptr %a291 call void @finch.drop.S_lexer_Token(ptr %a291) %t292 = getelementptr inbounds %S.ast.Node, ptr %a284, i32 0, i32 1 %t293 = load { ptr, i64, i64 }, ptr %t292 store { ptr, i64, i64 } %t290, ptr %t292 store { ptr, i64, i64 } %t293, ptr %a294 call void @finch_str_drop(ptr %a294) %t295 = load ptr, ptr %a1 %t296 = call %S.lexer.Token @finch.parser.next(ptr %t295) store %S.lexer.Token %t296, ptr %a297 call void @finch.drop.S_lexer_Token(ptr %a297) %t298 = getelementptr inbounds %S.ast.Node, ptr %a284, i32 0, i32 9 %t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i32 0, i32 1 %t300 = load ptr, ptr %a1 %t301 = call %S.ast.Node @finch.parser.parseExpr(ptr %t300) %t302 = load i64, ptr %t299 %t303 = add i64 %t302, 1 call void @finch_arr_reserve(ptr %t298, i64 %t303, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t304 = load ptr, ptr %t298 %t305 = getelementptr inbounds %S.ast.Node, ptr %t304, i64 %t302 store %S.ast.Node %t301, ptr %t305 store i64 %t303, ptr %t299 %t306 = load %S.ast.Node, ptr %a284 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t306 endif1642: %t307 = load ptr, ptr %a1 %t308 = call %S.lexer.Token @finch.parser.cur(ptr %t307) store %S.lexer.Token %t308, ptr %a309 %t310 = load ptr, ptr %a1 %t311 = call %S.ast.Node @finch.parser.parseExpr(ptr %t310) store %S.ast.Node %t311, ptr %a312 %t313 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t314 = call ptr @finch_alloc(i64 %t313) %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 0 store { ptr, i64, i64 } { ptr @.str.931, i64 1, i64 0 }, ptr %t315 %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 1 store { ptr, i64, i64 } { ptr @.str.932, i64 2, i64 0 }, ptr %t316 %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 2 store { ptr, i64, i64 } { ptr @.str.933, i64 2, i64 0 }, ptr %t317 %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 3 store { ptr, i64, i64 } { ptr @.str.934, i64 2, i64 0 }, ptr %t318 %t319 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 4 store { ptr, i64, i64 } { ptr @.str.935, i64 2, i64 0 }, ptr %t319 %t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 5 store { ptr, i64, i64 } { ptr @.str.936, i64 2, i64 0 }, ptr %t320 %t321 = insertvalue { ptr, i64, i64 } undef, ptr %t314, 0 %t322 = insertvalue { ptr, i64, i64 } %t321, i64 6, 1 %t323 = insertvalue { ptr, i64, i64 } %t322, i64 6, 2 store { ptr, i64, i64 } %t323, ptr %a324 %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %a324, i32 0, i32 1 %t326 = load ptr, ptr %a1 %t327 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t326) store i64 -1, ptr %a328 %t329 = load i64, ptr %t325 %t330 = load ptr, ptr %a324 store i64 0, ptr %a331 br label %find.cond1643 find.cond1643: %t332 = load i64, ptr %a331 %t333 = icmp slt i64 %t332, %t329 br i1 %t333, label %find.body1644, label %find.end1647 find.body1644: %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t330, i64 %t332 %t335 = load { ptr, i64, i64 }, ptr %t334 store { ptr, i64, i64 } %t335, ptr %a336 store { ptr, i64, i64 } %t327, ptr %a337 %t338 = call i32 @finch_str_eq(ptr %a336, ptr %a337) %t339 = icmp ne i32 %t338, 0 br i1 %t339, label %find.hit1645, label %find.next1646 find.hit1645: store i64 %t332, ptr %a328 br label %find.end1647 find.next1646: %t340 = add i64 %t332, 1 store i64 %t340, ptr %a331 br label %find.cond1643 find.end1647: store { ptr, i64, i64 } %t327, ptr %a341 call void @finch_str_drop(ptr %a341) %t342 = load i64, ptr %a328 %t343 = icmp sge i64 %t342, 0 br label %logic.from1648 logic.from1648: br i1 %t343, label %logic.rhs1649, label %logic.end1650 logic.rhs1649: %t344 = load ptr, ptr %a1 %t345 = call i1 @finch.parser.sameLine(ptr %t344) br label %logic.rend1651 logic.rend1651: br label %logic.end1650 logic.end1650: %t346 = phi i1 [ false, %logic.from1648 ], [ %t345, %logic.rend1651 ] br i1 %t346, label %then1652, label %endif1654 then1652: %t347 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t348 = load { ptr, i64, i64 }, ptr %t347 store { ptr, i64, i64 } %t348, ptr %a349 store { ptr, i64, i64 } { ptr @.str.937, i64 3, i64 0 }, ptr %a350 %t351 = call i32 @finch_str_eq(ptr %a349, ptr %a350) %t352 = icmp eq i32 %t351, 0 br label %logic.from1655 logic.from1655: br i1 %t352, label %logic.rhs1656, label %logic.end1657 logic.rhs1656: %t353 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t354 = load { ptr, i64, i64 }, ptr %t353 store { ptr, i64, i64 } %t354, ptr %a355 store { ptr, i64, i64 } { ptr @.str.938, i64 6, i64 0 }, ptr %a356 %t357 = call i32 @finch_str_eq(ptr %a355, ptr %a356) %t358 = icmp eq i32 %t357, 0 br label %logic.rend1658 logic.rend1658: br label %logic.end1657 logic.end1657: %t359 = phi i1 [ false, %logic.from1655 ], [ %t358, %logic.rend1658 ] br label %logic.from1659 logic.from1659: br i1 %t359, label %logic.rhs1660, label %logic.end1661 logic.rhs1660: %t360 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t361 = load { ptr, i64, i64 }, ptr %t360 store { ptr, i64, i64 } %t361, ptr %a362 store { ptr, i64, i64 } { ptr @.str.939, i64 5, i64 0 }, ptr %a363 %t364 = call i32 @finch_str_eq(ptr %a362, ptr %a363) %t365 = icmp eq i32 %t364, 0 br label %logic.rend1662 logic.rend1662: br label %logic.end1661 logic.end1661: %t366 = phi i1 [ false, %logic.from1659 ], [ %t365, %logic.rend1662 ] br i1 %t366, label %then1663, label %endif1665 then1663: %t367 = load ptr, ptr %a1 %t368 = load %S.lexer.Token, ptr %a309 call void @finch.parser.fail(ptr %t367, %S.lexer.Token %t368, { ptr, i64, i64 } { ptr @.str.940, i64 66, i64 0 }) br label %endif1665 endif1665: %t369 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.941, i64 6, i64 0 }, 0 %t370 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 2 %t371 = load i64, ptr %t370 %t372 = insertvalue %S.ast.Node %t369, i64 %t371, 11 %t373 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 3 %t374 = load i64, ptr %t373 %t375 = insertvalue %S.ast.Node %t372, i64 %t374, 12 %t376 = load ptr, ptr %a1 %t377 = icmp eq ptr %t376, null br i1 %t377, label %panic1666, label %ok1667 panic1666: call void @finch_panic(ptr @.str.942, i64 584, ptr @.str.943) unreachable ok1667: %t378 = getelementptr inbounds %S.parser.Parser, ptr %t376, i32 0, i32 3 %t379 = load i64, ptr %t378 %t380 = insertvalue %S.ast.Node %t375, i64 %t379, 13 store %S.ast.Node %t380, ptr %a381 %t382 = load ptr, ptr %a1 %t383 = call %S.lexer.Token @finch.parser.next(ptr %t382) %t384 = extractvalue %S.lexer.Token %t383, 0 store { ptr, i64, i64 } %t384, ptr %a385 call void @finch_str_copy(ptr %a386, ptr %a385) %t387 = load { ptr, i64, i64 }, ptr %a386 store %S.lexer.Token %t383, ptr %a388 call void @finch.drop.S_lexer_Token(ptr %a388) %t389 = getelementptr inbounds %S.ast.Node, ptr %a381, i32 0, i32 1 %t390 = load { ptr, i64, i64 }, ptr %t389 store { ptr, i64, i64 } %t387, ptr %t389 store { ptr, i64, i64 } %t390, ptr %a391 call void @finch_str_drop(ptr %a391) %t392 = getelementptr inbounds %S.ast.Node, ptr %a381, i32 0, i32 9 %t393 = getelementptr inbounds { ptr, i64, i64 }, ptr %t392, i32 0, i32 1 %t394 = load %S.ast.Node, ptr %a312 store %S.ast.Node %t394, ptr %a395 call void @finch.copy.S_ast_Node(ptr %a396, ptr %a395) %t397 = load %S.ast.Node, ptr %a396 %t398 = load i64, ptr %t393 %t399 = add i64 %t398, 1 call void @finch_arr_reserve(ptr %t392, i64 %t399, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t400 = load ptr, ptr %t392 %t401 = getelementptr inbounds %S.ast.Node, ptr %t400, i64 %t398 store %S.ast.Node %t397, ptr %t401 store i64 %t399, ptr %t393 %t402 = getelementptr inbounds %S.ast.Node, ptr %a381, i32 0, i32 9 %t403 = getelementptr inbounds { ptr, i64, i64 }, ptr %t402, i32 0, i32 1 %t404 = load ptr, ptr %a1 %t405 = call %S.ast.Node @finch.parser.parseExpr(ptr %t404) %t406 = load i64, ptr %t403 %t407 = add i64 %t406, 1 call void @finch_arr_reserve(ptr %t402, i64 %t407, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t408 = load ptr, ptr %t402 %t409 = getelementptr inbounds %S.ast.Node, ptr %t408, i64 %t406 store %S.ast.Node %t405, ptr %t409 store i64 %t407, ptr %t403 %t410 = load %S.ast.Node, ptr %a381 call void @finch.drop.arr_str(ptr %a324) call void @finch.drop.S_ast_Node(ptr %a312) call void @finch.drop.S_lexer_Token(ptr %a309) call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t410 endif1654: %t411 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t412 = load { ptr, i64, i64 }, ptr %t411 store { ptr, i64, i64 } %t412, ptr %a413 store { ptr, i64, i64 } { ptr @.str.944, i64 4, i64 0 }, ptr %a414 %t415 = call i32 @finch_str_eq(ptr %a413, ptr %a414) %t416 = icmp eq i32 %t415, 0 br label %logic.from1668 logic.from1668: br i1 %t416, label %logic.rhs1669, label %logic.end1670 logic.rhs1669: %t417 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t418 = load { ptr, i64, i64 }, ptr %t417 store { ptr, i64, i64 } %t418, ptr %a419 store { ptr, i64, i64 } { ptr @.str.945, i64 6, i64 0 }, ptr %a420 %t421 = call i32 @finch_str_eq(ptr %a419, ptr %a420) %t422 = icmp eq i32 %t421, 0 br label %logic.rend1671 logic.rend1671: br label %logic.end1670 logic.end1670: %t423 = phi i1 [ false, %logic.from1668 ], [ %t422, %logic.rend1671 ] br label %logic.from1672 logic.from1672: br i1 %t423, label %logic.rhs1673, label %logic.end1674 logic.rhs1673: %t424 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t425 = load { ptr, i64, i64 }, ptr %t424 store { ptr, i64, i64 } %t425, ptr %a426 store { ptr, i64, i64 } { ptr @.str.946, i64 3, i64 0 }, ptr %a427 %t428 = call i32 @finch_str_eq(ptr %a426, ptr %a427) %t429 = icmp eq i32 %t428, 0 br label %logic.rend1675 logic.rend1675: br label %logic.end1674 logic.end1674: %t430 = phi i1 [ false, %logic.from1672 ], [ %t429, %logic.rend1675 ] br label %logic.from1676 logic.from1676: br i1 %t430, label %logic.rhs1677, label %logic.end1678 logic.rhs1677: %t431 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t432 = load { ptr, i64, i64 }, ptr %t431 store { ptr, i64, i64 } %t432, ptr %a433 store { ptr, i64, i64 } { ptr @.str.947, i64 2, i64 0 }, ptr %a434 %t435 = call i32 @finch_str_eq(ptr %a433, ptr %a434) %t436 = icmp eq i32 %t435, 0 br label %logic.rend1679 logic.rend1679: br label %logic.end1678 logic.end1678: %t437 = phi i1 [ false, %logic.from1676 ], [ %t436, %logic.rend1679 ] br i1 %t437, label %then1680, label %endif1682 then1680: %t438 = load ptr, ptr %a1 %t439 = load %S.lexer.Token, ptr %a309 call void @finch.parser.fail(ptr %t438, %S.lexer.Token %t439, { ptr, i64, i64 } { ptr @.str.948, i64 37, i64 0 }) br label %endif1682 endif1682: %t440 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.949, i64 4, i64 0 }, 0 %t441 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 2 %t442 = load i64, ptr %t441 %t443 = insertvalue %S.ast.Node %t440, i64 %t442, 11 %t444 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 3 %t445 = load i64, ptr %t444 %t446 = insertvalue %S.ast.Node %t443, i64 %t445, 12 %t447 = load ptr, ptr %a1 %t448 = icmp eq ptr %t447, null br i1 %t448, label %panic1683, label %ok1684 panic1683: call void @finch_panic(ptr @.str.950, i64 593, ptr @.str.951) unreachable ok1684: %t449 = getelementptr inbounds %S.parser.Parser, ptr %t447, i32 0, i32 3 %t450 = load i64, ptr %t449 %t451 = insertvalue %S.ast.Node %t446, i64 %t450, 13 store %S.ast.Node %t451, ptr %a452 %t453 = getelementptr inbounds %S.ast.Node, ptr %a452, i32 0, i32 9 %t454 = getelementptr inbounds { ptr, i64, i64 }, ptr %t453, i32 0, i32 1 %t455 = load %S.ast.Node, ptr %a312 store %S.ast.Node %t455, ptr %a456 call void @finch.copy.S_ast_Node(ptr %a457, ptr %a456) %t458 = load %S.ast.Node, ptr %a457 %t459 = load i64, ptr %t454 %t460 = add i64 %t459, 1 call void @finch_arr_reserve(ptr %t453, i64 %t460, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t461 = load ptr, ptr %t453 %t462 = getelementptr inbounds %S.ast.Node, ptr %t461, i64 %t459 store %S.ast.Node %t458, ptr %t462 store i64 %t460, ptr %t454 %t463 = load %S.ast.Node, ptr %a452 call void @finch.drop.arr_str(ptr %a324) call void @finch.drop.S_ast_Node(ptr %a312) call void @finch.drop.S_lexer_Token(ptr %a309) call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t463 } define internal %S.ast.Node @finch.parser.parseIf(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca %S.ast.Node, align 16 %a7 = alloca %S.lexer.Token, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.952, i64 2, i64 0 }) store %S.ast.Node %t3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.953, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.954, i64 4, i64 0 }) store %S.lexer.Token %t6, ptr %a7 call void @finch.drop.S_lexer_Token(ptr %a7) %t8 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 %t10 = load ptr, ptr %a1 %t11 = call %S.ast.Node @finch.parser.parseExpr(ptr %t10) %t12 = load i64, ptr %t9 %t13 = add i64 %t12, 1 call void @finch_arr_reserve(ptr %t8, i64 %t13, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t14 = load ptr, ptr %t8 %t15 = getelementptr inbounds %S.ast.Node, ptr %t14, i64 %t12 store %S.ast.Node %t11, ptr %t15 store i64 %t13, ptr %t9 %t16 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 %t18 = load ptr, ptr %a1 %t19 = call %S.ast.Node @finch.parser.parseBlock(ptr %t18) %t20 = load i64, ptr %t17 %t21 = add i64 %t20, 1 call void @finch_arr_reserve(ptr %t16, i64 %t21, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t22 = load ptr, ptr %t16 %t23 = getelementptr inbounds %S.ast.Node, ptr %t22, i64 %t20 store %S.ast.Node %t19, ptr %t23 store i64 %t21, ptr %t17 %t24 = load ptr, ptr %a1 %t25 = call i1 @finch.parser.accept(ptr %t24, { ptr, i64, i64 } { ptr @.str.955, i64 4, i64 0 }) br i1 %t25, label %then1685, label %endif1687 then1685: %t26 = load ptr, ptr %a1 %t27 = call i1 @finch.parser.at(ptr %t26, { ptr, i64, i64 } { ptr @.str.956, i64 2, i64 0 }) br i1 %t27, label %then1688, label %else1689 then1688: %t28 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i32 0, i32 1 %t30 = load ptr, ptr %a1 %t31 = call %S.ast.Node @finch.parser.parseIf(ptr %t30) %t32 = load i64, ptr %t29 %t33 = add i64 %t32, 1 call void @finch_arr_reserve(ptr %t28, i64 %t33, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t34 = load ptr, ptr %t28 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 %t32 store %S.ast.Node %t31, ptr %t35 store i64 %t33, ptr %t29 br label %endif1690 else1689: %t36 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i32 0, i32 1 %t38 = load ptr, ptr %a1 %t39 = call %S.ast.Node @finch.parser.parseBlock(ptr %t38) %t40 = load i64, ptr %t37 %t41 = add i64 %t40, 1 call void @finch_arr_reserve(ptr %t36, i64 %t41, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t42 = load ptr, ptr %t36 %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t40 store %S.ast.Node %t39, ptr %t43 store i64 %t41, ptr %t37 br label %endif1690 endif1690: br label %endif1687 endif1687: %t44 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t44 } define internal i64 @finch.parser.binaryLevel({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 store { ptr, i64, i64 } { ptr @.str.957, i64 2, i64 0 }, ptr %a4 %t5 = call i32 @finch_str_eq(ptr %a3, ptr %a4) %t6 = icmp ne i32 %t5, 0 br i1 %t6, label %then1691, label %endif1693 then1691: ret i64 1 endif1693: %t7 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.958, i64 2, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 br i1 %t11, label %then1694, label %endif1696 then1694: ret i64 2 endif1696: %t12 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.959, i64 2, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 br label %logic.from1697 logic.from1697: br i1 %t16, label %logic.end1699, label %logic.rhs1698 logic.rhs1698: %t17 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t17, ptr %a18 store { ptr, i64, i64 } { ptr @.str.960, i64 2, i64 0 }, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp ne i32 %t20, 0 br label %logic.rend1700 logic.rend1700: br label %logic.end1699 logic.end1699: %t22 = phi i1 [ true, %logic.from1697 ], [ %t21, %logic.rend1700 ] br label %logic.from1701 logic.from1701: br i1 %t22, label %logic.end1703, label %logic.rhs1702 logic.rhs1702: %t23 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t23, ptr %a24 store { ptr, i64, i64 } { ptr @.str.961, i64 1, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 br label %logic.rend1704 logic.rend1704: br label %logic.end1703 logic.end1703: %t28 = phi i1 [ true, %logic.from1701 ], [ %t27, %logic.rend1704 ] br label %logic.from1705 logic.from1705: br i1 %t28, label %logic.end1707, label %logic.rhs1706 logic.rhs1706: %t29 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } { ptr @.str.962, i64 2, i64 0 }, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 br label %logic.rend1708 logic.rend1708: br label %logic.end1707 logic.end1707: %t34 = phi i1 [ true, %logic.from1705 ], [ %t33, %logic.rend1708 ] br label %logic.from1709 logic.from1709: br i1 %t34, label %logic.end1711, label %logic.rhs1710 logic.rhs1710: %t35 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.963, i64 1, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 br label %logic.rend1712 logic.rend1712: br label %logic.end1711 logic.end1711: %t40 = phi i1 [ true, %logic.from1709 ], [ %t39, %logic.rend1712 ] br label %logic.from1713 logic.from1713: br i1 %t40, label %logic.end1715, label %logic.rhs1714 logic.rhs1714: %t41 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.964, i64 2, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 br label %logic.rend1716 logic.rend1716: br label %logic.end1715 logic.end1715: %t46 = phi i1 [ true, %logic.from1713 ], [ %t45, %logic.rend1716 ] br i1 %t46, label %then1717, label %endif1719 then1717: ret i64 3 endif1719: %t47 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t47, ptr %a48 store { ptr, i64, i64 } { ptr @.str.965, i64 1, i64 0 }, ptr %a49 %t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49) %t51 = icmp ne i32 %t50, 0 br label %logic.from1720 logic.from1720: br i1 %t51, label %logic.end1722, label %logic.rhs1721 logic.rhs1721: %t52 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.966, i64 1, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 br label %logic.rend1723 logic.rend1723: br label %logic.end1722 logic.end1722: %t57 = phi i1 [ true, %logic.from1720 ], [ %t56, %logic.rend1723 ] br label %logic.from1724 logic.from1724: br i1 %t57, label %logic.end1726, label %logic.rhs1725 logic.rhs1725: %t58 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t58, ptr %a59 store { ptr, i64, i64 } { ptr @.str.967, i64 1, i64 0 }, ptr %a60 %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) %t62 = icmp ne i32 %t61, 0 br label %logic.rend1727 logic.rend1727: br label %logic.end1726 logic.end1726: %t63 = phi i1 [ true, %logic.from1724 ], [ %t62, %logic.rend1727 ] br label %logic.from1728 logic.from1728: br i1 %t63, label %logic.end1730, label %logic.rhs1729 logic.rhs1729: %t64 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t64, ptr %a65 store { ptr, i64, i64 } { ptr @.str.968, i64 1, i64 0 }, ptr %a66 %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) %t68 = icmp ne i32 %t67, 0 br label %logic.rend1731 logic.rend1731: br label %logic.end1730 logic.end1730: %t69 = phi i1 [ true, %logic.from1728 ], [ %t68, %logic.rend1731 ] br i1 %t69, label %then1732, label %endif1734 then1732: ret i64 4 endif1734: %t70 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t70, ptr %a71 store { ptr, i64, i64 } { ptr @.str.969, i64 1, i64 0 }, ptr %a72 %t73 = call i32 @finch_str_eq(ptr %a71, ptr %a72) %t74 = icmp ne i32 %t73, 0 br label %logic.from1735 logic.from1735: br i1 %t74, label %logic.end1737, label %logic.rhs1736 logic.rhs1736: %t75 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t75, ptr %a76 store { ptr, i64, i64 } { ptr @.str.970, i64 1, i64 0 }, ptr %a77 %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) %t79 = icmp ne i32 %t78, 0 br label %logic.rend1738 logic.rend1738: br label %logic.end1737 logic.end1737: %t80 = phi i1 [ true, %logic.from1735 ], [ %t79, %logic.rend1738 ] br label %logic.from1739 logic.from1739: br i1 %t80, label %logic.end1741, label %logic.rhs1740 logic.rhs1740: %t81 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.971, i64 1, i64 0 }, ptr %a83 %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) %t85 = icmp ne i32 %t84, 0 br label %logic.rend1742 logic.rend1742: br label %logic.end1741 logic.end1741: %t86 = phi i1 [ true, %logic.from1739 ], [ %t85, %logic.rend1742 ] br label %logic.from1743 logic.from1743: br i1 %t86, label %logic.end1745, label %logic.rhs1744 logic.rhs1744: %t87 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t87, ptr %a88 store { ptr, i64, i64 } { ptr @.str.972, i64 2, i64 0 }, ptr %a89 %t90 = call i32 @finch_str_eq(ptr %a88, ptr %a89) %t91 = icmp ne i32 %t90, 0 br label %logic.rend1746 logic.rend1746: br label %logic.end1745 logic.end1745: %t92 = phi i1 [ true, %logic.from1743 ], [ %t91, %logic.rend1746 ] br label %logic.from1747 logic.from1747: br i1 %t92, label %logic.end1749, label %logic.rhs1748 logic.rhs1748: %t93 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t93, ptr %a94 store { ptr, i64, i64 } { ptr @.str.973, i64 2, i64 0 }, ptr %a95 %t96 = call i32 @finch_str_eq(ptr %a94, ptr %a95) %t97 = icmp ne i32 %t96, 0 br label %logic.rend1750 logic.rend1750: br label %logic.end1749 logic.end1749: %t98 = phi i1 [ true, %logic.from1747 ], [ %t97, %logic.rend1750 ] br label %logic.from1751 logic.from1751: br i1 %t98, label %logic.end1753, label %logic.rhs1752 logic.rhs1752: %t99 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t99, ptr %a100 store { ptr, i64, i64 } { ptr @.str.974, i64 1, i64 0 }, ptr %a101 %t102 = call i32 @finch_str_eq(ptr %a100, ptr %a101) %t103 = icmp ne i32 %t102, 0 br label %logic.rend1754 logic.rend1754: br label %logic.end1753 logic.end1753: %t104 = phi i1 [ true, %logic.from1751 ], [ %t103, %logic.rend1754 ] br i1 %t104, label %then1755, label %endif1757 then1755: ret i64 5 endif1757: ret i64 0 } define internal %S.ast.Node @finch.parser.parseExpr(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca %S.ast.Node, align 16 %a15 = alloca %S.ast.Node, align 16 %a18 = alloca %S.lexer.Token, align 16 %a22 = alloca %S.ast.Node, align 16 %a23 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call %S.ast.Node @finch.parser.parseBinary(ptr %t2, i64 1) store %S.ast.Node %t3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call i1 @finch.parser.sameLine(ptr %t5) %t7 = xor i1 %t6, true br label %logic.from1758 logic.from1758: br i1 %t7, label %logic.end1760, label %logic.rhs1759 logic.rhs1759: %t8 = load ptr, ptr %a1 %t9 = call i1 @finch.parser.at(ptr %t8, { ptr, i64, i64 } { ptr @.str.975, i64 2, i64 0 }) %t10 = xor i1 %t9, true br label %logic.rend1761 logic.rend1761: br label %logic.end1760 logic.end1760: %t11 = phi i1 [ true, %logic.from1758 ], [ %t10, %logic.rend1761 ] br i1 %t11, label %then1762, label %endif1764 then1762: %t12 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t12 endif1764: %t13 = load ptr, ptr %a1 %t14 = call %S.ast.Node @finch.parser.node(ptr %t13, { ptr, i64, i64 } { ptr @.str.976, i64 2, i64 0 }) store %S.ast.Node %t14, ptr %a15 %t16 = load ptr, ptr %a1 %t17 = call %S.lexer.Token @finch.parser.next(ptr %t16) store %S.lexer.Token %t17, ptr %a18 call void @finch.drop.S_lexer_Token(ptr %a18) %t19 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 9 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 %t21 = load %S.ast.Node, ptr %a4 store %S.ast.Node %t21, ptr %a22 call void @finch.copy.S_ast_Node(ptr %a23, ptr %a22) %t24 = load %S.ast.Node, ptr %a23 %t25 = load i64, ptr %t20 %t26 = add i64 %t25, 1 call void @finch_arr_reserve(ptr %t19, i64 %t26, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t27 = load ptr, ptr %t19 %t28 = getelementptr inbounds %S.ast.Node, ptr %t27, i64 %t25 store %S.ast.Node %t24, ptr %t28 store i64 %t26, ptr %t20 %t29 = load ptr, ptr %a1 %t30 = call i1 @finch.parser.at(ptr %t29, { ptr, i64, i64 } { ptr @.str.977, i64 1, i64 0 }) br i1 %t30, label %then1765, label %else1766 then1765: %t31 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 6 store i1 true, ptr %t31 %t32 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 9 %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i32 0, i32 1 %t34 = load ptr, ptr %a1 %t35 = call %S.ast.Node @finch.parser.parseBlock(ptr %t34) %t36 = load i64, ptr %t33 %t37 = add i64 %t36, 1 call void @finch_arr_reserve(ptr %t32, i64 %t37, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t38 = load ptr, ptr %t32 %t39 = getelementptr inbounds %S.ast.Node, ptr %t38, i64 %t36 store %S.ast.Node %t35, ptr %t39 store i64 %t37, ptr %t33 br label %endif1767 else1766: %t40 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 9 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 %t42 = load ptr, ptr %a1 %t43 = call %S.ast.Node @finch.parser.parseExpr(ptr %t42) %t44 = load i64, ptr %t41 %t45 = add i64 %t44, 1 call void @finch_arr_reserve(ptr %t40, i64 %t45, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t46 = load ptr, ptr %t40 %t47 = getelementptr inbounds %S.ast.Node, ptr %t46, i64 %t44 store %S.ast.Node %t43, ptr %t47 store i64 %t45, ptr %t41 br label %endif1767 endif1767: %t48 = load %S.ast.Node, ptr %a15 call void @finch.drop.S_ast_Node(ptr %a4) ret %S.ast.Node %t48 } define internal %S.ast.Node @finch.parser.parseBinary(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a11 = alloca %S.ast.Node, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca %S.ast.Node, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca %S.lexer.Token, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca %S.ast.Node, align 16 %a38 = alloca %S.ast.Node, align 16 %a55 = alloca %S.ast.Node, align 16 %a56 = alloca %S.ast.Node, align 16 %a59 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load i64, ptr %a2 %t4 = icmp sgt i64 %t3, 5 br i1 %t4, label %then1768, label %endif1770 then1768: %t5 = load ptr, ptr %a1 %t6 = call %S.ast.Node @finch.parser.parseUnary(ptr %t5) ret %S.ast.Node %t6 endif1770: %t7 = load ptr, ptr %a1 %t8 = load i64, ptr %a2 %t9 = add i64 %t8, 1 %t10 = call %S.ast.Node @finch.parser.parseBinary(ptr %t7, i64 %t9) store %S.ast.Node %t10, ptr %a11 br label %while.cond1771 while.cond1771: %t12 = load ptr, ptr %a1 %t13 = call i1 @finch.parser.sameLine(ptr %t12) br label %logic.from1774 logic.from1774: br i1 %t13, label %logic.rhs1775, label %logic.end1776 logic.rhs1775: %t14 = load ptr, ptr %a1 %t15 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t14) %t16 = call i64 @finch.parser.binaryLevel({ ptr, i64, i64 } %t15) store { ptr, i64, i64 } %t15, ptr %a17 call void @finch_str_drop(ptr %a17) %t18 = load i64, ptr %a2 %t19 = icmp eq i64 %t16, %t18 br label %logic.rend1777 logic.rend1777: br label %logic.end1776 logic.end1776: %t20 = phi i1 [ false, %logic.from1774 ], [ %t19, %logic.rend1777 ] br i1 %t20, label %while.body1772, label %while.end1773 while.body1772: %t21 = load ptr, ptr %a1 %t22 = call %S.ast.Node @finch.parser.node(ptr %t21, { ptr, i64, i64 } { ptr @.str.978, i64 6, i64 0 }) store %S.ast.Node %t22, ptr %a23 %t24 = load ptr, ptr %a1 %t25 = call %S.lexer.Token @finch.parser.next(ptr %t24) %t26 = extractvalue %S.lexer.Token %t25, 0 store { ptr, i64, i64 } %t26, ptr %a27 call void @finch_str_copy(ptr %a28, ptr %a27) %t29 = load { ptr, i64, i64 }, ptr %a28 store %S.lexer.Token %t25, ptr %a30 call void @finch.drop.S_lexer_Token(ptr %a30) %t31 = getelementptr inbounds %S.ast.Node, ptr %a23, i32 0, i32 1 %t32 = load { ptr, i64, i64 }, ptr %t31 store { ptr, i64, i64 } %t29, ptr %t31 store { ptr, i64, i64 } %t32, ptr %a33 call void @finch_str_drop(ptr %a33) %t34 = getelementptr inbounds %S.ast.Node, ptr %a23, i32 0, i32 9 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i32 0, i32 1 %t36 = load %S.ast.Node, ptr %a11 store %S.ast.Node %t36, ptr %a37 call void @finch.copy.S_ast_Node(ptr %a38, ptr %a37) %t39 = load %S.ast.Node, ptr %a38 %t40 = load i64, ptr %t35 %t41 = add i64 %t40, 1 call void @finch_arr_reserve(ptr %t34, i64 %t41, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t42 = load ptr, ptr %t34 %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t40 store %S.ast.Node %t39, ptr %t43 store i64 %t41, ptr %t35 %t44 = getelementptr inbounds %S.ast.Node, ptr %a23, i32 0, i32 9 %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i32 0, i32 1 %t46 = load ptr, ptr %a1 %t47 = load i64, ptr %a2 %t48 = add i64 %t47, 1 %t49 = call %S.ast.Node @finch.parser.parseBinary(ptr %t46, i64 %t48) %t50 = load i64, ptr %t45 %t51 = add i64 %t50, 1 call void @finch_arr_reserve(ptr %t44, i64 %t51, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t52 = load ptr, ptr %t44 %t53 = getelementptr inbounds %S.ast.Node, ptr %t52, i64 %t50 store %S.ast.Node %t49, ptr %t53 store i64 %t51, ptr %t45 %t54 = load %S.ast.Node, ptr %a23 store %S.ast.Node %t54, ptr %a55 call void @finch.copy.S_ast_Node(ptr %a56, ptr %a55) %t57 = load %S.ast.Node, ptr %a56 %t58 = load %S.ast.Node, ptr %a11 store %S.ast.Node %t57, ptr %a11 store %S.ast.Node %t58, ptr %a59 call void @finch.drop.S_ast_Node(ptr %a59) call void @finch.drop.S_ast_Node(ptr %a23) br label %while.cond1771 while.end1773: %t60 = load %S.ast.Node, ptr %a11 ret %S.ast.Node %t60 } define internal %S.ast.Node @finch.parser.parseUnary(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a6 = alloca %S.ast.Node, align 16 %a9 = alloca %S.lexer.Token, align 16 %a29 = alloca %S.ast.Node, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca %S.lexer.Token, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.979, i64 3, i64 0 }) br i1 %t3, label %then1778, label %endif1780 then1778: %t4 = load ptr, ptr %a1 %t5 = call %S.ast.Node @finch.parser.node(ptr %t4, { ptr, i64, i64 } { ptr @.str.980, i64 3, i64 0 }) store %S.ast.Node %t5, ptr %a6 %t7 = load ptr, ptr %a1 %t8 = call %S.lexer.Token @finch.parser.next(ptr %t7) store %S.lexer.Token %t8, ptr %a9 call void @finch.drop.S_lexer_Token(ptr %a9) %t10 = getelementptr inbounds %S.ast.Node, ptr %a6, i32 0, i32 9 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 %t12 = load ptr, ptr %a1 %t13 = call %S.ast.Node @finch.parser.parsePostfix(ptr %t12) %t14 = load i64, ptr %t11 %t15 = add i64 %t14, 1 call void @finch_arr_reserve(ptr %t10, i64 %t15, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t16 = load ptr, ptr %t10 %t17 = getelementptr inbounds %S.ast.Node, ptr %t16, i64 %t14 store %S.ast.Node %t13, ptr %t17 store i64 %t15, ptr %t11 %t18 = load %S.ast.Node, ptr %a6 ret %S.ast.Node %t18 endif1780: %t19 = load ptr, ptr %a1 %t20 = call i1 @finch.parser.at(ptr %t19, { ptr, i64, i64 } { ptr @.str.981, i64 1, i64 0 }) br label %logic.from1781 logic.from1781: br i1 %t20, label %logic.end1783, label %logic.rhs1782 logic.rhs1782: %t21 = load ptr, ptr %a1 %t22 = call i1 @finch.parser.at(ptr %t21, { ptr, i64, i64 } { ptr @.str.982, i64 1, i64 0 }) br label %logic.rend1784 logic.rend1784: br label %logic.end1783 logic.end1783: %t23 = phi i1 [ true, %logic.from1781 ], [ %t22, %logic.rend1784 ] br label %logic.from1785 logic.from1785: br i1 %t23, label %logic.end1787, label %logic.rhs1786 logic.rhs1786: %t24 = load ptr, ptr %a1 %t25 = call i1 @finch.parser.at(ptr %t24, { ptr, i64, i64 } { ptr @.str.983, i64 1, i64 0 }) br label %logic.rend1788 logic.rend1788: br label %logic.end1787 logic.end1787: %t26 = phi i1 [ true, %logic.from1785 ], [ %t25, %logic.rend1788 ] br i1 %t26, label %then1789, label %endif1791 then1789: %t27 = load ptr, ptr %a1 %t28 = call %S.ast.Node @finch.parser.node(ptr %t27, { ptr, i64, i64 } { ptr @.str.984, i64 5, i64 0 }) store %S.ast.Node %t28, ptr %a29 %t30 = load ptr, ptr %a1 %t31 = call %S.lexer.Token @finch.parser.next(ptr %t30) %t32 = extractvalue %S.lexer.Token %t31, 0 store { ptr, i64, i64 } %t32, ptr %a33 call void @finch_str_copy(ptr %a34, ptr %a33) %t35 = load { ptr, i64, i64 }, ptr %a34 store %S.lexer.Token %t31, ptr %a36 call void @finch.drop.S_lexer_Token(ptr %a36) %t37 = getelementptr inbounds %S.ast.Node, ptr %a29, i32 0, i32 1 %t38 = load { ptr, i64, i64 }, ptr %t37 store { ptr, i64, i64 } %t35, ptr %t37 store { ptr, i64, i64 } %t38, ptr %a39 call void @finch_str_drop(ptr %a39) %t40 = getelementptr inbounds %S.ast.Node, ptr %a29, i32 0, i32 9 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 %t42 = load ptr, ptr %a1 %t43 = call %S.ast.Node @finch.parser.parseUnary(ptr %t42) %t44 = load i64, ptr %t41 %t45 = add i64 %t44, 1 call void @finch_arr_reserve(ptr %t40, i64 %t45, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t46 = load ptr, ptr %t40 %t47 = getelementptr inbounds %S.ast.Node, ptr %t46, i64 %t44 store %S.ast.Node %t43, ptr %t47 store i64 %t45, ptr %t41 %t48 = load %S.ast.Node, ptr %a29 ret %S.ast.Node %t48 endif1791: %t49 = load ptr, ptr %a1 %t50 = call %S.ast.Node @finch.parser.parsePostfix(ptr %t49) ret %S.ast.Node %t50 } define internal void @finch.parser.parseArgs(ptr %p0, ptr %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca ptr, align 16 %a5 = alloca %S.lexer.Token, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca %S.lexer.Token, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca %S.lexer.Token, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca %S.lexer.Token, align 16 store ptr %p0, ptr %a1 store ptr %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = call %S.lexer.Token @finch.parser.expect(ptr %t3, { ptr, i64, i64 } { ptr @.str.985, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.986, i64 3, i64 0 }) store %S.lexer.Token %t4, ptr %a5 call void @finch.drop.S_lexer_Token(ptr %a5) %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic1792, label %ok1793 panic1792: call void @finch_panic(ptr @.str.987, i64 686, ptr @.str.988) unreachable ok1793: %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 2 %t9 = load i64, ptr %t8 %t10 = add i64 %t9, 1 store i64 %t10, ptr %t8 %t11 = load ptr, ptr %a1 %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.989, i64 1, i64 0 }) %t13 = xor i1 %t12, true br i1 %t13, label %then1794, label %endif1796 then1794: br label %while.cond1797 while.cond1797: %t14 = load ptr, ptr %a1 %t15 = call i1 @finch.parser.at(ptr %t14, { ptr, i64, i64 } { ptr @.str.990, i64 1, i64 0 }) %t16 = xor i1 %t15, true br i1 %t16, label %while.body1798, label %while.end1799 while.body1798: store { ptr, i64, i64 } { ptr @.str.991, i64 0, i64 0 }, ptr %a17 %t18 = load ptr, ptr %a1 %t19 = call i1 @finch.parser.at(ptr %t18, { ptr, i64, i64 } { ptr @.str.992, i64 5, i64 0 }) br label %logic.from1800 logic.from1800: br i1 %t19, label %logic.rhs1801, label %logic.end1802 logic.rhs1801: %t20 = load ptr, ptr %a1 %t21 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t20, i64 1) store { ptr, i64, i64 } %t21, ptr %a22 store { ptr, i64, i64 } { ptr @.str.993, i64 1, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) %t25 = icmp ne i32 %t24, 0 store { ptr, i64, i64 } %t21, ptr %a26 call void @finch_str_drop(ptr %a26) br label %logic.rend1803 logic.rend1803: br label %logic.end1802 logic.end1802: %t27 = phi i1 [ false, %logic.from1800 ], [ %t25, %logic.rend1803 ] br i1 %t27, label %then1804, label %endif1806 then1804: %t28 = load ptr, ptr %a1 %t29 = call %S.lexer.Token @finch.parser.next(ptr %t28) %t30 = extractvalue %S.lexer.Token %t29, 1 store { ptr, i64, i64 } %t30, ptr %a31 call void @finch_str_copy(ptr %a32, ptr %a31) %t33 = load { ptr, i64, i64 }, ptr %a32 store %S.lexer.Token %t29, ptr %a34 call void @finch.drop.S_lexer_Token(ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a17 store { ptr, i64, i64 } %t33, ptr %a17 store { ptr, i64, i64 } %t35, ptr %a36 call void @finch_str_drop(ptr %a36) %t37 = load ptr, ptr %a1 %t38 = call %S.lexer.Token @finch.parser.next(ptr %t37) store %S.lexer.Token %t38, ptr %a39 call void @finch.drop.S_lexer_Token(ptr %a39) br label %endif1806 endif1806: %t40 = load ptr, ptr %a2 %t41 = icmp eq ptr %t40, null br i1 %t41, label %panic1807, label %ok1808 panic1807: call void @finch_panic(ptr @.str.994, i64 694, ptr @.str.995) unreachable ok1808: %t42 = getelementptr inbounds %S.ast.Node, ptr %t40, i32 0, i32 10 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 %t44 = load { ptr, i64, i64 }, ptr %a17 store { ptr, i64, i64 } %t44, ptr %a45 call void @finch_str_copy(ptr %a46, ptr %a45) %t47 = load { ptr, i64, i64 }, ptr %a46 %t48 = load i64, ptr %t43 %t49 = add i64 %t48, 1 call void @finch_arr_reserve(ptr %t42, i64 %t49, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t50 = load ptr, ptr %t42 %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t48 store { ptr, i64, i64 } %t47, ptr %t51 store i64 %t49, ptr %t43 %t52 = load ptr, ptr %a2 %t53 = icmp eq ptr %t52, null br i1 %t53, label %panic1809, label %ok1810 panic1809: call void @finch_panic(ptr @.str.996, i64 695, ptr @.str.997) unreachable ok1810: %t54 = getelementptr inbounds %S.ast.Node, ptr %t52, i32 0, i32 9 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 %t56 = load ptr, ptr %a1 %t57 = call %S.ast.Node @finch.parser.parseExpr(ptr %t56) %t58 = load i64, ptr %t55 %t59 = add i64 %t58, 1 call void @finch_arr_reserve(ptr %t54, i64 %t59, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t60 = load ptr, ptr %t54 %t61 = getelementptr inbounds %S.ast.Node, ptr %t60, i64 %t58 store %S.ast.Node %t57, ptr %t61 store i64 %t59, ptr %t55 %t62 = load ptr, ptr %a1 %t63 = call i1 @finch.parser.accept(ptr %t62, { ptr, i64, i64 } { ptr @.str.998, i64 1, i64 0 }) %t64 = xor i1 %t63, true br i1 %t64, label %then1811, label %endif1813 then1811: call void @finch_str_drop(ptr %a17) br label %while.end1799 endif1813: call void @finch_str_drop(ptr %a17) br label %while.cond1797 while.end1799: br label %endif1796 endif1796: %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null br i1 %t66, label %panic1814, label %ok1815 panic1814: call void @finch_panic(ptr @.str.999, i64 701, ptr @.str.1000) unreachable ok1815: %t67 = getelementptr inbounds %S.parser.Parser, ptr %t65, i32 0, i32 2 %t68 = load i64, ptr %t67 %t69 = sub i64 %t68, 1 store i64 %t69, ptr %t67 %t70 = load ptr, ptr %a1 %t71 = call %S.lexer.Token @finch.parser.expect(ptr %t70, { ptr, i64, i64 } { ptr @.str.1001, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1002, i64 3, i64 0 }) store %S.lexer.Token %t71, ptr %a72 call void @finch.drop.S_lexer_Token(ptr %a72) ret void } define internal %S.ast.Node @finch.parser.parsePostfix(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca %S.ast.Node, align 16 %a11 = alloca %S.ast.Node, align 16 %a14 = alloca %S.lexer.Token, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca %S.lexer.Token, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca %S.ast.Node, align 16 %a29 = alloca %S.ast.Node, align 16 %a40 = alloca %S.lexer.Token, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca %S.ast.Node, align 16 %a49 = alloca %S.ast.Node, align 16 %a52 = alloca %S.ast.Node, align 16 %a57 = alloca %S.ast.Node, align 16 %a60 = alloca %S.lexer.Token, align 16 %a69 = alloca %S.ast.Node, align 16 %a70 = alloca %S.ast.Node, align 16 %a91 = alloca %S.lexer.Token, align 16 %a93 = alloca %S.ast.Node, align 16 %a94 = alloca %S.ast.Node, align 16 %a97 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call %S.ast.Node @finch.parser.parsePrimary(ptr %t2) store %S.ast.Node %t3, ptr %a4 br label %while.cond1816 while.cond1816: %t5 = load ptr, ptr %a1 %t6 = call i1 @finch.parser.sameLine(ptr %t5) br i1 %t6, label %while.body1817, label %while.end1818 while.body1817: %t7 = load ptr, ptr %a1 %t8 = call i1 @finch.parser.at(ptr %t7, { ptr, i64, i64 } { ptr @.str.1003, i64 1, i64 0 }) br i1 %t8, label %then1819, label %else1820 then1819: %t9 = load ptr, ptr %a1 %t10 = call %S.ast.Node @finch.parser.node(ptr %t9, { ptr, i64, i64 } { ptr @.str.1004, i64 6, i64 0 }) store %S.ast.Node %t10, ptr %a11 %t12 = load ptr, ptr %a1 %t13 = call %S.lexer.Token @finch.parser.next(ptr %t12) store %S.lexer.Token %t13, ptr %a14 call void @finch.drop.S_lexer_Token(ptr %a14) %t15 = load ptr, ptr %a1 %t16 = call %S.lexer.Token @finch.parser.expect(ptr %t15, { ptr, i64, i64 } { ptr @.str.1005, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.1006, i64 16, i64 0 }) %t17 = extractvalue %S.lexer.Token %t16, 1 store { ptr, i64, i64 } %t17, ptr %a18 call void @finch_str_copy(ptr %a19, ptr %a18) %t20 = load { ptr, i64, i64 }, ptr %a19 store %S.lexer.Token %t16, ptr %a21 call void @finch.drop.S_lexer_Token(ptr %a21) %t22 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 1 %t23 = load { ptr, i64, i64 }, ptr %t22 store { ptr, i64, i64 } %t20, ptr %t22 store { ptr, i64, i64 } %t23, ptr %a24 call void @finch_str_drop(ptr %a24) %t25 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 9 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i32 0, i32 1 %t27 = load %S.ast.Node, ptr %a4 store %S.ast.Node %t27, ptr %a28 call void @finch.copy.S_ast_Node(ptr %a29, ptr %a28) %t30 = load %S.ast.Node, ptr %a29 %t31 = load i64, ptr %t26 %t32 = add i64 %t31, 1 call void @finch_arr_reserve(ptr %t25, i64 %t32, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t33 = load ptr, ptr %t25 %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 %t31 store %S.ast.Node %t30, ptr %t34 store i64 %t32, ptr %t26 %t35 = load ptr, ptr %a1 %t36 = call i1 @finch.parser.at(ptr %t35, { ptr, i64, i64 } { ptr @.str.1007, i64 1, i64 0 }) br label %logic.from1822 logic.from1822: br i1 %t36, label %logic.rhs1823, label %logic.end1824 logic.rhs1823: %t37 = load ptr, ptr %a1 %t38 = call %S.lexer.Token @finch.parser.cur(ptr %t37) %t39 = extractvalue %S.lexer.Token %t38, 4 store %S.lexer.Token %t38, ptr %a40 call void @finch.drop.S_lexer_Token(ptr %a40) %t41 = xor i1 %t39, true br label %logic.rend1825 logic.rend1825: br label %logic.end1824 logic.end1824: %t42 = phi i1 [ false, %logic.from1822 ], [ %t41, %logic.rend1825 ] br i1 %t42, label %then1826, label %endif1828 then1826: %t43 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 0 %t44 = load { ptr, i64, i64 }, ptr %t43 store { ptr, i64, i64 } { ptr @.str.1008, i64 6, i64 0 }, ptr %t43 store { ptr, i64, i64 } %t44, ptr %a45 call void @finch_str_drop(ptr %a45) %t46 = load ptr, ptr %a1 call void @finch.parser.parseArgs(ptr %t46, ptr %a11) br label %endif1828 endif1828: %t47 = load %S.ast.Node, ptr %a11 store %S.ast.Node %t47, ptr %a48 call void @finch.copy.S_ast_Node(ptr %a49, ptr %a48) %t50 = load %S.ast.Node, ptr %a49 %t51 = load %S.ast.Node, ptr %a4 store %S.ast.Node %t50, ptr %a4 store %S.ast.Node %t51, ptr %a52 call void @finch.drop.S_ast_Node(ptr %a52) call void @finch.drop.S_ast_Node(ptr %a11) br label %endif1821 else1820: %t53 = load ptr, ptr %a1 %t54 = call i1 @finch.parser.at(ptr %t53, { ptr, i64, i64 } { ptr @.str.1009, i64 1, i64 0 }) br i1 %t54, label %then1829, label %else1830 then1829: %t55 = load ptr, ptr %a1 %t56 = call %S.ast.Node @finch.parser.node(ptr %t55, { ptr, i64, i64 } { ptr @.str.1010, i64 5, i64 0 }) store %S.ast.Node %t56, ptr %a57 %t58 = load ptr, ptr %a1 %t59 = call %S.lexer.Token @finch.parser.next(ptr %t58) store %S.lexer.Token %t59, ptr %a60 call void @finch.drop.S_lexer_Token(ptr %a60) %t61 = load ptr, ptr %a1 %t62 = icmp eq ptr %t61, null br i1 %t62, label %panic1832, label %ok1833 panic1832: call void @finch_panic(ptr @.str.1011, i64 721, ptr @.str.1012) unreachable ok1833: %t63 = getelementptr inbounds %S.parser.Parser, ptr %t61, i32 0, i32 2 %t64 = load i64, ptr %t63 %t65 = add i64 %t64, 1 store i64 %t65, ptr %t63 %t66 = getelementptr inbounds %S.ast.Node, ptr %a57, i32 0, i32 9 %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t66, i32 0, i32 1 %t68 = load %S.ast.Node, ptr %a4 store %S.ast.Node %t68, ptr %a69 call void @finch.copy.S_ast_Node(ptr %a70, ptr %a69) %t71 = load %S.ast.Node, ptr %a70 %t72 = load i64, ptr %t67 %t73 = add i64 %t72, 1 call void @finch_arr_reserve(ptr %t66, i64 %t73, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t74 = load ptr, ptr %t66 %t75 = getelementptr inbounds %S.ast.Node, ptr %t74, i64 %t72 store %S.ast.Node %t71, ptr %t75 store i64 %t73, ptr %t67 %t76 = getelementptr inbounds %S.ast.Node, ptr %a57, i32 0, i32 9 %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 %t78 = load ptr, ptr %a1 %t79 = call %S.ast.Node @finch.parser.parseExpr(ptr %t78) %t80 = load i64, ptr %t77 %t81 = add i64 %t80, 1 call void @finch_arr_reserve(ptr %t76, i64 %t81, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t82 = load ptr, ptr %t76 %t83 = getelementptr inbounds %S.ast.Node, ptr %t82, i64 %t80 store %S.ast.Node %t79, ptr %t83 store i64 %t81, ptr %t77 %t84 = load ptr, ptr %a1 %t85 = icmp eq ptr %t84, null br i1 %t85, label %panic1834, label %ok1835 panic1834: call void @finch_panic(ptr @.str.1013, i64 724, ptr @.str.1014) unreachable ok1835: %t86 = getelementptr inbounds %S.parser.Parser, ptr %t84, i32 0, i32 2 %t87 = load i64, ptr %t86 %t88 = sub i64 %t87, 1 store i64 %t88, ptr %t86 %t89 = load ptr, ptr %a1 %t90 = call %S.lexer.Token @finch.parser.expect(ptr %t89, { ptr, i64, i64 } { ptr @.str.1015, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1016, i64 3, i64 0 }) store %S.lexer.Token %t90, ptr %a91 call void @finch.drop.S_lexer_Token(ptr %a91) %t92 = load %S.ast.Node, ptr %a57 store %S.ast.Node %t92, ptr %a93 call void @finch.copy.S_ast_Node(ptr %a94, ptr %a93) %t95 = load %S.ast.Node, ptr %a94 %t96 = load %S.ast.Node, ptr %a4 store %S.ast.Node %t95, ptr %a4 store %S.ast.Node %t96, ptr %a97 call void @finch.drop.S_ast_Node(ptr %a97) call void @finch.drop.S_ast_Node(ptr %a57) br label %endif1831 else1830: %t98 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t98 endif1831: br label %endif1821 endif1821: br label %while.cond1816 while.end1818: %t99 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t99 } define internal %S.ast.Node @finch.parser.parsePrimary(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca %S.lexer.Token, align 16 %a7 = alloca %S.ast.Node, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca %S.lexer.Token, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca %S.lexer.Token, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca %S.lexer.Token, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca %S.lexer.Token, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca %S.lexer.Token, align 16 %a122 = alloca %S.ast.Node, align 16 %a130 = alloca %S.lexer.Token, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca %S.lexer.Token, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca %S.lexer.Token, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca %S.lexer.Token, align 16 %a219 = alloca %S.lexer.Token, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca %S.lexer.Token, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca %S.lexer.Token, align 16 %a268 = alloca %S.ast.Type, align 16 %a283 = alloca %S.lexer.Token, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca %S.lexer.Token, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call %S.lexer.Token @finch.parser.cur(ptr %t2) store %S.lexer.Token %t3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call %S.ast.Node @finch.parser.node(ptr %t5, { ptr, i64, i64 } { ptr @.str.1017, i64 0, i64 0 }) store %S.ast.Node %t6, ptr %a7 %t8 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 0 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } %t9, ptr %a10 call void @finch_str_copy(ptr %a11, ptr %a10) %t12 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t12, ptr %a13 %t14 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.1018, i64 3, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 br label %logic.from1836 logic.from1836: br i1 %t18, label %logic.end1838, label %logic.rhs1837 logic.rhs1837: %t19 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1019, i64 5, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 br label %logic.rend1839 logic.rend1839: br label %logic.end1838 logic.end1838: %t24 = phi i1 [ true, %logic.from1836 ], [ %t23, %logic.rend1839 ] br label %logic.from1840 logic.from1840: br i1 %t24, label %logic.end1842, label %logic.rhs1841 logic.rhs1841: %t25 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.1020, i64 4, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 br label %logic.rend1843 logic.rend1843: br label %logic.end1842 logic.end1842: %t30 = phi i1 [ true, %logic.from1840 ], [ %t29, %logic.rend1843 ] br i1 %t30, label %then1844, label %endif1846 then1844: %t31 = load ptr, ptr %a1 %t32 = call %S.lexer.Token @finch.parser.next(ptr %t31) store %S.lexer.Token %t32, ptr %a33 call void @finch.drop.S_lexer_Token(ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a13 %t35 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 store { ptr, i64, i64 } %t34, ptr %a36 call void @finch_str_copy(ptr %a37, ptr %a36) %t38 = load { ptr, i64, i64 }, ptr %a37 %t39 = load { ptr, i64, i64 }, ptr %t35 store { ptr, i64, i64 } %t38, ptr %t35 store { ptr, i64, i64 } %t39, ptr %a40 call void @finch_str_drop(ptr %a40) %t41 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1 %t42 = load { ptr, i64, i64 }, ptr %t41 %t43 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4 store { ptr, i64, i64 } %t42, ptr %a44 call void @finch_str_copy(ptr %a45, ptr %a44) %t46 = load { ptr, i64, i64 }, ptr %a45 %t47 = load { ptr, i64, i64 }, ptr %t43 store { ptr, i64, i64 } %t46, ptr %t43 store { ptr, i64, i64 } %t47, ptr %a48 call void @finch_str_drop(ptr %a48) %t49 = load %S.ast.Node, ptr %a7 call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t49 endif1846: %t50 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.1021, i64 6, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 br i1 %t54, label %then1847, label %endif1849 then1847: %t55 = load ptr, ptr %a1 %t56 = call %S.lexer.Token @finch.parser.next(ptr %t55) store %S.lexer.Token %t56, ptr %a57 call void @finch.drop.S_lexer_Token(ptr %a57) %t58 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t59 = load { ptr, i64, i64 }, ptr %t58 store { ptr, i64, i64 } { ptr @.str.1022, i64 3, i64 0 }, ptr %t58 store { ptr, i64, i64 } %t59, ptr %a60 call void @finch_str_drop(ptr %a60) %t61 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1 %t62 = load { ptr, i64, i64 }, ptr %t61 %t63 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4 store { ptr, i64, i64 } %t62, ptr %a64 call void @finch_str_copy(ptr %a65, ptr %a64) %t66 = load { ptr, i64, i64 }, ptr %a65 %t67 = load { ptr, i64, i64 }, ptr %t63 store { ptr, i64, i64 } %t66, ptr %t63 store { ptr, i64, i64 } %t67, ptr %a68 call void @finch_str_drop(ptr %a68) %t69 = load %S.ast.Node, ptr %a7 call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t69 endif1849: %t70 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t70, ptr %a71 store { ptr, i64, i64 } { ptr @.str.1023, i64 4, i64 0 }, ptr %a72 %t73 = call i32 @finch_str_eq(ptr %a71, ptr %a72) %t74 = icmp ne i32 %t73, 0 br label %logic.from1850 logic.from1850: br i1 %t74, label %logic.end1852, label %logic.rhs1851 logic.rhs1851: %t75 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t75, ptr %a76 store { ptr, i64, i64 } { ptr @.str.1024, i64 5, i64 0 }, ptr %a77 %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) %t79 = icmp ne i32 %t78, 0 br label %logic.rend1853 logic.rend1853: br label %logic.end1852 logic.end1852: %t80 = phi i1 [ true, %logic.from1850 ], [ %t79, %logic.rend1853 ] br i1 %t80, label %then1854, label %endif1856 then1854: %t81 = load ptr, ptr %a1 %t82 = call %S.lexer.Token @finch.parser.next(ptr %t81) store %S.lexer.Token %t82, ptr %a83 call void @finch.drop.S_lexer_Token(ptr %a83) %t84 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t85 = load { ptr, i64, i64 }, ptr %t84 store { ptr, i64, i64 } { ptr @.str.1025, i64 4, i64 0 }, ptr %t84 store { ptr, i64, i64 } %t85, ptr %a86 call void @finch_str_drop(ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a13 %t88 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4 store { ptr, i64, i64 } %t87, ptr %a89 call void @finch_str_copy(ptr %a90, ptr %a89) %t91 = load { ptr, i64, i64 }, ptr %a90 %t92 = load { ptr, i64, i64 }, ptr %t88 store { ptr, i64, i64 } %t91, ptr %t88 store { ptr, i64, i64 } %t92, ptr %a93 call void @finch_str_drop(ptr %a93) %t94 = load %S.ast.Node, ptr %a7 call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t94 endif1856: %t95 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t95, ptr %a96 store { ptr, i64, i64 } { ptr @.str.1026, i64 4, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) %t99 = icmp ne i32 %t98, 0 br i1 %t99, label %then1857, label %endif1859 then1857: %t100 = load ptr, ptr %a1 %t101 = call %S.lexer.Token @finch.parser.next(ptr %t100) store %S.lexer.Token %t101, ptr %a102 call void @finch.drop.S_lexer_Token(ptr %a102) %t103 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t104 = load { ptr, i64, i64 }, ptr %t103 store { ptr, i64, i64 } { ptr @.str.1027, i64 4, i64 0 }, ptr %t103 store { ptr, i64, i64 } %t104, ptr %a105 call void @finch_str_drop(ptr %a105) %t106 = load %S.ast.Node, ptr %a7 call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t106 endif1859: %t107 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t107, ptr %a108 store { ptr, i64, i64 } { ptr @.str.1028, i64 1, i64 0 }, ptr %a109 %t110 = call i32 @finch_str_eq(ptr %a108, ptr %a109) %t111 = icmp ne i32 %t110, 0 br i1 %t111, label %then1860, label %endif1862 then1860: %t112 = load ptr, ptr %a1 %t113 = call %S.lexer.Token @finch.parser.next(ptr %t112) store %S.lexer.Token %t113, ptr %a114 call void @finch.drop.S_lexer_Token(ptr %a114) %t115 = load ptr, ptr %a1 %t116 = icmp eq ptr %t115, null br i1 %t116, label %panic1863, label %ok1864 panic1863: call void @finch_panic(ptr @.str.1029, i64 763, ptr @.str.1030) unreachable ok1864: %t117 = getelementptr inbounds %S.parser.Parser, ptr %t115, i32 0, i32 2 %t118 = load i64, ptr %t117 %t119 = add i64 %t118, 1 store i64 %t119, ptr %t117 %t120 = load ptr, ptr %a1 %t121 = call %S.ast.Node @finch.parser.parseExpr(ptr %t120) store %S.ast.Node %t121, ptr %a122 %t123 = load ptr, ptr %a1 %t124 = icmp eq ptr %t123, null br i1 %t124, label %panic1865, label %ok1866 panic1865: call void @finch_panic(ptr @.str.1031, i64 765, ptr @.str.1032) unreachable ok1866: %t125 = getelementptr inbounds %S.parser.Parser, ptr %t123, i32 0, i32 2 %t126 = load i64, ptr %t125 %t127 = sub i64 %t126, 1 store i64 %t127, ptr %t125 %t128 = load ptr, ptr %a1 %t129 = call %S.lexer.Token @finch.parser.expect(ptr %t128, { ptr, i64, i64 } { ptr @.str.1033, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1034, i64 3, i64 0 }) store %S.lexer.Token %t129, ptr %a130 call void @finch.drop.S_lexer_Token(ptr %a130) %t131 = load %S.ast.Node, ptr %a122 call void @finch_str_drop(ptr %a13) call void @finch.drop.S_ast_Node(ptr %a7) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t131 endif1862: %t132 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t132, ptr %a133 store { ptr, i64, i64 } { ptr @.str.1035, i64 5, i64 0 }, ptr %a134 %t135 = call i32 @finch_str_eq(ptr %a133, ptr %a134) %t136 = icmp ne i32 %t135, 0 br i1 %t136, label %then1867, label %endif1869 then1867: %t137 = load ptr, ptr %a1 %t138 = call %S.ast.Node @finch.parser.parseMatch(ptr %t137, i1 true) call void @finch_str_drop(ptr %a13) call void @finch.drop.S_ast_Node(ptr %a7) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t138 endif1869: %t139 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t139, ptr %a140 store { ptr, i64, i64 } { ptr @.str.1036, i64 1, i64 0 }, ptr %a141 %t142 = call i32 @finch_str_eq(ptr %a140, ptr %a141) %t143 = icmp ne i32 %t142, 0 br i1 %t143, label %then1870, label %endif1872 then1870: %t144 = load ptr, ptr %a1 %t145 = call %S.lexer.Token @finch.parser.next(ptr %t144) store %S.lexer.Token %t145, ptr %a146 call void @finch.drop.S_lexer_Token(ptr %a146) %t147 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t148 = load { ptr, i64, i64 }, ptr %t147 store { ptr, i64, i64 } { ptr @.str.1037, i64 5, i64 0 }, ptr %t147 store { ptr, i64, i64 } %t148, ptr %a149 call void @finch_str_drop(ptr %a149) %t150 = load ptr, ptr %a1 %t151 = icmp eq ptr %t150, null br i1 %t151, label %panic1873, label %ok1874 panic1873: call void @finch_panic(ptr @.str.1038, i64 775, ptr @.str.1039) unreachable ok1874: %t152 = getelementptr inbounds %S.parser.Parser, ptr %t150, i32 0, i32 2 %t153 = load i64, ptr %t152 %t154 = add i64 %t153, 1 store i64 %t154, ptr %t152 %t155 = load ptr, ptr %a1 %t156 = call i1 @finch.parser.at(ptr %t155, { ptr, i64, i64 } { ptr @.str.1040, i64 1, i64 0 }) br label %logic.from1875 logic.from1875: br i1 %t156, label %logic.rhs1876, label %logic.end1877 logic.rhs1876: %t157 = load ptr, ptr %a1 %t158 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t157, i64 1) store { ptr, i64, i64 } %t158, ptr %a159 store { ptr, i64, i64 } { ptr @.str.1041, i64 1, i64 0 }, ptr %a160 %t161 = call i32 @finch_str_eq(ptr %a159, ptr %a160) %t162 = icmp ne i32 %t161, 0 store { ptr, i64, i64 } %t158, ptr %a163 call void @finch_str_drop(ptr %a163) br label %logic.rend1878 logic.rend1878: br label %logic.end1877 logic.end1877: %t164 = phi i1 [ false, %logic.from1875 ], [ %t162, %logic.rend1878 ] br i1 %t164, label %then1879, label %endif1881 then1879: %t165 = load ptr, ptr %a1 %t166 = call %S.lexer.Token @finch.parser.next(ptr %t165) store %S.lexer.Token %t166, ptr %a167 call void @finch.drop.S_lexer_Token(ptr %a167) %t168 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t169 = load { ptr, i64, i64 }, ptr %t168 store { ptr, i64, i64 } { ptr @.str.1042, i64 3, i64 0 }, ptr %t168 store { ptr, i64, i64 } %t169, ptr %a170 call void @finch_str_drop(ptr %a170) br label %endif1881 endif1881: br label %while.cond1882 while.cond1882: %t171 = load ptr, ptr %a1 %t172 = call i1 @finch.parser.at(ptr %t171, { ptr, i64, i64 } { ptr @.str.1043, i64 1, i64 0 }) %t173 = xor i1 %t172, true br i1 %t173, label %while.body1883, label %while.end1884 while.body1883: %t174 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9 %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %t174, i32 0, i32 1 %t176 = load ptr, ptr %a1 %t177 = call %S.ast.Node @finch.parser.parseExpr(ptr %t176) %t178 = load i64, ptr %t175 %t179 = add i64 %t178, 1 call void @finch_arr_reserve(ptr %t174, i64 %t179, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t180 = load ptr, ptr %t174 %t181 = getelementptr inbounds %S.ast.Node, ptr %t180, i64 %t178 store %S.ast.Node %t177, ptr %t181 store i64 %t179, ptr %t175 %t182 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9 %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i32 0, i32 1 %t184 = load i64, ptr %t183 %t185 = icmp eq i64 %t184, 1 br label %logic.from1885 logic.from1885: br i1 %t185, label %logic.rhs1886, label %logic.end1887 logic.rhs1886: %t186 = load ptr, ptr %a1 %t187 = call i1 @finch.parser.at(ptr %t186, { ptr, i64, i64 } { ptr @.str.1044, i64 1, i64 0 }) br label %logic.rend1888 logic.rend1888: br label %logic.end1887 logic.end1887: %t188 = phi i1 [ false, %logic.from1885 ], [ %t187, %logic.rend1888 ] br i1 %t188, label %then1889, label %endif1891 then1889: %t189 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t190 = load { ptr, i64, i64 }, ptr %t189 store { ptr, i64, i64 } { ptr @.str.1045, i64 3, i64 0 }, ptr %t189 store { ptr, i64, i64 } %t190, ptr %a191 call void @finch_str_drop(ptr %a191) br label %endif1891 endif1891: %t192 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t193 = load { ptr, i64, i64 }, ptr %t192 store { ptr, i64, i64 } %t193, ptr %a194 store { ptr, i64, i64 } { ptr @.str.1046, i64 3, i64 0 }, ptr %a195 %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) %t197 = icmp ne i32 %t196, 0 br i1 %t197, label %then1892, label %endif1894 then1892: %t198 = load ptr, ptr %a1 %t199 = call %S.lexer.Token @finch.parser.expect(ptr %t198, { ptr, i64, i64 } { ptr @.str.1047, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1048, i64 41, i64 0 }) store %S.lexer.Token %t199, ptr %a200 call void @finch.drop.S_lexer_Token(ptr %a200) %t201 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9 %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %t201, i32 0, i32 1 %t203 = load ptr, ptr %a1 %t204 = call %S.ast.Node @finch.parser.parseExpr(ptr %t203) %t205 = load i64, ptr %t202 %t206 = add i64 %t205, 1 call void @finch_arr_reserve(ptr %t201, i64 %t206, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t207 = load ptr, ptr %t201 %t208 = getelementptr inbounds %S.ast.Node, ptr %t207, i64 %t205 store %S.ast.Node %t204, ptr %t208 store i64 %t206, ptr %t202 br label %endif1894 endif1894: %t209 = load ptr, ptr %a1 %t210 = call i1 @finch.parser.accept(ptr %t209, { ptr, i64, i64 } { ptr @.str.1049, i64 1, i64 0 }) %t211 = xor i1 %t210, true br i1 %t211, label %then1895, label %endif1897 then1895: br label %while.end1884 endif1897: br label %while.cond1882 while.end1884: %t212 = load ptr, ptr %a1 %t213 = icmp eq ptr %t212, null br i1 %t213, label %panic1898, label %ok1899 panic1898: call void @finch_panic(ptr @.str.1050, i64 793, ptr @.str.1051) unreachable ok1899: %t214 = getelementptr inbounds %S.parser.Parser, ptr %t212, i32 0, i32 2 %t215 = load i64, ptr %t214 %t216 = sub i64 %t215, 1 store i64 %t216, ptr %t214 %t217 = load ptr, ptr %a1 %t218 = call %S.lexer.Token @finch.parser.expect(ptr %t217, { ptr, i64, i64 } { ptr @.str.1052, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1053, i64 3, i64 0 }) store %S.lexer.Token %t218, ptr %a219 call void @finch.drop.S_lexer_Token(ptr %a219) %t220 = load %S.ast.Node, ptr %a7 call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t220 endif1872: %t221 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t221, ptr %a222 store { ptr, i64, i64 } { ptr @.str.1054, i64 5, i64 0 }, ptr %a223 %t224 = call i32 @finch_str_eq(ptr %a222, ptr %a223) %t225 = icmp ne i32 %t224, 0 br i1 %t225, label %then1900, label %endif1902 then1900: %t226 = load ptr, ptr %a1 %t227 = call %S.lexer.Token @finch.parser.next(ptr %t226) store %S.lexer.Token %t227, ptr %a228 call void @finch.drop.S_lexer_Token(ptr %a228) %t229 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1 %t230 = load { ptr, i64, i64 }, ptr %t229 %t231 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 1 store { ptr, i64, i64 } %t230, ptr %a232 call void @finch_str_copy(ptr %a233, ptr %a232) %t234 = load { ptr, i64, i64 }, ptr %a233 %t235 = load { ptr, i64, i64 }, ptr %t231 store { ptr, i64, i64 } %t234, ptr %t231 store { ptr, i64, i64 } %t235, ptr %a236 call void @finch_str_drop(ptr %a236) %t237 = load ptr, ptr %a1 %t238 = call i1 @finch.parser.at(ptr %t237, { ptr, i64, i64 } { ptr @.str.1055, i64 1, i64 0 }) br label %logic.from1903 logic.from1903: br i1 %t238, label %logic.rhs1904, label %logic.end1905 logic.rhs1904: %t239 = load ptr, ptr %a1 %t240 = icmp eq ptr %t239, null br i1 %t240, label %panic1906, label %ok1907 panic1906: call void @finch_panic(ptr @.str.1056, i64 800, ptr @.str.1057) unreachable ok1907: %t241 = getelementptr inbounds %S.parser.Parser, ptr %t239, i32 0, i32 0 %t242 = load ptr, ptr %a1 %t243 = icmp eq ptr %t242, null br i1 %t243, label %panic1908, label %ok1909 panic1908: call void @finch_panic(ptr @.str.1058, i64 800, ptr @.str.1059) unreachable ok1909: %t244 = getelementptr inbounds %S.parser.Parser, ptr %t242, i32 0, i32 1 %t245 = load i64, ptr %t244 %t246 = sub i64 %t245, 1 %t247 = load { ptr, i64, i64 }, ptr %t241 %t248 = extractvalue { ptr, i64, i64 } %t247, 1 %t249 = icmp uge i64 %t246, %t248 br i1 %t249, label %range1910, label %inrange1911 range1910: call void @finch_panic_index(ptr @.str.1060, i64 800, i64 %t246, i64 %t248) unreachable inrange1911: %t250 = extractvalue { ptr, i64, i64 } %t247, 0 %t251 = getelementptr inbounds %S.lexer.Token, ptr %t250, i64 %t246 %t252 = getelementptr inbounds %S.lexer.Token, ptr %t251, i32 0, i32 0 %t253 = load { ptr, i64, i64 }, ptr %t252 store { ptr, i64, i64 } %t253, ptr %a254 store { ptr, i64, i64 } { ptr @.str.1061, i64 5, i64 0 }, ptr %a255 %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) %t257 = icmp ne i32 %t256, 0 br label %logic.rend1912 logic.rend1912: br label %logic.end1905 logic.end1905: %t258 = phi i1 [ false, %logic.from1903 ], [ %t257, %logic.rend1912 ] br label %logic.from1913 logic.from1913: br i1 %t258, label %logic.rhs1914, label %logic.end1915 logic.rhs1914: %t259 = load ptr, ptr %a1 %t260 = call i1 @finch.parser.genericCallAheadFrom(ptr %t259) br label %logic.rend1916 logic.rend1916: br label %logic.end1915 logic.end1915: %t261 = phi i1 [ false, %logic.from1913 ], [ %t260, %logic.rend1916 ] br i1 %t261, label %then1917, label %endif1919 then1917: %t262 = load ptr, ptr %a1 %t263 = call %S.lexer.Token @finch.parser.next(ptr %t262) store %S.lexer.Token %t263, ptr %a264 call void @finch.drop.S_lexer_Token(ptr %a264) %t265 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1062, i64 5, i64 0 }, 0 %t266 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 5 %t267 = load %S.ast.Type, ptr %t266 store %S.ast.Type %t265, ptr %t266 store %S.ast.Type %t267, ptr %a268 call void @finch.drop.S_ast_Type(ptr %a268) br label %while.cond1920 while.cond1920: br label %while.body1921 while.body1921: %t269 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 5 %t270 = getelementptr inbounds %S.ast.Type, ptr %t269, i32 0, i32 1 %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t270, i32 0, i32 1 %t272 = load ptr, ptr %a1 %t273 = call %S.ast.Type @finch.parser.parseType(ptr %t272) %t274 = load i64, ptr %t271 %t275 = add i64 %t274, 1 call void @finch_arr_reserve(ptr %t270, i64 %t275, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t276 = load ptr, ptr %t270 %t277 = getelementptr inbounds %S.ast.Type, ptr %t276, i64 %t274 store %S.ast.Type %t273, ptr %t277 store i64 %t275, ptr %t271 %t278 = load ptr, ptr %a1 %t279 = call i1 @finch.parser.accept(ptr %t278, { ptr, i64, i64 } { ptr @.str.1063, i64 1, i64 0 }) %t280 = xor i1 %t279, true br i1 %t280, label %then1923, label %endif1925 then1923: br label %while.end1922 endif1925: br label %while.cond1920 while.end1922: %t281 = load ptr, ptr %a1 %t282 = call %S.lexer.Token @finch.parser.expect(ptr %t281, { ptr, i64, i64 } { ptr @.str.1064, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1065, i64 28, i64 0 }) store %S.lexer.Token %t282, ptr %a283 call void @finch.drop.S_lexer_Token(ptr %a283) %t284 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t285 = load { ptr, i64, i64 }, ptr %t284 store { ptr, i64, i64 } { ptr @.str.1066, i64 4, i64 0 }, ptr %t284 store { ptr, i64, i64 } %t285, ptr %a286 call void @finch_str_drop(ptr %a286) %t287 = load ptr, ptr %a1 call void @finch.parser.parseArgs(ptr %t287, ptr %a7) %t288 = load %S.ast.Node, ptr %a7 call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t288 endif1919: %t289 = load ptr, ptr %a1 %t290 = call i1 @finch.parser.at(ptr %t289, { ptr, i64, i64 } { ptr @.str.1067, i64 1, i64 0 }) br label %logic.from1926 logic.from1926: br i1 %t290, label %logic.rhs1927, label %logic.end1928 logic.rhs1927: %t291 = load ptr, ptr %a1 %t292 = call %S.lexer.Token @finch.parser.cur(ptr %t291) %t293 = extractvalue %S.lexer.Token %t292, 4 store %S.lexer.Token %t292, ptr %a294 call void @finch.drop.S_lexer_Token(ptr %a294) %t295 = xor i1 %t293, true br label %logic.rend1929 logic.rend1929: br label %logic.end1928 logic.end1928: %t296 = phi i1 [ false, %logic.from1926 ], [ %t295, %logic.rend1929 ] br i1 %t296, label %then1930, label %endif1932 then1930: %t297 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t298 = load { ptr, i64, i64 }, ptr %t297 store { ptr, i64, i64 } { ptr @.str.1068, i64 4, i64 0 }, ptr %t297 store { ptr, i64, i64 } %t298, ptr %a299 call void @finch_str_drop(ptr %a299) %t300 = load ptr, ptr %a1 call void @finch.parser.parseArgs(ptr %t300, ptr %a7) %t301 = load %S.ast.Node, ptr %a7 call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t301 endif1932: %t302 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t303 = load { ptr, i64, i64 }, ptr %t302 store { ptr, i64, i64 } { ptr @.str.1069, i64 3, i64 0 }, ptr %t302 store { ptr, i64, i64 } %t303, ptr %a304 call void @finch_str_drop(ptr %a304) %t305 = load %S.ast.Node, ptr %a7 call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t305 endif1902: %t306 = load ptr, ptr %a1 %t307 = load %S.lexer.Token, ptr %a4 %t308 = load %S.lexer.Token, ptr %a4 %t309 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t308) store { ptr, i64, i64 } { ptr @.str.1070, i64 11, i64 0 }, ptr %a311 store { ptr, i64, i64 } %t309, ptr %a312 call void @finch_str_concat(ptr %a310, ptr %a311, ptr %a312) store { ptr, i64, i64 } %t309, ptr %a313 call void @finch_str_drop(ptr %a313) %t314 = load { ptr, i64, i64 }, ptr %a310 store { ptr, i64, i64 } %t314, ptr %a316 store { ptr, i64, i64 } { ptr @.str.1071, i64 19, i64 0 }, ptr %a317 call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317) store { ptr, i64, i64 } %t314, ptr %a318 call void @finch_str_drop(ptr %a318) %t319 = load { ptr, i64, i64 }, ptr %a315 call void @finch.parser.fail(ptr %t306, %S.lexer.Token %t307, { ptr, i64, i64 } %t319) store { ptr, i64, i64 } %t319, ptr %a320 call void @finch_str_drop(ptr %a320) %t321 = load %S.ast.Node, ptr %a7 call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t321 } define internal void @finch.copy.arr_S_lexer_Token(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lexer.Token, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond1933 n.cond1933: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body1934, label %n.end1935 n.body1934: %t8 = getelementptr inbounds %S.lexer.Token, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lexer.Token, ptr %t2, i64 %t6 call void @finch.copy.S_lexer_Token(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond1933 n.end1935: ret void } define internal void @finch.drop.S_parser_Parser(ptr %a) { entry: %t1 = getelementptr inbounds %S.parser.Parser, ptr %a, i32 0, i32 0 call void @finch.drop.arr_S_lexer_Token(ptr %t1) %t2 = getelementptr inbounds %S.parser.Parser, ptr %a, i32 0, i32 4 call void @finch_str_drop(ptr %t2) ret void } define internal %S.ast.Program @finch.parser.parse({ ptr, i64, i64 } %p0, i64 %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca i64, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca %S.parser.Parser, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store i64 %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch.copy.arr_S_lexer_Token(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 %t8 = insertvalue %S.parser.Parser zeroinitializer, { ptr, i64, i64 } %t7, 0 %t9 = insertvalue %S.parser.Parser %t8, i64 0, 1 %t10 = insertvalue %S.parser.Parser %t9, i64 0, 2 %t11 = load i64, ptr %a2 %t12 = insertvalue %S.parser.Parser %t10, i64 %t11, 3 %t13 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t13, ptr %a14 call void @finch_str_copy(ptr %a15, ptr %a14) %t16 = load { ptr, i64, i64 }, ptr %a15 %t17 = insertvalue %S.parser.Parser %t12, { ptr, i64, i64 } %t16, 4 store %S.parser.Parser %t17, ptr %a18 %t19 = call %S.ast.Program @finch.parser.parseProgram(ptr %a18) call void @finch.drop.S_parser_Parser(ptr %a18) ret %S.ast.Program %t19 } define internal { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 store { ptr, i64, i64 } { ptr @.str.1073, i64 1, i64 0 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.1074, i64 2, i64 0 }, ptr %a6 call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.1076, i64 1, i64 0 }, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1077, i64 2, i64 0 }, ptr %a11 call void @finch_str_replace(ptr %a9, ptr %a8, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t7, ptr %a13 call void @finch_str_drop(ptr %a13) store { ptr, i64, i64 } %t12, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1079, i64 1, i64 0 }, ptr %a16 store { ptr, i64, i64 } { ptr @.str.1080, i64 1, i64 0 }, ptr %a17 call void @finch_str_replace(ptr %a15, ptr %a14, ptr %a16, ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t12, ptr %a19 call void @finch_str_drop(ptr %a19) ret { ptr, i64, i64 } %t18 } define internal void @finch.gen.noteRef(ptr %p0, %S.ast.Node %p1, i64 %p2, i64 %p3, { ptr, i64, i64 } %p4, { ptr, i64, i64 } %p5, i64 %p6, i64 %p7) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i64, align 16 %a4 = alloca i64, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca i64, align 16 %a8 = alloca i64, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 store { ptr, i64, i64 } %p5, ptr %a6 store i64 %p6, ptr %a7 store i64 %p7, ptr %a8 %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null br i1 %t10, label %panic1936, label %ok1937 panic1936: call void @finch_panic(ptr @.str.1081, i64 232, ptr @.str.1082) unreachable ok1937: %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 28 %t12 = load i1, ptr %t11 %t13 = xor i1 %t12, true br i1 %t13, label %then1938, label %endif1940 then1938: ret void endif1940: %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null br i1 %t15, label %panic1941, label %ok1942 panic1941: call void @finch_panic(ptr @.str.1083, i64 235, ptr @.str.1084) unreachable ok1942: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 29 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic1943, label %ok1944 panic1943: call void @finch_panic(ptr @.str.1086, i64 235, ptr @.str.1087) unreachable ok1944: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t22 = load i64, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %t20 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 %t22, %t24 br i1 %t25, label %range1945, label %inrange1946 range1945: call void @finch_panic_index(ptr @.str.1088, i64 235, i64 %t22, i64 %t24) unreachable inrange1946: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t22 %t28 = load { ptr, i64, i64 }, ptr %t27 store { ptr, i64, i64 } { ptr @.str.1085, i64 3, i64 0 }, ptr %a30 store { ptr, i64, i64 } %t28, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) %t32 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t32, ptr %a34 store { ptr, i64, i64 } { ptr @.str.1089, i64 1, i64 0 }, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) store { ptr, i64, i64 } %t32, ptr %a36 call void @finch_str_drop(ptr %a36) %t37 = load { ptr, i64, i64 }, ptr %a33 %t38 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t39 = load i64, ptr %t38 call void @finch_str_from_int(ptr %a40, i64 %t39) %t41 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t37, ptr %a43 store { ptr, i64, i64 } %t41, ptr %a44 call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) store { ptr, i64, i64 } %t37, ptr %a45 call void @finch_str_drop(ptr %a45) store { ptr, i64, i64 } %t41, ptr %a46 call void @finch_str_drop(ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a42 store { ptr, i64, i64 } %t47, ptr %a49 store { ptr, i64, i64 } { ptr @.str.1090, i64 1, i64 0 }, ptr %a50 call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) store { ptr, i64, i64 } %t47, ptr %a51 call void @finch_str_drop(ptr %a51) %t52 = load { ptr, i64, i64 }, ptr %a48 %t53 = load i64, ptr %a3 call void @finch_str_from_int(ptr %a54, i64 %t53) %t55 = load { ptr, i64, i64 }, ptr %a54 store { ptr, i64, i64 } %t52, ptr %a57 store { ptr, i64, i64 } %t55, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) store { ptr, i64, i64 } %t52, ptr %a59 call void @finch_str_drop(ptr %a59) store { ptr, i64, i64 } %t55, ptr %a60 call void @finch_str_drop(ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a56 store { ptr, i64, i64 } %t61, ptr %a63 store { ptr, i64, i64 } { ptr @.str.1091, i64 1, i64 0 }, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) store { ptr, i64, i64 } %t61, ptr %a65 call void @finch_str_drop(ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a62 %t67 = load i64, ptr %a4 call void @finch_str_from_int(ptr %a68, i64 %t67) %t69 = load { ptr, i64, i64 }, ptr %a68 store { ptr, i64, i64 } %t66, ptr %a71 store { ptr, i64, i64 } %t69, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) store { ptr, i64, i64 } %t66, ptr %a73 call void @finch_str_drop(ptr %a73) store { ptr, i64, i64 } %t69, ptr %a74 call void @finch_str_drop(ptr %a74) %t75 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } %t75, ptr %a77 store { ptr, i64, i64 } { ptr @.str.1092, i64 1, i64 0 }, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) store { ptr, i64, i64 } %t75, ptr %a79 call void @finch_str_drop(ptr %a79) %t80 = load { ptr, i64, i64 }, ptr %a76 %t81 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t80, ptr %a83 store { ptr, i64, i64 } %t81, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) store { ptr, i64, i64 } %t80, ptr %a85 call void @finch_str_drop(ptr %a85) %t86 = load { ptr, i64, i64 }, ptr %a82 store { ptr, i64, i64 } %t86, ptr %a88 store { ptr, i64, i64 } { ptr @.str.1093, i64 1, i64 0 }, ptr %a89 call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) store { ptr, i64, i64 } %t86, ptr %a90 call void @finch_str_drop(ptr %a90) %t91 = load { ptr, i64, i64 }, ptr %a87 %t92 = load i64, ptr %a7 call void @finch_str_from_int(ptr %a93, i64 %t92) %t94 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t91, ptr %a96 store { ptr, i64, i64 } %t94, ptr %a97 call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) store { ptr, i64, i64 } %t91, ptr %a98 call void @finch_str_drop(ptr %a98) store { ptr, i64, i64 } %t94, ptr %a99 call void @finch_str_drop(ptr %a99) %t100 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t100, ptr %a102 store { ptr, i64, i64 } { ptr @.str.1094, i64 1, i64 0 }, ptr %a103 call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) store { ptr, i64, i64 } %t100, ptr %a104 call void @finch_str_drop(ptr %a104) %t105 = load { ptr, i64, i64 }, ptr %a101 %t106 = load i64, ptr %a8 call void @finch_str_from_int(ptr %a107, i64 %t106) %t108 = load { ptr, i64, i64 }, ptr %a107 store { ptr, i64, i64 } %t105, ptr %a110 store { ptr, i64, i64 } %t108, ptr %a111 call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) store { ptr, i64, i64 } %t105, ptr %a112 call void @finch_str_drop(ptr %a112) store { ptr, i64, i64 } %t108, ptr %a113 call void @finch_str_drop(ptr %a113) %t114 = load { ptr, i64, i64 }, ptr %a109 store { ptr, i64, i64 } %t114, ptr %a116 store { ptr, i64, i64 } { ptr @.str.1095, i64 1, i64 0 }, ptr %a117 call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) store { ptr, i64, i64 } %t114, ptr %a118 call void @finch_str_drop(ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a115 %t120 = load { ptr, i64, i64 }, ptr %a5 %t121 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t120) store { ptr, i64, i64 } %t119, ptr %a123 store { ptr, i64, i64 } %t121, ptr %a124 call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) store { ptr, i64, i64 } %t119, ptr %a125 call void @finch_str_drop(ptr %a125) store { ptr, i64, i64 } %t121, ptr %a126 call void @finch_str_drop(ptr %a126) %t127 = load { ptr, i64, i64 }, ptr %a122 %t128 = load i64, ptr %t17 %t129 = add i64 %t128, 1 call void @finch_arr_reserve(ptr %t16, i64 %t129, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t130 = load ptr, ptr %t16 %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t130, i64 %t128 store { ptr, i64, i64 } %t127, ptr %t131 store i64 %t129, ptr %t17 ret void } define internal { ptr, i64, i64 } @finch.gen.sigText(%S.gen.FnSig %p0) { entry: %a1 = alloca %S.gen.FnSig, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca i64, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 store %S.gen.FnSig %p0, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a2 %t3 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 13 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i32 0, i32 1 %t5 = load i64, ptr %t4 store i64 0, ptr %a6 br label %for.cond1947 for.cond1947: %t7 = load i64, ptr %a6 %t8 = icmp slt i64 %t7, %t5 br i1 %t8, label %for.body1948, label %for.end1950 for.body1948: %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t10 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 13 %t11 = load i64, ptr %a6 %t12 = load { ptr, i64, i64 }, ptr %t10 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 %t11, %t13 br i1 %t14, label %range1951, label %inrange1952 range1951: call void @finch_panic_index(ptr @.str.1096, i64 242, i64 %t11, i64 %t13) unreachable inrange1952: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t11 %t17 = load %S.ast.Type, ptr %t16 %t18 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t17) store { ptr, i64, i64 } %t18, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1097, i64 1, i64 0 }, ptr %a21 call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) store { ptr, i64, i64 } %t18, ptr %a22 call void @finch_str_drop(ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a19 %t24 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 14 %t25 = load i64, ptr %a6 %t26 = load { ptr, i64, i64 }, ptr %t24 %t27 = extractvalue { ptr, i64, i64 } %t26, 1 %t28 = icmp uge i64 %t25, %t27 br i1 %t28, label %range1953, label %inrange1954 range1953: call void @finch_panic_index(ptr @.str.1098, i64 242, i64 %t25, i64 %t27) unreachable inrange1954: %t29 = extractvalue { ptr, i64, i64 } %t26, 0 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 %t25 %t31 = load { ptr, i64, i64 }, ptr %t30 store { ptr, i64, i64 } %t23, ptr %a33 store { ptr, i64, i64 } %t31, ptr %a34 call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) store { ptr, i64, i64 } %t23, ptr %a35 call void @finch_str_drop(ptr %a35) %t36 = load { ptr, i64, i64 }, ptr %a32 %t37 = load i64, ptr %t9 %t38 = add i64 %t37, 1 call void @finch_arr_reserve(ptr %a2, i64 %t38, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t39 = load ptr, ptr %a2 %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i64 %t37 store { ptr, i64, i64 } %t36, ptr %t40 store i64 %t38, ptr %t9 br label %for.step1949 for.step1949: %t41 = load i64, ptr %a6 %t42 = add i64 %t41, 1 store i64 %t42, ptr %a6 br label %for.cond1947 for.end1950: %t43 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 1 %t44 = load { ptr, i64, i64 }, ptr %t43 store { ptr, i64, i64 } %t44, ptr %a45 call void @finch_str_copy(ptr %a46, ptr %a45) %t47 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t47, ptr %a48 %t49 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 2 %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i32 0, i32 1 %t51 = load i64, ptr %t50 %t52 = icmp sgt i64 %t51, 0 br i1 %t52, label %then1955, label %endif1957 then1955: %t53 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 2 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t54, ptr %a56 store { ptr, i64, i64 } { ptr @.str.1099, i64 1, i64 0 }, ptr %a57 call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) %t58 = load { ptr, i64, i64 }, ptr %a55 %t59 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 1 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } %t58, ptr %a62 store { ptr, i64, i64 } %t60, ptr %a63 call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) store { ptr, i64, i64 } %t58, ptr %a64 call void @finch_str_drop(ptr %a64) %t65 = load { ptr, i64, i64 }, ptr %a61 %t66 = load { ptr, i64, i64 }, ptr %a48 store { ptr, i64, i64 } %t65, ptr %a48 store { ptr, i64, i64 } %t66, ptr %a67 call void @finch_str_drop(ptr %a67) br label %endif1957 endif1957: %t68 = load { ptr, i64, i64 }, ptr %a48 store { ptr, i64, i64 } { ptr @.str.1100, i64 3, i64 0 }, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t72, ptr %a74 store { ptr, i64, i64 } { ptr @.str.1101, i64 1, i64 0 }, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) store { ptr, i64, i64 } %t72, ptr %a76 call void @finch_str_drop(ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a73 %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1102, i64 2, i64 0 }, ptr %a79 call void @finch_str_join(ptr %a80, ptr %a2, ptr %a79) %t81 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } %t77, ptr %a83 store { ptr, i64, i64 } %t81, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) store { ptr, i64, i64 } %t77, ptr %a85 call void @finch_str_drop(ptr %a85) store { ptr, i64, i64 } %t81, ptr %a86 call void @finch_str_drop(ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a82 store { ptr, i64, i64 } %t87, ptr %a89 store { ptr, i64, i64 } { ptr @.str.1103, i64 1, i64 0 }, ptr %a90 call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) store { ptr, i64, i64 } %t87, ptr %a91 call void @finch_str_drop(ptr %a91) %t92 = load { ptr, i64, i64 }, ptr %a88 store { ptr, i64, i64 } %t92, ptr %a93 %t94 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 9 %t95 = load i1, ptr %t94 br i1 %t95, label %then1958, label %else1959 then1958: %t96 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 %t97 = getelementptr inbounds %S.ast.Type, ptr %t96, i32 0, i32 0 %t98 = load { ptr, i64, i64 }, ptr %t97 store { ptr, i64, i64 } %t98, ptr %a99 store { ptr, i64, i64 } { ptr @.str.1104, i64 4, i64 0 }, ptr %a100 %t101 = call i32 @finch_str_eq(ptr %a99, ptr %a100) %t102 = icmp ne i32 %t101, 0 br i1 %t102, label %then1961, label %else1962 then1961: %t103 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t103, ptr %a105 store { ptr, i64, i64 } { ptr @.str.1105, i64 5, i64 0 }, ptr %a106 call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) %t107 = load { ptr, i64, i64 }, ptr %a104 %t108 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t107, ptr %a93 store { ptr, i64, i64 } %t108, ptr %a109 call void @finch_str_drop(ptr %a109) br label %endif1963 else1962: %t110 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t110, ptr %a112 store { ptr, i64, i64 } { ptr @.str.1106, i64 4, i64 0 }, ptr %a113 call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) %t114 = load { ptr, i64, i64 }, ptr %a111 %t115 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 %t116 = load %S.ast.Type, ptr %t115 %t117 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t116) store { ptr, i64, i64 } %t114, ptr %a119 store { ptr, i64, i64 } %t117, ptr %a120 call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) store { ptr, i64, i64 } %t114, ptr %a121 call void @finch_str_drop(ptr %a121) store { ptr, i64, i64 } %t117, ptr %a122 call void @finch_str_drop(ptr %a122) %t123 = load { ptr, i64, i64 }, ptr %a118 store { ptr, i64, i64 } %t123, ptr %a125 store { ptr, i64, i64 } { ptr @.str.1107, i64 1, i64 0 }, ptr %a126 call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) store { ptr, i64, i64 } %t123, ptr %a127 call void @finch_str_drop(ptr %a127) %t128 = load { ptr, i64, i64 }, ptr %a124 %t129 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t128, ptr %a93 store { ptr, i64, i64 } %t129, ptr %a130 call void @finch_str_drop(ptr %a130) br label %endif1963 endif1963: br label %endif1960 else1959: %t131 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 %t133 = load { ptr, i64, i64 }, ptr %t132 store { ptr, i64, i64 } %t133, ptr %a134 store { ptr, i64, i64 } { ptr @.str.1108, i64 4, i64 0 }, ptr %a135 %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) %t137 = icmp eq i32 %t136, 0 br i1 %t137, label %then1964, label %endif1966 then1964: %t138 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t138, ptr %a140 store { ptr, i64, i64 } { ptr @.str.1109, i64 4, i64 0 }, ptr %a141 call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) %t142 = load { ptr, i64, i64 }, ptr %a139 %t143 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 %t144 = load %S.ast.Type, ptr %t143 %t145 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t144) store { ptr, i64, i64 } %t142, ptr %a147 store { ptr, i64, i64 } %t145, ptr %a148 call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) store { ptr, i64, i64 } %t142, ptr %a149 call void @finch_str_drop(ptr %a149) store { ptr, i64, i64 } %t145, ptr %a150 call void @finch_str_drop(ptr %a150) %t151 = load { ptr, i64, i64 }, ptr %a146 %t152 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t151, ptr %a93 store { ptr, i64, i64 } %t152, ptr %a153 call void @finch_str_drop(ptr %a153) br label %endif1966 endif1966: br label %endif1960 endif1960: %t154 = load { ptr, i64, i64 }, ptr %a93 call void @finch_str_drop(ptr %a48) call void @finch.drop.arr_str(ptr %a2) ret { ptr, i64, i64 } %t154 } define internal void @finch.gen.noteCall(ptr %p0, %S.ast.Node %p1, %S.gen.FnSig %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.gen.FnSig, align 16 %a11 = alloca i64, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca %S.ast.Node, align 16 %a41 = alloca %S.ast.Node, align 16 %a43 = alloca %S.ast.Node, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.gen.FnSig %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic1967, label %ok1968 panic1967: call void @finch_panic(ptr @.str.1110, i64 263, ptr @.str.1111) unreachable ok1968: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 %t7 = load i1, ptr %t6 %t8 = xor i1 %t7, true br i1 %t8, label %then1969, label %endif1971 then1969: ret void endif1971: %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t10 = load i64, ptr %t9 store i64 %t10, ptr %a11 %t12 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1112, i64 6, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 br i1 %t17, label %then1972, label %endif1974 then1972: %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t19 = load i64, ptr %t18 %t20 = add i64 %t19, 1 store i64 %t20, ptr %a11 br label %endif1974 endif1974: %t21 = load ptr, ptr %a1 %t22 = icmp eq ptr %t21, null br i1 %t22, label %panic1975, label %ok1976 panic1975: call void @finch_panic(ptr @.str.1113, i64 270, ptr @.str.1114) unreachable ok1976: %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 0 %t24 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 16 %t25 = load i64, ptr %t24 %t26 = load { ptr, i64, i64 }, ptr %t23 %t27 = extractvalue { ptr, i64, i64 } %t26, 1 %t28 = icmp uge i64 %t25, %t27 br i1 %t28, label %range1977, label %inrange1978 range1977: call void @finch_panic_index(ptr @.str.1115, i64 270, i64 %t25, i64 %t27) unreachable inrange1978: %t29 = extractvalue { ptr, i64, i64 } %t26, 0 %t30 = getelementptr inbounds %S.ast.Program, ptr %t29, i64 %t25 %t31 = getelementptr inbounds %S.ast.Program, ptr %t30, i32 0, i32 8 %t32 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 17 %t33 = load i64, ptr %t32 %t34 = load { ptr, i64, i64 }, ptr %t31 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp uge i64 %t33, %t35 br i1 %t36, label %range1979, label %inrange1980 range1979: call void @finch_panic_index(ptr @.str.1116, i64 270, i64 %t33, i64 %t35) unreachable inrange1980: %t37 = extractvalue { ptr, i64, i64 } %t34, 0 %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t33 %t39 = load %S.ast.Node, ptr %t38 store %S.ast.Node %t39, ptr %a40 call void @finch.copy.S_ast_Node(ptr %a41, ptr %a40) %t42 = load %S.ast.Node, ptr %a41 store %S.ast.Node %t42, ptr %a43 %t44 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 %t45 = load { ptr, i64, i64 }, ptr %t44 store { ptr, i64, i64 } %t45, ptr %a46 call void @finch_str_copy(ptr %a47, ptr %a46) %t48 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t48, ptr %a49 %t50 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 7 %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i32 0, i32 1 %t52 = load i64, ptr %t51 %t53 = icmp sgt i64 %t52, 0 br label %logic.from1981 logic.from1981: br i1 %t53, label %logic.rhs1982, label %logic.end1983 logic.rhs1982: %t54 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 2 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 %t56 = load i64, ptr %t55 %t57 = icmp eq i64 %t56, 0 br label %logic.rend1984 logic.rend1984: br label %logic.end1983 logic.end1983: %t58 = phi i1 [ false, %logic.from1981 ], [ %t57, %logic.rend1984 ] br i1 %t58, label %then1985, label %endif1987 then1985: %t59 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } %t60, ptr %a61 call void @finch_str_copy(ptr %a62, ptr %a61) %t63 = load { ptr, i64, i64 }, ptr %a62 %t64 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t63, ptr %a49 store { ptr, i64, i64 } %t64, ptr %a65 call void @finch_str_drop(ptr %a65) br label %endif1987 endif1987: %t66 = load ptr, ptr %a1 %t67 = load %S.ast.Node, ptr %a2 %t68 = load i64, ptr %a11 %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a49, i32 0, i32 1 %t70 = load i64, ptr %t69 %t71 = load %S.gen.FnSig, ptr %a3 %t72 = call { ptr, i64, i64 } @finch.gen.sigText(%S.gen.FnSig %t71) store { ptr, i64, i64 } { ptr @.str.1117, i64 9, i64 0 }, ptr %a74 store { ptr, i64, i64 } %t72, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) store { ptr, i64, i64 } %t72, ptr %a76 call void @finch_str_drop(ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a73 store { ptr, i64, i64 } %t77, ptr %a79 store { ptr, i64, i64 } { ptr @.str.1118, i64 4, i64 0 }, ptr %a80 call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) store { ptr, i64, i64 } %t77, ptr %a81 call void @finch_str_drop(ptr %a81) %t82 = load { ptr, i64, i64 }, ptr %a78 %t83 = load ptr, ptr %a1 %t84 = icmp eq ptr %t83, null br i1 %t84, label %panic1988, label %ok1989 panic1988: call void @finch_panic(ptr @.str.1119, i64 275, ptr @.str.1120) unreachable ok1989: %t85 = getelementptr inbounds %S.gen.Gen, ptr %t83, i32 0, i32 1 %t86 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 13 %t87 = load i64, ptr %t86 %t88 = load { ptr, i64, i64 }, ptr %t85 %t89 = extractvalue { ptr, i64, i64 } %t88, 1 %t90 = icmp uge i64 %t87, %t89 br i1 %t90, label %range1990, label %inrange1991 range1990: call void @finch_panic_index(ptr @.str.1121, i64 275, i64 %t87, i64 %t89) unreachable inrange1991: %t91 = extractvalue { ptr, i64, i64 } %t88, 0 %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 %t87 %t93 = load { ptr, i64, i64 }, ptr %t92 %t94 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 11 %t95 = load i64, ptr %t94 %t96 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 12 %t97 = load i64, ptr %t96 %t98 = add i64 %t97, 3 call void @finch.gen.noteRef(ptr %t66, %S.ast.Node %t67, i64 %t68, i64 %t70, { ptr, i64, i64 } %t82, { ptr, i64, i64 } %t93, i64 %t95, i64 %t98) store { ptr, i64, i64 } %t82, ptr %a99 call void @finch_str_drop(ptr %a99) call void @finch_str_drop(ptr %a49) call void @finch.drop.S_ast_Node(ptr %a43) ret void } define internal void @finch.copy.arr_bool(ptr %dst, ptr %src) { entry: call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) ret void } define internal void @finch.copy.S_gen_FnSig(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.FnSig, ptr %src store %S.gen.FnSig %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 3 call void @finch_str_copy(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 6 %t11 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 6 call void @finch.copy.arr_str(ptr %t10, ptr %t11) %t12 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 7 %t13 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 7 call void @finch.copy.arr_S_ast_Type(ptr %t12, ptr %t13) %t14 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 8 %t15 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 8 call void @finch_str_copy(ptr %t14, ptr %t15) %t16 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 11 %t17 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 11 call void @finch_str_copy(ptr %t16, ptr %t17) %t18 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 12 %t19 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 12 call void @finch.copy.S_ast_Type(ptr %t18, ptr %t19) %t20 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 13 %t21 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 13 call void @finch.copy.arr_S_ast_Type(ptr %t20, ptr %t21) %t22 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 14 %t23 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 14 call void @finch.copy.arr_str(ptr %t22, ptr %t23) %t24 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 15 %t25 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 15 call void @finch.copy.arr_bool(ptr %t24, ptr %t25) ret void } define internal void @finch.drop.arr_bool(ptr %a) { entry: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.S_gen_FnSig(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 2 call void @finch_str_drop(ptr %t3) %t4 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 3 call void @finch_str_drop(ptr %t4) %t5 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 6 call void @finch.drop.arr_str(ptr %t5) %t6 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 7 call void @finch.drop.arr_S_ast_Type(ptr %t6) %t7 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 8 call void @finch_str_drop(ptr %t7) %t8 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 11 call void @finch_str_drop(ptr %t8) %t9 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 12 call void @finch.drop.S_ast_Type(ptr %t9) %t10 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 13 call void @finch.drop.arr_S_ast_Type(ptr %t10) %t11 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 14 call void @finch.drop.arr_str(ptr %t11) %t12 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 15 call void @finch.drop.arr_bool(ptr %t12) ret void } define internal void @finch.copy.S_gen_Template(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Template, ptr %src store %S.gen.Template %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 3 call void @finch.copy.arr_str(ptr %t8, ptr %t9) ret void } define internal void @finch.drop.S_gen_Template(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.Template, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.gen.Template, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.gen.Template, ptr %a, i32 0, i32 2 call void @finch_str_drop(ptr %t3) %t4 = getelementptr inbounds %S.gen.Template, ptr %a, i32 0, i32 3 call void @finch.drop.arr_str(ptr %t4) ret void } define internal void @finch.copy.arr_int(ptr %dst, ptr %src) { entry: call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) ret void } define internal void @finch.copy.S_gen_StructDef(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.StructDef, ptr %src store %S.gen.StructDef %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 3 %t7 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 3 call void @finch.copy.arr_int(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 4 %t9 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 4 call void @finch.copy.arr_int(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 5 %t11 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 5 call void @finch_str_copy(ptr %t10, ptr %t11) %t12 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 6 %t13 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 6 call void @finch.copy.arr_str(ptr %t12, ptr %t13) %t14 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 7 %t15 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 7 call void @finch.copy.arr_S_ast_Type(ptr %t14, ptr %t15) %t16 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 8 %t17 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 8 call void @finch_str_copy(ptr %t16, ptr %t17) %t18 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 11 %t19 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 11 call void @finch.copy.arr_str(ptr %t18, ptr %t19) %t20 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 12 %t21 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 12 call void @finch.copy.arr_S_ast_Type(ptr %t20, ptr %t21) ret void } define internal void @finch.drop.arr_int(ptr %a) { entry: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.S_gen_StructDef(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 3 call void @finch.drop.arr_int(ptr %t3) %t4 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 4 call void @finch.drop.arr_int(ptr %t4) %t5 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 5 call void @finch_str_drop(ptr %t5) %t6 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 6 call void @finch.drop.arr_str(ptr %t6) %t7 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 7 call void @finch.drop.arr_S_ast_Type(ptr %t7) %t8 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 8 call void @finch_str_drop(ptr %t8) %t9 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 11 call void @finch.drop.arr_str(ptr %t9) %t10 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 12 call void @finch.drop.arr_S_ast_Type(ptr %t10) ret void } define internal void @finch.gen.indexAll(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca i64, align 16 %a38 = alloca %S.gen.FnSig, align 16 %a39 = alloca %S.gen.FnSig, align 16 %a41 = alloca %S.gen.FnSig, align 16 %a61 = alloca %S.ast.Node, align 16 %a62 = alloca %S.ast.Node, align 16 %a64 = alloca %S.ast.Node, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca i64, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca i64, align 16 %a257 = alloca %S.gen.Template, align 16 %a258 = alloca %S.gen.Template, align 16 %a260 = alloca %S.gen.Template, align 16 %a282 = alloca %S.ast.Node, align 16 %a283 = alloca %S.ast.Node, align 16 %a285 = alloca %S.ast.Node, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a308 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca { ptr, i64, i64 }, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a369 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a373 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a382 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a384 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a399 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a410 = alloca { ptr, i64, i64 }, align 16 %a411 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a415 = alloca { ptr, i64, i64 }, align 16 %a416 = alloca { ptr, i64, i64 }, align 16 %a419 = alloca { ptr, i64, i64 }, align 16 %a420 = alloca { ptr, i64, i64 }, align 16 %a421 = alloca { ptr, i64, i64 }, align 16 %a422 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca i64, align 16 %a448 = alloca %S.gen.StructDef, align 16 %a449 = alloca %S.gen.StructDef, align 16 %a451 = alloca %S.gen.StructDef, align 16 %a478 = alloca %S.ast.Node, align 16 %a479 = alloca %S.ast.Node, align 16 %a481 = alloca %S.ast.Node, align 16 %a488 = alloca { ptr, i64, i64 }, align 16 %a489 = alloca { ptr, i64, i64 }, align 16 %a490 = alloca { ptr, i64, i64 }, align 16 %a492 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a494 = alloca { ptr, i64, i64 }, align 16 %a495 = alloca { ptr, i64, i64 }, align 16 %a499 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a501 = alloca { ptr, i64, i64 }, align 16 %a502 = alloca { ptr, i64, i64 }, align 16 %a504 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a520 = alloca { ptr, i64, i64 }, align 16 %a521 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca { ptr, i64, i64 }, align 16 %a523 = alloca { ptr, i64, i64 }, align 16 %a525 = alloca { ptr, i64, i64 }, align 16 %a526 = alloca { ptr, i64, i64 }, align 16 %a527 = alloca { ptr, i64, i64 }, align 16 %a528 = alloca { ptr, i64, i64 }, align 16 %a532 = alloca { ptr, i64, i64 }, align 16 %a534 = alloca { ptr, i64, i64 }, align 16 %a535 = alloca { ptr, i64, i64 }, align 16 %a536 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a538 = alloca { ptr, i64, i64 }, align 16 %a540 = alloca { ptr, i64, i64 }, align 16 %a541 = alloca { ptr, i64, i64 }, align 16 %a542 = alloca { ptr, i64, i64 }, align 16 %a543 = alloca { ptr, i64, i64 }, align 16 %a547 = alloca { ptr, i64, i64 }, align 16 %a549 = alloca { ptr, i64, i64 }, align 16 %a550 = alloca { ptr, i64, i64 }, align 16 %a551 = alloca { ptr, i64, i64 }, align 16 %a552 = alloca { ptr, i64, i64 }, align 16 %a553 = alloca { ptr, i64, i64 }, align 16 %a562 = alloca i64, align 16 %a571 = alloca { ptr, i64, i64 }, align 16 %a572 = alloca { ptr, i64, i64 }, align 16 %a573 = alloca { ptr, i64, i64 }, align 16 %a575 = alloca { ptr, i64, i64 }, align 16 %a576 = alloca { ptr, i64, i64 }, align 16 %a577 = alloca { ptr, i64, i64 }, align 16 %a578 = alloca { ptr, i64, i64 }, align 16 %a582 = alloca { ptr, i64, i64 }, align 16 %a583 = alloca { ptr, i64, i64 }, align 16 %a584 = alloca { ptr, i64, i64 }, align 16 %a585 = alloca { ptr, i64, i64 }, align 16 %a587 = alloca { ptr, i64, i64 }, align 16 %a588 = alloca { ptr, i64, i64 }, align 16 %a589 = alloca { ptr, i64, i64 }, align 16 %a590 = alloca { ptr, i64, i64 }, align 16 %a600 = alloca { ptr, i64, i64 }, align 16 %a601 = alloca { ptr, i64, i64 }, align 16 %a602 = alloca { ptr, i64, i64 }, align 16 %a603 = alloca { ptr, i64, i64 }, align 16 %a605 = alloca { ptr, i64, i64 }, align 16 %a606 = alloca { ptr, i64, i64 }, align 16 %a607 = alloca { ptr, i64, i64 }, align 16 %a608 = alloca { ptr, i64, i64 }, align 16 %a619 = alloca { ptr, i64, i64 }, align 16 %a620 = alloca { ptr, i64, i64 }, align 16 %a621 = alloca { ptr, i64, i64 }, align 16 %a622 = alloca { ptr, i64, i64 }, align 16 %a623 = alloca { ptr, i64, i64 }, align 16 %a638 = alloca i64, align 16 %a651 = alloca i64, align 16 %a659 = alloca %S.ast.Node, align 16 %a660 = alloca %S.ast.Node, align 16 %a662 = alloca %S.ast.Node, align 16 %a663 = alloca { ptr, i64, i64 }, align 16 %a664 = alloca { ptr, i64, i64 }, align 16 %a666 = alloca i64, align 16 %a674 = alloca %S.ast.Node, align 16 %a678 = alloca { ptr, i64, i64 }, align 16 %a679 = alloca { ptr, i64, i64 }, align 16 %a688 = alloca { ptr, i64, i64 }, align 16 %a689 = alloca { ptr, i64, i64 }, align 16 %a692 = alloca { ptr, i64, i64 }, align 16 %a708 = alloca { ptr, i64, i64 }, align 16 %a709 = alloca { ptr, i64, i64 }, align 16 %a710 = alloca { ptr, i64, i64 }, align 16 %a712 = alloca { ptr, i64, i64 }, align 16 %a713 = alloca { ptr, i64, i64 }, align 16 %a714 = alloca { ptr, i64, i64 }, align 16 %a715 = alloca { ptr, i64, i64 }, align 16 %a719 = alloca { ptr, i64, i64 }, align 16 %a720 = alloca { ptr, i64, i64 }, align 16 %a721 = alloca { ptr, i64, i64 }, align 16 %a722 = alloca { ptr, i64, i64 }, align 16 %a724 = alloca { ptr, i64, i64 }, align 16 %a725 = alloca { ptr, i64, i64 }, align 16 %a726 = alloca { ptr, i64, i64 }, align 16 %a727 = alloca { ptr, i64, i64 }, align 16 %a740 = alloca { ptr, i64, i64 }, align 16 %a741 = alloca { ptr, i64, i64 }, align 16 %a742 = alloca { ptr, i64, i64 }, align 16 %a743 = alloca { ptr, i64, i64 }, align 16 %a745 = alloca { ptr, i64, i64 }, align 16 %a746 = alloca { ptr, i64, i64 }, align 16 %a747 = alloca { ptr, i64, i64 }, align 16 %a748 = alloca { ptr, i64, i64 }, align 16 %a752 = alloca { ptr, i64, i64 }, align 16 %a754 = alloca { ptr, i64, i64 }, align 16 %a755 = alloca { ptr, i64, i64 }, align 16 %a756 = alloca { ptr, i64, i64 }, align 16 %a757 = alloca { ptr, i64, i64 }, align 16 %a758 = alloca { ptr, i64, i64 }, align 16 %a760 = alloca { ptr, i64, i64 }, align 16 %a761 = alloca { ptr, i64, i64 }, align 16 %a762 = alloca { ptr, i64, i64 }, align 16 %a763 = alloca { ptr, i64, i64 }, align 16 %a767 = alloca { ptr, i64, i64 }, align 16 %a769 = alloca { ptr, i64, i64 }, align 16 %a770 = alloca { ptr, i64, i64 }, align 16 %a771 = alloca { ptr, i64, i64 }, align 16 %a772 = alloca { ptr, i64, i64 }, align 16 %a773 = alloca { ptr, i64, i64 }, align 16 %a775 = alloca { ptr, i64, i64 }, align 16 %a776 = alloca { ptr, i64, i64 }, align 16 %a777 = alloca { ptr, i64, i64 }, align 16 %a778 = alloca { ptr, i64, i64 }, align 16 %a781 = alloca { ptr, i64, i64 }, align 16 %a782 = alloca { ptr, i64, i64 }, align 16 %a783 = alloca { ptr, i64, i64 }, align 16 %a784 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 0, ptr %a3 br label %each.cond1992 each.cond1992: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 br i1 %t7, label %each.body1993, label %each.end1995 each.body1993: %t8 = load ptr, ptr %a2 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 %t6 %t10 = load { ptr, i64, i64 }, ptr %t9 store { ptr, i64, i64 } %t10, ptr %a11 %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic1996, label %ok1997 panic1996: call void @finch_panic(ptr @.str.1122, i64 281, ptr @.str.1123) unreachable ok1997: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 29 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t16 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1124, i64 3, i64 0 }, ptr %a18 store { ptr, i64, i64 } %t16, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a17 %t21 = load i64, ptr %t15 %t22 = add i64 %t21, 1 call void @finch_arr_reserve(ptr %t14, i64 %t22, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t23 = load ptr, ptr %t14 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i64 %t21 store { ptr, i64, i64 } %t20, ptr %t24 store i64 %t22, ptr %t15 br label %each.step1994 each.step1994: %t25 = load i64, ptr %a3 %t26 = add i64 %t25, 1 store i64 %t26, ptr %a3 br label %each.cond1992 each.end1995: %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null br i1 %t28, label %panic1998, label %ok1999 panic1998: call void @finch_panic(ptr @.str.1125, i64 283, ptr @.str.1126) unreachable ok1999: %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 15 store i64 0, ptr %a30 br label %each.cond2000 each.cond2000: %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = load i64, ptr %a30 %t34 = icmp slt i64 %t33, %t32 br i1 %t34, label %each.body2001, label %each.end2003 each.body2001: %t35 = load ptr, ptr %t29 %t36 = getelementptr inbounds %S.gen.FnSig, ptr %t35, i64 %t33 %t37 = load %S.gen.FnSig, ptr %t36 store %S.gen.FnSig %t37, ptr %a38 call void @finch.copy.S_gen_FnSig(ptr %a39, ptr %a38) %t40 = load %S.gen.FnSig, ptr %a39 store %S.gen.FnSig %t40, ptr %a41 %t42 = load ptr, ptr %a1 %t43 = icmp eq ptr %t42, null br i1 %t43, label %panic2004, label %ok2005 panic2004: call void @finch_panic(ptr @.str.1127, i64 284, ptr @.str.1128) unreachable ok2005: %t44 = getelementptr inbounds %S.gen.Gen, ptr %t42, i32 0, i32 0 %t45 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 16 %t46 = load i64, ptr %t45 %t47 = load { ptr, i64, i64 }, ptr %t44 %t48 = extractvalue { ptr, i64, i64 } %t47, 1 %t49 = icmp uge i64 %t46, %t48 br i1 %t49, label %range2006, label %inrange2007 range2006: call void @finch_panic_index(ptr @.str.1129, i64 284, i64 %t46, i64 %t48) unreachable inrange2007: %t50 = extractvalue { ptr, i64, i64 } %t47, 0 %t51 = getelementptr inbounds %S.ast.Program, ptr %t50, i64 %t46 %t52 = getelementptr inbounds %S.ast.Program, ptr %t51, i32 0, i32 8 %t53 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 17 %t54 = load i64, ptr %t53 %t55 = load { ptr, i64, i64 }, ptr %t52 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 br i1 %t57, label %range2008, label %inrange2009 range2008: call void @finch_panic_index(ptr @.str.1130, i64 284, i64 %t54, i64 %t56) unreachable inrange2009: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 %t60 = load %S.ast.Node, ptr %t59 store %S.ast.Node %t60, ptr %a61 call void @finch.copy.S_ast_Node(ptr %a62, ptr %a61) %t63 = load %S.ast.Node, ptr %a62 store %S.ast.Node %t63, ptr %a64 %t65 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 7 %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i32 0, i32 1 %t67 = load i64, ptr %t66 %t68 = icmp sgt i64 %t67, 0 br i1 %t68, label %then2010, label %endif2012 then2010: call void @finch.drop.S_ast_Node(ptr %a64) call void @finch.drop.S_gen_FnSig(ptr %a41) br label %each.step2002 endif2012: store { ptr, i64, i64 } zeroinitializer, ptr %a69 %t70 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 13 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 %t72 = load i64, ptr %t71 store i64 0, ptr %a73 br label %for.cond2013 for.cond2013: %t74 = load i64, ptr %a73 %t75 = icmp slt i64 %t74, %t72 br i1 %t75, label %for.body2014, label %for.end2016 for.body2014: %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %a69, i32 0, i32 1 %t77 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 13 %t78 = load i64, ptr %a73 %t79 = load { ptr, i64, i64 }, ptr %t77 %t80 = extractvalue { ptr, i64, i64 } %t79, 1 %t81 = icmp uge i64 %t78, %t80 br i1 %t81, label %range2017, label %inrange2018 range2017: call void @finch_panic_index(ptr @.str.1131, i64 290, i64 %t78, i64 %t80) unreachable inrange2018: %t82 = extractvalue { ptr, i64, i64 } %t79, 0 %t83 = getelementptr inbounds %S.ast.Type, ptr %t82, i64 %t78 %t84 = load %S.ast.Type, ptr %t83 %t85 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t84) store { ptr, i64, i64 } %t85, ptr %a87 store { ptr, i64, i64 } { ptr @.str.1132, i64 1, i64 0 }, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) store { ptr, i64, i64 } %t85, ptr %a89 call void @finch_str_drop(ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a86 %t91 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 14 %t92 = load i64, ptr %a73 %t93 = load { ptr, i64, i64 }, ptr %t91 %t94 = extractvalue { ptr, i64, i64 } %t93, 1 %t95 = icmp uge i64 %t92, %t94 br i1 %t95, label %range2019, label %inrange2020 range2019: call void @finch_panic_index(ptr @.str.1133, i64 290, i64 %t92, i64 %t94) unreachable inrange2020: %t96 = extractvalue { ptr, i64, i64 } %t93, 0 %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %t96, i64 %t92 %t98 = load { ptr, i64, i64 }, ptr %t97 store { ptr, i64, i64 } %t90, ptr %a100 store { ptr, i64, i64 } %t98, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) store { ptr, i64, i64 } %t90, ptr %a102 call void @finch_str_drop(ptr %a102) %t103 = load { ptr, i64, i64 }, ptr %a99 %t104 = load i64, ptr %t76 %t105 = add i64 %t104, 1 call void @finch_arr_reserve(ptr %a69, i64 %t105, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t106 = load ptr, ptr %a69 %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t106, i64 %t104 store { ptr, i64, i64 } %t103, ptr %t107 store i64 %t105, ptr %t76 br label %for.step2015 for.step2015: %t108 = load i64, ptr %a73 %t109 = add i64 %t108, 1 store i64 %t109, ptr %a73 br label %for.cond2013 for.end2016: %t110 = load ptr, ptr %a1 %t111 = icmp eq ptr %t110, null br i1 %t111, label %panic2021, label %ok2022 panic2021: call void @finch_panic(ptr @.str.1134, i64 292, ptr @.str.1135) unreachable ok2022: %t112 = getelementptr inbounds %S.gen.Gen, ptr %t110, i32 0, i32 29 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 %t114 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 0 %t115 = load { ptr, i64, i64 }, ptr %t114 store { ptr, i64, i64 } { ptr @.str.1136, i64 3, i64 0 }, ptr %a117 store { ptr, i64, i64 } %t115, ptr %a118 call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a116 store { ptr, i64, i64 } %t119, ptr %a121 store { ptr, i64, i64 } { ptr @.str.1137, i64 1, i64 0 }, ptr %a122 call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) store { ptr, i64, i64 } %t119, ptr %a123 call void @finch_str_drop(ptr %a123) %t124 = load { ptr, i64, i64 }, ptr %a120 %t125 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 1 %t126 = load { ptr, i64, i64 }, ptr %t125 store { ptr, i64, i64 } %t124, ptr %a128 store { ptr, i64, i64 } %t126, ptr %a129 call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) store { ptr, i64, i64 } %t124, ptr %a130 call void @finch_str_drop(ptr %a130) %t131 = load { ptr, i64, i64 }, ptr %a127 store { ptr, i64, i64 } %t131, ptr %a133 store { ptr, i64, i64 } { ptr @.str.1138, i64 1, i64 0 }, ptr %a134 call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) store { ptr, i64, i64 } %t131, ptr %a135 call void @finch_str_drop(ptr %a135) %t136 = load { ptr, i64, i64 }, ptr %a132 %t137 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 2 %t138 = load { ptr, i64, i64 }, ptr %t137 store { ptr, i64, i64 } %t136, ptr %a140 store { ptr, i64, i64 } %t138, ptr %a141 call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) store { ptr, i64, i64 } %t136, ptr %a142 call void @finch_str_drop(ptr %a142) %t143 = load { ptr, i64, i64 }, ptr %a139 store { ptr, i64, i64 } %t143, ptr %a145 store { ptr, i64, i64 } { ptr @.str.1139, i64 1, i64 0 }, ptr %a146 call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) store { ptr, i64, i64 } %t143, ptr %a147 call void @finch_str_drop(ptr %a147) %t148 = load { ptr, i64, i64 }, ptr %a144 %t149 = load ptr, ptr %a1 %t150 = icmp eq ptr %t149, null br i1 %t150, label %panic2023, label %ok2024 panic2023: call void @finch_panic(ptr @.str.1140, i64 292, ptr @.str.1141) unreachable ok2024: %t151 = getelementptr inbounds %S.gen.Gen, ptr %t149, i32 0, i32 1 %t152 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 13 %t153 = load i64, ptr %t152 %t154 = load { ptr, i64, i64 }, ptr %t151 %t155 = extractvalue { ptr, i64, i64 } %t154, 1 %t156 = icmp uge i64 %t153, %t155 br i1 %t156, label %range2025, label %inrange2026 range2025: call void @finch_panic_index(ptr @.str.1142, i64 292, i64 %t153, i64 %t155) unreachable inrange2026: %t157 = extractvalue { ptr, i64, i64 } %t154, 0 %t158 = getelementptr inbounds { ptr, i64, i64 }, ptr %t157, i64 %t153 %t159 = load { ptr, i64, i64 }, ptr %t158 store { ptr, i64, i64 } %t148, ptr %a161 store { ptr, i64, i64 } %t159, ptr %a162 call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) store { ptr, i64, i64 } %t148, ptr %a163 call void @finch_str_drop(ptr %a163) %t164 = load { ptr, i64, i64 }, ptr %a160 store { ptr, i64, i64 } %t164, ptr %a166 store { ptr, i64, i64 } { ptr @.str.1143, i64 1, i64 0 }, ptr %a167 call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) store { ptr, i64, i64 } %t164, ptr %a168 call void @finch_str_drop(ptr %a168) %t169 = load { ptr, i64, i64 }, ptr %a165 %t170 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 11 %t171 = load i64, ptr %t170 call void @finch_str_from_int(ptr %a172, i64 %t171) %t173 = load { ptr, i64, i64 }, ptr %a172 store { ptr, i64, i64 } %t169, ptr %a175 store { ptr, i64, i64 } %t173, ptr %a176 call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) store { ptr, i64, i64 } %t169, ptr %a177 call void @finch_str_drop(ptr %a177) store { ptr, i64, i64 } %t173, ptr %a178 call void @finch_str_drop(ptr %a178) %t179 = load { ptr, i64, i64 }, ptr %a174 store { ptr, i64, i64 } %t179, ptr %a181 store { ptr, i64, i64 } { ptr @.str.1144, i64 1, i64 0 }, ptr %a182 call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) store { ptr, i64, i64 } %t179, ptr %a183 call void @finch_str_drop(ptr %a183) %t184 = load { ptr, i64, i64 }, ptr %a180 %t185 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 12 %t186 = load i64, ptr %t185 call void @finch_str_from_int(ptr %a187, i64 %t186) %t188 = load { ptr, i64, i64 }, ptr %a187 store { ptr, i64, i64 } %t184, ptr %a190 store { ptr, i64, i64 } %t188, ptr %a191 call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) store { ptr, i64, i64 } %t184, ptr %a192 call void @finch_str_drop(ptr %a192) store { ptr, i64, i64 } %t188, ptr %a193 call void @finch_str_drop(ptr %a193) %t194 = load { ptr, i64, i64 }, ptr %a189 store { ptr, i64, i64 } %t194, ptr %a196 store { ptr, i64, i64 } { ptr @.str.1145, i64 1, i64 0 }, ptr %a197 call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) store { ptr, i64, i64 } %t194, ptr %a198 call void @finch_str_drop(ptr %a198) %t199 = load { ptr, i64, i64 }, ptr %a195 %t200 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 14 %t201 = load i64, ptr %t200 call void @finch_str_from_int(ptr %a202, i64 %t201) %t203 = load { ptr, i64, i64 }, ptr %a202 store { ptr, i64, i64 } %t199, ptr %a205 store { ptr, i64, i64 } %t203, ptr %a206 call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206) store { ptr, i64, i64 } %t199, ptr %a207 call void @finch_str_drop(ptr %a207) store { ptr, i64, i64 } %t203, ptr %a208 call void @finch_str_drop(ptr %a208) %t209 = load { ptr, i64, i64 }, ptr %a204 store { ptr, i64, i64 } %t209, ptr %a211 store { ptr, i64, i64 } { ptr @.str.1146, i64 1, i64 0 }, ptr %a212 call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) store { ptr, i64, i64 } %t209, ptr %a213 call void @finch_str_drop(ptr %a213) %t214 = load { ptr, i64, i64 }, ptr %a210 %t215 = load %S.gen.FnSig, ptr %a41 %t216 = call { ptr, i64, i64 } @finch.gen.sigText(%S.gen.FnSig %t215) %t217 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t216) store { ptr, i64, i64 } %t216, ptr %a218 call void @finch_str_drop(ptr %a218) store { ptr, i64, i64 } %t214, ptr %a220 store { ptr, i64, i64 } %t217, ptr %a221 call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) store { ptr, i64, i64 } %t214, ptr %a222 call void @finch_str_drop(ptr %a222) store { ptr, i64, i64 } %t217, ptr %a223 call void @finch_str_drop(ptr %a223) %t224 = load { ptr, i64, i64 }, ptr %a219 store { ptr, i64, i64 } %t224, ptr %a226 store { ptr, i64, i64 } { ptr @.str.1147, i64 1, i64 0 }, ptr %a227 call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227) store { ptr, i64, i64 } %t224, ptr %a228 call void @finch_str_drop(ptr %a228) %t229 = load { ptr, i64, i64 }, ptr %a225 %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %a69, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1148, i64 1, i64 0 }, ptr %a231 call void @finch_str_join(ptr %a232, ptr %a69, ptr %a231) %t233 = load { ptr, i64, i64 }, ptr %a232 store { ptr, i64, i64 } %t229, ptr %a235 store { ptr, i64, i64 } %t233, ptr %a236 call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) store { ptr, i64, i64 } %t229, ptr %a237 call void @finch_str_drop(ptr %a237) store { ptr, i64, i64 } %t233, ptr %a238 call void @finch_str_drop(ptr %a238) %t239 = load { ptr, i64, i64 }, ptr %a234 %t240 = load i64, ptr %t113 %t241 = add i64 %t240, 1 call void @finch_arr_reserve(ptr %t112, i64 %t241, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t242 = load ptr, ptr %t112 %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i64 %t240 store { ptr, i64, i64 } %t239, ptr %t243 store i64 %t241, ptr %t113 call void @finch.drop.arr_str(ptr %a69) call void @finch.drop.S_ast_Node(ptr %a64) call void @finch.drop.S_gen_FnSig(ptr %a41) br label %each.step2002 each.step2002: %t244 = load i64, ptr %a30 %t245 = add i64 %t244, 1 store i64 %t245, ptr %a30 br label %each.cond2000 each.end2003: %t246 = load ptr, ptr %a1 %t247 = icmp eq ptr %t246, null br i1 %t247, label %panic2027, label %ok2028 panic2027: call void @finch_panic(ptr @.str.1149, i64 294, ptr @.str.1150) unreachable ok2028: %t248 = getelementptr inbounds %S.gen.Gen, ptr %t246, i32 0, i32 17 store i64 0, ptr %a249 br label %each.cond2029 each.cond2029: %t250 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i32 0, i32 1 %t251 = load i64, ptr %t250 %t252 = load i64, ptr %a249 %t253 = icmp slt i64 %t252, %t251 br i1 %t253, label %each.body2030, label %each.end2032 each.body2030: %t254 = load ptr, ptr %t248 %t255 = getelementptr inbounds %S.gen.Template, ptr %t254, i64 %t252 %t256 = load %S.gen.Template, ptr %t255 store %S.gen.Template %t256, ptr %a257 call void @finch.copy.S_gen_Template(ptr %a258, ptr %a257) %t259 = load %S.gen.Template, ptr %a258 store %S.gen.Template %t259, ptr %a260 %t261 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 6 %t262 = load i1, ptr %t261 br i1 %t262, label %then2033, label %endif2035 then2033: call void @finch.drop.S_gen_Template(ptr %a260) br label %each.step2031 endif2035: %t263 = load ptr, ptr %a1 %t264 = icmp eq ptr %t263, null br i1 %t264, label %panic2036, label %ok2037 panic2036: call void @finch_panic(ptr @.str.1151, i64 298, ptr @.str.1152) unreachable ok2037: %t265 = getelementptr inbounds %S.gen.Gen, ptr %t263, i32 0, i32 0 %t266 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 4 %t267 = load i64, ptr %t266 %t268 = load { ptr, i64, i64 }, ptr %t265 %t269 = extractvalue { ptr, i64, i64 } %t268, 1 %t270 = icmp uge i64 %t267, %t269 br i1 %t270, label %range2038, label %inrange2039 range2038: call void @finch_panic_index(ptr @.str.1153, i64 298, i64 %t267, i64 %t269) unreachable inrange2039: %t271 = extractvalue { ptr, i64, i64 } %t268, 0 %t272 = getelementptr inbounds %S.ast.Program, ptr %t271, i64 %t267 %t273 = getelementptr inbounds %S.ast.Program, ptr %t272, i32 0, i32 8 %t274 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 5 %t275 = load i64, ptr %t274 %t276 = load { ptr, i64, i64 }, ptr %t273 %t277 = extractvalue { ptr, i64, i64 } %t276, 1 %t278 = icmp uge i64 %t275, %t277 br i1 %t278, label %range2040, label %inrange2041 range2040: call void @finch_panic_index(ptr @.str.1154, i64 298, i64 %t275, i64 %t277) unreachable inrange2041: %t279 = extractvalue { ptr, i64, i64 } %t276, 0 %t280 = getelementptr inbounds %S.ast.Node, ptr %t279, i64 %t275 %t281 = load %S.ast.Node, ptr %t280 store %S.ast.Node %t281, ptr %a282 call void @finch.copy.S_ast_Node(ptr %a283, ptr %a282) %t284 = load %S.ast.Node, ptr %a283 store %S.ast.Node %t284, ptr %a285 %t286 = load ptr, ptr %a1 %t287 = icmp eq ptr %t286, null br i1 %t287, label %panic2042, label %ok2043 panic2042: call void @finch_panic(ptr @.str.1155, i64 299, ptr @.str.1156) unreachable ok2043: %t288 = getelementptr inbounds %S.gen.Gen, ptr %t286, i32 0, i32 29 %t289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t288, i32 0, i32 1 %t290 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 0 %t291 = load { ptr, i64, i64 }, ptr %t290 store { ptr, i64, i64 } { ptr @.str.1157, i64 3, i64 0 }, ptr %a293 store { ptr, i64, i64 } %t291, ptr %a294 call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) %t295 = load { ptr, i64, i64 }, ptr %a292 store { ptr, i64, i64 } %t295, ptr %a297 store { ptr, i64, i64 } { ptr @.str.1158, i64 1, i64 0 }, ptr %a298 call void @finch_str_concat(ptr %a296, ptr %a297, ptr %a298) store { ptr, i64, i64 } %t295, ptr %a299 call void @finch_str_drop(ptr %a299) %t300 = load { ptr, i64, i64 }, ptr %a296 %t301 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 1 %t302 = load { ptr, i64, i64 }, ptr %t301 store { ptr, i64, i64 } %t300, ptr %a304 store { ptr, i64, i64 } %t302, ptr %a305 call void @finch_str_concat(ptr %a303, ptr %a304, ptr %a305) store { ptr, i64, i64 } %t300, ptr %a306 call void @finch_str_drop(ptr %a306) %t307 = load { ptr, i64, i64 }, ptr %a303 store { ptr, i64, i64 } %t307, ptr %a309 store { ptr, i64, i64 } { ptr @.str.1159, i64 1, i64 0 }, ptr %a310 call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) store { ptr, i64, i64 } %t307, ptr %a311 call void @finch_str_drop(ptr %a311) %t312 = load { ptr, i64, i64 }, ptr %a308 %t313 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 2 %t314 = load { ptr, i64, i64 }, ptr %t313 store { ptr, i64, i64 } %t312, ptr %a316 store { ptr, i64, i64 } %t314, ptr %a317 call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317) store { ptr, i64, i64 } %t312, ptr %a318 call void @finch_str_drop(ptr %a318) %t319 = load { ptr, i64, i64 }, ptr %a315 store { ptr, i64, i64 } %t319, ptr %a321 store { ptr, i64, i64 } { ptr @.str.1160, i64 1, i64 0 }, ptr %a322 call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322) store { ptr, i64, i64 } %t319, ptr %a323 call void @finch_str_drop(ptr %a323) %t324 = load { ptr, i64, i64 }, ptr %a320 %t325 = load ptr, ptr %a1 %t326 = icmp eq ptr %t325, null br i1 %t326, label %panic2044, label %ok2045 panic2044: call void @finch_panic(ptr @.str.1161, i64 299, ptr @.str.1162) unreachable ok2045: %t327 = getelementptr inbounds %S.gen.Gen, ptr %t325, i32 0, i32 1 %t328 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 13 %t329 = load i64, ptr %t328 %t330 = load { ptr, i64, i64 }, ptr %t327 %t331 = extractvalue { ptr, i64, i64 } %t330, 1 %t332 = icmp uge i64 %t329, %t331 br i1 %t332, label %range2046, label %inrange2047 range2046: call void @finch_panic_index(ptr @.str.1163, i64 299, i64 %t329, i64 %t331) unreachable inrange2047: %t333 = extractvalue { ptr, i64, i64 } %t330, 0 %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t333, i64 %t329 %t335 = load { ptr, i64, i64 }, ptr %t334 store { ptr, i64, i64 } %t324, ptr %a337 store { ptr, i64, i64 } %t335, ptr %a338 call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338) store { ptr, i64, i64 } %t324, ptr %a339 call void @finch_str_drop(ptr %a339) %t340 = load { ptr, i64, i64 }, ptr %a336 store { ptr, i64, i64 } %t340, ptr %a342 store { ptr, i64, i64 } { ptr @.str.1164, i64 1, i64 0 }, ptr %a343 call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) store { ptr, i64, i64 } %t340, ptr %a344 call void @finch_str_drop(ptr %a344) %t345 = load { ptr, i64, i64 }, ptr %a341 %t346 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 11 %t347 = load i64, ptr %t346 call void @finch_str_from_int(ptr %a348, i64 %t347) %t349 = load { ptr, i64, i64 }, ptr %a348 store { ptr, i64, i64 } %t345, ptr %a351 store { ptr, i64, i64 } %t349, ptr %a352 call void @finch_str_concat(ptr %a350, ptr %a351, ptr %a352) store { ptr, i64, i64 } %t345, ptr %a353 call void @finch_str_drop(ptr %a353) store { ptr, i64, i64 } %t349, ptr %a354 call void @finch_str_drop(ptr %a354) %t355 = load { ptr, i64, i64 }, ptr %a350 store { ptr, i64, i64 } %t355, ptr %a357 store { ptr, i64, i64 } { ptr @.str.1165, i64 1, i64 0 }, ptr %a358 call void @finch_str_concat(ptr %a356, ptr %a357, ptr %a358) store { ptr, i64, i64 } %t355, ptr %a359 call void @finch_str_drop(ptr %a359) %t360 = load { ptr, i64, i64 }, ptr %a356 %t361 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 12 %t362 = load i64, ptr %t361 call void @finch_str_from_int(ptr %a363, i64 %t362) %t364 = load { ptr, i64, i64 }, ptr %a363 store { ptr, i64, i64 } %t360, ptr %a366 store { ptr, i64, i64 } %t364, ptr %a367 call void @finch_str_concat(ptr %a365, ptr %a366, ptr %a367) store { ptr, i64, i64 } %t360, ptr %a368 call void @finch_str_drop(ptr %a368) store { ptr, i64, i64 } %t364, ptr %a369 call void @finch_str_drop(ptr %a369) %t370 = load { ptr, i64, i64 }, ptr %a365 store { ptr, i64, i64 } %t370, ptr %a372 store { ptr, i64, i64 } { ptr @.str.1166, i64 1, i64 0 }, ptr %a373 call void @finch_str_concat(ptr %a371, ptr %a372, ptr %a373) store { ptr, i64, i64 } %t370, ptr %a374 call void @finch_str_drop(ptr %a374) %t375 = load { ptr, i64, i64 }, ptr %a371 %t376 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 14 %t377 = load i64, ptr %t376 call void @finch_str_from_int(ptr %a378, i64 %t377) %t379 = load { ptr, i64, i64 }, ptr %a378 store { ptr, i64, i64 } %t375, ptr %a381 store { ptr, i64, i64 } %t379, ptr %a382 call void @finch_str_concat(ptr %a380, ptr %a381, ptr %a382) store { ptr, i64, i64 } %t375, ptr %a383 call void @finch_str_drop(ptr %a383) store { ptr, i64, i64 } %t379, ptr %a384 call void @finch_str_drop(ptr %a384) %t385 = load { ptr, i64, i64 }, ptr %a380 store { ptr, i64, i64 } %t385, ptr %a387 store { ptr, i64, i64 } { ptr @.str.1167, i64 1, i64 0 }, ptr %a388 call void @finch_str_concat(ptr %a386, ptr %a387, ptr %a388) store { ptr, i64, i64 } %t385, ptr %a389 call void @finch_str_drop(ptr %a389) %t390 = load { ptr, i64, i64 }, ptr %a386 %t391 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 1 %t392 = load { ptr, i64, i64 }, ptr %t391 store { ptr, i64, i64 } { ptr @.str.1168, i64 3, i64 0 }, ptr %a394 store { ptr, i64, i64 } %t392, ptr %a395 call void @finch_str_concat(ptr %a393, ptr %a394, ptr %a395) %t396 = load { ptr, i64, i64 }, ptr %a393 store { ptr, i64, i64 } %t396, ptr %a398 store { ptr, i64, i64 } { ptr @.str.1169, i64 1, i64 0 }, ptr %a399 call void @finch_str_concat(ptr %a397, ptr %a398, ptr %a399) store { ptr, i64, i64 } %t396, ptr %a400 call void @finch_str_drop(ptr %a400) %t401 = load { ptr, i64, i64 }, ptr %a397 %t402 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 3 %t403 = getelementptr inbounds { ptr, i64, i64 }, ptr %t402, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1170, i64 2, i64 0 }, ptr %a404 call void @finch_str_join(ptr %a405, ptr %t402, ptr %a404) %t406 = load { ptr, i64, i64 }, ptr %a405 store { ptr, i64, i64 } %t401, ptr %a408 store { ptr, i64, i64 } %t406, ptr %a409 call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) store { ptr, i64, i64 } %t401, ptr %a410 call void @finch_str_drop(ptr %a410) store { ptr, i64, i64 } %t406, ptr %a411 call void @finch_str_drop(ptr %a411) %t412 = load { ptr, i64, i64 }, ptr %a407 store { ptr, i64, i64 } %t412, ptr %a414 store { ptr, i64, i64 } { ptr @.str.1171, i64 6, i64 0 }, ptr %a415 call void @finch_str_concat(ptr %a413, ptr %a414, ptr %a415) store { ptr, i64, i64 } %t412, ptr %a416 call void @finch_str_drop(ptr %a416) %t417 = load { ptr, i64, i64 }, ptr %a413 %t418 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t417) store { ptr, i64, i64 } %t417, ptr %a419 call void @finch_str_drop(ptr %a419) store { ptr, i64, i64 } %t390, ptr %a421 store { ptr, i64, i64 } %t418, ptr %a422 call void @finch_str_concat(ptr %a420, ptr %a421, ptr %a422) store { ptr, i64, i64 } %t390, ptr %a423 call void @finch_str_drop(ptr %a423) store { ptr, i64, i64 } %t418, ptr %a424 call void @finch_str_drop(ptr %a424) %t425 = load { ptr, i64, i64 }, ptr %a420 store { ptr, i64, i64 } %t425, ptr %a427 store { ptr, i64, i64 } { ptr @.str.1172, i64 1, i64 0 }, ptr %a428 call void @finch_str_concat(ptr %a426, ptr %a427, ptr %a428) store { ptr, i64, i64 } %t425, ptr %a429 call void @finch_str_drop(ptr %a429) %t430 = load { ptr, i64, i64 }, ptr %a426 %t431 = load i64, ptr %t289 %t432 = add i64 %t431, 1 call void @finch_arr_reserve(ptr %t288, i64 %t432, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t433 = load ptr, ptr %t288 %t434 = getelementptr inbounds { ptr, i64, i64 }, ptr %t433, i64 %t431 store { ptr, i64, i64 } %t430, ptr %t434 store i64 %t432, ptr %t289 call void @finch.drop.S_ast_Node(ptr %a285) call void @finch.drop.S_gen_Template(ptr %a260) br label %each.step2031 each.step2031: %t435 = load i64, ptr %a249 %t436 = add i64 %t435, 1 store i64 %t436, ptr %a249 br label %each.cond2029 each.end2032: %t437 = load ptr, ptr %a1 %t438 = icmp eq ptr %t437, null br i1 %t438, label %panic2048, label %ok2049 panic2048: call void @finch_panic(ptr @.str.1173, i64 301, ptr @.str.1174) unreachable ok2049: %t439 = getelementptr inbounds %S.gen.Gen, ptr %t437, i32 0, i32 16 store i64 0, ptr %a440 br label %each.cond2050 each.cond2050: %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t439, i32 0, i32 1 %t442 = load i64, ptr %t441 %t443 = load i64, ptr %a440 %t444 = icmp slt i64 %t443, %t442 br i1 %t444, label %each.body2051, label %each.end2053 each.body2051: %t445 = load ptr, ptr %t439 %t446 = getelementptr inbounds %S.gen.StructDef, ptr %t445, i64 %t443 %t447 = load %S.gen.StructDef, ptr %t446 store %S.gen.StructDef %t447, ptr %a448 call void @finch.copy.S_gen_StructDef(ptr %a449, ptr %a448) %t450 = load %S.gen.StructDef, ptr %a449 store %S.gen.StructDef %t450, ptr %a451 %t452 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 2 %t453 = load i1, ptr %t452 br label %logic.from2054 logic.from2054: br i1 %t453, label %logic.end2056, label %logic.rhs2055 logic.rhs2055: %t454 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 5 %t455 = getelementptr inbounds { ptr, i64, i64 }, ptr %t454, i32 0, i32 1 %t456 = load i64, ptr %t455 %t457 = icmp sgt i64 %t456, 0 br label %logic.rend2057 logic.rend2057: br label %logic.end2056 logic.end2056: %t458 = phi i1 [ true, %logic.from2054 ], [ %t457, %logic.rend2057 ] br i1 %t458, label %then2058, label %endif2060 then2058: call void @finch.drop.S_gen_StructDef(ptr %a451) br label %each.step2052 endif2060: %t459 = load ptr, ptr %a1 %t460 = icmp eq ptr %t459, null br i1 %t460, label %panic2061, label %ok2062 panic2061: call void @finch_panic(ptr @.str.1175, i64 305, ptr @.str.1176) unreachable ok2062: %t461 = getelementptr inbounds %S.gen.Gen, ptr %t459, i32 0, i32 0 %t462 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 13 %t463 = load i64, ptr %t462 %t464 = load { ptr, i64, i64 }, ptr %t461 %t465 = extractvalue { ptr, i64, i64 } %t464, 1 %t466 = icmp uge i64 %t463, %t465 br i1 %t466, label %range2063, label %inrange2064 range2063: call void @finch_panic_index(ptr @.str.1177, i64 305, i64 %t463, i64 %t465) unreachable inrange2064: %t467 = extractvalue { ptr, i64, i64 } %t464, 0 %t468 = getelementptr inbounds %S.ast.Program, ptr %t467, i64 %t463 %t469 = getelementptr inbounds %S.ast.Program, ptr %t468, i32 0, i32 6 %t470 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 14 %t471 = load i64, ptr %t470 %t472 = load { ptr, i64, i64 }, ptr %t469 %t473 = extractvalue { ptr, i64, i64 } %t472, 1 %t474 = icmp uge i64 %t471, %t473 br i1 %t474, label %range2065, label %inrange2066 range2065: call void @finch_panic_index(ptr @.str.1178, i64 305, i64 %t471, i64 %t473) unreachable inrange2066: %t475 = extractvalue { ptr, i64, i64 } %t472, 0 %t476 = getelementptr inbounds %S.ast.Node, ptr %t475, i64 %t471 %t477 = load %S.ast.Node, ptr %t476 store %S.ast.Node %t477, ptr %a478 call void @finch.copy.S_ast_Node(ptr %a479, ptr %a478) %t480 = load %S.ast.Node, ptr %a479 store %S.ast.Node %t480, ptr %a481 %t482 = load ptr, ptr %a1 %t483 = icmp eq ptr %t482, null br i1 %t483, label %panic2067, label %ok2068 panic2067: call void @finch_panic(ptr @.str.1179, i64 306, ptr @.str.1180) unreachable ok2068: %t484 = getelementptr inbounds %S.gen.Gen, ptr %t482, i32 0, i32 29 %t485 = getelementptr inbounds { ptr, i64, i64 }, ptr %t484, i32 0, i32 1 %t486 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 0 %t487 = load { ptr, i64, i64 }, ptr %t486 store { ptr, i64, i64 } { ptr @.str.1181, i64 3, i64 0 }, ptr %a489 store { ptr, i64, i64 } %t487, ptr %a490 call void @finch_str_concat(ptr %a488, ptr %a489, ptr %a490) %t491 = load { ptr, i64, i64 }, ptr %a488 store { ptr, i64, i64 } %t491, ptr %a493 store { ptr, i64, i64 } { ptr @.str.1182, i64 1, i64 0 }, ptr %a494 call void @finch_str_concat(ptr %a492, ptr %a493, ptr %a494) store { ptr, i64, i64 } %t491, ptr %a495 call void @finch_str_drop(ptr %a495) %t496 = load { ptr, i64, i64 }, ptr %a492 %t497 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 1 %t498 = load { ptr, i64, i64 }, ptr %t497 store { ptr, i64, i64 } %t496, ptr %a500 store { ptr, i64, i64 } %t498, ptr %a501 call void @finch_str_concat(ptr %a499, ptr %a500, ptr %a501) store { ptr, i64, i64 } %t496, ptr %a502 call void @finch_str_drop(ptr %a502) %t503 = load { ptr, i64, i64 }, ptr %a499 store { ptr, i64, i64 } %t503, ptr %a505 store { ptr, i64, i64 } { ptr @.str.1183, i64 1, i64 0 }, ptr %a506 call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506) store { ptr, i64, i64 } %t503, ptr %a507 call void @finch_str_drop(ptr %a507) %t508 = load { ptr, i64, i64 }, ptr %a504 %t509 = load ptr, ptr %a1 %t510 = icmp eq ptr %t509, null br i1 %t510, label %panic2069, label %ok2070 panic2069: call void @finch_panic(ptr @.str.1184, i64 306, ptr @.str.1185) unreachable ok2070: %t511 = getelementptr inbounds %S.gen.Gen, ptr %t509, i32 0, i32 1 %t512 = getelementptr inbounds %S.ast.Node, ptr %a481, i32 0, i32 13 %t513 = load i64, ptr %t512 %t514 = load { ptr, i64, i64 }, ptr %t511 %t515 = extractvalue { ptr, i64, i64 } %t514, 1 %t516 = icmp uge i64 %t513, %t515 br i1 %t516, label %range2071, label %inrange2072 range2071: call void @finch_panic_index(ptr @.str.1186, i64 306, i64 %t513, i64 %t515) unreachable inrange2072: %t517 = extractvalue { ptr, i64, i64 } %t514, 0 %t518 = getelementptr inbounds { ptr, i64, i64 }, ptr %t517, i64 %t513 %t519 = load { ptr, i64, i64 }, ptr %t518 store { ptr, i64, i64 } %t508, ptr %a521 store { ptr, i64, i64 } %t519, ptr %a522 call void @finch_str_concat(ptr %a520, ptr %a521, ptr %a522) store { ptr, i64, i64 } %t508, ptr %a523 call void @finch_str_drop(ptr %a523) %t524 = load { ptr, i64, i64 }, ptr %a520 store { ptr, i64, i64 } %t524, ptr %a526 store { ptr, i64, i64 } { ptr @.str.1187, i64 1, i64 0 }, ptr %a527 call void @finch_str_concat(ptr %a525, ptr %a526, ptr %a527) store { ptr, i64, i64 } %t524, ptr %a528 call void @finch_str_drop(ptr %a528) %t529 = load { ptr, i64, i64 }, ptr %a525 %t530 = getelementptr inbounds %S.ast.Node, ptr %a481, i32 0, i32 11 %t531 = load i64, ptr %t530 call void @finch_str_from_int(ptr %a532, i64 %t531) %t533 = load { ptr, i64, i64 }, ptr %a532 store { ptr, i64, i64 } %t529, ptr %a535 store { ptr, i64, i64 } %t533, ptr %a536 call void @finch_str_concat(ptr %a534, ptr %a535, ptr %a536) store { ptr, i64, i64 } %t529, ptr %a537 call void @finch_str_drop(ptr %a537) store { ptr, i64, i64 } %t533, ptr %a538 call void @finch_str_drop(ptr %a538) %t539 = load { ptr, i64, i64 }, ptr %a534 store { ptr, i64, i64 } %t539, ptr %a541 store { ptr, i64, i64 } { ptr @.str.1188, i64 1, i64 0 }, ptr %a542 call void @finch_str_concat(ptr %a540, ptr %a541, ptr %a542) store { ptr, i64, i64 } %t539, ptr %a543 call void @finch_str_drop(ptr %a543) %t544 = load { ptr, i64, i64 }, ptr %a540 %t545 = getelementptr inbounds %S.ast.Node, ptr %a481, i32 0, i32 12 %t546 = load i64, ptr %t545 call void @finch_str_from_int(ptr %a547, i64 %t546) %t548 = load { ptr, i64, i64 }, ptr %a547 store { ptr, i64, i64 } %t544, ptr %a550 store { ptr, i64, i64 } %t548, ptr %a551 call void @finch_str_concat(ptr %a549, ptr %a550, ptr %a551) store { ptr, i64, i64 } %t544, ptr %a552 call void @finch_str_drop(ptr %a552) store { ptr, i64, i64 } %t548, ptr %a553 call void @finch_str_drop(ptr %a553) %t554 = load { ptr, i64, i64 }, ptr %a549 %t555 = load i64, ptr %t485 %t556 = add i64 %t555, 1 call void @finch_arr_reserve(ptr %t484, i64 %t556, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t557 = load ptr, ptr %t484 %t558 = getelementptr inbounds { ptr, i64, i64 }, ptr %t557, i64 %t555 store { ptr, i64, i64 } %t554, ptr %t558 store i64 %t556, ptr %t485 %t559 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 11 %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %t559, i32 0, i32 1 %t561 = load i64, ptr %t560 store i64 0, ptr %a562 br label %for.cond2073 for.cond2073: %t563 = load i64, ptr %a562 %t564 = icmp slt i64 %t563, %t561 br i1 %t564, label %for.body2074, label %for.end2076 for.body2074: %t565 = load ptr, ptr %a1 %t566 = icmp eq ptr %t565, null br i1 %t566, label %panic2077, label %ok2078 panic2077: call void @finch_panic(ptr @.str.1189, i64 308, ptr @.str.1190) unreachable ok2078: %t567 = getelementptr inbounds %S.gen.Gen, ptr %t565, i32 0, i32 29 %t568 = getelementptr inbounds { ptr, i64, i64 }, ptr %t567, i32 0, i32 1 %t569 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 0 %t570 = load { ptr, i64, i64 }, ptr %t569 store { ptr, i64, i64 } { ptr @.str.1191, i64 4, i64 0 }, ptr %a572 store { ptr, i64, i64 } %t570, ptr %a573 call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573) %t574 = load { ptr, i64, i64 }, ptr %a571 store { ptr, i64, i64 } %t574, ptr %a576 store { ptr, i64, i64 } { ptr @.str.1192, i64 1, i64 0 }, ptr %a577 call void @finch_str_concat(ptr %a575, ptr %a576, ptr %a577) store { ptr, i64, i64 } %t574, ptr %a578 call void @finch_str_drop(ptr %a578) %t579 = load { ptr, i64, i64 }, ptr %a575 %t580 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 1 %t581 = load { ptr, i64, i64 }, ptr %t580 store { ptr, i64, i64 } %t579, ptr %a583 store { ptr, i64, i64 } %t581, ptr %a584 call void @finch_str_concat(ptr %a582, ptr %a583, ptr %a584) store { ptr, i64, i64 } %t579, ptr %a585 call void @finch_str_drop(ptr %a585) %t586 = load { ptr, i64, i64 }, ptr %a582 store { ptr, i64, i64 } %t586, ptr %a588 store { ptr, i64, i64 } { ptr @.str.1193, i64 1, i64 0 }, ptr %a589 call void @finch_str_concat(ptr %a587, ptr %a588, ptr %a589) store { ptr, i64, i64 } %t586, ptr %a590 call void @finch_str_drop(ptr %a590) %t591 = load { ptr, i64, i64 }, ptr %a587 %t592 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 11 %t593 = load i64, ptr %a562 %t594 = load { ptr, i64, i64 }, ptr %t592 %t595 = extractvalue { ptr, i64, i64 } %t594, 1 %t596 = icmp uge i64 %t593, %t595 br i1 %t596, label %range2079, label %inrange2080 range2079: call void @finch_panic_index(ptr @.str.1194, i64 308, i64 %t593, i64 %t595) unreachable inrange2080: %t597 = extractvalue { ptr, i64, i64 } %t594, 0 %t598 = getelementptr inbounds { ptr, i64, i64 }, ptr %t597, i64 %t593 %t599 = load { ptr, i64, i64 }, ptr %t598 store { ptr, i64, i64 } %t591, ptr %a601 store { ptr, i64, i64 } %t599, ptr %a602 call void @finch_str_concat(ptr %a600, ptr %a601, ptr %a602) store { ptr, i64, i64 } %t591, ptr %a603 call void @finch_str_drop(ptr %a603) %t604 = load { ptr, i64, i64 }, ptr %a600 store { ptr, i64, i64 } %t604, ptr %a606 store { ptr, i64, i64 } { ptr @.str.1195, i64 1, i64 0 }, ptr %a607 call void @finch_str_concat(ptr %a605, ptr %a606, ptr %a607) store { ptr, i64, i64 } %t604, ptr %a608 call void @finch_str_drop(ptr %a608) %t609 = load { ptr, i64, i64 }, ptr %a605 %t610 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 12 %t611 = load i64, ptr %a562 %t612 = load { ptr, i64, i64 }, ptr %t610 %t613 = extractvalue { ptr, i64, i64 } %t612, 1 %t614 = icmp uge i64 %t611, %t613 br i1 %t614, label %range2081, label %inrange2082 range2081: call void @finch_panic_index(ptr @.str.1196, i64 308, i64 %t611, i64 %t613) unreachable inrange2082: %t615 = extractvalue { ptr, i64, i64 } %t612, 0 %t616 = getelementptr inbounds %S.ast.Type, ptr %t615, i64 %t611 %t617 = load %S.ast.Type, ptr %t616 %t618 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t617) store { ptr, i64, i64 } %t609, ptr %a620 store { ptr, i64, i64 } %t618, ptr %a621 call void @finch_str_concat(ptr %a619, ptr %a620, ptr %a621) store { ptr, i64, i64 } %t609, ptr %a622 call void @finch_str_drop(ptr %a622) store { ptr, i64, i64 } %t618, ptr %a623 call void @finch_str_drop(ptr %a623) %t624 = load { ptr, i64, i64 }, ptr %a619 %t625 = load i64, ptr %t568 %t626 = add i64 %t625, 1 call void @finch_arr_reserve(ptr %t567, i64 %t626, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t627 = load ptr, ptr %t567 %t628 = getelementptr inbounds { ptr, i64, i64 }, ptr %t627, i64 %t625 store { ptr, i64, i64 } %t624, ptr %t628 store i64 %t626, ptr %t568 br label %for.step2075 for.step2075: %t629 = load i64, ptr %a562 %t630 = add i64 %t629, 1 store i64 %t630, ptr %a562 br label %for.cond2073 for.end2076: call void @finch.drop.S_ast_Node(ptr %a481) call void @finch.drop.S_gen_StructDef(ptr %a451) br label %each.step2052 each.step2052: %t631 = load i64, ptr %a440 %t632 = add i64 %t631, 1 store i64 %t632, ptr %a440 br label %each.cond2050 each.end2053: %t633 = load ptr, ptr %a1 %t634 = icmp eq ptr %t633, null br i1 %t634, label %panic2083, label %ok2084 panic2083: call void @finch_panic(ptr @.str.1197, i64 311, ptr @.str.1198) unreachable ok2084: %t635 = getelementptr inbounds %S.gen.Gen, ptr %t633, i32 0, i32 0 %t636 = getelementptr inbounds { ptr, i64, i64 }, ptr %t635, i32 0, i32 1 %t637 = load i64, ptr %t636 store i64 0, ptr %a638 br label %for.cond2085 for.cond2085: %t639 = load i64, ptr %a638 %t640 = icmp slt i64 %t639, %t637 br i1 %t640, label %for.body2086, label %for.end2088 for.body2086: %t641 = load ptr, ptr %a1 %t642 = icmp eq ptr %t641, null br i1 %t642, label %panic2089, label %ok2090 panic2089: call void @finch_panic(ptr @.str.1199, i64 312, ptr @.str.1200) unreachable ok2090: %t643 = getelementptr inbounds %S.gen.Gen, ptr %t641, i32 0, i32 0 %t644 = load i64, ptr %a638 %t645 = load { ptr, i64, i64 }, ptr %t643 %t646 = extractvalue { ptr, i64, i64 } %t645, 1 %t647 = icmp uge i64 %t644, %t646 br i1 %t647, label %range2091, label %inrange2092 range2091: call void @finch_panic_index(ptr @.str.1201, i64 312, i64 %t644, i64 %t646) unreachable inrange2092: %t648 = extractvalue { ptr, i64, i64 } %t645, 0 %t649 = getelementptr inbounds %S.ast.Program, ptr %t648, i64 %t644 %t650 = getelementptr inbounds %S.ast.Program, ptr %t649, i32 0, i32 7 store i64 0, ptr %a651 br label %each.cond2093 each.cond2093: %t652 = getelementptr inbounds { ptr, i64, i64 }, ptr %t650, i32 0, i32 1 %t653 = load i64, ptr %t652 %t654 = load i64, ptr %a651 %t655 = icmp slt i64 %t654, %t653 br i1 %t655, label %each.body2094, label %each.end2096 each.body2094: %t656 = load ptr, ptr %t650 %t657 = getelementptr inbounds %S.ast.Node, ptr %t656, i64 %t654 %t658 = load %S.ast.Node, ptr %t657 store %S.ast.Node %t658, ptr %a659 call void @finch.copy.S_ast_Node(ptr %a660, ptr %a659) %t661 = load %S.ast.Node, ptr %a660 store %S.ast.Node %t661, ptr %a662 store { ptr, i64, i64 } { ptr @.str.1202, i64 0, i64 0 }, ptr %a663 store { ptr, i64, i64 } zeroinitializer, ptr %a664 %t665 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 9 store i64 0, ptr %a666 br label %each.cond2097 each.cond2097: %t667 = getelementptr inbounds { ptr, i64, i64 }, ptr %t665, i32 0, i32 1 %t668 = load i64, ptr %t667 %t669 = load i64, ptr %a666 %t670 = icmp slt i64 %t669, %t668 br i1 %t670, label %each.body2098, label %each.end2100 each.body2098: %t671 = load ptr, ptr %t665 %t672 = getelementptr inbounds %S.ast.Node, ptr %t671, i64 %t669 %t673 = load %S.ast.Node, ptr %t672 store %S.ast.Node %t673, ptr %a674 %t675 = getelementptr inbounds { ptr, i64, i64 }, ptr %a664, i32 0, i32 1 %t676 = getelementptr inbounds %S.ast.Node, ptr %a674, i32 0, i32 1 %t677 = load { ptr, i64, i64 }, ptr %t676 store { ptr, i64, i64 } %t677, ptr %a678 call void @finch_str_copy(ptr %a679, ptr %a678) %t680 = load { ptr, i64, i64 }, ptr %a679 %t681 = load i64, ptr %t675 %t682 = add i64 %t681, 1 call void @finch_arr_reserve(ptr %a664, i64 %t682, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t683 = load ptr, ptr %a664 %t684 = getelementptr inbounds { ptr, i64, i64 }, ptr %t683, i64 %t681 store { ptr, i64, i64 } %t680, ptr %t684 store i64 %t682, ptr %t675 br label %each.step2099 each.step2099: %t685 = load i64, ptr %a666 %t686 = add i64 %t685, 1 store i64 %t686, ptr %a666 br label %each.cond2097 each.end2100: %t687 = getelementptr inbounds { ptr, i64, i64 }, ptr %a664, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1203, i64 1, i64 0 }, ptr %a688 call void @finch_str_join(ptr %a689, ptr %a664, ptr %a688) %t690 = load { ptr, i64, i64 }, ptr %a689 %t691 = load { ptr, i64, i64 }, ptr %a663 store { ptr, i64, i64 } %t690, ptr %a663 store { ptr, i64, i64 } %t691, ptr %a692 call void @finch_str_drop(ptr %a692) %t693 = load ptr, ptr %a1 %t694 = icmp eq ptr %t693, null br i1 %t694, label %panic2101, label %ok2102 panic2101: call void @finch_panic(ptr @.str.1204, i64 319, ptr @.str.1205) unreachable ok2102: %t695 = getelementptr inbounds %S.gen.Gen, ptr %t693, i32 0, i32 29 %t696 = getelementptr inbounds { ptr, i64, i64 }, ptr %t695, i32 0, i32 1 %t697 = load ptr, ptr %a1 %t698 = icmp eq ptr %t697, null br i1 %t698, label %panic2103, label %ok2104 panic2103: call void @finch_panic(ptr @.str.1207, i64 319, ptr @.str.1208) unreachable ok2104: %t699 = getelementptr inbounds %S.gen.Gen, ptr %t697, i32 0, i32 0 %t700 = load i64, ptr %a638 %t701 = load { ptr, i64, i64 }, ptr %t699 %t702 = extractvalue { ptr, i64, i64 } %t701, 1 %t703 = icmp uge i64 %t700, %t702 br i1 %t703, label %range2105, label %inrange2106 range2105: call void @finch_panic_index(ptr @.str.1209, i64 319, i64 %t700, i64 %t702) unreachable inrange2106: %t704 = extractvalue { ptr, i64, i64 } %t701, 0 %t705 = getelementptr inbounds %S.ast.Program, ptr %t704, i64 %t700 %t706 = getelementptr inbounds %S.ast.Program, ptr %t705, i32 0, i32 0 %t707 = load { ptr, i64, i64 }, ptr %t706 store { ptr, i64, i64 } { ptr @.str.1206, i64 3, i64 0 }, ptr %a709 store { ptr, i64, i64 } %t707, ptr %a710 call void @finch_str_concat(ptr %a708, ptr %a709, ptr %a710) %t711 = load { ptr, i64, i64 }, ptr %a708 store { ptr, i64, i64 } %t711, ptr %a713 store { ptr, i64, i64 } { ptr @.str.1210, i64 1, i64 0 }, ptr %a714 call void @finch_str_concat(ptr %a712, ptr %a713, ptr %a714) store { ptr, i64, i64 } %t711, ptr %a715 call void @finch_str_drop(ptr %a715) %t716 = load { ptr, i64, i64 }, ptr %a712 %t717 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 1 %t718 = load { ptr, i64, i64 }, ptr %t717 store { ptr, i64, i64 } %t716, ptr %a720 store { ptr, i64, i64 } %t718, ptr %a721 call void @finch_str_concat(ptr %a719, ptr %a720, ptr %a721) store { ptr, i64, i64 } %t716, ptr %a722 call void @finch_str_drop(ptr %a722) %t723 = load { ptr, i64, i64 }, ptr %a719 store { ptr, i64, i64 } %t723, ptr %a725 store { ptr, i64, i64 } { ptr @.str.1211, i64 1, i64 0 }, ptr %a726 call void @finch_str_concat(ptr %a724, ptr %a725, ptr %a726) store { ptr, i64, i64 } %t723, ptr %a727 call void @finch_str_drop(ptr %a727) %t728 = load { ptr, i64, i64 }, ptr %a724 %t729 = load ptr, ptr %a1 %t730 = icmp eq ptr %t729, null br i1 %t730, label %panic2107, label %ok2108 panic2107: call void @finch_panic(ptr @.str.1212, i64 319, ptr @.str.1213) unreachable ok2108: %t731 = getelementptr inbounds %S.gen.Gen, ptr %t729, i32 0, i32 1 %t732 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 13 %t733 = load i64, ptr %t732 %t734 = load { ptr, i64, i64 }, ptr %t731 %t735 = extractvalue { ptr, i64, i64 } %t734, 1 %t736 = icmp uge i64 %t733, %t735 br i1 %t736, label %range2109, label %inrange2110 range2109: call void @finch_panic_index(ptr @.str.1214, i64 319, i64 %t733, i64 %t735) unreachable inrange2110: %t737 = extractvalue { ptr, i64, i64 } %t734, 0 %t738 = getelementptr inbounds { ptr, i64, i64 }, ptr %t737, i64 %t733 %t739 = load { ptr, i64, i64 }, ptr %t738 store { ptr, i64, i64 } %t728, ptr %a741 store { ptr, i64, i64 } %t739, ptr %a742 call void @finch_str_concat(ptr %a740, ptr %a741, ptr %a742) store { ptr, i64, i64 } %t728, ptr %a743 call void @finch_str_drop(ptr %a743) %t744 = load { ptr, i64, i64 }, ptr %a740 store { ptr, i64, i64 } %t744, ptr %a746 store { ptr, i64, i64 } { ptr @.str.1215, i64 1, i64 0 }, ptr %a747 call void @finch_str_concat(ptr %a745, ptr %a746, ptr %a747) store { ptr, i64, i64 } %t744, ptr %a748 call void @finch_str_drop(ptr %a748) %t749 = load { ptr, i64, i64 }, ptr %a745 %t750 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 11 %t751 = load i64, ptr %t750 call void @finch_str_from_int(ptr %a752, i64 %t751) %t753 = load { ptr, i64, i64 }, ptr %a752 store { ptr, i64, i64 } %t749, ptr %a755 store { ptr, i64, i64 } %t753, ptr %a756 call void @finch_str_concat(ptr %a754, ptr %a755, ptr %a756) store { ptr, i64, i64 } %t749, ptr %a757 call void @finch_str_drop(ptr %a757) store { ptr, i64, i64 } %t753, ptr %a758 call void @finch_str_drop(ptr %a758) %t759 = load { ptr, i64, i64 }, ptr %a754 store { ptr, i64, i64 } %t759, ptr %a761 store { ptr, i64, i64 } { ptr @.str.1216, i64 1, i64 0 }, ptr %a762 call void @finch_str_concat(ptr %a760, ptr %a761, ptr %a762) store { ptr, i64, i64 } %t759, ptr %a763 call void @finch_str_drop(ptr %a763) %t764 = load { ptr, i64, i64 }, ptr %a760 %t765 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 12 %t766 = load i64, ptr %t765 call void @finch_str_from_int(ptr %a767, i64 %t766) %t768 = load { ptr, i64, i64 }, ptr %a767 store { ptr, i64, i64 } %t764, ptr %a770 store { ptr, i64, i64 } %t768, ptr %a771 call void @finch_str_concat(ptr %a769, ptr %a770, ptr %a771) store { ptr, i64, i64 } %t764, ptr %a772 call void @finch_str_drop(ptr %a772) store { ptr, i64, i64 } %t768, ptr %a773 call void @finch_str_drop(ptr %a773) %t774 = load { ptr, i64, i64 }, ptr %a769 store { ptr, i64, i64 } %t774, ptr %a776 store { ptr, i64, i64 } { ptr @.str.1217, i64 1, i64 0 }, ptr %a777 call void @finch_str_concat(ptr %a775, ptr %a776, ptr %a777) store { ptr, i64, i64 } %t774, ptr %a778 call void @finch_str_drop(ptr %a778) %t779 = load { ptr, i64, i64 }, ptr %a775 %t780 = load { ptr, i64, i64 }, ptr %a663 store { ptr, i64, i64 } %t779, ptr %a782 store { ptr, i64, i64 } %t780, ptr %a783 call void @finch_str_concat(ptr %a781, ptr %a782, ptr %a783) store { ptr, i64, i64 } %t779, ptr %a784 call void @finch_str_drop(ptr %a784) %t785 = load { ptr, i64, i64 }, ptr %a781 %t786 = load i64, ptr %t696 %t787 = add i64 %t786, 1 call void @finch_arr_reserve(ptr %t695, i64 %t787, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t788 = load ptr, ptr %t695 %t789 = getelementptr inbounds { ptr, i64, i64 }, ptr %t788, i64 %t786 store { ptr, i64, i64 } %t785, ptr %t789 store i64 %t787, ptr %t696 call void @finch.drop.arr_str(ptr %a664) call void @finch_str_drop(ptr %a663) call void @finch.drop.S_ast_Node(ptr %a662) br label %each.step2095 each.step2095: %t790 = load i64, ptr %a651 %t791 = add i64 %t790, 1 store i64 %t791, ptr %a651 br label %each.cond2093 each.end2096: br label %for.step2087 for.step2087: %t792 = load i64, ptr %a638 %t793 = add i64 %t792, 1 store i64 %t793, ptr %a638 br label %for.cond2085 for.end2088: ret void } define internal void @finch.gen.fail(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic2111, label %ok2112 panic2111: call void @finch_panic(ptr @.str.1218, i64 325, ptr @.str.1219) unreachable ok2112: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 %t7 = load i1, ptr %t6 br label %logic.from2113 logic.from2113: br i1 %t7, label %logic.rhs2114, label %logic.end2115 logic.rhs2114: %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic2116, label %ok2117 panic2116: call void @finch_panic(ptr @.str.1220, i64 325, ptr @.str.1221) unreachable ok2117: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 29 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = icmp sgt i64 %t12, 0 br label %logic.rend2118 logic.rend2118: br label %logic.end2115 logic.end2115: %t14 = phi i1 [ false, %logic.from2113 ], [ %t13, %logic.rend2118 ] br i1 %t14, label %then2119, label %endif2121 then2119: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic2122, label %ok2123 panic2122: call void @finch_panic(ptr @.str.1222, i64 326, ptr @.str.1223) unreachable ok2123: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 29 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1224, i64 1, i64 0 }, ptr %a19 call void @finch_str_join(ptr %a20, ptr %t17, ptr %a19) %t21 = load { ptr, i64, i64 }, ptr %a20 %t22 = extractvalue { ptr, i64, i64 } %t21, 1 %t23 = trunc i64 %t22 to i32 %t24 = extractvalue { ptr, i64, i64 } %t21, 0 %t25 = icmp eq ptr %t24, null %t26 = select i1 %t25, ptr @.str.1225, ptr %t24 %t27 = call i32 (ptr, ...) @printf(ptr @.str.1226, i32 %t23, ptr %t26) store { ptr, i64, i64 } %t21, ptr %a28 call void @finch_str_drop(ptr %a28) %t29 = call i32 (ptr, ...) @printf(ptr @.str.1227) br label %endif2121 endif2121: %t30 = load ptr, ptr %a1 %t31 = icmp eq ptr %t30, null br i1 %t31, label %panic2124, label %ok2125 panic2124: call void @finch_panic(ptr @.str.1228, i64 328, ptr @.str.1229) unreachable ok2125: %t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 1 %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t34 = load i64, ptr %t33 %t35 = load { ptr, i64, i64 }, ptr %t32 %t36 = extractvalue { ptr, i64, i64 } %t35, 1 %t37 = icmp uge i64 %t34, %t36 br i1 %t37, label %range2126, label %inrange2127 range2126: call void @finch_panic_index(ptr @.str.1230, i64 328, i64 %t34, i64 %t36) unreachable inrange2127: %t38 = extractvalue { ptr, i64, i64 } %t35, 0 %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i64 %t34 %t40 = load { ptr, i64, i64 }, ptr %t39 store { ptr, i64, i64 } %t40, ptr %a42 store { ptr, i64, i64 } { ptr @.str.1231, i64 1, i64 0 }, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) %t44 = load { ptr, i64, i64 }, ptr %a41 %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t46 = load i64, ptr %t45 call void @finch_str_from_int(ptr %a47, i64 %t46) %t48 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t44, ptr %a50 store { ptr, i64, i64 } %t48, ptr %a51 call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) store { ptr, i64, i64 } %t44, ptr %a52 call void @finch_str_drop(ptr %a52) store { ptr, i64, i64 } %t48, ptr %a53 call void @finch_str_drop(ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t54, ptr %a56 store { ptr, i64, i64 } { ptr @.str.1232, i64 1, i64 0 }, ptr %a57 call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) store { ptr, i64, i64 } %t54, ptr %a58 call void @finch_str_drop(ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a55 %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t61 = load i64, ptr %t60 call void @finch_str_from_int(ptr %a62, i64 %t61) %t63 = load { ptr, i64, i64 }, ptr %a62 store { ptr, i64, i64 } %t59, ptr %a65 store { ptr, i64, i64 } %t63, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) store { ptr, i64, i64 } %t59, ptr %a67 call void @finch_str_drop(ptr %a67) store { ptr, i64, i64 } %t63, ptr %a68 call void @finch_str_drop(ptr %a68) %t69 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } %t69, ptr %a71 store { ptr, i64, i64 } { ptr @.str.1233, i64 9, i64 0 }, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) store { ptr, i64, i64 } %t69, ptr %a73 call void @finch_str_drop(ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a70 %t75 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t74, ptr %a77 store { ptr, i64, i64 } %t75, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) store { ptr, i64, i64 } %t74, ptr %a79 call void @finch_str_drop(ptr %a79) %t80 = load { ptr, i64, i64 }, ptr %a76 %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null br i1 %t82, label %panic2128, label %ok2129 panic2128: call void @finch_panic(ptr @.str.1234, i64 328, ptr @.str.1235) unreachable ok2129: %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 20 %t84 = load { ptr, i64, i64 }, ptr %t83 store { ptr, i64, i64 } %t80, ptr %a86 store { ptr, i64, i64 } %t84, ptr %a87 call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) store { ptr, i64, i64 } %t80, ptr %a88 call void @finch_str_drop(ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a85 %t90 = extractvalue { ptr, i64, i64 } %t89, 1 %t91 = trunc i64 %t90 to i32 %t92 = extractvalue { ptr, i64, i64 } %t89, 0 %t93 = icmp eq ptr %t92, null %t94 = select i1 %t93, ptr @.str.1236, ptr %t92 %t95 = call i32 (ptr, ...) @printf(ptr @.str.1237, i32 %t91, ptr %t94) store { ptr, i64, i64 } %t89, ptr %a96 call void @finch_str_drop(ptr %a96) %t97 = call i32 (ptr, ...) @printf(ptr @.str.1238) %t98 = trunc i64 1 to i32 %t99 = call i32 @fflush(ptr null) call void @exit(i32 %t98) ret void } define internal void @finch.gen.emit(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2130, label %ok2131 panic2130: call void @finch_panic(ptr @.str.1239, i64 334, ptr @.str.1240) unreachable ok2131: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 36 %t6 = load i64, ptr %t5 %t7 = icmp sge i64 %t6, 0 br label %logic.from2132 logic.from2132: br i1 %t7, label %logic.rhs2133, label %logic.end2134 logic.rhs2133: %t8 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t8, ptr %a9 store { ptr, i64, i64 } { ptr @.str.1242, i64 5, i64 0 }, ptr %a11 %t12 = call i64 @finch_str_find(ptr %a9, ptr %a11) %t13 = icmp sge i64 %t12, 0 br label %logic.rend2135 logic.rend2135: br label %logic.end2134 logic.end2134: %t14 = phi i1 [ false, %logic.from2132 ], [ %t13, %logic.rend2135 ] br i1 %t14, label %then2136, label %endif2138 then2136: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic2139, label %ok2140 panic2139: call void @finch_panic(ptr @.str.1243, i64 335, ptr @.str.1244) unreachable ok2140: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 4 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1245, i64 2, i64 0 }, ptr %a21 store { ptr, i64, i64 } %t19, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a20 store { ptr, i64, i64 } %t23, ptr %a25 store { ptr, i64, i64 } { ptr @.str.1246, i64 8, i64 0 }, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) store { ptr, i64, i64 } %t23, ptr %a27 call void @finch_str_drop(ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a24 %t29 = load ptr, ptr %a1 %t30 = call i64 @finch.gen.dbgLocation(ptr %t29) call void @finch_str_from_int(ptr %a31, i64 %t30) %t32 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t28, ptr %a34 store { ptr, i64, i64 } %t32, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) store { ptr, i64, i64 } %t28, ptr %a36 call void @finch_str_drop(ptr %a36) store { ptr, i64, i64 } %t32, ptr %a37 call void @finch_str_drop(ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a33 %t39 = load i64, ptr %t18 %t40 = add i64 %t39, 1 call void @finch_arr_reserve(ptr %t17, i64 %t40, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t41 = load ptr, ptr %t17 %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i64 %t39 store { ptr, i64, i64 } %t38, ptr %t42 store i64 %t40, ptr %t18 ret void endif2138: %t43 = load ptr, ptr %a1 %t44 = icmp eq ptr %t43, null br i1 %t44, label %panic2141, label %ok2142 panic2141: call void @finch_panic(ptr @.str.1247, i64 338, ptr @.str.1248) unreachable ok2142: %t45 = getelementptr inbounds %S.gen.Gen, ptr %t43, i32 0, i32 4 %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i32 0, i32 1 %t47 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1249, i64 2, i64 0 }, ptr %a49 store { ptr, i64, i64 } %t47, ptr %a50 call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) %t51 = load { ptr, i64, i64 }, ptr %a48 %t52 = load i64, ptr %t46 %t53 = add i64 %t52, 1 call void @finch_arr_reserve(ptr %t45, i64 %t53, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t54 = load ptr, ptr %t45 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 store { ptr, i64, i64 } %t51, ptr %t55 store i64 %t53, ptr %t46 ret void } define internal { ptr, i64, i64 } @finch.gen.tmpName(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic2143, label %ok2144 panic2143: call void @finch_panic(ptr @.str.1250, i64 342, ptr @.str.1251) unreachable ok2144: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 6 %t5 = load i64, ptr %t4 %t6 = add i64 %t5, 1 store i64 %t6, ptr %t4 %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null br i1 %t8, label %panic2145, label %ok2146 panic2145: call void @finch_panic(ptr @.str.1253, i64 343, ptr @.str.1254) unreachable ok2146: %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 6 %t10 = load i64, ptr %t9 call void @finch_str_from_int(ptr %a11, i64 %t10) %t12 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1252, i64 2, i64 0 }, ptr %a14 store { ptr, i64, i64 } %t12, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) store { ptr, i64, i64 } %t12, ptr %a16 call void @finch_str_drop(ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a13 ret { ptr, i64, i64 } %t17 } define internal { ptr, i64, i64 } @finch.gen.newLabel(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2147, label %ok2148 panic2147: call void @finch_panic(ptr @.str.1255, i64 347, ptr @.str.1256) unreachable ok2148: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 7 %t6 = load i64, ptr %t5 %t7 = add i64 %t6, 1 store i64 %t7, ptr %t5 %t8 = load { ptr, i64, i64 }, ptr %a2 %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null br i1 %t10, label %panic2149, label %ok2150 panic2149: call void @finch_panic(ptr @.str.1257, i64 348, ptr @.str.1258) unreachable ok2150: %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 7 %t12 = load i64, ptr %t11 call void @finch_str_from_int(ptr %a13, i64 %t12) %t14 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t8, ptr %a16 store { ptr, i64, i64 } %t14, ptr %a17 call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) store { ptr, i64, i64 } %t14, ptr %a18 call void @finch_str_drop(ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a15 ret { ptr, i64, i64 } %t19 } define internal void @finch.gen.label(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2151, label %ok2152 panic2151: call void @finch_panic(ptr @.str.1259, i64 352, ptr @.str.1260) unreachable ok2152: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 4 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t7, ptr %a9 store { ptr, i64, i64 } { ptr @.str.1261, i64 1, i64 0 }, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) %t11 = load { ptr, i64, i64 }, ptr %a8 %t12 = load i64, ptr %t6 %t13 = add i64 %t12, 1 call void @finch_arr_reserve(ptr %t5, i64 %t13, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t14 = load ptr, ptr %t5 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i64 %t12 store { ptr, i64, i64 } %t11, ptr %t15 store i64 %t13, ptr %t6 %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null br i1 %t17, label %panic2153, label %ok2154 panic2153: call void @finch_panic(ptr @.str.1262, i64 353, ptr @.str.1263) unreachable ok2154: %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 9 store i1 false, ptr %t18 ret void } define internal void @finch.gen.br(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2155, label %ok2156 panic2155: call void @finch_panic(ptr @.str.1264, i64 357, ptr @.str.1265) unreachable ok2156: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 9 %t6 = load i1, ptr %t5 %t7 = xor i1 %t6, true br i1 %t7, label %then2157, label %endif2159 then2157: %t8 = load ptr, ptr %a1 %t9 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1266, i64 10, i64 0 }, ptr %a11 store { ptr, i64, i64 } %t9, ptr %a12 call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) %t13 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.emit(ptr %t8, { ptr, i64, i64 } %t13) store { ptr, i64, i64 } %t13, ptr %a14 call void @finch_str_drop(ptr %a14) %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic2160, label %ok2161 panic2160: call void @finch_panic(ptr @.str.1267, i64 359, ptr @.str.1268) unreachable ok2161: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 9 store i1 true, ptr %t17 br label %endif2159 endif2159: ret void } define internal void @finch.gen.condBr(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1269, i64 6, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t6, ptr %a9 call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) %t10 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t10, ptr %a12 store { ptr, i64, i64 } { ptr @.str.1270, i64 9, i64 0 }, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) store { ptr, i64, i64 } %t10, ptr %a14 call void @finch_str_drop(ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a11 %t16 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t15, ptr %a18 store { ptr, i64, i64 } %t16, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) store { ptr, i64, i64 } %t15, ptr %a20 call void @finch_str_drop(ptr %a20) %t21 = load { ptr, i64, i64 }, ptr %a17 store { ptr, i64, i64 } %t21, ptr %a23 store { ptr, i64, i64 } { ptr @.str.1271, i64 9, i64 0 }, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) store { ptr, i64, i64 } %t21, ptr %a25 call void @finch_str_drop(ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a22 %t27 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t26, ptr %a29 store { ptr, i64, i64 } %t27, ptr %a30 call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) store { ptr, i64, i64 } %t26, ptr %a31 call void @finch_str_drop(ptr %a31) %t32 = load { ptr, i64, i64 }, ptr %a28 call void @finch.gen.emit(ptr %t5, { ptr, i64, i64 } %t32) store { ptr, i64, i64 } %t32, ptr %a33 call void @finch_str_drop(ptr %a33) %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null br i1 %t35, label %panic2162, label %ok2163 panic2162: call void @finch_panic(ptr @.str.1272, i64 365, ptr @.str.1273) unreachable ok2163: %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 9 store i1 true, ptr %t36 ret void } define internal { ptr, i64, i64 } @finch.gen.alloca(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2164, label %ok2165 panic2164: call void @finch_panic(ptr @.str.1274, i64 369, ptr @.str.1275) unreachable ok2165: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 6 %t6 = load i64, ptr %t5 %t7 = add i64 %t6, 1 store i64 %t7, ptr %t5 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic2166, label %ok2167 panic2166: call void @finch_panic(ptr @.str.1277, i64 370, ptr @.str.1278) unreachable ok2167: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 6 %t11 = load i64, ptr %t10 call void @finch_str_from_int(ptr %a12, i64 %t11) %t13 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } { ptr @.str.1276, i64 2, i64 0 }, ptr %a15 store { ptr, i64, i64 } %t13, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) store { ptr, i64, i64 } %t13, ptr %a17 call void @finch_str_drop(ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null br i1 %t21, label %panic2168, label %ok2169 panic2168: call void @finch_panic(ptr @.str.1279, i64 371, ptr @.str.1280) unreachable ok2169: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 5 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.1281, i64 2, i64 0 }, ptr %a26 store { ptr, i64, i64 } %t24, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t28, ptr %a30 store { ptr, i64, i64 } { ptr @.str.1282, i64 10, i64 0 }, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) store { ptr, i64, i64 } %t28, ptr %a32 call void @finch_str_drop(ptr %a32) %t33 = load { ptr, i64, i64 }, ptr %a29 %t34 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t33, ptr %a36 store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) store { ptr, i64, i64 } %t33, ptr %a38 call void @finch_str_drop(ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t39, ptr %a41 store { ptr, i64, i64 } { ptr @.str.1283, i64 10, i64 0 }, ptr %a42 call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) store { ptr, i64, i64 } %t39, ptr %a43 call void @finch_str_drop(ptr %a43) %t44 = load { ptr, i64, i64 }, ptr %a40 %t45 = load i64, ptr %t23 %t46 = add i64 %t45, 1 call void @finch_arr_reserve(ptr %t22, i64 %t46, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t47 = load ptr, ptr %t22 %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i64 %t45 store { ptr, i64, i64 } %t44, ptr %t48 store i64 %t46, ptr %t23 %t49 = load { ptr, i64, i64 }, ptr %a19 ret { ptr, i64, i64 } %t49 } define internal { ptr, i64, i64 } @finch.gen.load(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = call { ptr, i64, i64 } @finch.gen.tmpName(ptr %t4) store { ptr, i64, i64 } %t5, ptr %a6 %t7 = load ptr, ptr %a1 %t8 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t8, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1284, i64 8, i64 0 }, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 %t13 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t12, ptr %a15 store { ptr, i64, i64 } %t13, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) store { ptr, i64, i64 } %t12, ptr %a17 call void @finch_str_drop(ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t18, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1285, i64 6, i64 0 }, ptr %a21 call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) store { ptr, i64, i64 } %t18, ptr %a22 call void @finch_str_drop(ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a19 %t24 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t23, ptr %a26 store { ptr, i64, i64 } %t24, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) store { ptr, i64, i64 } %t23, ptr %a28 call void @finch_str_drop(ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a25 call void @finch.gen.emit(ptr %t7, { ptr, i64, i64 } %t29) store { ptr, i64, i64 } %t29, ptr %a30 call void @finch_str_drop(ptr %a30) %t31 = load { ptr, i64, i64 }, ptr %a6 ret { ptr, i64, i64 } %t31 } define internal void @finch.gen.store(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1286, i64 6, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t6, ptr %a9 call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) %t10 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t10, ptr %a12 store { ptr, i64, i64 } { ptr @.str.1287, i64 1, i64 0 }, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) store { ptr, i64, i64 } %t10, ptr %a14 call void @finch_str_drop(ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a11 %t16 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t15, ptr %a18 store { ptr, i64, i64 } %t16, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) store { ptr, i64, i64 } %t15, ptr %a20 call void @finch_str_drop(ptr %a20) %t21 = load { ptr, i64, i64 }, ptr %a17 store { ptr, i64, i64 } %t21, ptr %a23 store { ptr, i64, i64 } { ptr @.str.1288, i64 6, i64 0 }, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) store { ptr, i64, i64 } %t21, ptr %a25 call void @finch_str_drop(ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a22 %t27 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t26, ptr %a29 store { ptr, i64, i64 } %t27, ptr %a30 call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) store { ptr, i64, i64 } %t26, ptr %a31 call void @finch_str_drop(ptr %a31) %t32 = load { ptr, i64, i64 }, ptr %a28 call void @finch.gen.emit(ptr %t5, { ptr, i64, i64 } %t32) store { ptr, i64, i64 } %t32, ptr %a33 call void @finch_str_drop(ptr %a33) ret void } define internal { ptr, i64, i64 } @finch.gen.spill(ptr %p0, %S.gen.Val %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.Val, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.gen.Val %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load ptr, ptr %a1 %t5 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t6 = load %S.ast.Type, ptr %t5 %t7 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t4, %S.ast.Type %t6) %t8 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t3, { ptr, i64, i64 } %t7) store { ptr, i64, i64 } %t7, ptr %a9 call void @finch_str_drop(ptr %a9) store { ptr, i64, i64 } %t8, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = load ptr, ptr %a1 %t13 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t14 = load %S.ast.Type, ptr %t13 %t15 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t12, %S.ast.Type %t14) %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t17 = load { ptr, i64, i64 }, ptr %t16 %t18 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.store(ptr %t11, { ptr, i64, i64 } %t15, { ptr, i64, i64 } %t17, { ptr, i64, i64 } %t18) store { ptr, i64, i64 } %t15, ptr %a19 call void @finch_str_drop(ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t20 } define internal { ptr, i64, i64 } @finch.gen.op(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = call { ptr, i64, i64 } @finch.gen.tmpName(ptr %t3) store { ptr, i64, i64 } %t4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t7, ptr %a9 store { ptr, i64, i64 } { ptr @.str.1289, i64 3, i64 0 }, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) %t11 = load { ptr, i64, i64 }, ptr %a8 %t12 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t11, ptr %a14 store { ptr, i64, i64 } %t12, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) store { ptr, i64, i64 } %t11, ptr %a16 call void @finch_str_drop(ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a13 call void @finch.gen.emit(ptr %t6, { ptr, i64, i64 } %t17) store { ptr, i64, i64 } %t17, ptr %a18 call void @finch_str_drop(ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a5 ret { ptr, i64, i64 } %t19 } define internal i1 @finch.gen.has({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca i64, align 16 %a8 = alloca i64, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t4 = load { ptr, i64, i64 }, ptr %a2 store i64 -1, ptr %a5 %t6 = load i64, ptr %t3 %t7 = load ptr, ptr %a1 store i64 0, ptr %a8 br label %find.cond2170 find.cond2170: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t6 br i1 %t10, label %find.body2171, label %find.end2174 find.body2171: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 %t9 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } %t4, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 br i1 %t16, label %find.hit2172, label %find.next2173 find.hit2172: store i64 %t9, ptr %a5 br label %find.end2174 find.next2173: %t17 = add i64 %t9, 1 store i64 %t17, ptr %a8 br label %find.cond2170 find.end2174: %t18 = load i64, ptr %a5 %t19 = icmp sge i64 %t18, 0 ret i1 %t19 } define internal %S.ast.Type @finch.gen.T({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 %t3 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %t2) ret %S.ast.Type %t3 } define internal i1 @finch.gen.isSigned(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 call void @finch_str_copy(ptr %a5, ptr %a4) %t6 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t6, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t8, ptr %a9 store { ptr, i64, i64 } { ptr @.str.1290, i64 3, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) %t12 = icmp ne i32 %t11, 0 br label %logic.from2175 logic.from2175: br i1 %t12, label %logic.end2177, label %logic.rhs2176 logic.rhs2176: %t13 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1291, i64 2, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 br label %logic.rend2178 logic.rend2178: br label %logic.end2177 logic.end2177: %t18 = phi i1 [ true, %logic.from2175 ], [ %t17, %logic.rend2178 ] br label %logic.from2179 logic.from2179: br i1 %t18, label %logic.end2181, label %logic.rhs2180 logic.rhs2180: %t19 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1292, i64 3, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 br label %logic.rend2182 logic.rend2182: br label %logic.end2181 logic.end2181: %t24 = phi i1 [ true, %logic.from2179 ], [ %t23, %logic.rend2182 ] br label %logic.from2183 logic.from2183: br i1 %t24, label %logic.end2185, label %logic.rhs2184 logic.rhs2184: %t25 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.1293, i64 3, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 br label %logic.rend2186 logic.rend2186: br label %logic.end2185 logic.end2185: %t30 = phi i1 [ true, %logic.from2183 ], [ %t29, %logic.rend2186 ] call void @finch_str_drop(ptr %a7) ret i1 %t30 } define internal i1 @finch.gen.isUnsigned(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 call void @finch_str_copy(ptr %a5, ptr %a4) %t6 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t6, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t8, ptr %a9 store { ptr, i64, i64 } { ptr @.str.1294, i64 2, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) %t12 = icmp ne i32 %t11, 0 br label %logic.from2187 logic.from2187: br i1 %t12, label %logic.end2189, label %logic.rhs2188 logic.rhs2188: %t13 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1295, i64 3, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 br label %logic.rend2190 logic.rend2190: br label %logic.end2189 logic.end2189: %t18 = phi i1 [ true, %logic.from2187 ], [ %t17, %logic.rend2190 ] br label %logic.from2191 logic.from2191: br i1 %t18, label %logic.end2193, label %logic.rhs2192 logic.rhs2192: %t19 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1296, i64 3, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 br label %logic.rend2194 logic.rend2194: br label %logic.end2193 logic.end2193: %t24 = phi i1 [ true, %logic.from2191 ], [ %t23, %logic.rend2194 ] br label %logic.from2195 logic.from2195: br i1 %t24, label %logic.end2197, label %logic.rhs2196 logic.rhs2196: %t25 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.1297, i64 3, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 br label %logic.rend2198 logic.rend2198: br label %logic.end2197 logic.end2197: %t30 = phi i1 [ true, %logic.from2195 ], [ %t29, %logic.rend2198 ] call void @finch_str_drop(ptr %a7) ret i1 %t30 } define internal i1 @finch.gen.isInt(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = load %S.ast.Type, ptr %a1 %t3 = call i1 @finch.gen.isSigned(%S.ast.Type %t2) br label %logic.from2199 logic.from2199: br i1 %t3, label %logic.end2201, label %logic.rhs2200 logic.rhs2200: %t4 = load %S.ast.Type, ptr %a1 %t5 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t4) br label %logic.rend2202 logic.rend2202: br label %logic.end2201 logic.end2201: %t6 = phi i1 [ true, %logic.from2199 ], [ %t5, %logic.rend2202 ] ret i1 %t6 } define internal i1 @finch.gen.isFloat(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.1298, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 br label %logic.from2203 logic.from2203: br i1 %t7, label %logic.end2205, label %logic.rhs2204 logic.rhs2204: %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1299, i64 3, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 br label %logic.rend2206 logic.rend2206: br label %logic.end2205 logic.end2205: %t14 = phi i1 [ true, %logic.from2203 ], [ %t13, %logic.rend2206 ] ret i1 %t14 } define internal i1 @finch.gen.isNumber(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = load %S.ast.Type, ptr %a1 %t3 = call i1 @finch.gen.isInt(%S.ast.Type %t2) br label %logic.from2207 logic.from2207: br i1 %t3, label %logic.end2209, label %logic.rhs2208 logic.rhs2208: %t4 = load %S.ast.Type, ptr %a1 %t5 = call i1 @finch.gen.isFloat(%S.ast.Type %t4) br label %logic.rend2210 logic.rend2210: br label %logic.end2209 logic.end2209: %t6 = phi i1 [ true, %logic.from2207 ], [ %t5, %logic.rend2210 ] ret i1 %t6 } define internal i64 @finch.gen.bitsOf(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 call void @finch_str_copy(ptr %a5, ptr %a4) %t6 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t6, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t8, ptr %a9 store { ptr, i64, i64 } { ptr @.str.1300, i64 4, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then2211, label %endif2213 then2211: call void @finch_str_drop(ptr %a7) ret i64 1 endif2213: %t13 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1301, i64 4, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 br label %logic.from2214 logic.from2214: br i1 %t17, label %logic.end2216, label %logic.rhs2215 logic.rhs2215: %t18 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } { ptr @.str.1302, i64 2, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 br label %logic.rend2217 logic.rend2217: br label %logic.end2216 logic.end2216: %t23 = phi i1 [ true, %logic.from2214 ], [ %t22, %logic.rend2217 ] br label %logic.from2218 logic.from2218: br i1 %t23, label %logic.end2220, label %logic.rhs2219 logic.rhs2219: %t24 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t24, ptr %a25 store { ptr, i64, i64 } { ptr @.str.1303, i64 2, i64 0 }, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 br label %logic.rend2221 logic.rend2221: br label %logic.end2220 logic.end2220: %t29 = phi i1 [ true, %logic.from2218 ], [ %t28, %logic.rend2221 ] br i1 %t29, label %then2222, label %endif2224 then2222: call void @finch_str_drop(ptr %a7) ret i64 8 endif2224: %t30 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t30, ptr %a31 store { ptr, i64, i64 } { ptr @.str.1304, i64 3, i64 0 }, ptr %a32 %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) %t34 = icmp ne i32 %t33, 0 br label %logic.from2225 logic.from2225: br i1 %t34, label %logic.end2227, label %logic.rhs2226 logic.rhs2226: %t35 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.1305, i64 3, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 br label %logic.rend2228 logic.rend2228: br label %logic.end2227 logic.end2227: %t40 = phi i1 [ true, %logic.from2225 ], [ %t39, %logic.rend2228 ] br i1 %t40, label %then2229, label %endif2231 then2229: call void @finch_str_drop(ptr %a7) ret i64 16 endif2231: %t41 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.1306, i64 3, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 br label %logic.from2232 logic.from2232: br i1 %t45, label %logic.end2234, label %logic.rhs2233 logic.rhs2233: %t46 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t46, ptr %a47 store { ptr, i64, i64 } { ptr @.str.1307, i64 3, i64 0 }, ptr %a48 %t49 = call i32 @finch_str_eq(ptr %a47, ptr %a48) %t50 = icmp ne i32 %t49, 0 br label %logic.rend2235 logic.rend2235: br label %logic.end2234 logic.end2234: %t51 = phi i1 [ true, %logic.from2232 ], [ %t50, %logic.rend2235 ] br label %logic.from2236 logic.from2236: br i1 %t51, label %logic.end2238, label %logic.rhs2237 logic.rhs2237: %t52 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.1308, i64 3, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 br label %logic.rend2239 logic.rend2239: br label %logic.end2238 logic.end2238: %t57 = phi i1 [ true, %logic.from2236 ], [ %t56, %logic.rend2239 ] br i1 %t57, label %then2240, label %endif2242 then2240: call void @finch_str_drop(ptr %a7) ret i64 32 endif2242: call void @finch_str_drop(ptr %a7) ret i64 64 } define internal i1 @finch.gen.widens(%S.ast.Type %p0, %S.ast.Type %p1) { entry: %a1 = alloca %S.ast.Type, align 16 %a2 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = load %S.ast.Type, ptr %a1 %t4 = call i1 @finch.gen.isInt(%S.ast.Type %t3) %t5 = xor i1 %t4, true br label %logic.from2243 logic.from2243: br i1 %t5, label %logic.end2245, label %logic.rhs2244 logic.rhs2244: %t6 = load %S.ast.Type, ptr %a2 %t7 = call i1 @finch.gen.isInt(%S.ast.Type %t6) %t8 = xor i1 %t7, true br label %logic.rend2246 logic.rend2246: br label %logic.end2245 logic.end2245: %t9 = phi i1 [ true, %logic.from2243 ], [ %t8, %logic.rend2246 ] br i1 %t9, label %then2247, label %endif2249 then2247: ret i1 false endif2249: %t10 = load %S.ast.Type, ptr %a1 %t11 = call i1 @finch.gen.isSigned(%S.ast.Type %t10) br label %logic.from2250 logic.from2250: br i1 %t11, label %logic.rhs2251, label %logic.end2252 logic.rhs2251: %t12 = load %S.ast.Type, ptr %a2 %t13 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t12) br label %logic.rend2253 logic.rend2253: br label %logic.end2252 logic.end2252: %t14 = phi i1 [ false, %logic.from2250 ], [ %t13, %logic.rend2253 ] br i1 %t14, label %then2254, label %endif2256 then2254: ret i1 false endif2256: %t15 = load %S.ast.Type, ptr %a2 %t16 = call i64 @finch.gen.bitsOf(%S.ast.Type %t15) %t17 = load %S.ast.Type, ptr %a1 %t18 = call i64 @finch.gen.bitsOf(%S.ast.Type %t17) %t19 = icmp sgt i64 %t16, %t18 ret i1 %t19 } define internal i1 @finch.gen.fits({ ptr, i64, i64 } %p0, %S.ast.Type %p1, %S.ast.Type %p2) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca %S.ast.Type, align 16 %a3 = alloca %S.ast.Type, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca i64, align 16 %a13 = alloca i64, align 16 %a31 = alloca i64, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 %t4 = load %S.ast.Type, ptr %a3 %t5 = call i1 @finch.gen.isInt(%S.ast.Type %t4) %t6 = xor i1 %t5, true br i1 %t6, label %then2257, label %endif2259 then2257: ret i1 false endif2259: %t7 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = call i64 @finch_str_to_int(ptr %a8, ptr @.str.1309, i64 464) store i64 %t9, ptr %a10 %t11 = load %S.ast.Type, ptr %a3 %t12 = call i64 @finch.gen.bitsOf(%S.ast.Type %t11) store i64 %t12, ptr %a13 %t14 = load i64, ptr %a10 %t15 = icmp slt i64 %t14, 0 br i1 %t15, label %then2260, label %endif2262 then2260: %t16 = load %S.ast.Type, ptr %a3 %t17 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t16) br i1 %t17, label %then2263, label %endif2265 then2263: ret i1 false endif2265: %t18 = load i64, ptr %a13 %t19 = icmp eq i64 %t18, 64 br i1 %t19, label %then2266, label %endif2268 then2266: ret i1 true endif2268: %t20 = load i64, ptr %a10 %t21 = load i64, ptr %a13 %t22 = sub i64 %t21, 1 %t23 = shl i64 1, %t22 %t24 = sub i64 0, %t23 %t25 = icmp sge i64 %t20, %t24 ret i1 %t25 endif2262: %t26 = load i64, ptr %a13 %t27 = icmp eq i64 %t26, 64 br i1 %t27, label %then2269, label %endif2271 then2269: ret i1 true endif2271: %t28 = load i64, ptr %a13 %t29 = shl i64 1, %t28 %t30 = sub i64 %t29, 1 store i64 %t30, ptr %a31 %t32 = load %S.ast.Type, ptr %a3 %t33 = call i1 @finch.gen.isSigned(%S.ast.Type %t32) br i1 %t33, label %then2272, label %endif2274 then2272: %t34 = load i64, ptr %a13 %t35 = sub i64 %t34, 1 %t36 = shl i64 1, %t35 %t37 = sub i64 %t36, 1 store i64 %t37, ptr %a31 br label %endif2274 endif2274: %t38 = load i64, ptr %a10 %t39 = load i64, ptr %a31 %t40 = icmp sle i64 %t38, %t39 ret i1 %t40 } define internal i64 @finch.gen.findStruct(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca i64, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic2275, label %ok2276 panic2275: call void @finch_panic(ptr @.str.1310, i64 486, ptr @.str.1311) unreachable ok2276: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 16 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load i64, ptr %t7 store i64 0, ptr %a9 br label %for.cond2277 for.cond2277: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t8 br i1 %t11, label %for.body2278, label %for.end2280 for.body2278: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic2281, label %ok2282 panic2281: call void @finch_panic(ptr @.str.1312, i64 487, ptr @.str.1313) unreachable ok2282: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 %t15 = load i64, ptr %a9 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 br i1 %t18, label %range2283, label %inrange2284 range2283: call void @finch_panic_index(ptr @.str.1314, i64 487, i64 %t15, i64 %t17) unreachable inrange2284: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.StructDef, ptr %t19, i64 %t15 %t21 = getelementptr inbounds %S.gen.StructDef, ptr %t20, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t22, ptr %a24 store { ptr, i64, i64 } %t23, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 br label %logic.from2285 logic.from2285: br i1 %t27, label %logic.rhs2286, label %logic.end2287 logic.rhs2286: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic2288, label %ok2289 panic2288: call void @finch_panic(ptr @.str.1315, i64 487, ptr @.str.1316) unreachable ok2289: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 16 %t31 = load i64, ptr %a9 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 br i1 %t34, label %range2290, label %inrange2291 range2290: call void @finch_panic_index(ptr @.str.1317, i64 487, i64 %t31, i64 %t33) unreachable inrange2291: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.StructDef, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.StructDef, ptr %t36, i32 0, i32 1 %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t38, ptr %a40 store { ptr, i64, i64 } %t39, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 br label %logic.rend2292 logic.rend2292: br label %logic.end2287 logic.end2287: %t44 = phi i1 [ false, %logic.from2285 ], [ %t43, %logic.rend2292 ] br i1 %t44, label %then2293, label %endif2295 then2293: %t45 = load i64, ptr %a9 ret i64 %t45 endif2295: br label %for.step2279 for.step2279: %t46 = load i64, ptr %a9 %t47 = add i64 %t46, 1 store i64 %t47, ptr %a9 br label %for.cond2277 for.end2280: ret i64 -1 } define internal i64 @finch.gen.findEnum(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca i64, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic2296, label %ok2297 panic2296: call void @finch_panic(ptr @.str.1318, i64 495, ptr @.str.1319) unreachable ok2297: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load i64, ptr %t7 store i64 0, ptr %a9 br label %for.cond2298 for.cond2298: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t8 br i1 %t11, label %for.body2299, label %for.end2301 for.body2299: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic2302, label %ok2303 panic2302: call void @finch_panic(ptr @.str.1320, i64 496, ptr @.str.1321) unreachable ok2303: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 21 %t15 = load i64, ptr %a9 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 br i1 %t18, label %range2304, label %inrange2305 range2304: call void @finch_panic_index(ptr @.str.1322, i64 496, i64 %t15, i64 %t17) unreachable inrange2305: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.EnumDef, ptr %t19, i64 %t15 %t21 = getelementptr inbounds %S.gen.EnumDef, ptr %t20, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t22, ptr %a24 store { ptr, i64, i64 } %t23, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 br label %logic.from2306 logic.from2306: br i1 %t27, label %logic.rhs2307, label %logic.end2308 logic.rhs2307: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic2309, label %ok2310 panic2309: call void @finch_panic(ptr @.str.1323, i64 496, ptr @.str.1324) unreachable ok2310: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 21 %t31 = load i64, ptr %a9 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 br i1 %t34, label %range2311, label %inrange2312 range2311: call void @finch_panic_index(ptr @.str.1325, i64 496, i64 %t31, i64 %t33) unreachable inrange2312: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.EnumDef, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.EnumDef, ptr %t36, i32 0, i32 1 %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t38, ptr %a40 store { ptr, i64, i64 } %t39, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 br label %logic.rend2313 logic.rend2313: br label %logic.end2308 logic.end2308: %t44 = phi i1 [ false, %logic.from2306 ], [ %t43, %logic.rend2313 ] br i1 %t44, label %then2314, label %endif2316 then2314: %t45 = load i64, ptr %a9 ret i64 %t45 endif2316: br label %for.step2300 for.step2300: %t46 = load i64, ptr %a9 %t47 = add i64 %t46, 1 store i64 %t47, ptr %a9 br label %for.cond2298 for.end2301: ret i64 -1 } define internal i64 @finch.gen.findSum(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca i64, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic2317, label %ok2318 panic2317: call void @finch_panic(ptr @.str.1326, i64 504, ptr @.str.1327) unreachable ok2318: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 22 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load i64, ptr %t7 store i64 0, ptr %a9 br label %for.cond2319 for.cond2319: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t8 br i1 %t11, label %for.body2320, label %for.end2322 for.body2320: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic2323, label %ok2324 panic2323: call void @finch_panic(ptr @.str.1328, i64 505, ptr @.str.1329) unreachable ok2324: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 22 %t15 = load i64, ptr %a9 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 br i1 %t18, label %range2325, label %inrange2326 range2325: call void @finch_panic_index(ptr @.str.1330, i64 505, i64 %t15, i64 %t17) unreachable inrange2326: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.SumDef, ptr %t19, i64 %t15 %t21 = getelementptr inbounds %S.gen.SumDef, ptr %t20, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t22, ptr %a24 store { ptr, i64, i64 } %t23, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 br label %logic.from2327 logic.from2327: br i1 %t27, label %logic.rhs2328, label %logic.end2329 logic.rhs2328: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic2330, label %ok2331 panic2330: call void @finch_panic(ptr @.str.1331, i64 505, ptr @.str.1332) unreachable ok2331: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 22 %t31 = load i64, ptr %a9 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 br i1 %t34, label %range2332, label %inrange2333 range2332: call void @finch_panic_index(ptr @.str.1333, i64 505, i64 %t31, i64 %t33) unreachable inrange2333: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.SumDef, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.SumDef, ptr %t36, i32 0, i32 1 %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t38, ptr %a40 store { ptr, i64, i64 } %t39, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 br label %logic.rend2334 logic.rend2334: br label %logic.end2329 logic.end2329: %t44 = phi i1 [ false, %logic.from2327 ], [ %t43, %logic.rend2334 ] br i1 %t44, label %then2335, label %endif2337 then2335: %t45 = load i64, ptr %a9 ret i64 %t45 endif2337: br label %for.step2321 for.step2321: %t46 = load i64, ptr %a9 %t47 = add i64 %t46, 1 store i64 %t47, ptr %a9 br label %for.cond2319 for.end2322: ret i64 -1 } define internal i64 @finch.gen.progOf(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca i64, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2338, label %ok2339 panic2338: call void @finch_panic(ptr @.str.1334, i64 513, ptr @.str.1335) unreachable ok2339: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 0, ptr %a8 br label %for.cond2340 for.cond2340: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t7 br i1 %t10, label %for.body2341, label %for.end2343 for.body2341: %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null br i1 %t12, label %panic2344, label %ok2345 panic2344: call void @finch_panic(ptr @.str.1336, i64 514, ptr @.str.1337) unreachable ok2345: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 0 %t14 = load i64, ptr %a8 %t15 = load { ptr, i64, i64 }, ptr %t13 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 %t14, %t16 br i1 %t17, label %range2346, label %inrange2347 range2346: call void @finch_panic_index(ptr @.str.1338, i64 514, i64 %t14, i64 %t16) unreachable inrange2347: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds %S.ast.Program, ptr %t18, i64 %t14 %t20 = getelementptr inbounds %S.ast.Program, ptr %t19, i32 0, i32 0 %t21 = load { ptr, i64, i64 }, ptr %t20 %t22 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t21, ptr %a23 store { ptr, i64, i64 } %t22, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 br i1 %t26, label %then2348, label %endif2350 then2348: %t27 = load i64, ptr %a8 ret i64 %t27 endif2350: br label %for.step2342 for.step2342: %t28 = load i64, ptr %a8 %t29 = add i64 %t28, 1 store i64 %t29, ptr %a8 br label %for.cond2340 for.end2343: ret i64 -1 } define internal i1 @finch.gen.imports(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca i64, align 16 %a23 = alloca i64, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2351, label %ok2352 panic2351: call void @finch_panic(ptr @.str.1339, i64 522, ptr @.str.1340) unreachable ok2352: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 %t6 = load ptr, ptr %a1 %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null br i1 %t8, label %panic2353, label %ok2354 panic2353: call void @finch_panic(ptr @.str.1341, i64 522, ptr @.str.1342) unreachable ok2354: %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 14 %t10 = load { ptr, i64, i64 }, ptr %t9 %t11 = call i64 @finch.gen.progOf(ptr %t6, { ptr, i64, i64 } %t10) %t12 = load { ptr, i64, i64 }, ptr %t5 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 %t11, %t13 br i1 %t14, label %range2355, label %inrange2356 range2355: call void @finch_panic_index(ptr @.str.1343, i64 522, i64 %t11, i64 %t13) unreachable inrange2356: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.ast.Program, ptr %t15, i64 %t11 %t17 = getelementptr inbounds %S.ast.Program, ptr %t16, i32 0, i32 2 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load { ptr, i64, i64 }, ptr %a2 store i64 -1, ptr %a20 %t21 = load i64, ptr %t18 %t22 = load ptr, ptr %t17 store i64 0, ptr %a23 br label %find.cond2357 find.cond2357: %t24 = load i64, ptr %a23 %t25 = icmp slt i64 %t24, %t21 br i1 %t25, label %find.body2358, label %find.end2361 find.body2358: %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t24 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } %t19, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 br i1 %t31, label %find.hit2359, label %find.next2360 find.hit2359: store i64 %t24, ptr %a20 br label %find.end2361 find.next2360: %t32 = add i64 %t24, 1 store i64 %t32, ptr %a23 br label %find.cond2357 find.end2361: %t33 = load i64, ptr %a20 %t34 = icmp sge i64 %t33, 0 ret i1 %t34 } define internal %S.ast.Type @finch.gen.resolve(ptr %p0, %S.ast.Type %p1, %S.ast.Node %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a3 = alloca %S.ast.Node, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca %S.ast.Type, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca %S.ast.Type, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca %S.ast.Type, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca %S.ast.Type, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca %S.ast.Type, align 16 %a142 = alloca %S.ast.Type, align 16 %a155 = alloca %S.ast.Type, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca %S.ast.Type, align 16 %a164 = alloca %S.ast.Type, align 16 %a181 = alloca i64, align 16 %a184 = alloca i64, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca i64, align 16 %a209 = alloca i64, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca %S.ast.Type, align 16 %a227 = alloca %S.ast.Type, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca i64, align 16 %a243 = alloca %S.ast.Type, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a373 = alloca { ptr, i64, i64 }, align 16 %a377 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a382 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a384 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a410 = alloca { ptr, i64, i64 }, align 16 %a432 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a441 = alloca { ptr, i64, i64 }, align 16 %a442 = alloca { ptr, i64, i64 }, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a444 = alloca { ptr, i64, i64 }, align 16 %a446 = alloca { ptr, i64, i64 }, align 16 %a447 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 %a451 = alloca { ptr, i64, i64 }, align 16 %a455 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a460 = alloca { ptr, i64, i64 }, align 16 %a461 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 store %S.ast.Node %p2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.1344, i64 5, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then2362, label %endif2364 then2362: %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t12 = load { ptr, i64, i64 }, ptr %t11 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 0, %t13 br i1 %t14, label %range2365, label %inrange2366 range2365: call void @finch_panic_index(ptr @.str.1345, i64 527, i64 0, i64 %t13) unreachable inrange2366: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 0 %t17 = load %S.ast.Type, ptr %t16 %t18 = load %S.ast.Node, ptr %a3 %t19 = call %S.ast.Type @finch.gen.resolve(ptr %t10, %S.ast.Type %t17, %S.ast.Node %t18) %t20 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t19) store %S.ast.Type %t19, ptr %a21 call void @finch.drop.S_ast_Type(ptr %a21) ret %S.ast.Type %t20 endif2364: %t22 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t23 = load { ptr, i64, i64 }, ptr %t22 store { ptr, i64, i64 } %t23, ptr %a24 store { ptr, i64, i64 } { ptr @.str.1346, i64 3, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 br i1 %t27, label %then2367, label %endif2369 then2367: %t28 = load ptr, ptr %a1 %t29 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t30 = load { ptr, i64, i64 }, ptr %t29 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 0, %t31 br i1 %t32, label %range2370, label %inrange2371 range2370: call void @finch_panic_index(ptr @.str.1347, i64 530, i64 0, i64 %t31) unreachable inrange2371: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds %S.ast.Type, ptr %t33, i64 0 %t35 = load %S.ast.Type, ptr %t34 %t36 = load %S.ast.Node, ptr %a3 %t37 = call %S.ast.Type @finch.gen.resolve(ptr %t28, %S.ast.Type %t35, %S.ast.Node %t36) store %S.ast.Type %t37, ptr %a38 %t39 = load %S.ast.Type, ptr %a38 %t40 = call i1 @finch.gen.isInt(%S.ast.Type %t39) %t41 = xor i1 %t40, true br label %logic.from2372 logic.from2372: br i1 %t41, label %logic.rhs2373, label %logic.end2374 logic.rhs2373: %t42 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 %t43 = load { ptr, i64, i64 }, ptr %t42 store { ptr, i64, i64 } %t43, ptr %a44 store { ptr, i64, i64 } { ptr @.str.1348, i64 4, i64 0 }, ptr %a45 %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) %t47 = icmp eq i32 %t46, 0 br label %logic.rend2375 logic.rend2375: br label %logic.end2374 logic.end2374: %t48 = phi i1 [ false, %logic.from2372 ], [ %t47, %logic.rend2375 ] br label %logic.from2376 logic.from2376: br i1 %t48, label %logic.rhs2377, label %logic.end2378 logic.rhs2377: %t49 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 %t50 = load { ptr, i64, i64 }, ptr %t49 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.1349, i64 4, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp eq i32 %t53, 0 br label %logic.rend2379 logic.rend2379: br label %logic.end2378 logic.end2378: %t55 = phi i1 [ false, %logic.from2376 ], [ %t54, %logic.rend2379 ] br label %logic.from2380 logic.from2380: br i1 %t55, label %logic.rhs2381, label %logic.end2382 logic.rhs2381: %t56 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 %t57 = load { ptr, i64, i64 }, ptr %t56 store { ptr, i64, i64 } %t57, ptr %a58 store { ptr, i64, i64 } { ptr @.str.1350, i64 3, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp eq i32 %t60, 0 br label %logic.rend2383 logic.rend2383: br label %logic.end2382 logic.end2382: %t62 = phi i1 [ false, %logic.from2380 ], [ %t61, %logic.rend2383 ] br label %logic.from2384 logic.from2384: br i1 %t62, label %logic.rhs2385, label %logic.end2386 logic.rhs2385: %t63 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 %t64 = load { ptr, i64, i64 }, ptr %t63 store { ptr, i64, i64 } %t64, ptr %a65 store { ptr, i64, i64 } { ptr @.str.1351, i64 4, i64 0 }, ptr %a66 %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) %t68 = icmp eq i32 %t67, 0 br label %logic.rend2387 logic.rend2387: br label %logic.end2386 logic.end2386: %t69 = phi i1 [ false, %logic.from2384 ], [ %t68, %logic.rend2387 ] br i1 %t69, label %then2388, label %endif2390 then2388: %t70 = load ptr, ptr %a1 %t71 = load %S.ast.Node, ptr %a3 %t72 = load %S.ast.Type, ptr %a38 %t73 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t72) store { ptr, i64, i64 } { ptr @.str.1352, i64 63, i64 0 }, ptr %a75 store { ptr, i64, i64 } %t73, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) store { ptr, i64, i64 } %t73, ptr %a77 call void @finch_str_drop(ptr %a77) %t78 = load { ptr, i64, i64 }, ptr %a74 call void @finch.gen.fail(ptr %t70, %S.ast.Node %t71, { ptr, i64, i64 } %t78) store { ptr, i64, i64 } %t78, ptr %a79 call void @finch_str_drop(ptr %a79) br label %endif2390 endif2390: %t80 = load ptr, ptr %a1 %t81 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t82 = load { ptr, i64, i64 }, ptr %t81 %t83 = extractvalue { ptr, i64, i64 } %t82, 1 %t84 = icmp uge i64 1, %t83 br i1 %t84, label %range2391, label %inrange2392 range2391: call void @finch_panic_index(ptr @.str.1353, i64 534, i64 1, i64 %t83) unreachable inrange2392: %t85 = extractvalue { ptr, i64, i64 } %t82, 0 %t86 = getelementptr inbounds %S.ast.Type, ptr %t85, i64 1 %t87 = load %S.ast.Type, ptr %t86 %t88 = load %S.ast.Node, ptr %a3 %t89 = call %S.ast.Type @finch.gen.resolve(ptr %t80, %S.ast.Type %t87, %S.ast.Node %t88) store %S.ast.Type %t89, ptr %a90 %t91 = getelementptr inbounds %S.ast.Type, ptr %a90, i32 0, i32 0 %t92 = load { ptr, i64, i64 }, ptr %t91 store { ptr, i64, i64 } %t92, ptr %a93 store { ptr, i64, i64 } { ptr @.str.1354, i64 4, i64 0 }, ptr %a94 %t95 = call i32 @finch_str_eq(ptr %a93, ptr %a94) %t96 = icmp ne i32 %t95, 0 br i1 %t96, label %then2393, label %endif2395 then2393: %t97 = load ptr, ptr %a1 %t98 = load %S.ast.Node, ptr %a3 call void @finch.gen.fail(ptr %t97, %S.ast.Node %t98, { ptr, i64, i64 } { ptr @.str.1355, i64 41, i64 0 }) br label %endif2395 endif2395: %t99 = load %S.ast.Type, ptr %a38 %t100 = load %S.ast.Type, ptr %a90 %t101 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t99, %S.ast.Type %t100) call void @finch.drop.S_ast_Type(ptr %a90) call void @finch.drop.S_ast_Type(ptr %a38) ret %S.ast.Type %t101 endif2369: %t102 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t103 = load { ptr, i64, i64 }, ptr %t102 store { ptr, i64, i64 } %t103, ptr %a104 store { ptr, i64, i64 } { ptr @.str.1356, i64 5, i64 0 }, ptr %a105 %t106 = call i32 @finch_str_eq(ptr %a104, ptr %a105) %t107 = icmp ne i32 %t106, 0 br i1 %t107, label %then2396, label %endif2398 then2396: %t108 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1357, i64 5, i64 0 }, 0 %t109 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t110 = load i64, ptr %t109 %t111 = insertvalue %S.ast.Type %t108, i64 %t110, 4 store %S.ast.Type %t111, ptr %a112 %t113 = getelementptr inbounds %S.ast.Type, ptr %a112, i32 0, i32 1 %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %t113, i32 0, i32 1 %t115 = load ptr, ptr %a1 %t116 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t117 = load { ptr, i64, i64 }, ptr %t116 %t118 = extractvalue { ptr, i64, i64 } %t117, 1 %t119 = icmp uge i64 0, %t118 br i1 %t119, label %range2399, label %inrange2400 range2399: call void @finch_panic_index(ptr @.str.1358, i64 542, i64 0, i64 %t118) unreachable inrange2400: %t120 = extractvalue { ptr, i64, i64 } %t117, 0 %t121 = getelementptr inbounds %S.ast.Type, ptr %t120, i64 0 %t122 = load %S.ast.Type, ptr %t121 %t123 = load %S.ast.Node, ptr %a3 %t124 = call %S.ast.Type @finch.gen.resolve(ptr %t115, %S.ast.Type %t122, %S.ast.Node %t123) %t125 = load i64, ptr %t114 %t126 = add i64 %t125, 1 call void @finch_arr_reserve(ptr %t113, i64 %t126, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t127 = load ptr, ptr %t113 %t128 = getelementptr inbounds %S.ast.Type, ptr %t127, i64 %t125 store %S.ast.Type %t124, ptr %t128 store i64 %t126, ptr %t114 %t129 = load %S.ast.Type, ptr %a112 ret %S.ast.Type %t129 endif2398: %t130 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t131 = load { ptr, i64, i64 }, ptr %t130 store { ptr, i64, i64 } %t131, ptr %a132 store { ptr, i64, i64 } { ptr @.str.1359, i64 3, i64 0 }, ptr %a133 %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) %t135 = icmp ne i32 %t134, 0 br i1 %t135, label %then2401, label %endif2403 then2401: %t136 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %t136, i32 0, i32 1 %t138 = load i64, ptr %t137 %t139 = icmp eq i64 %t138, 0 br i1 %t139, label %then2404, label %endif2406 then2404: %t140 = load %S.ast.Type, ptr %a2 store %S.ast.Type %t140, ptr %a141 call void @finch.copy.S_ast_Type(ptr %a142, ptr %a141) %t143 = load %S.ast.Type, ptr %a142 ret %S.ast.Type %t143 endif2406: %t144 = load ptr, ptr %a1 %t145 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t146 = load { ptr, i64, i64 }, ptr %t145 %t147 = extractvalue { ptr, i64, i64 } %t146, 1 %t148 = icmp uge i64 0, %t147 br i1 %t148, label %range2407, label %inrange2408 range2407: call void @finch_panic_index(ptr @.str.1360, i64 549, i64 0, i64 %t147) unreachable inrange2408: %t149 = extractvalue { ptr, i64, i64 } %t146, 0 %t150 = getelementptr inbounds %S.ast.Type, ptr %t149, i64 0 %t151 = load %S.ast.Type, ptr %t150 %t152 = load %S.ast.Node, ptr %a3 %t153 = call %S.ast.Type @finch.gen.resolve(ptr %t144, %S.ast.Type %t151, %S.ast.Node %t152) %t154 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t153) store %S.ast.Type %t153, ptr %a155 call void @finch.drop.S_ast_Type(ptr %a155) ret %S.ast.Type %t154 endif2403: %t156 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t157 = load { ptr, i64, i64 }, ptr %t156 store { ptr, i64, i64 } %t157, ptr %a158 store { ptr, i64, i64 } { ptr @.str.1361, i64 5, i64 0 }, ptr %a159 %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) %t161 = icmp eq i32 %t160, 0 br i1 %t161, label %then2409, label %endif2411 then2409: %t162 = load %S.ast.Type, ptr %a2 store %S.ast.Type %t162, ptr %a163 call void @finch.copy.S_ast_Type(ptr %a164, ptr %a163) %t165 = load %S.ast.Type, ptr %a164 ret %S.ast.Type %t165 endif2411: %t166 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %t166, i32 0, i32 1 %t168 = load i64, ptr %t167 %t169 = icmp eq i64 %t168, 0 br label %logic.from2412 logic.from2412: br i1 %t169, label %logic.rhs2413, label %logic.end2414 logic.rhs2413: %t170 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t171 = getelementptr inbounds { ptr, i64, i64 }, ptr %t170, i32 0, i32 1 %t172 = load i64, ptr %t171 %t173 = icmp eq i64 %t172, 0 br label %logic.rend2415 logic.rend2415: br label %logic.end2414 logic.end2414: %t174 = phi i1 [ false, %logic.from2412 ], [ %t173, %logic.rend2415 ] br label %logic.from2416 logic.from2416: br i1 %t174, label %logic.rhs2417, label %logic.end2418 logic.rhs2417: %t175 = load ptr, ptr %a1 %t176 = icmp eq ptr %t175, null br i1 %t176, label %panic2419, label %ok2420 panic2419: call void @finch_panic(ptr @.str.1362, i64 555, ptr @.str.1363) unreachable ok2420: %t177 = getelementptr inbounds %S.gen.Gen, ptr %t175, i32 0, i32 18 %t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %t177, i32 0, i32 1 %t179 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t180 = load { ptr, i64, i64 }, ptr %t179 store i64 -1, ptr %a181 %t182 = load i64, ptr %t178 %t183 = load ptr, ptr %t177 store i64 0, ptr %a184 br label %find.cond2421 find.cond2421: %t185 = load i64, ptr %a184 %t186 = icmp slt i64 %t185, %t182 br i1 %t186, label %find.body2422, label %find.end2425 find.body2422: %t187 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i64 %t185 %t188 = load { ptr, i64, i64 }, ptr %t187 store { ptr, i64, i64 } %t188, ptr %a189 store { ptr, i64, i64 } %t180, ptr %a190 %t191 = call i32 @finch_str_eq(ptr %a189, ptr %a190) %t192 = icmp ne i32 %t191, 0 br i1 %t192, label %find.hit2423, label %find.next2424 find.hit2423: store i64 %t185, ptr %a181 br label %find.end2425 find.next2424: %t193 = add i64 %t185, 1 store i64 %t193, ptr %a184 br label %find.cond2421 find.end2425: %t194 = load i64, ptr %a181 %t195 = icmp sge i64 %t194, 0 br label %logic.rend2426 logic.rend2426: br label %logic.end2418 logic.end2418: %t196 = phi i1 [ false, %logic.from2416 ], [ %t195, %logic.rend2426 ] br i1 %t196, label %then2427, label %endif2429 then2427: %t197 = load ptr, ptr %a1 %t198 = icmp eq ptr %t197, null br i1 %t198, label %panic2430, label %ok2431 panic2430: call void @finch_panic(ptr @.str.1364, i64 556, ptr @.str.1365) unreachable ok2431: %t199 = getelementptr inbounds %S.gen.Gen, ptr %t197, i32 0, i32 19 %t200 = load ptr, ptr %a1 %t201 = icmp eq ptr %t200, null br i1 %t201, label %panic2432, label %ok2433 panic2432: call void @finch_panic(ptr @.str.1366, i64 556, ptr @.str.1367) unreachable ok2433: %t202 = getelementptr inbounds %S.gen.Gen, ptr %t200, i32 0, i32 18 %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i32 0, i32 1 %t204 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t205 = load { ptr, i64, i64 }, ptr %t204 store i64 -1, ptr %a206 %t207 = load i64, ptr %t203 %t208 = load ptr, ptr %t202 store i64 0, ptr %a209 br label %find.cond2434 find.cond2434: %t210 = load i64, ptr %a209 %t211 = icmp slt i64 %t210, %t207 br i1 %t211, label %find.body2435, label %find.end2438 find.body2435: %t212 = getelementptr inbounds { ptr, i64, i64 }, ptr %t208, i64 %t210 %t213 = load { ptr, i64, i64 }, ptr %t212 store { ptr, i64, i64 } %t213, ptr %a214 store { ptr, i64, i64 } %t205, ptr %a215 %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) %t217 = icmp ne i32 %t216, 0 br i1 %t217, label %find.hit2436, label %find.next2437 find.hit2436: store i64 %t210, ptr %a206 br label %find.end2438 find.next2437: %t218 = add i64 %t210, 1 store i64 %t218, ptr %a209 br label %find.cond2434 find.end2438: %t219 = load i64, ptr %a206 %t220 = load { ptr, i64, i64 }, ptr %t199 %t221 = extractvalue { ptr, i64, i64 } %t220, 1 %t222 = icmp uge i64 %t219, %t221 br i1 %t222, label %range2439, label %inrange2440 range2439: call void @finch_panic_index(ptr @.str.1368, i64 556, i64 %t219, i64 %t221) unreachable inrange2440: %t223 = extractvalue { ptr, i64, i64 } %t220, 0 %t224 = getelementptr inbounds %S.ast.Type, ptr %t223, i64 %t219 %t225 = load %S.ast.Type, ptr %t224 store %S.ast.Type %t225, ptr %a226 call void @finch.copy.S_ast_Type(ptr %a227, ptr %a226) %t228 = load %S.ast.Type, ptr %a227 ret %S.ast.Type %t228 endif2429: %t229 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i32 0, i32 1 %t231 = load i64, ptr %t230 %t232 = icmp sgt i64 %t231, 0 br i1 %t232, label %then2441, label %endif2443 then2441: store { ptr, i64, i64 } zeroinitializer, ptr %a233 %t234 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 store i64 0, ptr %a235 br label %each.cond2444 each.cond2444: %t236 = getelementptr inbounds { ptr, i64, i64 }, ptr %t234, i32 0, i32 1 %t237 = load i64, ptr %t236 %t238 = load i64, ptr %a235 %t239 = icmp slt i64 %t238, %t237 br i1 %t239, label %each.body2445, label %each.end2447 each.body2445: %t240 = load ptr, ptr %t234 %t241 = getelementptr inbounds %S.ast.Type, ptr %t240, i64 %t238 %t242 = load %S.ast.Type, ptr %t241 store %S.ast.Type %t242, ptr %a243 %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %a233, i32 0, i32 1 %t245 = load ptr, ptr %a1 %t246 = load %S.ast.Type, ptr %a243 %t247 = load %S.ast.Node, ptr %a3 %t248 = call %S.ast.Type @finch.gen.resolve(ptr %t245, %S.ast.Type %t246, %S.ast.Node %t247) %t249 = load i64, ptr %t244 %t250 = add i64 %t249, 1 call void @finch_arr_reserve(ptr %a233, i64 %t250, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t251 = load ptr, ptr %a233 %t252 = getelementptr inbounds %S.ast.Type, ptr %t251, i64 %t249 store %S.ast.Type %t248, ptr %t252 store i64 %t250, ptr %t244 br label %each.step2446 each.step2446: %t253 = load i64, ptr %a235 %t254 = add i64 %t253, 1 store i64 %t254, ptr %a235 br label %each.cond2444 each.end2447: %t255 = load ptr, ptr %a1 %t256 = icmp eq ptr %t255, null br i1 %t256, label %panic2448, label %ok2449 panic2448: call void @finch_panic(ptr @.str.1369, i64 564, ptr @.str.1370) unreachable ok2449: %t257 = getelementptr inbounds %S.gen.Gen, ptr %t255, i32 0, i32 14 %t258 = load { ptr, i64, i64 }, ptr %t257 store { ptr, i64, i64 } %t258, ptr %a259 call void @finch_str_copy(ptr %a260, ptr %a259) %t261 = load { ptr, i64, i64 }, ptr %a260 store { ptr, i64, i64 } %t261, ptr %a262 %t263 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 %t265 = load i64, ptr %t264 %t266 = icmp sgt i64 %t265, 0 br i1 %t266, label %then2450, label %endif2452 then2450: %t267 = load ptr, ptr %a1 %t268 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t269 = load { ptr, i64, i64 }, ptr %t268 %t270 = call i1 @finch.gen.imports(ptr %t267, { ptr, i64, i64 } %t269) %t271 = xor i1 %t270, true br i1 %t271, label %then2453, label %endif2455 then2453: %t272 = load ptr, ptr %a1 %t273 = load %S.ast.Node, ptr %a3 %t274 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t275 = load { ptr, i64, i64 }, ptr %t274 store { ptr, i64, i64 } { ptr @.str.1371, i64 1, i64 0 }, ptr %a277 store { ptr, i64, i64 } %t275, ptr %a278 call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) %t279 = load { ptr, i64, i64 }, ptr %a276 store { ptr, i64, i64 } %t279, ptr %a281 store { ptr, i64, i64 } { ptr @.str.1372, i64 36, i64 0 }, ptr %a282 call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282) store { ptr, i64, i64 } %t279, ptr %a283 call void @finch_str_drop(ptr %a283) %t284 = load { ptr, i64, i64 }, ptr %a280 %t285 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t286 = load { ptr, i64, i64 }, ptr %t285 store { ptr, i64, i64 } %t284, ptr %a288 store { ptr, i64, i64 } %t286, ptr %a289 call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) store { ptr, i64, i64 } %t284, ptr %a290 call void @finch_str_drop(ptr %a290) %t291 = load { ptr, i64, i64 }, ptr %a287 store { ptr, i64, i64 } %t291, ptr %a293 store { ptr, i64, i64 } { ptr @.str.1373, i64 1, i64 0 }, ptr %a294 call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) store { ptr, i64, i64 } %t291, ptr %a295 call void @finch_str_drop(ptr %a295) %t296 = load { ptr, i64, i64 }, ptr %a292 call void @finch.gen.fail(ptr %t272, %S.ast.Node %t273, { ptr, i64, i64 } %t296) store { ptr, i64, i64 } %t296, ptr %a297 call void @finch_str_drop(ptr %a297) br label %endif2455 endif2455: %t298 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t299 = load { ptr, i64, i64 }, ptr %t298 store { ptr, i64, i64 } %t299, ptr %a300 call void @finch_str_copy(ptr %a301, ptr %a300) %t302 = load { ptr, i64, i64 }, ptr %a301 %t303 = load { ptr, i64, i64 }, ptr %a262 store { ptr, i64, i64 } %t302, ptr %a262 store { ptr, i64, i64 } %t303, ptr %a304 call void @finch_str_drop(ptr %a304) br label %endif2452 endif2452: %t305 = load ptr, ptr %a1 %t306 = load { ptr, i64, i64 }, ptr %a262 %t307 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t308 = load { ptr, i64, i64 }, ptr %t307 %t309 = load { ptr, i64, i64 }, ptr %a233 %t310 = load %S.ast.Node, ptr %a3 %t311 = call %S.ast.Type @finch.gen.instStruct(ptr %t305, { ptr, i64, i64 } %t306, { ptr, i64, i64 } %t308, { ptr, i64, i64 } %t309, %S.ast.Node %t310) call void @finch_str_drop(ptr %a262) call void @finch.drop.arr_S_ast_Type(ptr %a233) ret %S.ast.Type %t311 endif2443: %t312 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t313 = load { ptr, i64, i64 }, ptr %t312 store { ptr, i64, i64 } %t313, ptr %a314 store { ptr, i64, i64 } { ptr @.str.1374, i64 1, i64 0 }, ptr %a315 %t316 = call i32 @finch_str_eq(ptr %a314, ptr %a315) %t317 = icmp ne i32 %t316, 0 br i1 %t317, label %then2456, label %endif2458 then2456: %t318 = load ptr, ptr %a1 %t319 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t320 = load { ptr, i64, i64 }, ptr %t319 %t321 = call i64 @finch.gen.findStruct(ptr %t318, { ptr, i64, i64 } { ptr @.str.1375, i64 1, i64 0 }, { ptr, i64, i64 } %t320) %t322 = icmp slt i64 %t321, 0 br i1 %t322, label %then2459, label %endif2461 then2459: %t323 = load ptr, ptr %a1 %t324 = load %S.ast.Node, ptr %a3 %t325 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t326 = load { ptr, i64, i64 }, ptr %t325 store { ptr, i64, i64 } { ptr @.str.1376, i64 28, i64 0 }, ptr %a328 store { ptr, i64, i64 } %t326, ptr %a329 call void @finch_str_concat(ptr %a327, ptr %a328, ptr %a329) %t330 = load { ptr, i64, i64 }, ptr %a327 store { ptr, i64, i64 } %t330, ptr %a332 store { ptr, i64, i64 } { ptr @.str.1377, i64 1, i64 0 }, ptr %a333 call void @finch_str_concat(ptr %a331, ptr %a332, ptr %a333) store { ptr, i64, i64 } %t330, ptr %a334 call void @finch_str_drop(ptr %a334) %t335 = load { ptr, i64, i64 }, ptr %a331 call void @finch.gen.fail(ptr %t323, %S.ast.Node %t324, { ptr, i64, i64 } %t335) store { ptr, i64, i64 } %t335, ptr %a336 call void @finch_str_drop(ptr %a336) br label %endif2461 endif2461: %t337 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1378, i64 6, i64 0 }, 0 %t338 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t339 = load { ptr, i64, i64 }, ptr %t338 store { ptr, i64, i64 } %t339, ptr %a340 call void @finch_str_copy(ptr %a341, ptr %a340) %t342 = load { ptr, i64, i64 }, ptr %a341 %t343 = insertvalue %S.ast.Type %t337, { ptr, i64, i64 } %t342, 2 %t344 = insertvalue %S.ast.Type %t343, { ptr, i64, i64 } { ptr @.str.1379, i64 1, i64 0 }, 3 ret %S.ast.Type %t344 endif2458: %t345 = load ptr, ptr %a1 %t346 = icmp eq ptr %t345, null br i1 %t346, label %panic2462, label %ok2463 panic2462: call void @finch_panic(ptr @.str.1380, i64 579, ptr @.str.1381) unreachable ok2463: %t347 = getelementptr inbounds %S.gen.Gen, ptr %t345, i32 0, i32 14 %t348 = load { ptr, i64, i64 }, ptr %t347 store { ptr, i64, i64 } %t348, ptr %a349 call void @finch_str_copy(ptr %a350, ptr %a349) %t351 = load { ptr, i64, i64 }, ptr %a350 store { ptr, i64, i64 } %t351, ptr %a352 %t353 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t354 = getelementptr inbounds { ptr, i64, i64 }, ptr %t353, i32 0, i32 1 %t355 = load i64, ptr %t354 %t356 = icmp sgt i64 %t355, 0 br i1 %t356, label %then2464, label %endif2466 then2464: %t357 = load ptr, ptr %a1 %t358 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t359 = load { ptr, i64, i64 }, ptr %t358 %t360 = call i1 @finch.gen.imports(ptr %t357, { ptr, i64, i64 } %t359) %t361 = xor i1 %t360, true br i1 %t361, label %then2467, label %endif2469 then2467: %t362 = load ptr, ptr %a1 %t363 = load %S.ast.Node, ptr %a3 %t364 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t365 = load { ptr, i64, i64 }, ptr %t364 store { ptr, i64, i64 } { ptr @.str.1382, i64 1, i64 0 }, ptr %a367 store { ptr, i64, i64 } %t365, ptr %a368 call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) %t369 = load { ptr, i64, i64 }, ptr %a366 store { ptr, i64, i64 } %t369, ptr %a371 store { ptr, i64, i64 } { ptr @.str.1383, i64 36, i64 0 }, ptr %a372 call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) store { ptr, i64, i64 } %t369, ptr %a373 call void @finch_str_drop(ptr %a373) %t374 = load { ptr, i64, i64 }, ptr %a370 %t375 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t376 = load { ptr, i64, i64 }, ptr %t375 store { ptr, i64, i64 } %t374, ptr %a378 store { ptr, i64, i64 } %t376, ptr %a379 call void @finch_str_concat(ptr %a377, ptr %a378, ptr %a379) store { ptr, i64, i64 } %t374, ptr %a380 call void @finch_str_drop(ptr %a380) %t381 = load { ptr, i64, i64 }, ptr %a377 store { ptr, i64, i64 } %t381, ptr %a383 store { ptr, i64, i64 } { ptr @.str.1384, i64 1, i64 0 }, ptr %a384 call void @finch_str_concat(ptr %a382, ptr %a383, ptr %a384) store { ptr, i64, i64 } %t381, ptr %a385 call void @finch_str_drop(ptr %a385) %t386 = load { ptr, i64, i64 }, ptr %a382 call void @finch.gen.fail(ptr %t362, %S.ast.Node %t363, { ptr, i64, i64 } %t386) store { ptr, i64, i64 } %t386, ptr %a387 call void @finch_str_drop(ptr %a387) br label %endif2469 endif2469: %t388 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t389 = load { ptr, i64, i64 }, ptr %t388 store { ptr, i64, i64 } %t389, ptr %a390 call void @finch_str_copy(ptr %a391, ptr %a390) %t392 = load { ptr, i64, i64 }, ptr %a391 %t393 = load { ptr, i64, i64 }, ptr %a352 store { ptr, i64, i64 } %t392, ptr %a352 store { ptr, i64, i64 } %t393, ptr %a394 call void @finch_str_drop(ptr %a394) br label %endif2466 endif2466: %t395 = load ptr, ptr %a1 %t396 = load { ptr, i64, i64 }, ptr %a352 %t397 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t398 = load { ptr, i64, i64 }, ptr %t397 %t399 = call i64 @finch.gen.findEnum(ptr %t395, { ptr, i64, i64 } %t396, { ptr, i64, i64 } %t398) %t400 = icmp sge i64 %t399, 0 br i1 %t400, label %then2470, label %endif2472 then2470: %t401 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1385, i64 4, i64 0 }, 0 %t402 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t403 = load { ptr, i64, i64 }, ptr %t402 store { ptr, i64, i64 } %t403, ptr %a404 call void @finch_str_copy(ptr %a405, ptr %a404) %t406 = load { ptr, i64, i64 }, ptr %a405 %t407 = insertvalue %S.ast.Type %t401, { ptr, i64, i64 } %t406, 2 %t408 = load { ptr, i64, i64 }, ptr %a352 store { ptr, i64, i64 } %t408, ptr %a409 call void @finch_str_copy(ptr %a410, ptr %a409) %t411 = load { ptr, i64, i64 }, ptr %a410 %t412 = insertvalue %S.ast.Type %t407, { ptr, i64, i64 } %t411, 3 call void @finch_str_drop(ptr %a352) ret %S.ast.Type %t412 endif2472: %t413 = load ptr, ptr %a1 %t414 = load { ptr, i64, i64 }, ptr %a352 %t415 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t416 = load { ptr, i64, i64 }, ptr %t415 %t417 = call i64 @finch.gen.findStruct(ptr %t413, { ptr, i64, i64 } %t414, { ptr, i64, i64 } %t416) %t418 = icmp slt i64 %t417, 0 br i1 %t418, label %then2473, label %endif2475 then2473: %t419 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t420 = getelementptr inbounds { ptr, i64, i64 }, ptr %t419, i32 0, i32 1 %t421 = load i64, ptr %t420 %t422 = icmp eq i64 %t421, 0 br label %logic.from2476 logic.from2476: br i1 %t422, label %logic.rhs2477, label %logic.end2478 logic.rhs2477: %t423 = load ptr, ptr %a1 %t424 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t425 = load { ptr, i64, i64 }, ptr %t424 %t426 = call i64 @finch.gen.findStruct(ptr %t423, { ptr, i64, i64 } { ptr @.str.1386, i64 1, i64 0 }, { ptr, i64, i64 } %t425) %t427 = icmp sge i64 %t426, 0 br label %logic.rend2479 logic.rend2479: br label %logic.end2478 logic.end2478: %t428 = phi i1 [ false, %logic.from2476 ], [ %t427, %logic.rend2479 ] br i1 %t428, label %then2480, label %endif2482 then2480: %t429 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1387, i64 6, i64 0 }, 0 %t430 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t431 = load { ptr, i64, i64 }, ptr %t430 store { ptr, i64, i64 } %t431, ptr %a432 call void @finch_str_copy(ptr %a433, ptr %a432) %t434 = load { ptr, i64, i64 }, ptr %a433 %t435 = insertvalue %S.ast.Type %t429, { ptr, i64, i64 } %t434, 2 %t436 = insertvalue %S.ast.Type %t435, { ptr, i64, i64 } { ptr @.str.1388, i64 1, i64 0 }, 3 call void @finch_str_drop(ptr %a352) ret %S.ast.Type %t436 endif2482: %t437 = load ptr, ptr %a1 %t438 = load %S.ast.Node, ptr %a3 %t439 = load %S.ast.Type, ptr %a2 %t440 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t439) store { ptr, i64, i64 } { ptr @.str.1389, i64 24, i64 0 }, ptr %a442 store { ptr, i64, i64 } %t440, ptr %a443 call void @finch_str_concat(ptr %a441, ptr %a442, ptr %a443) store { ptr, i64, i64 } %t440, ptr %a444 call void @finch_str_drop(ptr %a444) %t445 = load { ptr, i64, i64 }, ptr %a441 store { ptr, i64, i64 } %t445, ptr %a447 store { ptr, i64, i64 } { ptr @.str.1390, i64 1, i64 0 }, ptr %a448 call void @finch_str_concat(ptr %a446, ptr %a447, ptr %a448) store { ptr, i64, i64 } %t445, ptr %a449 call void @finch_str_drop(ptr %a449) %t450 = load { ptr, i64, i64 }, ptr %a446 call void @finch.gen.fail(ptr %t437, %S.ast.Node %t438, { ptr, i64, i64 } %t450) store { ptr, i64, i64 } %t450, ptr %a451 call void @finch_str_drop(ptr %a451) br label %endif2475 endif2475: %t452 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1391, i64 6, i64 0 }, 0 %t453 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t454 = load { ptr, i64, i64 }, ptr %t453 store { ptr, i64, i64 } %t454, ptr %a455 call void @finch_str_copy(ptr %a456, ptr %a455) %t457 = load { ptr, i64, i64 }, ptr %a456 %t458 = insertvalue %S.ast.Type %t452, { ptr, i64, i64 } %t457, 2 %t459 = load { ptr, i64, i64 }, ptr %a352 store { ptr, i64, i64 } %t459, ptr %a460 call void @finch_str_copy(ptr %a461, ptr %a460) %t462 = load { ptr, i64, i64 }, ptr %a461 %t463 = insertvalue %S.ast.Type %t458, { ptr, i64, i64 } %t462, 3 call void @finch_str_drop(ptr %a352) ret %S.ast.Type %t463 } define internal { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 store { ptr, i64, i64 } { ptr @.str.1393, i64 1, i64 0 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.1394, i64 1, i64 0 }, ptr %a6 call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.1396, i64 1, i64 0 }, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1397, i64 0, i64 0 }, ptr %a11 call void @finch_str_replace(ptr %a9, ptr %a8, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t7, ptr %a13 call void @finch_str_drop(ptr %a13) store { ptr, i64, i64 } %t12, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1399, i64 1, i64 0 }, ptr %a16 store { ptr, i64, i64 } { ptr @.str.1400, i64 1, i64 0 }, ptr %a17 call void @finch_str_replace(ptr %a15, ptr %a14, ptr %a16, ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t12, ptr %a19 call void @finch_str_drop(ptr %a19) store { ptr, i64, i64 } %t18, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1402, i64 1, i64 0 }, ptr %a22 store { ptr, i64, i64 } { ptr @.str.1403, i64 0, i64 0 }, ptr %a23 call void @finch_str_replace(ptr %a21, ptr %a20, ptr %a22, ptr %a23) %t24 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t18, ptr %a25 call void @finch_str_drop(ptr %a25) ret { ptr, i64, i64 } %t24 } define internal { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t3 = load i64, ptr %t2 %t4 = icmp eq i64 %t3, 0 br i1 %t4, label %then2483, label %endif2485 then2483: ret { ptr, i64, i64 } { ptr @.str.1404, i64 4, i64 0 } endif2485: %t5 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t5, ptr %a6 call void @finch_str_copy(ptr %a7, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 ret { ptr, i64, i64 } %t8 } define internal { ptr, i64, i64 } @finch.gen.llty(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch_str_copy(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1405, i64 4, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 br i1 %t13, label %then2486, label %endif2488 then2486: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1406, i64 2, i64 0 } endif2488: %t14 = load %S.ast.Type, ptr %a2 %t15 = call i1 @finch.gen.isInt(%S.ast.Type %t14) br label %logic.from2489 logic.from2489: br i1 %t15, label %logic.end2491, label %logic.rhs2490 logic.rhs2490: %t16 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t16, ptr %a17 store { ptr, i64, i64 } { ptr @.str.1407, i64 4, i64 0 }, ptr %a18 %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) %t20 = icmp ne i32 %t19, 0 br label %logic.rend2492 logic.rend2492: br label %logic.end2491 logic.end2491: %t21 = phi i1 [ true, %logic.from2489 ], [ %t20, %logic.rend2492 ] br i1 %t21, label %then2493, label %endif2495 then2493: %t22 = load %S.ast.Type, ptr %a2 %t23 = call i64 @finch.gen.bitsOf(%S.ast.Type %t22) call void @finch_str_from_int(ptr %a24, i64 %t23) %t25 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } { ptr @.str.1408, i64 1, i64 0 }, ptr %a27 store { ptr, i64, i64 } %t25, ptr %a28 call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) store { ptr, i64, i64 } %t25, ptr %a29 call void @finch_str_drop(ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a26 call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } %t30 endif2495: %t31 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t31, ptr %a32 store { ptr, i64, i64 } { ptr @.str.1409, i64 5, i64 0 }, ptr %a33 %t34 = call i32 @finch_str_eq(ptr %a32, ptr %a33) %t35 = icmp ne i32 %t34, 0 br i1 %t35, label %then2496, label %endif2498 then2496: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1410, i64 6, i64 0 } endif2498: %t36 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t36, ptr %a37 store { ptr, i64, i64 } { ptr @.str.1411, i64 3, i64 0 }, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 br i1 %t40, label %then2499, label %endif2501 then2499: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1412, i64 5, i64 0 } endif2501: %t41 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.1413, i64 3, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 br label %logic.from2502 logic.from2502: br i1 %t45, label %logic.end2504, label %logic.rhs2503 logic.rhs2503: %t46 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t46, ptr %a47 store { ptr, i64, i64 } { ptr @.str.1414, i64 5, i64 0 }, ptr %a48 %t49 = call i32 @finch_str_eq(ptr %a47, ptr %a48) %t50 = icmp ne i32 %t49, 0 br label %logic.rend2505 logic.rend2505: br label %logic.end2504 logic.end2504: %t51 = phi i1 [ true, %logic.from2502 ], [ %t50, %logic.rend2505 ] br i1 %t51, label %then2506, label %endif2508 then2506: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1415, i64 17, i64 0 } endif2508: %t52 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.1416, i64 3, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 br i1 %t56, label %then2509, label %endif2511 then2509: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1417, i64 37, i64 0 } endif2511: %t57 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t57, ptr %a58 store { ptr, i64, i64 } { ptr @.str.1418, i64 5, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 br i1 %t61, label %then2512, label %endif2514 then2512: %t62 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t63 = load i64, ptr %t62 call void @finch_str_from_int(ptr %a64, i64 %t63) %t65 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } { ptr @.str.1419, i64 1, i64 0 }, ptr %a67 store { ptr, i64, i64 } %t65, ptr %a68 call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) store { ptr, i64, i64 } %t65, ptr %a69 call void @finch_str_drop(ptr %a69) %t70 = load { ptr, i64, i64 }, ptr %a66 store { ptr, i64, i64 } %t70, ptr %a72 store { ptr, i64, i64 } { ptr @.str.1420, i64 3, i64 0 }, ptr %a73 call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) store { ptr, i64, i64 } %t70, ptr %a74 call void @finch_str_drop(ptr %a74) %t75 = load { ptr, i64, i64 }, ptr %a71 %t76 = load ptr, ptr %a1 %t77 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t78 = load { ptr, i64, i64 }, ptr %t77 %t79 = extractvalue { ptr, i64, i64 } %t78, 1 %t80 = icmp uge i64 0, %t79 br i1 %t80, label %range2515, label %inrange2516 range2515: call void @finch_panic_index(ptr @.str.1421, i64 632, i64 0, i64 %t79) unreachable inrange2516: %t81 = extractvalue { ptr, i64, i64 } %t78, 0 %t82 = getelementptr inbounds %S.ast.Type, ptr %t81, i64 0 %t83 = load %S.ast.Type, ptr %t82 %t84 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t76, %S.ast.Type %t83) store { ptr, i64, i64 } %t75, ptr %a86 store { ptr, i64, i64 } %t84, ptr %a87 call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) store { ptr, i64, i64 } %t75, ptr %a88 call void @finch_str_drop(ptr %a88) store { ptr, i64, i64 } %t84, ptr %a89 call void @finch_str_drop(ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a85 store { ptr, i64, i64 } %t90, ptr %a92 store { ptr, i64, i64 } { ptr @.str.1422, i64 1, i64 0 }, ptr %a93 call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) store { ptr, i64, i64 } %t90, ptr %a94 call void @finch_str_drop(ptr %a94) %t95 = load { ptr, i64, i64 }, ptr %a91 call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } %t95 endif2514: %t96 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t96, ptr %a97 store { ptr, i64, i64 } { ptr @.str.1423, i64 4, i64 0 }, ptr %a98 %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) %t100 = icmp ne i32 %t99, 0 br i1 %t100, label %then2517, label %endif2519 then2517: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1424, i64 3, i64 0 } endif2519: %t101 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t101, ptr %a102 store { ptr, i64, i64 } { ptr @.str.1425, i64 3, i64 0 }, ptr %a103 %t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103) %t105 = icmp ne i32 %t104, 0 br label %logic.from2520 logic.from2520: br i1 %t105, label %logic.end2522, label %logic.rhs2521 logic.rhs2521: %t106 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t106, ptr %a107 store { ptr, i64, i64 } { ptr @.str.1426, i64 4, i64 0 }, ptr %a108 %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) %t110 = icmp ne i32 %t109, 0 br label %logic.rend2523 logic.rend2523: br label %logic.end2522 logic.end2522: %t111 = phi i1 [ true, %logic.from2520 ], [ %t110, %logic.rend2523 ] br i1 %t111, label %then2524, label %endif2526 then2524: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1427, i64 3, i64 0 } endif2526: %t112 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t112, ptr %a113 store { ptr, i64, i64 } { ptr @.str.1428, i64 4, i64 0 }, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 br i1 %t116, label %then2527, label %endif2529 then2527: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1429, i64 4, i64 0 } endif2529: %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t118 = load { ptr, i64, i64 }, ptr %t117 %t119 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t118) store { ptr, i64, i64 } { ptr @.str.1430, i64 3, i64 0 }, ptr %a121 store { ptr, i64, i64 } %t119, ptr %a122 call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) store { ptr, i64, i64 } %t119, ptr %a123 call void @finch_str_drop(ptr %a123) %t124 = load { ptr, i64, i64 }, ptr %a120 store { ptr, i64, i64 } %t124, ptr %a126 store { ptr, i64, i64 } { ptr @.str.1431, i64 1, i64 0 }, ptr %a127 call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) store { ptr, i64, i64 } %t124, ptr %a128 call void @finch_str_drop(ptr %a128) %t129 = load { ptr, i64, i64 }, ptr %a125 %t130 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t131 = load { ptr, i64, i64 }, ptr %t130 %t132 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t131) store { ptr, i64, i64 } %t129, ptr %a134 store { ptr, i64, i64 } %t132, ptr %a135 call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) store { ptr, i64, i64 } %t129, ptr %a136 call void @finch_str_drop(ptr %a136) store { ptr, i64, i64 } %t132, ptr %a137 call void @finch_str_drop(ptr %a137) %t138 = load { ptr, i64, i64 }, ptr %a133 call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } %t138 } define internal { ptr, i64, i64 } @finch.gen.retTy(ptr %p0, %S.gen.FnSig %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.FnSig, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.gen.FnSig %p1, ptr %a2 %t3 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 %t4 = load i1, ptr %t3 %t5 = xor i1 %t4, true br i1 %t5, label %then2530, label %endif2532 then2530: %t6 = load ptr, ptr %a1 %t7 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t8 = load %S.ast.Type, ptr %t7 %t9 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t6, %S.ast.Type %t8) ret { ptr, i64, i64 } %t9 endif2532: store { ptr, i64, i64 } { ptr @.str.1432, i64 2, i64 0 }, ptr %a10 %t11 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t12 = getelementptr inbounds %S.ast.Type, ptr %t11, i32 0, i32 0 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1433, i64 4, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp eq i32 %t16, 0 br i1 %t17, label %then2533, label %endif2535 then2533: %t18 = load ptr, ptr %a1 %t19 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t20 = load %S.ast.Type, ptr %t19 %t21 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t18, %S.ast.Type %t20) %t22 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t21, ptr %a10 store { ptr, i64, i64 } %t22, ptr %a23 call void @finch_str_drop(ptr %a23) br label %endif2535 endif2535: %t24 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1434, i64 6, i64 0 }, ptr %a26 store { ptr, i64, i64 } %t24, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t28, ptr %a30 store { ptr, i64, i64 } { ptr @.str.1435, i64 21, i64 0 }, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) store { ptr, i64, i64 } %t28, ptr %a32 call void @finch_str_drop(ptr %a32) %t33 = load { ptr, i64, i64 }, ptr %a29 call void @finch_str_drop(ptr %a10) ret { ptr, i64, i64 } %t33 } define internal { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %p0) { entry: %a1 = alloca %S.ast.Node, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Node %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a5 store { ptr, i64, i64 } { ptr @.str.1436, i64 1, i64 0 }, ptr %a6 call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a4 %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 11 %t9 = load i64, ptr %t8 call void @finch_str_from_int(ptr %a10, i64 %t9) %t11 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t7, ptr %a13 store { ptr, i64, i64 } %t11, ptr %a14 call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) store { ptr, i64, i64 } %t7, ptr %a15 call void @finch_str_drop(ptr %a15) store { ptr, i64, i64 } %t11, ptr %a16 call void @finch_str_drop(ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t17, ptr %a19 store { ptr, i64, i64 } { ptr @.str.1437, i64 1, i64 0 }, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) store { ptr, i64, i64 } %t17, ptr %a21 call void @finch_str_drop(ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a18 %t23 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 12 %t24 = load i64, ptr %t23 call void @finch_str_from_int(ptr %a25, i64 %t24) %t26 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t22, ptr %a28 store { ptr, i64, i64 } %t26, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) store { ptr, i64, i64 } %t22, ptr %a30 call void @finch_str_drop(ptr %a30) store { ptr, i64, i64 } %t26, ptr %a31 call void @finch_str_drop(ptr %a31) %t32 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t32, ptr %a34 store { ptr, i64, i64 } { ptr @.str.1438, i64 1, i64 0 }, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) store { ptr, i64, i64 } %t32, ptr %a36 call void @finch_str_drop(ptr %a36) %t37 = load { ptr, i64, i64 }, ptr %a33 %t38 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 13 %t39 = load i64, ptr %t38 call void @finch_str_from_int(ptr %a40, i64 %t39) %t41 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t37, ptr %a43 store { ptr, i64, i64 } %t41, ptr %a44 call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) store { ptr, i64, i64 } %t37, ptr %a45 call void @finch_str_drop(ptr %a45) store { ptr, i64, i64 } %t41, ptr %a46 call void @finch_str_drop(ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a42 ret { ptr, i64, i64 } %t47 } define internal { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 call void @finch_str_copy(ptr %a5, ptr %a4) %t6 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t6, ptr %a7 %t8 = load %S.ast.Type, ptr %a1 %t9 = call i1 @finch.gen.isInt(%S.ast.Type %t8) br label %logic.from2536 logic.from2536: br i1 %t9, label %logic.end2538, label %logic.rhs2537 logic.rhs2537: %t10 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1439, i64 4, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp ne i32 %t13, 0 br label %logic.rend2539 logic.rend2539: br label %logic.end2538 logic.end2538: %t15 = phi i1 [ true, %logic.from2536 ], [ %t14, %logic.rend2539 ] br label %logic.from2540 logic.from2540: br i1 %t15, label %logic.end2542, label %logic.rhs2541 logic.rhs2541: %t16 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t16, ptr %a17 store { ptr, i64, i64 } { ptr @.str.1440, i64 4, i64 0 }, ptr %a18 %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) %t20 = icmp ne i32 %t19, 0 br label %logic.rend2543 logic.rend2543: br label %logic.end2542 logic.end2542: %t21 = phi i1 [ true, %logic.from2540 ], [ %t20, %logic.rend2543 ] br i1 %t21, label %then2544, label %endif2546 then2544: call void @finch_str_drop(ptr %a7) ret { ptr, i64, i64 } { ptr @.str.1441, i64 1, i64 0 } endif2546: %t22 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.1442, i64 4, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 br i1 %t26, label %then2547, label %endif2549 then2547: call void @finch_str_drop(ptr %a7) ret { ptr, i64, i64 } { ptr @.str.1443, i64 5, i64 0 } endif2549: %t27 = load %S.ast.Type, ptr %a1 %t28 = call i1 @finch.gen.isFloat(%S.ast.Type %t27) br i1 %t28, label %then2550, label %endif2552 then2550: call void @finch_str_drop(ptr %a7) ret { ptr, i64, i64 } { ptr @.str.1444, i64 3, i64 0 } endif2552: %t29 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } { ptr @.str.1445, i64 3, i64 0 }, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 br label %logic.from2553 logic.from2553: br i1 %t33, label %logic.end2555, label %logic.rhs2554 logic.rhs2554: %t34 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t34, ptr %a35 store { ptr, i64, i64 } { ptr @.str.1446, i64 4, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 br label %logic.rend2556 logic.rend2556: br label %logic.end2555 logic.end2555: %t39 = phi i1 [ true, %logic.from2553 ], [ %t38, %logic.rend2556 ] br i1 %t39, label %then2557, label %endif2559 then2557: call void @finch_str_drop(ptr %a7) ret { ptr, i64, i64 } { ptr @.str.1447, i64 4, i64 0 } endif2559: call void @finch_str_drop(ptr %a7) ret { ptr, i64, i64 } { ptr @.str.1448, i64 15, i64 0 } } define internal { ptr, i64, i64 } @finch.gen.sizeOf(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load %S.ast.Type, ptr %a2 %t5 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t3, %S.ast.Type %t4) store { ptr, i64, i64 } { ptr @.str.1449, i64 29, i64 0 }, ptr %a7 store { ptr, i64, i64 } %t5, ptr %a8 call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) store { ptr, i64, i64 } %t5, ptr %a9 call void @finch_str_drop(ptr %a9) %t10 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t10, ptr %a12 store { ptr, i64, i64 } { ptr @.str.1450, i64 26, i64 0 }, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) store { ptr, i64, i64 } %t10, ptr %a14 call void @finch_str_drop(ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a11 ret { ptr, i64, i64 } %t15 } define internal i1 @finch.gen.owning(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 store { ptr, i64, i64 } { ptr @.str.1451, i64 3, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 br label %logic.from2560 logic.from2560: br i1 %t8, label %logic.end2562, label %logic.rhs2561 logic.rhs2561: %t9 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t10 = load { ptr, i64, i64 }, ptr %t9 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1452, i64 5, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp ne i32 %t13, 0 br label %logic.rend2563 logic.rend2563: br label %logic.end2562 logic.end2562: %t15 = phi i1 [ true, %logic.from2560 ], [ %t14, %logic.rend2563 ] br label %logic.from2564 logic.from2564: br i1 %t15, label %logic.end2566, label %logic.rhs2565 logic.rhs2565: %t16 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t17 = load { ptr, i64, i64 }, ptr %t16 store { ptr, i64, i64 } %t17, ptr %a18 store { ptr, i64, i64 } { ptr @.str.1453, i64 3, i64 0 }, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp ne i32 %t20, 0 br label %logic.rend2567 logic.rend2567: br label %logic.end2566 logic.end2566: %t22 = phi i1 [ true, %logic.from2564 ], [ %t21, %logic.rend2567 ] br i1 %t22, label %then2568, label %endif2570 then2568: ret i1 true endif2570: %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t24 = load { ptr, i64, i64 }, ptr %t23 store { ptr, i64, i64 } %t24, ptr %a25 store { ptr, i64, i64 } { ptr @.str.1454, i64 6, i64 0 }, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 br i1 %t28, label %then2571, label %endif2573 then2571: %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null br i1 %t30, label %panic2574, label %ok2575 panic2574: call void @finch_panic(ptr @.str.1455, i64 690, ptr @.str.1456) unreachable ok2575: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 16 %t32 = load ptr, ptr %a1 %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t34 = load { ptr, i64, i64 }, ptr %t33 %t35 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t36 = load { ptr, i64, i64 }, ptr %t35 %t37 = call i64 @finch.gen.findStruct(ptr %t32, { ptr, i64, i64 } %t34, { ptr, i64, i64 } %t36) %t38 = load { ptr, i64, i64 }, ptr %t31 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp uge i64 %t37, %t39 br i1 %t40, label %range2576, label %inrange2577 range2576: call void @finch_panic_index(ptr @.str.1457, i64 690, i64 %t37, i64 %t39) unreachable inrange2577: %t41 = extractvalue { ptr, i64, i64 } %t38, 0 %t42 = getelementptr inbounds %S.gen.StructDef, ptr %t41, i64 %t37 %t43 = getelementptr inbounds %S.gen.StructDef, ptr %t42, i32 0, i32 16 %t44 = load i1, ptr %t43 ret i1 %t44 endif2573: ret i1 false } define internal { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.1458, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then2578, label %endif2580 then2578: %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t9 = load { ptr, i64, i64 }, ptr %t8 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 0, %t10 br i1 %t11, label %range2581, label %inrange2582 range2581: call void @finch_panic_index(ptr @.str.1460, i64 697, i64 0, i64 %t10) unreachable inrange2582: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 0 %t14 = load %S.ast.Type, ptr %t13 %t15 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t14) store { ptr, i64, i64 } { ptr @.str.1459, i64 4, i64 0 }, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) store { ptr, i64, i64 } %t15, ptr %a19 call void @finch_str_drop(ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a16 ret { ptr, i64, i64 } %t20 endif2580: %t21 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.1461, i64 3, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 br i1 %t26, label %then2583, label %endif2585 then2583: %t27 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 0, %t29 br i1 %t30, label %range2586, label %inrange2587 range2586: call void @finch_panic_index(ptr @.str.1463, i64 700, i64 0, i64 %t29) unreachable inrange2587: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i64 0 %t33 = load %S.ast.Type, ptr %t32 %t34 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t33) store { ptr, i64, i64 } { ptr @.str.1462, i64 4, i64 0 }, ptr %a36 store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) store { ptr, i64, i64 } %t34, ptr %a38 call void @finch_str_drop(ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t39, ptr %a41 store { ptr, i64, i64 } { ptr @.str.1464, i64 1, i64 0 }, ptr %a42 call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) store { ptr, i64, i64 } %t39, ptr %a43 call void @finch_str_drop(ptr %a43) %t44 = load { ptr, i64, i64 }, ptr %a40 %t45 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 1, %t47 br i1 %t48, label %range2588, label %inrange2589 range2588: call void @finch_panic_index(ptr @.str.1465, i64 700, i64 1, i64 %t47) unreachable inrange2589: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Type, ptr %t49, i64 1 %t51 = load %S.ast.Type, ptr %t50 %t52 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t51) store { ptr, i64, i64 } %t44, ptr %a54 store { ptr, i64, i64 } %t52, ptr %a55 call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) store { ptr, i64, i64 } %t44, ptr %a56 call void @finch_str_drop(ptr %a56) store { ptr, i64, i64 } %t52, ptr %a57 call void @finch_str_drop(ptr %a57) %t58 = load { ptr, i64, i64 }, ptr %a53 ret { ptr, i64, i64 } %t58 endif2585: %t59 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } %t60, ptr %a61 store { ptr, i64, i64 } { ptr @.str.1466, i64 4, i64 0 }, ptr %a62 %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) %t64 = icmp ne i32 %t63, 0 br i1 %t64, label %then2590, label %endif2592 then2590: %t65 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t66 = load { ptr, i64, i64 }, ptr %t65 %t67 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t66) store { ptr, i64, i64 } { ptr @.str.1467, i64 2, i64 0 }, ptr %a69 store { ptr, i64, i64 } %t67, ptr %a70 call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) store { ptr, i64, i64 } %t67, ptr %a71 call void @finch_str_drop(ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a68 store { ptr, i64, i64 } %t72, ptr %a74 store { ptr, i64, i64 } { ptr @.str.1468, i64 1, i64 0 }, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) store { ptr, i64, i64 } %t72, ptr %a76 call void @finch_str_drop(ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a73 %t78 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 %t79 = load { ptr, i64, i64 }, ptr %t78 store { ptr, i64, i64 } %t77, ptr %a81 store { ptr, i64, i64 } %t79, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) store { ptr, i64, i64 } %t77, ptr %a83 call void @finch_str_drop(ptr %a83) %t84 = load { ptr, i64, i64 }, ptr %a80 ret { ptr, i64, i64 } %t84 endif2592: %t85 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t86 = load { ptr, i64, i64 }, ptr %t85 store { ptr, i64, i64 } %t86, ptr %a87 store { ptr, i64, i64 } { ptr @.str.1469, i64 6, i64 0 }, ptr %a88 %t89 = call i32 @finch_str_eq(ptr %a87, ptr %a88) %t90 = icmp ne i32 %t89, 0 br i1 %t90, label %then2593, label %endif2595 then2593: %t91 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t92 = load { ptr, i64, i64 }, ptr %t91 %t93 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t92) store { ptr, i64, i64 } { ptr @.str.1470, i64 2, i64 0 }, ptr %a95 store { ptr, i64, i64 } %t93, ptr %a96 call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) store { ptr, i64, i64 } %t93, ptr %a97 call void @finch_str_drop(ptr %a97) %t98 = load { ptr, i64, i64 }, ptr %a94 store { ptr, i64, i64 } %t98, ptr %a100 store { ptr, i64, i64 } { ptr @.str.1471, i64 1, i64 0 }, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) store { ptr, i64, i64 } %t98, ptr %a102 call void @finch_str_drop(ptr %a102) %t103 = load { ptr, i64, i64 }, ptr %a99 %t104 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 %t105 = load { ptr, i64, i64 }, ptr %t104 %t106 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t105) store { ptr, i64, i64 } %t103, ptr %a108 store { ptr, i64, i64 } %t106, ptr %a109 call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) store { ptr, i64, i64 } %t103, ptr %a110 call void @finch_str_drop(ptr %a110) store { ptr, i64, i64 } %t106, ptr %a111 call void @finch_str_drop(ptr %a111) %t112 = load { ptr, i64, i64 }, ptr %a107 ret { ptr, i64, i64 } %t112 endif2595: %t113 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t114 = load { ptr, i64, i64 }, ptr %t113 store { ptr, i64, i64 } %t114, ptr %a115 call void @finch_str_copy(ptr %a116, ptr %a115) %t117 = load { ptr, i64, i64 }, ptr %a116 ret { ptr, i64, i64 } %t117 } define internal { ptr, i64, i64 } @finch.gen.hex(i64 %p0) { entry: %a1 = alloca i64, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 store i64 %p0, ptr %a1 store { ptr, i64, i64 } { ptr @.str.1472, i64 16, i64 0 }, ptr %a2 %t3 = load i64, ptr %a1 %t4 = sdiv i64 %t3, 16 %t5 = load { ptr, i64, i64 }, ptr %a2 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 %t4, %t6 br i1 %t7, label %range2596, label %inrange2597 range2596: call void @finch_panic_index(ptr @.str.1473, i64 715, i64 %t4, i64 %t6) unreachable inrange2597: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds i8, ptr %t8, i64 %t4 %t10 = load i8, ptr %t9 call void @finch_str_from_char(ptr %a11, i8 signext %t10) %t12 = load { ptr, i64, i64 }, ptr %a11 %t13 = load i64, ptr %a1 %t14 = srem i64 %t13, 16 %t15 = load { ptr, i64, i64 }, ptr %a2 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 %t14, %t16 br i1 %t17, label %range2598, label %inrange2599 range2598: call void @finch_panic_index(ptr @.str.1474, i64 715, i64 %t14, i64 %t16) unreachable inrange2599: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds i8, ptr %t18, i64 %t14 %t20 = load i8, ptr %t19 call void @finch_str_from_char(ptr %a21, i8 signext %t20) %t22 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t12, ptr %a24 store { ptr, i64, i64 } %t22, ptr %a25 call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) store { ptr, i64, i64 } %t12, ptr %a26 call void @finch_str_drop(ptr %a26) store { ptr, i64, i64 } %t22, ptr %a27 call void @finch_str_drop(ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a23 call void @finch_str_drop(ptr %a2) ret { ptr, i64, i64 } %t28 } define internal { ptr, i64, i64 } @finch.gen.strGlobal(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca i64, align 16 %a29 = alloca i8, align 16 %a32 = alloca i64, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2600, label %ok2601 panic2600: call void @finch_panic(ptr @.str.1475, i64 719, ptr @.str.1476) unreachable ok2601: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 8 %t6 = load i64, ptr %t5 %t7 = add i64 %t6, 1 store i64 %t7, ptr %t5 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic2602, label %ok2603 panic2602: call void @finch_panic(ptr @.str.1478, i64 720, ptr @.str.1479) unreachable ok2603: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 8 %t11 = load i64, ptr %t10 call void @finch_str_from_int(ptr %a12, i64 %t11) %t13 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } { ptr @.str.1477, i64 6, i64 0 }, ptr %a15 store { ptr, i64, i64 } %t13, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) store { ptr, i64, i64 } %t13, ptr %a17 call void @finch_str_drop(ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } zeroinitializer, ptr %a20 store i64 0, ptr %a21 br label %each.cond2604 each.cond2604: %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = load i64, ptr %a21 %t25 = icmp slt i64 %t24, %t23 br i1 %t25, label %each.body2605, label %each.end2607 each.body2605: %t26 = load ptr, ptr %a2 %t27 = getelementptr inbounds i8, ptr %t26, i64 %t24 %t28 = load i8, ptr %t27 store i8 %t28, ptr %a29 %t30 = load i8, ptr %a29 %t31 = zext i8 %t30 to i64 store i64 %t31, ptr %a32 %t33 = load i64, ptr %a32 %t34 = icmp slt i64 %t33, 0 br i1 %t34, label %then2608, label %endif2610 then2608: %t35 = load i64, ptr %a32 %t36 = add i64 %t35, 256 store i64 %t36, ptr %a32 br label %endif2610 endif2610: %t37 = load i64, ptr %a32 %t38 = icmp sge i64 %t37, 32 br label %logic.from2611 logic.from2611: br i1 %t38, label %logic.rhs2612, label %logic.end2613 logic.rhs2612: %t39 = load i64, ptr %a32 %t40 = icmp slt i64 %t39, 127 br label %logic.rend2614 logic.rend2614: br label %logic.end2613 logic.end2613: %t41 = phi i1 [ false, %logic.from2611 ], [ %t40, %logic.rend2614 ] br label %logic.from2615 logic.from2615: br i1 %t41, label %logic.rhs2616, label %logic.end2617 logic.rhs2616: %t42 = load i8, ptr %a29 %t43 = icmp ne i8 %t42, 34 br label %logic.rend2618 logic.rend2618: br label %logic.end2617 logic.end2617: %t44 = phi i1 [ false, %logic.from2615 ], [ %t43, %logic.rend2618 ] br label %logic.from2619 logic.from2619: br i1 %t44, label %logic.rhs2620, label %logic.end2621 logic.rhs2620: %t45 = load i8, ptr %a29 %t46 = icmp ne i8 %t45, 92 br label %logic.rend2622 logic.rend2622: br label %logic.end2621 logic.end2621: %t47 = phi i1 [ false, %logic.from2619 ], [ %t46, %logic.rend2622 ] br i1 %t47, label %then2623, label %else2624 then2623: %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 %t49 = load i8, ptr %a29 call void @finch_str_from_char(ptr %a50, i8 signext %t49) %t51 = load { ptr, i64, i64 }, ptr %a50 %t52 = load i64, ptr %t48 %t53 = add i64 %t52, 1 call void @finch_arr_reserve(ptr %a20, i64 %t53, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t54 = load ptr, ptr %a20 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 store { ptr, i64, i64 } %t51, ptr %t55 store i64 %t53, ptr %t48 br label %endif2625 else2624: %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 %t57 = load i64, ptr %a32 %t58 = call { ptr, i64, i64 } @finch.gen.hex(i64 %t57) store { ptr, i64, i64 } { ptr @.str.1480, i64 1, i64 0 }, ptr %a60 store { ptr, i64, i64 } %t58, ptr %a61 call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) store { ptr, i64, i64 } %t58, ptr %a62 call void @finch_str_drop(ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a59 %t64 = load i64, ptr %t56 %t65 = add i64 %t64, 1 call void @finch_arr_reserve(ptr %a20, i64 %t65, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t66 = load ptr, ptr %a20 %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t66, i64 %t64 store { ptr, i64, i64 } %t63, ptr %t67 store i64 %t65, ptr %t56 br label %endif2625 endif2625: br label %each.step2606 each.step2606: %t68 = load i64, ptr %a21 %t69 = add i64 %t68, 1 store i64 %t69, ptr %a21 br label %each.cond2604 each.end2607: %t70 = load ptr, ptr %a1 %t71 = icmp eq ptr %t70, null br i1 %t71, label %panic2626, label %ok2627 panic2626: call void @finch_panic(ptr @.str.1481, i64 733, ptr @.str.1482) unreachable ok2627: %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 2 %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i32 0, i32 1 %t74 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t74, ptr %a76 store { ptr, i64, i64 } { ptr @.str.1483, i64 34, i64 0 }, ptr %a77 call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) %t78 = load { ptr, i64, i64 }, ptr %a75 %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t80 = load i64, ptr %t79 %t81 = add i64 %t80, 1 call void @finch_str_from_int(ptr %a82, i64 %t81) %t83 = load { ptr, i64, i64 }, ptr %a82 store { ptr, i64, i64 } %t78, ptr %a85 store { ptr, i64, i64 } %t83, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) store { ptr, i64, i64 } %t78, ptr %a87 call void @finch_str_drop(ptr %a87) store { ptr, i64, i64 } %t83, ptr %a88 call void @finch_str_drop(ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a84 store { ptr, i64, i64 } %t89, ptr %a91 store { ptr, i64, i64 } { ptr @.str.1484, i64 9, i64 0 }, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) store { ptr, i64, i64 } %t89, ptr %a93 call void @finch_str_drop(ptr %a93) %t94 = load { ptr, i64, i64 }, ptr %a90 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1485, i64 0, i64 0 }, ptr %a96 call void @finch_str_join(ptr %a97, ptr %a20, ptr %a96) %t98 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } %t94, ptr %a100 store { ptr, i64, i64 } %t98, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) store { ptr, i64, i64 } %t94, ptr %a102 call void @finch_str_drop(ptr %a102) store { ptr, i64, i64 } %t98, ptr %a103 call void @finch_str_drop(ptr %a103) %t104 = load { ptr, i64, i64 }, ptr %a99 store { ptr, i64, i64 } %t104, ptr %a106 store { ptr, i64, i64 } { ptr @.str.1486, i64 4, i64 0 }, ptr %a107 call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) store { ptr, i64, i64 } %t104, ptr %a108 call void @finch_str_drop(ptr %a108) %t109 = load { ptr, i64, i64 }, ptr %a105 %t110 = load i64, ptr %t73 %t111 = add i64 %t110, 1 call void @finch_arr_reserve(ptr %t72, i64 %t111, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t112 = load ptr, ptr %t72 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 %t110 store { ptr, i64, i64 } %t109, ptr %t113 store i64 %t111, ptr %t73 %t114 = load { ptr, i64, i64 }, ptr %a19 call void @finch.drop.arr_str(ptr %a20) ret { ptr, i64, i64 } %t114 } define internal %S.gen.Val @finch.gen.strConst(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t3, { ptr, i64, i64 } %t4) store { ptr, i64, i64 } %t5, ptr %a6 %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } { ptr @.str.1487, i64 6, i64 0 }, ptr %a9 store { ptr, i64, i64 } %t7, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) %t11 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t11, ptr %a13 store { ptr, i64, i64 } { ptr @.str.1488, i64 6, i64 0 }, ptr %a14 call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) store { ptr, i64, i64 } %t11, ptr %a15 call void @finch_str_drop(ptr %a15) %t16 = load { ptr, i64, i64 }, ptr %a12 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t18 = load i64, ptr %t17 call void @finch_str_from_int(ptr %a19, i64 %t18) %t20 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t16, ptr %a22 store { ptr, i64, i64 } %t20, ptr %a23 call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) store { ptr, i64, i64 } %t16, ptr %a24 call void @finch_str_drop(ptr %a24) store { ptr, i64, i64 } %t20, ptr %a25 call void @finch_str_drop(ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t26, ptr %a28 store { ptr, i64, i64 } { ptr @.str.1489, i64 9, i64 0 }, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) store { ptr, i64, i64 } %t26, ptr %a30 call void @finch_str_drop(ptr %a30) %t31 = load { ptr, i64, i64 }, ptr %a27 %t32 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t31, 0 %t33 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1490, i64 3, i64 0 }) %t34 = insertvalue %S.gen.Val %t32, %S.ast.Type %t33, 1 %t35 = insertvalue %S.gen.Val %t34, i1 true, 2 call void @finch_str_drop(ptr %a6) ret %S.gen.Val %t35 } define internal void @finch.gen.panicIf(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Node %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Node, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Node %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t5, { ptr, i64, i64 } { ptr @.str.1491, i64 5, i64 0 }) store { ptr, i64, i64 } %t6, ptr %a7 %t8 = load ptr, ptr %a1 %t9 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t8, { ptr, i64, i64 } { ptr @.str.1492, i64 2, i64 0 }) store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = load { ptr, i64, i64 }, ptr %a2 %t13 = load { ptr, i64, i64 }, ptr %a7 %t14 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.condBr(ptr %t11, { ptr, i64, i64 } %t12, { ptr, i64, i64 } %t13, { ptr, i64, i64 } %t14) %t15 = load ptr, ptr %a1 %t16 = load { ptr, i64, i64 }, ptr %a7 call void @finch.gen.label(ptr %t15, { ptr, i64, i64 } %t16) %t17 = load ptr, ptr %a1 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic2628, label %ok2629 panic2628: call void @finch_panic(ptr @.str.1493, i64 749, ptr @.str.1494) unreachable ok2629: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 13 %t22 = load i64, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %t20 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 %t22, %t24 br i1 %t25, label %range2630, label %inrange2631 range2630: call void @finch_panic_index(ptr @.str.1495, i64 749, i64 %t22, i64 %t24) unreachable inrange2631: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t22 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t17, { ptr, i64, i64 } %t28) store { ptr, i64, i64 } %t29, ptr %a30 %t31 = load ptr, ptr %a1 %t32 = load { ptr, i64, i64 }, ptr %a3 %t33 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t31, { ptr, i64, i64 } %t32) store { ptr, i64, i64 } %t33, ptr %a34 %t35 = load ptr, ptr %a1 %t36 = load { ptr, i64, i64 }, ptr %a30 store { ptr, i64, i64 } { ptr @.str.1496, i64 27, i64 0 }, ptr %a38 store { ptr, i64, i64 } %t36, ptr %a39 call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t40, ptr %a42 store { ptr, i64, i64 } { ptr @.str.1497, i64 6, i64 0 }, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) store { ptr, i64, i64 } %t40, ptr %a44 call void @finch_str_drop(ptr %a44) %t45 = load { ptr, i64, i64 }, ptr %a41 %t46 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 11 %t47 = load i64, ptr %t46 call void @finch_str_from_int(ptr %a48, i64 %t47) %t49 = load { ptr, i64, i64 }, ptr %a48 store { ptr, i64, i64 } %t45, ptr %a51 store { ptr, i64, i64 } %t49, ptr %a52 call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) store { ptr, i64, i64 } %t45, ptr %a53 call void @finch_str_drop(ptr %a53) store { ptr, i64, i64 } %t49, ptr %a54 call void @finch_str_drop(ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } %t55, ptr %a57 store { ptr, i64, i64 } { ptr @.str.1498, i64 6, i64 0 }, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) store { ptr, i64, i64 } %t55, ptr %a59 call void @finch_str_drop(ptr %a59) %t60 = load { ptr, i64, i64 }, ptr %a56 %t61 = load { ptr, i64, i64 }, ptr %a34 store { ptr, i64, i64 } %t60, ptr %a63 store { ptr, i64, i64 } %t61, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) store { ptr, i64, i64 } %t60, ptr %a65 call void @finch_str_drop(ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a62 store { ptr, i64, i64 } %t66, ptr %a68 store { ptr, i64, i64 } { ptr @.str.1499, i64 1, i64 0 }, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) store { ptr, i64, i64 } %t66, ptr %a70 call void @finch_str_drop(ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a67 call void @finch.gen.emit(ptr %t35, { ptr, i64, i64 } %t71) store { ptr, i64, i64 } %t71, ptr %a72 call void @finch_str_drop(ptr %a72) %t73 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t73, { ptr, i64, i64 } { ptr @.str.1500, i64 11, i64 0 }) %t74 = load ptr, ptr %a1 %t75 = icmp eq ptr %t74, null br i1 %t75, label %panic2632, label %ok2633 panic2632: call void @finch_panic(ptr @.str.1501, i64 753, ptr @.str.1502) unreachable ok2633: %t76 = getelementptr inbounds %S.gen.Gen, ptr %t74, i32 0, i32 9 store i1 true, ptr %t76 %t77 = load ptr, ptr %a1 %t78 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.label(ptr %t77, { ptr, i64, i64 } %t78) call void @finch_str_drop(ptr %a34) call void @finch_str_drop(ptr %a30) call void @finch_str_drop(ptr %a10) call void @finch_str_drop(ptr %a7) ret void } define internal void @finch.gen.boundsCheck(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Node %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Node, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Node %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t5, { ptr, i64, i64 } { ptr @.str.1503, i64 5, i64 0 }) store { ptr, i64, i64 } %t6, ptr %a7 %t8 = load ptr, ptr %a1 %t9 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t8, { ptr, i64, i64 } { ptr @.str.1504, i64 7, i64 0 }) store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1505, i64 13, i64 0 }, ptr %a14 store { ptr, i64, i64 } %t12, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) %t16 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t16, ptr %a18 store { ptr, i64, i64 } { ptr @.str.1506, i64 2, i64 0 }, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) store { ptr, i64, i64 } %t16, ptr %a20 call void @finch_str_drop(ptr %a20) %t21 = load { ptr, i64, i64 }, ptr %a17 %t22 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t21, ptr %a24 store { ptr, i64, i64 } %t22, ptr %a25 call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) store { ptr, i64, i64 } %t21, ptr %a26 call void @finch_str_drop(ptr %a26) %t27 = load { ptr, i64, i64 }, ptr %a23 %t28 = call { ptr, i64, i64 } @finch.gen.op(ptr %t11, { ptr, i64, i64 } %t27) store { ptr, i64, i64 } %t27, ptr %a29 call void @finch_str_drop(ptr %a29) store { ptr, i64, i64 } %t28, ptr %a30 %t31 = load ptr, ptr %a1 %t32 = load { ptr, i64, i64 }, ptr %a30 %t33 = load { ptr, i64, i64 }, ptr %a7 %t34 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.condBr(ptr %t31, { ptr, i64, i64 } %t32, { ptr, i64, i64 } %t33, { ptr, i64, i64 } %t34) %t35 = load ptr, ptr %a1 %t36 = load { ptr, i64, i64 }, ptr %a7 call void @finch.gen.label(ptr %t35, { ptr, i64, i64 } %t36) %t37 = load ptr, ptr %a1 %t38 = load ptr, ptr %a1 %t39 = icmp eq ptr %t38, null br i1 %t39, label %panic2634, label %ok2635 panic2634: call void @finch_panic(ptr @.str.1507, i64 763, ptr @.str.1508) unreachable ok2635: %t40 = getelementptr inbounds %S.gen.Gen, ptr %t38, i32 0, i32 1 %t41 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 13 %t42 = load i64, ptr %t41 %t43 = load { ptr, i64, i64 }, ptr %t40 %t44 = extractvalue { ptr, i64, i64 } %t43, 1 %t45 = icmp uge i64 %t42, %t44 br i1 %t45, label %range2636, label %inrange2637 range2636: call void @finch_panic_index(ptr @.str.1509, i64 763, i64 %t42, i64 %t44) unreachable inrange2637: %t46 = extractvalue { ptr, i64, i64 } %t43, 0 %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t42 %t48 = load { ptr, i64, i64 }, ptr %t47 %t49 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t37, { ptr, i64, i64 } %t48) store { ptr, i64, i64 } %t49, ptr %a50 %t51 = load ptr, ptr %a1 %t52 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } { ptr @.str.1510, i64 33, i64 0 }, ptr %a54 store { ptr, i64, i64 } %t52, ptr %a55 call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) %t56 = load { ptr, i64, i64 }, ptr %a53 store { ptr, i64, i64 } %t56, ptr %a58 store { ptr, i64, i64 } { ptr @.str.1511, i64 6, i64 0 }, ptr %a59 call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) store { ptr, i64, i64 } %t56, ptr %a60 call void @finch_str_drop(ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a57 %t62 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 11 %t63 = load i64, ptr %t62 call void @finch_str_from_int(ptr %a64, i64 %t63) %t65 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } %t61, ptr %a67 store { ptr, i64, i64 } %t65, ptr %a68 call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) store { ptr, i64, i64 } %t61, ptr %a69 call void @finch_str_drop(ptr %a69) store { ptr, i64, i64 } %t65, ptr %a70 call void @finch_str_drop(ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a66 store { ptr, i64, i64 } %t71, ptr %a73 store { ptr, i64, i64 } { ptr @.str.1512, i64 6, i64 0 }, ptr %a74 call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) store { ptr, i64, i64 } %t71, ptr %a75 call void @finch_str_drop(ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a72 %t77 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t76, ptr %a79 store { ptr, i64, i64 } %t77, ptr %a80 call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) store { ptr, i64, i64 } %t76, ptr %a81 call void @finch_str_drop(ptr %a81) %t82 = load { ptr, i64, i64 }, ptr %a78 store { ptr, i64, i64 } %t82, ptr %a84 store { ptr, i64, i64 } { ptr @.str.1513, i64 6, i64 0 }, ptr %a85 call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) store { ptr, i64, i64 } %t82, ptr %a86 call void @finch_str_drop(ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a83 %t88 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t87, ptr %a90 store { ptr, i64, i64 } %t88, ptr %a91 call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) store { ptr, i64, i64 } %t87, ptr %a92 call void @finch_str_drop(ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a89 store { ptr, i64, i64 } %t93, ptr %a95 store { ptr, i64, i64 } { ptr @.str.1514, i64 1, i64 0 }, ptr %a96 call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) store { ptr, i64, i64 } %t93, ptr %a97 call void @finch_str_drop(ptr %a97) %t98 = load { ptr, i64, i64 }, ptr %a94 call void @finch.gen.emit(ptr %t51, { ptr, i64, i64 } %t98) store { ptr, i64, i64 } %t98, ptr %a99 call void @finch_str_drop(ptr %a99) %t100 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t100, { ptr, i64, i64 } { ptr @.str.1515, i64 11, i64 0 }) %t101 = load ptr, ptr %a1 %t102 = icmp eq ptr %t101, null br i1 %t102, label %panic2638, label %ok2639 panic2638: call void @finch_panic(ptr @.str.1516, i64 766, ptr @.str.1517) unreachable ok2639: %t103 = getelementptr inbounds %S.gen.Gen, ptr %t101, i32 0, i32 9 store i1 true, ptr %t103 %t104 = load ptr, ptr %a1 %t105 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.label(ptr %t104, { ptr, i64, i64 } %t105) call void @finch_str_drop(ptr %a50) call void @finch_str_drop(ptr %a30) call void @finch_str_drop(ptr %a10) call void @finch_str_drop(ptr %a7) ret void } define internal %S.gen.Saved @finch.gen.beginHelper(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca %S.gen.Saved, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic2640, label %ok2641 panic2640: call void @finch_panic(ptr @.str.1518, i64 781, ptr @.str.1519) unreachable ok2641: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 4 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 call void @finch.copy.arr_str(ptr %a7, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 %t9 = insertvalue %S.gen.Saved zeroinitializer, { ptr, i64, i64 } %t8, 0 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic2642, label %ok2643 panic2642: call void @finch_panic(ptr @.str.1520, i64 781, ptr @.str.1521) unreachable ok2643: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 5 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t13, ptr %a14 call void @finch.copy.arr_str(ptr %a15, ptr %a14) %t16 = load { ptr, i64, i64 }, ptr %a15 %t17 = insertvalue %S.gen.Saved %t9, { ptr, i64, i64 } %t16, 1 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic2644, label %ok2645 panic2644: call void @finch_panic(ptr @.str.1522, i64 781, ptr @.str.1523) unreachable ok2645: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 6 %t21 = load i64, ptr %t20 %t22 = insertvalue %S.gen.Saved %t17, i64 %t21, 2 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null br i1 %t24, label %panic2646, label %ok2647 panic2646: call void @finch_panic(ptr @.str.1524, i64 781, ptr @.str.1525) unreachable ok2647: %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 9 %t26 = load i1, ptr %t25 %t27 = insertvalue %S.gen.Saved %t22, i1 %t26, 3 %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic2648, label %ok2649 panic2648: call void @finch_panic(ptr @.str.1526, i64 781, ptr @.str.1527) unreachable ok2649: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 36 %t31 = load i64, ptr %t30 %t32 = insertvalue %S.gen.Saved %t27, i64 %t31, 4 store %S.gen.Saved %t32, ptr %a33 %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null br i1 %t35, label %panic2650, label %ok2651 panic2650: call void @finch_panic(ptr @.str.1528, i64 782, ptr @.str.1529) unreachable ok2651: %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 36 store i64 -1, ptr %t36 store { ptr, i64, i64 } zeroinitializer, ptr %a37 %t38 = load { ptr, i64, i64 }, ptr %a37 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null br i1 %t40, label %panic2652, label %ok2653 panic2652: call void @finch_panic(ptr @.str.1530, i64 784, ptr @.str.1531) unreachable ok2653: %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 4 store { ptr, i64, i64 } %t38, ptr %a42 call void @finch.copy.arr_str(ptr %a43, ptr %a42) %t44 = load { ptr, i64, i64 }, ptr %a43 %t45 = load { ptr, i64, i64 }, ptr %t41 store { ptr, i64, i64 } %t44, ptr %t41 store { ptr, i64, i64 } %t45, ptr %a46 call void @finch.drop.arr_str(ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a37 %t48 = load ptr, ptr %a1 %t49 = icmp eq ptr %t48, null br i1 %t49, label %panic2654, label %ok2655 panic2654: call void @finch_panic(ptr @.str.1532, i64 785, ptr @.str.1533) unreachable ok2655: %t50 = getelementptr inbounds %S.gen.Gen, ptr %t48, i32 0, i32 5 store { ptr, i64, i64 } %t47, ptr %a51 call void @finch.copy.arr_str(ptr %a52, ptr %a51) %t53 = load { ptr, i64, i64 }, ptr %a52 %t54 = load { ptr, i64, i64 }, ptr %t50 store { ptr, i64, i64 } %t53, ptr %t50 store { ptr, i64, i64 } %t54, ptr %a55 call void @finch.drop.arr_str(ptr %a55) %t56 = load ptr, ptr %a1 %t57 = icmp eq ptr %t56, null br i1 %t57, label %panic2656, label %ok2657 panic2656: call void @finch_panic(ptr @.str.1534, i64 786, ptr @.str.1535) unreachable ok2657: %t58 = getelementptr inbounds %S.gen.Gen, ptr %t56, i32 0, i32 6 store i64 0, ptr %t58 %t59 = load ptr, ptr %a1 %t60 = icmp eq ptr %t59, null br i1 %t60, label %panic2658, label %ok2659 panic2658: call void @finch_panic(ptr @.str.1536, i64 787, ptr @.str.1537) unreachable ok2659: %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 9 store i1 false, ptr %t61 %t62 = load %S.gen.Saved, ptr %a33 call void @finch.drop.arr_str(ptr %a37) ret %S.gen.Saved %t62 } define internal void @finch.gen.endHelper(ptr %p0, %S.gen.Saved %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.Saved, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.gen.Saved %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic2660, label %ok2661 panic2660: call void @finch_panic(ptr @.str.1538, i64 792, ptr @.str.1539) unreachable ok2661: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 3 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t8, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1540, i64 10, i64 0 }, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null br i1 %t14, label %panic2662, label %ok2663 panic2662: call void @finch_panic(ptr @.str.1541, i64 792, ptr @.str.1542) unreachable ok2663: %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 5 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1543, i64 1, i64 0 }, ptr %a17 call void @finch_str_join(ptr %a18, ptr %t15, ptr %a17) %t19 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t12, ptr %a21 store { ptr, i64, i64 } %t19, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) store { ptr, i64, i64 } %t12, ptr %a23 call void @finch_str_drop(ptr %a23) store { ptr, i64, i64 } %t19, ptr %a24 call void @finch_str_drop(ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a20 store { ptr, i64, i64 } %t25, ptr %a27 store { ptr, i64, i64 } { ptr @.str.1544, i64 1, i64 0 }, ptr %a28 call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) store { ptr, i64, i64 } %t25, ptr %a29 call void @finch_str_drop(ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a26 %t31 = load ptr, ptr %a1 %t32 = icmp eq ptr %t31, null br i1 %t32, label %panic2664, label %ok2665 panic2664: call void @finch_panic(ptr @.str.1545, i64 792, ptr @.str.1546) unreachable ok2665: %t33 = getelementptr inbounds %S.gen.Gen, ptr %t31, i32 0, i32 4 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1547, i64 1, i64 0 }, ptr %a35 call void @finch_str_join(ptr %a36, ptr %t33, ptr %a35) %t37 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t30, ptr %a39 store { ptr, i64, i64 } %t37, ptr %a40 call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) store { ptr, i64, i64 } %t30, ptr %a41 call void @finch_str_drop(ptr %a41) store { ptr, i64, i64 } %t37, ptr %a42 call void @finch_str_drop(ptr %a42) %t43 = load { ptr, i64, i64 }, ptr %a38 store { ptr, i64, i64 } %t43, ptr %a45 store { ptr, i64, i64 } { ptr @.str.1548, i64 3, i64 0 }, ptr %a46 call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) store { ptr, i64, i64 } %t43, ptr %a47 call void @finch_str_drop(ptr %a47) %t48 = load { ptr, i64, i64 }, ptr %a44 %t49 = load i64, ptr %t7 %t50 = add i64 %t49, 1 call void @finch_arr_reserve(ptr %t6, i64 %t50, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t51 = load ptr, ptr %t6 %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t51, i64 %t49 store { ptr, i64, i64 } %t48, ptr %t52 store i64 %t50, ptr %t7 %t53 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 0 %t54 = load { ptr, i64, i64 }, ptr %t53 %t55 = load ptr, ptr %a1 %t56 = icmp eq ptr %t55, null br i1 %t56, label %panic2666, label %ok2667 panic2666: call void @finch_panic(ptr @.str.1549, i64 793, ptr @.str.1550) unreachable ok2667: %t57 = getelementptr inbounds %S.gen.Gen, ptr %t55, i32 0, i32 4 store { ptr, i64, i64 } %t54, ptr %a58 call void @finch.copy.arr_str(ptr %a59, ptr %a58) %t60 = load { ptr, i64, i64 }, ptr %a59 %t61 = load { ptr, i64, i64 }, ptr %t57 store { ptr, i64, i64 } %t60, ptr %t57 store { ptr, i64, i64 } %t61, ptr %a62 call void @finch.drop.arr_str(ptr %a62) %t63 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 1 %t64 = load { ptr, i64, i64 }, ptr %t63 %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null br i1 %t66, label %panic2668, label %ok2669 panic2668: call void @finch_panic(ptr @.str.1551, i64 794, ptr @.str.1552) unreachable ok2669: %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 5 store { ptr, i64, i64 } %t64, ptr %a68 call void @finch.copy.arr_str(ptr %a69, ptr %a68) %t70 = load { ptr, i64, i64 }, ptr %a69 %t71 = load { ptr, i64, i64 }, ptr %t67 store { ptr, i64, i64 } %t70, ptr %t67 store { ptr, i64, i64 } %t71, ptr %a72 call void @finch.drop.arr_str(ptr %a72) %t73 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 2 %t74 = load i64, ptr %t73 %t75 = load ptr, ptr %a1 %t76 = icmp eq ptr %t75, null br i1 %t76, label %panic2670, label %ok2671 panic2670: call void @finch_panic(ptr @.str.1553, i64 795, ptr @.str.1554) unreachable ok2671: %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 6 store i64 %t74, ptr %t77 %t78 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 3 %t79 = load i1, ptr %t78 %t80 = load ptr, ptr %a1 %t81 = icmp eq ptr %t80, null br i1 %t81, label %panic2672, label %ok2673 panic2672: call void @finch_panic(ptr @.str.1555, i64 796, ptr @.str.1556) unreachable ok2673: %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 9 store i1 %t79, ptr %t82 %t83 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 4 %t84 = load i64, ptr %t83 %t85 = load ptr, ptr %a1 %t86 = icmp eq ptr %t85, null br i1 %t86, label %panic2674, label %ok2675 panic2674: call void @finch_panic(ptr @.str.1557, i64 797, ptr @.str.1558) unreachable ok2675: %t87 = getelementptr inbounds %S.gen.Gen, ptr %t85, i32 0, i32 36 store i64 %t84, ptr %t87 ret void } define internal { ptr, i64, i64 } @finch.gen.loopStart(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t3, { ptr, i64, i64 } { ptr @.str.1559, i64 3, i64 0 }) store { ptr, i64, i64 } %t4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = load { ptr, i64, i64 }, ptr %a5 call void @finch.gen.store(ptr %t6, { ptr, i64, i64 } { ptr @.str.1560, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1561, i64 1, i64 0 }, { ptr, i64, i64 } %t7) %t8 = load ptr, ptr %a1 %t9 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t8, { ptr, i64, i64 } { ptr @.str.1562, i64 6, i64 0 }) store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t11, { ptr, i64, i64 } { ptr @.str.1563, i64 6, i64 0 }) store { ptr, i64, i64 } %t12, ptr %a13 %t14 = load ptr, ptr %a1 %t15 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t14, { ptr, i64, i64 } { ptr @.str.1564, i64 5, i64 0 }) store { ptr, i64, i64 } %t15, ptr %a16 %t17 = load ptr, ptr %a1 %t18 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.br(ptr %t17, { ptr, i64, i64 } %t18) %t19 = load ptr, ptr %a1 %t20 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.label(ptr %t19, { ptr, i64, i64 } %t20) %t21 = load ptr, ptr %a1 %t22 = load { ptr, i64, i64 }, ptr %a5 %t23 = call { ptr, i64, i64 } @finch.gen.load(ptr %t21, { ptr, i64, i64 } { ptr @.str.1565, i64 3, i64 0 }, { ptr, i64, i64 } %t22) store { ptr, i64, i64 } %t23, ptr %a24 %t25 = load ptr, ptr %a1 %t26 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } { ptr @.str.1566, i64 13, i64 0 }, ptr %a28 store { ptr, i64, i64 } %t26, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t30, ptr %a32 store { ptr, i64, i64 } { ptr @.str.1567, i64 2, i64 0 }, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) store { ptr, i64, i64 } %t30, ptr %a34 call void @finch_str_drop(ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a31 %t36 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t35, ptr %a38 store { ptr, i64, i64 } %t36, ptr %a39 call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) store { ptr, i64, i64 } %t35, ptr %a40 call void @finch_str_drop(ptr %a40) %t41 = load { ptr, i64, i64 }, ptr %a37 %t42 = call { ptr, i64, i64 } @finch.gen.op(ptr %t25, { ptr, i64, i64 } %t41) store { ptr, i64, i64 } %t41, ptr %a43 call void @finch_str_drop(ptr %a43) store { ptr, i64, i64 } %t42, ptr %a44 %t45 = load ptr, ptr %a1 %t46 = load { ptr, i64, i64 }, ptr %a44 %t47 = load { ptr, i64, i64 }, ptr %a13 %t48 = load { ptr, i64, i64 }, ptr %a16 call void @finch.gen.condBr(ptr %t45, { ptr, i64, i64 } %t46, { ptr, i64, i64 } %t47, { ptr, i64, i64 } %t48) %t49 = load ptr, ptr %a1 %t50 = load { ptr, i64, i64 }, ptr %a13 call void @finch.gen.label(ptr %t49, { ptr, i64, i64 } %t50) %t51 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t51, ptr %a52 call void @finch_str_copy(ptr %a53, ptr %a52) %t54 = load { ptr, i64, i64 }, ptr %a53 %t55 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t55, ptr %a56 call void @finch_str_copy(ptr %a57, ptr %a56) %t58 = load { ptr, i64, i64 }, ptr %a57 %t59 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t59, ptr %a60 call void @finch_str_copy(ptr %a61, ptr %a60) %t62 = load { ptr, i64, i64 }, ptr %a61 %t63 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t63, ptr %a64 call void @finch_str_copy(ptr %a65, ptr %a64) %t66 = load { ptr, i64, i64 }, ptr %a65 %t67 = mul i64 4, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t68 = call ptr @finch_alloc(i64 %t67) %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i64 0 store { ptr, i64, i64 } %t54, ptr %t69 %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i64 1 store { ptr, i64, i64 } %t58, ptr %t70 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i64 2 store { ptr, i64, i64 } %t62, ptr %t71 %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i64 3 store { ptr, i64, i64 } %t66, ptr %t72 %t73 = insertvalue { ptr, i64, i64 } undef, ptr %t68, 0 %t74 = insertvalue { ptr, i64, i64 } %t73, i64 4, 1 %t75 = insertvalue { ptr, i64, i64 } %t74, i64 4, 2 call void @finch_str_drop(ptr %a44) call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a16) call void @finch_str_drop(ptr %a13) call void @finch_str_drop(ptr %a10) call void @finch_str_drop(ptr %a5) ret { ptr, i64, i64 } %t75 } define internal void @finch.gen.loopEnd(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = extractvalue { ptr, i64, i64 } %t4, 1 %t6 = icmp uge i64 0, %t5 br i1 %t6, label %range2676, label %inrange2677 range2676: call void @finch_panic_index(ptr @.str.1569, i64 817, i64 0, i64 %t5) unreachable inrange2677: %t7 = extractvalue { ptr, i64, i64 } %t4, 0 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 0 %t9 = load { ptr, i64, i64 }, ptr %t8 %t10 = call { ptr, i64, i64 } @finch.gen.load(ptr %t3, { ptr, i64, i64 } { ptr @.str.1568, i64 3, i64 0 }, { ptr, i64, i64 } %t9) store { ptr, i64, i64 } %t10, ptr %a11 %t12 = load ptr, ptr %a1 %t13 = load ptr, ptr %a1 %t14 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1571, i64 8, i64 0 }, ptr %a16 store { ptr, i64, i64 } %t14, ptr %a17 call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t18, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1572, i64 3, i64 0 }, ptr %a21 call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) store { ptr, i64, i64 } %t18, ptr %a22 call void @finch_str_drop(ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a19 %t24 = call { ptr, i64, i64 } @finch.gen.op(ptr %t13, { ptr, i64, i64 } %t23) store { ptr, i64, i64 } %t23, ptr %a25 call void @finch_str_drop(ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a2 %t27 = extractvalue { ptr, i64, i64 } %t26, 1 %t28 = icmp uge i64 0, %t27 br i1 %t28, label %range2678, label %inrange2679 range2678: call void @finch_panic_index(ptr @.str.1573, i64 818, i64 0, i64 %t27) unreachable inrange2679: %t29 = extractvalue { ptr, i64, i64 } %t26, 0 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 0 %t31 = load { ptr, i64, i64 }, ptr %t30 call void @finch.gen.store(ptr %t12, { ptr, i64, i64 } { ptr @.str.1570, i64 3, i64 0 }, { ptr, i64, i64 } %t24, { ptr, i64, i64 } %t31) store { ptr, i64, i64 } %t24, ptr %a32 call void @finch_str_drop(ptr %a32) %t33 = load ptr, ptr %a1 %t34 = load { ptr, i64, i64 }, ptr %a2 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp uge i64 1, %t35 br i1 %t36, label %range2680, label %inrange2681 range2680: call void @finch_panic_index(ptr @.str.1574, i64 819, i64 1, i64 %t35) unreachable inrange2681: %t37 = extractvalue { ptr, i64, i64 } %t34, 0 %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 1 %t39 = load { ptr, i64, i64 }, ptr %t38 call void @finch.gen.br(ptr %t33, { ptr, i64, i64 } %t39) %t40 = load ptr, ptr %a1 %t41 = load { ptr, i64, i64 }, ptr %a2 %t42 = extractvalue { ptr, i64, i64 } %t41, 1 %t43 = icmp uge i64 2, %t42 br i1 %t43, label %range2682, label %inrange2683 range2682: call void @finch_panic_index(ptr @.str.1575, i64 820, i64 2, i64 %t42) unreachable inrange2683: %t44 = extractvalue { ptr, i64, i64 } %t41, 0 %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i64 2 %t46 = load { ptr, i64, i64 }, ptr %t45 call void @finch.gen.label(ptr %t40, { ptr, i64, i64 } %t46) call void @finch_str_drop(ptr %a11) ret void } define internal void @finch.gen.copyAt(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 %t5 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 store { ptr, i64, i64 } { ptr @.str.1576, i64 3, i64 0 }, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp ne i32 %t9, 0 br i1 %t10, label %then2684, label %else2685 then2684: %t11 = load ptr, ptr %a1 %t12 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1577, i64 30, i64 0 }, ptr %a14 store { ptr, i64, i64 } %t12, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) %t16 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t16, ptr %a18 store { ptr, i64, i64 } { ptr @.str.1578, i64 6, i64 0 }, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) store { ptr, i64, i64 } %t16, ptr %a20 call void @finch_str_drop(ptr %a20) %t21 = load { ptr, i64, i64 }, ptr %a17 %t22 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t21, ptr %a24 store { ptr, i64, i64 } %t22, ptr %a25 call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) store { ptr, i64, i64 } %t21, ptr %a26 call void @finch_str_drop(ptr %a26) %t27 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t27, ptr %a29 store { ptr, i64, i64 } { ptr @.str.1579, i64 1, i64 0 }, ptr %a30 call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) store { ptr, i64, i64 } %t27, ptr %a31 call void @finch_str_drop(ptr %a31) %t32 = load { ptr, i64, i64 }, ptr %a28 call void @finch.gen.emit(ptr %t11, { ptr, i64, i64 } %t32) store { ptr, i64, i64 } %t32, ptr %a33 call void @finch_str_drop(ptr %a33) br label %endif2686 else2685: %t34 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t35 = load { ptr, i64, i64 }, ptr %t34 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.1580, i64 5, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 br label %logic.from2687 logic.from2687: br i1 %t39, label %logic.end2689, label %logic.rhs2688 logic.rhs2688: %t40 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t41 = load { ptr, i64, i64 }, ptr %t40 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.1581, i64 3, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 br label %logic.rend2690 logic.rend2690: br label %logic.end2689 logic.end2689: %t46 = phi i1 [ true, %logic.from2687 ], [ %t45, %logic.rend2690 ] br label %logic.from2691 logic.from2691: br i1 %t46, label %logic.end2693, label %logic.rhs2692 logic.rhs2692: %t47 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t48 = load { ptr, i64, i64 }, ptr %t47 store { ptr, i64, i64 } %t48, ptr %a49 store { ptr, i64, i64 } { ptr @.str.1582, i64 6, i64 0 }, ptr %a50 %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) %t52 = icmp ne i32 %t51, 0 br label %logic.from2694 logic.from2694: br i1 %t52, label %logic.rhs2695, label %logic.end2696 logic.rhs2695: %t53 = load ptr, ptr %a1 %t54 = load %S.ast.Type, ptr %a4 %t55 = call i1 @finch.gen.owning(ptr %t53, %S.ast.Type %t54) br label %logic.rend2697 logic.rend2697: br label %logic.end2696 logic.end2696: %t56 = phi i1 [ false, %logic.from2694 ], [ %t55, %logic.rend2697 ] br label %logic.rend2698 logic.rend2698: br label %logic.end2693 logic.end2693: %t57 = phi i1 [ true, %logic.from2691 ], [ %t56, %logic.rend2698 ] br i1 %t57, label %then2699, label %else2700 then2699: %t58 = load ptr, ptr %a1 %t59 = load ptr, ptr %a1 %t60 = load %S.ast.Type, ptr %a4 %t61 = call { ptr, i64, i64 } @finch.gen.copyFn(ptr %t59, %S.ast.Type %t60) store { ptr, i64, i64 } { ptr @.str.1583, i64 10, i64 0 }, ptr %a63 store { ptr, i64, i64 } %t61, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) store { ptr, i64, i64 } %t61, ptr %a65 call void @finch_str_drop(ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a62 store { ptr, i64, i64 } %t66, ptr %a68 store { ptr, i64, i64 } { ptr @.str.1584, i64 5, i64 0 }, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) store { ptr, i64, i64 } %t66, ptr %a70 call void @finch_str_drop(ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a67 %t72 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t71, ptr %a74 store { ptr, i64, i64 } %t72, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) store { ptr, i64, i64 } %t71, ptr %a76 call void @finch_str_drop(ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a73 store { ptr, i64, i64 } %t77, ptr %a79 store { ptr, i64, i64 } { ptr @.str.1585, i64 6, i64 0 }, ptr %a80 call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) store { ptr, i64, i64 } %t77, ptr %a81 call void @finch_str_drop(ptr %a81) %t82 = load { ptr, i64, i64 }, ptr %a78 %t83 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t82, ptr %a85 store { ptr, i64, i64 } %t83, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) store { ptr, i64, i64 } %t82, ptr %a87 call void @finch_str_drop(ptr %a87) %t88 = load { ptr, i64, i64 }, ptr %a84 store { ptr, i64, i64 } %t88, ptr %a90 store { ptr, i64, i64 } { ptr @.str.1586, i64 1, i64 0 }, ptr %a91 call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) store { ptr, i64, i64 } %t88, ptr %a92 call void @finch_str_drop(ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a89 call void @finch.gen.emit(ptr %t58, { ptr, i64, i64 } %t93) store { ptr, i64, i64 } %t93, ptr %a94 call void @finch_str_drop(ptr %a94) br label %endif2701 else2700: %t95 = load ptr, ptr %a1 %t96 = load ptr, ptr %a1 %t97 = load %S.ast.Type, ptr %a4 %t98 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t96, %S.ast.Type %t97) %t99 = load ptr, ptr %a1 %t100 = load ptr, ptr %a1 %t101 = load %S.ast.Type, ptr %a4 %t102 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t100, %S.ast.Type %t101) %t103 = load { ptr, i64, i64 }, ptr %a3 %t104 = call { ptr, i64, i64 } @finch.gen.load(ptr %t99, { ptr, i64, i64 } %t102, { ptr, i64, i64 } %t103) store { ptr, i64, i64 } %t102, ptr %a105 call void @finch_str_drop(ptr %a105) %t106 = load { ptr, i64, i64 }, ptr %a2 call void @finch.gen.store(ptr %t95, { ptr, i64, i64 } %t98, { ptr, i64, i64 } %t104, { ptr, i64, i64 } %t106) store { ptr, i64, i64 } %t98, ptr %a107 call void @finch_str_drop(ptr %a107) store { ptr, i64, i64 } %t104, ptr %a108 call void @finch_str_drop(ptr %a108) br label %endif2701 endif2701: br label %endif2686 endif2686: ret void } define internal void @finch.drop.S_gen_Saved(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.Saved, ptr %a, i32 0, i32 0 call void @finch.drop.arr_str(ptr %t1) %t2 = getelementptr inbounds %S.gen.Saved, ptr %a, i32 0, i32 1 call void @finch.drop.arr_str(ptr %t2) ret void } define internal { ptr, i64, i64 } @finch.gen.copyFn(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca %S.gen.Saved, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca %S.ast.Type, align 16 %a47 = alloca %S.ast.Type, align 16 %a49 = alloca %S.ast.Type, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca %S.gen.StructDef, align 16 %a365 = alloca %S.gen.StructDef, align 16 %a367 = alloca %S.gen.StructDef, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a377 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca i64, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a401 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a403 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a415 = alloca { ptr, i64, i64 }, align 16 %a416 = alloca { ptr, i64, i64 }, align 16 %a417 = alloca { ptr, i64, i64 }, align 16 %a418 = alloca { ptr, i64, i64 }, align 16 %a419 = alloca { ptr, i64, i64 }, align 16 %a422 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a432 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a445 = alloca { ptr, i64, i64 }, align 16 %a446 = alloca { ptr, i64, i64 }, align 16 %a447 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 %a452 = alloca { ptr, i64, i64 }, align 16 %a453 = alloca { ptr, i64, i64 }, align 16 %a471 = alloca { ptr, i64, i64 }, align 16 %a472 = alloca { ptr, i64, i64 }, align 16 %a473 = alloca { ptr, i64, i64 }, align 16 %a475 = alloca { ptr, i64, i64 }, align 16 %a476 = alloca { ptr, i64, i64 }, align 16 %a477 = alloca { ptr, i64, i64 }, align 16 %a478 = alloca { ptr, i64, i64 }, align 16 %a480 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = load %S.ast.Type, ptr %a2 %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) store { ptr, i64, i64 } { ptr @.str.1587, i64 12, i64 0 }, ptr %a6 store { ptr, i64, i64 } %t4, ptr %a7 call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) store { ptr, i64, i64 } %t4, ptr %a8 call void @finch_str_drop(ptr %a8) %t9 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null br i1 %t12, label %panic2702, label %ok2703 panic2702: call void @finch_panic(ptr @.str.1588, i64 835, ptr @.str.1589) unreachable ok2703: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 %t14 = load { ptr, i64, i64 }, ptr %t13 %t15 = load { ptr, i64, i64 }, ptr %a10 %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) br i1 %t16, label %then2704, label %endif2706 then2704: %t17 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t17 endif2706: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic2707, label %ok2708 panic2707: call void @finch_panic(ptr @.str.1590, i64 838, ptr @.str.1591) unreachable ok2708: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t22, ptr %a23 call void @finch_str_copy(ptr %a24, ptr %a23) %t25 = load { ptr, i64, i64 }, ptr %a24 %t26 = load i64, ptr %t21 %t27 = add i64 %t26, 1 call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t28 = load ptr, ptr %t20 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 store { ptr, i64, i64 } %t25, ptr %t29 store i64 %t27, ptr %t21 %t30 = load ptr, ptr %a1 %t31 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t30) store %S.gen.Saved %t31, ptr %a32 %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t34 = load { ptr, i64, i64 }, ptr %t33 store { ptr, i64, i64 } %t34, ptr %a35 store { ptr, i64, i64 } { ptr @.str.1592, i64 5, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 br i1 %t38, label %then2709, label %else2710 then2709: %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = extractvalue { ptr, i64, i64 } %t40, 1 %t42 = icmp uge i64 0, %t41 br i1 %t42, label %range2712, label %inrange2713 range2712: call void @finch_panic_index(ptr @.str.1593, i64 841, i64 0, i64 %t41) unreachable inrange2713: %t43 = extractvalue { ptr, i64, i64 } %t40, 0 %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 %t45 = load %S.ast.Type, ptr %t44 store %S.ast.Type %t45, ptr %a46 call void @finch.copy.S_ast_Type(ptr %a47, ptr %a46) %t48 = load %S.ast.Type, ptr %a47 store %S.ast.Type %t48, ptr %a49 %t50 = load ptr, ptr %a1 %t51 = load ptr, ptr %a1 %t52 = load %S.ast.Type, ptr %a49 %t53 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t51, %S.ast.Type %t52) store { ptr, i64, i64 } { ptr @.str.1594, i64 55, i64 0 }, ptr %a55 store { ptr, i64, i64 } %t53, ptr %a56 call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) store { ptr, i64, i64 } %t53, ptr %a57 call void @finch_str_drop(ptr %a57) %t58 = load { ptr, i64, i64 }, ptr %a54 store { ptr, i64, i64 } %t58, ptr %a60 store { ptr, i64, i64 } { ptr @.str.1595, i64 1, i64 0 }, ptr %a61 call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) store { ptr, i64, i64 } %t58, ptr %a62 call void @finch_str_drop(ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a59 call void @finch.gen.emit(ptr %t50, { ptr, i64, i64 } %t63) store { ptr, i64, i64 } %t63, ptr %a64 call void @finch_str_drop(ptr %a64) %t65 = load ptr, ptr %a1 %t66 = load %S.ast.Type, ptr %a49 %t67 = call i1 @finch.gen.owning(ptr %t65, %S.ast.Type %t66) br i1 %t67, label %then2714, label %endif2716 then2714: %t68 = load ptr, ptr %a1 %t69 = call { ptr, i64, i64 } @finch.gen.load(ptr %t68, { ptr, i64, i64 } { ptr @.str.1596, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1597, i64 4, i64 0 }) store { ptr, i64, i64 } %t69, ptr %a70 %t71 = load ptr, ptr %a1 %t72 = call { ptr, i64, i64 } @finch.gen.load(ptr %t71, { ptr, i64, i64 } { ptr @.str.1598, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1599, i64 4, i64 0 }) store { ptr, i64, i64 } %t72, ptr %a73 %t74 = load ptr, ptr %a1 %t75 = load ptr, ptr %a1 %t76 = call { ptr, i64, i64 } @finch.gen.op(ptr %t75, { ptr, i64, i64 } { ptr @.str.1601, i64 64, i64 0 }) %t77 = call { ptr, i64, i64 } @finch.gen.load(ptr %t74, { ptr, i64, i64 } { ptr @.str.1600, i64 3, i64 0 }, { ptr, i64, i64 } %t76) store { ptr, i64, i64 } %t76, ptr %a78 call void @finch_str_drop(ptr %a78) store { ptr, i64, i64 } %t77, ptr %a79 %t80 = load ptr, ptr %a1 %t81 = load { ptr, i64, i64 }, ptr %a79 %t82 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t80, { ptr, i64, i64 } %t81) store { ptr, i64, i64 } %t82, ptr %a83 %t84 = load ptr, ptr %a1 %t85 = load ptr, ptr %a1 %t86 = load %S.ast.Type, ptr %a49 %t87 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t85, %S.ast.Type %t86) store { ptr, i64, i64 } { ptr @.str.1602, i64 23, i64 0 }, ptr %a89 store { ptr, i64, i64 } %t87, ptr %a90 call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) store { ptr, i64, i64 } %t87, ptr %a91 call void @finch_str_drop(ptr %a91) %t92 = load { ptr, i64, i64 }, ptr %a88 store { ptr, i64, i64 } %t92, ptr %a94 store { ptr, i64, i64 } { ptr @.str.1603, i64 6, i64 0 }, ptr %a95 call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) store { ptr, i64, i64 } %t92, ptr %a96 call void @finch_str_drop(ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a93 %t98 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } %t97, ptr %a100 store { ptr, i64, i64 } %t98, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) store { ptr, i64, i64 } %t97, ptr %a102 call void @finch_str_drop(ptr %a102) %t103 = load { ptr, i64, i64 }, ptr %a99 store { ptr, i64, i64 } %t103, ptr %a105 store { ptr, i64, i64 } { ptr @.str.1604, i64 6, i64 0 }, ptr %a106 call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) store { ptr, i64, i64 } %t103, ptr %a107 call void @finch_str_drop(ptr %a107) %t108 = load { ptr, i64, i64 }, ptr %a104 %t109 = load { ptr, i64, i64 }, ptr %a83 %t110 = extractvalue { ptr, i64, i64 } %t109, 1 %t111 = icmp uge i64 3, %t110 br i1 %t111, label %range2717, label %inrange2718 range2717: call void @finch_panic_index(ptr @.str.1605, i64 848, i64 3, i64 %t110) unreachable inrange2718: %t112 = extractvalue { ptr, i64, i64 } %t109, 0 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 3 %t114 = load { ptr, i64, i64 }, ptr %t113 store { ptr, i64, i64 } %t108, ptr %a116 store { ptr, i64, i64 } %t114, ptr %a117 call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) store { ptr, i64, i64 } %t108, ptr %a118 call void @finch_str_drop(ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a115 %t120 = call { ptr, i64, i64 } @finch.gen.op(ptr %t84, { ptr, i64, i64 } %t119) store { ptr, i64, i64 } %t119, ptr %a121 call void @finch_str_drop(ptr %a121) store { ptr, i64, i64 } %t120, ptr %a122 %t123 = load ptr, ptr %a1 %t124 = load ptr, ptr %a1 %t125 = load %S.ast.Type, ptr %a49 %t126 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t124, %S.ast.Type %t125) store { ptr, i64, i64 } { ptr @.str.1606, i64 23, i64 0 }, ptr %a128 store { ptr, i64, i64 } %t126, ptr %a129 call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) store { ptr, i64, i64 } %t126, ptr %a130 call void @finch_str_drop(ptr %a130) %t131 = load { ptr, i64, i64 }, ptr %a127 store { ptr, i64, i64 } %t131, ptr %a133 store { ptr, i64, i64 } { ptr @.str.1607, i64 6, i64 0 }, ptr %a134 call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) store { ptr, i64, i64 } %t131, ptr %a135 call void @finch_str_drop(ptr %a135) %t136 = load { ptr, i64, i64 }, ptr %a132 %t137 = load { ptr, i64, i64 }, ptr %a73 store { ptr, i64, i64 } %t136, ptr %a139 store { ptr, i64, i64 } %t137, ptr %a140 call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) store { ptr, i64, i64 } %t136, ptr %a141 call void @finch_str_drop(ptr %a141) %t142 = load { ptr, i64, i64 }, ptr %a138 store { ptr, i64, i64 } %t142, ptr %a144 store { ptr, i64, i64 } { ptr @.str.1608, i64 6, i64 0 }, ptr %a145 call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145) store { ptr, i64, i64 } %t142, ptr %a146 call void @finch_str_drop(ptr %a146) %t147 = load { ptr, i64, i64 }, ptr %a143 %t148 = load { ptr, i64, i64 }, ptr %a83 %t149 = extractvalue { ptr, i64, i64 } %t148, 1 %t150 = icmp uge i64 3, %t149 br i1 %t150, label %range2719, label %inrange2720 range2719: call void @finch_panic_index(ptr @.str.1609, i64 849, i64 3, i64 %t149) unreachable inrange2720: %t151 = extractvalue { ptr, i64, i64 } %t148, 0 %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i64 3 %t153 = load { ptr, i64, i64 }, ptr %t152 store { ptr, i64, i64 } %t147, ptr %a155 store { ptr, i64, i64 } %t153, ptr %a156 call void @finch_str_concat(ptr %a154, ptr %a155, ptr %a156) store { ptr, i64, i64 } %t147, ptr %a157 call void @finch_str_drop(ptr %a157) %t158 = load { ptr, i64, i64 }, ptr %a154 %t159 = call { ptr, i64, i64 } @finch.gen.op(ptr %t123, { ptr, i64, i64 } %t158) store { ptr, i64, i64 } %t158, ptr %a160 call void @finch_str_drop(ptr %a160) store { ptr, i64, i64 } %t159, ptr %a161 %t162 = load ptr, ptr %a1 %t163 = load { ptr, i64, i64 }, ptr %a122 %t164 = load { ptr, i64, i64 }, ptr %a161 %t165 = load %S.ast.Type, ptr %a49 call void @finch.gen.copyAt(ptr %t162, { ptr, i64, i64 } %t163, { ptr, i64, i64 } %t164, %S.ast.Type %t165) %t166 = load ptr, ptr %a1 %t167 = load { ptr, i64, i64 }, ptr %a83 call void @finch.gen.loopEnd(ptr %t166, { ptr, i64, i64 } %t167) call void @finch_str_drop(ptr %a161) call void @finch_str_drop(ptr %a122) call void @finch.drop.arr_str(ptr %a83) call void @finch_str_drop(ptr %a79) call void @finch_str_drop(ptr %a73) call void @finch_str_drop(ptr %a70) br label %endif2716 endif2716: call void @finch.drop.S_ast_Type(ptr %a49) br label %endif2711 else2710: %t168 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t169 = load { ptr, i64, i64 }, ptr %t168 store { ptr, i64, i64 } %t169, ptr %a170 store { ptr, i64, i64 } { ptr @.str.1610, i64 3, i64 0 }, ptr %a171 %t172 = call i32 @finch_str_eq(ptr %a170, ptr %a171) %t173 = icmp ne i32 %t172, 0 br i1 %t173, label %then2721, label %else2722 then2721: %t174 = load ptr, ptr %a1 %t175 = load ptr, ptr %a1 %t176 = load %S.ast.Type, ptr %a2 %t177 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t175, %S.ast.Type %t176) store { ptr, i64, i64 } { ptr @.str.1611, i64 55, i64 0 }, ptr %a179 store { ptr, i64, i64 } %t177, ptr %a180 call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) store { ptr, i64, i64 } %t177, ptr %a181 call void @finch_str_drop(ptr %a181) %t182 = load { ptr, i64, i64 }, ptr %a178 store { ptr, i64, i64 } %t182, ptr %a184 store { ptr, i64, i64 } { ptr @.str.1612, i64 1, i64 0 }, ptr %a185 call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) store { ptr, i64, i64 } %t182, ptr %a186 call void @finch_str_drop(ptr %a186) %t187 = load { ptr, i64, i64 }, ptr %a183 call void @finch.gen.emit(ptr %t174, { ptr, i64, i64 } %t187) store { ptr, i64, i64 } %t187, ptr %a188 call void @finch_str_drop(ptr %a188) %t189 = load ptr, ptr %a1 %t190 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t191 = load { ptr, i64, i64 }, ptr %t190 %t192 = extractvalue { ptr, i64, i64 } %t191, 1 %t193 = icmp uge i64 0, %t192 br i1 %t193, label %range2724, label %inrange2725 range2724: call void @finch_panic_index(ptr @.str.1613, i64 855, i64 0, i64 %t192) unreachable inrange2725: %t194 = extractvalue { ptr, i64, i64 } %t191, 0 %t195 = getelementptr inbounds %S.ast.Type, ptr %t194, i64 0 %t196 = load %S.ast.Type, ptr %t195 %t197 = call i1 @finch.gen.owning(ptr %t189, %S.ast.Type %t196) br label %logic.from2726 logic.from2726: br i1 %t197, label %logic.end2728, label %logic.rhs2727 logic.rhs2727: %t198 = load ptr, ptr %a1 %t199 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t200 = load { ptr, i64, i64 }, ptr %t199 %t201 = extractvalue { ptr, i64, i64 } %t200, 1 %t202 = icmp uge i64 1, %t201 br i1 %t202, label %range2729, label %inrange2730 range2729: call void @finch_panic_index(ptr @.str.1614, i64 855, i64 1, i64 %t201) unreachable inrange2730: %t203 = extractvalue { ptr, i64, i64 } %t200, 0 %t204 = getelementptr inbounds %S.ast.Type, ptr %t203, i64 1 %t205 = load %S.ast.Type, ptr %t204 %t206 = call i1 @finch.gen.owning(ptr %t198, %S.ast.Type %t205) br label %logic.rend2731 logic.rend2731: br label %logic.end2728 logic.end2728: %t207 = phi i1 [ true, %logic.from2726 ], [ %t206, %logic.rend2731 ] br i1 %t207, label %then2732, label %endif2734 then2732: %t208 = load ptr, ptr %a1 %t209 = load ptr, ptr %a1 %t210 = load ptr, ptr %a1 %t211 = load %S.ast.Type, ptr %a2 %t212 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t210, %S.ast.Type %t211) store { ptr, i64, i64 } { ptr @.str.1616, i64 23, i64 0 }, ptr %a214 store { ptr, i64, i64 } %t212, ptr %a215 call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) store { ptr, i64, i64 } %t212, ptr %a216 call void @finch_str_drop(ptr %a216) %t217 = load { ptr, i64, i64 }, ptr %a213 store { ptr, i64, i64 } %t217, ptr %a219 store { ptr, i64, i64 } { ptr @.str.1617, i64 24, i64 0 }, ptr %a220 call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) store { ptr, i64, i64 } %t217, ptr %a221 call void @finch_str_drop(ptr %a221) %t222 = load { ptr, i64, i64 }, ptr %a218 %t223 = call { ptr, i64, i64 } @finch.gen.op(ptr %t209, { ptr, i64, i64 } %t222) store { ptr, i64, i64 } %t222, ptr %a224 call void @finch_str_drop(ptr %a224) %t225 = call { ptr, i64, i64 } @finch.gen.load(ptr %t208, { ptr, i64, i64 } { ptr @.str.1615, i64 3, i64 0 }, { ptr, i64, i64 } %t223) store { ptr, i64, i64 } %t223, ptr %a226 call void @finch_str_drop(ptr %a226) store { ptr, i64, i64 } %t225, ptr %a227 %t228 = load ptr, ptr %a1 %t229 = load { ptr, i64, i64 }, ptr %a227 %t230 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t228, { ptr, i64, i64 } %t229) store { ptr, i64, i64 } %t230, ptr %a231 %t232 = load ptr, ptr %a1 %t233 = load %S.ast.Type, ptr %a2 %t234 = load { ptr, i64, i64 }, ptr %a231 %t235 = extractvalue { ptr, i64, i64 } %t234, 1 %t236 = icmp uge i64 3, %t235 br i1 %t236, label %range2735, label %inrange2736 range2735: call void @finch_panic_index(ptr @.str.1619, i64 859, i64 3, i64 %t235) unreachable inrange2736: %t237 = extractvalue { ptr, i64, i64 } %t234, 0 %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 3 %t239 = load { ptr, i64, i64 }, ptr %t238 %t240 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t232, { ptr, i64, i64 } { ptr @.str.1618, i64 4, i64 0 }, %S.ast.Type %t233, { ptr, i64, i64 } %t239) store { ptr, i64, i64 } %t240, ptr %a241 %t242 = load ptr, ptr %a1 %t243 = load %S.ast.Type, ptr %a2 %t244 = load { ptr, i64, i64 }, ptr %a231 %t245 = extractvalue { ptr, i64, i64 } %t244, 1 %t246 = icmp uge i64 3, %t245 br i1 %t246, label %range2737, label %inrange2738 range2737: call void @finch_panic_index(ptr @.str.1621, i64 860, i64 3, i64 %t245) unreachable inrange2738: %t247 = extractvalue { ptr, i64, i64 } %t244, 0 %t248 = getelementptr inbounds { ptr, i64, i64 }, ptr %t247, i64 3 %t249 = load { ptr, i64, i64 }, ptr %t248 %t250 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t242, { ptr, i64, i64 } { ptr @.str.1620, i64 4, i64 0 }, %S.ast.Type %t243, { ptr, i64, i64 } %t249) store { ptr, i64, i64 } %t250, ptr %a251 %t252 = load ptr, ptr %a1 %t253 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t252, { ptr, i64, i64 } { ptr @.str.1622, i64 10, i64 0 }) store { ptr, i64, i64 } %t253, ptr %a254 %t255 = load ptr, ptr %a1 %t256 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t255, { ptr, i64, i64 } { ptr @.str.1623, i64 10, i64 0 }) store { ptr, i64, i64 } %t256, ptr %a257 %t258 = load ptr, ptr %a1 %t259 = load ptr, ptr %a1 %t260 = load ptr, ptr %a1 %t261 = load ptr, ptr %a1 %t262 = load ptr, ptr %a1 %t263 = load %S.ast.Type, ptr %a2 %t264 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t262, %S.ast.Type %t263) store { ptr, i64, i64 } { ptr @.str.1626, i64 23, i64 0 }, ptr %a266 store { ptr, i64, i64 } %t264, ptr %a267 call void @finch_str_concat(ptr %a265, ptr %a266, ptr %a267) store { ptr, i64, i64 } %t264, ptr %a268 call void @finch_str_drop(ptr %a268) %t269 = load { ptr, i64, i64 }, ptr %a265 store { ptr, i64, i64 } %t269, ptr %a271 store { ptr, i64, i64 } { ptr @.str.1627, i64 6, i64 0 }, ptr %a272 call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) store { ptr, i64, i64 } %t269, ptr %a273 call void @finch_str_drop(ptr %a273) %t274 = load { ptr, i64, i64 }, ptr %a270 %t275 = load { ptr, i64, i64 }, ptr %a241 store { ptr, i64, i64 } %t274, ptr %a277 store { ptr, i64, i64 } %t275, ptr %a278 call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) store { ptr, i64, i64 } %t274, ptr %a279 call void @finch_str_drop(ptr %a279) %t280 = load { ptr, i64, i64 }, ptr %a276 store { ptr, i64, i64 } %t280, ptr %a282 store { ptr, i64, i64 } { ptr @.str.1628, i64 14, i64 0 }, ptr %a283 call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) store { ptr, i64, i64 } %t280, ptr %a284 call void @finch_str_drop(ptr %a284) %t285 = load { ptr, i64, i64 }, ptr %a281 %t286 = call { ptr, i64, i64 } @finch.gen.op(ptr %t261, { ptr, i64, i64 } %t285) store { ptr, i64, i64 } %t285, ptr %a287 call void @finch_str_drop(ptr %a287) %t288 = call { ptr, i64, i64 } @finch.gen.load(ptr %t260, { ptr, i64, i64 } { ptr @.str.1625, i64 3, i64 0 }, { ptr, i64, i64 } %t286) store { ptr, i64, i64 } %t286, ptr %a289 call void @finch_str_drop(ptr %a289) store { ptr, i64, i64 } { ptr @.str.1624, i64 12, i64 0 }, ptr %a291 store { ptr, i64, i64 } %t288, ptr %a292 call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) store { ptr, i64, i64 } %t288, ptr %a293 call void @finch_str_drop(ptr %a293) %t294 = load { ptr, i64, i64 }, ptr %a290 store { ptr, i64, i64 } %t294, ptr %a296 store { ptr, i64, i64 } { ptr @.str.1629, i64 3, i64 0 }, ptr %a297 call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297) store { ptr, i64, i64 } %t294, ptr %a298 call void @finch_str_drop(ptr %a298) %t299 = load { ptr, i64, i64 }, ptr %a295 %t300 = call { ptr, i64, i64 } @finch.gen.op(ptr %t259, { ptr, i64, i64 } %t299) store { ptr, i64, i64 } %t299, ptr %a301 call void @finch_str_drop(ptr %a301) %t302 = load { ptr, i64, i64 }, ptr %a254 %t303 = load { ptr, i64, i64 }, ptr %a257 call void @finch.gen.condBr(ptr %t258, { ptr, i64, i64 } %t300, { ptr, i64, i64 } %t302, { ptr, i64, i64 } %t303) store { ptr, i64, i64 } %t300, ptr %a304 call void @finch_str_drop(ptr %a304) %t305 = load ptr, ptr %a1 %t306 = load { ptr, i64, i64 }, ptr %a254 call void @finch.gen.label(ptr %t305, { ptr, i64, i64 } %t306) %t307 = load ptr, ptr %a1 %t308 = load ptr, ptr %a1 %t309 = load { ptr, i64, i64 }, ptr %a251 %t310 = load %S.ast.Type, ptr %a2 %t311 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t308, { ptr, i64, i64 } %t309, %S.ast.Type %t310, i64 1) %t312 = load ptr, ptr %a1 %t313 = load { ptr, i64, i64 }, ptr %a241 %t314 = load %S.ast.Type, ptr %a2 %t315 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t312, { ptr, i64, i64 } %t313, %S.ast.Type %t314, i64 1) %t316 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t317 = load { ptr, i64, i64 }, ptr %t316 %t318 = extractvalue { ptr, i64, i64 } %t317, 1 %t319 = icmp uge i64 0, %t318 br i1 %t319, label %range2739, label %inrange2740 range2739: call void @finch_panic_index(ptr @.str.1630, i64 865, i64 0, i64 %t318) unreachable inrange2740: %t320 = extractvalue { ptr, i64, i64 } %t317, 0 %t321 = getelementptr inbounds %S.ast.Type, ptr %t320, i64 0 %t322 = load %S.ast.Type, ptr %t321 call void @finch.gen.copyAt(ptr %t307, { ptr, i64, i64 } %t311, { ptr, i64, i64 } %t315, %S.ast.Type %t322) store { ptr, i64, i64 } %t311, ptr %a323 call void @finch_str_drop(ptr %a323) store { ptr, i64, i64 } %t315, ptr %a324 call void @finch_str_drop(ptr %a324) %t325 = load ptr, ptr %a1 %t326 = load ptr, ptr %a1 %t327 = load { ptr, i64, i64 }, ptr %a251 %t328 = load %S.ast.Type, ptr %a2 %t329 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t326, { ptr, i64, i64 } %t327, %S.ast.Type %t328, i64 2) %t330 = load ptr, ptr %a1 %t331 = load { ptr, i64, i64 }, ptr %a241 %t332 = load %S.ast.Type, ptr %a2 %t333 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t330, { ptr, i64, i64 } %t331, %S.ast.Type %t332, i64 2) %t334 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t335 = load { ptr, i64, i64 }, ptr %t334 %t336 = extractvalue { ptr, i64, i64 } %t335, 1 %t337 = icmp uge i64 1, %t336 br i1 %t337, label %range2741, label %inrange2742 range2741: call void @finch_panic_index(ptr @.str.1631, i64 866, i64 1, i64 %t336) unreachable inrange2742: %t338 = extractvalue { ptr, i64, i64 } %t335, 0 %t339 = getelementptr inbounds %S.ast.Type, ptr %t338, i64 1 %t340 = load %S.ast.Type, ptr %t339 call void @finch.gen.copyAt(ptr %t325, { ptr, i64, i64 } %t329, { ptr, i64, i64 } %t333, %S.ast.Type %t340) store { ptr, i64, i64 } %t329, ptr %a341 call void @finch_str_drop(ptr %a341) store { ptr, i64, i64 } %t333, ptr %a342 call void @finch_str_drop(ptr %a342) %t343 = load ptr, ptr %a1 %t344 = load { ptr, i64, i64 }, ptr %a257 call void @finch.gen.br(ptr %t343, { ptr, i64, i64 } %t344) %t345 = load ptr, ptr %a1 %t346 = load { ptr, i64, i64 }, ptr %a257 call void @finch.gen.label(ptr %t345, { ptr, i64, i64 } %t346) %t347 = load ptr, ptr %a1 %t348 = load { ptr, i64, i64 }, ptr %a231 call void @finch.gen.loopEnd(ptr %t347, { ptr, i64, i64 } %t348) call void @finch_str_drop(ptr %a257) call void @finch_str_drop(ptr %a254) call void @finch_str_drop(ptr %a251) call void @finch_str_drop(ptr %a241) call void @finch.drop.arr_str(ptr %a231) call void @finch_str_drop(ptr %a227) br label %endif2734 endif2734: br label %endif2723 else2722: %t349 = load ptr, ptr %a1 %t350 = icmp eq ptr %t349, null br i1 %t350, label %panic2743, label %ok2744 panic2743: call void @finch_panic(ptr @.str.1632, i64 872, ptr @.str.1633) unreachable ok2744: %t351 = getelementptr inbounds %S.gen.Gen, ptr %t349, i32 0, i32 16 %t352 = load ptr, ptr %a1 %t353 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t354 = load { ptr, i64, i64 }, ptr %t353 %t355 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t356 = load { ptr, i64, i64 }, ptr %t355 %t357 = call i64 @finch.gen.findStruct(ptr %t352, { ptr, i64, i64 } %t354, { ptr, i64, i64 } %t356) %t358 = load { ptr, i64, i64 }, ptr %t351 %t359 = extractvalue { ptr, i64, i64 } %t358, 1 %t360 = icmp uge i64 %t357, %t359 br i1 %t360, label %range2745, label %inrange2746 range2745: call void @finch_panic_index(ptr @.str.1634, i64 872, i64 %t357, i64 %t359) unreachable inrange2746: %t361 = extractvalue { ptr, i64, i64 } %t358, 0 %t362 = getelementptr inbounds %S.gen.StructDef, ptr %t361, i64 %t357 %t363 = load %S.gen.StructDef, ptr %t362 store %S.gen.StructDef %t363, ptr %a364 call void @finch.copy.S_gen_StructDef(ptr %a365, ptr %a364) %t366 = load %S.gen.StructDef, ptr %a365 store %S.gen.StructDef %t366, ptr %a367 %t368 = load ptr, ptr %a1 %t369 = load %S.ast.Type, ptr %a2 %t370 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t368, %S.ast.Type %t369) store { ptr, i64, i64 } %t370, ptr %a371 %t372 = load ptr, ptr %a1 %t373 = load { ptr, i64, i64 }, ptr %a371 %t374 = load ptr, ptr %a1 %t375 = load { ptr, i64, i64 }, ptr %a371 %t376 = call { ptr, i64, i64 } @finch.gen.load(ptr %t374, { ptr, i64, i64 } %t375, { ptr, i64, i64 } { ptr @.str.1635, i64 4, i64 0 }) call void @finch.gen.store(ptr %t372, { ptr, i64, i64 } %t373, { ptr, i64, i64 } %t376, { ptr, i64, i64 } { ptr @.str.1636, i64 4, i64 0 }) store { ptr, i64, i64 } %t376, ptr %a377 call void @finch_str_drop(ptr %a377) %t378 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 12 %t379 = getelementptr inbounds { ptr, i64, i64 }, ptr %t378, i32 0, i32 1 %t380 = load i64, ptr %t379 store i64 0, ptr %a381 br label %for.cond2747 for.cond2747: %t382 = load i64, ptr %a381 %t383 = icmp slt i64 %t382, %t380 br i1 %t383, label %for.body2748, label %for.end2750 for.body2748: %t384 = load ptr, ptr %a1 %t385 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 12 %t386 = load i64, ptr %a381 %t387 = load { ptr, i64, i64 }, ptr %t385 %t388 = extractvalue { ptr, i64, i64 } %t387, 1 %t389 = icmp uge i64 %t386, %t388 br i1 %t389, label %range2751, label %inrange2752 range2751: call void @finch_panic_index(ptr @.str.1637, i64 876, i64 %t386, i64 %t388) unreachable inrange2752: %t390 = extractvalue { ptr, i64, i64 } %t387, 0 %t391 = getelementptr inbounds %S.ast.Type, ptr %t390, i64 %t386 %t392 = load %S.ast.Type, ptr %t391 %t393 = call i1 @finch.gen.owning(ptr %t384, %S.ast.Type %t392) br i1 %t393, label %then2753, label %endif2755 then2753: %t394 = load ptr, ptr %a1 %t395 = load { ptr, i64, i64 }, ptr %a371 store { ptr, i64, i64 } { ptr @.str.1638, i64 23, i64 0 }, ptr %a397 store { ptr, i64, i64 } %t395, ptr %a398 call void @finch_str_concat(ptr %a396, ptr %a397, ptr %a398) %t399 = load { ptr, i64, i64 }, ptr %a396 store { ptr, i64, i64 } %t399, ptr %a401 store { ptr, i64, i64 } { ptr @.str.1639, i64 23, i64 0 }, ptr %a402 call void @finch_str_concat(ptr %a400, ptr %a401, ptr %a402) store { ptr, i64, i64 } %t399, ptr %a403 call void @finch_str_drop(ptr %a403) %t404 = load { ptr, i64, i64 }, ptr %a400 %t405 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 3 %t406 = load i64, ptr %a381 %t407 = load { ptr, i64, i64 }, ptr %t405 %t408 = extractvalue { ptr, i64, i64 } %t407, 1 %t409 = icmp uge i64 %t406, %t408 br i1 %t409, label %range2756, label %inrange2757 range2756: call void @finch_panic_index(ptr @.str.1640, i64 877, i64 %t406, i64 %t408) unreachable inrange2757: %t410 = extractvalue { ptr, i64, i64 } %t407, 0 %t411 = getelementptr inbounds i64, ptr %t410, i64 %t406 %t412 = load i64, ptr %t411 call void @finch_str_from_int(ptr %a413, i64 %t412) %t414 = load { ptr, i64, i64 }, ptr %a413 store { ptr, i64, i64 } %t404, ptr %a416 store { ptr, i64, i64 } %t414, ptr %a417 call void @finch_str_concat(ptr %a415, ptr %a416, ptr %a417) store { ptr, i64, i64 } %t404, ptr %a418 call void @finch_str_drop(ptr %a418) store { ptr, i64, i64 } %t414, ptr %a419 call void @finch_str_drop(ptr %a419) %t420 = load { ptr, i64, i64 }, ptr %a415 %t421 = call { ptr, i64, i64 } @finch.gen.op(ptr %t394, { ptr, i64, i64 } %t420) store { ptr, i64, i64 } %t420, ptr %a422 call void @finch_str_drop(ptr %a422) store { ptr, i64, i64 } %t421, ptr %a423 %t424 = load ptr, ptr %a1 %t425 = load { ptr, i64, i64 }, ptr %a371 store { ptr, i64, i64 } { ptr @.str.1641, i64 23, i64 0 }, ptr %a427 store { ptr, i64, i64 } %t425, ptr %a428 call void @finch_str_concat(ptr %a426, ptr %a427, ptr %a428) %t429 = load { ptr, i64, i64 }, ptr %a426 store { ptr, i64, i64 } %t429, ptr %a431 store { ptr, i64, i64 } { ptr @.str.1642, i64 23, i64 0 }, ptr %a432 call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) store { ptr, i64, i64 } %t429, ptr %a433 call void @finch_str_drop(ptr %a433) %t434 = load { ptr, i64, i64 }, ptr %a430 %t435 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 3 %t436 = load i64, ptr %a381 %t437 = load { ptr, i64, i64 }, ptr %t435 %t438 = extractvalue { ptr, i64, i64 } %t437, 1 %t439 = icmp uge i64 %t436, %t438 br i1 %t439, label %range2758, label %inrange2759 range2758: call void @finch_panic_index(ptr @.str.1643, i64 878, i64 %t436, i64 %t438) unreachable inrange2759: %t440 = extractvalue { ptr, i64, i64 } %t437, 0 %t441 = getelementptr inbounds i64, ptr %t440, i64 %t436 %t442 = load i64, ptr %t441 call void @finch_str_from_int(ptr %a443, i64 %t442) %t444 = load { ptr, i64, i64 }, ptr %a443 store { ptr, i64, i64 } %t434, ptr %a446 store { ptr, i64, i64 } %t444, ptr %a447 call void @finch_str_concat(ptr %a445, ptr %a446, ptr %a447) store { ptr, i64, i64 } %t434, ptr %a448 call void @finch_str_drop(ptr %a448) store { ptr, i64, i64 } %t444, ptr %a449 call void @finch_str_drop(ptr %a449) %t450 = load { ptr, i64, i64 }, ptr %a445 %t451 = call { ptr, i64, i64 } @finch.gen.op(ptr %t424, { ptr, i64, i64 } %t450) store { ptr, i64, i64 } %t450, ptr %a452 call void @finch_str_drop(ptr %a452) store { ptr, i64, i64 } %t451, ptr %a453 %t454 = load ptr, ptr %a1 %t455 = load { ptr, i64, i64 }, ptr %a423 %t456 = load { ptr, i64, i64 }, ptr %a453 %t457 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 12 %t458 = load i64, ptr %a381 %t459 = load { ptr, i64, i64 }, ptr %t457 %t460 = extractvalue { ptr, i64, i64 } %t459, 1 %t461 = icmp uge i64 %t458, %t460 br i1 %t461, label %range2760, label %inrange2761 range2760: call void @finch_panic_index(ptr @.str.1644, i64 879, i64 %t458, i64 %t460) unreachable inrange2761: %t462 = extractvalue { ptr, i64, i64 } %t459, 0 %t463 = getelementptr inbounds %S.ast.Type, ptr %t462, i64 %t458 %t464 = load %S.ast.Type, ptr %t463 call void @finch.gen.copyAt(ptr %t454, { ptr, i64, i64 } %t455, { ptr, i64, i64 } %t456, %S.ast.Type %t464) call void @finch_str_drop(ptr %a453) call void @finch_str_drop(ptr %a423) br label %endif2755 endif2755: br label %for.step2749 for.step2749: %t465 = load i64, ptr %a381 %t466 = add i64 %t465, 1 store i64 %t466, ptr %a381 br label %for.cond2747 for.end2750: call void @finch_str_drop(ptr %a371) call void @finch.drop.S_gen_StructDef(ptr %a367) br label %endif2723 endif2723: br label %endif2711 endif2711: %t467 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t467, { ptr, i64, i64 } { ptr @.str.1645, i64 8, i64 0 }) %t468 = load ptr, ptr %a1 %t469 = load %S.gen.Saved, ptr %a32 %t470 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1646, i64 21, i64 0 }, ptr %a472 store { ptr, i64, i64 } %t470, ptr %a473 call void @finch_str_concat(ptr %a471, ptr %a472, ptr %a473) %t474 = load { ptr, i64, i64 }, ptr %a471 store { ptr, i64, i64 } %t474, ptr %a476 store { ptr, i64, i64 } { ptr @.str.1647, i64 20, i64 0 }, ptr %a477 call void @finch_str_concat(ptr %a475, ptr %a476, ptr %a477) store { ptr, i64, i64 } %t474, ptr %a478 call void @finch_str_drop(ptr %a478) %t479 = load { ptr, i64, i64 }, ptr %a475 call void @finch.gen.endHelper(ptr %t468, %S.gen.Saved %t469, { ptr, i64, i64 } %t479) store { ptr, i64, i64 } %t479, ptr %a480 call void @finch_str_drop(ptr %a480) %t481 = load { ptr, i64, i64 }, ptr %a10 call void @finch.drop.S_gen_Saved(ptr %a32) ret { ptr, i64, i64 } %t481 } define internal void @finch.drop.S_gen_Val(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.Val, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.gen.Val, ptr %a, i32 0, i32 1 call void @finch.drop.S_ast_Type(ptr %t2) ret void } define internal { ptr, i64, i64 } @finch.gen.copyValue(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca %S.ast.Type, align 16 %a20 = alloca %S.ast.Type, align 16 %a24 = alloca %S.gen.Val, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = load %S.ast.Type, ptr %a3 %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) %t7 = xor i1 %t6, true br i1 %t7, label %then2762, label %endif2764 then2762: %t8 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t8, ptr %a9 call void @finch_str_copy(ptr %a10, ptr %a9) %t11 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t11 endif2764: %t12 = load ptr, ptr %a1 %t13 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t13, ptr %a14 call void @finch_str_copy(ptr %a15, ptr %a14) %t16 = load { ptr, i64, i64 }, ptr %a15 %t17 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t16, 0 %t18 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t18, ptr %a19 call void @finch.copy.S_ast_Type(ptr %a20, ptr %a19) %t21 = load %S.ast.Type, ptr %a20 %t22 = insertvalue %S.gen.Val %t17, %S.ast.Type %t21, 1 %t23 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t12, %S.gen.Val %t22) store %S.gen.Val %t22, ptr %a24 call void @finch.drop.S_gen_Val(ptr %a24) store { ptr, i64, i64 } %t23, ptr %a25 %t26 = load ptr, ptr %a1 %t27 = load ptr, ptr %a1 %t28 = load %S.ast.Type, ptr %a3 %t29 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t27, %S.ast.Type %t28) %t30 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t26, { ptr, i64, i64 } %t29) store { ptr, i64, i64 } %t29, ptr %a31 call void @finch_str_drop(ptr %a31) store { ptr, i64, i64 } %t30, ptr %a32 %t33 = load ptr, ptr %a1 %t34 = load { ptr, i64, i64 }, ptr %a32 %t35 = load { ptr, i64, i64 }, ptr %a25 %t36 = load %S.ast.Type, ptr %a3 call void @finch.gen.copyAt(ptr %t33, { ptr, i64, i64 } %t34, { ptr, i64, i64 } %t35, %S.ast.Type %t36) %t37 = load ptr, ptr %a1 %t38 = load ptr, ptr %a1 %t39 = load %S.ast.Type, ptr %a3 %t40 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t38, %S.ast.Type %t39) %t41 = load { ptr, i64, i64 }, ptr %a32 %t42 = call { ptr, i64, i64 } @finch.gen.load(ptr %t37, { ptr, i64, i64 } %t40, { ptr, i64, i64 } %t41) store { ptr, i64, i64 } %t40, ptr %a43 call void @finch_str_drop(ptr %a43) call void @finch_str_drop(ptr %a32) call void @finch_str_drop(ptr %a25) ret { ptr, i64, i64 } %t42 } define internal void @finch.gen.dropAt(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = load %S.ast.Type, ptr %a3 %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) %t7 = xor i1 %t6, true br i1 %t7, label %then2765, label %endif2767 then2765: ret void endif2767: %t8 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1648, i64 3, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 br i1 %t13, label %then2768, label %else2769 then2768: %t14 = load ptr, ptr %a1 %t15 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1649, i64 30, i64 0 }, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t19, ptr %a21 store { ptr, i64, i64 } { ptr @.str.1650, i64 1, i64 0 }, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) store { ptr, i64, i64 } %t19, ptr %a23 call void @finch_str_drop(ptr %a23) %t24 = load { ptr, i64, i64 }, ptr %a20 call void @finch.gen.emit(ptr %t14, { ptr, i64, i64 } %t24) store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_drop(ptr %a25) br label %endif2770 else2769: %t26 = load ptr, ptr %a1 %t27 = load ptr, ptr %a1 %t28 = load %S.ast.Type, ptr %a3 %t29 = call { ptr, i64, i64 } @finch.gen.dropFn(ptr %t27, %S.ast.Type %t28) store { ptr, i64, i64 } { ptr @.str.1651, i64 10, i64 0 }, ptr %a31 store { ptr, i64, i64 } %t29, ptr %a32 call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) store { ptr, i64, i64 } %t29, ptr %a33 call void @finch_str_drop(ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a30 store { ptr, i64, i64 } %t34, ptr %a36 store { ptr, i64, i64 } { ptr @.str.1652, i64 5, i64 0 }, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) store { ptr, i64, i64 } %t34, ptr %a38 call void @finch_str_drop(ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a35 %t40 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t39, ptr %a42 store { ptr, i64, i64 } %t40, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) store { ptr, i64, i64 } %t39, ptr %a44 call void @finch_str_drop(ptr %a44) %t45 = load { ptr, i64, i64 }, ptr %a41 store { ptr, i64, i64 } %t45, ptr %a47 store { ptr, i64, i64 } { ptr @.str.1653, i64 1, i64 0 }, ptr %a48 call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) store { ptr, i64, i64 } %t45, ptr %a49 call void @finch_str_drop(ptr %a49) %t50 = load { ptr, i64, i64 }, ptr %a46 call void @finch.gen.emit(ptr %t26, { ptr, i64, i64 } %t50) store { ptr, i64, i64 } %t50, ptr %a51 call void @finch_str_drop(ptr %a51) br label %endif2770 endif2770: ret void } define internal void @finch.gen.dropValue(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca %S.ast.Type, align 16 %a16 = alloca %S.ast.Type, align 16 %a20 = alloca %S.gen.Val, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = load %S.ast.Type, ptr %a3 %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) br i1 %t6, label %then2771, label %endif2773 then2771: %t7 = load ptr, ptr %a1 %t8 = load ptr, ptr %a1 %t9 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t9, ptr %a10 call void @finch_str_copy(ptr %a11, ptr %a10) %t12 = load { ptr, i64, i64 }, ptr %a11 %t13 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t12, 0 %t14 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t14, ptr %a15 call void @finch.copy.S_ast_Type(ptr %a16, ptr %a15) %t17 = load %S.ast.Type, ptr %a16 %t18 = insertvalue %S.gen.Val %t13, %S.ast.Type %t17, 1 %t19 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t8, %S.gen.Val %t18) store %S.gen.Val %t18, ptr %a20 call void @finch.drop.S_gen_Val(ptr %a20) %t21 = load %S.ast.Type, ptr %a3 call void @finch.gen.dropAt(ptr %t7, { ptr, i64, i64 } %t19, %S.ast.Type %t21) store { ptr, i64, i64 } %t19, ptr %a22 call void @finch_str_drop(ptr %a22) br label %endif2773 endif2773: ret void } define internal void @finch.gen.release(ptr %p0, %S.gen.Val %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.gen.Val %p1, ptr %a2 %t3 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 %t4 = load i1, ptr %t3 br label %logic.from2774 logic.from2774: br i1 %t4, label %logic.rhs2775, label %logic.end2776 logic.rhs2775: %t5 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 %t8 = icmp sgt i64 %t7, 0 br label %logic.rend2777 logic.rend2777: br label %logic.end2776 logic.end2776: %t9 = phi i1 [ false, %logic.from2774 ], [ %t8, %logic.rend2777 ] br label %logic.from2778 logic.from2778: br i1 %t9, label %logic.rhs2779, label %logic.end2780 logic.rhs2779: %t10 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t11 = load { ptr, i64, i64 }, ptr %t10 %t12 = call i1 @finch.gen.isConstant({ ptr, i64, i64 } %t11) %t13 = xor i1 %t12, true br label %logic.rend2781 logic.rend2781: br label %logic.end2780 logic.end2780: %t14 = phi i1 [ false, %logic.from2778 ], [ %t13, %logic.rend2781 ] br label %logic.from2782 logic.from2782: br i1 %t14, label %logic.rhs2783, label %logic.end2784 logic.rhs2783: %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t17 = load %S.ast.Type, ptr %t16 %t18 = call i1 @finch.gen.owning(ptr %t15, %S.ast.Type %t17) br label %logic.rend2785 logic.rend2785: br label %logic.end2784 logic.end2784: %t19 = phi i1 [ false, %logic.from2782 ], [ %t18, %logic.rend2785 ] br i1 %t19, label %then2786, label %endif2788 then2786: %t20 = load ptr, ptr %a1 %t21 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t24 = load %S.ast.Type, ptr %t23 call void @finch.gen.dropValue(ptr %t20, { ptr, i64, i64 } %t22, %S.ast.Type %t24) br label %endif2788 endif2788: ret void } define internal i1 @finch.gen.isConstant({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 store { ptr, i64, i64 } { ptr @.str.1655, i64 1, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_starts(ptr %a3, ptr %a5) %t7 = icmp ne i32 %t6, 0 %t8 = xor i1 %t7, true ret i1 %t8 } define internal { ptr, i64, i64 } @finch.gen.dropFn(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca %S.gen.Saved, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca %S.ast.Type, align 16 %a47 = alloca %S.ast.Type, align 16 %a49 = alloca %S.ast.Type, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca %S.ast.Type, align 16 %a125 = alloca %S.ast.Type, align 16 %a127 = alloca %S.ast.Type, align 16 %a135 = alloca %S.ast.Type, align 16 %a136 = alloca %S.ast.Type, align 16 %a138 = alloca %S.ast.Type, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca %S.gen.StructDef, align 16 %a249 = alloca %S.gen.StructDef, align 16 %a251 = alloca %S.gen.StructDef, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca i64, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = load %S.ast.Type, ptr %a2 %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) store { ptr, i64, i64 } { ptr @.str.1656, i64 12, i64 0 }, ptr %a6 store { ptr, i64, i64 } %t4, ptr %a7 call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) store { ptr, i64, i64 } %t4, ptr %a8 call void @finch_str_drop(ptr %a8) %t9 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null br i1 %t12, label %panic2789, label %ok2790 panic2789: call void @finch_panic(ptr @.str.1657, i64 930, ptr @.str.1658) unreachable ok2790: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 %t14 = load { ptr, i64, i64 }, ptr %t13 %t15 = load { ptr, i64, i64 }, ptr %a10 %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) br i1 %t16, label %then2791, label %endif2793 then2791: %t17 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t17 endif2793: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic2794, label %ok2795 panic2794: call void @finch_panic(ptr @.str.1659, i64 933, ptr @.str.1660) unreachable ok2795: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t22, ptr %a23 call void @finch_str_copy(ptr %a24, ptr %a23) %t25 = load { ptr, i64, i64 }, ptr %a24 %t26 = load i64, ptr %t21 %t27 = add i64 %t26, 1 call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t28 = load ptr, ptr %t20 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 store { ptr, i64, i64 } %t25, ptr %t29 store i64 %t27, ptr %t21 %t30 = load ptr, ptr %a1 %t31 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t30) store %S.gen.Saved %t31, ptr %a32 %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t34 = load { ptr, i64, i64 }, ptr %t33 store { ptr, i64, i64 } %t34, ptr %a35 store { ptr, i64, i64 } { ptr @.str.1661, i64 5, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 br i1 %t38, label %then2796, label %else2797 then2796: %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = extractvalue { ptr, i64, i64 } %t40, 1 %t42 = icmp uge i64 0, %t41 br i1 %t42, label %range2799, label %inrange2800 range2799: call void @finch_panic_index(ptr @.str.1662, i64 936, i64 0, i64 %t41) unreachable inrange2800: %t43 = extractvalue { ptr, i64, i64 } %t40, 0 %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 %t45 = load %S.ast.Type, ptr %t44 store %S.ast.Type %t45, ptr %a46 call void @finch.copy.S_ast_Type(ptr %a47, ptr %a46) %t48 = load %S.ast.Type, ptr %a47 store %S.ast.Type %t48, ptr %a49 %t50 = load ptr, ptr %a1 %t51 = load %S.ast.Type, ptr %a49 %t52 = call i1 @finch.gen.owning(ptr %t50, %S.ast.Type %t51) br i1 %t52, label %then2801, label %endif2803 then2801: %t53 = load ptr, ptr %a1 %t54 = call { ptr, i64, i64 } @finch.gen.load(ptr %t53, { ptr, i64, i64 } { ptr @.str.1663, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1664, i64 2, i64 0 }) store { ptr, i64, i64 } %t54, ptr %a55 %t56 = load ptr, ptr %a1 %t57 = load ptr, ptr %a1 %t58 = call { ptr, i64, i64 } @finch.gen.op(ptr %t57, { ptr, i64, i64 } { ptr @.str.1666, i64 62, i64 0 }) %t59 = call { ptr, i64, i64 } @finch.gen.load(ptr %t56, { ptr, i64, i64 } { ptr @.str.1665, i64 3, i64 0 }, { ptr, i64, i64 } %t58) store { ptr, i64, i64 } %t58, ptr %a60 call void @finch_str_drop(ptr %a60) store { ptr, i64, i64 } %t59, ptr %a61 %t62 = load ptr, ptr %a1 %t63 = load { ptr, i64, i64 }, ptr %a61 %t64 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t62, { ptr, i64, i64 } %t63) store { ptr, i64, i64 } %t64, ptr %a65 %t66 = load ptr, ptr %a1 %t67 = load ptr, ptr %a1 %t68 = load %S.ast.Type, ptr %a49 %t69 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t67, %S.ast.Type %t68) store { ptr, i64, i64 } { ptr @.str.1667, i64 23, i64 0 }, ptr %a71 store { ptr, i64, i64 } %t69, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) store { ptr, i64, i64 } %t69, ptr %a73 call void @finch_str_drop(ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } %t74, ptr %a76 store { ptr, i64, i64 } { ptr @.str.1668, i64 6, i64 0 }, ptr %a77 call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) store { ptr, i64, i64 } %t74, ptr %a78 call void @finch_str_drop(ptr %a78) %t79 = load { ptr, i64, i64 }, ptr %a75 %t80 = load { ptr, i64, i64 }, ptr %a55 store { ptr, i64, i64 } %t79, ptr %a82 store { ptr, i64, i64 } %t80, ptr %a83 call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) store { ptr, i64, i64 } %t79, ptr %a84 call void @finch_str_drop(ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a81 store { ptr, i64, i64 } %t85, ptr %a87 store { ptr, i64, i64 } { ptr @.str.1669, i64 6, i64 0 }, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) store { ptr, i64, i64 } %t85, ptr %a89 call void @finch_str_drop(ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a86 %t91 = load { ptr, i64, i64 }, ptr %a65 %t92 = extractvalue { ptr, i64, i64 } %t91, 1 %t93 = icmp uge i64 3, %t92 br i1 %t93, label %range2804, label %inrange2805 range2804: call void @finch_panic_index(ptr @.str.1670, i64 941, i64 3, i64 %t92) unreachable inrange2805: %t94 = extractvalue { ptr, i64, i64 } %t91, 0 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i64 3 %t96 = load { ptr, i64, i64 }, ptr %t95 store { ptr, i64, i64 } %t90, ptr %a98 store { ptr, i64, i64 } %t96, ptr %a99 call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) store { ptr, i64, i64 } %t90, ptr %a100 call void @finch_str_drop(ptr %a100) %t101 = load { ptr, i64, i64 }, ptr %a97 %t102 = call { ptr, i64, i64 } @finch.gen.op(ptr %t66, { ptr, i64, i64 } %t101) store { ptr, i64, i64 } %t101, ptr %a103 call void @finch_str_drop(ptr %a103) store { ptr, i64, i64 } %t102, ptr %a104 %t105 = load ptr, ptr %a1 %t106 = load { ptr, i64, i64 }, ptr %a104 %t107 = load %S.ast.Type, ptr %a49 call void @finch.gen.dropAt(ptr %t105, { ptr, i64, i64 } %t106, %S.ast.Type %t107) %t108 = load ptr, ptr %a1 %t109 = load { ptr, i64, i64 }, ptr %a65 call void @finch.gen.loopEnd(ptr %t108, { ptr, i64, i64 } %t109) call void @finch_str_drop(ptr %a104) call void @finch.drop.arr_str(ptr %a65) call void @finch_str_drop(ptr %a61) call void @finch_str_drop(ptr %a55) br label %endif2803 endif2803: %t110 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t110, { ptr, i64, i64 } { ptr @.str.1671, i64 33, i64 0 }) call void @finch.drop.S_ast_Type(ptr %a49) br label %endif2798 else2797: %t111 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t112 = load { ptr, i64, i64 }, ptr %t111 store { ptr, i64, i64 } %t112, ptr %a113 store { ptr, i64, i64 } { ptr @.str.1672, i64 3, i64 0 }, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 br i1 %t116, label %then2806, label %else2807 then2806: %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t118 = load { ptr, i64, i64 }, ptr %t117 %t119 = extractvalue { ptr, i64, i64 } %t118, 1 %t120 = icmp uge i64 0, %t119 br i1 %t120, label %range2809, label %inrange2810 range2809: call void @finch_panic_index(ptr @.str.1673, i64 947, i64 0, i64 %t119) unreachable inrange2810: %t121 = extractvalue { ptr, i64, i64 } %t118, 0 %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 0 %t123 = load %S.ast.Type, ptr %t122 store %S.ast.Type %t123, ptr %a124 call void @finch.copy.S_ast_Type(ptr %a125, ptr %a124) %t126 = load %S.ast.Type, ptr %a125 store %S.ast.Type %t126, ptr %a127 %t128 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t129 = load { ptr, i64, i64 }, ptr %t128 %t130 = extractvalue { ptr, i64, i64 } %t129, 1 %t131 = icmp uge i64 1, %t130 br i1 %t131, label %range2811, label %inrange2812 range2811: call void @finch_panic_index(ptr @.str.1674, i64 948, i64 1, i64 %t130) unreachable inrange2812: %t132 = extractvalue { ptr, i64, i64 } %t129, 0 %t133 = getelementptr inbounds %S.ast.Type, ptr %t132, i64 1 %t134 = load %S.ast.Type, ptr %t133 store %S.ast.Type %t134, ptr %a135 call void @finch.copy.S_ast_Type(ptr %a136, ptr %a135) %t137 = load %S.ast.Type, ptr %a136 store %S.ast.Type %t137, ptr %a138 %t139 = load ptr, ptr %a1 %t140 = load %S.ast.Type, ptr %a127 %t141 = call i1 @finch.gen.owning(ptr %t139, %S.ast.Type %t140) br label %logic.from2813 logic.from2813: br i1 %t141, label %logic.end2815, label %logic.rhs2814 logic.rhs2814: %t142 = load ptr, ptr %a1 %t143 = load %S.ast.Type, ptr %a138 %t144 = call i1 @finch.gen.owning(ptr %t142, %S.ast.Type %t143) br label %logic.rend2816 logic.rend2816: br label %logic.end2815 logic.end2815: %t145 = phi i1 [ true, %logic.from2813 ], [ %t144, %logic.rend2816 ] br i1 %t145, label %then2817, label %endif2819 then2817: %t146 = load ptr, ptr %a1 %t147 = load ptr, ptr %a1 %t148 = load ptr, ptr %a1 %t149 = load %S.ast.Type, ptr %a2 %t150 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t148, %S.ast.Type %t149) store { ptr, i64, i64 } { ptr @.str.1676, i64 23, i64 0 }, ptr %a152 store { ptr, i64, i64 } %t150, ptr %a153 call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) store { ptr, i64, i64 } %t150, ptr %a154 call void @finch_str_drop(ptr %a154) %t155 = load { ptr, i64, i64 }, ptr %a151 store { ptr, i64, i64 } %t155, ptr %a157 store { ptr, i64, i64 } { ptr @.str.1677, i64 22, i64 0 }, ptr %a158 call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158) store { ptr, i64, i64 } %t155, ptr %a159 call void @finch_str_drop(ptr %a159) %t160 = load { ptr, i64, i64 }, ptr %a156 %t161 = call { ptr, i64, i64 } @finch.gen.op(ptr %t147, { ptr, i64, i64 } %t160) store { ptr, i64, i64 } %t160, ptr %a162 call void @finch_str_drop(ptr %a162) %t163 = call { ptr, i64, i64 } @finch.gen.load(ptr %t146, { ptr, i64, i64 } { ptr @.str.1675, i64 3, i64 0 }, { ptr, i64, i64 } %t161) store { ptr, i64, i64 } %t161, ptr %a164 call void @finch_str_drop(ptr %a164) store { ptr, i64, i64 } %t163, ptr %a165 %t166 = load ptr, ptr %a1 %t167 = load { ptr, i64, i64 }, ptr %a165 %t168 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t166, { ptr, i64, i64 } %t167) store { ptr, i64, i64 } %t168, ptr %a169 %t170 = load ptr, ptr %a1 %t171 = load %S.ast.Type, ptr %a2 %t172 = load { ptr, i64, i64 }, ptr %a169 %t173 = extractvalue { ptr, i64, i64 } %t172, 1 %t174 = icmp uge i64 3, %t173 br i1 %t174, label %range2820, label %inrange2821 range2820: call void @finch_panic_index(ptr @.str.1679, i64 952, i64 3, i64 %t173) unreachable inrange2821: %t175 = extractvalue { ptr, i64, i64 } %t172, 0 %t176 = getelementptr inbounds { ptr, i64, i64 }, ptr %t175, i64 3 %t177 = load { ptr, i64, i64 }, ptr %t176 %t178 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t170, { ptr, i64, i64 } { ptr @.str.1678, i64 2, i64 0 }, %S.ast.Type %t171, { ptr, i64, i64 } %t177) store { ptr, i64, i64 } %t178, ptr %a179 %t180 = load ptr, ptr %a1 %t181 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t180, { ptr, i64, i64 } { ptr @.str.1680, i64 10, i64 0 }) store { ptr, i64, i64 } %t181, ptr %a182 %t183 = load ptr, ptr %a1 %t184 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t183, { ptr, i64, i64 } { ptr @.str.1681, i64 10, i64 0 }) store { ptr, i64, i64 } %t184, ptr %a185 %t186 = load ptr, ptr %a1 %t187 = load ptr, ptr %a1 %t188 = load ptr, ptr %a1 %t189 = load ptr, ptr %a1 %t190 = load { ptr, i64, i64 }, ptr %a179 %t191 = load %S.ast.Type, ptr %a2 %t192 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t189, { ptr, i64, i64 } %t190, %S.ast.Type %t191, i64 0) %t193 = call { ptr, i64, i64 } @finch.gen.load(ptr %t188, { ptr, i64, i64 } { ptr @.str.1683, i64 3, i64 0 }, { ptr, i64, i64 } %t192) store { ptr, i64, i64 } %t192, ptr %a194 call void @finch_str_drop(ptr %a194) store { ptr, i64, i64 } { ptr @.str.1682, i64 12, i64 0 }, ptr %a196 store { ptr, i64, i64 } %t193, ptr %a197 call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) store { ptr, i64, i64 } %t193, ptr %a198 call void @finch_str_drop(ptr %a198) %t199 = load { ptr, i64, i64 }, ptr %a195 store { ptr, i64, i64 } %t199, ptr %a201 store { ptr, i64, i64 } { ptr @.str.1684, i64 3, i64 0 }, ptr %a202 call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) store { ptr, i64, i64 } %t199, ptr %a203 call void @finch_str_drop(ptr %a203) %t204 = load { ptr, i64, i64 }, ptr %a200 %t205 = call { ptr, i64, i64 } @finch.gen.op(ptr %t187, { ptr, i64, i64 } %t204) store { ptr, i64, i64 } %t204, ptr %a206 call void @finch_str_drop(ptr %a206) %t207 = load { ptr, i64, i64 }, ptr %a182 %t208 = load { ptr, i64, i64 }, ptr %a185 call void @finch.gen.condBr(ptr %t186, { ptr, i64, i64 } %t205, { ptr, i64, i64 } %t207, { ptr, i64, i64 } %t208) store { ptr, i64, i64 } %t205, ptr %a209 call void @finch_str_drop(ptr %a209) %t210 = load ptr, ptr %a1 %t211 = load { ptr, i64, i64 }, ptr %a182 call void @finch.gen.label(ptr %t210, { ptr, i64, i64 } %t211) %t212 = load ptr, ptr %a1 %t213 = load ptr, ptr %a1 %t214 = load { ptr, i64, i64 }, ptr %a179 %t215 = load %S.ast.Type, ptr %a2 %t216 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t213, { ptr, i64, i64 } %t214, %S.ast.Type %t215, i64 1) %t217 = load %S.ast.Type, ptr %a127 call void @finch.gen.dropAt(ptr %t212, { ptr, i64, i64 } %t216, %S.ast.Type %t217) store { ptr, i64, i64 } %t216, ptr %a218 call void @finch_str_drop(ptr %a218) %t219 = load ptr, ptr %a1 %t220 = load ptr, ptr %a1 %t221 = load { ptr, i64, i64 }, ptr %a179 %t222 = load %S.ast.Type, ptr %a2 %t223 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t220, { ptr, i64, i64 } %t221, %S.ast.Type %t222, i64 2) %t224 = load %S.ast.Type, ptr %a138 call void @finch.gen.dropAt(ptr %t219, { ptr, i64, i64 } %t223, %S.ast.Type %t224) store { ptr, i64, i64 } %t223, ptr %a225 call void @finch_str_drop(ptr %a225) %t226 = load ptr, ptr %a1 %t227 = load { ptr, i64, i64 }, ptr %a185 call void @finch.gen.br(ptr %t226, { ptr, i64, i64 } %t227) %t228 = load ptr, ptr %a1 %t229 = load { ptr, i64, i64 }, ptr %a185 call void @finch.gen.label(ptr %t228, { ptr, i64, i64 } %t229) %t230 = load ptr, ptr %a1 %t231 = load { ptr, i64, i64 }, ptr %a169 call void @finch.gen.loopEnd(ptr %t230, { ptr, i64, i64 } %t231) call void @finch_str_drop(ptr %a185) call void @finch_str_drop(ptr %a182) call void @finch_str_drop(ptr %a179) call void @finch.drop.arr_str(ptr %a169) call void @finch_str_drop(ptr %a165) br label %endif2819 endif2819: %t232 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t232, { ptr, i64, i64 } { ptr @.str.1685, i64 33, i64 0 }) call void @finch.drop.S_ast_Type(ptr %a138) call void @finch.drop.S_ast_Type(ptr %a127) br label %endif2808 else2807: %t233 = load ptr, ptr %a1 %t234 = icmp eq ptr %t233, null br i1 %t234, label %panic2822, label %ok2823 panic2822: call void @finch_panic(ptr @.str.1686, i64 965, ptr @.str.1687) unreachable ok2823: %t235 = getelementptr inbounds %S.gen.Gen, ptr %t233, i32 0, i32 16 %t236 = load ptr, ptr %a1 %t237 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t238 = load { ptr, i64, i64 }, ptr %t237 %t239 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t240 = load { ptr, i64, i64 }, ptr %t239 %t241 = call i64 @finch.gen.findStruct(ptr %t236, { ptr, i64, i64 } %t238, { ptr, i64, i64 } %t240) %t242 = load { ptr, i64, i64 }, ptr %t235 %t243 = extractvalue { ptr, i64, i64 } %t242, 1 %t244 = icmp uge i64 %t241, %t243 br i1 %t244, label %range2824, label %inrange2825 range2824: call void @finch_panic_index(ptr @.str.1688, i64 965, i64 %t241, i64 %t243) unreachable inrange2825: %t245 = extractvalue { ptr, i64, i64 } %t242, 0 %t246 = getelementptr inbounds %S.gen.StructDef, ptr %t245, i64 %t241 %t247 = load %S.gen.StructDef, ptr %t246 store %S.gen.StructDef %t247, ptr %a248 call void @finch.copy.S_gen_StructDef(ptr %a249, ptr %a248) %t250 = load %S.gen.StructDef, ptr %a249 store %S.gen.StructDef %t250, ptr %a251 %t252 = load ptr, ptr %a1 %t253 = load %S.ast.Type, ptr %a2 %t254 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t252, %S.ast.Type %t253) store { ptr, i64, i64 } %t254, ptr %a255 %t256 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 12 %t257 = getelementptr inbounds { ptr, i64, i64 }, ptr %t256, i32 0, i32 1 %t258 = load i64, ptr %t257 store i64 0, ptr %a259 br label %for.cond2826 for.cond2826: %t260 = load i64, ptr %a259 %t261 = icmp slt i64 %t260, %t258 br i1 %t261, label %for.body2827, label %for.end2829 for.body2827: %t262 = load ptr, ptr %a1 %t263 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 12 %t264 = load i64, ptr %a259 %t265 = load { ptr, i64, i64 }, ptr %t263 %t266 = extractvalue { ptr, i64, i64 } %t265, 1 %t267 = icmp uge i64 %t264, %t266 br i1 %t267, label %range2830, label %inrange2831 range2830: call void @finch_panic_index(ptr @.str.1689, i64 968, i64 %t264, i64 %t266) unreachable inrange2831: %t268 = extractvalue { ptr, i64, i64 } %t265, 0 %t269 = getelementptr inbounds %S.ast.Type, ptr %t268, i64 %t264 %t270 = load %S.ast.Type, ptr %t269 %t271 = call i1 @finch.gen.owning(ptr %t262, %S.ast.Type %t270) br i1 %t271, label %then2832, label %endif2834 then2832: %t272 = load ptr, ptr %a1 %t273 = load ptr, ptr %a1 %t274 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } { ptr @.str.1690, i64 23, i64 0 }, ptr %a276 store { ptr, i64, i64 } %t274, ptr %a277 call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) %t278 = load { ptr, i64, i64 }, ptr %a275 store { ptr, i64, i64 } %t278, ptr %a280 store { ptr, i64, i64 } { ptr @.str.1691, i64 21, i64 0 }, ptr %a281 call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) store { ptr, i64, i64 } %t278, ptr %a282 call void @finch_str_drop(ptr %a282) %t283 = load { ptr, i64, i64 }, ptr %a279 %t284 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 3 %t285 = load i64, ptr %a259 %t286 = load { ptr, i64, i64 }, ptr %t284 %t287 = extractvalue { ptr, i64, i64 } %t286, 1 %t288 = icmp uge i64 %t285, %t287 br i1 %t288, label %range2835, label %inrange2836 range2835: call void @finch_panic_index(ptr @.str.1692, i64 969, i64 %t285, i64 %t287) unreachable inrange2836: %t289 = extractvalue { ptr, i64, i64 } %t286, 0 %t290 = getelementptr inbounds i64, ptr %t289, i64 %t285 %t291 = load i64, ptr %t290 call void @finch_str_from_int(ptr %a292, i64 %t291) %t293 = load { ptr, i64, i64 }, ptr %a292 store { ptr, i64, i64 } %t283, ptr %a295 store { ptr, i64, i64 } %t293, ptr %a296 call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296) store { ptr, i64, i64 } %t283, ptr %a297 call void @finch_str_drop(ptr %a297) store { ptr, i64, i64 } %t293, ptr %a298 call void @finch_str_drop(ptr %a298) %t299 = load { ptr, i64, i64 }, ptr %a294 %t300 = call { ptr, i64, i64 } @finch.gen.op(ptr %t273, { ptr, i64, i64 } %t299) store { ptr, i64, i64 } %t299, ptr %a301 call void @finch_str_drop(ptr %a301) %t302 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 12 %t303 = load i64, ptr %a259 %t304 = load { ptr, i64, i64 }, ptr %t302 %t305 = extractvalue { ptr, i64, i64 } %t304, 1 %t306 = icmp uge i64 %t303, %t305 br i1 %t306, label %range2837, label %inrange2838 range2837: call void @finch_panic_index(ptr @.str.1693, i64 969, i64 %t303, i64 %t305) unreachable inrange2838: %t307 = extractvalue { ptr, i64, i64 } %t304, 0 %t308 = getelementptr inbounds %S.ast.Type, ptr %t307, i64 %t303 %t309 = load %S.ast.Type, ptr %t308 call void @finch.gen.dropAt(ptr %t272, { ptr, i64, i64 } %t300, %S.ast.Type %t309) store { ptr, i64, i64 } %t300, ptr %a310 call void @finch_str_drop(ptr %a310) br label %endif2834 endif2834: br label %for.step2828 for.step2828: %t311 = load i64, ptr %a259 %t312 = add i64 %t311, 1 store i64 %t312, ptr %a259 br label %for.cond2826 for.end2829: call void @finch_str_drop(ptr %a255) call void @finch.drop.S_gen_StructDef(ptr %a251) br label %endif2808 endif2808: br label %endif2798 endif2798: %t313 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t313, { ptr, i64, i64 } { ptr @.str.1694, i64 8, i64 0 }) %t314 = load ptr, ptr %a1 %t315 = load %S.gen.Saved, ptr %a32 %t316 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1695, i64 21, i64 0 }, ptr %a318 store { ptr, i64, i64 } %t316, ptr %a319 call void @finch_str_concat(ptr %a317, ptr %a318, ptr %a319) %t320 = load { ptr, i64, i64 }, ptr %a317 store { ptr, i64, i64 } %t320, ptr %a322 store { ptr, i64, i64 } { ptr @.str.1696, i64 8, i64 0 }, ptr %a323 call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323) store { ptr, i64, i64 } %t320, ptr %a324 call void @finch_str_drop(ptr %a324) %t325 = load { ptr, i64, i64 }, ptr %a321 call void @finch.gen.endHelper(ptr %t314, %S.gen.Saved %t315, { ptr, i64, i64 } %t325) store { ptr, i64, i64 } %t325, ptr %a326 call void @finch_str_drop(ptr %a326) %t327 = load { ptr, i64, i64 }, ptr %a10 call void @finch.drop.S_gen_Saved(ptr %a32) ret { ptr, i64, i64 } %t327 } define internal void @finch.gen.hold(ptr %p0, %S.gen.Val %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.Val, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca %S.ast.Type, align 16 %a33 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store %S.gen.Val %p1, ptr %a2 %t3 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 %t4 = load i1, ptr %t3 br label %logic.from2839 logic.from2839: br i1 %t4, label %logic.rhs2840, label %logic.end2841 logic.rhs2840: %t5 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 %t8 = icmp sgt i64 %t7, 0 br label %logic.rend2842 logic.rend2842: br label %logic.end2841 logic.end2841: %t9 = phi i1 [ false, %logic.from2839 ], [ %t8, %logic.rend2842 ] br label %logic.from2843 logic.from2843: br i1 %t9, label %logic.rhs2844, label %logic.end2845 logic.rhs2844: %t10 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t11 = load { ptr, i64, i64 }, ptr %t10 %t12 = call i1 @finch.gen.isConstant({ ptr, i64, i64 } %t11) %t13 = xor i1 %t12, true br label %logic.rend2846 logic.rend2846: br label %logic.end2845 logic.end2845: %t14 = phi i1 [ false, %logic.from2843 ], [ %t13, %logic.rend2846 ] br label %logic.from2847 logic.from2847: br i1 %t14, label %logic.rhs2848, label %logic.end2849 logic.rhs2848: %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t17 = load %S.ast.Type, ptr %t16 %t18 = call i1 @finch.gen.owning(ptr %t15, %S.ast.Type %t17) br label %logic.rend2850 logic.rend2850: br label %logic.end2849 logic.end2849: %t19 = phi i1 [ false, %logic.from2847 ], [ %t18, %logic.rend2850 ] br i1 %t19, label %then2851, label %endif2853 then2851: %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null br i1 %t21, label %panic2854, label %ok2855 panic2854: call void @finch_panic(ptr @.str.1697, i64 982, ptr @.str.1698) unreachable ok2855: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 11 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t25 = load { ptr, i64, i64 }, ptr %t24 store { ptr, i64, i64 } %t25, ptr %a26 call void @finch_str_copy(ptr %a27, ptr %a26) %t28 = load { ptr, i64, i64 }, ptr %a27 %t29 = insertvalue %S.gen.Pending zeroinitializer, { ptr, i64, i64 } %t28, 0 %t30 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t31 = load %S.ast.Type, ptr %t30 store %S.ast.Type %t31, ptr %a32 call void @finch.copy.S_ast_Type(ptr %a33, ptr %a32) %t34 = load %S.ast.Type, ptr %a33 %t35 = insertvalue %S.gen.Pending %t29, %S.ast.Type %t34, 1 %t36 = insertvalue %S.gen.Pending %t35, i1 false, 2 %t37 = load i64, ptr %t23 %t38 = add i64 %t37, 1 call void @finch_arr_reserve(ptr %t22, i64 %t38, i64 ptrtoint (ptr getelementptr (%S.gen.Pending, ptr null, i32 1) to i64)) %t39 = load ptr, ptr %t22 %t40 = getelementptr inbounds %S.gen.Pending, ptr %t39, i64 %t37 store %S.gen.Pending %t36, ptr %t40 store i64 %t38, ptr %t23 br label %endif2853 endif2853: ret void } define internal void @finch.gen.holdAddr(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca %S.ast.Type, align 16 %a18 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = load %S.ast.Type, ptr %a3 %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) br i1 %t6, label %then2856, label %endif2858 then2856: %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null br i1 %t8, label %panic2859, label %ok2860 panic2859: call void @finch_panic(ptr @.str.1699, i64 988, ptr @.str.1700) unreachable ok2860: %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 11 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t11 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t11, ptr %a12 call void @finch_str_copy(ptr %a13, ptr %a12) %t14 = load { ptr, i64, i64 }, ptr %a13 %t15 = insertvalue %S.gen.Pending zeroinitializer, { ptr, i64, i64 } %t14, 0 %t16 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t16, ptr %a17 call void @finch.copy.S_ast_Type(ptr %a18, ptr %a17) %t19 = load %S.ast.Type, ptr %a18 %t20 = insertvalue %S.gen.Pending %t15, %S.ast.Type %t19, 1 %t21 = insertvalue %S.gen.Pending %t20, i1 true, 2 %t22 = load i64, ptr %t10 %t23 = add i64 %t22, 1 call void @finch_arr_reserve(ptr %t9, i64 %t23, i64 ptrtoint (ptr getelementptr (%S.gen.Pending, ptr null, i32 1) to i64)) %t24 = load ptr, ptr %t9 %t25 = getelementptr inbounds %S.gen.Pending, ptr %t24, i64 %t22 store %S.gen.Pending %t21, ptr %t25 store i64 %t23, ptr %t10 br label %endif2858 endif2858: ret void } define internal void @finch.copy.S_gen_Pending(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Pending, ptr %src store %S.gen.Pending %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Pending, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Pending, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Pending, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Pending, ptr %src, i32 0, i32 1 call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) ret void } define internal void @finch.drop.S_gen_Pending(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.Pending, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.gen.Pending, ptr %a, i32 0, i32 1 call void @finch.drop.S_ast_Type(ptr %t2) ret void } define internal void @finch.gen.dropPending(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a8 = alloca i64, align 16 %a24 = alloca %S.gen.Pending, align 16 %a25 = alloca %S.gen.Pending, align 16 %a27 = alloca %S.gen.Pending, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2861, label %ok2862 panic2861: call void @finch_panic(ptr @.str.1701, i64 994, ptr @.str.1702) unreachable ok2862: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 11 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 %t7, ptr %a8 br label %while.cond2863 while.cond2863: %t9 = load i64, ptr %a8 %t10 = load i64, ptr %a2 %t11 = icmp sgt i64 %t9, %t10 br i1 %t11, label %while.body2864, label %while.end2865 while.body2864: %t12 = load i64, ptr %a8 %t13 = sub i64 %t12, 1 store i64 %t13, ptr %a8 %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null br i1 %t15, label %panic2866, label %ok2867 panic2866: call void @finch_panic(ptr @.str.1703, i64 997, ptr @.str.1704) unreachable ok2867: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 11 %t17 = load i64, ptr %a8 %t18 = load { ptr, i64, i64 }, ptr %t16 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 %t17, %t19 br i1 %t20, label %range2868, label %inrange2869 range2868: call void @finch_panic_index(ptr @.str.1705, i64 997, i64 %t17, i64 %t19) unreachable inrange2869: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.gen.Pending, ptr %t21, i64 %t17 %t23 = load %S.gen.Pending, ptr %t22 store %S.gen.Pending %t23, ptr %a24 call void @finch.copy.S_gen_Pending(ptr %a25, ptr %a24) %t26 = load %S.gen.Pending, ptr %a25 store %S.gen.Pending %t26, ptr %a27 %t28 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 2 %t29 = load i1, ptr %t28 br i1 %t29, label %then2870, label %else2871 then2870: %t30 = load ptr, ptr %a1 %t31 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 0 %t32 = load { ptr, i64, i64 }, ptr %t31 %t33 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 1 %t34 = load %S.ast.Type, ptr %t33 call void @finch.gen.dropAt(ptr %t30, { ptr, i64, i64 } %t32, %S.ast.Type %t34) br label %endif2872 else2871: %t35 = load ptr, ptr %a1 %t36 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 0 %t37 = load { ptr, i64, i64 }, ptr %t36 %t38 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 1 %t39 = load %S.ast.Type, ptr %t38 call void @finch.gen.dropValue(ptr %t35, { ptr, i64, i64 } %t37, %S.ast.Type %t39) br label %endif2872 endif2872: call void @finch.drop.S_gen_Pending(ptr %a27) br label %while.cond2863 while.end2865: ret void } define internal void @finch.gen.heldEnd(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a20 = alloca %S.gen.Pending, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 br label %while.cond2873 while.cond2873: %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2876, label %ok2877 panic2876: call void @finch_panic(ptr @.str.1706, i64 1008, ptr @.str.1707) unreachable ok2877: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 11 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 %t8 = load i64, ptr %a2 %t9 = icmp sgt i64 %t7, %t8 br i1 %t9, label %while.body2874, label %while.end2875 while.body2874: %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic2878, label %ok2879 panic2878: call void @finch_panic(ptr @.str.1708, i64 1009, ptr @.str.1709) unreachable ok2879: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 11 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp eq i64 %t14, 0 br i1 %t15, label %panic2880, label %ok2881 panic2880: call void @finch_panic(ptr @.str.1710, i64 1009, ptr @.str.1711) unreachable ok2881: %t16 = sub i64 %t14, 1 %t17 = load ptr, ptr %t12 %t18 = getelementptr inbounds %S.gen.Pending, ptr %t17, i64 %t16 %t19 = load %S.gen.Pending, ptr %t18 store i64 %t16, ptr %t13 store %S.gen.Pending %t19, ptr %a20 call void @finch.drop.S_gen_Pending(ptr %a20) br label %while.cond2873 while.end2875: ret void } define internal { ptr, i64, i64 } @finch.gen.own(ptr %p0, %S.gen.Val %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.Val, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.gen.Val %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t5 = load %S.ast.Type, ptr %t4 %t6 = call i1 @finch.gen.owning(ptr %t3, %S.ast.Type %t5) %t7 = xor i1 %t6, true br label %logic.from2882 logic.from2882: br i1 %t7, label %logic.end2884, label %logic.rhs2883 logic.rhs2883: %t8 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 %t9 = load i1, ptr %t8 br label %logic.rend2885 logic.rend2885: br label %logic.end2884 logic.end2884: %t10 = phi i1 [ true, %logic.from2882 ], [ %t9, %logic.rend2885 ] br i1 %t10, label %then2886, label %endif2888 then2886: %t11 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 call void @finch_str_copy(ptr %a14, ptr %a13) %t15 = load { ptr, i64, i64 }, ptr %a14 ret { ptr, i64, i64 } %t15 endif2888: %t16 = load ptr, ptr %a1 %t17 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t18 = load { ptr, i64, i64 }, ptr %t17 %t19 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t20 = load %S.ast.Type, ptr %t19 %t21 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t16, { ptr, i64, i64 } %t18, %S.ast.Type %t20) ret { ptr, i64, i64 } %t21 } define internal void @finch.gen.printf(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = load { ptr, i64, i64 }, ptr %a2 %t6 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t4, { ptr, i64, i64 } %t5) store { ptr, i64, i64 } %t6, ptr %a7 %t8 = load ptr, ptr %a1 %t9 = call { ptr, i64, i64 } @finch.gen.tmpName(ptr %t8) store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1712, i64 0, i64 0 }, ptr %a11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = icmp sgt i64 %t13, 0 br i1 %t14, label %then2889, label %endif2891 then2889: %t15 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.1713, i64 2, i64 0 }, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a16 %t20 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t19, ptr %a11 store { ptr, i64, i64 } %t20, ptr %a21 call void @finch_str_drop(ptr %a21) br label %endif2891 endif2891: %t22 = load ptr, ptr %a1 %t23 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t23, ptr %a25 store { ptr, i64, i64 } { ptr @.str.1714, i64 35, i64 0 }, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) %t27 = load { ptr, i64, i64 }, ptr %a24 %t28 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t27, ptr %a30 store { ptr, i64, i64 } %t28, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) store { ptr, i64, i64 } %t27, ptr %a32 call void @finch_str_drop(ptr %a32) %t33 = load { ptr, i64, i64 }, ptr %a29 %t34 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t33, ptr %a36 store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) store { ptr, i64, i64 } %t33, ptr %a38 call void @finch_str_drop(ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t39, ptr %a41 store { ptr, i64, i64 } { ptr @.str.1715, i64 1, i64 0 }, ptr %a42 call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) store { ptr, i64, i64 } %t39, ptr %a43 call void @finch_str_drop(ptr %a43) %t44 = load { ptr, i64, i64 }, ptr %a40 call void @finch.gen.emit(ptr %t22, { ptr, i64, i64 } %t44) store { ptr, i64, i64 } %t44, ptr %a45 call void @finch_str_drop(ptr %a45) call void @finch_str_drop(ptr %a11) call void @finch_str_drop(ptr %a10) call void @finch_str_drop(ptr %a7) ret void } define internal { ptr, i64, i64 } @finch.gen.cstr(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1716, i64 31, i64 0 }, ptr %a6 store { ptr, i64, i64 } %t4, ptr %a7 call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) %t8 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t8, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1717, i64 3, i64 0 }, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) store { ptr, i64, i64 } %t8, ptr %a12 call void @finch_str_drop(ptr %a12) %t13 = load { ptr, i64, i64 }, ptr %a9 %t14 = call { ptr, i64, i64 } @finch.gen.op(ptr %t3, { ptr, i64, i64 } %t13) store { ptr, i64, i64 } %t13, ptr %a15 call void @finch_str_drop(ptr %a15) store { ptr, i64, i64 } %t14, ptr %a16 %t17 = load ptr, ptr %a1 %t18 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } { ptr @.str.1718, i64 12, i64 0 }, ptr %a20 store { ptr, i64, i64 } %t18, ptr %a21 call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t22, ptr %a24 store { ptr, i64, i64 } { ptr @.str.1719, i64 6, i64 0 }, ptr %a25 call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) store { ptr, i64, i64 } %t22, ptr %a26 call void @finch_str_drop(ptr %a26) %t27 = load { ptr, i64, i64 }, ptr %a23 %t28 = call { ptr, i64, i64 } @finch.gen.op(ptr %t17, { ptr, i64, i64 } %t27) store { ptr, i64, i64 } %t27, ptr %a29 call void @finch_str_drop(ptr %a29) store { ptr, i64, i64 } %t28, ptr %a30 %t31 = load ptr, ptr %a1 %t32 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t31, { ptr, i64, i64 } { ptr @.str.1720, i64 0, i64 0 }) store { ptr, i64, i64 } %t32, ptr %a33 %t34 = load ptr, ptr %a1 %t35 = load { ptr, i64, i64 }, ptr %a30 store { ptr, i64, i64 } { ptr @.str.1721, i64 10, i64 0 }, ptr %a37 store { ptr, i64, i64 } %t35, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t39, ptr %a41 store { ptr, i64, i64 } { ptr @.str.1722, i64 6, i64 0 }, ptr %a42 call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) store { ptr, i64, i64 } %t39, ptr %a43 call void @finch_str_drop(ptr %a43) %t44 = load { ptr, i64, i64 }, ptr %a40 %t45 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t44, ptr %a47 store { ptr, i64, i64 } %t45, ptr %a48 call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) store { ptr, i64, i64 } %t44, ptr %a49 call void @finch_str_drop(ptr %a49) %t50 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t50, ptr %a52 store { ptr, i64, i64 } { ptr @.str.1723, i64 6, i64 0 }, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) store { ptr, i64, i64 } %t50, ptr %a54 call void @finch_str_drop(ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a51 %t56 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t55, ptr %a58 store { ptr, i64, i64 } %t56, ptr %a59 call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) store { ptr, i64, i64 } %t55, ptr %a60 call void @finch_str_drop(ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a57 %t62 = call { ptr, i64, i64 } @finch.gen.op(ptr %t34, { ptr, i64, i64 } %t61) store { ptr, i64, i64 } %t61, ptr %a63 call void @finch_str_drop(ptr %a63) call void @finch_str_drop(ptr %a33) call void @finch_str_drop(ptr %a30) call void @finch_str_drop(ptr %a16) ret { ptr, i64, i64 } %t62 } define internal void @finch.gen.emitPrint(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, i1 %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca i1, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca %S.ast.Type, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca %S.ast.Type, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca %S.ast.Type, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store i1 %p3, ptr %a4 %t5 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 call void @finch_str_copy(ptr %a8, ptr %a7) %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load %S.ast.Type, ptr %a3 %t12 = call i1 @finch.gen.isSigned(%S.ast.Type %t11) br i1 %t12, label %then2892, label %else2893 then2892: %t13 = load ptr, ptr %a1 %t14 = load ptr, ptr %a1 %t15 = load { ptr, i64, i64 }, ptr %a2 %t16 = load %S.ast.Type, ptr %a3 %t17 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1726, i64 3, i64 0 }) %t18 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t14, { ptr, i64, i64 } %t15, %S.ast.Type %t16, %S.ast.Type %t17) store %S.ast.Type %t17, ptr %a19 call void @finch.drop.S_ast_Type(ptr %a19) store { ptr, i64, i64 } { ptr @.str.1725, i64 4, i64 0 }, ptr %a21 store { ptr, i64, i64 } %t18, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) store { ptr, i64, i64 } %t18, ptr %a23 call void @finch_str_drop(ptr %a23) %t24 = load { ptr, i64, i64 }, ptr %a20 call void @finch.gen.printf(ptr %t13, { ptr, i64, i64 } { ptr @.str.1724, i64 4, i64 0 }, { ptr, i64, i64 } %t24) store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_drop(ptr %a25) br label %endif2894 else2893: %t26 = load %S.ast.Type, ptr %a3 %t27 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t26) br i1 %t27, label %then2895, label %else2896 then2895: %t28 = load ptr, ptr %a1 %t29 = load ptr, ptr %a1 %t30 = load { ptr, i64, i64 }, ptr %a2 %t31 = load %S.ast.Type, ptr %a3 %t32 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1729, i64 3, i64 0 }) %t33 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t29, { ptr, i64, i64 } %t30, %S.ast.Type %t31, %S.ast.Type %t32) store %S.ast.Type %t32, ptr %a34 call void @finch.drop.S_ast_Type(ptr %a34) store { ptr, i64, i64 } { ptr @.str.1728, i64 4, i64 0 }, ptr %a36 store { ptr, i64, i64 } %t33, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) store { ptr, i64, i64 } %t33, ptr %a38 call void @finch_str_drop(ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a35 call void @finch.gen.printf(ptr %t28, { ptr, i64, i64 } { ptr @.str.1727, i64 4, i64 0 }, { ptr, i64, i64 } %t39) store { ptr, i64, i64 } %t39, ptr %a40 call void @finch_str_drop(ptr %a40) br label %endif2897 else2896: %t41 = load %S.ast.Type, ptr %a3 %t42 = call i1 @finch.gen.isFloat(%S.ast.Type %t41) br i1 %t42, label %then2898, label %else2899 then2898: %t43 = load ptr, ptr %a1 %t44 = load ptr, ptr %a1 %t45 = load { ptr, i64, i64 }, ptr %a2 %t46 = load %S.ast.Type, ptr %a3 %t47 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1732, i64 5, i64 0 }) %t48 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t44, { ptr, i64, i64 } %t45, %S.ast.Type %t46, %S.ast.Type %t47) store %S.ast.Type %t47, ptr %a49 call void @finch.drop.S_ast_Type(ptr %a49) store { ptr, i64, i64 } { ptr @.str.1731, i64 7, i64 0 }, ptr %a51 store { ptr, i64, i64 } %t48, ptr %a52 call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) store { ptr, i64, i64 } %t48, ptr %a53 call void @finch_str_drop(ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a50 call void @finch.gen.printf(ptr %t43, { ptr, i64, i64 } { ptr @.str.1730, i64 2, i64 0 }, { ptr, i64, i64 } %t54) store { ptr, i64, i64 } %t54, ptr %a55 call void @finch_str_drop(ptr %a55) br label %endif2900 else2899: %t56 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t56, ptr %a57 store { ptr, i64, i64 } { ptr @.str.1733, i64 4, i64 0 }, ptr %a58 %t59 = call i32 @finch_str_eq(ptr %a57, ptr %a58) %t60 = icmp ne i32 %t59, 0 br i1 %t60, label %then2901, label %else2902 then2901: %t61 = load ptr, ptr %a1 %t62 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1734, i64 8, i64 0 }, ptr %a64 store { ptr, i64, i64 } %t62, ptr %a65 call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } %t66, ptr %a68 store { ptr, i64, i64 } { ptr @.str.1735, i64 7, i64 0 }, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) store { ptr, i64, i64 } %t66, ptr %a70 call void @finch_str_drop(ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a67 %t72 = call { ptr, i64, i64 } @finch.gen.op(ptr %t61, { ptr, i64, i64 } %t71) store { ptr, i64, i64 } %t71, ptr %a73 call void @finch_str_drop(ptr %a73) store { ptr, i64, i64 } %t72, ptr %a74 %t75 = load i1, ptr %a4 br i1 %t75, label %then2904, label %else2905 then2904: %t76 = load ptr, ptr %a1 %t77 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } { ptr @.str.1737, i64 4, i64 0 }, ptr %a79 store { ptr, i64, i64 } %t77, ptr %a80 call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) %t81 = load { ptr, i64, i64 }, ptr %a78 call void @finch.gen.printf(ptr %t76, { ptr, i64, i64 } { ptr @.str.1736, i64 4, i64 0 }, { ptr, i64, i64 } %t81) store { ptr, i64, i64 } %t81, ptr %a82 call void @finch_str_drop(ptr %a82) br label %endif2906 else2905: %t83 = load ptr, ptr %a1 %t84 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } { ptr @.str.1739, i64 4, i64 0 }, ptr %a86 store { ptr, i64, i64 } %t84, ptr %a87 call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) %t88 = load { ptr, i64, i64 }, ptr %a85 call void @finch.gen.printf(ptr %t83, { ptr, i64, i64 } { ptr @.str.1738, i64 2, i64 0 }, { ptr, i64, i64 } %t88) store { ptr, i64, i64 } %t88, ptr %a89 call void @finch_str_drop(ptr %a89) br label %endif2906 endif2906: call void @finch_str_drop(ptr %a74) br label %endif2903 else2902: %t90 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t90, ptr %a91 store { ptr, i64, i64 } { ptr @.str.1740, i64 4, i64 0 }, ptr %a92 %t93 = call i32 @finch_str_eq(ptr %a91, ptr %a92) %t94 = icmp ne i32 %t93, 0 br i1 %t94, label %then2907, label %else2908 then2907: %t95 = load ptr, ptr %a1 %t96 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t95, { ptr, i64, i64 } { ptr @.str.1741, i64 4, i64 0 }) store { ptr, i64, i64 } %t96, ptr %a97 %t98 = load ptr, ptr %a1 %t99 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t98, { ptr, i64, i64 } { ptr @.str.1742, i64 5, i64 0 }) store { ptr, i64, i64 } %t99, ptr %a100 %t101 = load ptr, ptr %a1 %t102 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1743, i64 10, i64 0 }, ptr %a104 store { ptr, i64, i64 } %t102, ptr %a105 call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) %t106 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t106, ptr %a108 store { ptr, i64, i64 } { ptr @.str.1744, i64 6, i64 0 }, ptr %a109 call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) store { ptr, i64, i64 } %t106, ptr %a110 call void @finch_str_drop(ptr %a110) %t111 = load { ptr, i64, i64 }, ptr %a107 %t112 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } %t111, ptr %a114 store { ptr, i64, i64 } %t112, ptr %a115 call void @finch_str_concat(ptr %a113, ptr %a114, ptr %a115) store { ptr, i64, i64 } %t111, ptr %a116 call void @finch_str_drop(ptr %a116) %t117 = load { ptr, i64, i64 }, ptr %a113 store { ptr, i64, i64 } %t117, ptr %a119 store { ptr, i64, i64 } { ptr @.str.1745, i64 6, i64 0 }, ptr %a120 call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) store { ptr, i64, i64 } %t117, ptr %a121 call void @finch_str_drop(ptr %a121) %t122 = load { ptr, i64, i64 }, ptr %a118 %t123 = load { ptr, i64, i64 }, ptr %a100 store { ptr, i64, i64 } %t122, ptr %a125 store { ptr, i64, i64 } %t123, ptr %a126 call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) store { ptr, i64, i64 } %t122, ptr %a127 call void @finch_str_drop(ptr %a127) %t128 = load { ptr, i64, i64 }, ptr %a124 %t129 = call { ptr, i64, i64 } @finch.gen.op(ptr %t101, { ptr, i64, i64 } %t128) store { ptr, i64, i64 } %t128, ptr %a130 call void @finch_str_drop(ptr %a130) store { ptr, i64, i64 } %t129, ptr %a131 %t132 = load ptr, ptr %a1 %t133 = load { ptr, i64, i64 }, ptr %a131 store { ptr, i64, i64 } { ptr @.str.1747, i64 4, i64 0 }, ptr %a135 store { ptr, i64, i64 } %t133, ptr %a136 call void @finch_str_concat(ptr %a134, ptr %a135, ptr %a136) %t137 = load { ptr, i64, i64 }, ptr %a134 call void @finch.gen.printf(ptr %t132, { ptr, i64, i64 } { ptr @.str.1746, i64 2, i64 0 }, { ptr, i64, i64 } %t137) store { ptr, i64, i64 } %t137, ptr %a138 call void @finch_str_drop(ptr %a138) call void @finch_str_drop(ptr %a131) call void @finch_str_drop(ptr %a100) call void @finch_str_drop(ptr %a97) br label %endif2909 else2908: %t139 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t139, ptr %a140 store { ptr, i64, i64 } { ptr @.str.1748, i64 3, i64 0 }, ptr %a141 %t142 = call i32 @finch_str_eq(ptr %a140, ptr %a141) %t143 = icmp ne i32 %t142, 0 br i1 %t143, label %then2910, label %else2911 then2910: %t144 = load ptr, ptr %a1 %t145 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1749, i64 31, i64 0 }, ptr %a147 store { ptr, i64, i64 } %t145, ptr %a148 call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) %t149 = load { ptr, i64, i64 }, ptr %a146 store { ptr, i64, i64 } %t149, ptr %a151 store { ptr, i64, i64 } { ptr @.str.1750, i64 3, i64 0 }, ptr %a152 call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) store { ptr, i64, i64 } %t149, ptr %a153 call void @finch_str_drop(ptr %a153) %t154 = load { ptr, i64, i64 }, ptr %a150 %t155 = call { ptr, i64, i64 } @finch.gen.op(ptr %t144, { ptr, i64, i64 } %t154) store { ptr, i64, i64 } %t154, ptr %a156 call void @finch_str_drop(ptr %a156) store { ptr, i64, i64 } %t155, ptr %a157 %t158 = load ptr, ptr %a1 %t159 = load { ptr, i64, i64 }, ptr %a157 store { ptr, i64, i64 } { ptr @.str.1751, i64 10, i64 0 }, ptr %a161 store { ptr, i64, i64 } %t159, ptr %a162 call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) %t163 = load { ptr, i64, i64 }, ptr %a160 store { ptr, i64, i64 } %t163, ptr %a165 store { ptr, i64, i64 } { ptr @.str.1752, i64 7, i64 0 }, ptr %a166 call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) store { ptr, i64, i64 } %t163, ptr %a167 call void @finch_str_drop(ptr %a167) %t168 = load { ptr, i64, i64 }, ptr %a164 %t169 = call { ptr, i64, i64 } @finch.gen.op(ptr %t158, { ptr, i64, i64 } %t168) store { ptr, i64, i64 } %t168, ptr %a170 call void @finch_str_drop(ptr %a170) store { ptr, i64, i64 } %t169, ptr %a171 %t172 = load ptr, ptr %a1 %t173 = load { ptr, i64, i64 }, ptr %a2 %t174 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t172, { ptr, i64, i64 } %t173) store { ptr, i64, i64 } %t174, ptr %a175 %t176 = load i1, ptr %a4 br i1 %t176, label %then2913, label %else2914 then2913: %t177 = load ptr, ptr %a1 %t178 = load { ptr, i64, i64 }, ptr %a171 store { ptr, i64, i64 } { ptr @.str.1754, i64 4, i64 0 }, ptr %a180 store { ptr, i64, i64 } %t178, ptr %a181 call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) %t182 = load { ptr, i64, i64 }, ptr %a179 store { ptr, i64, i64 } %t182, ptr %a184 store { ptr, i64, i64 } { ptr @.str.1755, i64 6, i64 0 }, ptr %a185 call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) store { ptr, i64, i64 } %t182, ptr %a186 call void @finch_str_drop(ptr %a186) %t187 = load { ptr, i64, i64 }, ptr %a183 %t188 = load { ptr, i64, i64 }, ptr %a175 store { ptr, i64, i64 } %t187, ptr %a190 store { ptr, i64, i64 } %t188, ptr %a191 call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) store { ptr, i64, i64 } %t187, ptr %a192 call void @finch_str_drop(ptr %a192) %t193 = load { ptr, i64, i64 }, ptr %a189 call void @finch.gen.printf(ptr %t177, { ptr, i64, i64 } { ptr @.str.1753, i64 6, i64 0 }, { ptr, i64, i64 } %t193) store { ptr, i64, i64 } %t193, ptr %a194 call void @finch_str_drop(ptr %a194) br label %endif2915 else2914: %t195 = load ptr, ptr %a1 %t196 = load { ptr, i64, i64 }, ptr %a171 store { ptr, i64, i64 } { ptr @.str.1757, i64 4, i64 0 }, ptr %a198 store { ptr, i64, i64 } %t196, ptr %a199 call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199) %t200 = load { ptr, i64, i64 }, ptr %a197 store { ptr, i64, i64 } %t200, ptr %a202 store { ptr, i64, i64 } { ptr @.str.1758, i64 6, i64 0 }, ptr %a203 call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203) store { ptr, i64, i64 } %t200, ptr %a204 call void @finch_str_drop(ptr %a204) %t205 = load { ptr, i64, i64 }, ptr %a201 %t206 = load { ptr, i64, i64 }, ptr %a175 store { ptr, i64, i64 } %t205, ptr %a208 store { ptr, i64, i64 } %t206, ptr %a209 call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) store { ptr, i64, i64 } %t205, ptr %a210 call void @finch_str_drop(ptr %a210) %t211 = load { ptr, i64, i64 }, ptr %a207 call void @finch.gen.printf(ptr %t195, { ptr, i64, i64 } { ptr @.str.1756, i64 4, i64 0 }, { ptr, i64, i64 } %t211) store { ptr, i64, i64 } %t211, ptr %a212 call void @finch_str_drop(ptr %a212) br label %endif2915 endif2915: call void @finch_str_drop(ptr %a175) call void @finch_str_drop(ptr %a171) call void @finch_str_drop(ptr %a157) br label %endif2912 else2911: %t213 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t213, ptr %a214 store { ptr, i64, i64 } { ptr @.str.1759, i64 3, i64 0 }, ptr %a215 %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) %t217 = icmp ne i32 %t216, 0 br i1 %t217, label %then2916, label %else2917 then2916: %t218 = load ptr, ptr %a1 %t219 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1760, i64 12, i64 0 }, ptr %a221 store { ptr, i64, i64 } %t219, ptr %a222 call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) %t223 = load { ptr, i64, i64 }, ptr %a220 store { ptr, i64, i64 } %t223, ptr %a225 store { ptr, i64, i64 } { ptr @.str.1761, i64 6, i64 0 }, ptr %a226 call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) store { ptr, i64, i64 } %t223, ptr %a227 call void @finch_str_drop(ptr %a227) %t228 = load { ptr, i64, i64 }, ptr %a224 %t229 = call { ptr, i64, i64 } @finch.gen.op(ptr %t218, { ptr, i64, i64 } %t228) store { ptr, i64, i64 } %t228, ptr %a230 call void @finch_str_drop(ptr %a230) store { ptr, i64, i64 } %t229, ptr %a231 %t232 = load ptr, ptr %a1 %t233 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t232, { ptr, i64, i64 } { ptr @.str.1762, i64 8, i64 0 }) store { ptr, i64, i64 } %t233, ptr %a234 %t235 = load ptr, ptr %a1 %t236 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t235, { ptr, i64, i64 } { ptr @.str.1763, i64 8, i64 0 }) store { ptr, i64, i64 } %t236, ptr %a237 %t238 = load ptr, ptr %a1 %t239 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t238, { ptr, i64, i64 } { ptr @.str.1764, i64 8, i64 0 }) store { ptr, i64, i64 } %t239, ptr %a240 %t241 = load ptr, ptr %a1 %t242 = load { ptr, i64, i64 }, ptr %a231 %t243 = load { ptr, i64, i64 }, ptr %a234 %t244 = load { ptr, i64, i64 }, ptr %a237 call void @finch.gen.condBr(ptr %t241, { ptr, i64, i64 } %t242, { ptr, i64, i64 } %t243, { ptr, i64, i64 } %t244) %t245 = load ptr, ptr %a1 %t246 = load { ptr, i64, i64 }, ptr %a234 call void @finch.gen.label(ptr %t245, { ptr, i64, i64 } %t246) %t247 = load ptr, ptr %a1 call void @finch.gen.printf(ptr %t247, { ptr, i64, i64 } { ptr @.str.1765, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1766, i64 0, i64 0 }) %t248 = load ptr, ptr %a1 %t249 = load { ptr, i64, i64 }, ptr %a240 call void @finch.gen.br(ptr %t248, { ptr, i64, i64 } %t249) %t250 = load ptr, ptr %a1 %t251 = load { ptr, i64, i64 }, ptr %a237 call void @finch.gen.label(ptr %t250, { ptr, i64, i64 } %t251) %t252 = load ptr, ptr %a1 %t253 = load ptr, ptr %a1 %t254 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1769, i64 13, i64 0 }, ptr %a256 store { ptr, i64, i64 } %t254, ptr %a257 call void @finch_str_concat(ptr %a255, ptr %a256, ptr %a257) %t258 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t258, ptr %a260 store { ptr, i64, i64 } { ptr @.str.1770, i64 7, i64 0 }, ptr %a261 call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261) store { ptr, i64, i64 } %t258, ptr %a262 call void @finch_str_drop(ptr %a262) %t263 = load { ptr, i64, i64 }, ptr %a259 %t264 = call { ptr, i64, i64 } @finch.gen.op(ptr %t253, { ptr, i64, i64 } %t263) store { ptr, i64, i64 } %t263, ptr %a265 call void @finch_str_drop(ptr %a265) store { ptr, i64, i64 } { ptr @.str.1768, i64 4, i64 0 }, ptr %a267 store { ptr, i64, i64 } %t264, ptr %a268 call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) store { ptr, i64, i64 } %t264, ptr %a269 call void @finch_str_drop(ptr %a269) %t270 = load { ptr, i64, i64 }, ptr %a266 call void @finch.gen.printf(ptr %t252, { ptr, i64, i64 } { ptr @.str.1767, i64 6, i64 0 }, { ptr, i64, i64 } %t270) store { ptr, i64, i64 } %t270, ptr %a271 call void @finch_str_drop(ptr %a271) %t272 = load ptr, ptr %a1 %t273 = load { ptr, i64, i64 }, ptr %a240 call void @finch.gen.br(ptr %t272, { ptr, i64, i64 } %t273) %t274 = load ptr, ptr %a1 %t275 = load { ptr, i64, i64 }, ptr %a240 call void @finch.gen.label(ptr %t274, { ptr, i64, i64 } %t275) call void @finch_str_drop(ptr %a240) call void @finch_str_drop(ptr %a237) call void @finch_str_drop(ptr %a234) call void @finch_str_drop(ptr %a231) br label %endif2918 else2917: %t276 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t276, ptr %a277 store { ptr, i64, i64 } { ptr @.str.1771, i64 4, i64 0 }, ptr %a278 %t279 = call i32 @finch_str_eq(ptr %a277, ptr %a278) %t280 = icmp ne i32 %t279, 0 br i1 %t280, label %then2919, label %else2920 then2919: %t281 = load ptr, ptr %a1 call void @finch.gen.printf(ptr %t281, { ptr, i64, i64 } { ptr @.str.1772, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1773, i64 0, i64 0 }) br label %endif2921 else2920: %t282 = load ptr, ptr %a1 %t283 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t282, { ptr, i64, i64 } { ptr @.str.1774, i64 17, i64 0 }) store { ptr, i64, i64 } %t283, ptr %a284 %t285 = load ptr, ptr %a1 %t286 = load { ptr, i64, i64 }, ptr %a284 call void @finch.gen.store(ptr %t285, { ptr, i64, i64 } { ptr @.str.1775, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.1776, i64 15, i64 0 }, { ptr, i64, i64 } %t286) %t287 = load ptr, ptr %a1 %t288 = load { ptr, i64, i64 }, ptr %a284 %t289 = load { ptr, i64, i64 }, ptr %a2 %t290 = load %S.ast.Type, ptr %a3 %t291 = load i1, ptr %a4 call void @finch.gen.emitFormat(ptr %t287, { ptr, i64, i64 } %t288, { ptr, i64, i64 } %t289, %S.ast.Type %t290, i1 %t291) %t292 = load ptr, ptr %a1 %t293 = load { ptr, i64, i64 }, ptr %a284 store { ptr, i64, i64 } { ptr @.str.1777, i64 31, i64 0 }, ptr %a295 store { ptr, i64, i64 } %t293, ptr %a296 call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296) %t297 = load { ptr, i64, i64 }, ptr %a294 store { ptr, i64, i64 } %t297, ptr %a299 store { ptr, i64, i64 } { ptr @.str.1778, i64 1, i64 0 }, ptr %a300 call void @finch_str_concat(ptr %a298, ptr %a299, ptr %a300) store { ptr, i64, i64 } %t297, ptr %a301 call void @finch_str_drop(ptr %a301) %t302 = load { ptr, i64, i64 }, ptr %a298 call void @finch.gen.emit(ptr %t292, { ptr, i64, i64 } %t302) store { ptr, i64, i64 } %t302, ptr %a303 call void @finch_str_drop(ptr %a303) call void @finch_str_drop(ptr %a284) br label %endif2921 endif2921: br label %endif2918 endif2918: br label %endif2912 endif2912: br label %endif2909 endif2909: br label %endif2903 endif2903: br label %endif2900 endif2900: br label %endif2897 endif2897: br label %endif2894 endif2894: call void @finch_str_drop(ptr %a10) ret void } define internal void @finch.gen.bufText(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1779, i64 29, i64 0 }, ptr %a7 store { ptr, i64, i64 } %t5, ptr %a8 call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) %t9 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t9, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1780, i64 6, i64 0 }, ptr %a12 call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) store { ptr, i64, i64 } %t9, ptr %a13 call void @finch_str_drop(ptr %a13) %t14 = load { ptr, i64, i64 }, ptr %a10 %t15 = load ptr, ptr %a1 %t16 = load { ptr, i64, i64 }, ptr %a3 %t17 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t15, { ptr, i64, i64 } %t16) store { ptr, i64, i64 } %t14, ptr %a19 store { ptr, i64, i64 } %t17, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) store { ptr, i64, i64 } %t14, ptr %a21 call void @finch_str_drop(ptr %a21) store { ptr, i64, i64 } %t17, ptr %a22 call void @finch_str_drop(ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t23, ptr %a25 store { ptr, i64, i64 } { ptr @.str.1781, i64 6, i64 0 }, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) store { ptr, i64, i64 } %t23, ptr %a27 call void @finch_str_drop(ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a24 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t30 = load i64, ptr %t29 call void @finch_str_from_int(ptr %a31, i64 %t30) %t32 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t28, ptr %a34 store { ptr, i64, i64 } %t32, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) store { ptr, i64, i64 } %t28, ptr %a36 call void @finch_str_drop(ptr %a36) store { ptr, i64, i64 } %t32, ptr %a37 call void @finch_str_drop(ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t38, ptr %a40 store { ptr, i64, i64 } { ptr @.str.1782, i64 1, i64 0 }, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) store { ptr, i64, i64 } %t38, ptr %a42 call void @finch_str_drop(ptr %a42) %t43 = load { ptr, i64, i64 }, ptr %a39 call void @finch.gen.emit(ptr %t4, { ptr, i64, i64 } %t43) store { ptr, i64, i64 } %t43, ptr %a44 call void @finch_str_drop(ptr %a44) ret void } define internal void @finch.gen.emitFormat(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, i1 %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a5 = alloca i1, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca %S.ast.Type, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca %S.ast.Type, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca %S.ast.Type, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca %S.ast.Type, align 16 %a213 = alloca %S.ast.Type, align 16 %a217 = alloca %S.gen.Val, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca %S.ast.Type, align 16 %a308 = alloca %S.ast.Type, align 16 %a312 = alloca %S.gen.Val, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 store i1 %p4, ptr %a5 %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t7 = load { ptr, i64, i64 }, ptr %t6 store { ptr, i64, i64 } %t7, ptr %a8 call void @finch_str_copy(ptr %a9, ptr %a8) %t10 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1783, i64 1, i64 0 }, ptr %a12 %t13 = load i1, ptr %a5 br i1 %t13, label %then2922, label %endif2924 then2922: %t14 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } { ptr @.str.1784, i64 1, i64 0 }, ptr %a12 store { ptr, i64, i64 } %t14, ptr %a15 call void @finch_str_drop(ptr %a15) br label %endif2924 endif2924: %t16 = load %S.ast.Type, ptr %a4 %t17 = call i1 @finch.gen.isSigned(%S.ast.Type %t16) br i1 %t17, label %then2925, label %else2926 then2925: %t18 = load ptr, ptr %a1 %t19 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1785, i64 29, i64 0 }, ptr %a21 store { ptr, i64, i64 } %t19, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a20 store { ptr, i64, i64 } %t23, ptr %a25 store { ptr, i64, i64 } { ptr @.str.1786, i64 6, i64 0 }, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) store { ptr, i64, i64 } %t23, ptr %a27 call void @finch_str_drop(ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a24 %t29 = load ptr, ptr %a1 %t30 = load { ptr, i64, i64 }, ptr %a3 %t31 = load %S.ast.Type, ptr %a4 %t32 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1787, i64 3, i64 0 }) %t33 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t29, { ptr, i64, i64 } %t30, %S.ast.Type %t31, %S.ast.Type %t32) store %S.ast.Type %t32, ptr %a34 call void @finch.drop.S_ast_Type(ptr %a34) store { ptr, i64, i64 } %t28, ptr %a36 store { ptr, i64, i64 } %t33, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) store { ptr, i64, i64 } %t28, ptr %a38 call void @finch_str_drop(ptr %a38) store { ptr, i64, i64 } %t33, ptr %a39 call void @finch_str_drop(ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t40, ptr %a42 store { ptr, i64, i64 } { ptr @.str.1788, i64 1, i64 0 }, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) store { ptr, i64, i64 } %t40, ptr %a44 call void @finch_str_drop(ptr %a44) %t45 = load { ptr, i64, i64 }, ptr %a41 call void @finch.gen.emit(ptr %t18, { ptr, i64, i64 } %t45) store { ptr, i64, i64 } %t45, ptr %a46 call void @finch_str_drop(ptr %a46) br label %endif2927 else2926: %t47 = load %S.ast.Type, ptr %a4 %t48 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t47) br i1 %t48, label %then2928, label %else2929 then2928: %t49 = load ptr, ptr %a1 %t50 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1789, i64 30, i64 0 }, ptr %a52 store { ptr, i64, i64 } %t50, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a51 store { ptr, i64, i64 } %t54, ptr %a56 store { ptr, i64, i64 } { ptr @.str.1790, i64 6, i64 0 }, ptr %a57 call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) store { ptr, i64, i64 } %t54, ptr %a58 call void @finch_str_drop(ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a55 %t60 = load ptr, ptr %a1 %t61 = load { ptr, i64, i64 }, ptr %a3 %t62 = load %S.ast.Type, ptr %a4 %t63 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1791, i64 3, i64 0 }) %t64 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t60, { ptr, i64, i64 } %t61, %S.ast.Type %t62, %S.ast.Type %t63) store %S.ast.Type %t63, ptr %a65 call void @finch.drop.S_ast_Type(ptr %a65) store { ptr, i64, i64 } %t59, ptr %a67 store { ptr, i64, i64 } %t64, ptr %a68 call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) store { ptr, i64, i64 } %t59, ptr %a69 call void @finch_str_drop(ptr %a69) store { ptr, i64, i64 } %t64, ptr %a70 call void @finch_str_drop(ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a66 store { ptr, i64, i64 } %t71, ptr %a73 store { ptr, i64, i64 } { ptr @.str.1792, i64 1, i64 0 }, ptr %a74 call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) store { ptr, i64, i64 } %t71, ptr %a75 call void @finch_str_drop(ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a72 call void @finch.gen.emit(ptr %t49, { ptr, i64, i64 } %t76) store { ptr, i64, i64 } %t76, ptr %a77 call void @finch_str_drop(ptr %a77) br label %endif2930 else2929: %t78 = load %S.ast.Type, ptr %a4 %t79 = call i1 @finch.gen.isFloat(%S.ast.Type %t78) br i1 %t79, label %then2931, label %else2932 then2931: %t80 = load ptr, ptr %a1 %t81 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1793, i64 31, i64 0 }, ptr %a83 store { ptr, i64, i64 } %t81, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a82 store { ptr, i64, i64 } %t85, ptr %a87 store { ptr, i64, i64 } { ptr @.str.1794, i64 9, i64 0 }, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) store { ptr, i64, i64 } %t85, ptr %a89 call void @finch_str_drop(ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a86 %t91 = load ptr, ptr %a1 %t92 = load { ptr, i64, i64 }, ptr %a3 %t93 = load %S.ast.Type, ptr %a4 %t94 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1795, i64 5, i64 0 }) %t95 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t91, { ptr, i64, i64 } %t92, %S.ast.Type %t93, %S.ast.Type %t94) store %S.ast.Type %t94, ptr %a96 call void @finch.drop.S_ast_Type(ptr %a96) store { ptr, i64, i64 } %t90, ptr %a98 store { ptr, i64, i64 } %t95, ptr %a99 call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) store { ptr, i64, i64 } %t90, ptr %a100 call void @finch_str_drop(ptr %a100) store { ptr, i64, i64 } %t95, ptr %a101 call void @finch_str_drop(ptr %a101) %t102 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } %t102, ptr %a104 store { ptr, i64, i64 } { ptr @.str.1796, i64 1, i64 0 }, ptr %a105 call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) store { ptr, i64, i64 } %t102, ptr %a106 call void @finch_str_drop(ptr %a106) %t107 = load { ptr, i64, i64 }, ptr %a103 call void @finch.gen.emit(ptr %t80, { ptr, i64, i64 } %t107) store { ptr, i64, i64 } %t107, ptr %a108 call void @finch_str_drop(ptr %a108) br label %endif2933 else2932: %t109 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t109, ptr %a110 store { ptr, i64, i64 } { ptr @.str.1797, i64 4, i64 0 }, ptr %a111 %t112 = call i32 @finch_str_eq(ptr %a110, ptr %a111) %t113 = icmp ne i32 %t112, 0 br i1 %t113, label %then2934, label %else2935 then2934: %t114 = load ptr, ptr %a1 %t115 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1798, i64 30, i64 0 }, ptr %a117 store { ptr, i64, i64 } %t115, ptr %a118 call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a116 store { ptr, i64, i64 } %t119, ptr %a121 store { ptr, i64, i64 } { ptr @.str.1799, i64 5, i64 0 }, ptr %a122 call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) store { ptr, i64, i64 } %t119, ptr %a123 call void @finch_str_drop(ptr %a123) %t124 = load { ptr, i64, i64 }, ptr %a120 %t125 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t124, ptr %a127 store { ptr, i64, i64 } %t125, ptr %a128 call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) store { ptr, i64, i64 } %t124, ptr %a129 call void @finch_str_drop(ptr %a129) %t130 = load { ptr, i64, i64 }, ptr %a126 store { ptr, i64, i64 } %t130, ptr %a132 store { ptr, i64, i64 } { ptr @.str.1800, i64 6, i64 0 }, ptr %a133 call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) store { ptr, i64, i64 } %t130, ptr %a134 call void @finch_str_drop(ptr %a134) %t135 = load { ptr, i64, i64 }, ptr %a131 %t136 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t135, ptr %a138 store { ptr, i64, i64 } %t136, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) store { ptr, i64, i64 } %t135, ptr %a140 call void @finch_str_drop(ptr %a140) %t141 = load { ptr, i64, i64 }, ptr %a137 store { ptr, i64, i64 } %t141, ptr %a143 store { ptr, i64, i64 } { ptr @.str.1801, i64 1, i64 0 }, ptr %a144 call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) store { ptr, i64, i64 } %t141, ptr %a145 call void @finch_str_drop(ptr %a145) %t146 = load { ptr, i64, i64 }, ptr %a142 call void @finch.gen.emit(ptr %t114, { ptr, i64, i64 } %t146) store { ptr, i64, i64 } %t146, ptr %a147 call void @finch_str_drop(ptr %a147) br label %endif2936 else2935: %t148 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t148, ptr %a149 store { ptr, i64, i64 } { ptr @.str.1802, i64 4, i64 0 }, ptr %a150 %t151 = call i32 @finch_str_eq(ptr %a149, ptr %a150) %t152 = icmp ne i32 %t151, 0 br i1 %t152, label %then2937, label %else2938 then2937: %t153 = load ptr, ptr %a1 %t154 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1803, i64 30, i64 0 }, ptr %a156 store { ptr, i64, i64 } %t154, ptr %a157 call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) %t158 = load { ptr, i64, i64 }, ptr %a155 store { ptr, i64, i64 } %t158, ptr %a160 store { ptr, i64, i64 } { ptr @.str.1804, i64 6, i64 0 }, ptr %a161 call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) store { ptr, i64, i64 } %t158, ptr %a162 call void @finch_str_drop(ptr %a162) %t163 = load { ptr, i64, i64 }, ptr %a159 %t164 = load ptr, ptr %a1 %t165 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.1805, i64 8, i64 0 }, ptr %a167 store { ptr, i64, i64 } %t165, ptr %a168 call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) %t169 = load { ptr, i64, i64 }, ptr %a166 store { ptr, i64, i64 } %t169, ptr %a171 store { ptr, i64, i64 } { ptr @.str.1806, i64 7, i64 0 }, ptr %a172 call void @finch_str_concat(ptr %a170, ptr %a171, ptr %a172) store { ptr, i64, i64 } %t169, ptr %a173 call void @finch_str_drop(ptr %a173) %t174 = load { ptr, i64, i64 }, ptr %a170 %t175 = call { ptr, i64, i64 } @finch.gen.op(ptr %t164, { ptr, i64, i64 } %t174) store { ptr, i64, i64 } %t174, ptr %a176 call void @finch_str_drop(ptr %a176) store { ptr, i64, i64 } %t163, ptr %a178 store { ptr, i64, i64 } %t175, ptr %a179 call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) store { ptr, i64, i64 } %t163, ptr %a180 call void @finch_str_drop(ptr %a180) store { ptr, i64, i64 } %t175, ptr %a181 call void @finch_str_drop(ptr %a181) %t182 = load { ptr, i64, i64 }, ptr %a177 store { ptr, i64, i64 } %t182, ptr %a184 store { ptr, i64, i64 } { ptr @.str.1807, i64 1, i64 0 }, ptr %a185 call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) store { ptr, i64, i64 } %t182, ptr %a186 call void @finch_str_drop(ptr %a186) %t187 = load { ptr, i64, i64 }, ptr %a183 call void @finch.gen.emit(ptr %t153, { ptr, i64, i64 } %t187) store { ptr, i64, i64 } %t187, ptr %a188 call void @finch_str_drop(ptr %a188) br label %endif2939 else2938: %t189 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t189, ptr %a190 store { ptr, i64, i64 } { ptr @.str.1808, i64 3, i64 0 }, ptr %a191 %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) %t193 = icmp ne i32 %t192, 0 br i1 %t193, label %then2940, label %else2941 then2940: %t194 = load ptr, ptr %a1 %t195 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1809, i64 29, i64 0 }, ptr %a197 store { ptr, i64, i64 } %t195, ptr %a198 call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198) %t199 = load { ptr, i64, i64 }, ptr %a196 store { ptr, i64, i64 } %t199, ptr %a201 store { ptr, i64, i64 } { ptr @.str.1810, i64 6, i64 0 }, ptr %a202 call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) store { ptr, i64, i64 } %t199, ptr %a203 call void @finch_str_drop(ptr %a203) %t204 = load { ptr, i64, i64 }, ptr %a200 %t205 = load ptr, ptr %a1 %t206 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t206, ptr %a207 call void @finch_str_copy(ptr %a208, ptr %a207) %t209 = load { ptr, i64, i64 }, ptr %a208 %t210 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t209, 0 %t211 = load %S.ast.Type, ptr %a4 store %S.ast.Type %t211, ptr %a212 call void @finch.copy.S_ast_Type(ptr %a213, ptr %a212) %t214 = load %S.ast.Type, ptr %a213 %t215 = insertvalue %S.gen.Val %t210, %S.ast.Type %t214, 1 %t216 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t205, %S.gen.Val %t215) store %S.gen.Val %t215, ptr %a217 call void @finch.drop.S_gen_Val(ptr %a217) store { ptr, i64, i64 } %t204, ptr %a219 store { ptr, i64, i64 } %t216, ptr %a220 call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) store { ptr, i64, i64 } %t204, ptr %a221 call void @finch_str_drop(ptr %a221) store { ptr, i64, i64 } %t216, ptr %a222 call void @finch_str_drop(ptr %a222) %t223 = load { ptr, i64, i64 }, ptr %a218 store { ptr, i64, i64 } %t223, ptr %a225 store { ptr, i64, i64 } { ptr @.str.1811, i64 6, i64 0 }, ptr %a226 call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) store { ptr, i64, i64 } %t223, ptr %a227 call void @finch_str_drop(ptr %a227) %t228 = load { ptr, i64, i64 }, ptr %a224 %t229 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t228, ptr %a231 store { ptr, i64, i64 } %t229, ptr %a232 call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) store { ptr, i64, i64 } %t228, ptr %a233 call void @finch_str_drop(ptr %a233) %t234 = load { ptr, i64, i64 }, ptr %a230 store { ptr, i64, i64 } %t234, ptr %a236 store { ptr, i64, i64 } { ptr @.str.1812, i64 1, i64 0 }, ptr %a237 call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) store { ptr, i64, i64 } %t234, ptr %a238 call void @finch_str_drop(ptr %a238) %t239 = load { ptr, i64, i64 }, ptr %a235 call void @finch.gen.emit(ptr %t194, { ptr, i64, i64 } %t239) store { ptr, i64, i64 } %t239, ptr %a240 call void @finch_str_drop(ptr %a240) br label %endif2942 else2941: %t241 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t241, ptr %a242 store { ptr, i64, i64 } { ptr @.str.1813, i64 3, i64 0 }, ptr %a243 %t244 = call i32 @finch_str_eq(ptr %a242, ptr %a243) %t245 = icmp ne i32 %t244, 0 br label %logic.from2943 logic.from2943: br i1 %t245, label %logic.end2945, label %logic.rhs2944 logic.rhs2944: %t246 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t246, ptr %a247 store { ptr, i64, i64 } { ptr @.str.1814, i64 4, i64 0 }, ptr %a248 %t249 = call i32 @finch_str_eq(ptr %a247, ptr %a248) %t250 = icmp ne i32 %t249, 0 br label %logic.rend2946 logic.rend2946: br label %logic.end2945 logic.end2945: %t251 = phi i1 [ true, %logic.from2943 ], [ %t250, %logic.rend2946 ] br i1 %t251, label %then2947, label %else2948 then2947: %t252 = load ptr, ptr %a1 %t253 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1815, i64 29, i64 0 }, ptr %a255 store { ptr, i64, i64 } %t253, ptr %a256 call void @finch_str_concat(ptr %a254, ptr %a255, ptr %a256) %t257 = load { ptr, i64, i64 }, ptr %a254 store { ptr, i64, i64 } %t257, ptr %a259 store { ptr, i64, i64 } { ptr @.str.1816, i64 6, i64 0 }, ptr %a260 call void @finch_str_concat(ptr %a258, ptr %a259, ptr %a260) store { ptr, i64, i64 } %t257, ptr %a261 call void @finch_str_drop(ptr %a261) %t262 = load { ptr, i64, i64 }, ptr %a258 %t263 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t262, ptr %a265 store { ptr, i64, i64 } %t263, ptr %a266 call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266) store { ptr, i64, i64 } %t262, ptr %a267 call void @finch_str_drop(ptr %a267) %t268 = load { ptr, i64, i64 }, ptr %a264 store { ptr, i64, i64 } %t268, ptr %a270 store { ptr, i64, i64 } { ptr @.str.1817, i64 1, i64 0 }, ptr %a271 call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) store { ptr, i64, i64 } %t268, ptr %a272 call void @finch_str_drop(ptr %a272) %t273 = load { ptr, i64, i64 }, ptr %a269 call void @finch.gen.emit(ptr %t252, { ptr, i64, i64 } %t273) store { ptr, i64, i64 } %t273, ptr %a274 call void @finch_str_drop(ptr %a274) br label %endif2949 else2948: %t275 = load ptr, ptr %a1 %t276 = load ptr, ptr %a1 %t277 = load %S.ast.Type, ptr %a4 %t278 = call { ptr, i64, i64 } @finch.gen.formatFn(ptr %t276, %S.ast.Type %t277) store { ptr, i64, i64 } { ptr @.str.1818, i64 10, i64 0 }, ptr %a280 store { ptr, i64, i64 } %t278, ptr %a281 call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) store { ptr, i64, i64 } %t278, ptr %a282 call void @finch_str_drop(ptr %a282) %t283 = load { ptr, i64, i64 }, ptr %a279 store { ptr, i64, i64 } %t283, ptr %a285 store { ptr, i64, i64 } { ptr @.str.1819, i64 5, i64 0 }, ptr %a286 call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) store { ptr, i64, i64 } %t283, ptr %a287 call void @finch_str_drop(ptr %a287) %t288 = load { ptr, i64, i64 }, ptr %a284 %t289 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t288, ptr %a291 store { ptr, i64, i64 } %t289, ptr %a292 call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) store { ptr, i64, i64 } %t288, ptr %a293 call void @finch_str_drop(ptr %a293) %t294 = load { ptr, i64, i64 }, ptr %a290 store { ptr, i64, i64 } %t294, ptr %a296 store { ptr, i64, i64 } { ptr @.str.1820, i64 6, i64 0 }, ptr %a297 call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297) store { ptr, i64, i64 } %t294, ptr %a298 call void @finch_str_drop(ptr %a298) %t299 = load { ptr, i64, i64 }, ptr %a295 %t300 = load ptr, ptr %a1 %t301 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t301, ptr %a302 call void @finch_str_copy(ptr %a303, ptr %a302) %t304 = load { ptr, i64, i64 }, ptr %a303 %t305 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t304, 0 %t306 = load %S.ast.Type, ptr %a4 store %S.ast.Type %t306, ptr %a307 call void @finch.copy.S_ast_Type(ptr %a308, ptr %a307) %t309 = load %S.ast.Type, ptr %a308 %t310 = insertvalue %S.gen.Val %t305, %S.ast.Type %t309, 1 %t311 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t300, %S.gen.Val %t310) store %S.gen.Val %t310, ptr %a312 call void @finch.drop.S_gen_Val(ptr %a312) store { ptr, i64, i64 } %t299, ptr %a314 store { ptr, i64, i64 } %t311, ptr %a315 call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) store { ptr, i64, i64 } %t299, ptr %a316 call void @finch_str_drop(ptr %a316) store { ptr, i64, i64 } %t311, ptr %a317 call void @finch_str_drop(ptr %a317) %t318 = load { ptr, i64, i64 }, ptr %a313 store { ptr, i64, i64 } %t318, ptr %a320 store { ptr, i64, i64 } { ptr @.str.1821, i64 1, i64 0 }, ptr %a321 call void @finch_str_concat(ptr %a319, ptr %a320, ptr %a321) store { ptr, i64, i64 } %t318, ptr %a322 call void @finch_str_drop(ptr %a322) %t323 = load { ptr, i64, i64 }, ptr %a319 call void @finch.gen.emit(ptr %t275, { ptr, i64, i64 } %t323) store { ptr, i64, i64 } %t323, ptr %a324 call void @finch_str_drop(ptr %a324) br label %endif2949 endif2949: br label %endif2942 endif2942: br label %endif2939 endif2939: br label %endif2936 endif2936: br label %endif2933 endif2933: br label %endif2930 endif2930: br label %endif2927 endif2927: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a11) ret void } define internal void @finch.copy.S_gen_EnumDef(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.EnumDef, ptr %src store %S.gen.EnumDef %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 2 call void @finch.copy.arr_str(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 3 call void @finch.copy.arr_int(ptr %t8, ptr %t9) ret void } define internal void @finch.drop.S_gen_EnumDef(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.EnumDef, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.gen.EnumDef, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.gen.EnumDef, ptr %a, i32 0, i32 2 call void @finch.drop.arr_str(ptr %t3) %t4 = getelementptr inbounds %S.gen.EnumDef, ptr %a, i32 0, i32 3 call void @finch.drop.arr_int(ptr %t4) ret void } define internal void @finch.copy.S_gen_SumDef(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.SumDef, ptr %src store %S.gen.SumDef %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 2 call void @finch.copy.arr_str(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 3 call void @finch.copy.arr_int(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 4 %t11 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 4 call void @finch.copy.arr_int(ptr %t10, ptr %t11) %t12 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 5 %t13 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 5 call void @finch.copy.arr_S_ast_Node(ptr %t12, ptr %t13) ret void } define internal void @finch.drop.S_gen_SumDef(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 2 call void @finch.drop.arr_str(ptr %t3) %t4 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 3 call void @finch.drop.arr_int(ptr %t4) %t5 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 4 call void @finch.drop.arr_int(ptr %t5) %t6 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 5 call void @finch.drop.arr_S_ast_Node(ptr %t6) ret void } define internal { ptr, i64, i64 } @finch.gen.formatFn(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca %S.gen.Saved, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca %S.ast.Type, align 16 %a47 = alloca %S.ast.Type, align 16 %a49 = alloca %S.ast.Type, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca %S.gen.EnumDef, align 16 %a174 = alloca %S.gen.EnumDef, align 16 %a176 = alloca %S.gen.EnumDef, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca i64, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca i64, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a373 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a399 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a410 = alloca { ptr, i64, i64 }, align 16 %a411 = alloca { ptr, i64, i64 }, align 16 %a412 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a415 = alloca { ptr, i64, i64 }, align 16 %a416 = alloca { ptr, i64, i64 }, align 16 %a417 = alloca { ptr, i64, i64 }, align 16 %a420 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a438 = alloca { ptr, i64, i64 }, align 16 %a464 = alloca { ptr, i64, i64 }, align 16 %a465 = alloca { ptr, i64, i64 }, align 16 %a473 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca { ptr, i64, i64 }, align 16 %a492 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca { ptr, i64, i64 }, align 16 %a511 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca %S.gen.SumDef, align 16 %a538 = alloca %S.gen.SumDef, align 16 %a540 = alloca %S.gen.SumDef, align 16 %a556 = alloca %S.gen.StructDef, align 16 %a557 = alloca %S.gen.StructDef, align 16 %a559 = alloca %S.gen.StructDef, align 16 %a563 = alloca { ptr, i64, i64 }, align 16 %a567 = alloca { ptr, i64, i64 }, align 16 %a568 = alloca { ptr, i64, i64 }, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a571 = alloca { ptr, i64, i64 }, align 16 %a572 = alloca { ptr, i64, i64 }, align 16 %a573 = alloca { ptr, i64, i64 }, align 16 %a574 = alloca { ptr, i64, i64 }, align 16 %a583 = alloca { ptr, i64, i64 }, align 16 %a585 = alloca { ptr, i64, i64 }, align 16 %a586 = alloca { ptr, i64, i64 }, align 16 %a587 = alloca { ptr, i64, i64 }, align 16 %a588 = alloca { ptr, i64, i64 }, align 16 %a589 = alloca { ptr, i64, i64 }, align 16 %a592 = alloca { ptr, i64, i64 }, align 16 %a594 = alloca { ptr, i64, i64 }, align 16 %a595 = alloca { ptr, i64, i64 }, align 16 %a598 = alloca { ptr, i64, i64 }, align 16 %a601 = alloca { ptr, i64, i64 }, align 16 %a602 = alloca { ptr, i64, i64 }, align 16 %a603 = alloca { ptr, i64, i64 }, align 16 %a607 = alloca i64, align 16 %a619 = alloca { ptr, i64, i64 }, align 16 %a621 = alloca { ptr, i64, i64 }, align 16 %a622 = alloca { ptr, i64, i64 }, align 16 %a623 = alloca { ptr, i64, i64 }, align 16 %a624 = alloca { ptr, i64, i64 }, align 16 %a626 = alloca { ptr, i64, i64 }, align 16 %a627 = alloca { ptr, i64, i64 }, align 16 %a628 = alloca { ptr, i64, i64 }, align 16 %a629 = alloca { ptr, i64, i64 }, align 16 %a638 = alloca { ptr, i64, i64 }, align 16 %a639 = alloca { ptr, i64, i64 }, align 16 %a640 = alloca { ptr, i64, i64 }, align 16 %a641 = alloca { ptr, i64, i64 }, align 16 %a651 = alloca { ptr, i64, i64 }, align 16 %a652 = alloca { ptr, i64, i64 }, align 16 %a653 = alloca { ptr, i64, i64 }, align 16 %a655 = alloca { ptr, i64, i64 }, align 16 %a656 = alloca { ptr, i64, i64 }, align 16 %a657 = alloca { ptr, i64, i64 }, align 16 %a658 = alloca { ptr, i64, i64 }, align 16 %a661 = alloca { ptr, i64, i64 }, align 16 %a662 = alloca { ptr, i64, i64 }, align 16 %a663 = alloca { ptr, i64, i64 }, align 16 %a664 = alloca { ptr, i64, i64 }, align 16 %a666 = alloca { ptr, i64, i64 }, align 16 %a667 = alloca { ptr, i64, i64 }, align 16 %a668 = alloca { ptr, i64, i64 }, align 16 %a669 = alloca { ptr, i64, i64 }, align 16 %a672 = alloca { ptr, i64, i64 }, align 16 %a673 = alloca { ptr, i64, i64 }, align 16 %a675 = alloca { ptr, i64, i64 }, align 16 %a676 = alloca { ptr, i64, i64 }, align 16 %a677 = alloca { ptr, i64, i64 }, align 16 %a678 = alloca { ptr, i64, i64 }, align 16 %a679 = alloca { ptr, i64, i64 }, align 16 %a681 = alloca { ptr, i64, i64 }, align 16 %a682 = alloca { ptr, i64, i64 }, align 16 %a683 = alloca { ptr, i64, i64 }, align 16 %a684 = alloca { ptr, i64, i64 }, align 16 %a686 = alloca { ptr, i64, i64 }, align 16 %a693 = alloca i64, align 16 %a731 = alloca i64, align 16 %a747 = alloca i64, align 16 %a750 = alloca { ptr, i64, i64 }, align 16 %a751 = alloca { ptr, i64, i64 }, align 16 %a752 = alloca { ptr, i64, i64 }, align 16 %a754 = alloca { ptr, i64, i64 }, align 16 %a755 = alloca { ptr, i64, i64 }, align 16 %a756 = alloca { ptr, i64, i64 }, align 16 %a757 = alloca { ptr, i64, i64 }, align 16 %a767 = alloca { ptr, i64, i64 }, align 16 %a769 = alloca { ptr, i64, i64 }, align 16 %a770 = alloca { ptr, i64, i64 }, align 16 %a771 = alloca { ptr, i64, i64 }, align 16 %a772 = alloca { ptr, i64, i64 }, align 16 %a773 = alloca { ptr, i64, i64 }, align 16 %a776 = alloca { ptr, i64, i64 }, align 16 %a777 = alloca { ptr, i64, i64 }, align 16 %a792 = alloca { ptr, i64, i64 }, align 16 %a801 = alloca { ptr, i64, i64 }, align 16 %a814 = alloca { ptr, i64, i64 }, align 16 %a815 = alloca { ptr, i64, i64 }, align 16 %a816 = alloca { ptr, i64, i64 }, align 16 %a818 = alloca { ptr, i64, i64 }, align 16 %a838 = alloca %S.gen.StructDef, align 16 %a839 = alloca %S.gen.StructDef, align 16 %a841 = alloca %S.gen.StructDef, align 16 %a845 = alloca { ptr, i64, i64 }, align 16 %a849 = alloca { ptr, i64, i64 }, align 16 %a850 = alloca { ptr, i64, i64 }, align 16 %a851 = alloca { ptr, i64, i64 }, align 16 %a853 = alloca { ptr, i64, i64 }, align 16 %a857 = alloca i64, align 16 %a860 = alloca { ptr, i64, i64 }, align 16 %a864 = alloca { ptr, i64, i64 }, align 16 %a875 = alloca { ptr, i64, i64 }, align 16 %a876 = alloca { ptr, i64, i64 }, align 16 %a877 = alloca { ptr, i64, i64 }, align 16 %a879 = alloca { ptr, i64, i64 }, align 16 %a880 = alloca { ptr, i64, i64 }, align 16 %a881 = alloca { ptr, i64, i64 }, align 16 %a882 = alloca { ptr, i64, i64 }, align 16 %a884 = alloca { ptr, i64, i64 }, align 16 %a887 = alloca { ptr, i64, i64 }, align 16 %a888 = alloca { ptr, i64, i64 }, align 16 %a889 = alloca { ptr, i64, i64 }, align 16 %a891 = alloca { ptr, i64, i64 }, align 16 %a892 = alloca { ptr, i64, i64 }, align 16 %a893 = alloca { ptr, i64, i64 }, align 16 %a894 = alloca { ptr, i64, i64 }, align 16 %a904 = alloca { ptr, i64, i64 }, align 16 %a906 = alloca { ptr, i64, i64 }, align 16 %a907 = alloca { ptr, i64, i64 }, align 16 %a908 = alloca { ptr, i64, i64 }, align 16 %a909 = alloca { ptr, i64, i64 }, align 16 %a910 = alloca { ptr, i64, i64 }, align 16 %a913 = alloca { ptr, i64, i64 }, align 16 %a914 = alloca { ptr, i64, i64 }, align 16 %a929 = alloca { ptr, i64, i64 }, align 16 %a938 = alloca { ptr, i64, i64 }, align 16 %a946 = alloca { ptr, i64, i64 }, align 16 %a947 = alloca { ptr, i64, i64 }, align 16 %a948 = alloca { ptr, i64, i64 }, align 16 %a950 = alloca { ptr, i64, i64 }, align 16 %a951 = alloca { ptr, i64, i64 }, align 16 %a952 = alloca { ptr, i64, i64 }, align 16 %a953 = alloca { ptr, i64, i64 }, align 16 %a955 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = load %S.ast.Type, ptr %a2 %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) store { ptr, i64, i64 } { ptr @.str.1822, i64 14, i64 0 }, ptr %a6 store { ptr, i64, i64 } %t4, ptr %a7 call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) store { ptr, i64, i64 } %t4, ptr %a8 call void @finch_str_drop(ptr %a8) %t9 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null br i1 %t12, label %panic2950, label %ok2951 panic2950: call void @finch_panic(ptr @.str.1823, i64 1126, ptr @.str.1824) unreachable ok2951: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 %t14 = load { ptr, i64, i64 }, ptr %t13 %t15 = load { ptr, i64, i64 }, ptr %a10 %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) br i1 %t16, label %then2952, label %endif2954 then2952: %t17 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t17 endif2954: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic2955, label %ok2956 panic2955: call void @finch_panic(ptr @.str.1825, i64 1129, ptr @.str.1826) unreachable ok2956: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t22, ptr %a23 call void @finch_str_copy(ptr %a24, ptr %a23) %t25 = load { ptr, i64, i64 }, ptr %a24 %t26 = load i64, ptr %t21 %t27 = add i64 %t26, 1 call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t28 = load ptr, ptr %t20 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 store { ptr, i64, i64 } %t25, ptr %t29 store i64 %t27, ptr %t21 %t30 = load ptr, ptr %a1 %t31 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t30) store %S.gen.Saved %t31, ptr %a32 %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t34 = load { ptr, i64, i64 }, ptr %t33 store { ptr, i64, i64 } %t34, ptr %a35 store { ptr, i64, i64 } { ptr @.str.1827, i64 5, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 br i1 %t38, label %then2957, label %else2958 then2957: %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = extractvalue { ptr, i64, i64 } %t40, 1 %t42 = icmp uge i64 0, %t41 br i1 %t42, label %range2960, label %inrange2961 range2960: call void @finch_panic_index(ptr @.str.1828, i64 1132, i64 0, i64 %t41) unreachable inrange2961: %t43 = extractvalue { ptr, i64, i64 } %t40, 0 %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 %t45 = load %S.ast.Type, ptr %t44 store %S.ast.Type %t45, ptr %a46 call void @finch.copy.S_ast_Type(ptr %a47, ptr %a46) %t48 = load %S.ast.Type, ptr %a47 store %S.ast.Type %t48, ptr %a49 %t50 = load ptr, ptr %a1 %t51 = call { ptr, i64, i64 } @finch.gen.load(ptr %t50, { ptr, i64, i64 } { ptr @.str.1829, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1830, i64 2, i64 0 }) store { ptr, i64, i64 } %t51, ptr %a52 %t53 = load ptr, ptr %a1 %t54 = load ptr, ptr %a1 %t55 = call { ptr, i64, i64 } @finch.gen.op(ptr %t54, { ptr, i64, i64 } { ptr @.str.1832, i64 62, i64 0 }) %t56 = call { ptr, i64, i64 } @finch.gen.load(ptr %t53, { ptr, i64, i64 } { ptr @.str.1831, i64 3, i64 0 }, { ptr, i64, i64 } %t55) store { ptr, i64, i64 } %t55, ptr %a57 call void @finch_str_drop(ptr %a57) store { ptr, i64, i64 } %t56, ptr %a58 %t59 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t59, { ptr, i64, i64 } { ptr @.str.1833, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1834, i64 1, i64 0 }) %t60 = load ptr, ptr %a1 %t61 = load { ptr, i64, i64 }, ptr %a58 %t62 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t60, { ptr, i64, i64 } %t61) store { ptr, i64, i64 } %t62, ptr %a63 %t64 = load ptr, ptr %a1 %t65 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t64, { ptr, i64, i64 } { ptr @.str.1835, i64 3, i64 0 }) store { ptr, i64, i64 } %t65, ptr %a66 %t67 = load ptr, ptr %a1 %t68 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t67, { ptr, i64, i64 } { ptr @.str.1836, i64 4, i64 0 }) store { ptr, i64, i64 } %t68, ptr %a69 %t70 = load ptr, ptr %a1 %t71 = load { ptr, i64, i64 }, ptr %a63 %t72 = extractvalue { ptr, i64, i64 } %t71, 1 %t73 = icmp uge i64 3, %t72 br i1 %t73, label %range2962, label %inrange2963 range2962: call void @finch_panic_index(ptr @.str.1838, i64 1139, i64 3, i64 %t72) unreachable inrange2963: %t74 = extractvalue { ptr, i64, i64 } %t71, 0 %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i64 3 %t76 = load { ptr, i64, i64 }, ptr %t75 store { ptr, i64, i64 } { ptr @.str.1837, i64 13, i64 0 }, ptr %a78 store { ptr, i64, i64 } %t76, ptr %a79 call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) %t80 = load { ptr, i64, i64 }, ptr %a77 store { ptr, i64, i64 } %t80, ptr %a82 store { ptr, i64, i64 } { ptr @.str.1839, i64 3, i64 0 }, ptr %a83 call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) store { ptr, i64, i64 } %t80, ptr %a84 call void @finch_str_drop(ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a81 %t86 = call { ptr, i64, i64 } @finch.gen.op(ptr %t70, { ptr, i64, i64 } %t85) store { ptr, i64, i64 } %t85, ptr %a87 call void @finch_str_drop(ptr %a87) store { ptr, i64, i64 } %t86, ptr %a88 %t89 = load ptr, ptr %a1 %t90 = load { ptr, i64, i64 }, ptr %a88 %t91 = load { ptr, i64, i64 }, ptr %a66 %t92 = load { ptr, i64, i64 }, ptr %a69 call void @finch.gen.condBr(ptr %t89, { ptr, i64, i64 } %t90, { ptr, i64, i64 } %t91, { ptr, i64, i64 } %t92) %t93 = load ptr, ptr %a1 %t94 = load { ptr, i64, i64 }, ptr %a66 call void @finch.gen.label(ptr %t93, { ptr, i64, i64 } %t94) %t95 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t95, { ptr, i64, i64 } { ptr @.str.1840, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1841, i64 2, i64 0 }) %t96 = load ptr, ptr %a1 %t97 = load { ptr, i64, i64 }, ptr %a69 call void @finch.gen.br(ptr %t96, { ptr, i64, i64 } %t97) %t98 = load ptr, ptr %a1 %t99 = load { ptr, i64, i64 }, ptr %a69 call void @finch.gen.label(ptr %t98, { ptr, i64, i64 } %t99) %t100 = load ptr, ptr %a1 %t101 = load ptr, ptr %a1 %t102 = load %S.ast.Type, ptr %a49 %t103 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t101, %S.ast.Type %t102) store { ptr, i64, i64 } { ptr @.str.1842, i64 23, i64 0 }, ptr %a105 store { ptr, i64, i64 } %t103, ptr %a106 call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) store { ptr, i64, i64 } %t103, ptr %a107 call void @finch_str_drop(ptr %a107) %t108 = load { ptr, i64, i64 }, ptr %a104 store { ptr, i64, i64 } %t108, ptr %a110 store { ptr, i64, i64 } { ptr @.str.1843, i64 6, i64 0 }, ptr %a111 call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) store { ptr, i64, i64 } %t108, ptr %a112 call void @finch_str_drop(ptr %a112) %t113 = load { ptr, i64, i64 }, ptr %a109 %t114 = load { ptr, i64, i64 }, ptr %a52 store { ptr, i64, i64 } %t113, ptr %a116 store { ptr, i64, i64 } %t114, ptr %a117 call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) store { ptr, i64, i64 } %t113, ptr %a118 call void @finch_str_drop(ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a115 store { ptr, i64, i64 } %t119, ptr %a121 store { ptr, i64, i64 } { ptr @.str.1844, i64 6, i64 0 }, ptr %a122 call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) store { ptr, i64, i64 } %t119, ptr %a123 call void @finch_str_drop(ptr %a123) %t124 = load { ptr, i64, i64 }, ptr %a120 %t125 = load { ptr, i64, i64 }, ptr %a63 %t126 = extractvalue { ptr, i64, i64 } %t125, 1 %t127 = icmp uge i64 3, %t126 br i1 %t127, label %range2964, label %inrange2965 range2964: call void @finch_panic_index(ptr @.str.1845, i64 1145, i64 3, i64 %t126) unreachable inrange2965: %t128 = extractvalue { ptr, i64, i64 } %t125, 0 %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i64 3 %t130 = load { ptr, i64, i64 }, ptr %t129 store { ptr, i64, i64 } %t124, ptr %a132 store { ptr, i64, i64 } %t130, ptr %a133 call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) store { ptr, i64, i64 } %t124, ptr %a134 call void @finch_str_drop(ptr %a134) %t135 = load { ptr, i64, i64 }, ptr %a131 %t136 = call { ptr, i64, i64 } @finch.gen.op(ptr %t100, { ptr, i64, i64 } %t135) store { ptr, i64, i64 } %t135, ptr %a137 call void @finch_str_drop(ptr %a137) store { ptr, i64, i64 } %t136, ptr %a138 %t139 = load ptr, ptr %a1 %t140 = load ptr, ptr %a1 %t141 = load ptr, ptr %a1 %t142 = load %S.ast.Type, ptr %a49 %t143 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t141, %S.ast.Type %t142) %t144 = load { ptr, i64, i64 }, ptr %a138 %t145 = call { ptr, i64, i64 } @finch.gen.load(ptr %t140, { ptr, i64, i64 } %t143, { ptr, i64, i64 } %t144) store { ptr, i64, i64 } %t143, ptr %a146 call void @finch_str_drop(ptr %a146) %t147 = load %S.ast.Type, ptr %a49 call void @finch.gen.emitFormat(ptr %t139, { ptr, i64, i64 } { ptr @.str.1846, i64 4, i64 0 }, { ptr, i64, i64 } %t145, %S.ast.Type %t147, i1 true) store { ptr, i64, i64 } %t145, ptr %a148 call void @finch_str_drop(ptr %a148) %t149 = load ptr, ptr %a1 %t150 = load { ptr, i64, i64 }, ptr %a63 call void @finch.gen.loopEnd(ptr %t149, { ptr, i64, i64 } %t150) %t151 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t151, { ptr, i64, i64 } { ptr @.str.1847, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1848, i64 1, i64 0 }) call void @finch_str_drop(ptr %a138) call void @finch_str_drop(ptr %a88) call void @finch_str_drop(ptr %a69) call void @finch_str_drop(ptr %a66) call void @finch.drop.arr_str(ptr %a63) call void @finch_str_drop(ptr %a58) call void @finch_str_drop(ptr %a52) call void @finch.drop.S_ast_Type(ptr %a49) br label %endif2959 else2958: %t152 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t153 = load { ptr, i64, i64 }, ptr %t152 store { ptr, i64, i64 } %t153, ptr %a154 store { ptr, i64, i64 } { ptr @.str.1849, i64 4, i64 0 }, ptr %a155 %t156 = call i32 @finch_str_eq(ptr %a154, ptr %a155) %t157 = icmp ne i32 %t156, 0 br i1 %t157, label %then2966, label %else2967 then2966: %t158 = load ptr, ptr %a1 %t159 = icmp eq ptr %t158, null br i1 %t159, label %panic2969, label %ok2970 panic2969: call void @finch_panic(ptr @.str.1850, i64 1151, ptr @.str.1851) unreachable ok2970: %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 21 %t161 = load ptr, ptr %a1 %t162 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t163 = load { ptr, i64, i64 }, ptr %t162 %t164 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t165 = load { ptr, i64, i64 }, ptr %t164 %t166 = call i64 @finch.gen.findEnum(ptr %t161, { ptr, i64, i64 } %t163, { ptr, i64, i64 } %t165) %t167 = load { ptr, i64, i64 }, ptr %t160 %t168 = extractvalue { ptr, i64, i64 } %t167, 1 %t169 = icmp uge i64 %t166, %t168 br i1 %t169, label %range2971, label %inrange2972 range2971: call void @finch_panic_index(ptr @.str.1852, i64 1151, i64 %t166, i64 %t168) unreachable inrange2972: %t170 = extractvalue { ptr, i64, i64 } %t167, 0 %t171 = getelementptr inbounds %S.gen.EnumDef, ptr %t170, i64 %t166 %t172 = load %S.gen.EnumDef, ptr %t171 store %S.gen.EnumDef %t172, ptr %a173 call void @finch.copy.S_gen_EnumDef(ptr %a174, ptr %a173) %t175 = load %S.gen.EnumDef, ptr %a174 store %S.gen.EnumDef %t175, ptr %a176 %t177 = load ptr, ptr %a1 %t178 = call { ptr, i64, i64 } @finch.gen.load(ptr %t177, { ptr, i64, i64 } { ptr @.str.1853, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1854, i64 2, i64 0 }) store { ptr, i64, i64 } %t178, ptr %a179 %t180 = load ptr, ptr %a1 %t181 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t180, { ptr, i64, i64 } { ptr @.str.1855, i64 10, i64 0 }) store { ptr, i64, i64 } %t181, ptr %a182 %t183 = load ptr, ptr %a1 %t184 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t183, { ptr, i64, i64 } { ptr @.str.1856, i64 9, i64 0 }) store { ptr, i64, i64 } %t184, ptr %a185 store { ptr, i64, i64 } zeroinitializer, ptr %a186 store { ptr, i64, i64 } zeroinitializer, ptr %a187 %t188 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 2 %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t188, i32 0, i32 1 %t190 = load i64, ptr %t189 store i64 0, ptr %a191 br label %for.cond2973 for.cond2973: %t192 = load i64, ptr %a191 %t193 = icmp slt i64 %t192, %t190 br i1 %t193, label %for.body2974, label %for.end2976 for.body2974: %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %a187, i32 0, i32 1 %t195 = load ptr, ptr %a1 %t196 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t195, { ptr, i64, i64 } { ptr @.str.1857, i64 6, i64 0 }) %t197 = load i64, ptr %t194 %t198 = add i64 %t197, 1 call void @finch_arr_reserve(ptr %a187, i64 %t198, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t199 = load ptr, ptr %a187 %t200 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i64 %t197 store { ptr, i64, i64 } %t196, ptr %t200 store i64 %t198, ptr %t194 %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %a186, i32 0, i32 1 %t202 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 3 %t203 = load i64, ptr %a191 %t204 = load { ptr, i64, i64 }, ptr %t202 %t205 = extractvalue { ptr, i64, i64 } %t204, 1 %t206 = icmp uge i64 %t203, %t205 br i1 %t206, label %range2977, label %inrange2978 range2977: call void @finch_panic_index(ptr @.str.1859, i64 1159, i64 %t203, i64 %t205) unreachable inrange2978: %t207 = extractvalue { ptr, i64, i64 } %t204, 0 %t208 = getelementptr inbounds i64, ptr %t207, i64 %t203 %t209 = load i64, ptr %t208 call void @finch_str_from_int(ptr %a210, i64 %t209) %t211 = load { ptr, i64, i64 }, ptr %a210 store { ptr, i64, i64 } { ptr @.str.1858, i64 4, i64 0 }, ptr %a213 store { ptr, i64, i64 } %t211, ptr %a214 call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) store { ptr, i64, i64 } %t211, ptr %a215 call void @finch_str_drop(ptr %a215) %t216 = load { ptr, i64, i64 }, ptr %a212 store { ptr, i64, i64 } %t216, ptr %a218 store { ptr, i64, i64 } { ptr @.str.1860, i64 9, i64 0 }, ptr %a219 call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) store { ptr, i64, i64 } %t216, ptr %a220 call void @finch_str_drop(ptr %a220) %t221 = load { ptr, i64, i64 }, ptr %a217 %t222 = load i64, ptr %a191 %t223 = load { ptr, i64, i64 }, ptr %a187 %t224 = extractvalue { ptr, i64, i64 } %t223, 1 %t225 = icmp uge i64 %t222, %t224 br i1 %t225, label %range2979, label %inrange2980 range2979: call void @finch_panic_index(ptr @.str.1861, i64 1159, i64 %t222, i64 %t224) unreachable inrange2980: %t226 = extractvalue { ptr, i64, i64 } %t223, 0 %t227 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 %t222 %t228 = load { ptr, i64, i64 }, ptr %t227 store { ptr, i64, i64 } %t221, ptr %a230 store { ptr, i64, i64 } %t228, ptr %a231 call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) store { ptr, i64, i64 } %t221, ptr %a232 call void @finch_str_drop(ptr %a232) %t233 = load { ptr, i64, i64 }, ptr %a229 %t234 = load i64, ptr %t201 %t235 = add i64 %t234, 1 call void @finch_arr_reserve(ptr %a186, i64 %t235, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t236 = load ptr, ptr %a186 %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %t236, i64 %t234 store { ptr, i64, i64 } %t233, ptr %t237 store i64 %t235, ptr %t201 br label %for.step2975 for.step2975: %t238 = load i64, ptr %a191 %t239 = add i64 %t238, 1 store i64 %t239, ptr %a191 br label %for.cond2973 for.end2976: %t240 = load ptr, ptr %a1 %t241 = load { ptr, i64, i64 }, ptr %a179 store { ptr, i64, i64 } { ptr @.str.1862, i64 11, i64 0 }, ptr %a243 store { ptr, i64, i64 } %t241, ptr %a244 call void @finch_str_concat(ptr %a242, ptr %a243, ptr %a244) %t245 = load { ptr, i64, i64 }, ptr %a242 store { ptr, i64, i64 } %t245, ptr %a247 store { ptr, i64, i64 } { ptr @.str.1863, i64 9, i64 0 }, ptr %a248 call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) store { ptr, i64, i64 } %t245, ptr %a249 call void @finch_str_drop(ptr %a249) %t250 = load { ptr, i64, i64 }, ptr %a246 %t251 = load { ptr, i64, i64 }, ptr %a182 store { ptr, i64, i64 } %t250, ptr %a253 store { ptr, i64, i64 } %t251, ptr %a254 call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) store { ptr, i64, i64 } %t250, ptr %a255 call void @finch_str_drop(ptr %a255) %t256 = load { ptr, i64, i64 }, ptr %a252 store { ptr, i64, i64 } %t256, ptr %a258 store { ptr, i64, i64 } { ptr @.str.1864, i64 3, i64 0 }, ptr %a259 call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) store { ptr, i64, i64 } %t256, ptr %a260 call void @finch_str_drop(ptr %a260) %t261 = load { ptr, i64, i64 }, ptr %a257 %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %a186, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1865, i64 1, i64 0 }, ptr %a263 call void @finch_str_join(ptr %a264, ptr %a186, ptr %a263) %t265 = load { ptr, i64, i64 }, ptr %a264 store { ptr, i64, i64 } %t261, ptr %a267 store { ptr, i64, i64 } %t265, ptr %a268 call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) store { ptr, i64, i64 } %t261, ptr %a269 call void @finch_str_drop(ptr %a269) store { ptr, i64, i64 } %t265, ptr %a270 call void @finch_str_drop(ptr %a270) %t271 = load { ptr, i64, i64 }, ptr %a266 store { ptr, i64, i64 } %t271, ptr %a273 store { ptr, i64, i64 } { ptr @.str.1866, i64 2, i64 0 }, ptr %a274 call void @finch_str_concat(ptr %a272, ptr %a273, ptr %a274) store { ptr, i64, i64 } %t271, ptr %a275 call void @finch_str_drop(ptr %a275) %t276 = load { ptr, i64, i64 }, ptr %a272 call void @finch.gen.emit(ptr %t240, { ptr, i64, i64 } %t276) store { ptr, i64, i64 } %t276, ptr %a277 call void @finch_str_drop(ptr %a277) %t278 = load ptr, ptr %a1 %t279 = icmp eq ptr %t278, null br i1 %t279, label %panic2981, label %ok2982 panic2981: call void @finch_panic(ptr @.str.1867, i64 1162, ptr @.str.1868) unreachable ok2982: %t280 = getelementptr inbounds %S.gen.Gen, ptr %t278, i32 0, i32 9 store i1 true, ptr %t280 %t281 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 2 %t282 = getelementptr inbounds { ptr, i64, i64 }, ptr %t281, i32 0, i32 1 %t283 = load i64, ptr %t282 store i64 0, ptr %a284 br label %for.cond2983 for.cond2983: %t285 = load i64, ptr %a284 %t286 = icmp slt i64 %t285, %t283 br i1 %t286, label %for.body2984, label %for.end2986 for.body2984: %t287 = load ptr, ptr %a1 %t288 = load i64, ptr %a284 %t289 = load { ptr, i64, i64 }, ptr %a187 %t290 = extractvalue { ptr, i64, i64 } %t289, 1 %t291 = icmp uge i64 %t288, %t290 br i1 %t291, label %range2987, label %inrange2988 range2987: call void @finch_panic_index(ptr @.str.1869, i64 1164, i64 %t288, i64 %t290) unreachable inrange2988: %t292 = extractvalue { ptr, i64, i64 } %t289, 0 %t293 = getelementptr inbounds { ptr, i64, i64 }, ptr %t292, i64 %t288 %t294 = load { ptr, i64, i64 }, ptr %t293 call void @finch.gen.label(ptr %t287, { ptr, i64, i64 } %t294) %t295 = load ptr, ptr %a1 %t296 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 2 %t297 = load i64, ptr %a284 %t298 = load { ptr, i64, i64 }, ptr %t296 %t299 = extractvalue { ptr, i64, i64 } %t298, 1 %t300 = icmp uge i64 %t297, %t299 br i1 %t300, label %range2989, label %inrange2990 range2989: call void @finch_panic_index(ptr @.str.1871, i64 1165, i64 %t297, i64 %t299) unreachable inrange2990: %t301 = extractvalue { ptr, i64, i64 } %t298, 0 %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 %t297 %t303 = load { ptr, i64, i64 }, ptr %t302 call void @finch.gen.bufText(ptr %t295, { ptr, i64, i64 } { ptr @.str.1870, i64 4, i64 0 }, { ptr, i64, i64 } %t303) %t304 = load ptr, ptr %a1 %t305 = load { ptr, i64, i64 }, ptr %a185 call void @finch.gen.br(ptr %t304, { ptr, i64, i64 } %t305) br label %for.step2985 for.step2985: %t306 = load i64, ptr %a284 %t307 = add i64 %t306, 1 store i64 %t307, ptr %a284 br label %for.cond2983 for.end2986: %t308 = load ptr, ptr %a1 %t309 = load { ptr, i64, i64 }, ptr %a182 call void @finch.gen.label(ptr %t308, { ptr, i64, i64 } %t309) %t310 = load ptr, ptr %a1 %t311 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 1 %t312 = load { ptr, i64, i64 }, ptr %t311 store { ptr, i64, i64 } %t312, ptr %a314 store { ptr, i64, i64 } { ptr @.str.1873, i64 1, i64 0 }, ptr %a315 call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) %t316 = load { ptr, i64, i64 }, ptr %a313 call void @finch.gen.bufText(ptr %t310, { ptr, i64, i64 } { ptr @.str.1872, i64 4, i64 0 }, { ptr, i64, i64 } %t316) store { ptr, i64, i64 } %t316, ptr %a317 call void @finch_str_drop(ptr %a317) %t318 = load ptr, ptr %a1 %t319 = load ptr, ptr %a1 %t320 = load { ptr, i64, i64 }, ptr %a179 store { ptr, i64, i64 } { ptr @.str.1875, i64 9, i64 0 }, ptr %a322 store { ptr, i64, i64 } %t320, ptr %a323 call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323) %t324 = load { ptr, i64, i64 }, ptr %a321 store { ptr, i64, i64 } %t324, ptr %a326 store { ptr, i64, i64 } { ptr @.str.1876, i64 7, i64 0 }, ptr %a327 call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327) store { ptr, i64, i64 } %t324, ptr %a328 call void @finch_str_drop(ptr %a328) %t329 = load { ptr, i64, i64 }, ptr %a325 %t330 = call { ptr, i64, i64 } @finch.gen.op(ptr %t319, { ptr, i64, i64 } %t329) store { ptr, i64, i64 } %t329, ptr %a331 call void @finch_str_drop(ptr %a331) store { ptr, i64, i64 } { ptr @.str.1874, i64 39, i64 0 }, ptr %a333 store { ptr, i64, i64 } %t330, ptr %a334 call void @finch_str_concat(ptr %a332, ptr %a333, ptr %a334) store { ptr, i64, i64 } %t330, ptr %a335 call void @finch_str_drop(ptr %a335) %t336 = load { ptr, i64, i64 }, ptr %a332 store { ptr, i64, i64 } %t336, ptr %a338 store { ptr, i64, i64 } { ptr @.str.1877, i64 1, i64 0 }, ptr %a339 call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) store { ptr, i64, i64 } %t336, ptr %a340 call void @finch_str_drop(ptr %a340) %t341 = load { ptr, i64, i64 }, ptr %a337 call void @finch.gen.emit(ptr %t318, { ptr, i64, i64 } %t341) store { ptr, i64, i64 } %t341, ptr %a342 call void @finch_str_drop(ptr %a342) %t343 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t343, { ptr, i64, i64 } { ptr @.str.1878, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1879, i64 1, i64 0 }) %t344 = load ptr, ptr %a1 %t345 = load { ptr, i64, i64 }, ptr %a185 call void @finch.gen.br(ptr %t344, { ptr, i64, i64 } %t345) %t346 = load ptr, ptr %a1 %t347 = load { ptr, i64, i64 }, ptr %a185 call void @finch.gen.label(ptr %t346, { ptr, i64, i64 } %t347) call void @finch.drop.arr_str(ptr %a187) call void @finch.drop.arr_str(ptr %a186) call void @finch_str_drop(ptr %a185) call void @finch_str_drop(ptr %a182) call void @finch_str_drop(ptr %a179) call void @finch.drop.S_gen_EnumDef(ptr %a176) br label %endif2968 else2967: %t348 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t349 = load { ptr, i64, i64 }, ptr %t348 store { ptr, i64, i64 } %t349, ptr %a350 store { ptr, i64, i64 } { ptr @.str.1880, i64 3, i64 0 }, ptr %a351 %t352 = call i32 @finch_str_eq(ptr %a350, ptr %a351) %t353 = icmp ne i32 %t352, 0 br i1 %t353, label %then2991, label %else2992 then2991: %t354 = load ptr, ptr %a1 %t355 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t354, { ptr, i64, i64 } { ptr @.str.1881, i64 2, i64 0 }) store { ptr, i64, i64 } %t355, ptr %a356 %t357 = load ptr, ptr %a1 %t358 = load { ptr, i64, i64 }, ptr %a356 call void @finch.gen.store(ptr %t357, { ptr, i64, i64 } { ptr @.str.1882, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.1883, i64 4, i64 0 }, { ptr, i64, i64 } %t358) %t359 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t359, { ptr, i64, i64 } { ptr @.str.1884, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1885, i64 1, i64 0 }) %t360 = load ptr, ptr %a1 %t361 = load ptr, ptr %a1 %t362 = load ptr, ptr %a1 %t363 = load %S.ast.Type, ptr %a2 %t364 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t362, %S.ast.Type %t363) store { ptr, i64, i64 } { ptr @.str.1887, i64 23, i64 0 }, ptr %a366 store { ptr, i64, i64 } %t364, ptr %a367 call void @finch_str_concat(ptr %a365, ptr %a366, ptr %a367) store { ptr, i64, i64 } %t364, ptr %a368 call void @finch_str_drop(ptr %a368) %t369 = load { ptr, i64, i64 }, ptr %a365 store { ptr, i64, i64 } %t369, ptr %a371 store { ptr, i64, i64 } { ptr @.str.1888, i64 22, i64 0 }, ptr %a372 call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) store { ptr, i64, i64 } %t369, ptr %a373 call void @finch_str_drop(ptr %a373) %t374 = load { ptr, i64, i64 }, ptr %a370 %t375 = call { ptr, i64, i64 } @finch.gen.op(ptr %t361, { ptr, i64, i64 } %t374) store { ptr, i64, i64 } %t374, ptr %a376 call void @finch_str_drop(ptr %a376) %t377 = call { ptr, i64, i64 } @finch.gen.load(ptr %t360, { ptr, i64, i64 } { ptr @.str.1886, i64 3, i64 0 }, { ptr, i64, i64 } %t375) store { ptr, i64, i64 } %t375, ptr %a378 call void @finch_str_drop(ptr %a378) store { ptr, i64, i64 } %t377, ptr %a379 %t380 = load ptr, ptr %a1 %t381 = load { ptr, i64, i64 }, ptr %a379 %t382 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t380, { ptr, i64, i64 } %t381) store { ptr, i64, i64 } %t382, ptr %a383 %t384 = load ptr, ptr %a1 %t385 = load %S.ast.Type, ptr %a2 %t386 = load { ptr, i64, i64 }, ptr %a383 %t387 = extractvalue { ptr, i64, i64 } %t386, 1 %t388 = icmp uge i64 3, %t387 br i1 %t388, label %range2994, label %inrange2995 range2994: call void @finch_panic_index(ptr @.str.1890, i64 1181, i64 3, i64 %t387) unreachable inrange2995: %t389 = extractvalue { ptr, i64, i64 } %t386, 0 %t390 = getelementptr inbounds { ptr, i64, i64 }, ptr %t389, i64 3 %t391 = load { ptr, i64, i64 }, ptr %t390 %t392 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t384, { ptr, i64, i64 } { ptr @.str.1889, i64 2, i64 0 }, %S.ast.Type %t385, { ptr, i64, i64 } %t391) store { ptr, i64, i64 } %t392, ptr %a393 %t394 = load ptr, ptr %a1 %t395 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t394, { ptr, i64, i64 } { ptr @.str.1891, i64 10, i64 0 }) store { ptr, i64, i64 } %t395, ptr %a396 %t397 = load ptr, ptr %a1 %t398 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t397, { ptr, i64, i64 } { ptr @.str.1892, i64 10, i64 0 }) store { ptr, i64, i64 } %t398, ptr %a399 %t400 = load ptr, ptr %a1 %t401 = load ptr, ptr %a1 %t402 = load ptr, ptr %a1 %t403 = load ptr, ptr %a1 %t404 = load { ptr, i64, i64 }, ptr %a393 %t405 = load %S.ast.Type, ptr %a2 %t406 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t403, { ptr, i64, i64 } %t404, %S.ast.Type %t405, i64 0) %t407 = call { ptr, i64, i64 } @finch.gen.load(ptr %t402, { ptr, i64, i64 } { ptr @.str.1894, i64 3, i64 0 }, { ptr, i64, i64 } %t406) store { ptr, i64, i64 } %t406, ptr %a408 call void @finch_str_drop(ptr %a408) store { ptr, i64, i64 } { ptr @.str.1893, i64 12, i64 0 }, ptr %a410 store { ptr, i64, i64 } %t407, ptr %a411 call void @finch_str_concat(ptr %a409, ptr %a410, ptr %a411) store { ptr, i64, i64 } %t407, ptr %a412 call void @finch_str_drop(ptr %a412) %t413 = load { ptr, i64, i64 }, ptr %a409 store { ptr, i64, i64 } %t413, ptr %a415 store { ptr, i64, i64 } { ptr @.str.1895, i64 3, i64 0 }, ptr %a416 call void @finch_str_concat(ptr %a414, ptr %a415, ptr %a416) store { ptr, i64, i64 } %t413, ptr %a417 call void @finch_str_drop(ptr %a417) %t418 = load { ptr, i64, i64 }, ptr %a414 %t419 = call { ptr, i64, i64 } @finch.gen.op(ptr %t401, { ptr, i64, i64 } %t418) store { ptr, i64, i64 } %t418, ptr %a420 call void @finch_str_drop(ptr %a420) %t421 = load { ptr, i64, i64 }, ptr %a396 %t422 = load { ptr, i64, i64 }, ptr %a399 call void @finch.gen.condBr(ptr %t400, { ptr, i64, i64 } %t419, { ptr, i64, i64 } %t421, { ptr, i64, i64 } %t422) store { ptr, i64, i64 } %t419, ptr %a423 call void @finch_str_drop(ptr %a423) %t424 = load ptr, ptr %a1 %t425 = load { ptr, i64, i64 }, ptr %a396 call void @finch.gen.label(ptr %t424, { ptr, i64, i64 } %t425) %t426 = load ptr, ptr %a1 %t427 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t426, { ptr, i64, i64 } { ptr @.str.1896, i64 3, i64 0 }) store { ptr, i64, i64 } %t427, ptr %a428 %t429 = load ptr, ptr %a1 %t430 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t429, { ptr, i64, i64 } { ptr @.str.1897, i64 4, i64 0 }) store { ptr, i64, i64 } %t430, ptr %a431 %t432 = load ptr, ptr %a1 %t433 = load ptr, ptr %a1 %t434 = load { ptr, i64, i64 }, ptr %a356 %t435 = call { ptr, i64, i64 } @finch.gen.load(ptr %t433, { ptr, i64, i64 } { ptr @.str.1898, i64 2, i64 0 }, { ptr, i64, i64 } %t434) %t436 = load { ptr, i64, i64 }, ptr %a431 %t437 = load { ptr, i64, i64 }, ptr %a428 call void @finch.gen.condBr(ptr %t432, { ptr, i64, i64 } %t435, { ptr, i64, i64 } %t436, { ptr, i64, i64 } %t437) store { ptr, i64, i64 } %t435, ptr %a438 call void @finch_str_drop(ptr %a438) %t439 = load ptr, ptr %a1 %t440 = load { ptr, i64, i64 }, ptr %a428 call void @finch.gen.label(ptr %t439, { ptr, i64, i64 } %t440) %t441 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t441, { ptr, i64, i64 } { ptr @.str.1899, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1900, i64 2, i64 0 }) %t442 = load ptr, ptr %a1 %t443 = load { ptr, i64, i64 }, ptr %a431 call void @finch.gen.br(ptr %t442, { ptr, i64, i64 } %t443) %t444 = load ptr, ptr %a1 %t445 = load { ptr, i64, i64 }, ptr %a431 call void @finch.gen.label(ptr %t444, { ptr, i64, i64 } %t445) %t446 = load ptr, ptr %a1 %t447 = load { ptr, i64, i64 }, ptr %a356 call void @finch.gen.store(ptr %t446, { ptr, i64, i64 } { ptr @.str.1901, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.1902, i64 5, i64 0 }, { ptr, i64, i64 } %t447) %t448 = load ptr, ptr %a1 %t449 = load ptr, ptr %a1 %t450 = load ptr, ptr %a1 %t451 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t452 = load { ptr, i64, i64 }, ptr %t451 %t453 = extractvalue { ptr, i64, i64 } %t452, 1 %t454 = icmp uge i64 0, %t453 br i1 %t454, label %range2996, label %inrange2997 range2996: call void @finch_panic_index(ptr @.str.1904, i64 1194, i64 0, i64 %t453) unreachable inrange2997: %t455 = extractvalue { ptr, i64, i64 } %t452, 0 %t456 = getelementptr inbounds %S.ast.Type, ptr %t455, i64 0 %t457 = load %S.ast.Type, ptr %t456 %t458 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t450, %S.ast.Type %t457) %t459 = load ptr, ptr %a1 %t460 = load { ptr, i64, i64 }, ptr %a393 %t461 = load %S.ast.Type, ptr %a2 %t462 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t459, { ptr, i64, i64 } %t460, %S.ast.Type %t461, i64 1) %t463 = call { ptr, i64, i64 } @finch.gen.load(ptr %t449, { ptr, i64, i64 } %t458, { ptr, i64, i64 } %t462) store { ptr, i64, i64 } %t458, ptr %a464 call void @finch_str_drop(ptr %a464) store { ptr, i64, i64 } %t462, ptr %a465 call void @finch_str_drop(ptr %a465) %t466 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t467 = load { ptr, i64, i64 }, ptr %t466 %t468 = extractvalue { ptr, i64, i64 } %t467, 1 %t469 = icmp uge i64 0, %t468 br i1 %t469, label %range2998, label %inrange2999 range2998: call void @finch_panic_index(ptr @.str.1905, i64 1194, i64 0, i64 %t468) unreachable inrange2999: %t470 = extractvalue { ptr, i64, i64 } %t467, 0 %t471 = getelementptr inbounds %S.ast.Type, ptr %t470, i64 0 %t472 = load %S.ast.Type, ptr %t471 call void @finch.gen.emitFormat(ptr %t448, { ptr, i64, i64 } { ptr @.str.1903, i64 4, i64 0 }, { ptr, i64, i64 } %t463, %S.ast.Type %t472, i1 true) store { ptr, i64, i64 } %t463, ptr %a473 call void @finch_str_drop(ptr %a473) %t474 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t474, { ptr, i64, i64 } { ptr @.str.1906, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1907, i64 2, i64 0 }) %t475 = load ptr, ptr %a1 %t476 = load ptr, ptr %a1 %t477 = load ptr, ptr %a1 %t478 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t479 = load { ptr, i64, i64 }, ptr %t478 %t480 = extractvalue { ptr, i64, i64 } %t479, 1 %t481 = icmp uge i64 1, %t480 br i1 %t481, label %range3000, label %inrange3001 range3000: call void @finch_panic_index(ptr @.str.1909, i64 1196, i64 1, i64 %t480) unreachable inrange3001: %t482 = extractvalue { ptr, i64, i64 } %t479, 0 %t483 = getelementptr inbounds %S.ast.Type, ptr %t482, i64 1 %t484 = load %S.ast.Type, ptr %t483 %t485 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t477, %S.ast.Type %t484) %t486 = load ptr, ptr %a1 %t487 = load { ptr, i64, i64 }, ptr %a393 %t488 = load %S.ast.Type, ptr %a2 %t489 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t486, { ptr, i64, i64 } %t487, %S.ast.Type %t488, i64 2) %t490 = call { ptr, i64, i64 } @finch.gen.load(ptr %t476, { ptr, i64, i64 } %t485, { ptr, i64, i64 } %t489) store { ptr, i64, i64 } %t485, ptr %a491 call void @finch_str_drop(ptr %a491) store { ptr, i64, i64 } %t489, ptr %a492 call void @finch_str_drop(ptr %a492) %t493 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t494 = load { ptr, i64, i64 }, ptr %t493 %t495 = extractvalue { ptr, i64, i64 } %t494, 1 %t496 = icmp uge i64 1, %t495 br i1 %t496, label %range3002, label %inrange3003 range3002: call void @finch_panic_index(ptr @.str.1910, i64 1196, i64 1, i64 %t495) unreachable inrange3003: %t497 = extractvalue { ptr, i64, i64 } %t494, 0 %t498 = getelementptr inbounds %S.ast.Type, ptr %t497, i64 1 %t499 = load %S.ast.Type, ptr %t498 call void @finch.gen.emitFormat(ptr %t475, { ptr, i64, i64 } { ptr @.str.1908, i64 4, i64 0 }, { ptr, i64, i64 } %t490, %S.ast.Type %t499, i1 true) store { ptr, i64, i64 } %t490, ptr %a500 call void @finch_str_drop(ptr %a500) %t501 = load ptr, ptr %a1 %t502 = load { ptr, i64, i64 }, ptr %a399 call void @finch.gen.br(ptr %t501, { ptr, i64, i64 } %t502) %t503 = load ptr, ptr %a1 %t504 = load { ptr, i64, i64 }, ptr %a399 call void @finch.gen.label(ptr %t503, { ptr, i64, i64 } %t504) %t505 = load ptr, ptr %a1 %t506 = load { ptr, i64, i64 }, ptr %a383 call void @finch.gen.loopEnd(ptr %t505, { ptr, i64, i64 } %t506) %t507 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t507, { ptr, i64, i64 } { ptr @.str.1911, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1912, i64 1, i64 0 }) call void @finch_str_drop(ptr %a431) call void @finch_str_drop(ptr %a428) call void @finch_str_drop(ptr %a399) call void @finch_str_drop(ptr %a396) call void @finch_str_drop(ptr %a393) call void @finch.drop.arr_str(ptr %a383) call void @finch_str_drop(ptr %a379) call void @finch_str_drop(ptr %a356) br label %endif2993 else2992: %t508 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t509 = load { ptr, i64, i64 }, ptr %t508 store { ptr, i64, i64 } %t509, ptr %a510 store { ptr, i64, i64 } { ptr @.str.1913, i64 6, i64 0 }, ptr %a511 %t512 = call i32 @finch_str_eq(ptr %a510, ptr %a511) %t513 = icmp ne i32 %t512, 0 br label %logic.from3004 logic.from3004: br i1 %t513, label %logic.rhs3005, label %logic.end3006 logic.rhs3005: %t514 = load ptr, ptr %a1 %t515 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t516 = load { ptr, i64, i64 }, ptr %t515 %t517 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t518 = load { ptr, i64, i64 }, ptr %t517 %t519 = call i64 @finch.gen.findSum(ptr %t514, { ptr, i64, i64 } %t516, { ptr, i64, i64 } %t518) %t520 = icmp sge i64 %t519, 0 br label %logic.rend3007 logic.rend3007: br label %logic.end3006 logic.end3006: %t521 = phi i1 [ false, %logic.from3004 ], [ %t520, %logic.rend3007 ] br i1 %t521, label %then3008, label %else3009 then3008: %t522 = load ptr, ptr %a1 %t523 = icmp eq ptr %t522, null br i1 %t523, label %panic3011, label %ok3012 panic3011: call void @finch_panic(ptr @.str.1914, i64 1203, ptr @.str.1915) unreachable ok3012: %t524 = getelementptr inbounds %S.gen.Gen, ptr %t522, i32 0, i32 22 %t525 = load ptr, ptr %a1 %t526 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t527 = load { ptr, i64, i64 }, ptr %t526 %t528 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t529 = load { ptr, i64, i64 }, ptr %t528 %t530 = call i64 @finch.gen.findSum(ptr %t525, { ptr, i64, i64 } %t527, { ptr, i64, i64 } %t529) %t531 = load { ptr, i64, i64 }, ptr %t524 %t532 = extractvalue { ptr, i64, i64 } %t531, 1 %t533 = icmp uge i64 %t530, %t532 br i1 %t533, label %range3013, label %inrange3014 range3013: call void @finch_panic_index(ptr @.str.1916, i64 1203, i64 %t530, i64 %t532) unreachable inrange3014: %t534 = extractvalue { ptr, i64, i64 } %t531, 0 %t535 = getelementptr inbounds %S.gen.SumDef, ptr %t534, i64 %t530 %t536 = load %S.gen.SumDef, ptr %t535 store %S.gen.SumDef %t536, ptr %a537 call void @finch.copy.S_gen_SumDef(ptr %a538, ptr %a537) %t539 = load %S.gen.SumDef, ptr %a538 store %S.gen.SumDef %t539, ptr %a540 %t541 = load ptr, ptr %a1 %t542 = icmp eq ptr %t541, null br i1 %t542, label %panic3015, label %ok3016 panic3015: call void @finch_panic(ptr @.str.1917, i64 1204, ptr @.str.1918) unreachable ok3016: %t543 = getelementptr inbounds %S.gen.Gen, ptr %t541, i32 0, i32 16 %t544 = load ptr, ptr %a1 %t545 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t546 = load { ptr, i64, i64 }, ptr %t545 %t547 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t548 = load { ptr, i64, i64 }, ptr %t547 %t549 = call i64 @finch.gen.findStruct(ptr %t544, { ptr, i64, i64 } %t546, { ptr, i64, i64 } %t548) %t550 = load { ptr, i64, i64 }, ptr %t543 %t551 = extractvalue { ptr, i64, i64 } %t550, 1 %t552 = icmp uge i64 %t549, %t551 br i1 %t552, label %range3017, label %inrange3018 range3017: call void @finch_panic_index(ptr @.str.1919, i64 1204, i64 %t549, i64 %t551) unreachable inrange3018: %t553 = extractvalue { ptr, i64, i64 } %t550, 0 %t554 = getelementptr inbounds %S.gen.StructDef, ptr %t553, i64 %t549 %t555 = load %S.gen.StructDef, ptr %t554 store %S.gen.StructDef %t555, ptr %a556 call void @finch.copy.S_gen_StructDef(ptr %a557, ptr %a556) %t558 = load %S.gen.StructDef, ptr %a557 store %S.gen.StructDef %t558, ptr %a559 %t560 = load ptr, ptr %a1 %t561 = load %S.ast.Type, ptr %a2 %t562 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t560, %S.ast.Type %t561) store { ptr, i64, i64 } %t562, ptr %a563 %t564 = load ptr, ptr %a1 %t565 = load ptr, ptr %a1 %t566 = load { ptr, i64, i64 }, ptr %a563 store { ptr, i64, i64 } { ptr @.str.1921, i64 23, i64 0 }, ptr %a568 store { ptr, i64, i64 } %t566, ptr %a569 call void @finch_str_concat(ptr %a567, ptr %a568, ptr %a569) %t570 = load { ptr, i64, i64 }, ptr %a567 store { ptr, i64, i64 } %t570, ptr %a572 store { ptr, i64, i64 } { ptr @.str.1922, i64 21, i64 0 }, ptr %a573 call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573) store { ptr, i64, i64 } %t570, ptr %a574 call void @finch_str_drop(ptr %a574) %t575 = load { ptr, i64, i64 }, ptr %a571 %t576 = getelementptr inbounds %S.gen.StructDef, ptr %a559, i32 0, i32 3 %t577 = load { ptr, i64, i64 }, ptr %t576 %t578 = extractvalue { ptr, i64, i64 } %t577, 1 %t579 = icmp uge i64 0, %t578 br i1 %t579, label %range3019, label %inrange3020 range3019: call void @finch_panic_index(ptr @.str.1923, i64 1206, i64 0, i64 %t578) unreachable inrange3020: %t580 = extractvalue { ptr, i64, i64 } %t577, 0 %t581 = getelementptr inbounds i64, ptr %t580, i64 0 %t582 = load i64, ptr %t581 call void @finch_str_from_int(ptr %a583, i64 %t582) %t584 = load { ptr, i64, i64 }, ptr %a583 store { ptr, i64, i64 } %t575, ptr %a586 store { ptr, i64, i64 } %t584, ptr %a587 call void @finch_str_concat(ptr %a585, ptr %a586, ptr %a587) store { ptr, i64, i64 } %t575, ptr %a588 call void @finch_str_drop(ptr %a588) store { ptr, i64, i64 } %t584, ptr %a589 call void @finch_str_drop(ptr %a589) %t590 = load { ptr, i64, i64 }, ptr %a585 %t591 = call { ptr, i64, i64 } @finch.gen.op(ptr %t565, { ptr, i64, i64 } %t590) store { ptr, i64, i64 } %t590, ptr %a592 call void @finch_str_drop(ptr %a592) %t593 = call { ptr, i64, i64 } @finch.gen.load(ptr %t564, { ptr, i64, i64 } { ptr @.str.1920, i64 3, i64 0 }, { ptr, i64, i64 } %t591) store { ptr, i64, i64 } %t591, ptr %a594 call void @finch_str_drop(ptr %a594) store { ptr, i64, i64 } %t593, ptr %a595 %t596 = load ptr, ptr %a1 %t597 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t596, { ptr, i64, i64 } { ptr @.str.1924, i64 9, i64 0 }) store { ptr, i64, i64 } %t597, ptr %a598 %t599 = load ptr, ptr %a1 %t600 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t599, { ptr, i64, i64 } { ptr @.str.1925, i64 8, i64 0 }) store { ptr, i64, i64 } %t600, ptr %a601 store { ptr, i64, i64 } zeroinitializer, ptr %a602 store { ptr, i64, i64 } zeroinitializer, ptr %a603 %t604 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 2 %t605 = getelementptr inbounds { ptr, i64, i64 }, ptr %t604, i32 0, i32 1 %t606 = load i64, ptr %t605 store i64 0, ptr %a607 br label %for.cond3021 for.cond3021: %t608 = load i64, ptr %a607 %t609 = icmp slt i64 %t608, %t606 br i1 %t609, label %for.body3022, label %for.end3024 for.body3022: %t610 = getelementptr inbounds { ptr, i64, i64 }, ptr %a603, i32 0, i32 1 %t611 = load ptr, ptr %a1 %t612 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t611, { ptr, i64, i64 } { ptr @.str.1926, i64 5, i64 0 }) %t613 = load i64, ptr %t610 %t614 = add i64 %t613, 1 call void @finch_arr_reserve(ptr %a603, i64 %t614, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t615 = load ptr, ptr %a603 %t616 = getelementptr inbounds { ptr, i64, i64 }, ptr %t615, i64 %t613 store { ptr, i64, i64 } %t612, ptr %t616 store i64 %t614, ptr %t610 %t617 = getelementptr inbounds { ptr, i64, i64 }, ptr %a602, i32 0, i32 1 %t618 = load i64, ptr %a607 call void @finch_str_from_int(ptr %a619, i64 %t618) %t620 = load { ptr, i64, i64 }, ptr %a619 store { ptr, i64, i64 } { ptr @.str.1927, i64 4, i64 0 }, ptr %a622 store { ptr, i64, i64 } %t620, ptr %a623 call void @finch_str_concat(ptr %a621, ptr %a622, ptr %a623) store { ptr, i64, i64 } %t620, ptr %a624 call void @finch_str_drop(ptr %a624) %t625 = load { ptr, i64, i64 }, ptr %a621 store { ptr, i64, i64 } %t625, ptr %a627 store { ptr, i64, i64 } { ptr @.str.1928, i64 9, i64 0 }, ptr %a628 call void @finch_str_concat(ptr %a626, ptr %a627, ptr %a628) store { ptr, i64, i64 } %t625, ptr %a629 call void @finch_str_drop(ptr %a629) %t630 = load { ptr, i64, i64 }, ptr %a626 %t631 = load i64, ptr %a607 %t632 = load { ptr, i64, i64 }, ptr %a603 %t633 = extractvalue { ptr, i64, i64 } %t632, 1 %t634 = icmp uge i64 %t631, %t633 br i1 %t634, label %range3025, label %inrange3026 range3025: call void @finch_panic_index(ptr @.str.1929, i64 1213, i64 %t631, i64 %t633) unreachable inrange3026: %t635 = extractvalue { ptr, i64, i64 } %t632, 0 %t636 = getelementptr inbounds { ptr, i64, i64 }, ptr %t635, i64 %t631 %t637 = load { ptr, i64, i64 }, ptr %t636 store { ptr, i64, i64 } %t630, ptr %a639 store { ptr, i64, i64 } %t637, ptr %a640 call void @finch_str_concat(ptr %a638, ptr %a639, ptr %a640) store { ptr, i64, i64 } %t630, ptr %a641 call void @finch_str_drop(ptr %a641) %t642 = load { ptr, i64, i64 }, ptr %a638 %t643 = load i64, ptr %t617 %t644 = add i64 %t643, 1 call void @finch_arr_reserve(ptr %a602, i64 %t644, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t645 = load ptr, ptr %a602 %t646 = getelementptr inbounds { ptr, i64, i64 }, ptr %t645, i64 %t643 store { ptr, i64, i64 } %t642, ptr %t646 store i64 %t644, ptr %t617 br label %for.step3023 for.step3023: %t647 = load i64, ptr %a607 %t648 = add i64 %t647, 1 store i64 %t648, ptr %a607 br label %for.cond3021 for.end3024: %t649 = load ptr, ptr %a1 %t650 = load { ptr, i64, i64 }, ptr %a595 store { ptr, i64, i64 } { ptr @.str.1930, i64 11, i64 0 }, ptr %a652 store { ptr, i64, i64 } %t650, ptr %a653 call void @finch_str_concat(ptr %a651, ptr %a652, ptr %a653) %t654 = load { ptr, i64, i64 }, ptr %a651 store { ptr, i64, i64 } %t654, ptr %a656 store { ptr, i64, i64 } { ptr @.str.1931, i64 9, i64 0 }, ptr %a657 call void @finch_str_concat(ptr %a655, ptr %a656, ptr %a657) store { ptr, i64, i64 } %t654, ptr %a658 call void @finch_str_drop(ptr %a658) %t659 = load { ptr, i64, i64 }, ptr %a655 %t660 = load { ptr, i64, i64 }, ptr %a598 store { ptr, i64, i64 } %t659, ptr %a662 store { ptr, i64, i64 } %t660, ptr %a663 call void @finch_str_concat(ptr %a661, ptr %a662, ptr %a663) store { ptr, i64, i64 } %t659, ptr %a664 call void @finch_str_drop(ptr %a664) %t665 = load { ptr, i64, i64 }, ptr %a661 store { ptr, i64, i64 } %t665, ptr %a667 store { ptr, i64, i64 } { ptr @.str.1932, i64 3, i64 0 }, ptr %a668 call void @finch_str_concat(ptr %a666, ptr %a667, ptr %a668) store { ptr, i64, i64 } %t665, ptr %a669 call void @finch_str_drop(ptr %a669) %t670 = load { ptr, i64, i64 }, ptr %a666 %t671 = getelementptr inbounds { ptr, i64, i64 }, ptr %a602, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1933, i64 1, i64 0 }, ptr %a672 call void @finch_str_join(ptr %a673, ptr %a602, ptr %a672) %t674 = load { ptr, i64, i64 }, ptr %a673 store { ptr, i64, i64 } %t670, ptr %a676 store { ptr, i64, i64 } %t674, ptr %a677 call void @finch_str_concat(ptr %a675, ptr %a676, ptr %a677) store { ptr, i64, i64 } %t670, ptr %a678 call void @finch_str_drop(ptr %a678) store { ptr, i64, i64 } %t674, ptr %a679 call void @finch_str_drop(ptr %a679) %t680 = load { ptr, i64, i64 }, ptr %a675 store { ptr, i64, i64 } %t680, ptr %a682 store { ptr, i64, i64 } { ptr @.str.1934, i64 2, i64 0 }, ptr %a683 call void @finch_str_concat(ptr %a681, ptr %a682, ptr %a683) store { ptr, i64, i64 } %t680, ptr %a684 call void @finch_str_drop(ptr %a684) %t685 = load { ptr, i64, i64 }, ptr %a681 call void @finch.gen.emit(ptr %t649, { ptr, i64, i64 } %t685) store { ptr, i64, i64 } %t685, ptr %a686 call void @finch_str_drop(ptr %a686) %t687 = load ptr, ptr %a1 %t688 = icmp eq ptr %t687, null br i1 %t688, label %panic3027, label %ok3028 panic3027: call void @finch_panic(ptr @.str.1935, i64 1216, ptr @.str.1936) unreachable ok3028: %t689 = getelementptr inbounds %S.gen.Gen, ptr %t687, i32 0, i32 9 store i1 true, ptr %t689 %t690 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 2 %t691 = getelementptr inbounds { ptr, i64, i64 }, ptr %t690, i32 0, i32 1 %t692 = load i64, ptr %t691 store i64 0, ptr %a693 br label %for.cond3029 for.cond3029: %t694 = load i64, ptr %a693 %t695 = icmp slt i64 %t694, %t692 br i1 %t695, label %for.body3030, label %for.end3032 for.body3030: %t696 = load ptr, ptr %a1 %t697 = load i64, ptr %a693 %t698 = load { ptr, i64, i64 }, ptr %a603 %t699 = extractvalue { ptr, i64, i64 } %t698, 1 %t700 = icmp uge i64 %t697, %t699 br i1 %t700, label %range3033, label %inrange3034 range3033: call void @finch_panic_index(ptr @.str.1937, i64 1218, i64 %t697, i64 %t699) unreachable inrange3034: %t701 = extractvalue { ptr, i64, i64 } %t698, 0 %t702 = getelementptr inbounds { ptr, i64, i64 }, ptr %t701, i64 %t697 %t703 = load { ptr, i64, i64 }, ptr %t702 call void @finch.gen.label(ptr %t696, { ptr, i64, i64 } %t703) %t704 = load ptr, ptr %a1 %t705 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 2 %t706 = load i64, ptr %a693 %t707 = load { ptr, i64, i64 }, ptr %t705 %t708 = extractvalue { ptr, i64, i64 } %t707, 1 %t709 = icmp uge i64 %t706, %t708 br i1 %t709, label %range3035, label %inrange3036 range3035: call void @finch_panic_index(ptr @.str.1939, i64 1219, i64 %t706, i64 %t708) unreachable inrange3036: %t710 = extractvalue { ptr, i64, i64 } %t707, 0 %t711 = getelementptr inbounds { ptr, i64, i64 }, ptr %t710, i64 %t706 %t712 = load { ptr, i64, i64 }, ptr %t711 call void @finch.gen.bufText(ptr %t704, { ptr, i64, i64 } { ptr @.str.1938, i64 4, i64 0 }, { ptr, i64, i64 } %t712) %t713 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 3 %t714 = load i64, ptr %a693 %t715 = load { ptr, i64, i64 }, ptr %t713 %t716 = extractvalue { ptr, i64, i64 } %t715, 1 %t717 = icmp uge i64 %t714, %t716 br i1 %t717, label %range3037, label %inrange3038 range3037: call void @finch_panic_index(ptr @.str.1940, i64 1220, i64 %t714, i64 %t716) unreachable inrange3038: %t718 = extractvalue { ptr, i64, i64 } %t715, 0 %t719 = getelementptr inbounds i64, ptr %t718, i64 %t714 %t720 = load i64, ptr %t719 %t721 = icmp sgt i64 %t720, 0 br i1 %t721, label %then3039, label %endif3041 then3039: %t722 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t722, { ptr, i64, i64 } { ptr @.str.1941, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1942, i64 1, i64 0 }) %t723 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 3 %t724 = load i64, ptr %a693 %t725 = load { ptr, i64, i64 }, ptr %t723 %t726 = extractvalue { ptr, i64, i64 } %t725, 1 %t727 = icmp uge i64 %t724, %t726 br i1 %t727, label %range3042, label %inrange3043 range3042: call void @finch_panic_index(ptr @.str.1943, i64 1222, i64 %t724, i64 %t726) unreachable inrange3043: %t728 = extractvalue { ptr, i64, i64 } %t725, 0 %t729 = getelementptr inbounds i64, ptr %t728, i64 %t724 %t730 = load i64, ptr %t729 store i64 0, ptr %a731 br label %for.cond3044 for.cond3044: %t732 = load i64, ptr %a731 %t733 = icmp slt i64 %t732, %t730 br i1 %t733, label %for.body3045, label %for.end3047 for.body3045: %t734 = load i64, ptr %a731 %t735 = icmp sgt i64 %t734, 0 br i1 %t735, label %then3048, label %endif3050 then3048: %t736 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t736, { ptr, i64, i64 } { ptr @.str.1944, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1945, i64 2, i64 0 }) br label %endif3050 endif3050: %t737 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 4 %t738 = load i64, ptr %a693 %t739 = load { ptr, i64, i64 }, ptr %t737 %t740 = extractvalue { ptr, i64, i64 } %t739, 1 %t741 = icmp uge i64 %t738, %t740 br i1 %t741, label %range3051, label %inrange3052 range3051: call void @finch_panic_index(ptr @.str.1946, i64 1226, i64 %t738, i64 %t740) unreachable inrange3052: %t742 = extractvalue { ptr, i64, i64 } %t739, 0 %t743 = getelementptr inbounds i64, ptr %t742, i64 %t738 %t744 = load i64, ptr %t743 %t745 = load i64, ptr %a731 %t746 = add i64 %t744, %t745 store i64 %t746, ptr %a747 %t748 = load ptr, ptr %a1 %t749 = load { ptr, i64, i64 }, ptr %a563 store { ptr, i64, i64 } { ptr @.str.1947, i64 23, i64 0 }, ptr %a751 store { ptr, i64, i64 } %t749, ptr %a752 call void @finch_str_concat(ptr %a750, ptr %a751, ptr %a752) %t753 = load { ptr, i64, i64 }, ptr %a750 store { ptr, i64, i64 } %t753, ptr %a755 store { ptr, i64, i64 } { ptr @.str.1948, i64 21, i64 0 }, ptr %a756 call void @finch_str_concat(ptr %a754, ptr %a755, ptr %a756) store { ptr, i64, i64 } %t753, ptr %a757 call void @finch_str_drop(ptr %a757) %t758 = load { ptr, i64, i64 }, ptr %a754 %t759 = getelementptr inbounds %S.gen.StructDef, ptr %a559, i32 0, i32 3 %t760 = load i64, ptr %a747 %t761 = load { ptr, i64, i64 }, ptr %t759 %t762 = extractvalue { ptr, i64, i64 } %t761, 1 %t763 = icmp uge i64 %t760, %t762 br i1 %t763, label %range3053, label %inrange3054 range3053: call void @finch_panic_index(ptr @.str.1949, i64 1227, i64 %t760, i64 %t762) unreachable inrange3054: %t764 = extractvalue { ptr, i64, i64 } %t761, 0 %t765 = getelementptr inbounds i64, ptr %t764, i64 %t760 %t766 = load i64, ptr %t765 call void @finch_str_from_int(ptr %a767, i64 %t766) %t768 = load { ptr, i64, i64 }, ptr %a767 store { ptr, i64, i64 } %t758, ptr %a770 store { ptr, i64, i64 } %t768, ptr %a771 call void @finch_str_concat(ptr %a769, ptr %a770, ptr %a771) store { ptr, i64, i64 } %t758, ptr %a772 call void @finch_str_drop(ptr %a772) store { ptr, i64, i64 } %t768, ptr %a773 call void @finch_str_drop(ptr %a773) %t774 = load { ptr, i64, i64 }, ptr %a769 %t775 = call { ptr, i64, i64 } @finch.gen.op(ptr %t748, { ptr, i64, i64 } %t774) store { ptr, i64, i64 } %t774, ptr %a776 call void @finch_str_drop(ptr %a776) store { ptr, i64, i64 } %t775, ptr %a777 %t778 = load ptr, ptr %a1 %t779 = load ptr, ptr %a1 %t780 = load ptr, ptr %a1 %t781 = getelementptr inbounds %S.gen.StructDef, ptr %a559, i32 0, i32 12 %t782 = load i64, ptr %a747 %t783 = load { ptr, i64, i64 }, ptr %t781 %t784 = extractvalue { ptr, i64, i64 } %t783, 1 %t785 = icmp uge i64 %t782, %t784 br i1 %t785, label %range3055, label %inrange3056 range3055: call void @finch_panic_index(ptr @.str.1951, i64 1228, i64 %t782, i64 %t784) unreachable inrange3056: %t786 = extractvalue { ptr, i64, i64 } %t783, 0 %t787 = getelementptr inbounds %S.ast.Type, ptr %t786, i64 %t782 %t788 = load %S.ast.Type, ptr %t787 %t789 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t780, %S.ast.Type %t788) %t790 = load { ptr, i64, i64 }, ptr %a777 %t791 = call { ptr, i64, i64 } @finch.gen.load(ptr %t779, { ptr, i64, i64 } %t789, { ptr, i64, i64 } %t790) store { ptr, i64, i64 } %t789, ptr %a792 call void @finch_str_drop(ptr %a792) %t793 = getelementptr inbounds %S.gen.StructDef, ptr %a559, i32 0, i32 12 %t794 = load i64, ptr %a747 %t795 = load { ptr, i64, i64 }, ptr %t793 %t796 = extractvalue { ptr, i64, i64 } %t795, 1 %t797 = icmp uge i64 %t794, %t796 br i1 %t797, label %range3057, label %inrange3058 range3057: call void @finch_panic_index(ptr @.str.1952, i64 1228, i64 %t794, i64 %t796) unreachable inrange3058: %t798 = extractvalue { ptr, i64, i64 } %t795, 0 %t799 = getelementptr inbounds %S.ast.Type, ptr %t798, i64 %t794 %t800 = load %S.ast.Type, ptr %t799 call void @finch.gen.emitFormat(ptr %t778, { ptr, i64, i64 } { ptr @.str.1950, i64 4, i64 0 }, { ptr, i64, i64 } %t791, %S.ast.Type %t800, i1 true) store { ptr, i64, i64 } %t791, ptr %a801 call void @finch_str_drop(ptr %a801) call void @finch_str_drop(ptr %a777) br label %for.step3046 for.step3046: %t802 = load i64, ptr %a731 %t803 = add i64 %t802, 1 store i64 %t803, ptr %a731 br label %for.cond3044 for.end3047: %t804 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t804, { ptr, i64, i64 } { ptr @.str.1953, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1954, i64 1, i64 0 }) br label %endif3041 endif3041: %t805 = load ptr, ptr %a1 %t806 = load { ptr, i64, i64 }, ptr %a601 call void @finch.gen.br(ptr %t805, { ptr, i64, i64 } %t806) br label %for.step3031 for.step3031: %t807 = load i64, ptr %a693 %t808 = add i64 %t807, 1 store i64 %t808, ptr %a693 br label %for.cond3029 for.end3032: %t809 = load ptr, ptr %a1 %t810 = load { ptr, i64, i64 }, ptr %a598 call void @finch.gen.label(ptr %t809, { ptr, i64, i64 } %t810) %t811 = load ptr, ptr %a1 %t812 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 1 %t813 = load { ptr, i64, i64 }, ptr %t812 store { ptr, i64, i64 } %t813, ptr %a815 store { ptr, i64, i64 } { ptr @.str.1956, i64 3, i64 0 }, ptr %a816 call void @finch_str_concat(ptr %a814, ptr %a815, ptr %a816) %t817 = load { ptr, i64, i64 }, ptr %a814 call void @finch.gen.bufText(ptr %t811, { ptr, i64, i64 } { ptr @.str.1955, i64 4, i64 0 }, { ptr, i64, i64 } %t817) store { ptr, i64, i64 } %t817, ptr %a818 call void @finch_str_drop(ptr %a818) %t819 = load ptr, ptr %a1 %t820 = load { ptr, i64, i64 }, ptr %a601 call void @finch.gen.br(ptr %t819, { ptr, i64, i64 } %t820) %t821 = load ptr, ptr %a1 %t822 = load { ptr, i64, i64 }, ptr %a601 call void @finch.gen.label(ptr %t821, { ptr, i64, i64 } %t822) call void @finch.drop.arr_str(ptr %a603) call void @finch.drop.arr_str(ptr %a602) call void @finch_str_drop(ptr %a601) call void @finch_str_drop(ptr %a598) call void @finch_str_drop(ptr %a595) call void @finch_str_drop(ptr %a563) call void @finch.drop.S_gen_StructDef(ptr %a559) call void @finch.drop.S_gen_SumDef(ptr %a540) br label %endif3010 else3009: %t823 = load ptr, ptr %a1 %t824 = icmp eq ptr %t823, null br i1 %t824, label %panic3059, label %ok3060 panic3059: call void @finch_panic(ptr @.str.1957, i64 1239, ptr @.str.1958) unreachable ok3060: %t825 = getelementptr inbounds %S.gen.Gen, ptr %t823, i32 0, i32 16 %t826 = load ptr, ptr %a1 %t827 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t828 = load { ptr, i64, i64 }, ptr %t827 %t829 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t830 = load { ptr, i64, i64 }, ptr %t829 %t831 = call i64 @finch.gen.findStruct(ptr %t826, { ptr, i64, i64 } %t828, { ptr, i64, i64 } %t830) %t832 = load { ptr, i64, i64 }, ptr %t825 %t833 = extractvalue { ptr, i64, i64 } %t832, 1 %t834 = icmp uge i64 %t831, %t833 br i1 %t834, label %range3061, label %inrange3062 range3061: call void @finch_panic_index(ptr @.str.1959, i64 1239, i64 %t831, i64 %t833) unreachable inrange3062: %t835 = extractvalue { ptr, i64, i64 } %t832, 0 %t836 = getelementptr inbounds %S.gen.StructDef, ptr %t835, i64 %t831 %t837 = load %S.gen.StructDef, ptr %t836 store %S.gen.StructDef %t837, ptr %a838 call void @finch.copy.S_gen_StructDef(ptr %a839, ptr %a838) %t840 = load %S.gen.StructDef, ptr %a839 store %S.gen.StructDef %t840, ptr %a841 %t842 = load ptr, ptr %a1 %t843 = load %S.ast.Type, ptr %a2 %t844 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t842, %S.ast.Type %t843) store { ptr, i64, i64 } %t844, ptr %a845 %t846 = load ptr, ptr %a1 %t847 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 1 %t848 = load { ptr, i64, i64 }, ptr %t847 store { ptr, i64, i64 } %t848, ptr %a850 store { ptr, i64, i64 } { ptr @.str.1961, i64 1, i64 0 }, ptr %a851 call void @finch_str_concat(ptr %a849, ptr %a850, ptr %a851) %t852 = load { ptr, i64, i64 }, ptr %a849 call void @finch.gen.bufText(ptr %t846, { ptr, i64, i64 } { ptr @.str.1960, i64 4, i64 0 }, { ptr, i64, i64 } %t852) store { ptr, i64, i64 } %t852, ptr %a853 call void @finch_str_drop(ptr %a853) %t854 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 12 %t855 = getelementptr inbounds { ptr, i64, i64 }, ptr %t854, i32 0, i32 1 %t856 = load i64, ptr %t855 store i64 0, ptr %a857 br label %for.cond3063 for.cond3063: %t858 = load i64, ptr %a857 %t859 = icmp slt i64 %t858, %t856 br i1 %t859, label %for.body3064, label %for.end3066 for.body3064: store { ptr, i64, i64 } { ptr @.str.1962, i64 2, i64 0 }, ptr %a860 %t861 = load i64, ptr %a857 %t862 = icmp eq i64 %t861, 0 br i1 %t862, label %then3067, label %endif3069 then3067: %t863 = load { ptr, i64, i64 }, ptr %a860 store { ptr, i64, i64 } { ptr @.str.1963, i64 0, i64 0 }, ptr %a860 store { ptr, i64, i64 } %t863, ptr %a864 call void @finch_str_drop(ptr %a864) br label %endif3069 endif3069: %t865 = load ptr, ptr %a1 %t866 = load { ptr, i64, i64 }, ptr %a860 %t867 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 11 %t868 = load i64, ptr %a857 %t869 = load { ptr, i64, i64 }, ptr %t867 %t870 = extractvalue { ptr, i64, i64 } %t869, 1 %t871 = icmp uge i64 %t868, %t870 br i1 %t871, label %range3070, label %inrange3071 range3070: call void @finch_panic_index(ptr @.str.1965, i64 1247, i64 %t868, i64 %t870) unreachable inrange3071: %t872 = extractvalue { ptr, i64, i64 } %t869, 0 %t873 = getelementptr inbounds { ptr, i64, i64 }, ptr %t872, i64 %t868 %t874 = load { ptr, i64, i64 }, ptr %t873 store { ptr, i64, i64 } %t866, ptr %a876 store { ptr, i64, i64 } %t874, ptr %a877 call void @finch_str_concat(ptr %a875, ptr %a876, ptr %a877) %t878 = load { ptr, i64, i64 }, ptr %a875 store { ptr, i64, i64 } %t878, ptr %a880 store { ptr, i64, i64 } { ptr @.str.1966, i64 2, i64 0 }, ptr %a881 call void @finch_str_concat(ptr %a879, ptr %a880, ptr %a881) store { ptr, i64, i64 } %t878, ptr %a882 call void @finch_str_drop(ptr %a882) %t883 = load { ptr, i64, i64 }, ptr %a879 call void @finch.gen.bufText(ptr %t865, { ptr, i64, i64 } { ptr @.str.1964, i64 4, i64 0 }, { ptr, i64, i64 } %t883) store { ptr, i64, i64 } %t883, ptr %a884 call void @finch_str_drop(ptr %a884) %t885 = load ptr, ptr %a1 %t886 = load { ptr, i64, i64 }, ptr %a845 store { ptr, i64, i64 } { ptr @.str.1967, i64 23, i64 0 }, ptr %a888 store { ptr, i64, i64 } %t886, ptr %a889 call void @finch_str_concat(ptr %a887, ptr %a888, ptr %a889) %t890 = load { ptr, i64, i64 }, ptr %a887 store { ptr, i64, i64 } %t890, ptr %a892 store { ptr, i64, i64 } { ptr @.str.1968, i64 21, i64 0 }, ptr %a893 call void @finch_str_concat(ptr %a891, ptr %a892, ptr %a893) store { ptr, i64, i64 } %t890, ptr %a894 call void @finch_str_drop(ptr %a894) %t895 = load { ptr, i64, i64 }, ptr %a891 %t896 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 3 %t897 = load i64, ptr %a857 %t898 = load { ptr, i64, i64 }, ptr %t896 %t899 = extractvalue { ptr, i64, i64 } %t898, 1 %t900 = icmp uge i64 %t897, %t899 br i1 %t900, label %range3072, label %inrange3073 range3072: call void @finch_panic_index(ptr @.str.1969, i64 1248, i64 %t897, i64 %t899) unreachable inrange3073: %t901 = extractvalue { ptr, i64, i64 } %t898, 0 %t902 = getelementptr inbounds i64, ptr %t901, i64 %t897 %t903 = load i64, ptr %t902 call void @finch_str_from_int(ptr %a904, i64 %t903) %t905 = load { ptr, i64, i64 }, ptr %a904 store { ptr, i64, i64 } %t895, ptr %a907 store { ptr, i64, i64 } %t905, ptr %a908 call void @finch_str_concat(ptr %a906, ptr %a907, ptr %a908) store { ptr, i64, i64 } %t895, ptr %a909 call void @finch_str_drop(ptr %a909) store { ptr, i64, i64 } %t905, ptr %a910 call void @finch_str_drop(ptr %a910) %t911 = load { ptr, i64, i64 }, ptr %a906 %t912 = call { ptr, i64, i64 } @finch.gen.op(ptr %t885, { ptr, i64, i64 } %t911) store { ptr, i64, i64 } %t911, ptr %a913 call void @finch_str_drop(ptr %a913) store { ptr, i64, i64 } %t912, ptr %a914 %t915 = load ptr, ptr %a1 %t916 = load ptr, ptr %a1 %t917 = load ptr, ptr %a1 %t918 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 12 %t919 = load i64, ptr %a857 %t920 = load { ptr, i64, i64 }, ptr %t918 %t921 = extractvalue { ptr, i64, i64 } %t920, 1 %t922 = icmp uge i64 %t919, %t921 br i1 %t922, label %range3074, label %inrange3075 range3074: call void @finch_panic_index(ptr @.str.1971, i64 1249, i64 %t919, i64 %t921) unreachable inrange3075: %t923 = extractvalue { ptr, i64, i64 } %t920, 0 %t924 = getelementptr inbounds %S.ast.Type, ptr %t923, i64 %t919 %t925 = load %S.ast.Type, ptr %t924 %t926 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t917, %S.ast.Type %t925) %t927 = load { ptr, i64, i64 }, ptr %a914 %t928 = call { ptr, i64, i64 } @finch.gen.load(ptr %t916, { ptr, i64, i64 } %t926, { ptr, i64, i64 } %t927) store { ptr, i64, i64 } %t926, ptr %a929 call void @finch_str_drop(ptr %a929) %t930 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 12 %t931 = load i64, ptr %a857 %t932 = load { ptr, i64, i64 }, ptr %t930 %t933 = extractvalue { ptr, i64, i64 } %t932, 1 %t934 = icmp uge i64 %t931, %t933 br i1 %t934, label %range3076, label %inrange3077 range3076: call void @finch_panic_index(ptr @.str.1972, i64 1249, i64 %t931, i64 %t933) unreachable inrange3077: %t935 = extractvalue { ptr, i64, i64 } %t932, 0 %t936 = getelementptr inbounds %S.ast.Type, ptr %t935, i64 %t931 %t937 = load %S.ast.Type, ptr %t936 call void @finch.gen.emitFormat(ptr %t915, { ptr, i64, i64 } { ptr @.str.1970, i64 4, i64 0 }, { ptr, i64, i64 } %t928, %S.ast.Type %t937, i1 true) store { ptr, i64, i64 } %t928, ptr %a938 call void @finch_str_drop(ptr %a938) call void @finch_str_drop(ptr %a914) call void @finch_str_drop(ptr %a860) br label %for.step3065 for.step3065: %t939 = load i64, ptr %a857 %t940 = add i64 %t939, 1 store i64 %t940, ptr %a857 br label %for.cond3063 for.end3066: %t941 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t941, { ptr, i64, i64 } { ptr @.str.1973, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1974, i64 1, i64 0 }) call void @finch_str_drop(ptr %a845) call void @finch.drop.S_gen_StructDef(ptr %a841) br label %endif3010 endif3010: br label %endif2993 endif2993: br label %endif2968 endif2968: br label %endif2959 endif2959: %t942 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t942, { ptr, i64, i64 } { ptr @.str.1975, i64 8, i64 0 }) %t943 = load ptr, ptr %a1 %t944 = load %S.gen.Saved, ptr %a32 %t945 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1976, i64 21, i64 0 }, ptr %a947 store { ptr, i64, i64 } %t945, ptr %a948 call void @finch_str_concat(ptr %a946, ptr %a947, ptr %a948) %t949 = load { ptr, i64, i64 }, ptr %a946 store { ptr, i64, i64 } %t949, ptr %a951 store { ptr, i64, i64 } { ptr @.str.1977, i64 18, i64 0 }, ptr %a952 call void @finch_str_concat(ptr %a950, ptr %a951, ptr %a952) store { ptr, i64, i64 } %t949, ptr %a953 call void @finch_str_drop(ptr %a953) %t954 = load { ptr, i64, i64 }, ptr %a950 call void @finch.gen.endHelper(ptr %t943, %S.gen.Saved %t944, { ptr, i64, i64 } %t954) store { ptr, i64, i64 } %t954, ptr %a955 call void @finch_str_drop(ptr %a955) %t956 = load { ptr, i64, i64 }, ptr %a10 call void @finch.drop.S_gen_Saved(ptr %a32) ret { ptr, i64, i64 } %t956 } define internal { ptr, i64, i64 } @finch.gen.intCast(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.ast.Type %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca %S.ast.Type, align 16 %a7 = alloca i64, align 16 %a10 = alloca i64, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 %t5 = load %S.ast.Type, ptr %a3 %t6 = call i64 @finch.gen.bitsOf(%S.ast.Type %t5) store i64 %t6, ptr %a7 %t8 = load %S.ast.Type, ptr %a4 %t9 = call i64 @finch.gen.bitsOf(%S.ast.Type %t8) store i64 %t9, ptr %a10 %t11 = load i64, ptr %a7 %t12 = load i64, ptr %a10 %t13 = icmp eq i64 %t11, %t12 br i1 %t13, label %then3078, label %endif3080 then3078: %t14 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t14, ptr %a15 call void @finch_str_copy(ptr %a16, ptr %a15) %t17 = load { ptr, i64, i64 }, ptr %a16 ret { ptr, i64, i64 } %t17 endif3080: %t18 = load i64, ptr %a10 %t19 = load i64, ptr %a7 %t20 = icmp slt i64 %t18, %t19 br i1 %t20, label %then3081, label %endif3083 then3081: %t21 = load ptr, ptr %a1 %t22 = load ptr, ptr %a1 %t23 = load %S.ast.Type, ptr %a3 %t24 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t22, %S.ast.Type %t23) store { ptr, i64, i64 } { ptr @.str.1978, i64 6, i64 0 }, ptr %a26 store { ptr, i64, i64 } %t24, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) store { ptr, i64, i64 } %t24, ptr %a28 call void @finch_str_drop(ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t29, ptr %a31 store { ptr, i64, i64 } { ptr @.str.1979, i64 1, i64 0 }, ptr %a32 call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) store { ptr, i64, i64 } %t29, ptr %a33 call void @finch_str_drop(ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a30 %t35 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t34, ptr %a37 store { ptr, i64, i64 } %t35, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) store { ptr, i64, i64 } %t34, ptr %a39 call void @finch_str_drop(ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t40, ptr %a42 store { ptr, i64, i64 } { ptr @.str.1980, i64 4, i64 0 }, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) store { ptr, i64, i64 } %t40, ptr %a44 call void @finch_str_drop(ptr %a44) %t45 = load { ptr, i64, i64 }, ptr %a41 %t46 = load ptr, ptr %a1 %t47 = load %S.ast.Type, ptr %a4 %t48 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t46, %S.ast.Type %t47) store { ptr, i64, i64 } %t45, ptr %a50 store { ptr, i64, i64 } %t48, ptr %a51 call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) store { ptr, i64, i64 } %t45, ptr %a52 call void @finch_str_drop(ptr %a52) store { ptr, i64, i64 } %t48, ptr %a53 call void @finch_str_drop(ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a49 %t55 = call { ptr, i64, i64 } @finch.gen.op(ptr %t21, { ptr, i64, i64 } %t54) store { ptr, i64, i64 } %t54, ptr %a56 call void @finch_str_drop(ptr %a56) ret { ptr, i64, i64 } %t55 endif3083: %t57 = load %S.ast.Type, ptr %a3 %t58 = call i1 @finch.gen.isSigned(%S.ast.Type %t57) br i1 %t58, label %then3084, label %endif3086 then3084: %t59 = load ptr, ptr %a1 %t60 = load ptr, ptr %a1 %t61 = load %S.ast.Type, ptr %a3 %t62 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t60, %S.ast.Type %t61) store { ptr, i64, i64 } { ptr @.str.1981, i64 5, i64 0 }, ptr %a64 store { ptr, i64, i64 } %t62, ptr %a65 call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) store { ptr, i64, i64 } %t62, ptr %a66 call void @finch_str_drop(ptr %a66) %t67 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } %t67, ptr %a69 store { ptr, i64, i64 } { ptr @.str.1982, i64 1, i64 0 }, ptr %a70 call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) store { ptr, i64, i64 } %t67, ptr %a71 call void @finch_str_drop(ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a68 %t73 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t72, ptr %a75 store { ptr, i64, i64 } %t73, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) store { ptr, i64, i64 } %t72, ptr %a77 call void @finch_str_drop(ptr %a77) %t78 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } %t78, ptr %a80 store { ptr, i64, i64 } { ptr @.str.1983, i64 4, i64 0 }, ptr %a81 call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) store { ptr, i64, i64 } %t78, ptr %a82 call void @finch_str_drop(ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a79 %t84 = load ptr, ptr %a1 %t85 = load %S.ast.Type, ptr %a4 %t86 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t84, %S.ast.Type %t85) store { ptr, i64, i64 } %t83, ptr %a88 store { ptr, i64, i64 } %t86, ptr %a89 call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) store { ptr, i64, i64 } %t83, ptr %a90 call void @finch_str_drop(ptr %a90) store { ptr, i64, i64 } %t86, ptr %a91 call void @finch_str_drop(ptr %a91) %t92 = load { ptr, i64, i64 }, ptr %a87 %t93 = call { ptr, i64, i64 } @finch.gen.op(ptr %t59, { ptr, i64, i64 } %t92) store { ptr, i64, i64 } %t92, ptr %a94 call void @finch_str_drop(ptr %a94) ret { ptr, i64, i64 } %t93 endif3086: %t95 = load ptr, ptr %a1 %t96 = load ptr, ptr %a1 %t97 = load %S.ast.Type, ptr %a3 %t98 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t96, %S.ast.Type %t97) store { ptr, i64, i64 } { ptr @.str.1984, i64 5, i64 0 }, ptr %a100 store { ptr, i64, i64 } %t98, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) store { ptr, i64, i64 } %t98, ptr %a102 call void @finch_str_drop(ptr %a102) %t103 = load { ptr, i64, i64 }, ptr %a99 store { ptr, i64, i64 } %t103, ptr %a105 store { ptr, i64, i64 } { ptr @.str.1985, i64 1, i64 0 }, ptr %a106 call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) store { ptr, i64, i64 } %t103, ptr %a107 call void @finch_str_drop(ptr %a107) %t108 = load { ptr, i64, i64 }, ptr %a104 %t109 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t108, ptr %a111 store { ptr, i64, i64 } %t109, ptr %a112 call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) store { ptr, i64, i64 } %t108, ptr %a113 call void @finch_str_drop(ptr %a113) %t114 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } %t114, ptr %a116 store { ptr, i64, i64 } { ptr @.str.1986, i64 4, i64 0 }, ptr %a117 call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) store { ptr, i64, i64 } %t114, ptr %a118 call void @finch_str_drop(ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a115 %t120 = load ptr, ptr %a1 %t121 = load %S.ast.Type, ptr %a4 %t122 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t120, %S.ast.Type %t121) store { ptr, i64, i64 } %t119, ptr %a124 store { ptr, i64, i64 } %t122, ptr %a125 call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) store { ptr, i64, i64 } %t119, ptr %a126 call void @finch_str_drop(ptr %a126) store { ptr, i64, i64 } %t122, ptr %a127 call void @finch_str_drop(ptr %a127) %t128 = load { ptr, i64, i64 }, ptr %a123 %t129 = call { ptr, i64, i64 } @finch.gen.op(ptr %t95, { ptr, i64, i64 } %t128) store { ptr, i64, i64 } %t128, ptr %a130 call void @finch_str_drop(ptr %a130) ret { ptr, i64, i64 } %t129 } define internal { ptr, i64, i64 } @finch.gen.floatCast(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.ast.Type %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca %S.ast.Type, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 %t5 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t8 = load { ptr, i64, i64 }, ptr %t7 store { ptr, i64, i64 } %t6, ptr %a9 store { ptr, i64, i64 } %t8, ptr %a10 %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then3087, label %endif3089 then3087: %t13 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t13, ptr %a14 call void @finch_str_copy(ptr %a15, ptr %a14) %t16 = load { ptr, i64, i64 }, ptr %a15 ret { ptr, i64, i64 } %t16 endif3089: %t17 = load %S.ast.Type, ptr %a4 %t18 = call i64 @finch.gen.bitsOf(%S.ast.Type %t17) %t19 = load %S.ast.Type, ptr %a3 %t20 = call i64 @finch.gen.bitsOf(%S.ast.Type %t19) %t21 = icmp sgt i64 %t18, %t20 br i1 %t21, label %then3090, label %endif3092 then3090: %t22 = load ptr, ptr %a1 %t23 = load ptr, ptr %a1 %t24 = load %S.ast.Type, ptr %a3 %t25 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t23, %S.ast.Type %t24) store { ptr, i64, i64 } { ptr @.str.1987, i64 6, i64 0 }, ptr %a27 store { ptr, i64, i64 } %t25, ptr %a28 call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) store { ptr, i64, i64 } %t25, ptr %a29 call void @finch_str_drop(ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t30, ptr %a32 store { ptr, i64, i64 } { ptr @.str.1988, i64 1, i64 0 }, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) store { ptr, i64, i64 } %t30, ptr %a34 call void @finch_str_drop(ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a31 %t36 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t35, ptr %a38 store { ptr, i64, i64 } %t36, ptr %a39 call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) store { ptr, i64, i64 } %t35, ptr %a40 call void @finch_str_drop(ptr %a40) %t41 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t41, ptr %a43 store { ptr, i64, i64 } { ptr @.str.1989, i64 4, i64 0 }, ptr %a44 call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) store { ptr, i64, i64 } %t41, ptr %a45 call void @finch_str_drop(ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a42 %t47 = load ptr, ptr %a1 %t48 = load %S.ast.Type, ptr %a4 %t49 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t47, %S.ast.Type %t48) store { ptr, i64, i64 } %t46, ptr %a51 store { ptr, i64, i64 } %t49, ptr %a52 call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) store { ptr, i64, i64 } %t46, ptr %a53 call void @finch_str_drop(ptr %a53) store { ptr, i64, i64 } %t49, ptr %a54 call void @finch_str_drop(ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a50 %t56 = call { ptr, i64, i64 } @finch.gen.op(ptr %t22, { ptr, i64, i64 } %t55) store { ptr, i64, i64 } %t55, ptr %a57 call void @finch_str_drop(ptr %a57) ret { ptr, i64, i64 } %t56 endif3092: %t58 = load ptr, ptr %a1 %t59 = load ptr, ptr %a1 %t60 = load %S.ast.Type, ptr %a3 %t61 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t59, %S.ast.Type %t60) store { ptr, i64, i64 } { ptr @.str.1990, i64 8, i64 0 }, ptr %a63 store { ptr, i64, i64 } %t61, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) store { ptr, i64, i64 } %t61, ptr %a65 call void @finch_str_drop(ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a62 store { ptr, i64, i64 } %t66, ptr %a68 store { ptr, i64, i64 } { ptr @.str.1991, i64 1, i64 0 }, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) store { ptr, i64, i64 } %t66, ptr %a70 call void @finch_str_drop(ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a67 %t72 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t71, ptr %a74 store { ptr, i64, i64 } %t72, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) store { ptr, i64, i64 } %t71, ptr %a76 call void @finch_str_drop(ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a73 store { ptr, i64, i64 } %t77, ptr %a79 store { ptr, i64, i64 } { ptr @.str.1992, i64 4, i64 0 }, ptr %a80 call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) store { ptr, i64, i64 } %t77, ptr %a81 call void @finch_str_drop(ptr %a81) %t82 = load { ptr, i64, i64 }, ptr %a78 %t83 = load ptr, ptr %a1 %t84 = load %S.ast.Type, ptr %a4 %t85 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t83, %S.ast.Type %t84) store { ptr, i64, i64 } %t82, ptr %a87 store { ptr, i64, i64 } %t85, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) store { ptr, i64, i64 } %t82, ptr %a89 call void @finch_str_drop(ptr %a89) store { ptr, i64, i64 } %t85, ptr %a90 call void @finch_str_drop(ptr %a90) %t91 = load { ptr, i64, i64 }, ptr %a86 %t92 = call { ptr, i64, i64 } @finch.gen.op(ptr %t58, { ptr, i64, i64 } %t91) store { ptr, i64, i64 } %t91, ptr %a93 call void @finch_str_drop(ptr %a93) ret { ptr, i64, i64 } %t92 } define internal { ptr, i64, i64 } @finch.gen.intToFloat(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.ast.Type %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca %S.ast.Type, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 %t5 = load %S.ast.Type, ptr %a3 %t6 = call i1 @finch.gen.isSigned(%S.ast.Type %t5) br i1 %t6, label %then3093, label %endif3095 then3093: %t7 = load ptr, ptr %a1 %t8 = load ptr, ptr %a1 %t9 = load %S.ast.Type, ptr %a3 %t10 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t8, %S.ast.Type %t9) store { ptr, i64, i64 } { ptr @.str.1993, i64 7, i64 0 }, ptr %a12 store { ptr, i64, i64 } %t10, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) store { ptr, i64, i64 } %t10, ptr %a14 call void @finch_str_drop(ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t15, ptr %a17 store { ptr, i64, i64 } { ptr @.str.1994, i64 1, i64 0 }, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) store { ptr, i64, i64 } %t15, ptr %a19 call void @finch_str_drop(ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a16 %t21 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t20, ptr %a23 store { ptr, i64, i64 } %t21, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) store { ptr, i64, i64 } %t20, ptr %a25 call void @finch_str_drop(ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t26, ptr %a28 store { ptr, i64, i64 } { ptr @.str.1995, i64 4, i64 0 }, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) store { ptr, i64, i64 } %t26, ptr %a30 call void @finch_str_drop(ptr %a30) %t31 = load { ptr, i64, i64 }, ptr %a27 %t32 = load ptr, ptr %a1 %t33 = load %S.ast.Type, ptr %a4 %t34 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t32, %S.ast.Type %t33) store { ptr, i64, i64 } %t31, ptr %a36 store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) store { ptr, i64, i64 } %t31, ptr %a38 call void @finch_str_drop(ptr %a38) store { ptr, i64, i64 } %t34, ptr %a39 call void @finch_str_drop(ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a35 %t41 = call { ptr, i64, i64 } @finch.gen.op(ptr %t7, { ptr, i64, i64 } %t40) store { ptr, i64, i64 } %t40, ptr %a42 call void @finch_str_drop(ptr %a42) ret { ptr, i64, i64 } %t41 endif3095: %t43 = load ptr, ptr %a1 %t44 = load ptr, ptr %a1 %t45 = load %S.ast.Type, ptr %a3 %t46 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t44, %S.ast.Type %t45) store { ptr, i64, i64 } { ptr @.str.1996, i64 7, i64 0 }, ptr %a48 store { ptr, i64, i64 } %t46, ptr %a49 call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) store { ptr, i64, i64 } %t46, ptr %a50 call void @finch_str_drop(ptr %a50) %t51 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t51, ptr %a53 store { ptr, i64, i64 } { ptr @.str.1997, i64 1, i64 0 }, ptr %a54 call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) store { ptr, i64, i64 } %t51, ptr %a55 call void @finch_str_drop(ptr %a55) %t56 = load { ptr, i64, i64 }, ptr %a52 %t57 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t56, ptr %a59 store { ptr, i64, i64 } %t57, ptr %a60 call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) store { ptr, i64, i64 } %t56, ptr %a61 call void @finch_str_drop(ptr %a61) %t62 = load { ptr, i64, i64 }, ptr %a58 store { ptr, i64, i64 } %t62, ptr %a64 store { ptr, i64, i64 } { ptr @.str.1998, i64 4, i64 0 }, ptr %a65 call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) store { ptr, i64, i64 } %t62, ptr %a66 call void @finch_str_drop(ptr %a66) %t67 = load { ptr, i64, i64 }, ptr %a63 %t68 = load ptr, ptr %a1 %t69 = load %S.ast.Type, ptr %a4 %t70 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t68, %S.ast.Type %t69) store { ptr, i64, i64 } %t67, ptr %a72 store { ptr, i64, i64 } %t70, ptr %a73 call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) store { ptr, i64, i64 } %t67, ptr %a74 call void @finch_str_drop(ptr %a74) store { ptr, i64, i64 } %t70, ptr %a75 call void @finch_str_drop(ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a71 %t77 = call { ptr, i64, i64 } @finch.gen.op(ptr %t43, { ptr, i64, i64 } %t76) store { ptr, i64, i64 } %t76, ptr %a78 call void @finch_str_drop(ptr %a78) ret { ptr, i64, i64 } %t77 } define internal void @finch.copy.S_gen_Val(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Val, ptr %src store %S.gen.Val %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Val, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Val, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Val, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Val, ptr %src, i32 0, i32 1 call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) ret void } define internal %S.gen.Val @finch.gen.coerce(ptr %p0, %S.gen.Val %p1, %S.ast.Type %p2, %S.ast.Node %p3, { ptr, i64, i64 } %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.Val, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca %S.ast.Node, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca %S.gen.Val, align 16 %a12 = alloca %S.gen.Val, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca %S.ast.Type, align 16 %a31 = alloca %S.ast.Type, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca %S.ast.Type, align 16 %a67 = alloca %S.ast.Type, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca %S.ast.Type, align 16 %a93 = alloca %S.ast.Type, align 16 %a110 = alloca %S.ast.Type, align 16 %a111 = alloca %S.ast.Type, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca %S.ast.Type, align 16 %a162 = alloca %S.ast.Type, align 16 %a175 = alloca %S.ast.Type, align 16 %a176 = alloca %S.ast.Type, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca %S.ast.Type, align 16 %a203 = alloca %S.ast.Type, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca %S.ast.Type, align 16 %a233 = alloca %S.ast.Type, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca %S.gen.Val, align 16 %a348 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.gen.Val %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store %S.ast.Node %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 %t6 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t7 = load %S.ast.Type, ptr %t6 %t8 = load %S.ast.Type, ptr %a3 %t9 = call i1 @finch.ast.same(%S.ast.Type %t7, %S.ast.Type %t8) br i1 %t9, label %then3096, label %endif3098 then3096: %t10 = load %S.gen.Val, ptr %a2 store %S.gen.Val %t10, ptr %a11 call void @finch.copy.S_gen_Val(ptr %a12, ptr %a11) %t13 = load %S.gen.Val, ptr %a12 ret %S.gen.Val %t13 endif3098: %t14 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t15 = getelementptr inbounds %S.ast.Type, ptr %t14, i32 0, i32 0 %t16 = load { ptr, i64, i64 }, ptr %t15 store { ptr, i64, i64 } %t16, ptr %a17 store { ptr, i64, i64 } { ptr @.str.1999, i64 4, i64 0 }, ptr %a18 %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) %t20 = icmp ne i32 %t19, 0 br label %logic.from3099 logic.from3099: br i1 %t20, label %logic.rhs3100, label %logic.end3101 logic.rhs3100: %t21 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.2000, i64 3, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 br label %logic.rend3102 logic.rend3102: br label %logic.end3101 logic.end3101: %t27 = phi i1 [ false, %logic.from3099 ], [ %t26, %logic.rend3102 ] br i1 %t27, label %then3103, label %endif3105 then3103: %t28 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } { ptr @.str.2001, i64 4, i64 0 }, 0 %t29 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t29, ptr %a30 call void @finch.copy.S_ast_Type(ptr %a31, ptr %a30) %t32 = load %S.ast.Type, ptr %a31 %t33 = insertvalue %S.gen.Val %t28, %S.ast.Type %t32, 1 ret %S.gen.Val %t33 endif3105: %t34 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t35 = getelementptr inbounds %S.ast.Type, ptr %t34, i32 0, i32 0 %t36 = load { ptr, i64, i64 }, ptr %t35 store { ptr, i64, i64 } %t36, ptr %a37 store { ptr, i64, i64 } { ptr @.str.2002, i64 3, i64 0 }, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 br label %logic.from3106 logic.from3106: br i1 %t40, label %logic.rhs3107, label %logic.end3108 logic.rhs3107: %t41 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t42 = load { ptr, i64, i64 }, ptr %t41 store { ptr, i64, i64 } %t42, ptr %a43 store { ptr, i64, i64 } { ptr @.str.2003, i64 3, i64 0 }, ptr %a44 %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) %t46 = icmp ne i32 %t45, 0 br label %logic.rend3109 logic.rend3109: br label %logic.end3108 logic.end3108: %t47 = phi i1 [ false, %logic.from3106 ], [ %t46, %logic.rend3109 ] br label %logic.from3110 logic.from3110: br i1 %t47, label %logic.rhs3111, label %logic.end3112 logic.rhs3111: %t48 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t49 = getelementptr inbounds %S.ast.Type, ptr %t48, i32 0, i32 1 %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i32 0, i32 1 %t51 = load i64, ptr %t50 %t52 = icmp eq i64 %t51, 0 br label %logic.from3113 logic.from3113: br i1 %t52, label %logic.end3115, label %logic.rhs3114 logic.rhs3114: %t53 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 %t55 = load i64, ptr %t54 %t56 = icmp eq i64 %t55, 0 br label %logic.rend3116 logic.rend3116: br label %logic.end3115 logic.end3115: %t57 = phi i1 [ true, %logic.from3113 ], [ %t56, %logic.rend3116 ] br label %logic.rend3117 logic.rend3117: br label %logic.end3112 logic.end3112: %t58 = phi i1 [ false, %logic.from3110 ], [ %t57, %logic.rend3117 ] br i1 %t58, label %then3118, label %endif3120 then3118: %t59 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } %t60, ptr %a61 call void @finch_str_copy(ptr %a62, ptr %a61) %t63 = load { ptr, i64, i64 }, ptr %a62 %t64 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t63, 0 %t65 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t65, ptr %a66 call void @finch.copy.S_ast_Type(ptr %a67, ptr %a66) %t68 = load %S.ast.Type, ptr %a67 %t69 = insertvalue %S.gen.Val %t64, %S.ast.Type %t68, 1 ret %S.gen.Val %t69 endif3120: %t70 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t71 = load %S.ast.Type, ptr %t70 %t72 = call i1 @finch.gen.isInt(%S.ast.Type %t71) br label %logic.from3121 logic.from3121: br i1 %t72, label %logic.rhs3122, label %logic.end3123 logic.rhs3122: %t73 = load %S.ast.Type, ptr %a3 %t74 = call i1 @finch.gen.isInt(%S.ast.Type %t73) br label %logic.rend3124 logic.rend3124: br label %logic.end3123 logic.end3123: %t75 = phi i1 [ false, %logic.from3121 ], [ %t74, %logic.rend3124 ] br i1 %t75, label %then3125, label %endif3127 then3125: %t76 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 %t77 = load i1, ptr %t76 br label %logic.from3128 logic.from3128: br i1 %t77, label %logic.rhs3129, label %logic.end3130 logic.rhs3129: %t78 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t79 = load { ptr, i64, i64 }, ptr %t78 %t80 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t81 = load %S.ast.Type, ptr %t80 %t82 = load %S.ast.Type, ptr %a3 %t83 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t79, %S.ast.Type %t81, %S.ast.Type %t82) br label %logic.rend3131 logic.rend3131: br label %logic.end3130 logic.end3130: %t84 = phi i1 [ false, %logic.from3128 ], [ %t83, %logic.rend3131 ] br i1 %t84, label %then3132, label %endif3134 then3132: %t85 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t86 = load { ptr, i64, i64 }, ptr %t85 store { ptr, i64, i64 } %t86, ptr %a87 call void @finch_str_copy(ptr %a88, ptr %a87) %t89 = load { ptr, i64, i64 }, ptr %a88 %t90 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t89, 0 %t91 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t91, ptr %a92 call void @finch.copy.S_ast_Type(ptr %a93, ptr %a92) %t94 = load %S.ast.Type, ptr %a93 %t95 = insertvalue %S.gen.Val %t90, %S.ast.Type %t94, 1 %t96 = insertvalue %S.gen.Val %t95, i1 true, 3 ret %S.gen.Val %t96 endif3134: %t97 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t98 = load %S.ast.Type, ptr %t97 %t99 = load %S.ast.Type, ptr %a3 %t100 = call i1 @finch.gen.widens(%S.ast.Type %t98, %S.ast.Type %t99) br i1 %t100, label %then3135, label %endif3137 then3135: %t101 = load ptr, ptr %a1 %t102 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t103 = load { ptr, i64, i64 }, ptr %t102 %t104 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t105 = load %S.ast.Type, ptr %t104 %t106 = load %S.ast.Type, ptr %a3 %t107 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t101, { ptr, i64, i64 } %t103, %S.ast.Type %t105, %S.ast.Type %t106) %t108 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t107, 0 %t109 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t109, ptr %a110 call void @finch.copy.S_ast_Type(ptr %a111, ptr %a110) %t112 = load %S.ast.Type, ptr %a111 %t113 = insertvalue %S.gen.Val %t108, %S.ast.Type %t112, 1 ret %S.gen.Val %t113 endif3137: %t114 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 %t115 = load i1, ptr %t114 br i1 %t115, label %then3138, label %endif3140 then3138: %t116 = load ptr, ptr %a1 %t117 = load %S.ast.Node, ptr %a4 %t118 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t119 = load { ptr, i64, i64 }, ptr %t118 store { ptr, i64, i64 } { ptr @.str.2004, i64 11, i64 0 }, ptr %a121 store { ptr, i64, i64 } %t119, ptr %a122 call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) %t123 = load { ptr, i64, i64 }, ptr %a120 store { ptr, i64, i64 } %t123, ptr %a125 store { ptr, i64, i64 } { ptr @.str.2005, i64 16, i64 0 }, ptr %a126 call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) store { ptr, i64, i64 } %t123, ptr %a127 call void @finch_str_drop(ptr %a127) %t128 = load { ptr, i64, i64 }, ptr %a124 %t129 = load %S.ast.Type, ptr %a3 %t130 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t129) store { ptr, i64, i64 } %t128, ptr %a132 store { ptr, i64, i64 } %t130, ptr %a133 call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) store { ptr, i64, i64 } %t128, ptr %a134 call void @finch_str_drop(ptr %a134) store { ptr, i64, i64 } %t130, ptr %a135 call void @finch_str_drop(ptr %a135) %t136 = load { ptr, i64, i64 }, ptr %a131 call void @finch.gen.fail(ptr %t116, %S.ast.Node %t117, { ptr, i64, i64 } %t136) store { ptr, i64, i64 } %t136, ptr %a137 call void @finch_str_drop(ptr %a137) br label %endif3140 endif3140: br label %endif3127 endif3127: %t138 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t139 = load %S.ast.Type, ptr %t138 %t140 = call i1 @finch.gen.isInt(%S.ast.Type %t139) br label %logic.from3141 logic.from3141: br i1 %t140, label %logic.rhs3142, label %logic.end3143 logic.rhs3142: %t141 = load %S.ast.Type, ptr %a3 %t142 = call i1 @finch.gen.isFloat(%S.ast.Type %t141) br label %logic.rend3144 logic.rend3144: br label %logic.end3143 logic.end3143: %t143 = phi i1 [ false, %logic.from3141 ], [ %t142, %logic.rend3144 ] br i1 %t143, label %then3145, label %endif3147 then3145: %t144 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 %t145 = load i1, ptr %t144 br label %logic.from3148 logic.from3148: br i1 %t145, label %logic.rhs3149, label %logic.end3150 logic.rhs3149: %t146 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t147 = load { ptr, i64, i64 }, ptr %t146 store { ptr, i64, i64 } %t147, ptr %a148 store { ptr, i64, i64 } { ptr @.str.2006, i64 5, i64 0 }, ptr %a149 %t150 = call i32 @finch_str_eq(ptr %a148, ptr %a149) %t151 = icmp ne i32 %t150, 0 br label %logic.rend3151 logic.rend3151: br label %logic.end3150 logic.end3150: %t152 = phi i1 [ false, %logic.from3148 ], [ %t151, %logic.rend3151 ] br i1 %t152, label %then3152, label %endif3154 then3152: %t153 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t154 = load { ptr, i64, i64 }, ptr %t153 store { ptr, i64, i64 } %t154, ptr %a156 store { ptr, i64, i64 } { ptr @.str.2007, i64 2, i64 0 }, ptr %a157 call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) %t158 = load { ptr, i64, i64 }, ptr %a155 %t159 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t158, 0 %t160 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t160, ptr %a161 call void @finch.copy.S_ast_Type(ptr %a162, ptr %a161) %t163 = load %S.ast.Type, ptr %a162 %t164 = insertvalue %S.gen.Val %t159, %S.ast.Type %t163, 1 %t165 = insertvalue %S.gen.Val %t164, i1 true, 3 ret %S.gen.Val %t165 endif3154: %t166 = load ptr, ptr %a1 %t167 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t168 = load { ptr, i64, i64 }, ptr %t167 %t169 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t170 = load %S.ast.Type, ptr %t169 %t171 = load %S.ast.Type, ptr %a3 %t172 = call { ptr, i64, i64 } @finch.gen.intToFloat(ptr %t166, { ptr, i64, i64 } %t168, %S.ast.Type %t170, %S.ast.Type %t171) %t173 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t172, 0 %t174 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t174, ptr %a175 call void @finch.copy.S_ast_Type(ptr %a176, ptr %a175) %t177 = load %S.ast.Type, ptr %a176 %t178 = insertvalue %S.gen.Val %t173, %S.ast.Type %t177, 1 ret %S.gen.Val %t178 endif3147: %t179 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t180 = getelementptr inbounds %S.ast.Type, ptr %t179, i32 0, i32 0 %t181 = load { ptr, i64, i64 }, ptr %t180 store { ptr, i64, i64 } %t181, ptr %a182 store { ptr, i64, i64 } { ptr @.str.2008, i64 3, i64 0 }, ptr %a183 %t184 = call i32 @finch_str_eq(ptr %a182, ptr %a183) %t185 = icmp ne i32 %t184, 0 br label %logic.from3155 logic.from3155: br i1 %t185, label %logic.rhs3156, label %logic.end3157 logic.rhs3156: %t186 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t187 = load { ptr, i64, i64 }, ptr %t186 store { ptr, i64, i64 } %t187, ptr %a188 store { ptr, i64, i64 } { ptr @.str.2009, i64 5, i64 0 }, ptr %a189 %t190 = call i32 @finch_str_eq(ptr %a188, ptr %a189) %t191 = icmp ne i32 %t190, 0 br label %logic.rend3158 logic.rend3158: br label %logic.end3157 logic.end3157: %t192 = phi i1 [ false, %logic.from3155 ], [ %t191, %logic.rend3158 ] br i1 %t192, label %then3159, label %endif3161 then3159: %t193 = load ptr, ptr %a1 %t194 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t195 = load { ptr, i64, i64 }, ptr %t194 %t196 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t197 = load %S.ast.Type, ptr %t196 %t198 = load %S.ast.Type, ptr %a3 %t199 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t193, { ptr, i64, i64 } %t195, %S.ast.Type %t197, %S.ast.Type %t198) %t200 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t199, 0 %t201 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t201, ptr %a202 call void @finch.copy.S_ast_Type(ptr %a203, ptr %a202) %t204 = load %S.ast.Type, ptr %a203 %t205 = insertvalue %S.gen.Val %t200, %S.ast.Type %t204, 1 ret %S.gen.Val %t205 endif3161: %t206 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t207 = getelementptr inbounds %S.ast.Type, ptr %t206, i32 0, i32 0 %t208 = load { ptr, i64, i64 }, ptr %t207 store { ptr, i64, i64 } %t208, ptr %a209 store { ptr, i64, i64 } { ptr @.str.2010, i64 5, i64 0 }, ptr %a210 %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) %t212 = icmp ne i32 %t211, 0 br label %logic.from3162 logic.from3162: br i1 %t212, label %logic.rhs3163, label %logic.end3164 logic.rhs3163: %t213 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t214 = load { ptr, i64, i64 }, ptr %t213 store { ptr, i64, i64 } %t214, ptr %a215 store { ptr, i64, i64 } { ptr @.str.2011, i64 3, i64 0 }, ptr %a216 %t217 = call i32 @finch_str_eq(ptr %a215, ptr %a216) %t218 = icmp ne i32 %t217, 0 br label %logic.rend3165 logic.rend3165: br label %logic.end3164 logic.end3164: %t219 = phi i1 [ false, %logic.from3162 ], [ %t218, %logic.rend3165 ] br label %logic.from3166 logic.from3166: br i1 %t219, label %logic.rhs3167, label %logic.end3168 logic.rhs3167: %t220 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 %t221 = load i1, ptr %t220 br label %logic.rend3169 logic.rend3169: br label %logic.end3168 logic.end3168: %t222 = phi i1 [ false, %logic.from3166 ], [ %t221, %logic.rend3169 ] br i1 %t222, label %then3170, label %endif3172 then3170: %t223 = load ptr, ptr %a1 %t224 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t225 = load { ptr, i64, i64 }, ptr %t224 %t226 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t227 = load %S.ast.Type, ptr %t226 %t228 = load %S.ast.Type, ptr %a3 %t229 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t223, { ptr, i64, i64 } %t225, %S.ast.Type %t227, %S.ast.Type %t228) %t230 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t229, 0 %t231 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t231, ptr %a232 call void @finch.copy.S_ast_Type(ptr %a233, ptr %a232) %t234 = load %S.ast.Type, ptr %a233 %t235 = insertvalue %S.gen.Val %t230, %S.ast.Type %t234, 1 ret %S.gen.Val %t235 endif3172: %t236 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t236, ptr %a238 store { ptr, i64, i64 } { ptr @.str.2012, i64 9, i64 0 }, ptr %a239 call void @finch_str_concat(ptr %a237, ptr %a238, ptr %a239) %t240 = load { ptr, i64, i64 }, ptr %a237 %t241 = load %S.ast.Type, ptr %a3 %t242 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t241) store { ptr, i64, i64 } %t240, ptr %a244 store { ptr, i64, i64 } %t242, ptr %a245 call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245) store { ptr, i64, i64 } %t240, ptr %a246 call void @finch_str_drop(ptr %a246) store { ptr, i64, i64 } %t242, ptr %a247 call void @finch_str_drop(ptr %a247) %t248 = load { ptr, i64, i64 }, ptr %a243 store { ptr, i64, i64 } %t248, ptr %a250 store { ptr, i64, i64 } { ptr @.str.2013, i64 14, i64 0 }, ptr %a251 call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) store { ptr, i64, i64 } %t248, ptr %a252 call void @finch_str_drop(ptr %a252) %t253 = load { ptr, i64, i64 }, ptr %a249 %t254 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t255 = load %S.ast.Type, ptr %t254 %t256 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t255) store { ptr, i64, i64 } %t253, ptr %a258 store { ptr, i64, i64 } %t256, ptr %a259 call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) store { ptr, i64, i64 } %t253, ptr %a260 call void @finch_str_drop(ptr %a260) store { ptr, i64, i64 } %t256, ptr %a261 call void @finch_str_drop(ptr %a261) %t262 = load { ptr, i64, i64 }, ptr %a257 store { ptr, i64, i64 } %t262, ptr %a263 %t264 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t265 = load %S.ast.Type, ptr %t264 %t266 = call i1 @finch.gen.isNumber(%S.ast.Type %t265) br label %logic.from3173 logic.from3173: br i1 %t266, label %logic.rhs3174, label %logic.end3175 logic.rhs3174: %t267 = load %S.ast.Type, ptr %a3 %t268 = call i1 @finch.gen.isNumber(%S.ast.Type %t267) br label %logic.rend3176 logic.rend3176: br label %logic.end3175 logic.end3175: %t269 = phi i1 [ false, %logic.from3173 ], [ %t268, %logic.rend3176 ] br i1 %t269, label %then3177, label %endif3179 then3177: %t270 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t270, ptr %a272 store { ptr, i64, i64 } { ptr @.str.2014, i64 6, i64 0 }, ptr %a273 call void @finch_str_concat(ptr %a271, ptr %a272, ptr %a273) %t274 = load { ptr, i64, i64 }, ptr %a271 %t275 = load %S.ast.Type, ptr %a3 %t276 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t275) store { ptr, i64, i64 } %t274, ptr %a278 store { ptr, i64, i64 } %t276, ptr %a279 call void @finch_str_concat(ptr %a277, ptr %a278, ptr %a279) store { ptr, i64, i64 } %t274, ptr %a280 call void @finch_str_drop(ptr %a280) store { ptr, i64, i64 } %t276, ptr %a281 call void @finch_str_drop(ptr %a281) %t282 = load { ptr, i64, i64 }, ptr %a277 store { ptr, i64, i64 } %t282, ptr %a284 store { ptr, i64, i64 } { ptr @.str.2015, i64 16, i64 0 }, ptr %a285 call void @finch_str_concat(ptr %a283, ptr %a284, ptr %a285) store { ptr, i64, i64 } %t282, ptr %a286 call void @finch_str_drop(ptr %a286) %t287 = load { ptr, i64, i64 }, ptr %a283 %t288 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t287, ptr %a263 store { ptr, i64, i64 } %t288, ptr %a289 call void @finch_str_drop(ptr %a289) %t290 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t291 = load %S.ast.Type, ptr %t290 %t292 = call i1 @finch.gen.isFloat(%S.ast.Type %t291) br label %logic.from3180 logic.from3180: br i1 %t292, label %logic.rhs3181, label %logic.end3182 logic.rhs3181: %t293 = load %S.ast.Type, ptr %a3 %t294 = call i1 @finch.gen.isInt(%S.ast.Type %t293) br label %logic.rend3183 logic.rend3183: br label %logic.end3182 logic.end3182: %t295 = phi i1 [ false, %logic.from3180 ], [ %t294, %logic.rend3183 ] br i1 %t295, label %then3184, label %endif3186 then3184: %t296 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t296, ptr %a298 store { ptr, i64, i64 } { ptr @.str.2016, i64 26, i64 0 }, ptr %a299 call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) %t300 = load { ptr, i64, i64 }, ptr %a297 %t301 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t300, ptr %a263 store { ptr, i64, i64 } %t301, ptr %a302 call void @finch_str_drop(ptr %a302) br label %endif3186 endif3186: %t303 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t303, ptr %a305 store { ptr, i64, i64 } { ptr @.str.2017, i64 1, i64 0 }, ptr %a306 call void @finch_str_concat(ptr %a304, ptr %a305, ptr %a306) %t307 = load { ptr, i64, i64 }, ptr %a304 %t308 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t307, ptr %a263 store { ptr, i64, i64 } %t308, ptr %a309 call void @finch_str_drop(ptr %a309) br label %endif3179 endif3179: %t310 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t311 = load { ptr, i64, i64 }, ptr %t310 store { ptr, i64, i64 } %t311, ptr %a312 store { ptr, i64, i64 } { ptr @.str.2018, i64 3, i64 0 }, ptr %a313 %t314 = call i32 @finch_str_eq(ptr %a312, ptr %a313) %t315 = icmp ne i32 %t314, 0 br label %logic.from3187 logic.from3187: br i1 %t315, label %logic.rhs3188, label %logic.end3189 logic.rhs3188: %t316 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t317 = load %S.ast.Type, ptr %t316 %t318 = call i1 @finch.gen.isNumber(%S.ast.Type %t317) br label %logic.from3190 logic.from3190: br i1 %t318, label %logic.end3192, label %logic.rhs3191 logic.rhs3191: %t319 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t320 = getelementptr inbounds %S.ast.Type, ptr %t319, i32 0, i32 0 %t321 = load { ptr, i64, i64 }, ptr %t320 store { ptr, i64, i64 } %t321, ptr %a322 store { ptr, i64, i64 } { ptr @.str.2019, i64 4, i64 0 }, ptr %a323 %t324 = call i32 @finch_str_eq(ptr %a322, ptr %a323) %t325 = icmp ne i32 %t324, 0 br label %logic.rend3193 logic.rend3193: br label %logic.end3192 logic.end3192: %t326 = phi i1 [ true, %logic.from3190 ], [ %t325, %logic.rend3193 ] br label %logic.from3194 logic.from3194: br i1 %t326, label %logic.end3196, label %logic.rhs3195 logic.rhs3195: %t327 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t328 = getelementptr inbounds %S.ast.Type, ptr %t327, i32 0, i32 0 %t329 = load { ptr, i64, i64 }, ptr %t328 store { ptr, i64, i64 } %t329, ptr %a330 store { ptr, i64, i64 } { ptr @.str.2020, i64 4, i64 0 }, ptr %a331 %t332 = call i32 @finch_str_eq(ptr %a330, ptr %a331) %t333 = icmp ne i32 %t332, 0 br label %logic.rend3197 logic.rend3197: br label %logic.end3196 logic.end3196: %t334 = phi i1 [ true, %logic.from3194 ], [ %t333, %logic.rend3197 ] br label %logic.rend3198 logic.rend3198: br label %logic.end3189 logic.end3189: %t335 = phi i1 [ false, %logic.from3187 ], [ %t334, %logic.rend3198 ] br i1 %t335, label %then3199, label %endif3201 then3199: %t336 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t336, ptr %a338 store { ptr, i64, i64 } { ptr @.str.2021, i64 34, i64 0 }, ptr %a339 call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) %t340 = load { ptr, i64, i64 }, ptr %a337 %t341 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t340, ptr %a263 store { ptr, i64, i64 } %t341, ptr %a342 call void @finch_str_drop(ptr %a342) br label %endif3201 endif3201: %t343 = load ptr, ptr %a1 %t344 = load %S.ast.Node, ptr %a4 %t345 = load { ptr, i64, i64 }, ptr %a263 call void @finch.gen.fail(ptr %t343, %S.ast.Node %t344, { ptr, i64, i64 } %t345) %t346 = load %S.gen.Val, ptr %a2 store %S.gen.Val %t346, ptr %a347 call void @finch.copy.S_gen_Val(ptr %a348, ptr %a347) %t349 = load %S.gen.Val, ptr %a348 call void @finch_str_drop(ptr %a263) ret %S.gen.Val %t349 } define internal i64 @finch.gen.lookup(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca i64, align 16 %a19 = alloca i64, align 16 %a32 = alloca i64, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic3202, label %ok3203 panic3202: call void @finch_panic(ptr @.str.2022, i64 1346, ptr @.str.2023) unreachable ok3203: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 0, ptr %a8 br label %for.cond3204 for.cond3204: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t7 br i1 %t10, label %for.body3205, label %for.end3207 for.body3205: %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null br i1 %t12, label %panic3208, label %ok3209 panic3208: call void @finch_panic(ptr @.str.2024, i64 1347, ptr @.str.2025) unreachable ok3209: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 10 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = sub i64 %t15, 1 %t17 = load i64, ptr %a8 %t18 = sub i64 %t16, %t17 store i64 %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null br i1 %t21, label %panic3210, label %ok3211 panic3210: call void @finch_panic(ptr @.str.2026, i64 1348, ptr @.str.2027) unreachable ok3211: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 10 %t23 = load i64, ptr %a19 %t24 = load { ptr, i64, i64 }, ptr %t22 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 %t23, %t25 br i1 %t26, label %range3212, label %inrange3213 range3212: call void @finch_panic_index(ptr @.str.2028, i64 1348, i64 %t23, i64 %t25) unreachable inrange3213: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds %S.gen.Scope, ptr %t27, i64 %t23 %t29 = getelementptr inbounds %S.gen.Scope, ptr %t28, i32 0, i32 0 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 %t31 = load i64, ptr %t30 store i64 0, ptr %a32 br label %for.cond3214 for.cond3214: %t33 = load i64, ptr %a32 %t34 = icmp slt i64 %t33, %t31 br i1 %t34, label %for.body3215, label %for.end3217 for.body3215: %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null br i1 %t36, label %panic3218, label %ok3219 panic3218: call void @finch_panic(ptr @.str.2029, i64 1349, ptr @.str.2030) unreachable ok3219: %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 10 %t38 = load i64, ptr %a19 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 br i1 %t41, label %range3220, label %inrange3221 range3220: call void @finch_panic_index(ptr @.str.2031, i64 1349, i64 %t38, i64 %t40) unreachable inrange3221: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.gen.Scope, ptr %t42, i64 %t38 %t44 = getelementptr inbounds %S.gen.Scope, ptr %t43, i32 0, i32 0 %t45 = load i64, ptr %a32 %t46 = load { ptr, i64, i64 }, ptr %t44 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 %t45, %t47 br i1 %t48, label %range3222, label %inrange3223 range3222: call void @finch_panic_index(ptr @.str.2032, i64 1349, i64 %t45, i64 %t47) unreachable inrange3223: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.gen.Var, ptr %t49, i64 %t45 %t51 = getelementptr inbounds %S.gen.Var, ptr %t50, i32 0, i32 0 %t52 = load { ptr, i64, i64 }, ptr %t51 %t53 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t52, ptr %a54 store { ptr, i64, i64 } %t53, ptr %a55 %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) %t57 = icmp ne i32 %t56, 0 br i1 %t57, label %then3224, label %endif3226 then3224: %t58 = load ptr, ptr %a1 %t59 = icmp eq ptr %t58, null br i1 %t59, label %panic3227, label %ok3228 panic3227: call void @finch_panic(ptr @.str.2033, i64 1350, ptr @.str.2034) unreachable ok3228: %t60 = getelementptr inbounds %S.gen.Gen, ptr %t58, i32 0, i32 44 %t61 = load i1, ptr %t60 br label %logic.from3229 logic.from3229: br i1 %t61, label %logic.rhs3230, label %logic.end3231 logic.rhs3230: %t62 = load ptr, ptr %a1 %t63 = icmp eq ptr %t62, null br i1 %t63, label %panic3232, label %ok3233 panic3232: call void @finch_panic(ptr @.str.2035, i64 1350, ptr @.str.2036) unreachable ok3233: %t64 = getelementptr inbounds %S.gen.Gen, ptr %t62, i32 0, i32 10 %t65 = load i64, ptr %a19 %t66 = load { ptr, i64, i64 }, ptr %t64 %t67 = extractvalue { ptr, i64, i64 } %t66, 1 %t68 = icmp uge i64 %t65, %t67 br i1 %t68, label %range3234, label %inrange3235 range3234: call void @finch_panic_index(ptr @.str.2037, i64 1350, i64 %t65, i64 %t67) unreachable inrange3235: %t69 = extractvalue { ptr, i64, i64 } %t66, 0 %t70 = getelementptr inbounds %S.gen.Scope, ptr %t69, i64 %t65 %t71 = getelementptr inbounds %S.gen.Scope, ptr %t70, i32 0, i32 0 %t72 = load i64, ptr %a32 %t73 = load { ptr, i64, i64 }, ptr %t71 %t74 = extractvalue { ptr, i64, i64 } %t73, 1 %t75 = icmp uge i64 %t72, %t74 br i1 %t75, label %range3236, label %inrange3237 range3236: call void @finch_panic_index(ptr @.str.2038, i64 1350, i64 %t72, i64 %t74) unreachable inrange3237: %t76 = extractvalue { ptr, i64, i64 } %t73, 0 %t77 = getelementptr inbounds %S.gen.Var, ptr %t76, i64 %t72 %t78 = getelementptr inbounds %S.gen.Var, ptr %t77, i32 0, i32 4 %t79 = load i64, ptr %t78 %t80 = load ptr, ptr %a1 %t81 = icmp eq ptr %t80, null br i1 %t81, label %panic3238, label %ok3239 panic3238: call void @finch_panic(ptr @.str.2039, i64 1350, ptr @.str.2040) unreachable ok3239: %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 45 %t83 = load i64, ptr %t82 %t84 = icmp sge i64 %t79, %t83 br label %logic.rend3240 logic.rend3240: br label %logic.end3231 logic.end3231: %t85 = phi i1 [ false, %logic.from3229 ], [ %t84, %logic.rend3240 ] br i1 %t85, label %then3241, label %endif3243 then3241: br label %for.step3216 endif3243: %t86 = load i64, ptr %a19 %t87 = mul i64 %t86, 100000 %t88 = load i64, ptr %a32 %t89 = add i64 %t87, %t88 ret i64 %t89 endif3226: br label %for.step3216 for.step3216: %t90 = load i64, ptr %a32 %t91 = add i64 %t90, 1 store i64 %t91, ptr %a32 br label %for.cond3214 for.end3217: br label %for.step3206 for.step3206: %t92 = load i64, ptr %a8 %t93 = add i64 %t92, 1 store i64 %t93, ptr %a8 br label %for.cond3204 for.end3207: ret i64 -1 } define internal void @finch.copy.S_gen_Var(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Var, ptr %src store %S.gen.Var %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 1 call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 7 %t9 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 7 call void @finch_str_copy(ptr %t8, ptr %t9) ret void } define internal %S.gen.Var @finch.gen.varAt(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a22 = alloca %S.gen.Var, align 16 %a23 = alloca %S.gen.Var, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic3244, label %ok3245 panic3244: call void @finch_panic(ptr @.str.2041, i64 1361, ptr @.str.2042) unreachable ok3245: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 %t6 = load i64, ptr %a2 %t7 = sdiv i64 %t6, 100000 %t8 = load { ptr, i64, i64 }, ptr %t5 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 br i1 %t10, label %range3246, label %inrange3247 range3246: call void @finch_panic_index(ptr @.str.2043, i64 1361, i64 %t7, i64 %t9) unreachable inrange3247: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.Scope, ptr %t11, i64 %t7 %t13 = getelementptr inbounds %S.gen.Scope, ptr %t12, i32 0, i32 0 %t14 = load i64, ptr %a2 %t15 = srem i64 %t14, 100000 %t16 = load { ptr, i64, i64 }, ptr %t13 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 br i1 %t18, label %range3248, label %inrange3249 range3248: call void @finch_panic_index(ptr @.str.2044, i64 1361, i64 %t15, i64 %t17) unreachable inrange3249: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.Var, ptr %t19, i64 %t15 %t21 = load %S.gen.Var, ptr %t20 store %S.gen.Var %t21, ptr %a22 call void @finch.copy.S_gen_Var(ptr %a23, ptr %a22) %t24 = load %S.gen.Var, ptr %a23 ret %S.gen.Var %t24 } define internal i64 @finch.gen.findFn(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca i64, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic3250, label %ok3251 panic3250: call void @finch_panic(ptr @.str.2045, i64 1365, ptr @.str.2046) unreachable ok3251: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 15 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load i64, ptr %t7 store i64 0, ptr %a9 br label %for.cond3252 for.cond3252: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t8 br i1 %t11, label %for.body3253, label %for.end3255 for.body3253: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic3256, label %ok3257 panic3256: call void @finch_panic(ptr @.str.2047, i64 1366, ptr @.str.2048) unreachable ok3257: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 15 %t15 = load i64, ptr %a9 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 br i1 %t18, label %range3258, label %inrange3259 range3258: call void @finch_panic_index(ptr @.str.2049, i64 1366, i64 %t15, i64 %t17) unreachable inrange3259: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.FnSig, ptr %t19, i64 %t15 %t21 = getelementptr inbounds %S.gen.FnSig, ptr %t20, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t22, ptr %a24 store { ptr, i64, i64 } %t23, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 br label %logic.from3260 logic.from3260: br i1 %t27, label %logic.rhs3261, label %logic.end3262 logic.rhs3261: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic3263, label %ok3264 panic3263: call void @finch_panic(ptr @.str.2050, i64 1366, ptr @.str.2051) unreachable ok3264: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 15 %t31 = load i64, ptr %a9 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 br i1 %t34, label %range3265, label %inrange3266 range3265: call void @finch_panic_index(ptr @.str.2052, i64 1366, i64 %t31, i64 %t33) unreachable inrange3266: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.FnSig, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i32 0, i32 1 %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t38, ptr %a40 store { ptr, i64, i64 } %t39, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 br label %logic.rend3267 logic.rend3267: br label %logic.end3262 logic.end3262: %t44 = phi i1 [ false, %logic.from3260 ], [ %t43, %logic.rend3267 ] br label %logic.from3268 logic.from3268: br i1 %t44, label %logic.rhs3269, label %logic.end3270 logic.rhs3269: %t45 = load ptr, ptr %a1 %t46 = icmp eq ptr %t45, null br i1 %t46, label %panic3271, label %ok3272 panic3271: call void @finch_panic(ptr @.str.2053, i64 1366, ptr @.str.2054) unreachable ok3272: %t47 = getelementptr inbounds %S.gen.Gen, ptr %t45, i32 0, i32 15 %t48 = load i64, ptr %a9 %t49 = load { ptr, i64, i64 }, ptr %t47 %t50 = extractvalue { ptr, i64, i64 } %t49, 1 %t51 = icmp uge i64 %t48, %t50 br i1 %t51, label %range3273, label %inrange3274 range3273: call void @finch_panic_index(ptr @.str.2055, i64 1366, i64 %t48, i64 %t50) unreachable inrange3274: %t52 = extractvalue { ptr, i64, i64 } %t49, 0 %t53 = getelementptr inbounds %S.gen.FnSig, ptr %t52, i64 %t48 %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i32 0, i32 2 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 %t56 = load i64, ptr %t55 %t57 = icmp eq i64 %t56, 0 br label %logic.rend3275 logic.rend3275: br label %logic.end3270 logic.end3270: %t58 = phi i1 [ false, %logic.from3268 ], [ %t57, %logic.rend3275 ] br i1 %t58, label %then3276, label %endif3278 then3276: %t59 = load i64, ptr %a9 ret i64 %t59 endif3278: br label %for.step3254 for.step3254: %t60 = load i64, ptr %a9 %t61 = add i64 %t60, 1 store i64 %t61, ptr %a9 br label %for.cond3252 for.end3255: ret i64 -1 } define internal i64 @finch.gen.findMethod(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca i64, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic3279, label %ok3280 panic3279: call void @finch_panic(ptr @.str.2056, i64 1374, ptr @.str.2057) unreachable ok3280: %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 15 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i32 0, i32 1 %t9 = load i64, ptr %t8 store i64 0, ptr %a10 br label %for.cond3281 for.cond3281: %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, %t9 br i1 %t12, label %for.body3282, label %for.end3284 for.body3282: %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null br i1 %t14, label %panic3285, label %ok3286 panic3285: call void @finch_panic(ptr @.str.2058, i64 1375, ptr @.str.2059) unreachable ok3286: %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 15 %t16 = load i64, ptr %a10 %t17 = load { ptr, i64, i64 }, ptr %t15 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 %t16, %t18 br i1 %t19, label %range3287, label %inrange3288 range3287: call void @finch_panic_index(ptr @.str.2060, i64 1375, i64 %t16, i64 %t18) unreachable inrange3288: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.gen.FnSig, ptr %t20, i64 %t16 %t22 = getelementptr inbounds %S.gen.FnSig, ptr %t21, i32 0, i32 3 %t23 = load { ptr, i64, i64 }, ptr %t22 %t24 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t23, ptr %a25 store { ptr, i64, i64 } %t24, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 br label %logic.from3289 logic.from3289: br i1 %t28, label %logic.rhs3290, label %logic.end3291 logic.rhs3290: %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null br i1 %t30, label %panic3292, label %ok3293 panic3292: call void @finch_panic(ptr @.str.2061, i64 1375, ptr @.str.2062) unreachable ok3293: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 15 %t32 = load i64, ptr %a10 %t33 = load { ptr, i64, i64 }, ptr %t31 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 br i1 %t35, label %range3294, label %inrange3295 range3294: call void @finch_panic_index(ptr @.str.2063, i64 1375, i64 %t32, i64 %t34) unreachable inrange3295: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i64 %t32 %t38 = getelementptr inbounds %S.gen.FnSig, ptr %t37, i32 0, i32 2 %t39 = load { ptr, i64, i64 }, ptr %t38 %t40 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t39, ptr %a41 store { ptr, i64, i64 } %t40, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 br label %logic.rend3296 logic.rend3296: br label %logic.end3291 logic.end3291: %t45 = phi i1 [ false, %logic.from3289 ], [ %t44, %logic.rend3296 ] br label %logic.from3297 logic.from3297: br i1 %t45, label %logic.rhs3298, label %logic.end3299 logic.rhs3298: %t46 = load ptr, ptr %a1 %t47 = icmp eq ptr %t46, null br i1 %t47, label %panic3300, label %ok3301 panic3300: call void @finch_panic(ptr @.str.2064, i64 1375, ptr @.str.2065) unreachable ok3301: %t48 = getelementptr inbounds %S.gen.Gen, ptr %t46, i32 0, i32 15 %t49 = load i64, ptr %a10 %t50 = load { ptr, i64, i64 }, ptr %t48 %t51 = extractvalue { ptr, i64, i64 } %t50, 1 %t52 = icmp uge i64 %t49, %t51 br i1 %t52, label %range3302, label %inrange3303 range3302: call void @finch_panic_index(ptr @.str.2066, i64 1375, i64 %t49, i64 %t51) unreachable inrange3303: %t53 = extractvalue { ptr, i64, i64 } %t50, 0 %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i64 %t49 %t55 = getelementptr inbounds %S.gen.FnSig, ptr %t54, i32 0, i32 1 %t56 = load { ptr, i64, i64 }, ptr %t55 %t57 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t56, ptr %a58 store { ptr, i64, i64 } %t57, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 br label %logic.rend3304 logic.rend3304: br label %logic.end3299 logic.end3299: %t62 = phi i1 [ false, %logic.from3297 ], [ %t61, %logic.rend3304 ] br i1 %t62, label %then3305, label %endif3307 then3305: %t63 = load i64, ptr %a10 ret i64 %t63 endif3307: br label %for.step3283 for.step3283: %t64 = load i64, ptr %a10 %t65 = add i64 %t64, 1 store i64 %t65, ptr %a10 br label %for.cond3281 for.end3284: ret i64 -1 } define internal i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca i64, align 16 %a41 = alloca i64, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = mul i64 28, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 store { ptr, i64, i64 } { ptr @.str.2067, i64 5, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 store { ptr, i64, i64 } { ptr @.str.2068, i64 4, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 store { ptr, i64, i64 } { ptr @.str.2069, i64 3, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 store { ptr, i64, i64 } { ptr @.str.2070, i64 3, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 store { ptr, i64, i64 } { ptr @.str.2071, i64 4, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 store { ptr, i64, i64 } { ptr @.str.2072, i64 5, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 store { ptr, i64, i64 } { ptr @.str.2073, i64 4, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 store { ptr, i64, i64 } { ptr @.str.2074, i64 9, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 store { ptr, i64, i64 } { ptr @.str.2075, i64 10, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 store { ptr, i64, i64 } { ptr @.str.2076, i64 11, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 store { ptr, i64, i64 } { ptr @.str.2077, i64 5, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 store { ptr, i64, i64 } { ptr @.str.2078, i64 4, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 store { ptr, i64, i64 } { ptr @.str.2079, i64 5, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 store { ptr, i64, i64 } { ptr @.str.2080, i64 3, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 store { ptr, i64, i64 } { ptr @.str.2081, i64 4, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 store { ptr, i64, i64 } { ptr @.str.2082, i64 3, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16 store { ptr, i64, i64 } { ptr @.str.2083, i64 11, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17 store { ptr, i64, i64 } { ptr @.str.2084, i64 2, i64 0 }, ptr %t21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18 store { ptr, i64, i64 } { ptr @.str.2085, i64 3, i64 0 }, ptr %t22 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19 store { ptr, i64, i64 } { ptr @.str.2086, i64 3, i64 0 }, ptr %t23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20 store { ptr, i64, i64 } { ptr @.str.2087, i64 3, i64 0 }, ptr %t24 %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 21 store { ptr, i64, i64 } { ptr @.str.2088, i64 2, i64 0 }, ptr %t25 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 22 store { ptr, i64, i64 } { ptr @.str.2089, i64 3, i64 0 }, ptr %t26 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 23 store { ptr, i64, i64 } { ptr @.str.2090, i64 3, i64 0 }, ptr %t27 %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 24 store { ptr, i64, i64 } { ptr @.str.2091, i64 3, i64 0 }, ptr %t28 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 25 store { ptr, i64, i64 } { ptr @.str.2092, i64 3, i64 0 }, ptr %t29 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 26 store { ptr, i64, i64 } { ptr @.str.2093, i64 3, i64 0 }, ptr %t30 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 27 store { ptr, i64, i64 } { ptr @.str.2094, i64 5, i64 0 }, ptr %t31 %t32 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t33 = insertvalue { ptr, i64, i64 } %t32, i64 28, 1 %t34 = insertvalue { ptr, i64, i64 } %t33, i64 28, 2 store { ptr, i64, i64 } %t34, ptr %a35 %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %a35, i32 0, i32 1 %t37 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a38 %t39 = load i64, ptr %t36 %t40 = load ptr, ptr %a35 store i64 0, ptr %a41 br label %find.cond3308 find.cond3308: %t42 = load i64, ptr %a41 %t43 = icmp slt i64 %t42, %t39 br i1 %t43, label %find.body3309, label %find.end3312 find.body3309: %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t42 %t45 = load { ptr, i64, i64 }, ptr %t44 store { ptr, i64, i64 } %t45, ptr %a46 store { ptr, i64, i64 } %t37, ptr %a47 %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) %t49 = icmp ne i32 %t48, 0 br i1 %t49, label %find.hit3310, label %find.next3311 find.hit3310: store i64 %t42, ptr %a38 br label %find.end3312 find.next3311: %t50 = add i64 %t42, 1 store i64 %t50, ptr %a41 br label %find.cond3308 find.end3312: %t51 = load i64, ptr %a38 %t52 = icmp sge i64 %t51, 0 call void @finch.drop.arr_str(ptr %a35) ret i1 %t52 } define internal { ptr, i64, i64 } @finch.gen.addVar(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, { ptr, i64, i64 } %p4, i1 %p5, i1 %p6) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca i1, align 16 %a7 = alloca i1, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca i64, align 16 %a93 = alloca i1, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca %S.ast.Type, align 16 %a142 = alloca %S.ast.Type, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca %S.ast.Node, align 16 %a238 = alloca %S.ast.Node, align 16 %a240 = alloca %S.ast.Node, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a308 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a346 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a377 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a382 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a384 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 store i1 %p5, ptr %a6 store i1 %p6, ptr %a7 %t8 = load ptr, ptr %a1 %t9 = load { ptr, i64, i64 }, ptr %a3 %t10 = call i64 @finch.gen.lookup(ptr %t8, { ptr, i64, i64 } %t9) %t11 = icmp sge i64 %t10, 0 br label %logic.from3313 logic.from3313: br i1 %t11, label %logic.rhs3314, label %logic.end3315 logic.rhs3314: %t12 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.2095, i64 3, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp eq i32 %t15, 0 br label %logic.rend3316 logic.rend3316: br label %logic.end3315 logic.end3315: %t17 = phi i1 [ false, %logic.from3313 ], [ %t16, %logic.rend3316 ] br i1 %t17, label %then3317, label %endif3319 then3317: %t18 = load ptr, ptr %a1 %t19 = load %S.ast.Node, ptr %a2 %t20 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.2096, i64 18, i64 0 }, ptr %a22 store { ptr, i64, i64 } %t20, ptr %a23 call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) %t24 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t24, ptr %a26 store { ptr, i64, i64 } { ptr @.str.2097, i64 21, i64 0 }, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) store { ptr, i64, i64 } %t24, ptr %a28 call void @finch_str_drop(ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a25 call void @finch.gen.fail(ptr %t18, %S.ast.Node %t19, { ptr, i64, i64 } %t29) store { ptr, i64, i64 } %t29, ptr %a30 call void @finch_str_drop(ptr %a30) br label %endif3319 endif3319: %t31 = load ptr, ptr %a1 %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null br i1 %t33, label %panic3320, label %ok3321 panic3320: call void @finch_panic(ptr @.str.2098, i64 1393, ptr @.str.2099) unreachable ok3321: %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 14 %t35 = load { ptr, i64, i64 }, ptr %t34 %t36 = load { ptr, i64, i64 }, ptr %a3 %t37 = call i64 @finch.gen.findFn(ptr %t31, { ptr, i64, i64 } %t35, { ptr, i64, i64 } %t36) %t38 = icmp sge i64 %t37, 0 br i1 %t38, label %then3322, label %endif3324 then3322: %t39 = load ptr, ptr %a1 %t40 = load %S.ast.Node, ptr %a2 %t41 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.2100, i64 1, i64 0 }, ptr %a43 store { ptr, i64, i64 } %t41, ptr %a44 call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) %t45 = load { ptr, i64, i64 }, ptr %a42 store { ptr, i64, i64 } %t45, ptr %a47 store { ptr, i64, i64 } { ptr @.str.2101, i64 35, i64 0 }, ptr %a48 call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) store { ptr, i64, i64 } %t45, ptr %a49 call void @finch_str_drop(ptr %a49) %t50 = load { ptr, i64, i64 }, ptr %a46 call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t50) store { ptr, i64, i64 } %t50, ptr %a51 call void @finch_str_drop(ptr %a51) br label %endif3324 endif3324: %t52 = load { ptr, i64, i64 }, ptr %a3 %t53 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t52) br i1 %t53, label %then3325, label %endif3327 then3325: %t54 = load ptr, ptr %a1 %t55 = load %S.ast.Node, ptr %a2 %t56 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.2102, i64 1, i64 0 }, ptr %a58 store { ptr, i64, i64 } %t56, ptr %a59 call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) %t60 = load { ptr, i64, i64 }, ptr %a57 store { ptr, i64, i64 } %t60, ptr %a62 store { ptr, i64, i64 } { ptr @.str.2103, i64 38, i64 0 }, ptr %a63 call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) store { ptr, i64, i64 } %t60, ptr %a64 call void @finch_str_drop(ptr %a64) %t65 = load { ptr, i64, i64 }, ptr %a61 call void @finch.gen.fail(ptr %t54, %S.ast.Node %t55, { ptr, i64, i64 } %t65) store { ptr, i64, i64 } %t65, ptr %a66 call void @finch_str_drop(ptr %a66) br label %endif3327 endif3327: %t67 = load ptr, ptr %a1 %t68 = load ptr, ptr %a1 %t69 = load %S.ast.Type, ptr %a4 %t70 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t68, %S.ast.Type %t69) %t71 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t67, { ptr, i64, i64 } %t70) store { ptr, i64, i64 } %t70, ptr %a72 call void @finch_str_drop(ptr %a72) store { ptr, i64, i64 } %t71, ptr %a73 %t74 = load ptr, ptr %a1 %t75 = load ptr, ptr %a1 %t76 = load %S.ast.Type, ptr %a4 %t77 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t75, %S.ast.Type %t76) %t78 = load { ptr, i64, i64 }, ptr %a5 %t79 = load { ptr, i64, i64 }, ptr %a73 call void @finch.gen.store(ptr %t74, { ptr, i64, i64 } %t77, { ptr, i64, i64 } %t78, { ptr, i64, i64 } %t79) store { ptr, i64, i64 } %t77, ptr %a80 call void @finch_str_drop(ptr %a80) %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null br i1 %t82, label %panic3328, label %ok3329 panic3328: call void @finch_panic(ptr @.str.2104, i64 1401, ptr @.str.2105) unreachable ok3329: %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 10 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i32 0, i32 1 %t85 = load i64, ptr %t84 %t86 = sub i64 %t85, 1 store i64 %t86, ptr %a87 %t88 = load i1, ptr %a7 br label %logic.from3330 logic.from3330: br i1 %t88, label %logic.rhs3331, label %logic.end3332 logic.rhs3331: %t89 = load ptr, ptr %a1 %t90 = load %S.ast.Type, ptr %a4 %t91 = call i1 @finch.gen.owning(ptr %t89, %S.ast.Type %t90) br label %logic.rend3333 logic.rend3333: br label %logic.end3332 logic.end3332: %t92 = phi i1 [ false, %logic.from3330 ], [ %t91, %logic.rend3333 ] store i1 %t92, ptr %a93 %t94 = load i1, ptr %a93 br i1 %t94, label %then3334, label %endif3336 then3334: %t95 = load ptr, ptr %a1 %t96 = icmp eq ptr %t95, null br i1 %t96, label %panic3337, label %ok3338 panic3337: call void @finch_panic(ptr @.str.2106, i64 1404, ptr @.str.2107) unreachable ok3338: %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 10 %t98 = load i64, ptr %a87 %t99 = load { ptr, i64, i64 }, ptr %t97 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 %t98, %t100 br i1 %t101, label %range3339, label %inrange3340 range3339: call void @finch_panic_index(ptr @.str.2108, i64 1404, i64 %t98, i64 %t100) unreachable inrange3340: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.gen.Scope, ptr %t102, i64 %t98 %t104 = getelementptr inbounds %S.gen.Scope, ptr %t103, i32 0, i32 3 %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 %t106 = insertvalue %S.gen.Cleanup zeroinitializer, i1 false, 0 %t107 = load ptr, ptr %a1 %t108 = icmp eq ptr %t107, null br i1 %t108, label %panic3341, label %ok3342 panic3341: call void @finch_panic(ptr @.str.2109, i64 1404, ptr @.str.2110) unreachable ok3342: %t109 = getelementptr inbounds %S.gen.Gen, ptr %t107, i32 0, i32 10 %t110 = load i64, ptr %a87 %t111 = load { ptr, i64, i64 }, ptr %t109 %t112 = extractvalue { ptr, i64, i64 } %t111, 1 %t113 = icmp uge i64 %t110, %t112 br i1 %t113, label %range3343, label %inrange3344 range3343: call void @finch_panic_index(ptr @.str.2111, i64 1404, i64 %t110, i64 %t112) unreachable inrange3344: %t114 = extractvalue { ptr, i64, i64 } %t111, 0 %t115 = getelementptr inbounds %S.gen.Scope, ptr %t114, i64 %t110 %t116 = getelementptr inbounds %S.gen.Scope, ptr %t115, i32 0, i32 0 %t117 = getelementptr inbounds { ptr, i64, i64 }, ptr %t116, i32 0, i32 1 %t118 = load i64, ptr %t117 %t119 = insertvalue %S.gen.Cleanup %t106, i64 %t118, 1 %t120 = load i64, ptr %t105 %t121 = add i64 %t120, 1 call void @finch_arr_reserve(ptr %t104, i64 %t121, i64 ptrtoint (ptr getelementptr (%S.gen.Cleanup, ptr null, i32 1) to i64)) %t122 = load ptr, ptr %t104 %t123 = getelementptr inbounds %S.gen.Cleanup, ptr %t122, i64 %t120 store %S.gen.Cleanup %t119, ptr %t123 store i64 %t121, ptr %t105 br label %endif3336 endif3336: %t124 = load ptr, ptr %a1 %t125 = icmp eq ptr %t124, null br i1 %t125, label %panic3345, label %ok3346 panic3345: call void @finch_panic(ptr @.str.2112, i64 1406, ptr @.str.2113) unreachable ok3346: %t126 = getelementptr inbounds %S.gen.Gen, ptr %t124, i32 0, i32 10 %t127 = load i64, ptr %a87 %t128 = load { ptr, i64, i64 }, ptr %t126 %t129 = extractvalue { ptr, i64, i64 } %t128, 1 %t130 = icmp uge i64 %t127, %t129 br i1 %t130, label %range3347, label %inrange3348 range3347: call void @finch_panic_index(ptr @.str.2114, i64 1406, i64 %t127, i64 %t129) unreachable inrange3348: %t131 = extractvalue { ptr, i64, i64 } %t128, 0 %t132 = getelementptr inbounds %S.gen.Scope, ptr %t131, i64 %t127 %t133 = getelementptr inbounds %S.gen.Scope, ptr %t132, i32 0, i32 0 %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 %t135 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t135, ptr %a136 call void @finch_str_copy(ptr %a137, ptr %a136) %t138 = load { ptr, i64, i64 }, ptr %a137 %t139 = insertvalue %S.gen.Var zeroinitializer, { ptr, i64, i64 } %t138, 0 %t140 = load %S.ast.Type, ptr %a4 store %S.ast.Type %t140, ptr %a141 call void @finch.copy.S_ast_Type(ptr %a142, ptr %a141) %t143 = load %S.ast.Type, ptr %a142 %t144 = insertvalue %S.gen.Var %t139, %S.ast.Type %t143, 1 %t145 = load { ptr, i64, i64 }, ptr %a73 store { ptr, i64, i64 } %t145, ptr %a146 call void @finch_str_copy(ptr %a147, ptr %a146) %t148 = load { ptr, i64, i64 }, ptr %a147 %t149 = insertvalue %S.gen.Var %t144, { ptr, i64, i64 } %t148, 2 %t150 = load i1, ptr %a6 %t151 = insertvalue %S.gen.Var %t149, i1 %t150, 3 %t152 = load ptr, ptr %a1 %t153 = icmp eq ptr %t152, null br i1 %t153, label %panic3349, label %ok3350 panic3349: call void @finch_panic(ptr @.str.2115, i64 1406, ptr @.str.2116) unreachable ok3350: %t154 = getelementptr inbounds %S.gen.Gen, ptr %t152, i32 0, i32 25 %t155 = load i64, ptr %t154 %t156 = insertvalue %S.gen.Var %t151, i64 %t155, 4 %t157 = load i1, ptr %a93 %t158 = insertvalue %S.gen.Var %t156, i1 %t157, 5 %t159 = load ptr, ptr %a1 %t160 = icmp eq ptr %t159, null br i1 %t160, label %panic3351, label %ok3352 panic3351: call void @finch_panic(ptr @.str.2117, i64 1406, ptr @.str.2118) unreachable ok3352: %t161 = getelementptr inbounds %S.gen.Gen, ptr %t159, i32 0, i32 1 %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t163 = load i64, ptr %t162 %t164 = load { ptr, i64, i64 }, ptr %t161 %t165 = extractvalue { ptr, i64, i64 } %t164, 1 %t166 = icmp uge i64 %t163, %t165 br i1 %t166, label %range3353, label %inrange3354 range3353: call void @finch_panic_index(ptr @.str.2119, i64 1406, i64 %t163, i64 %t165) unreachable inrange3354: %t167 = extractvalue { ptr, i64, i64 } %t164, 0 %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i64 %t163 %t169 = load { ptr, i64, i64 }, ptr %t168 store { ptr, i64, i64 } %t169, ptr %a170 call void @finch_str_copy(ptr %a171, ptr %a170) %t172 = load { ptr, i64, i64 }, ptr %a171 %t173 = insertvalue %S.gen.Var %t158, { ptr, i64, i64 } %t172, 7 %t174 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t175 = load i64, ptr %t174 %t176 = insertvalue %S.gen.Var %t173, i64 %t175, 8 %t177 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t178 = load i64, ptr %t177 %t179 = insertvalue %S.gen.Var %t176, i64 %t178, 9 %t180 = load i64, ptr %t134 %t181 = add i64 %t180, 1 call void @finch_arr_reserve(ptr %t133, i64 %t181, i64 ptrtoint (ptr getelementptr (%S.gen.Var, ptr null, i32 1) to i64)) %t182 = load ptr, ptr %t133 %t183 = getelementptr inbounds %S.gen.Var, ptr %t182, i64 %t180 store %S.gen.Var %t179, ptr %t183 store i64 %t181, ptr %t134 %t184 = load ptr, ptr %a1 %t185 = icmp eq ptr %t184, null br i1 %t185, label %panic3355, label %ok3356 panic3355: call void @finch_panic(ptr @.str.2120, i64 1407, ptr @.str.2121) unreachable ok3356: %t186 = getelementptr inbounds %S.gen.Gen, ptr %t184, i32 0, i32 25 %t187 = load i64, ptr %t186 %t188 = add i64 %t187, 1 store i64 %t188, ptr %t186 %t189 = load ptr, ptr %a1 %t190 = load %S.ast.Node, ptr %a2 %t191 = load { ptr, i64, i64 }, ptr %a3 %t192 = load %S.ast.Type, ptr %a4 %t193 = load { ptr, i64, i64 }, ptr %a73 call void @finch.gen.dbgVariable(ptr %t189, %S.ast.Node %t190, { ptr, i64, i64 } %t191, %S.ast.Type %t192, { ptr, i64, i64 } %t193) %t194 = load ptr, ptr %a1 %t195 = icmp eq ptr %t194, null br i1 %t195, label %panic3357, label %ok3358 panic3357: call void @finch_panic(ptr @.str.2122, i64 1409, ptr @.str.2123) unreachable ok3358: %t196 = getelementptr inbounds %S.gen.Gen, ptr %t194, i32 0, i32 28 %t197 = load i1, ptr %t196 br label %logic.from3359 logic.from3359: br i1 %t197, label %logic.rhs3360, label %logic.end3361 logic.rhs3360: %t198 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t198, ptr %a199 store { ptr, i64, i64 } { ptr @.str.2124, i64 3, i64 0 }, ptr %a200 %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) %t202 = icmp eq i32 %t201, 0 br label %logic.rend3362 logic.rend3362: br label %logic.end3361 logic.end3361: %t203 = phi i1 [ false, %logic.from3359 ], [ %t202, %logic.rend3362 ] br label %logic.from3363 logic.from3363: br i1 %t203, label %logic.rhs3364, label %logic.end3365 logic.rhs3364: %t204 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t204, ptr %a205 store { ptr, i64, i64 } { ptr @.str.2126, i64 1, i64 0 }, ptr %a207 %t208 = call i32 @finch_str_starts(ptr %a205, ptr %a207) %t209 = icmp ne i32 %t208, 0 %t210 = xor i1 %t209, true br label %logic.rend3366 logic.rend3366: br label %logic.end3365 logic.end3365: %t211 = phi i1 [ false, %logic.from3363 ], [ %t210, %logic.rend3366 ] br i1 %t211, label %then3367, label %endif3369 then3367: %t212 = load ptr, ptr %a1 %t213 = icmp eq ptr %t212, null br i1 %t213, label %panic3370, label %ok3371 panic3370: call void @finch_panic(ptr @.str.2127, i64 1410, ptr @.str.2128) unreachable ok3371: %t214 = getelementptr inbounds %S.gen.Gen, ptr %t212, i32 0, i32 0 %t215 = load ptr, ptr %a1 %t216 = icmp eq ptr %t215, null br i1 %t216, label %panic3372, label %ok3373 panic3372: call void @finch_panic(ptr @.str.2129, i64 1410, ptr @.str.2130) unreachable ok3373: %t217 = getelementptr inbounds %S.gen.Gen, ptr %t215, i32 0, i32 13 %t218 = getelementptr inbounds %S.gen.FnSig, ptr %t217, i32 0, i32 16 %t219 = load i64, ptr %t218 %t220 = load { ptr, i64, i64 }, ptr %t214 %t221 = extractvalue { ptr, i64, i64 } %t220, 1 %t222 = icmp uge i64 %t219, %t221 br i1 %t222, label %range3374, label %inrange3375 range3374: call void @finch_panic_index(ptr @.str.2131, i64 1410, i64 %t219, i64 %t221) unreachable inrange3375: %t223 = extractvalue { ptr, i64, i64 } %t220, 0 %t224 = getelementptr inbounds %S.ast.Program, ptr %t223, i64 %t219 %t225 = getelementptr inbounds %S.ast.Program, ptr %t224, i32 0, i32 8 %t226 = load ptr, ptr %a1 %t227 = icmp eq ptr %t226, null br i1 %t227, label %panic3376, label %ok3377 panic3376: call void @finch_panic(ptr @.str.2132, i64 1410, ptr @.str.2133) unreachable ok3377: %t228 = getelementptr inbounds %S.gen.Gen, ptr %t226, i32 0, i32 13 %t229 = getelementptr inbounds %S.gen.FnSig, ptr %t228, i32 0, i32 17 %t230 = load i64, ptr %t229 %t231 = load { ptr, i64, i64 }, ptr %t225 %t232 = extractvalue { ptr, i64, i64 } %t231, 1 %t233 = icmp uge i64 %t230, %t232 br i1 %t233, label %range3378, label %inrange3379 range3378: call void @finch_panic_index(ptr @.str.2134, i64 1410, i64 %t230, i64 %t232) unreachable inrange3379: %t234 = extractvalue { ptr, i64, i64 } %t231, 0 %t235 = getelementptr inbounds %S.ast.Node, ptr %t234, i64 %t230 %t236 = load %S.ast.Node, ptr %t235 store %S.ast.Node %t236, ptr %a237 call void @finch.copy.S_ast_Node(ptr %a238, ptr %a237) %t239 = load %S.ast.Node, ptr %a238 store %S.ast.Node %t239, ptr %a240 %t241 = load ptr, ptr %a1 %t242 = icmp eq ptr %t241, null br i1 %t242, label %panic3380, label %ok3381 panic3380: call void @finch_panic(ptr @.str.2135, i64 1411, ptr @.str.2136) unreachable ok3381: %t243 = getelementptr inbounds %S.gen.Gen, ptr %t241, i32 0, i32 29 %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %t243, i32 0, i32 1 %t245 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.2137, i64 3, i64 0 }, ptr %a247 store { ptr, i64, i64 } %t245, ptr %a248 call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) %t249 = load { ptr, i64, i64 }, ptr %a246 store { ptr, i64, i64 } %t249, ptr %a251 store { ptr, i64, i64 } { ptr @.str.2138, i64 1, i64 0 }, ptr %a252 call void @finch_str_concat(ptr %a250, ptr %a251, ptr %a252) store { ptr, i64, i64 } %t249, ptr %a253 call void @finch_str_drop(ptr %a253) %t254 = load { ptr, i64, i64 }, ptr %a250 %t255 = load %S.ast.Type, ptr %a4 %t256 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t255) store { ptr, i64, i64 } %t254, ptr %a258 store { ptr, i64, i64 } %t256, ptr %a259 call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) store { ptr, i64, i64 } %t254, ptr %a260 call void @finch_str_drop(ptr %a260) store { ptr, i64, i64 } %t256, ptr %a261 call void @finch_str_drop(ptr %a261) %t262 = load { ptr, i64, i64 }, ptr %a257 store { ptr, i64, i64 } %t262, ptr %a264 store { ptr, i64, i64 } { ptr @.str.2139, i64 1, i64 0 }, ptr %a265 call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) store { ptr, i64, i64 } %t262, ptr %a266 call void @finch_str_drop(ptr %a266) %t267 = load { ptr, i64, i64 }, ptr %a263 %t268 = load ptr, ptr %a1 %t269 = icmp eq ptr %t268, null br i1 %t269, label %panic3382, label %ok3383 panic3382: call void @finch_panic(ptr @.str.2140, i64 1411, ptr @.str.2141) unreachable ok3383: %t270 = getelementptr inbounds %S.gen.Gen, ptr %t268, i32 0, i32 1 %t271 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t272 = load i64, ptr %t271 %t273 = load { ptr, i64, i64 }, ptr %t270 %t274 = extractvalue { ptr, i64, i64 } %t273, 1 %t275 = icmp uge i64 %t272, %t274 br i1 %t275, label %range3384, label %inrange3385 range3384: call void @finch_panic_index(ptr @.str.2142, i64 1411, i64 %t272, i64 %t274) unreachable inrange3385: %t276 = extractvalue { ptr, i64, i64 } %t273, 0 %t277 = getelementptr inbounds { ptr, i64, i64 }, ptr %t276, i64 %t272 %t278 = load { ptr, i64, i64 }, ptr %t277 store { ptr, i64, i64 } %t267, ptr %a280 store { ptr, i64, i64 } %t278, ptr %a281 call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) store { ptr, i64, i64 } %t267, ptr %a282 call void @finch_str_drop(ptr %a282) %t283 = load { ptr, i64, i64 }, ptr %a279 store { ptr, i64, i64 } %t283, ptr %a285 store { ptr, i64, i64 } { ptr @.str.2143, i64 1, i64 0 }, ptr %a286 call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) store { ptr, i64, i64 } %t283, ptr %a287 call void @finch_str_drop(ptr %a287) %t288 = load { ptr, i64, i64 }, ptr %a284 %t289 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t290 = load i64, ptr %t289 call void @finch_str_from_int(ptr %a291, i64 %t290) %t292 = load { ptr, i64, i64 }, ptr %a291 store { ptr, i64, i64 } %t288, ptr %a294 store { ptr, i64, i64 } %t292, ptr %a295 call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295) store { ptr, i64, i64 } %t288, ptr %a296 call void @finch_str_drop(ptr %a296) store { ptr, i64, i64 } %t292, ptr %a297 call void @finch_str_drop(ptr %a297) %t298 = load { ptr, i64, i64 }, ptr %a293 store { ptr, i64, i64 } %t298, ptr %a300 store { ptr, i64, i64 } { ptr @.str.2144, i64 1, i64 0 }, ptr %a301 call void @finch_str_concat(ptr %a299, ptr %a300, ptr %a301) store { ptr, i64, i64 } %t298, ptr %a302 call void @finch_str_drop(ptr %a302) %t303 = load { ptr, i64, i64 }, ptr %a299 %t304 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t305 = load i64, ptr %t304 call void @finch_str_from_int(ptr %a306, i64 %t305) %t307 = load { ptr, i64, i64 }, ptr %a306 store { ptr, i64, i64 } %t303, ptr %a309 store { ptr, i64, i64 } %t307, ptr %a310 call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) store { ptr, i64, i64 } %t303, ptr %a311 call void @finch_str_drop(ptr %a311) store { ptr, i64, i64 } %t307, ptr %a312 call void @finch_str_drop(ptr %a312) %t313 = load { ptr, i64, i64 }, ptr %a308 store { ptr, i64, i64 } %t313, ptr %a315 store { ptr, i64, i64 } { ptr @.str.2145, i64 1, i64 0 }, ptr %a316 call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) store { ptr, i64, i64 } %t313, ptr %a317 call void @finch_str_drop(ptr %a317) %t318 = load { ptr, i64, i64 }, ptr %a314 %t319 = load ptr, ptr %a1 %t320 = icmp eq ptr %t319, null br i1 %t320, label %panic3386, label %ok3387 panic3386: call void @finch_panic(ptr @.str.2146, i64 1411, ptr @.str.2147) unreachable ok3387: %t321 = getelementptr inbounds %S.gen.Gen, ptr %t319, i32 0, i32 1 %t322 = getelementptr inbounds %S.ast.Node, ptr %a240, i32 0, i32 13 %t323 = load i64, ptr %t322 %t324 = load { ptr, i64, i64 }, ptr %t321 %t325 = extractvalue { ptr, i64, i64 } %t324, 1 %t326 = icmp uge i64 %t323, %t325 br i1 %t326, label %range3388, label %inrange3389 range3388: call void @finch_panic_index(ptr @.str.2148, i64 1411, i64 %t323, i64 %t325) unreachable inrange3389: %t327 = extractvalue { ptr, i64, i64 } %t324, 0 %t328 = getelementptr inbounds { ptr, i64, i64 }, ptr %t327, i64 %t323 %t329 = load { ptr, i64, i64 }, ptr %t328 store { ptr, i64, i64 } %t318, ptr %a331 store { ptr, i64, i64 } %t329, ptr %a332 call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332) store { ptr, i64, i64 } %t318, ptr %a333 call void @finch_str_drop(ptr %a333) %t334 = load { ptr, i64, i64 }, ptr %a330 store { ptr, i64, i64 } %t334, ptr %a336 store { ptr, i64, i64 } { ptr @.str.2149, i64 1, i64 0 }, ptr %a337 call void @finch_str_concat(ptr %a335, ptr %a336, ptr %a337) store { ptr, i64, i64 } %t334, ptr %a338 call void @finch_str_drop(ptr %a338) %t339 = load { ptr, i64, i64 }, ptr %a335 %t340 = getelementptr inbounds %S.ast.Node, ptr %a240, i32 0, i32 11 %t341 = load i64, ptr %t340 call void @finch_str_from_int(ptr %a342, i64 %t341) %t343 = load { ptr, i64, i64 }, ptr %a342 store { ptr, i64, i64 } %t339, ptr %a345 store { ptr, i64, i64 } %t343, ptr %a346 call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) store { ptr, i64, i64 } %t339, ptr %a347 call void @finch_str_drop(ptr %a347) store { ptr, i64, i64 } %t343, ptr %a348 call void @finch_str_drop(ptr %a348) %t349 = load { ptr, i64, i64 }, ptr %a344 store { ptr, i64, i64 } %t349, ptr %a351 store { ptr, i64, i64 } { ptr @.str.2150, i64 1, i64 0 }, ptr %a352 call void @finch_str_concat(ptr %a350, ptr %a351, ptr %a352) store { ptr, i64, i64 } %t349, ptr %a353 call void @finch_str_drop(ptr %a353) %t354 = load { ptr, i64, i64 }, ptr %a350 %t355 = getelementptr inbounds %S.ast.Node, ptr %a240, i32 0, i32 14 %t356 = load i64, ptr %t355 call void @finch_str_from_int(ptr %a357, i64 %t356) %t358 = load { ptr, i64, i64 }, ptr %a357 store { ptr, i64, i64 } %t354, ptr %a360 store { ptr, i64, i64 } %t358, ptr %a361 call void @finch_str_concat(ptr %a359, ptr %a360, ptr %a361) store { ptr, i64, i64 } %t354, ptr %a362 call void @finch_str_drop(ptr %a362) store { ptr, i64, i64 } %t358, ptr %a363 call void @finch_str_drop(ptr %a363) %t364 = load { ptr, i64, i64 }, ptr %a359 %t365 = load i64, ptr %t244 %t366 = add i64 %t365, 1 call void @finch_arr_reserve(ptr %t243, i64 %t366, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t367 = load ptr, ptr %t243 %t368 = getelementptr inbounds { ptr, i64, i64 }, ptr %t367, i64 %t365 store { ptr, i64, i64 } %t364, ptr %t368 store i64 %t366, ptr %t244 %t369 = load ptr, ptr %a1 %t370 = load %S.ast.Node, ptr %a2 %t371 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t372 = load i64, ptr %t371 %t373 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t374 = load i64, ptr %t373 %t375 = load %S.ast.Type, ptr %a4 %t376 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t375) store { ptr, i64, i64 } { ptr @.str.2151, i64 9, i64 0 }, ptr %a378 store { ptr, i64, i64 } %t376, ptr %a379 call void @finch_str_concat(ptr %a377, ptr %a378, ptr %a379) store { ptr, i64, i64 } %t376, ptr %a380 call void @finch_str_drop(ptr %a380) %t381 = load { ptr, i64, i64 }, ptr %a377 store { ptr, i64, i64 } %t381, ptr %a383 store { ptr, i64, i64 } { ptr @.str.2152, i64 1, i64 0 }, ptr %a384 call void @finch_str_concat(ptr %a382, ptr %a383, ptr %a384) store { ptr, i64, i64 } %t381, ptr %a385 call void @finch_str_drop(ptr %a385) %t386 = load { ptr, i64, i64 }, ptr %a382 %t387 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t386, ptr %a389 store { ptr, i64, i64 } %t387, ptr %a390 call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390) store { ptr, i64, i64 } %t386, ptr %a391 call void @finch_str_drop(ptr %a391) %t392 = load { ptr, i64, i64 }, ptr %a388 store { ptr, i64, i64 } %t392, ptr %a394 store { ptr, i64, i64 } { ptr @.str.2153, i64 4, i64 0 }, ptr %a395 call void @finch_str_concat(ptr %a393, ptr %a394, ptr %a395) store { ptr, i64, i64 } %t392, ptr %a396 call void @finch_str_drop(ptr %a396) %t397 = load { ptr, i64, i64 }, ptr %a393 call void @finch.gen.noteRef(ptr %t369, %S.ast.Node %t370, i64 %t372, i64 %t374, { ptr, i64, i64 } %t397, { ptr, i64, i64 } { ptr @.str.2154, i64 0, i64 0 }, i64 0, i64 0) store { ptr, i64, i64 } %t397, ptr %a398 call void @finch_str_drop(ptr %a398) call void @finch.drop.S_ast_Node(ptr %a240) br label %endif3369 endif3369: %t399 = load { ptr, i64, i64 }, ptr %a73 ret { ptr, i64, i64 } %t399 } define internal void @finch.gen.pushScope(ptr %p0) { entry: %a1 = alloca ptr, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic3390, label %ok3391 panic3390: call void @finch_panic(ptr @.str.2155, i64 1418, ptr @.str.2156) unreachable ok3391: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 10 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = add i64 %t6, 1 call void @finch_arr_reserve(ptr %t4, i64 %t7, i64 ptrtoint (ptr getelementptr (%S.gen.Scope, ptr null, i32 1) to i64)) %t8 = load ptr, ptr %t4 %t9 = getelementptr inbounds %S.gen.Scope, ptr %t8, i64 %t6 store %S.gen.Scope zeroinitializer, ptr %t9 store i64 %t7, ptr %t5 ret void } define internal void @finch.drop.S_gen_Var(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.Var, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.gen.Var, ptr %a, i32 0, i32 1 call void @finch.drop.S_ast_Type(ptr %t2) %t3 = getelementptr inbounds %S.gen.Var, ptr %a, i32 0, i32 2 call void @finch_str_drop(ptr %t3) %t4 = getelementptr inbounds %S.gen.Var, ptr %a, i32 0, i32 7 call void @finch_str_drop(ptr %t4) ret void } define internal void @finch.drop.arr_S_gen_Var(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond3403 n.cond3403: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body3404, label %n.end3405 n.body3404: %t7 = getelementptr inbounds %S.gen.Var, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Var(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond3403 n.end3405: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.arr_S_gen_Cleanup(ptr %a) { entry: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.S_gen_Scope(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.Scope, ptr %a, i32 0, i32 0 call void @finch.drop.arr_S_gen_Var(ptr %t1) %t2 = getelementptr inbounds %S.gen.Scope, ptr %a, i32 0, i32 1 call void @finch.drop.arr_S_ast_Node(ptr %t2) %t3 = getelementptr inbounds %S.gen.Scope, ptr %a, i32 0, i32 2 call void @finch.drop.arr_int(ptr %t3) %t4 = getelementptr inbounds %S.gen.Scope, ptr %a, i32 0, i32 3 call void @finch.drop.arr_S_gen_Cleanup(ptr %t4) ret void } define internal void @finch.gen.popScope(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a24 = alloca %S.gen.Scope, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic3392, label %ok3393 panic3392: call void @finch_panic(ptr @.str.2157, i64 1424, ptr @.str.2158) unreachable ok3393: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 9 %t5 = load i1, ptr %t4 %t6 = xor i1 %t5, true br i1 %t6, label %then3394, label %endif3396 then3394: %t7 = load ptr, ptr %a1 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic3397, label %ok3398 panic3397: call void @finch_panic(ptr @.str.2159, i64 1425, ptr @.str.2160) unreachable ok3398: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = sub i64 %t12, 1 call void @finch.gen.runCleanups(ptr %t7, i64 %t13) br label %endif3396 endif3396: %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null br i1 %t15, label %panic3399, label %ok3400 panic3399: call void @finch_panic(ptr @.str.2161, i64 1427, ptr @.str.2162) unreachable ok3400: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 10 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = icmp eq i64 %t18, 0 br i1 %t19, label %panic3401, label %ok3402 panic3401: call void @finch_panic(ptr @.str.2163, i64 1427, ptr @.str.2164) unreachable ok3402: %t20 = sub i64 %t18, 1 %t21 = load ptr, ptr %t16 %t22 = getelementptr inbounds %S.gen.Scope, ptr %t21, i64 %t20 %t23 = load %S.gen.Scope, ptr %t22 store i64 %t20, ptr %t17 store %S.gen.Scope %t23, ptr %a24 call void @finch.drop.S_gen_Scope(ptr %a24) ret void } define internal void @finch.gen.runCleanups(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a15 = alloca i64, align 16 %a37 = alloca %S.gen.Cleanup, align 16 %a59 = alloca %S.gen.Var, align 16 %a60 = alloca %S.gen.Var, align 16 %a62 = alloca %S.gen.Var, align 16 %a75 = alloca i1, align 16 %a80 = alloca i64, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic3406, label %ok3407 panic3406: call void @finch_panic(ptr @.str.2165, i64 1432, ptr @.str.2166) unreachable ok3407: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 %t6 = load i64, ptr %a2 %t7 = load { ptr, i64, i64 }, ptr %t5 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 %t6, %t8 br i1 %t9, label %range3408, label %inrange3409 range3408: call void @finch_panic_index(ptr @.str.2167, i64 1432, i64 %t6, i64 %t8) unreachable inrange3409: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.gen.Scope, ptr %t10, i64 %t6 %t12 = getelementptr inbounds %S.gen.Scope, ptr %t11, i32 0, i32 3 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 store i64 %t14, ptr %a15 br label %while.cond3410 while.cond3410: %t16 = load i64, ptr %a15 %t17 = icmp sgt i64 %t16, 0 br i1 %t17, label %while.body3411, label %while.end3412 while.body3411: %t18 = load i64, ptr %a15 %t19 = sub i64 %t18, 1 store i64 %t19, ptr %a15 %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null br i1 %t21, label %panic3413, label %ok3414 panic3413: call void @finch_panic(ptr @.str.2168, i64 1435, ptr @.str.2169) unreachable ok3414: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 10 %t23 = load i64, ptr %a2 %t24 = load { ptr, i64, i64 }, ptr %t22 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 %t23, %t25 br i1 %t26, label %range3415, label %inrange3416 range3415: call void @finch_panic_index(ptr @.str.2170, i64 1435, i64 %t23, i64 %t25) unreachable inrange3416: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds %S.gen.Scope, ptr %t27, i64 %t23 %t29 = getelementptr inbounds %S.gen.Scope, ptr %t28, i32 0, i32 3 %t30 = load i64, ptr %a15 %t31 = load { ptr, i64, i64 }, ptr %t29 %t32 = extractvalue { ptr, i64, i64 } %t31, 1 %t33 = icmp uge i64 %t30, %t32 br i1 %t33, label %range3417, label %inrange3418 range3417: call void @finch_panic_index(ptr @.str.2171, i64 1435, i64 %t30, i64 %t32) unreachable inrange3418: %t34 = extractvalue { ptr, i64, i64 } %t31, 0 %t35 = getelementptr inbounds %S.gen.Cleanup, ptr %t34, i64 %t30 %t36 = load %S.gen.Cleanup, ptr %t35 store %S.gen.Cleanup %t36, ptr %a37 %t38 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 0 %t39 = load i1, ptr %t38 %t40 = xor i1 %t39, true br i1 %t40, label %then3419, label %endif3421 then3419: %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null br i1 %t42, label %panic3422, label %ok3423 panic3422: call void @finch_panic(ptr @.str.2172, i64 1437, ptr @.str.2173) unreachable ok3423: %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 10 %t44 = load i64, ptr %a2 %t45 = load { ptr, i64, i64 }, ptr %t43 %t46 = extractvalue { ptr, i64, i64 } %t45, 1 %t47 = icmp uge i64 %t44, %t46 br i1 %t47, label %range3424, label %inrange3425 range3424: call void @finch_panic_index(ptr @.str.2174, i64 1437, i64 %t44, i64 %t46) unreachable inrange3425: %t48 = extractvalue { ptr, i64, i64 } %t45, 0 %t49 = getelementptr inbounds %S.gen.Scope, ptr %t48, i64 %t44 %t50 = getelementptr inbounds %S.gen.Scope, ptr %t49, i32 0, i32 0 %t51 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 1 %t52 = load i64, ptr %t51 %t53 = load { ptr, i64, i64 }, ptr %t50 %t54 = extractvalue { ptr, i64, i64 } %t53, 1 %t55 = icmp uge i64 %t52, %t54 br i1 %t55, label %range3426, label %inrange3427 range3426: call void @finch_panic_index(ptr @.str.2175, i64 1437, i64 %t52, i64 %t54) unreachable inrange3427: %t56 = extractvalue { ptr, i64, i64 } %t53, 0 %t57 = getelementptr inbounds %S.gen.Var, ptr %t56, i64 %t52 %t58 = load %S.gen.Var, ptr %t57 store %S.gen.Var %t58, ptr %a59 call void @finch.copy.S_gen_Var(ptr %a60, ptr %a59) %t61 = load %S.gen.Var, ptr %a60 store %S.gen.Var %t61, ptr %a62 %t63 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 6 %t64 = load i1, ptr %t63 %t65 = xor i1 %t64, true br i1 %t65, label %then3428, label %endif3430 then3428: %t66 = load ptr, ptr %a1 %t67 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 2 %t68 = load { ptr, i64, i64 }, ptr %t67 %t69 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 1 %t70 = load %S.ast.Type, ptr %t69 call void @finch.gen.dropAt(ptr %t66, { ptr, i64, i64 } %t68, %S.ast.Type %t70) br label %endif3430 endif3430: call void @finch.drop.S_gen_Var(ptr %a62) br label %while.cond3410 endif3421: %t71 = load ptr, ptr %a1 %t72 = icmp eq ptr %t71, null br i1 %t72, label %panic3431, label %ok3432 panic3431: call void @finch_panic(ptr @.str.2176, i64 1443, ptr @.str.2177) unreachable ok3432: %t73 = getelementptr inbounds %S.gen.Gen, ptr %t71, i32 0, i32 44 %t74 = load i1, ptr %t73 store i1 %t74, ptr %a75 %t76 = load ptr, ptr %a1 %t77 = icmp eq ptr %t76, null br i1 %t77, label %panic3433, label %ok3434 panic3433: call void @finch_panic(ptr @.str.2178, i64 1444, ptr @.str.2179) unreachable ok3434: %t78 = getelementptr inbounds %S.gen.Gen, ptr %t76, i32 0, i32 45 %t79 = load i64, ptr %t78 store i64 %t79, ptr %a80 %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null br i1 %t82, label %panic3435, label %ok3436 panic3435: call void @finch_panic(ptr @.str.2180, i64 1445, ptr @.str.2181) unreachable ok3436: %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 44 store i1 true, ptr %t83 %t84 = load ptr, ptr %a1 %t85 = icmp eq ptr %t84, null br i1 %t85, label %panic3437, label %ok3438 panic3437: call void @finch_panic(ptr @.str.2182, i64 1446, ptr @.str.2183) unreachable ok3438: %t86 = getelementptr inbounds %S.gen.Gen, ptr %t84, i32 0, i32 10 %t87 = load i64, ptr %a2 %t88 = load { ptr, i64, i64 }, ptr %t86 %t89 = extractvalue { ptr, i64, i64 } %t88, 1 %t90 = icmp uge i64 %t87, %t89 br i1 %t90, label %range3439, label %inrange3440 range3439: call void @finch_panic_index(ptr @.str.2184, i64 1446, i64 %t87, i64 %t89) unreachable inrange3440: %t91 = extractvalue { ptr, i64, i64 } %t88, 0 %t92 = getelementptr inbounds %S.gen.Scope, ptr %t91, i64 %t87 %t93 = getelementptr inbounds %S.gen.Scope, ptr %t92, i32 0, i32 2 %t94 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 1 %t95 = load i64, ptr %t94 %t96 = load { ptr, i64, i64 }, ptr %t93 %t97 = extractvalue { ptr, i64, i64 } %t96, 1 %t98 = icmp uge i64 %t95, %t97 br i1 %t98, label %range3441, label %inrange3442 range3441: call void @finch_panic_index(ptr @.str.2185, i64 1446, i64 %t95, i64 %t97) unreachable inrange3442: %t99 = extractvalue { ptr, i64, i64 } %t96, 0 %t100 = getelementptr inbounds i64, ptr %t99, i64 %t95 %t101 = load i64, ptr %t100 %t102 = load ptr, ptr %a1 %t103 = icmp eq ptr %t102, null br i1 %t103, label %panic3443, label %ok3444 panic3443: call void @finch_panic(ptr @.str.2186, i64 1446, ptr @.str.2187) unreachable ok3444: %t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 45 store i64 %t101, ptr %t104 %t105 = load ptr, ptr %a1 %t106 = icmp eq ptr %t105, null br i1 %t106, label %panic3445, label %ok3446 panic3445: call void @finch_panic(ptr @.str.2188, i64 1447, ptr @.str.2189) unreachable ok3446: %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 46 %t108 = load i64, ptr %t107 %t109 = add i64 %t108, 1 store i64 %t109, ptr %t107 %t110 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t110) %t111 = load ptr, ptr %a1 %t112 = load ptr, ptr %a1 %t113 = icmp eq ptr %t112, null br i1 %t113, label %panic3447, label %ok3448 panic3447: call void @finch_panic(ptr @.str.2190, i64 1449, ptr @.str.2191) unreachable ok3448: %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 10 %t115 = load i64, ptr %a2 %t116 = load { ptr, i64, i64 }, ptr %t114 %t117 = extractvalue { ptr, i64, i64 } %t116, 1 %t118 = icmp uge i64 %t115, %t117 br i1 %t118, label %range3449, label %inrange3450 range3449: call void @finch_panic_index(ptr @.str.2192, i64 1449, i64 %t115, i64 %t117) unreachable inrange3450: %t119 = extractvalue { ptr, i64, i64 } %t116, 0 %t120 = getelementptr inbounds %S.gen.Scope, ptr %t119, i64 %t115 %t121 = getelementptr inbounds %S.gen.Scope, ptr %t120, i32 0, i32 1 %t122 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 1 %t123 = load i64, ptr %t122 %t124 = load { ptr, i64, i64 }, ptr %t121 %t125 = extractvalue { ptr, i64, i64 } %t124, 1 %t126 = icmp uge i64 %t123, %t125 br i1 %t126, label %range3451, label %inrange3452 range3451: call void @finch_panic_index(ptr @.str.2193, i64 1449, i64 %t123, i64 %t125) unreachable inrange3452: %t127 = extractvalue { ptr, i64, i64 } %t124, 0 %t128 = getelementptr inbounds %S.ast.Node, ptr %t127, i64 %t123 %t129 = load %S.ast.Node, ptr %t128 call void @finch.gen.stmt(ptr %t111, %S.ast.Node %t129) %t130 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t130) %t131 = load ptr, ptr %a1 %t132 = icmp eq ptr %t131, null br i1 %t132, label %panic3453, label %ok3454 panic3453: call void @finch_panic(ptr @.str.2194, i64 1451, ptr @.str.2195) unreachable ok3454: %t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 46 %t134 = load i64, ptr %t133 %t135 = sub i64 %t134, 1 store i64 %t135, ptr %t133 %t136 = load i1, ptr %a75 %t137 = load ptr, ptr %a1 %t138 = icmp eq ptr %t137, null br i1 %t138, label %panic3455, label %ok3456 panic3455: call void @finch_panic(ptr @.str.2196, i64 1452, ptr @.str.2197) unreachable ok3456: %t139 = getelementptr inbounds %S.gen.Gen, ptr %t137, i32 0, i32 44 store i1 %t136, ptr %t139 %t140 = load i64, ptr %a80 %t141 = load ptr, ptr %a1 %t142 = icmp eq ptr %t141, null br i1 %t142, label %panic3457, label %ok3458 panic3457: call void @finch_panic(ptr @.str.2198, i64 1453, ptr @.str.2199) unreachable ok3458: %t143 = getelementptr inbounds %S.gen.Gen, ptr %t141, i32 0, i32 45 store i64 %t140, ptr %t143 br label %while.cond3410 while.end3412: ret void } define internal void @finch.gen.unwind(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a8 = alloca i64, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic3459, label %ok3460 panic3459: call void @finch_panic(ptr @.str.2200, i64 1459, ptr @.str.2201) unreachable ok3460: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 %t7, ptr %a8 br label %while.cond3461 while.cond3461: %t9 = load i64, ptr %a8 %t10 = load i64, ptr %a2 %t11 = icmp sgt i64 %t9, %t10 br i1 %t11, label %while.body3462, label %while.end3463 while.body3462: %t12 = load i64, ptr %a8 %t13 = sub i64 %t12, 1 store i64 %t13, ptr %a8 %t14 = load ptr, ptr %a1 %t15 = load i64, ptr %a8 call void @finch.gen.runCleanups(ptr %t14, i64 %t15) br label %while.cond3461 while.end3463: ret void } define internal void @finch.gen.endScope(ptr %p0) { entry: %a1 = alloca ptr, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t2) ret void } define internal { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %p0) { entry: %a1 = alloca %S.ast.Node, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Node %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.2202, i64 3, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then3464, label %endif3466 then3464: %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 1 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } %t9, ptr %a10 call void @finch_str_copy(ptr %a11, ptr %a10) %t12 = load { ptr, i64, i64 }, ptr %a11 ret { ptr, i64, i64 } %t12 endif3466: %t13 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t14 = load { ptr, i64, i64 }, ptr %t13 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.2203, i64 6, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 br label %logic.from3467 logic.from3467: br i1 %t18, label %logic.end3469, label %logic.rhs3468 logic.rhs3468: %t19 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t20 = load { ptr, i64, i64 }, ptr %t19 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.2204, i64 5, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) %t24 = icmp ne i32 %t23, 0 br label %logic.rend3470 logic.rend3470: br label %logic.end3469 logic.end3469: %t25 = phi i1 [ true, %logic.from3467 ], [ %t24, %logic.rend3470 ] br i1 %t25, label %then3471, label %endif3473 then3471: %t26 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 %t27 = load { ptr, i64, i64 }, ptr %t26 %t28 = extractvalue { ptr, i64, i64 } %t27, 1 %t29 = icmp uge i64 0, %t28 br i1 %t29, label %range3474, label %inrange3475 range3474: call void @finch_panic_index(ptr @.str.2205, i64 1477, i64 0, i64 %t28) unreachable inrange3475: %t30 = extractvalue { ptr, i64, i64 } %t27, 0 %t31 = getelementptr inbounds %S.ast.Node, ptr %t30, i64 0 %t32 = load %S.ast.Node, ptr %t31 %t33 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t32) ret { ptr, i64, i64 } %t33 endif3473: ret { ptr, i64, i64 } { ptr @.str.2206, i64 0, i64 0 } } define internal i1 @finch.gen.mutates(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Node %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Node, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca i64, align 16 %a51 = alloca i64, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca i64, align 16 %a72 = alloca i64, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca i64, align 16 %a143 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Node %p2, ptr %a3 %t4 = mul i64 8, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t5 = call ptr @finch_alloc(i64 %t4) %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 0 store { ptr, i64, i64 } { ptr @.str.2207, i64 4, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 1 store { ptr, i64, i64 } { ptr @.str.2208, i64 3, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 2 store { ptr, i64, i64 } { ptr @.str.2209, i64 6, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 3 store { ptr, i64, i64 } { ptr @.str.2210, i64 6, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 4 store { ptr, i64, i64 } { ptr @.str.2211, i64 5, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 5 store { ptr, i64, i64 } { ptr @.str.2212, i64 6, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 6 store { ptr, i64, i64 } { ptr @.str.2213, i64 4, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 7 store { ptr, i64, i64 } { ptr @.str.2214, i64 7, i64 0 }, ptr %t13 %t14 = insertvalue { ptr, i64, i64 } undef, ptr %t5, 0 %t15 = insertvalue { ptr, i64, i64 } %t14, i64 8, 1 %t16 = insertvalue { ptr, i64, i64 } %t15, i64 8, 2 store { ptr, i64, i64 } %t16, ptr %a17 %t18 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 %t19 = load { ptr, i64, i64 }, ptr %t18 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.2215, i64 6, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 br label %logic.from3476 logic.from3476: br i1 %t23, label %logic.rhs3477, label %logic.end3478 logic.rhs3477: %t24 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t25 = load { ptr, i64, i64 }, ptr %t24 %t26 = extractvalue { ptr, i64, i64 } %t25, 1 %t27 = icmp uge i64 0, %t26 br i1 %t27, label %range3479, label %inrange3480 range3479: call void @finch_panic_index(ptr @.str.2216, i64 1484, i64 0, i64 %t26) unreachable inrange3480: %t28 = extractvalue { ptr, i64, i64 } %t25, 0 %t29 = getelementptr inbounds %S.ast.Node, ptr %t28, i64 0 %t30 = load %S.ast.Node, ptr %t29 %t31 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t30) %t32 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t31, ptr %a33 store { ptr, i64, i64 } %t32, ptr %a34 %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) %t36 = icmp ne i32 %t35, 0 store { ptr, i64, i64 } %t31, ptr %a37 call void @finch_str_drop(ptr %a37) br label %logic.rend3481 logic.rend3481: br label %logic.end3478 logic.end3478: %t38 = phi i1 [ false, %logic.from3476 ], [ %t36, %logic.rend3481 ] br i1 %t38, label %then3482, label %endif3484 then3482: call void @finch.drop.arr_str(ptr %a17) ret i1 true endif3484: %t39 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 %t40 = load { ptr, i64, i64 }, ptr %t39 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } { ptr @.str.2217, i64 6, i64 0 }, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 br label %logic.from3485 logic.from3485: br i1 %t44, label %logic.rhs3486, label %logic.end3487 logic.rhs3486: %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %a17, i32 0, i32 1 %t46 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 %t47 = load { ptr, i64, i64 }, ptr %t46 store i64 -1, ptr %a48 %t49 = load i64, ptr %t45 %t50 = load ptr, ptr %a17 store i64 0, ptr %a51 br label %find.cond3488 find.cond3488: %t52 = load i64, ptr %a51 %t53 = icmp slt i64 %t52, %t49 br i1 %t53, label %find.body3489, label %find.end3492 find.body3489: %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t52 %t55 = load { ptr, i64, i64 }, ptr %t54 store { ptr, i64, i64 } %t55, ptr %a56 store { ptr, i64, i64 } %t47, ptr %a57 %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) %t59 = icmp ne i32 %t58, 0 br i1 %t59, label %find.hit3490, label %find.next3491 find.hit3490: store i64 %t52, ptr %a48 br label %find.end3492 find.next3491: %t60 = add i64 %t52, 1 store i64 %t60, ptr %a51 br label %find.cond3488 find.end3492: %t61 = load i64, ptr %a48 %t62 = icmp sge i64 %t61, 0 br label %logic.from3493 logic.from3493: br i1 %t62, label %logic.end3495, label %logic.rhs3494 logic.rhs3494: %t63 = load ptr, ptr %a1 %t64 = icmp eq ptr %t63, null br i1 %t64, label %panic3496, label %ok3497 panic3496: call void @finch_panic(ptr @.str.2218, i64 1490, ptr @.str.2219) unreachable ok3497: %t65 = getelementptr inbounds %S.gen.Gen, ptr %t63, i32 0, i32 24 %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i32 0, i32 1 %t67 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 %t68 = load { ptr, i64, i64 }, ptr %t67 store i64 -1, ptr %a69 %t70 = load i64, ptr %t66 %t71 = load ptr, ptr %t65 store i64 0, ptr %a72 br label %find.cond3498 find.cond3498: %t73 = load i64, ptr %a72 %t74 = icmp slt i64 %t73, %t70 br i1 %t74, label %find.body3499, label %find.end3502 find.body3499: %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i64 %t73 %t76 = load { ptr, i64, i64 }, ptr %t75 store { ptr, i64, i64 } %t76, ptr %a77 store { ptr, i64, i64 } %t68, ptr %a78 %t79 = call i32 @finch_str_eq(ptr %a77, ptr %a78) %t80 = icmp ne i32 %t79, 0 br i1 %t80, label %find.hit3500, label %find.next3501 find.hit3500: store i64 %t73, ptr %a69 br label %find.end3502 find.next3501: %t81 = add i64 %t73, 1 store i64 %t81, ptr %a72 br label %find.cond3498 find.end3502: %t82 = load i64, ptr %a69 %t83 = icmp sge i64 %t82, 0 br label %logic.rend3503 logic.rend3503: br label %logic.end3495 logic.end3495: %t84 = phi i1 [ true, %logic.from3493 ], [ %t83, %logic.rend3503 ] br label %logic.rend3504 logic.rend3504: br label %logic.end3487 logic.end3487: %t85 = phi i1 [ false, %logic.from3485 ], [ %t84, %logic.rend3504 ] br label %logic.from3505 logic.from3505: br i1 %t85, label %logic.rhs3506, label %logic.end3507 logic.rhs3506: %t86 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t87 = load { ptr, i64, i64 }, ptr %t86 %t88 = extractvalue { ptr, i64, i64 } %t87, 1 %t89 = icmp uge i64 0, %t88 br i1 %t89, label %range3508, label %inrange3509 range3508: call void @finch_panic_index(ptr @.str.2220, i64 1490, i64 0, i64 %t88) unreachable inrange3509: %t90 = extractvalue { ptr, i64, i64 } %t87, 0 %t91 = getelementptr inbounds %S.ast.Node, ptr %t90, i64 0 %t92 = load %S.ast.Node, ptr %t91 %t93 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t92) %t94 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t93, ptr %a95 store { ptr, i64, i64 } %t94, ptr %a96 %t97 = call i32 @finch_str_eq(ptr %a95, ptr %a96) %t98 = icmp ne i32 %t97, 0 store { ptr, i64, i64 } %t93, ptr %a99 call void @finch_str_drop(ptr %a99) br label %logic.rend3510 logic.rend3510: br label %logic.end3507 logic.end3507: %t100 = phi i1 [ false, %logic.from3505 ], [ %t98, %logic.rend3510 ] br i1 %t100, label %then3511, label %endif3513 then3511: call void @finch.drop.arr_str(ptr %a17) ret i1 true endif3513: %t101 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 %t102 = load { ptr, i64, i64 }, ptr %t101 store { ptr, i64, i64 } %t102, ptr %a103 store { ptr, i64, i64 } { ptr @.str.2221, i64 4, i64 0 }, ptr %a104 %t105 = call i32 @finch_str_eq(ptr %a103, ptr %a104) %t106 = icmp ne i32 %t105, 0 br label %logic.from3514 logic.from3514: br i1 %t106, label %logic.rhs3515, label %logic.end3516 logic.rhs3515: %t107 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 %t108 = load { ptr, i64, i64 }, ptr %t107 store { ptr, i64, i64 } %t108, ptr %a109 store { ptr, i64, i64 } { ptr @.str.2222, i64 4, i64 0 }, ptr %a110 %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) %t112 = icmp ne i32 %t111, 0 br label %logic.rend3517 logic.rend3517: br label %logic.end3516 logic.end3516: %t113 = phi i1 [ false, %logic.from3514 ], [ %t112, %logic.rend3517 ] br label %logic.from3518 logic.from3518: br i1 %t113, label %logic.rhs3519, label %logic.end3520 logic.rhs3519: %t114 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 %t116 = load i64, ptr %t115 %t117 = icmp eq i64 %t116, 1 br label %logic.rend3521 logic.rend3521: br label %logic.end3520 logic.end3520: %t118 = phi i1 [ false, %logic.from3518 ], [ %t117, %logic.rend3521 ] br label %logic.from3522 logic.from3522: br i1 %t118, label %logic.rhs3523, label %logic.end3524 logic.rhs3523: %t119 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t120 = load { ptr, i64, i64 }, ptr %t119 %t121 = extractvalue { ptr, i64, i64 } %t120, 1 %t122 = icmp uge i64 0, %t121 br i1 %t122, label %range3525, label %inrange3526 range3525: call void @finch_panic_index(ptr @.str.2223, i64 1493, i64 0, i64 %t121) unreachable inrange3526: %t123 = extractvalue { ptr, i64, i64 } %t120, 0 %t124 = getelementptr inbounds %S.ast.Node, ptr %t123, i64 0 %t125 = load %S.ast.Node, ptr %t124 %t126 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t125) %t127 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t126, ptr %a128 store { ptr, i64, i64 } %t127, ptr %a129 %t130 = call i32 @finch_str_eq(ptr %a128, ptr %a129) %t131 = icmp ne i32 %t130, 0 store { ptr, i64, i64 } %t126, ptr %a132 call void @finch_str_drop(ptr %a132) br label %logic.rend3527 logic.rend3527: br label %logic.end3524 logic.end3524: %t133 = phi i1 [ false, %logic.from3522 ], [ %t131, %logic.rend3527 ] br i1 %t133, label %then3528, label %endif3530 then3528: call void @finch.drop.arr_str(ptr %a17) ret i1 true endif3530: %t134 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 store i64 0, ptr %a135 br label %each.cond3531 each.cond3531: %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1 %t137 = load i64, ptr %t136 %t138 = load i64, ptr %a135 %t139 = icmp slt i64 %t138, %t137 br i1 %t139, label %each.body3532, label %each.end3534 each.body3532: %t140 = load ptr, ptr %t134 %t141 = getelementptr inbounds %S.ast.Node, ptr %t140, i64 %t138 %t142 = load %S.ast.Node, ptr %t141 store %S.ast.Node %t142, ptr %a143 %t144 = load ptr, ptr %a1 %t145 = load { ptr, i64, i64 }, ptr %a2 %t146 = load %S.ast.Node, ptr %a143 %t147 = call i1 @finch.gen.mutates(ptr %t144, { ptr, i64, i64 } %t145, %S.ast.Node %t146) br i1 %t147, label %then3535, label %endif3537 then3535: call void @finch.drop.arr_str(ptr %a17) ret i1 true endif3537: br label %each.step3533 each.step3533: %t148 = load i64, ptr %a135 %t149 = add i64 %t148, 1 store i64 %t149, ptr %a135 br label %each.cond3531 each.end3534: call void @finch.drop.arr_str(ptr %a17) ret i1 false } define internal void @finch.gen.declare(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a7 = alloca i64, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca i64, align 16 %a61 = alloca %S.ast.Node, align 16 %a62 = alloca %S.ast.Node, align 16 %a64 = alloca %S.ast.Node, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca i64, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca i64, align 16 %a224 = alloca %S.ast.Node, align 16 %a225 = alloca %S.ast.Node, align 16 %a227 = alloca %S.ast.Node, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca %S.gen.SumDef, align 16 %a278 = alloca i64, align 16 %a280 = alloca i64, align 16 %a288 = alloca %S.ast.Node, align 16 %a293 = alloca i64, align 16 %a296 = alloca i64, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a373 = alloca %S.gen.SumDef, align 16 %a374 = alloca %S.gen.SumDef, align 16 %a403 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a410 = alloca { ptr, i64, i64 }, align 16 %a412 = alloca { ptr, i64, i64 }, align 16 %a417 = alloca { ptr, i64, i64 }, align 16 %a418 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca %S.gen.EnumDef, align 16 %a428 = alloca i64, align 16 %a430 = alloca i64, align 16 %a438 = alloca %S.ast.Node, align 16 %a445 = alloca { ptr, i64, i64 }, align 16 %a451 = alloca i64, align 16 %a454 = alloca i64, align 16 %a459 = alloca { ptr, i64, i64 }, align 16 %a460 = alloca { ptr, i64, i64 }, align 16 %a470 = alloca { ptr, i64, i64 }, align 16 %a471 = alloca { ptr, i64, i64 }, align 16 %a472 = alloca { ptr, i64, i64 }, align 16 %a474 = alloca { ptr, i64, i64 }, align 16 %a475 = alloca { ptr, i64, i64 }, align 16 %a476 = alloca { ptr, i64, i64 }, align 16 %a477 = alloca { ptr, i64, i64 }, align 16 %a481 = alloca { ptr, i64, i64 }, align 16 %a482 = alloca { ptr, i64, i64 }, align 16 %a483 = alloca { ptr, i64, i64 }, align 16 %a484 = alloca { ptr, i64, i64 }, align 16 %a486 = alloca { ptr, i64, i64 }, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a488 = alloca { ptr, i64, i64 }, align 16 %a489 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca { ptr, i64, i64 }, align 16 %a495 = alloca i64, align 16 %a498 = alloca i64, align 16 %a511 = alloca { ptr, i64, i64 }, align 16 %a512 = alloca { ptr, i64, i64 }, align 16 %a513 = alloca { ptr, i64, i64 }, align 16 %a515 = alloca { ptr, i64, i64 }, align 16 %a516 = alloca { ptr, i64, i64 }, align 16 %a517 = alloca { ptr, i64, i64 }, align 16 %a518 = alloca { ptr, i64, i64 }, align 16 %a521 = alloca { ptr, i64, i64 }, align 16 %a523 = alloca { ptr, i64, i64 }, align 16 %a524 = alloca { ptr, i64, i64 }, align 16 %a525 = alloca { ptr, i64, i64 }, align 16 %a526 = alloca { ptr, i64, i64 }, align 16 %a527 = alloca { ptr, i64, i64 }, align 16 %a529 = alloca { ptr, i64, i64 }, align 16 %a530 = alloca { ptr, i64, i64 }, align 16 %a531 = alloca { ptr, i64, i64 }, align 16 %a532 = alloca { ptr, i64, i64 }, align 16 %a534 = alloca { ptr, i64, i64 }, align 16 %a539 = alloca { ptr, i64, i64 }, align 16 %a540 = alloca { ptr, i64, i64 }, align 16 %a562 = alloca %S.gen.EnumDef, align 16 %a563 = alloca %S.gen.EnumDef, align 16 %a579 = alloca i64, align 16 %a598 = alloca { ptr, i64, i64 }, align 16 %a599 = alloca { ptr, i64, i64 }, align 16 %a617 = alloca i64, align 16 %a629 = alloca i64, align 16 %a646 = alloca { ptr, i64, i64 }, align 16 %a647 = alloca { ptr, i64, i64 }, align 16 %a650 = alloca { ptr, i64, i64 }, align 16 %a663 = alloca i64, align 16 %a683 = alloca %S.ast.Node, align 16 %a684 = alloca %S.ast.Node, align 16 %a686 = alloca %S.ast.Node, align 16 %a706 = alloca { ptr, i64, i64 }, align 16 %a707 = alloca { ptr, i64, i64 }, align 16 %a708 = alloca { ptr, i64, i64 }, align 16 %a710 = alloca { ptr, i64, i64 }, align 16 %a711 = alloca { ptr, i64, i64 }, align 16 %a712 = alloca { ptr, i64, i64 }, align 16 %a713 = alloca { ptr, i64, i64 }, align 16 %a715 = alloca { ptr, i64, i64 }, align 16 %a734 = alloca { ptr, i64, i64 }, align 16 %a735 = alloca { ptr, i64, i64 }, align 16 %a736 = alloca { ptr, i64, i64 }, align 16 %a738 = alloca { ptr, i64, i64 }, align 16 %a739 = alloca { ptr, i64, i64 }, align 16 %a740 = alloca { ptr, i64, i64 }, align 16 %a741 = alloca { ptr, i64, i64 }, align 16 %a743 = alloca { ptr, i64, i64 }, align 16 %a752 = alloca { ptr, i64, i64 }, align 16 %a753 = alloca { ptr, i64, i64 }, align 16 %a758 = alloca { ptr, i64, i64 }, align 16 %a759 = alloca { ptr, i64, i64 }, align 16 %a764 = alloca { ptr, i64, i64 }, align 16 %a765 = alloca { ptr, i64, i64 }, align 16 %a770 = alloca { ptr, i64, i64 }, align 16 %a771 = alloca { ptr, i64, i64 }, align 16 %a786 = alloca { ptr, i64, i64 }, align 16 %a787 = alloca { ptr, i64, i64 }, align 16 %a789 = alloca { ptr, i64, i64 }, align 16 %a790 = alloca i1, align 16 %a817 = alloca { ptr, i64, i64 }, align 16 %a818 = alloca { ptr, i64, i64 }, align 16 %a819 = alloca { ptr, i64, i64 }, align 16 %a821 = alloca { ptr, i64, i64 }, align 16 %a822 = alloca { ptr, i64, i64 }, align 16 %a823 = alloca { ptr, i64, i64 }, align 16 %a824 = alloca { ptr, i64, i64 }, align 16 %a828 = alloca { ptr, i64, i64 }, align 16 %a829 = alloca { ptr, i64, i64 }, align 16 %a830 = alloca { ptr, i64, i64 }, align 16 %a831 = alloca { ptr, i64, i64 }, align 16 %a833 = alloca { ptr, i64, i64 }, align 16 %a834 = alloca { ptr, i64, i64 }, align 16 %a835 = alloca { ptr, i64, i64 }, align 16 %a836 = alloca { ptr, i64, i64 }, align 16 %a838 = alloca { ptr, i64, i64 }, align 16 %a851 = alloca i64, align 16 %a865 = alloca { ptr, i64, i64 }, align 16 %a872 = alloca { ptr, i64, i64 }, align 16 %a873 = alloca { ptr, i64, i64 }, align 16 %a874 = alloca { ptr, i64, i64 }, align 16 %a876 = alloca { ptr, i64, i64 }, align 16 %a877 = alloca { ptr, i64, i64 }, align 16 %a878 = alloca { ptr, i64, i64 }, align 16 %a879 = alloca { ptr, i64, i64 }, align 16 %a881 = alloca { ptr, i64, i64 }, align 16 %a894 = alloca { ptr, i64, i64 }, align 16 %a895 = alloca { ptr, i64, i64 }, align 16 %a896 = alloca { ptr, i64, i64 }, align 16 %a898 = alloca { ptr, i64, i64 }, align 16 %a899 = alloca { ptr, i64, i64 }, align 16 %a900 = alloca { ptr, i64, i64 }, align 16 %a901 = alloca { ptr, i64, i64 }, align 16 %a905 = alloca { ptr, i64, i64 }, align 16 %a906 = alloca { ptr, i64, i64 }, align 16 %a907 = alloca { ptr, i64, i64 }, align 16 %a908 = alloca { ptr, i64, i64 }, align 16 %a910 = alloca { ptr, i64, i64 }, align 16 %a911 = alloca { ptr, i64, i64 }, align 16 %a912 = alloca { ptr, i64, i64 }, align 16 %a913 = alloca { ptr, i64, i64 }, align 16 %a915 = alloca { ptr, i64, i64 }, align 16 %a929 = alloca i64, align 16 %a932 = alloca i64, align 16 %a937 = alloca { ptr, i64, i64 }, align 16 %a938 = alloca { ptr, i64, i64 }, align 16 %a948 = alloca { ptr, i64, i64 }, align 16 %a949 = alloca { ptr, i64, i64 }, align 16 %a950 = alloca { ptr, i64, i64 }, align 16 %a952 = alloca { ptr, i64, i64 }, align 16 %a953 = alloca { ptr, i64, i64 }, align 16 %a954 = alloca { ptr, i64, i64 }, align 16 %a955 = alloca { ptr, i64, i64 }, align 16 %a959 = alloca { ptr, i64, i64 }, align 16 %a960 = alloca { ptr, i64, i64 }, align 16 %a961 = alloca { ptr, i64, i64 }, align 16 %a962 = alloca { ptr, i64, i64 }, align 16 %a964 = alloca { ptr, i64, i64 }, align 16 %a965 = alloca { ptr, i64, i64 }, align 16 %a966 = alloca { ptr, i64, i64 }, align 16 %a967 = alloca { ptr, i64, i64 }, align 16 %a969 = alloca { ptr, i64, i64 }, align 16 %a983 = alloca { ptr, i64, i64 }, align 16 %a984 = alloca { ptr, i64, i64 }, align 16 %a985 = alloca { ptr, i64, i64 }, align 16 %a987 = alloca { ptr, i64, i64 }, align 16 %a988 = alloca { ptr, i64, i64 }, align 16 %a989 = alloca { ptr, i64, i64 }, align 16 %a990 = alloca { ptr, i64, i64 }, align 16 %a992 = alloca { ptr, i64, i64 }, align 16 %a1000 = alloca { ptr, i64, i64 }, align 16 %a1001 = alloca { ptr, i64, i64 }, align 16 %a1002 = alloca { ptr, i64, i64 }, align 16 %a1004 = alloca { ptr, i64, i64 }, align 16 %a1005 = alloca { ptr, i64, i64 }, align 16 %a1006 = alloca { ptr, i64, i64 }, align 16 %a1007 = alloca { ptr, i64, i64 }, align 16 %a1009 = alloca { ptr, i64, i64 }, align 16 %a1014 = alloca { ptr, i64, i64 }, align 16 %a1015 = alloca { ptr, i64, i64 }, align 16 %a1020 = alloca { ptr, i64, i64 }, align 16 %a1021 = alloca { ptr, i64, i64 }, align 16 %a1026 = alloca { ptr, i64, i64 }, align 16 %a1027 = alloca { ptr, i64, i64 }, align 16 %a1031 = alloca { ptr, i64, i64 }, align 16 %a1032 = alloca { ptr, i64, i64 }, align 16 %a1047 = alloca %S.gen.FnSig, align 16 %a1053 = alloca { ptr, i64, i64 }, align 16 %a1054 = alloca { ptr, i64, i64 }, align 16 %a1055 = alloca { ptr, i64, i64 }, align 16 %a1056 = alloca { ptr, i64, i64 }, align 16 %a1058 = alloca { ptr, i64, i64 }, align 16 %a1059 = alloca { ptr, i64, i64 }, align 16 %a1060 = alloca { ptr, i64, i64 }, align 16 %a1061 = alloca { ptr, i64, i64 }, align 16 %a1065 = alloca { ptr, i64, i64 }, align 16 %a1066 = alloca { ptr, i64, i64 }, align 16 %a1067 = alloca { ptr, i64, i64 }, align 16 %a1068 = alloca { ptr, i64, i64 }, align 16 %a1072 = alloca { ptr, i64, i64 }, align 16 %a1082 = alloca { ptr, i64, i64 }, align 16 %a1083 = alloca { ptr, i64, i64 }, align 16 %a1084 = alloca { ptr, i64, i64 }, align 16 %a1085 = alloca { ptr, i64, i64 }, align 16 %a1087 = alloca { ptr, i64, i64 }, align 16 %a1088 = alloca { ptr, i64, i64 }, align 16 %a1089 = alloca { ptr, i64, i64 }, align 16 %a1090 = alloca { ptr, i64, i64 }, align 16 %a1094 = alloca { ptr, i64, i64 }, align 16 %a1095 = alloca { ptr, i64, i64 }, align 16 %a1096 = alloca { ptr, i64, i64 }, align 16 %a1097 = alloca { ptr, i64, i64 }, align 16 %a1099 = alloca { ptr, i64, i64 }, align 16 %a1100 = alloca { ptr, i64, i64 }, align 16 %a1101 = alloca { ptr, i64, i64 }, align 16 %a1102 = alloca { ptr, i64, i64 }, align 16 %a1106 = alloca { ptr, i64, i64 }, align 16 %a1107 = alloca { ptr, i64, i64 }, align 16 %a1108 = alloca { ptr, i64, i64 }, align 16 %a1109 = alloca { ptr, i64, i64 }, align 16 %a1113 = alloca { ptr, i64, i64 }, align 16 %a1121 = alloca %S.ast.Type, align 16 %a1126 = alloca i64, align 16 %a1138 = alloca { ptr, i64, i64 }, align 16 %a1139 = alloca { ptr, i64, i64 }, align 16 %a1158 = alloca { ptr, i64, i64 }, align 16 %a1159 = alloca { ptr, i64, i64 }, align 16 %a1160 = alloca { ptr, i64, i64 }, align 16 %a1162 = alloca { ptr, i64, i64 }, align 16 %a1163 = alloca { ptr, i64, i64 }, align 16 %a1164 = alloca { ptr, i64, i64 }, align 16 %a1165 = alloca { ptr, i64, i64 }, align 16 %a1167 = alloca { ptr, i64, i64 }, align 16 %a1204 = alloca { ptr, i64, i64 }, align 16 %a1205 = alloca { ptr, i64, i64 }, align 16 %a1223 = alloca %S.gen.FnSig, align 16 %a1224 = alloca %S.gen.FnSig, align 16 %a1234 = alloca i1, align 16 %a1241 = alloca i64, align 16 %a1307 = alloca %S.ast.Node, align 16 %a1308 = alloca %S.ast.Node, align 16 %a1310 = alloca %S.ast.Node, align 16 %a1349 = alloca { ptr, i64, i64 }, align 16 %a1350 = alloca { ptr, i64, i64 }, align 16 %a1363 = alloca i64, align 16 %a1376 = alloca %S.gen.Template, align 16 %a1377 = alloca %S.gen.Template, align 16 %a1379 = alloca %S.gen.Template, align 16 %a1407 = alloca %S.ast.Node, align 16 %a1408 = alloca %S.ast.Node, align 16 %a1410 = alloca %S.ast.Node, align 16 %a1440 = alloca { ptr, i64, i64 }, align 16 %a1441 = alloca { ptr, i64, i64 }, align 16 %a1454 = alloca i64, align 16 %a1494 = alloca %S.ast.Node, align 16 %a1495 = alloca %S.ast.Node, align 16 %a1497 = alloca %S.ast.Node, align 16 %a1509 = alloca %S.ast.Node, align 16 %a1510 = alloca %S.ast.Node, align 16 %a1512 = alloca %S.ast.Node, align 16 %a1525 = alloca i64, align 16 %a1545 = alloca %S.ast.Type, align 16 %a1546 = alloca %S.ast.Type, align 16 %a1548 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic3538, label %ok3539 panic3538: call void @finch_panic(ptr @.str.2224, i64 1507, ptr @.str.2225) unreachable ok3539: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 0 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 %t6 = load i64, ptr %t5 store i64 0, ptr %a7 br label %for.cond3540 for.cond3540: %t8 = load i64, ptr %a7 %t9 = icmp slt i64 %t8, %t6 br i1 %t9, label %for.body3541, label %for.end3543 for.body3541: %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic3544, label %ok3545 panic3544: call void @finch_panic(ptr @.str.2226, i64 1508, ptr @.str.2227) unreachable ok3545: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 0 %t13 = load i64, ptr %a7 %t14 = load { ptr, i64, i64 }, ptr %t12 %t15 = extractvalue { ptr, i64, i64 } %t14, 1 %t16 = icmp uge i64 %t13, %t15 br i1 %t16, label %range3546, label %inrange3547 range3546: call void @finch_panic_index(ptr @.str.2228, i64 1508, i64 %t13, i64 %t15) unreachable inrange3547: %t17 = extractvalue { ptr, i64, i64 } %t14, 0 %t18 = getelementptr inbounds %S.ast.Program, ptr %t17, i64 %t13 %t19 = getelementptr inbounds %S.ast.Program, ptr %t18, i32 0, i32 0 %t20 = load { ptr, i64, i64 }, ptr %t19 %t21 = load ptr, ptr %a1 %t22 = icmp eq ptr %t21, null br i1 %t22, label %panic3548, label %ok3549 panic3548: call void @finch_panic(ptr @.str.2229, i64 1508, ptr @.str.2230) unreachable ok3549: %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 14 store { ptr, i64, i64 } %t20, ptr %a24 call void @finch_str_copy(ptr %a25, ptr %a24) %t26 = load { ptr, i64, i64 }, ptr %a25 %t27 = load { ptr, i64, i64 }, ptr %t23 store { ptr, i64, i64 } %t26, ptr %t23 store { ptr, i64, i64 } %t27, ptr %a28 call void @finch_str_drop(ptr %a28) %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null br i1 %t30, label %panic3550, label %ok3551 panic3550: call void @finch_panic(ptr @.str.2231, i64 1509, ptr @.str.2232) unreachable ok3551: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 0 %t32 = load i64, ptr %a7 %t33 = load { ptr, i64, i64 }, ptr %t31 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 br i1 %t35, label %range3552, label %inrange3553 range3552: call void @finch_panic_index(ptr @.str.2233, i64 1509, i64 %t32, i64 %t34) unreachable inrange3553: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds %S.ast.Program, ptr %t36, i64 %t32 %t38 = getelementptr inbounds %S.ast.Program, ptr %t37, i32 0, i32 6 %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i32 0, i32 1 %t40 = load i64, ptr %t39 store i64 0, ptr %a41 br label %for.cond3554 for.cond3554: %t42 = load i64, ptr %a41 %t43 = icmp slt i64 %t42, %t40 br i1 %t43, label %for.body3555, label %for.end3557 for.body3555: %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null br i1 %t45, label %panic3558, label %ok3559 panic3558: call void @finch_panic(ptr @.str.2234, i64 1510, ptr @.str.2235) unreachable ok3559: %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 0 %t47 = load i64, ptr %a7 %t48 = load { ptr, i64, i64 }, ptr %t46 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 br i1 %t50, label %range3560, label %inrange3561 range3560: call void @finch_panic_index(ptr @.str.2236, i64 1510, i64 %t47, i64 %t49) unreachable inrange3561: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds %S.ast.Program, ptr %t51, i64 %t47 %t53 = getelementptr inbounds %S.ast.Program, ptr %t52, i32 0, i32 6 %t54 = load i64, ptr %a41 %t55 = load { ptr, i64, i64 }, ptr %t53 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 br i1 %t57, label %range3562, label %inrange3563 range3562: call void @finch_panic_index(ptr @.str.2237, i64 1510, i64 %t54, i64 %t56) unreachable inrange3563: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 %t60 = load %S.ast.Node, ptr %t59 store %S.ast.Node %t60, ptr %a61 call void @finch.copy.S_ast_Node(ptr %a62, ptr %a61) %t63 = load %S.ast.Node, ptr %a62 store %S.ast.Node %t63, ptr %a64 %t65 = load ptr, ptr %a1 %t66 = load ptr, ptr %a1 %t67 = icmp eq ptr %t66, null br i1 %t67, label %panic3564, label %ok3565 panic3564: call void @finch_panic(ptr @.str.2238, i64 1511, ptr @.str.2239) unreachable ok3565: %t68 = getelementptr inbounds %S.gen.Gen, ptr %t66, i32 0, i32 14 %t69 = load { ptr, i64, i64 }, ptr %t68 %t70 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 %t71 = load { ptr, i64, i64 }, ptr %t70 %t72 = call i64 @finch.gen.findStruct(ptr %t65, { ptr, i64, i64 } %t69, { ptr, i64, i64 } %t71) %t73 = icmp sge i64 %t72, 0 br label %logic.from3566 logic.from3566: br i1 %t73, label %logic.end3568, label %logic.rhs3567 logic.rhs3567: %t74 = load ptr, ptr %a1 %t75 = load ptr, ptr %a1 %t76 = icmp eq ptr %t75, null br i1 %t76, label %panic3569, label %ok3570 panic3569: call void @finch_panic(ptr @.str.2240, i64 1511, ptr @.str.2241) unreachable ok3570: %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 14 %t78 = load { ptr, i64, i64 }, ptr %t77 %t79 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 %t80 = load { ptr, i64, i64 }, ptr %t79 %t81 = call i64 @finch.gen.findTemplate(ptr %t74, { ptr, i64, i64 } %t78, { ptr, i64, i64 } %t80, { ptr, i64, i64 } { ptr @.str.2242, i64 0, i64 0 }, i1 true) %t82 = icmp sge i64 %t81, 0 br label %logic.rend3571 logic.rend3571: br label %logic.end3568 logic.end3568: %t83 = phi i1 [ true, %logic.from3566 ], [ %t82, %logic.rend3571 ] br i1 %t83, label %then3572, label %endif3574 then3572: %t84 = load ptr, ptr %a1 %t85 = load %S.ast.Node, ptr %a64 %t86 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 %t87 = load { ptr, i64, i64 }, ptr %t86 store { ptr, i64, i64 } { ptr @.str.2243, i64 12, i64 0 }, ptr %a89 store { ptr, i64, i64 } %t87, ptr %a90 call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) %t91 = load { ptr, i64, i64 }, ptr %a88 store { ptr, i64, i64 } %t91, ptr %a93 store { ptr, i64, i64 } { ptr @.str.2244, i64 18, i64 0 }, ptr %a94 call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) store { ptr, i64, i64 } %t91, ptr %a95 call void @finch_str_drop(ptr %a95) %t96 = load { ptr, i64, i64 }, ptr %a92 call void @finch.gen.fail(ptr %t84, %S.ast.Node %t85, { ptr, i64, i64 } %t96) store { ptr, i64, i64 } %t96, ptr %a97 call void @finch_str_drop(ptr %a97) br label %endif3574 endif3574: %t98 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 3 %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1 %t100 = load i64, ptr %t99 %t101 = icmp sgt i64 %t100, 0 br i1 %t101, label %then3575, label %endif3577 then3575: %t102 = load ptr, ptr %a1 %t103 = icmp eq ptr %t102, null br i1 %t103, label %panic3578, label %ok3579 panic3578: call void @finch_panic(ptr @.str.2245, i64 1516, ptr @.str.2246) unreachable ok3579: %t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 17 %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 %t106 = load ptr, ptr %a1 %t107 = icmp eq ptr %t106, null br i1 %t107, label %panic3580, label %ok3581 panic3580: call void @finch_panic(ptr @.str.2247, i64 1516, ptr @.str.2248) unreachable ok3581: %t108 = getelementptr inbounds %S.gen.Gen, ptr %t106, i32 0, i32 14 %t109 = load { ptr, i64, i64 }, ptr %t108 store { ptr, i64, i64 } %t109, ptr %a110 call void @finch_str_copy(ptr %a111, ptr %a110) %t112 = load { ptr, i64, i64 }, ptr %a111 %t113 = insertvalue %S.gen.Template zeroinitializer, { ptr, i64, i64 } %t112, 0 %t114 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 %t115 = load { ptr, i64, i64 }, ptr %t114 store { ptr, i64, i64 } %t115, ptr %a116 call void @finch_str_copy(ptr %a117, ptr %a116) %t118 = load { ptr, i64, i64 }, ptr %a117 %t119 = insertvalue %S.gen.Template %t113, { ptr, i64, i64 } %t118, 1 %t120 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 3 %t121 = load { ptr, i64, i64 }, ptr %t120 store { ptr, i64, i64 } %t121, ptr %a122 call void @finch.copy.arr_str(ptr %a123, ptr %a122) %t124 = load { ptr, i64, i64 }, ptr %a123 %t125 = insertvalue %S.gen.Template %t119, { ptr, i64, i64 } %t124, 3 %t126 = load i64, ptr %a7 %t127 = insertvalue %S.gen.Template %t125, i64 %t126, 4 %t128 = load i64, ptr %a41 %t129 = insertvalue %S.gen.Template %t127, i64 %t128, 5 %t130 = insertvalue %S.gen.Template %t129, i1 true, 6 %t131 = load i64, ptr %t105 %t132 = add i64 %t131, 1 call void @finch_arr_reserve(ptr %t104, i64 %t132, i64 ptrtoint (ptr getelementptr (%S.gen.Template, ptr null, i32 1) to i64)) %t133 = load ptr, ptr %t104 %t134 = getelementptr inbounds %S.gen.Template, ptr %t133, i64 %t131 store %S.gen.Template %t130, ptr %t134 store i64 %t132, ptr %t105 call void @finch.drop.S_ast_Node(ptr %a64) br label %for.step3556 endif3577: %t135 = load ptr, ptr %a1 %t136 = icmp eq ptr %t135, null br i1 %t136, label %panic3582, label %ok3583 panic3582: call void @finch_panic(ptr @.str.2249, i64 1519, ptr @.str.2250) unreachable ok3583: %t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 16 %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 %t139 = load ptr, ptr %a1 %t140 = icmp eq ptr %t139, null br i1 %t140, label %panic3584, label %ok3585 panic3584: call void @finch_panic(ptr @.str.2251, i64 1519, ptr @.str.2252) unreachable ok3585: %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 14 %t142 = load { ptr, i64, i64 }, ptr %t141 store { ptr, i64, i64 } %t142, ptr %a143 call void @finch_str_copy(ptr %a144, ptr %a143) %t145 = load { ptr, i64, i64 }, ptr %a144 %t146 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } %t145, 0 %t147 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 %t148 = load { ptr, i64, i64 }, ptr %t147 store { ptr, i64, i64 } %t148, ptr %a149 call void @finch_str_copy(ptr %a150, ptr %a149) %t151 = load { ptr, i64, i64 }, ptr %a150 %t152 = insertvalue %S.gen.StructDef %t146, { ptr, i64, i64 } %t151, 1 %t153 = load i64, ptr %a7 %t154 = insertvalue %S.gen.StructDef %t152, i64 %t153, 13 %t155 = load i64, ptr %a41 %t156 = insertvalue %S.gen.StructDef %t154, i64 %t155, 14 %t157 = load i64, ptr %t138 %t158 = add i64 %t157, 1 call void @finch_arr_reserve(ptr %t137, i64 %t158, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64)) %t159 = load ptr, ptr %t137 %t160 = getelementptr inbounds %S.gen.StructDef, ptr %t159, i64 %t157 store %S.gen.StructDef %t156, ptr %t160 store i64 %t158, ptr %t138 call void @finch.drop.S_ast_Node(ptr %a64) br label %for.step3556 for.step3556: %t161 = load i64, ptr %a41 %t162 = add i64 %t161, 1 store i64 %t162, ptr %a41 br label %for.cond3554 for.end3557: br label %for.step3542 for.step3542: %t163 = load i64, ptr %a7 %t164 = add i64 %t163, 1 store i64 %t164, ptr %a7 br label %for.cond3540 for.end3543: %t165 = load ptr, ptr %a1 %t166 = icmp eq ptr %t165, null br i1 %t166, label %panic3586, label %ok3587 panic3586: call void @finch_panic(ptr @.str.2253, i64 1522, ptr @.str.2254) unreachable ok3587: %t167 = getelementptr inbounds %S.gen.Gen, ptr %t165, i32 0, i32 0 %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 %t169 = load i64, ptr %t168 store i64 0, ptr %a170 br label %for.cond3588 for.cond3588: %t171 = load i64, ptr %a170 %t172 = icmp slt i64 %t171, %t169 br i1 %t172, label %for.body3589, label %for.end3591 for.body3589: %t173 = load ptr, ptr %a1 %t174 = icmp eq ptr %t173, null br i1 %t174, label %panic3592, label %ok3593 panic3592: call void @finch_panic(ptr @.str.2255, i64 1523, ptr @.str.2256) unreachable ok3593: %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 0 %t176 = load i64, ptr %a170 %t177 = load { ptr, i64, i64 }, ptr %t175 %t178 = extractvalue { ptr, i64, i64 } %t177, 1 %t179 = icmp uge i64 %t176, %t178 br i1 %t179, label %range3594, label %inrange3595 range3594: call void @finch_panic_index(ptr @.str.2257, i64 1523, i64 %t176, i64 %t178) unreachable inrange3595: %t180 = extractvalue { ptr, i64, i64 } %t177, 0 %t181 = getelementptr inbounds %S.ast.Program, ptr %t180, i64 %t176 %t182 = getelementptr inbounds %S.ast.Program, ptr %t181, i32 0, i32 0 %t183 = load { ptr, i64, i64 }, ptr %t182 %t184 = load ptr, ptr %a1 %t185 = icmp eq ptr %t184, null br i1 %t185, label %panic3596, label %ok3597 panic3596: call void @finch_panic(ptr @.str.2258, i64 1523, ptr @.str.2259) unreachable ok3597: %t186 = getelementptr inbounds %S.gen.Gen, ptr %t184, i32 0, i32 14 store { ptr, i64, i64 } %t183, ptr %a187 call void @finch_str_copy(ptr %a188, ptr %a187) %t189 = load { ptr, i64, i64 }, ptr %a188 %t190 = load { ptr, i64, i64 }, ptr %t186 store { ptr, i64, i64 } %t189, ptr %t186 store { ptr, i64, i64 } %t190, ptr %a191 call void @finch_str_drop(ptr %a191) %t192 = load ptr, ptr %a1 %t193 = icmp eq ptr %t192, null br i1 %t193, label %panic3598, label %ok3599 panic3598: call void @finch_panic(ptr @.str.2260, i64 1524, ptr @.str.2261) unreachable ok3599: %t194 = getelementptr inbounds %S.gen.Gen, ptr %t192, i32 0, i32 0 %t195 = load i64, ptr %a170 %t196 = load { ptr, i64, i64 }, ptr %t194 %t197 = extractvalue { ptr, i64, i64 } %t196, 1 %t198 = icmp uge i64 %t195, %t197 br i1 %t198, label %range3600, label %inrange3601 range3600: call void @finch_panic_index(ptr @.str.2262, i64 1524, i64 %t195, i64 %t197) unreachable inrange3601: %t199 = extractvalue { ptr, i64, i64 } %t196, 0 %t200 = getelementptr inbounds %S.ast.Program, ptr %t199, i64 %t195 %t201 = getelementptr inbounds %S.ast.Program, ptr %t200, i32 0, i32 7 %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %t201, i32 0, i32 1 %t203 = load i64, ptr %t202 store i64 0, ptr %a204 br label %for.cond3602 for.cond3602: %t205 = load i64, ptr %a204 %t206 = icmp slt i64 %t205, %t203 br i1 %t206, label %for.body3603, label %for.end3605 for.body3603: %t207 = load ptr, ptr %a1 %t208 = icmp eq ptr %t207, null br i1 %t208, label %panic3606, label %ok3607 panic3606: call void @finch_panic(ptr @.str.2263, i64 1525, ptr @.str.2264) unreachable ok3607: %t209 = getelementptr inbounds %S.gen.Gen, ptr %t207, i32 0, i32 0 %t210 = load i64, ptr %a170 %t211 = load { ptr, i64, i64 }, ptr %t209 %t212 = extractvalue { ptr, i64, i64 } %t211, 1 %t213 = icmp uge i64 %t210, %t212 br i1 %t213, label %range3608, label %inrange3609 range3608: call void @finch_panic_index(ptr @.str.2265, i64 1525, i64 %t210, i64 %t212) unreachable inrange3609: %t214 = extractvalue { ptr, i64, i64 } %t211, 0 %t215 = getelementptr inbounds %S.ast.Program, ptr %t214, i64 %t210 %t216 = getelementptr inbounds %S.ast.Program, ptr %t215, i32 0, i32 7 %t217 = load i64, ptr %a204 %t218 = load { ptr, i64, i64 }, ptr %t216 %t219 = extractvalue { ptr, i64, i64 } %t218, 1 %t220 = icmp uge i64 %t217, %t219 br i1 %t220, label %range3610, label %inrange3611 range3610: call void @finch_panic_index(ptr @.str.2266, i64 1525, i64 %t217, i64 %t219) unreachable inrange3611: %t221 = extractvalue { ptr, i64, i64 } %t218, 0 %t222 = getelementptr inbounds %S.ast.Node, ptr %t221, i64 %t217 %t223 = load %S.ast.Node, ptr %t222 store %S.ast.Node %t223, ptr %a224 call void @finch.copy.S_ast_Node(ptr %a225, ptr %a224) %t226 = load %S.ast.Node, ptr %a225 store %S.ast.Node %t226, ptr %a227 %t228 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 6 %t229 = load i1, ptr %t228 br i1 %t229, label %then3612, label %endif3614 then3612: %t230 = load ptr, ptr %a1 %t231 = load ptr, ptr %a1 %t232 = icmp eq ptr %t231, null br i1 %t232, label %panic3615, label %ok3616 panic3615: call void @finch_panic(ptr @.str.2267, i64 1527, ptr @.str.2268) unreachable ok3616: %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 14 %t234 = load { ptr, i64, i64 }, ptr %t233 %t235 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t236 = load { ptr, i64, i64 }, ptr %t235 %t237 = call i64 @finch.gen.findEnum(ptr %t230, { ptr, i64, i64 } %t234, { ptr, i64, i64 } %t236) %t238 = icmp sge i64 %t237, 0 br label %logic.from3617 logic.from3617: br i1 %t238, label %logic.end3619, label %logic.rhs3618 logic.rhs3618: %t239 = load ptr, ptr %a1 %t240 = load ptr, ptr %a1 %t241 = icmp eq ptr %t240, null br i1 %t241, label %panic3620, label %ok3621 panic3620: call void @finch_panic(ptr @.str.2269, i64 1527, ptr @.str.2270) unreachable ok3621: %t242 = getelementptr inbounds %S.gen.Gen, ptr %t240, i32 0, i32 14 %t243 = load { ptr, i64, i64 }, ptr %t242 %t244 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t245 = load { ptr, i64, i64 }, ptr %t244 %t246 = call i64 @finch.gen.findSum(ptr %t239, { ptr, i64, i64 } %t243, { ptr, i64, i64 } %t245) %t247 = icmp sge i64 %t246, 0 br label %logic.rend3622 logic.rend3622: br label %logic.end3619 logic.end3619: %t248 = phi i1 [ true, %logic.from3617 ], [ %t247, %logic.rend3622 ] br i1 %t248, label %then3623, label %endif3625 then3623: %t249 = load ptr, ptr %a1 %t250 = load %S.ast.Node, ptr %a227 %t251 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t252 = load { ptr, i64, i64 }, ptr %t251 store { ptr, i64, i64 } { ptr @.str.2271, i64 1, i64 0 }, ptr %a254 store { ptr, i64, i64 } %t252, ptr %a255 call void @finch_str_concat(ptr %a253, ptr %a254, ptr %a255) %t256 = load { ptr, i64, i64 }, ptr %a253 store { ptr, i64, i64 } %t256, ptr %a258 store { ptr, i64, i64 } { ptr @.str.2272, i64 18, i64 0 }, ptr %a259 call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) store { ptr, i64, i64 } %t256, ptr %a260 call void @finch_str_drop(ptr %a260) %t261 = load { ptr, i64, i64 }, ptr %a257 call void @finch.gen.fail(ptr %t249, %S.ast.Node %t250, { ptr, i64, i64 } %t261) store { ptr, i64, i64 } %t261, ptr %a262 call void @finch_str_drop(ptr %a262) br label %endif3625 endif3625: %t263 = load ptr, ptr %a1 %t264 = icmp eq ptr %t263, null br i1 %t264, label %panic3626, label %ok3627 panic3626: call void @finch_panic(ptr @.str.2273, i64 1530, ptr @.str.2274) unreachable ok3627: %t265 = getelementptr inbounds %S.gen.Gen, ptr %t263, i32 0, i32 14 %t266 = load { ptr, i64, i64 }, ptr %t265 store { ptr, i64, i64 } %t266, ptr %a267 call void @finch_str_copy(ptr %a268, ptr %a267) %t269 = load { ptr, i64, i64 }, ptr %a268 %t270 = insertvalue %S.gen.SumDef zeroinitializer, { ptr, i64, i64 } %t269, 0 %t271 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t272 = load { ptr, i64, i64 }, ptr %t271 store { ptr, i64, i64 } %t272, ptr %a273 call void @finch_str_copy(ptr %a274, ptr %a273) %t275 = load { ptr, i64, i64 }, ptr %a274 %t276 = insertvalue %S.gen.SumDef %t270, { ptr, i64, i64 } %t275, 1 store %S.gen.SumDef %t276, ptr %a277 store i64 1, ptr %a278 %t279 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 9 store i64 0, ptr %a280 br label %each.cond3628 each.cond3628: %t281 = getelementptr inbounds { ptr, i64, i64 }, ptr %t279, i32 0, i32 1 %t282 = load i64, ptr %t281 %t283 = load i64, ptr %a280 %t284 = icmp slt i64 %t283, %t282 br i1 %t284, label %each.body3629, label %each.end3631 each.body3629: %t285 = load ptr, ptr %t279 %t286 = getelementptr inbounds %S.ast.Node, ptr %t285, i64 %t283 %t287 = load %S.ast.Node, ptr %t286 store %S.ast.Node %t287, ptr %a288 %t289 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 2 %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t289, i32 0, i32 1 %t291 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 1 %t292 = load { ptr, i64, i64 }, ptr %t291 store i64 -1, ptr %a293 %t294 = load i64, ptr %t290 %t295 = load ptr, ptr %t289 store i64 0, ptr %a296 br label %find.cond3632 find.cond3632: %t297 = load i64, ptr %a296 %t298 = icmp slt i64 %t297, %t294 br i1 %t298, label %find.body3633, label %find.end3636 find.body3633: %t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t295, i64 %t297 %t300 = load { ptr, i64, i64 }, ptr %t299 store { ptr, i64, i64 } %t300, ptr %a301 store { ptr, i64, i64 } %t292, ptr %a302 %t303 = call i32 @finch_str_eq(ptr %a301, ptr %a302) %t304 = icmp ne i32 %t303, 0 br i1 %t304, label %find.hit3634, label %find.next3635 find.hit3634: store i64 %t297, ptr %a293 br label %find.end3636 find.next3635: %t305 = add i64 %t297, 1 store i64 %t305, ptr %a296 br label %find.cond3632 find.end3636: %t306 = load i64, ptr %a293 %t307 = icmp sge i64 %t306, 0 br i1 %t307, label %then3637, label %endif3639 then3637: %t308 = load ptr, ptr %a1 %t309 = load %S.ast.Node, ptr %a288 %t310 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t311 = load { ptr, i64, i64 }, ptr %t310 store { ptr, i64, i64 } { ptr @.str.2275, i64 9, i64 0 }, ptr %a313 store { ptr, i64, i64 } %t311, ptr %a314 call void @finch_str_concat(ptr %a312, ptr %a313, ptr %a314) %t315 = load { ptr, i64, i64 }, ptr %a312 store { ptr, i64, i64 } %t315, ptr %a317 store { ptr, i64, i64 } { ptr @.str.2276, i64 17, i64 0 }, ptr %a318 call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) store { ptr, i64, i64 } %t315, ptr %a319 call void @finch_str_drop(ptr %a319) %t320 = load { ptr, i64, i64 }, ptr %a316 %t321 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 1 %t322 = load { ptr, i64, i64 }, ptr %t321 store { ptr, i64, i64 } %t320, ptr %a324 store { ptr, i64, i64 } %t322, ptr %a325 call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325) store { ptr, i64, i64 } %t320, ptr %a326 call void @finch_str_drop(ptr %a326) %t327 = load { ptr, i64, i64 }, ptr %a323 store { ptr, i64, i64 } %t327, ptr %a329 store { ptr, i64, i64 } { ptr @.str.2277, i64 6, i64 0 }, ptr %a330 call void @finch_str_concat(ptr %a328, ptr %a329, ptr %a330) store { ptr, i64, i64 } %t327, ptr %a331 call void @finch_str_drop(ptr %a331) %t332 = load { ptr, i64, i64 }, ptr %a328 call void @finch.gen.fail(ptr %t308, %S.ast.Node %t309, { ptr, i64, i64 } %t332) store { ptr, i64, i64 } %t332, ptr %a333 call void @finch_str_drop(ptr %a333) br label %endif3639 endif3639: %t334 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 2 %t335 = getelementptr inbounds { ptr, i64, i64 }, ptr %t334, i32 0, i32 1 %t336 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 1 %t337 = load { ptr, i64, i64 }, ptr %t336 store { ptr, i64, i64 } %t337, ptr %a338 call void @finch_str_copy(ptr %a339, ptr %a338) %t340 = load { ptr, i64, i64 }, ptr %a339 %t341 = load i64, ptr %t335 %t342 = add i64 %t341, 1 call void @finch_arr_reserve(ptr %t334, i64 %t342, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t343 = load ptr, ptr %t334 %t344 = getelementptr inbounds { ptr, i64, i64 }, ptr %t343, i64 %t341 store { ptr, i64, i64 } %t340, ptr %t344 store i64 %t342, ptr %t335 %t345 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 3 %t346 = getelementptr inbounds { ptr, i64, i64 }, ptr %t345, i32 0, i32 1 %t347 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 9 %t348 = getelementptr inbounds { ptr, i64, i64 }, ptr %t347, i32 0, i32 1 %t349 = load i64, ptr %t348 %t350 = load i64, ptr %t346 %t351 = add i64 %t350, 1 call void @finch_arr_reserve(ptr %t345, i64 %t351, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t352 = load ptr, ptr %t345 %t353 = getelementptr inbounds i64, ptr %t352, i64 %t350 store i64 %t349, ptr %t353 store i64 %t351, ptr %t346 %t354 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 4 %t355 = getelementptr inbounds { ptr, i64, i64 }, ptr %t354, i32 0, i32 1 %t356 = load i64, ptr %a278 %t357 = load i64, ptr %t355 %t358 = add i64 %t357, 1 call void @finch_arr_reserve(ptr %t354, i64 %t358, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t359 = load ptr, ptr %t354 %t360 = getelementptr inbounds i64, ptr %t359, i64 %t357 store i64 %t356, ptr %t360 store i64 %t358, ptr %t355 %t361 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 9 %t362 = getelementptr inbounds { ptr, i64, i64 }, ptr %t361, i32 0, i32 1 %t363 = load i64, ptr %t362 %t364 = load i64, ptr %a278 %t365 = add i64 %t364, %t363 store i64 %t365, ptr %a278 br label %each.step3630 each.step3630: %t366 = load i64, ptr %a280 %t367 = add i64 %t366, 1 store i64 %t367, ptr %a280 br label %each.cond3628 each.end3631: %t368 = load ptr, ptr %a1 %t369 = icmp eq ptr %t368, null br i1 %t369, label %panic3640, label %ok3641 panic3640: call void @finch_panic(ptr @.str.2278, i64 1541, ptr @.str.2279) unreachable ok3641: %t370 = getelementptr inbounds %S.gen.Gen, ptr %t368, i32 0, i32 22 %t371 = getelementptr inbounds { ptr, i64, i64 }, ptr %t370, i32 0, i32 1 %t372 = load %S.gen.SumDef, ptr %a277 store %S.gen.SumDef %t372, ptr %a373 call void @finch.copy.S_gen_SumDef(ptr %a374, ptr %a373) %t375 = load %S.gen.SumDef, ptr %a374 %t376 = load i64, ptr %t371 %t377 = add i64 %t376, 1 call void @finch_arr_reserve(ptr %t370, i64 %t377, i64 ptrtoint (ptr getelementptr (%S.gen.SumDef, ptr null, i32 1) to i64)) %t378 = load ptr, ptr %t370 %t379 = getelementptr inbounds %S.gen.SumDef, ptr %t378, i64 %t376 store %S.gen.SumDef %t375, ptr %t379 store i64 %t377, ptr %t371 call void @finch.drop.S_gen_SumDef(ptr %a277) call void @finch.drop.S_ast_Node(ptr %a227) br label %for.step3604 endif3614: %t380 = load ptr, ptr %a1 %t381 = load ptr, ptr %a1 %t382 = icmp eq ptr %t381, null br i1 %t382, label %panic3642, label %ok3643 panic3642: call void @finch_panic(ptr @.str.2280, i64 1544, ptr @.str.2281) unreachable ok3643: %t383 = getelementptr inbounds %S.gen.Gen, ptr %t381, i32 0, i32 14 %t384 = load { ptr, i64, i64 }, ptr %t383 %t385 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t386 = load { ptr, i64, i64 }, ptr %t385 %t387 = call i64 @finch.gen.findEnum(ptr %t380, { ptr, i64, i64 } %t384, { ptr, i64, i64 } %t386) %t388 = icmp sge i64 %t387, 0 br label %logic.from3644 logic.from3644: br i1 %t388, label %logic.end3646, label %logic.rhs3645 logic.rhs3645: %t389 = load ptr, ptr %a1 %t390 = load ptr, ptr %a1 %t391 = icmp eq ptr %t390, null br i1 %t391, label %panic3647, label %ok3648 panic3647: call void @finch_panic(ptr @.str.2282, i64 1544, ptr @.str.2283) unreachable ok3648: %t392 = getelementptr inbounds %S.gen.Gen, ptr %t390, i32 0, i32 14 %t393 = load { ptr, i64, i64 }, ptr %t392 %t394 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t395 = load { ptr, i64, i64 }, ptr %t394 %t396 = call i64 @finch.gen.findStruct(ptr %t389, { ptr, i64, i64 } %t393, { ptr, i64, i64 } %t395) %t397 = icmp sge i64 %t396, 0 br label %logic.rend3649 logic.rend3649: br label %logic.end3646 logic.end3646: %t398 = phi i1 [ true, %logic.from3644 ], [ %t397, %logic.rend3649 ] br i1 %t398, label %then3650, label %endif3652 then3650: %t399 = load ptr, ptr %a1 %t400 = load %S.ast.Node, ptr %a227 %t401 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t402 = load { ptr, i64, i64 }, ptr %t401 store { ptr, i64, i64 } { ptr @.str.2284, i64 1, i64 0 }, ptr %a404 store { ptr, i64, i64 } %t402, ptr %a405 call void @finch_str_concat(ptr %a403, ptr %a404, ptr %a405) %t406 = load { ptr, i64, i64 }, ptr %a403 store { ptr, i64, i64 } %t406, ptr %a408 store { ptr, i64, i64 } { ptr @.str.2285, i64 18, i64 0 }, ptr %a409 call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) store { ptr, i64, i64 } %t406, ptr %a410 call void @finch_str_drop(ptr %a410) %t411 = load { ptr, i64, i64 }, ptr %a407 call void @finch.gen.fail(ptr %t399, %S.ast.Node %t400, { ptr, i64, i64 } %t411) store { ptr, i64, i64 } %t411, ptr %a412 call void @finch_str_drop(ptr %a412) br label %endif3652 endif3652: %t413 = load ptr, ptr %a1 %t414 = icmp eq ptr %t413, null br i1 %t414, label %panic3653, label %ok3654 panic3653: call void @finch_panic(ptr @.str.2286, i64 1547, ptr @.str.2287) unreachable ok3654: %t415 = getelementptr inbounds %S.gen.Gen, ptr %t413, i32 0, i32 14 %t416 = load { ptr, i64, i64 }, ptr %t415 store { ptr, i64, i64 } %t416, ptr %a417 call void @finch_str_copy(ptr %a418, ptr %a417) %t419 = load { ptr, i64, i64 }, ptr %a418 %t420 = insertvalue %S.gen.EnumDef zeroinitializer, { ptr, i64, i64 } %t419, 0 %t421 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t422 = load { ptr, i64, i64 }, ptr %t421 store { ptr, i64, i64 } %t422, ptr %a423 call void @finch_str_copy(ptr %a424, ptr %a423) %t425 = load { ptr, i64, i64 }, ptr %a424 %t426 = insertvalue %S.gen.EnumDef %t420, { ptr, i64, i64 } %t425, 1 store %S.gen.EnumDef %t426, ptr %a427 store i64 0, ptr %a428 %t429 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 9 store i64 0, ptr %a430 br label %each.cond3655 each.cond3655: %t431 = getelementptr inbounds { ptr, i64, i64 }, ptr %t429, i32 0, i32 1 %t432 = load i64, ptr %t431 %t433 = load i64, ptr %a430 %t434 = icmp slt i64 %t433, %t432 br i1 %t434, label %each.body3656, label %each.end3658 each.body3656: %t435 = load ptr, ptr %t429 %t436 = getelementptr inbounds %S.ast.Node, ptr %t435, i64 %t433 %t437 = load %S.ast.Node, ptr %t436 store %S.ast.Node %t437, ptr %a438 %t439 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 4 %t440 = getelementptr inbounds { ptr, i64, i64 }, ptr %t439, i32 0, i32 1 %t441 = load i64, ptr %t440 %t442 = icmp sgt i64 %t441, 0 br i1 %t442, label %then3659, label %endif3661 then3659: %t443 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 4 %t444 = load { ptr, i64, i64 }, ptr %t443 store { ptr, i64, i64 } %t444, ptr %a445 %t446 = call i64 @finch_str_to_int(ptr %a445, ptr @.str.2288, i64 1551) store i64 %t446, ptr %a428 br label %endif3661 endif3661: %t447 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 2 %t448 = getelementptr inbounds { ptr, i64, i64 }, ptr %t447, i32 0, i32 1 %t449 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 1 %t450 = load { ptr, i64, i64 }, ptr %t449 store i64 -1, ptr %a451 %t452 = load i64, ptr %t448 %t453 = load ptr, ptr %t447 store i64 0, ptr %a454 br label %find.cond3662 find.cond3662: %t455 = load i64, ptr %a454 %t456 = icmp slt i64 %t455, %t452 br i1 %t456, label %find.body3663, label %find.end3666 find.body3663: %t457 = getelementptr inbounds { ptr, i64, i64 }, ptr %t453, i64 %t455 %t458 = load { ptr, i64, i64 }, ptr %t457 store { ptr, i64, i64 } %t458, ptr %a459 store { ptr, i64, i64 } %t450, ptr %a460 %t461 = call i32 @finch_str_eq(ptr %a459, ptr %a460) %t462 = icmp ne i32 %t461, 0 br i1 %t462, label %find.hit3664, label %find.next3665 find.hit3664: store i64 %t455, ptr %a451 br label %find.end3666 find.next3665: %t463 = add i64 %t455, 1 store i64 %t463, ptr %a454 br label %find.cond3662 find.end3666: %t464 = load i64, ptr %a451 %t465 = icmp sge i64 %t464, 0 br i1 %t465, label %then3667, label %endif3669 then3667: %t466 = load ptr, ptr %a1 %t467 = load %S.ast.Node, ptr %a438 %t468 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t469 = load { ptr, i64, i64 }, ptr %t468 store { ptr, i64, i64 } { ptr @.str.2289, i64 9, i64 0 }, ptr %a471 store { ptr, i64, i64 } %t469, ptr %a472 call void @finch_str_concat(ptr %a470, ptr %a471, ptr %a472) %t473 = load { ptr, i64, i64 }, ptr %a470 store { ptr, i64, i64 } %t473, ptr %a475 store { ptr, i64, i64 } { ptr @.str.2290, i64 17, i64 0 }, ptr %a476 call void @finch_str_concat(ptr %a474, ptr %a475, ptr %a476) store { ptr, i64, i64 } %t473, ptr %a477 call void @finch_str_drop(ptr %a477) %t478 = load { ptr, i64, i64 }, ptr %a474 %t479 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 1 %t480 = load { ptr, i64, i64 }, ptr %t479 store { ptr, i64, i64 } %t478, ptr %a482 store { ptr, i64, i64 } %t480, ptr %a483 call void @finch_str_concat(ptr %a481, ptr %a482, ptr %a483) store { ptr, i64, i64 } %t478, ptr %a484 call void @finch_str_drop(ptr %a484) %t485 = load { ptr, i64, i64 }, ptr %a481 store { ptr, i64, i64 } %t485, ptr %a487 store { ptr, i64, i64 } { ptr @.str.2291, i64 6, i64 0 }, ptr %a488 call void @finch_str_concat(ptr %a486, ptr %a487, ptr %a488) store { ptr, i64, i64 } %t485, ptr %a489 call void @finch_str_drop(ptr %a489) %t490 = load { ptr, i64, i64 }, ptr %a486 call void @finch.gen.fail(ptr %t466, %S.ast.Node %t467, { ptr, i64, i64 } %t490) store { ptr, i64, i64 } %t490, ptr %a491 call void @finch_str_drop(ptr %a491) br label %endif3669 endif3669: %t492 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 3 %t493 = getelementptr inbounds { ptr, i64, i64 }, ptr %t492, i32 0, i32 1 %t494 = load i64, ptr %a428 store i64 -1, ptr %a495 %t496 = load i64, ptr %t493 %t497 = load ptr, ptr %t492 store i64 0, ptr %a498 br label %find.cond3670 find.cond3670: %t499 = load i64, ptr %a498 %t500 = icmp slt i64 %t499, %t496 br i1 %t500, label %find.body3671, label %find.end3674 find.body3671: %t501 = getelementptr inbounds i64, ptr %t497, i64 %t499 %t502 = load i64, ptr %t501 %t503 = icmp eq i64 %t502, %t494 br i1 %t503, label %find.hit3672, label %find.next3673 find.hit3672: store i64 %t499, ptr %a495 br label %find.end3674 find.next3673: %t504 = add i64 %t499, 1 store i64 %t504, ptr %a498 br label %find.cond3670 find.end3674: %t505 = load i64, ptr %a495 %t506 = icmp sge i64 %t505, 0 br i1 %t506, label %then3675, label %endif3677 then3675: %t507 = load ptr, ptr %a1 %t508 = load %S.ast.Node, ptr %a438 %t509 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t510 = load { ptr, i64, i64 }, ptr %t509 store { ptr, i64, i64 } { ptr @.str.2292, i64 16, i64 0 }, ptr %a512 store { ptr, i64, i64 } %t510, ptr %a513 call void @finch_str_concat(ptr %a511, ptr %a512, ptr %a513) %t514 = load { ptr, i64, i64 }, ptr %a511 store { ptr, i64, i64 } %t514, ptr %a516 store { ptr, i64, i64 } { ptr @.str.2293, i64 17, i64 0 }, ptr %a517 call void @finch_str_concat(ptr %a515, ptr %a516, ptr %a517) store { ptr, i64, i64 } %t514, ptr %a518 call void @finch_str_drop(ptr %a518) %t519 = load { ptr, i64, i64 }, ptr %a515 %t520 = load i64, ptr %a428 call void @finch_str_from_int(ptr %a521, i64 %t520) %t522 = load { ptr, i64, i64 }, ptr %a521 store { ptr, i64, i64 } %t519, ptr %a524 store { ptr, i64, i64 } %t522, ptr %a525 call void @finch_str_concat(ptr %a523, ptr %a524, ptr %a525) store { ptr, i64, i64 } %t519, ptr %a526 call void @finch_str_drop(ptr %a526) store { ptr, i64, i64 } %t522, ptr %a527 call void @finch_str_drop(ptr %a527) %t528 = load { ptr, i64, i64 }, ptr %a523 store { ptr, i64, i64 } %t528, ptr %a530 store { ptr, i64, i64 } { ptr @.str.2294, i64 20, i64 0 }, ptr %a531 call void @finch_str_concat(ptr %a529, ptr %a530, ptr %a531) store { ptr, i64, i64 } %t528, ptr %a532 call void @finch_str_drop(ptr %a532) %t533 = load { ptr, i64, i64 }, ptr %a529 call void @finch.gen.fail(ptr %t507, %S.ast.Node %t508, { ptr, i64, i64 } %t533) store { ptr, i64, i64 } %t533, ptr %a534 call void @finch_str_drop(ptr %a534) br label %endif3677 endif3677: %t535 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 2 %t536 = getelementptr inbounds { ptr, i64, i64 }, ptr %t535, i32 0, i32 1 %t537 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 1 %t538 = load { ptr, i64, i64 }, ptr %t537 store { ptr, i64, i64 } %t538, ptr %a539 call void @finch_str_copy(ptr %a540, ptr %a539) %t541 = load { ptr, i64, i64 }, ptr %a540 %t542 = load i64, ptr %t536 %t543 = add i64 %t542, 1 call void @finch_arr_reserve(ptr %t535, i64 %t543, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t544 = load ptr, ptr %t535 %t545 = getelementptr inbounds { ptr, i64, i64 }, ptr %t544, i64 %t542 store { ptr, i64, i64 } %t541, ptr %t545 store i64 %t543, ptr %t536 %t546 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 3 %t547 = getelementptr inbounds { ptr, i64, i64 }, ptr %t546, i32 0, i32 1 %t548 = load i64, ptr %a428 %t549 = load i64, ptr %t547 %t550 = add i64 %t549, 1 call void @finch_arr_reserve(ptr %t546, i64 %t550, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t551 = load ptr, ptr %t546 %t552 = getelementptr inbounds i64, ptr %t551, i64 %t549 store i64 %t548, ptr %t552 store i64 %t550, ptr %t547 %t553 = load i64, ptr %a428 %t554 = add i64 %t553, 1 store i64 %t554, ptr %a428 br label %each.step3657 each.step3657: %t555 = load i64, ptr %a430 %t556 = add i64 %t555, 1 store i64 %t556, ptr %a430 br label %each.cond3655 each.end3658: %t557 = load ptr, ptr %a1 %t558 = icmp eq ptr %t557, null br i1 %t558, label %panic3678, label %ok3679 panic3678: call void @finch_panic(ptr @.str.2295, i64 1563, ptr @.str.2296) unreachable ok3679: %t559 = getelementptr inbounds %S.gen.Gen, ptr %t557, i32 0, i32 21 %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %t559, i32 0, i32 1 %t561 = load %S.gen.EnumDef, ptr %a427 store %S.gen.EnumDef %t561, ptr %a562 call void @finch.copy.S_gen_EnumDef(ptr %a563, ptr %a562) %t564 = load %S.gen.EnumDef, ptr %a563 %t565 = load i64, ptr %t560 %t566 = add i64 %t565, 1 call void @finch_arr_reserve(ptr %t559, i64 %t566, i64 ptrtoint (ptr getelementptr (%S.gen.EnumDef, ptr null, i32 1) to i64)) %t567 = load ptr, ptr %t559 %t568 = getelementptr inbounds %S.gen.EnumDef, ptr %t567, i64 %t565 store %S.gen.EnumDef %t564, ptr %t568 store i64 %t566, ptr %t560 call void @finch.drop.S_gen_EnumDef(ptr %a427) call void @finch.drop.S_ast_Node(ptr %a227) br label %for.step3604 for.step3604: %t569 = load i64, ptr %a204 %t570 = add i64 %t569, 1 store i64 %t570, ptr %a204 br label %for.cond3602 for.end3605: br label %for.step3590 for.step3590: %t571 = load i64, ptr %a170 %t572 = add i64 %t571, 1 store i64 %t572, ptr %a170 br label %for.cond3588 for.end3591: %t573 = load ptr, ptr %a1 %t574 = icmp eq ptr %t573, null br i1 %t574, label %panic3680, label %ok3681 panic3680: call void @finch_panic(ptr @.str.2297, i64 1566, ptr @.str.2298) unreachable ok3681: %t575 = getelementptr inbounds %S.gen.Gen, ptr %t573, i32 0, i32 26 %t576 = getelementptr inbounds %S.cimport.CImports, ptr %t575, i32 0, i32 4 %t577 = getelementptr inbounds { ptr, i64, i64 }, ptr %t576, i32 0, i32 1 %t578 = load i64, ptr %t577 store i64 0, ptr %a579 br label %for.cond3682 for.cond3682: %t580 = load i64, ptr %a579 %t581 = icmp slt i64 %t580, %t578 br i1 %t581, label %for.body3683, label %for.end3685 for.body3683: %t582 = load ptr, ptr %a1 %t583 = icmp eq ptr %t582, null br i1 %t583, label %panic3686, label %ok3687 panic3686: call void @finch_panic(ptr @.str.2299, i64 1567, ptr @.str.2300) unreachable ok3687: %t584 = getelementptr inbounds %S.gen.Gen, ptr %t582, i32 0, i32 16 %t585 = getelementptr inbounds { ptr, i64, i64 }, ptr %t584, i32 0, i32 1 %t586 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } { ptr @.str.2301, i64 1, i64 0 }, 0 %t587 = load ptr, ptr %a1 %t588 = icmp eq ptr %t587, null br i1 %t588, label %panic3688, label %ok3689 panic3688: call void @finch_panic(ptr @.str.2302, i64 1567, ptr @.str.2303) unreachable ok3689: %t589 = getelementptr inbounds %S.gen.Gen, ptr %t587, i32 0, i32 26 %t590 = getelementptr inbounds %S.cimport.CImports, ptr %t589, i32 0, i32 4 %t591 = load i64, ptr %a579 %t592 = load { ptr, i64, i64 }, ptr %t590 %t593 = extractvalue { ptr, i64, i64 } %t592, 1 %t594 = icmp uge i64 %t591, %t593 br i1 %t594, label %range3690, label %inrange3691 range3690: call void @finch_panic_index(ptr @.str.2304, i64 1567, i64 %t591, i64 %t593) unreachable inrange3691: %t595 = extractvalue { ptr, i64, i64 } %t592, 0 %t596 = getelementptr inbounds { ptr, i64, i64 }, ptr %t595, i64 %t591 %t597 = load { ptr, i64, i64 }, ptr %t596 store { ptr, i64, i64 } %t597, ptr %a598 call void @finch_str_copy(ptr %a599, ptr %a598) %t600 = load { ptr, i64, i64 }, ptr %a599 %t601 = insertvalue %S.gen.StructDef %t586, { ptr, i64, i64 } %t600, 1 %t602 = insertvalue %S.gen.StructDef %t601, i1 true, 2 %t603 = insertvalue %S.gen.StructDef %t602, i64 -1, 13 %t604 = load i64, ptr %a579 %t605 = insertvalue %S.gen.StructDef %t603, i64 %t604, 14 %t606 = load i64, ptr %t585 %t607 = add i64 %t606, 1 call void @finch_arr_reserve(ptr %t584, i64 %t607, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64)) %t608 = load ptr, ptr %t584 %t609 = getelementptr inbounds %S.gen.StructDef, ptr %t608, i64 %t606 store %S.gen.StructDef %t605, ptr %t609 store i64 %t607, ptr %t585 br label %for.step3684 for.step3684: %t610 = load i64, ptr %a579 %t611 = add i64 %t610, 1 store i64 %t611, ptr %a579 br label %for.cond3682 for.end3685: %t612 = load ptr, ptr %a1 %t613 = icmp eq ptr %t612, null br i1 %t613, label %panic3692, label %ok3693 panic3692: call void @finch_panic(ptr @.str.2305, i64 1569, ptr @.str.2306) unreachable ok3693: %t614 = getelementptr inbounds %S.gen.Gen, ptr %t612, i32 0, i32 16 %t615 = getelementptr inbounds { ptr, i64, i64 }, ptr %t614, i32 0, i32 1 %t616 = load i64, ptr %t615 store i64 0, ptr %a617 br label %for.cond3694 for.cond3694: %t618 = load i64, ptr %a617 %t619 = icmp slt i64 %t618, %t616 br i1 %t619, label %for.body3695, label %for.end3697 for.body3695: %t620 = load ptr, ptr %a1 %t621 = load i64, ptr %a617 call void @finch.gen.resolveStruct(ptr %t620, i64 %t621) br label %for.step3696 for.step3696: %t622 = load i64, ptr %a617 %t623 = add i64 %t622, 1 store i64 %t623, ptr %a617 br label %for.cond3694 for.end3697: %t624 = load ptr, ptr %a1 %t625 = icmp eq ptr %t624, null br i1 %t625, label %panic3698, label %ok3699 panic3698: call void @finch_panic(ptr @.str.2307, i64 1572, ptr @.str.2308) unreachable ok3699: %t626 = getelementptr inbounds %S.gen.Gen, ptr %t624, i32 0, i32 0 %t627 = getelementptr inbounds { ptr, i64, i64 }, ptr %t626, i32 0, i32 1 %t628 = load i64, ptr %t627 store i64 0, ptr %a629 br label %for.cond3700 for.cond3700: %t630 = load i64, ptr %a629 %t631 = icmp slt i64 %t630, %t628 br i1 %t631, label %for.body3701, label %for.end3703 for.body3701: %t632 = load ptr, ptr %a1 %t633 = icmp eq ptr %t632, null br i1 %t633, label %panic3704, label %ok3705 panic3704: call void @finch_panic(ptr @.str.2309, i64 1573, ptr @.str.2310) unreachable ok3705: %t634 = getelementptr inbounds %S.gen.Gen, ptr %t632, i32 0, i32 0 %t635 = load i64, ptr %a629 %t636 = load { ptr, i64, i64 }, ptr %t634 %t637 = extractvalue { ptr, i64, i64 } %t636, 1 %t638 = icmp uge i64 %t635, %t637 br i1 %t638, label %range3706, label %inrange3707 range3706: call void @finch_panic_index(ptr @.str.2311, i64 1573, i64 %t635, i64 %t637) unreachable inrange3707: %t639 = extractvalue { ptr, i64, i64 } %t636, 0 %t640 = getelementptr inbounds %S.ast.Program, ptr %t639, i64 %t635 %t641 = getelementptr inbounds %S.ast.Program, ptr %t640, i32 0, i32 0 %t642 = load { ptr, i64, i64 }, ptr %t641 %t643 = load ptr, ptr %a1 %t644 = icmp eq ptr %t643, null br i1 %t644, label %panic3708, label %ok3709 panic3708: call void @finch_panic(ptr @.str.2312, i64 1573, ptr @.str.2313) unreachable ok3709: %t645 = getelementptr inbounds %S.gen.Gen, ptr %t643, i32 0, i32 14 store { ptr, i64, i64 } %t642, ptr %a646 call void @finch_str_copy(ptr %a647, ptr %a646) %t648 = load { ptr, i64, i64 }, ptr %a647 %t649 = load { ptr, i64, i64 }, ptr %t645 store { ptr, i64, i64 } %t648, ptr %t645 store { ptr, i64, i64 } %t649, ptr %a650 call void @finch_str_drop(ptr %a650) %t651 = load ptr, ptr %a1 %t652 = icmp eq ptr %t651, null br i1 %t652, label %panic3710, label %ok3711 panic3710: call void @finch_panic(ptr @.str.2314, i64 1574, ptr @.str.2315) unreachable ok3711: %t653 = getelementptr inbounds %S.gen.Gen, ptr %t651, i32 0, i32 0 %t654 = load i64, ptr %a629 %t655 = load { ptr, i64, i64 }, ptr %t653 %t656 = extractvalue { ptr, i64, i64 } %t655, 1 %t657 = icmp uge i64 %t654, %t656 br i1 %t657, label %range3712, label %inrange3713 range3712: call void @finch_panic_index(ptr @.str.2316, i64 1574, i64 %t654, i64 %t656) unreachable inrange3713: %t658 = extractvalue { ptr, i64, i64 } %t655, 0 %t659 = getelementptr inbounds %S.ast.Program, ptr %t658, i64 %t654 %t660 = getelementptr inbounds %S.ast.Program, ptr %t659, i32 0, i32 8 %t661 = getelementptr inbounds { ptr, i64, i64 }, ptr %t660, i32 0, i32 1 %t662 = load i64, ptr %t661 store i64 0, ptr %a663 br label %for.cond3714 for.cond3714: %t664 = load i64, ptr %a663 %t665 = icmp slt i64 %t664, %t662 br i1 %t665, label %for.body3715, label %for.end3717 for.body3715: %t666 = load ptr, ptr %a1 %t667 = icmp eq ptr %t666, null br i1 %t667, label %panic3718, label %ok3719 panic3718: call void @finch_panic(ptr @.str.2317, i64 1575, ptr @.str.2318) unreachable ok3719: %t668 = getelementptr inbounds %S.gen.Gen, ptr %t666, i32 0, i32 0 %t669 = load i64, ptr %a629 %t670 = load { ptr, i64, i64 }, ptr %t668 %t671 = extractvalue { ptr, i64, i64 } %t670, 1 %t672 = icmp uge i64 %t669, %t671 br i1 %t672, label %range3720, label %inrange3721 range3720: call void @finch_panic_index(ptr @.str.2319, i64 1575, i64 %t669, i64 %t671) unreachable inrange3721: %t673 = extractvalue { ptr, i64, i64 } %t670, 0 %t674 = getelementptr inbounds %S.ast.Program, ptr %t673, i64 %t669 %t675 = getelementptr inbounds %S.ast.Program, ptr %t674, i32 0, i32 8 %t676 = load i64, ptr %a663 %t677 = load { ptr, i64, i64 }, ptr %t675 %t678 = extractvalue { ptr, i64, i64 } %t677, 1 %t679 = icmp uge i64 %t676, %t678 br i1 %t679, label %range3722, label %inrange3723 range3722: call void @finch_panic_index(ptr @.str.2320, i64 1575, i64 %t676, i64 %t678) unreachable inrange3723: %t680 = extractvalue { ptr, i64, i64 } %t677, 0 %t681 = getelementptr inbounds %S.ast.Node, ptr %t680, i64 %t676 %t682 = load %S.ast.Node, ptr %t681 store %S.ast.Node %t682, ptr %a683 call void @finch.copy.S_ast_Node(ptr %a684, ptr %a683) %t685 = load %S.ast.Node, ptr %a684 store %S.ast.Node %t685, ptr %a686 %t687 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 3 %t688 = getelementptr inbounds { ptr, i64, i64 }, ptr %t687, i32 0, i32 1 %t689 = load i64, ptr %t688 %t690 = icmp sgt i64 %t689, 0 br i1 %t690, label %then3724, label %endif3726 then3724: %t691 = load ptr, ptr %a1 %t692 = load ptr, ptr %a1 %t693 = icmp eq ptr %t692, null br i1 %t693, label %panic3727, label %ok3728 panic3727: call void @finch_panic(ptr @.str.2321, i64 1578, ptr @.str.2322) unreachable ok3728: %t694 = getelementptr inbounds %S.gen.Gen, ptr %t692, i32 0, i32 14 %t695 = load { ptr, i64, i64 }, ptr %t694 %t696 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t697 = load { ptr, i64, i64 }, ptr %t696 %t698 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t699 = load { ptr, i64, i64 }, ptr %t698 %t700 = call i64 @finch.gen.findTemplate(ptr %t691, { ptr, i64, i64 } %t695, { ptr, i64, i64 } %t697, { ptr, i64, i64 } %t699, i1 false) %t701 = icmp sge i64 %t700, 0 br i1 %t701, label %then3729, label %endif3731 then3729: %t702 = load ptr, ptr %a1 %t703 = load %S.ast.Node, ptr %a686 %t704 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t705 = load { ptr, i64, i64 }, ptr %t704 store { ptr, i64, i64 } { ptr @.str.2323, i64 10, i64 0 }, ptr %a707 store { ptr, i64, i64 } %t705, ptr %a708 call void @finch_str_concat(ptr %a706, ptr %a707, ptr %a708) %t709 = load { ptr, i64, i64 }, ptr %a706 store { ptr, i64, i64 } %t709, ptr %a711 store { ptr, i64, i64 } { ptr @.str.2324, i64 18, i64 0 }, ptr %a712 call void @finch_str_concat(ptr %a710, ptr %a711, ptr %a712) store { ptr, i64, i64 } %t709, ptr %a713 call void @finch_str_drop(ptr %a713) %t714 = load { ptr, i64, i64 }, ptr %a710 call void @finch.gen.fail(ptr %t702, %S.ast.Node %t703, { ptr, i64, i64 } %t714) store { ptr, i64, i64 } %t714, ptr %a715 call void @finch_str_drop(ptr %a715) br label %endif3731 endif3731: %t716 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t717 = getelementptr inbounds { ptr, i64, i64 }, ptr %t716, i32 0, i32 1 %t718 = load i64, ptr %t717 %t719 = icmp sgt i64 %t718, 0 br label %logic.from3732 logic.from3732: br i1 %t719, label %logic.rhs3733, label %logic.end3734 logic.rhs3733: %t720 = load ptr, ptr %a1 %t721 = load ptr, ptr %a1 %t722 = icmp eq ptr %t721, null br i1 %t722, label %panic3735, label %ok3736 panic3735: call void @finch_panic(ptr @.str.2325, i64 1581, ptr @.str.2326) unreachable ok3736: %t723 = getelementptr inbounds %S.gen.Gen, ptr %t721, i32 0, i32 14 %t724 = load { ptr, i64, i64 }, ptr %t723 %t725 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t726 = load { ptr, i64, i64 }, ptr %t725 %t727 = call i64 @finch.gen.findTemplate(ptr %t720, { ptr, i64, i64 } %t724, { ptr, i64, i64 } %t726, { ptr, i64, i64 } { ptr @.str.2327, i64 0, i64 0 }, i1 true) %t728 = icmp slt i64 %t727, 0 br label %logic.rend3737 logic.rend3737: br label %logic.end3734 logic.end3734: %t729 = phi i1 [ false, %logic.from3732 ], [ %t728, %logic.rend3737 ] br i1 %t729, label %then3738, label %endif3740 then3738: %t730 = load ptr, ptr %a1 %t731 = load %S.ast.Node, ptr %a686 %t732 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t733 = load { ptr, i64, i64 }, ptr %t732 store { ptr, i64, i64 } { ptr @.str.2328, i64 34, i64 0 }, ptr %a735 store { ptr, i64, i64 } %t733, ptr %a736 call void @finch_str_concat(ptr %a734, ptr %a735, ptr %a736) %t737 = load { ptr, i64, i64 }, ptr %a734 store { ptr, i64, i64 } %t737, ptr %a739 store { ptr, i64, i64 } { ptr @.str.2329, i64 53, i64 0 }, ptr %a740 call void @finch_str_concat(ptr %a738, ptr %a739, ptr %a740) store { ptr, i64, i64 } %t737, ptr %a741 call void @finch_str_drop(ptr %a741) %t742 = load { ptr, i64, i64 }, ptr %a738 call void @finch.gen.fail(ptr %t730, %S.ast.Node %t731, { ptr, i64, i64 } %t742) store { ptr, i64, i64 } %t742, ptr %a743 call void @finch_str_drop(ptr %a743) br label %endif3740 endif3740: %t744 = load ptr, ptr %a1 %t745 = icmp eq ptr %t744, null br i1 %t745, label %panic3741, label %ok3742 panic3741: call void @finch_panic(ptr @.str.2330, i64 1584, ptr @.str.2331) unreachable ok3742: %t746 = getelementptr inbounds %S.gen.Gen, ptr %t744, i32 0, i32 17 %t747 = getelementptr inbounds { ptr, i64, i64 }, ptr %t746, i32 0, i32 1 %t748 = load ptr, ptr %a1 %t749 = icmp eq ptr %t748, null br i1 %t749, label %panic3743, label %ok3744 panic3743: call void @finch_panic(ptr @.str.2332, i64 1584, ptr @.str.2333) unreachable ok3744: %t750 = getelementptr inbounds %S.gen.Gen, ptr %t748, i32 0, i32 14 %t751 = load { ptr, i64, i64 }, ptr %t750 store { ptr, i64, i64 } %t751, ptr %a752 call void @finch_str_copy(ptr %a753, ptr %a752) %t754 = load { ptr, i64, i64 }, ptr %a753 %t755 = insertvalue %S.gen.Template zeroinitializer, { ptr, i64, i64 } %t754, 0 %t756 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t757 = load { ptr, i64, i64 }, ptr %t756 store { ptr, i64, i64 } %t757, ptr %a758 call void @finch_str_copy(ptr %a759, ptr %a758) %t760 = load { ptr, i64, i64 }, ptr %a759 %t761 = insertvalue %S.gen.Template %t755, { ptr, i64, i64 } %t760, 1 %t762 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t763 = load { ptr, i64, i64 }, ptr %t762 store { ptr, i64, i64 } %t763, ptr %a764 call void @finch_str_copy(ptr %a765, ptr %a764) %t766 = load { ptr, i64, i64 }, ptr %a765 %t767 = insertvalue %S.gen.Template %t761, { ptr, i64, i64 } %t766, 2 %t768 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 3 %t769 = load { ptr, i64, i64 }, ptr %t768 store { ptr, i64, i64 } %t769, ptr %a770 call void @finch.copy.arr_str(ptr %a771, ptr %a770) %t772 = load { ptr, i64, i64 }, ptr %a771 %t773 = insertvalue %S.gen.Template %t767, { ptr, i64, i64 } %t772, 3 %t774 = load i64, ptr %a629 %t775 = insertvalue %S.gen.Template %t773, i64 %t774, 4 %t776 = load i64, ptr %a663 %t777 = insertvalue %S.gen.Template %t775, i64 %t776, 5 %t778 = load i64, ptr %t747 %t779 = add i64 %t778, 1 call void @finch_arr_reserve(ptr %t746, i64 %t779, i64 ptrtoint (ptr getelementptr (%S.gen.Template, ptr null, i32 1) to i64)) %t780 = load ptr, ptr %t746 %t781 = getelementptr inbounds %S.gen.Template, ptr %t780, i64 %t778 store %S.gen.Template %t777, ptr %t781 store i64 %t779, ptr %t747 call void @finch.drop.S_ast_Node(ptr %a686) br label %for.step3716 endif3726: %t782 = load ptr, ptr %a1 %t783 = icmp eq ptr %t782, null br i1 %t783, label %panic3745, label %ok3746 panic3745: call void @finch_panic(ptr @.str.2334, i64 1587, ptr @.str.2335) unreachable ok3746: %t784 = getelementptr inbounds %S.gen.Gen, ptr %t782, i32 0, i32 14 %t785 = load { ptr, i64, i64 }, ptr %t784 store { ptr, i64, i64 } %t785, ptr %a786 call void @finch_str_copy(ptr %a787, ptr %a786) %t788 = load { ptr, i64, i64 }, ptr %a787 store { ptr, i64, i64 } %t788, ptr %a789 store i1 false, ptr %a790 %t791 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t792 = getelementptr inbounds { ptr, i64, i64 }, ptr %t791, i32 0, i32 1 %t793 = load i64, ptr %t792 %t794 = icmp sgt i64 %t793, 0 br label %logic.from3747 logic.from3747: br i1 %t794, label %logic.rhs3748, label %logic.end3749 logic.rhs3748: %t795 = load ptr, ptr %a1 %t796 = load ptr, ptr %a1 %t797 = icmp eq ptr %t796, null br i1 %t797, label %panic3750, label %ok3751 panic3750: call void @finch_panic(ptr @.str.2336, i64 1589, ptr @.str.2337) unreachable ok3751: %t798 = getelementptr inbounds %S.gen.Gen, ptr %t796, i32 0, i32 14 %t799 = load { ptr, i64, i64 }, ptr %t798 %t800 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t801 = load { ptr, i64, i64 }, ptr %t800 %t802 = call i64 @finch.gen.findEnum(ptr %t795, { ptr, i64, i64 } %t799, { ptr, i64, i64 } %t801) %t803 = icmp sge i64 %t802, 0 br label %logic.rend3752 logic.rend3752: br label %logic.end3749 logic.end3749: %t804 = phi i1 [ false, %logic.from3747 ], [ %t803, %logic.rend3752 ] br i1 %t804, label %then3753, label %else3754 then3753: store i1 true, ptr %a790 %t805 = load ptr, ptr %a1 %t806 = load { ptr, i64, i64 }, ptr %a789 %t807 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t808 = load { ptr, i64, i64 }, ptr %t807 %t809 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t810 = load { ptr, i64, i64 }, ptr %t809 %t811 = call i64 @finch.gen.findMethod(ptr %t805, { ptr, i64, i64 } %t806, { ptr, i64, i64 } %t808, { ptr, i64, i64 } %t810) %t812 = icmp sge i64 %t811, 0 br i1 %t812, label %then3756, label %endif3758 then3756: %t813 = load ptr, ptr %a1 %t814 = load %S.ast.Node, ptr %a686 %t815 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t816 = load { ptr, i64, i64 }, ptr %t815 store { ptr, i64, i64 } { ptr @.str.2338, i64 11, i64 0 }, ptr %a818 store { ptr, i64, i64 } %t816, ptr %a819 call void @finch_str_concat(ptr %a817, ptr %a818, ptr %a819) %t820 = load { ptr, i64, i64 }, ptr %a817 store { ptr, i64, i64 } %t820, ptr %a822 store { ptr, i64, i64 } { ptr @.str.2339, i64 1, i64 0 }, ptr %a823 call void @finch_str_concat(ptr %a821, ptr %a822, ptr %a823) store { ptr, i64, i64 } %t820, ptr %a824 call void @finch_str_drop(ptr %a824) %t825 = load { ptr, i64, i64 }, ptr %a821 %t826 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t827 = load { ptr, i64, i64 }, ptr %t826 store { ptr, i64, i64 } %t825, ptr %a829 store { ptr, i64, i64 } %t827, ptr %a830 call void @finch_str_concat(ptr %a828, ptr %a829, ptr %a830) store { ptr, i64, i64 } %t825, ptr %a831 call void @finch_str_drop(ptr %a831) %t832 = load { ptr, i64, i64 }, ptr %a828 store { ptr, i64, i64 } %t832, ptr %a834 store { ptr, i64, i64 } { ptr @.str.2340, i64 17, i64 0 }, ptr %a835 call void @finch_str_concat(ptr %a833, ptr %a834, ptr %a835) store { ptr, i64, i64 } %t832, ptr %a836 call void @finch_str_drop(ptr %a836) %t837 = load { ptr, i64, i64 }, ptr %a833 call void @finch.gen.fail(ptr %t813, %S.ast.Node %t814, { ptr, i64, i64 } %t837) store { ptr, i64, i64 } %t837, ptr %a838 call void @finch_str_drop(ptr %a838) br label %endif3758 endif3758: br label %endif3755 else3754: %t839 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t840 = getelementptr inbounds { ptr, i64, i64 }, ptr %t839, i32 0, i32 1 %t841 = load i64, ptr %t840 %t842 = icmp sgt i64 %t841, 0 br i1 %t842, label %then3759, label %else3760 then3759: %t843 = load ptr, ptr %a1 %t844 = load ptr, ptr %a1 %t845 = icmp eq ptr %t844, null br i1 %t845, label %panic3762, label %ok3763 panic3762: call void @finch_panic(ptr @.str.2341, i64 1595, ptr @.str.2342) unreachable ok3763: %t846 = getelementptr inbounds %S.gen.Gen, ptr %t844, i32 0, i32 14 %t847 = load { ptr, i64, i64 }, ptr %t846 %t848 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t849 = load { ptr, i64, i64 }, ptr %t848 %t850 = call i64 @finch.gen.findStruct(ptr %t843, { ptr, i64, i64 } %t847, { ptr, i64, i64 } %t849) store i64 %t850, ptr %a851 %t852 = load i64, ptr %a851 %t853 = icmp slt i64 %t852, 0 br label %logic.from3764 logic.from3764: br i1 %t853, label %logic.rhs3765, label %logic.end3766 logic.rhs3765: %t854 = load ptr, ptr %a1 %t855 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t856 = load { ptr, i64, i64 }, ptr %t855 %t857 = call i64 @finch.gen.findStruct(ptr %t854, { ptr, i64, i64 } { ptr @.str.2343, i64 1, i64 0 }, { ptr, i64, i64 } %t856) %t858 = icmp sge i64 %t857, 0 br label %logic.rend3767 logic.rend3767: br label %logic.end3766 logic.end3766: %t859 = phi i1 [ false, %logic.from3764 ], [ %t858, %logic.rend3767 ] br i1 %t859, label %then3768, label %endif3770 then3768: %t860 = load ptr, ptr %a1 %t861 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t862 = load { ptr, i64, i64 }, ptr %t861 %t863 = call i64 @finch.gen.findStruct(ptr %t860, { ptr, i64, i64 } { ptr @.str.2344, i64 1, i64 0 }, { ptr, i64, i64 } %t862) store i64 %t863, ptr %a851 %t864 = load { ptr, i64, i64 }, ptr %a789 store { ptr, i64, i64 } { ptr @.str.2345, i64 1, i64 0 }, ptr %a789 store { ptr, i64, i64 } %t864, ptr %a865 call void @finch_str_drop(ptr %a865) br label %endif3770 endif3770: %t866 = load i64, ptr %a851 %t867 = icmp slt i64 %t866, 0 br i1 %t867, label %then3771, label %endif3773 then3771: %t868 = load ptr, ptr %a1 %t869 = load %S.ast.Node, ptr %a686 %t870 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t871 = load { ptr, i64, i64 }, ptr %t870 store { ptr, i64, i64 } { ptr @.str.2346, i64 26, i64 0 }, ptr %a873 store { ptr, i64, i64 } %t871, ptr %a874 call void @finch_str_concat(ptr %a872, ptr %a873, ptr %a874) %t875 = load { ptr, i64, i64 }, ptr %a872 store { ptr, i64, i64 } %t875, ptr %a877 store { ptr, i64, i64 } { ptr @.str.2347, i64 76, i64 0 }, ptr %a878 call void @finch_str_concat(ptr %a876, ptr %a877, ptr %a878) store { ptr, i64, i64 } %t875, ptr %a879 call void @finch_str_drop(ptr %a879) %t880 = load { ptr, i64, i64 }, ptr %a876 call void @finch.gen.fail(ptr %t868, %S.ast.Node %t869, { ptr, i64, i64 } %t880) store { ptr, i64, i64 } %t880, ptr %a881 call void @finch_str_drop(ptr %a881) br label %endif3773 endif3773: %t882 = load ptr, ptr %a1 %t883 = load { ptr, i64, i64 }, ptr %a789 %t884 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t885 = load { ptr, i64, i64 }, ptr %t884 %t886 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t887 = load { ptr, i64, i64 }, ptr %t886 %t888 = call i64 @finch.gen.findMethod(ptr %t882, { ptr, i64, i64 } %t883, { ptr, i64, i64 } %t885, { ptr, i64, i64 } %t887) %t889 = icmp sge i64 %t888, 0 br i1 %t889, label %then3774, label %endif3776 then3774: %t890 = load ptr, ptr %a1 %t891 = load %S.ast.Node, ptr %a686 %t892 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t893 = load { ptr, i64, i64 }, ptr %t892 store { ptr, i64, i64 } { ptr @.str.2348, i64 11, i64 0 }, ptr %a895 store { ptr, i64, i64 } %t893, ptr %a896 call void @finch_str_concat(ptr %a894, ptr %a895, ptr %a896) %t897 = load { ptr, i64, i64 }, ptr %a894 store { ptr, i64, i64 } %t897, ptr %a899 store { ptr, i64, i64 } { ptr @.str.2349, i64 1, i64 0 }, ptr %a900 call void @finch_str_concat(ptr %a898, ptr %a899, ptr %a900) store { ptr, i64, i64 } %t897, ptr %a901 call void @finch_str_drop(ptr %a901) %t902 = load { ptr, i64, i64 }, ptr %a898 %t903 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t904 = load { ptr, i64, i64 }, ptr %t903 store { ptr, i64, i64 } %t902, ptr %a906 store { ptr, i64, i64 } %t904, ptr %a907 call void @finch_str_concat(ptr %a905, ptr %a906, ptr %a907) store { ptr, i64, i64 } %t902, ptr %a908 call void @finch_str_drop(ptr %a908) %t909 = load { ptr, i64, i64 }, ptr %a905 store { ptr, i64, i64 } %t909, ptr %a911 store { ptr, i64, i64 } { ptr @.str.2350, i64 17, i64 0 }, ptr %a912 call void @finch_str_concat(ptr %a910, ptr %a911, ptr %a912) store { ptr, i64, i64 } %t909, ptr %a913 call void @finch_str_drop(ptr %a913) %t914 = load { ptr, i64, i64 }, ptr %a910 call void @finch.gen.fail(ptr %t890, %S.ast.Node %t891, { ptr, i64, i64 } %t914) store { ptr, i64, i64 } %t914, ptr %a915 call void @finch_str_drop(ptr %a915) br label %endif3776 endif3776: %t916 = load ptr, ptr %a1 %t917 = icmp eq ptr %t916, null br i1 %t917, label %panic3777, label %ok3778 panic3777: call void @finch_panic(ptr @.str.2351, i64 1606, ptr @.str.2352) unreachable ok3778: %t918 = getelementptr inbounds %S.gen.Gen, ptr %t916, i32 0, i32 16 %t919 = load i64, ptr %a851 %t920 = load { ptr, i64, i64 }, ptr %t918 %t921 = extractvalue { ptr, i64, i64 } %t920, 1 %t922 = icmp uge i64 %t919, %t921 br i1 %t922, label %range3779, label %inrange3780 range3779: call void @finch_panic_index(ptr @.str.2353, i64 1606, i64 %t919, i64 %t921) unreachable inrange3780: %t923 = extractvalue { ptr, i64, i64 } %t920, 0 %t924 = getelementptr inbounds %S.gen.StructDef, ptr %t923, i64 %t919 %t925 = getelementptr inbounds %S.gen.StructDef, ptr %t924, i32 0, i32 11 %t926 = getelementptr inbounds { ptr, i64, i64 }, ptr %t925, i32 0, i32 1 %t927 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t928 = load { ptr, i64, i64 }, ptr %t927 store i64 -1, ptr %a929 %t930 = load i64, ptr %t926 %t931 = load ptr, ptr %t925 store i64 0, ptr %a932 br label %find.cond3781 find.cond3781: %t933 = load i64, ptr %a932 %t934 = icmp slt i64 %t933, %t930 br i1 %t934, label %find.body3782, label %find.end3785 find.body3782: %t935 = getelementptr inbounds { ptr, i64, i64 }, ptr %t931, i64 %t933 %t936 = load { ptr, i64, i64 }, ptr %t935 store { ptr, i64, i64 } %t936, ptr %a937 store { ptr, i64, i64 } %t928, ptr %a938 %t939 = call i32 @finch_str_eq(ptr %a937, ptr %a938) %t940 = icmp ne i32 %t939, 0 br i1 %t940, label %find.hit3783, label %find.next3784 find.hit3783: store i64 %t933, ptr %a929 br label %find.end3785 find.next3784: %t941 = add i64 %t933, 1 store i64 %t941, ptr %a932 br label %find.cond3781 find.end3785: %t942 = load i64, ptr %a929 %t943 = icmp sge i64 %t942, 0 br i1 %t943, label %then3786, label %endif3788 then3786: %t944 = load ptr, ptr %a1 %t945 = load %S.ast.Node, ptr %a686 %t946 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t947 = load { ptr, i64, i64 }, ptr %t946 store { ptr, i64, i64 } { ptr @.str.2354, i64 11, i64 0 }, ptr %a949 store { ptr, i64, i64 } %t947, ptr %a950 call void @finch_str_concat(ptr %a948, ptr %a949, ptr %a950) %t951 = load { ptr, i64, i64 }, ptr %a948 store { ptr, i64, i64 } %t951, ptr %a953 store { ptr, i64, i64 } { ptr @.str.2355, i64 28, i64 0 }, ptr %a954 call void @finch_str_concat(ptr %a952, ptr %a953, ptr %a954) store { ptr, i64, i64 } %t951, ptr %a955 call void @finch_str_drop(ptr %a955) %t956 = load { ptr, i64, i64 }, ptr %a952 %t957 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t958 = load { ptr, i64, i64 }, ptr %t957 store { ptr, i64, i64 } %t956, ptr %a960 store { ptr, i64, i64 } %t958, ptr %a961 call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) store { ptr, i64, i64 } %t956, ptr %a962 call void @finch_str_drop(ptr %a962) %t963 = load { ptr, i64, i64 }, ptr %a959 store { ptr, i64, i64 } %t963, ptr %a965 store { ptr, i64, i64 } { ptr @.str.2356, i64 1, i64 0 }, ptr %a966 call void @finch_str_concat(ptr %a964, ptr %a965, ptr %a966) store { ptr, i64, i64 } %t963, ptr %a967 call void @finch_str_drop(ptr %a967) %t968 = load { ptr, i64, i64 }, ptr %a964 call void @finch.gen.fail(ptr %t944, %S.ast.Node %t945, { ptr, i64, i64 } %t968) store { ptr, i64, i64 } %t968, ptr %a969 call void @finch_str_drop(ptr %a969) br label %endif3788 endif3788: br label %endif3761 else3760: %t970 = load ptr, ptr %a1 %t971 = load ptr, ptr %a1 %t972 = icmp eq ptr %t971, null br i1 %t972, label %panic3789, label %ok3790 panic3789: call void @finch_panic(ptr @.str.2357, i64 1610, ptr @.str.2358) unreachable ok3790: %t973 = getelementptr inbounds %S.gen.Gen, ptr %t971, i32 0, i32 14 %t974 = load { ptr, i64, i64 }, ptr %t973 %t975 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t976 = load { ptr, i64, i64 }, ptr %t975 %t977 = call i64 @finch.gen.findFn(ptr %t970, { ptr, i64, i64 } %t974, { ptr, i64, i64 } %t976) %t978 = icmp sge i64 %t977, 0 br i1 %t978, label %then3791, label %endif3793 then3791: %t979 = load ptr, ptr %a1 %t980 = load %S.ast.Node, ptr %a686 %t981 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t982 = load { ptr, i64, i64 }, ptr %t981 store { ptr, i64, i64 } { ptr @.str.2359, i64 10, i64 0 }, ptr %a984 store { ptr, i64, i64 } %t982, ptr %a985 call void @finch_str_concat(ptr %a983, ptr %a984, ptr %a985) %t986 = load { ptr, i64, i64 }, ptr %a983 store { ptr, i64, i64 } %t986, ptr %a988 store { ptr, i64, i64 } { ptr @.str.2360, i64 18, i64 0 }, ptr %a989 call void @finch_str_concat(ptr %a987, ptr %a988, ptr %a989) store { ptr, i64, i64 } %t986, ptr %a990 call void @finch_str_drop(ptr %a990) %t991 = load { ptr, i64, i64 }, ptr %a987 call void @finch.gen.fail(ptr %t979, %S.ast.Node %t980, { ptr, i64, i64 } %t991) store { ptr, i64, i64 } %t991, ptr %a992 call void @finch_str_drop(ptr %a992) br label %endif3793 endif3793: %t993 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t994 = load { ptr, i64, i64 }, ptr %t993 %t995 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t994) br i1 %t995, label %then3794, label %endif3796 then3794: %t996 = load ptr, ptr %a1 %t997 = load %S.ast.Node, ptr %a686 %t998 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t999 = load { ptr, i64, i64 }, ptr %t998 store { ptr, i64, i64 } { ptr @.str.2361, i64 1, i64 0 }, ptr %a1001 store { ptr, i64, i64 } %t999, ptr %a1002 call void @finch_str_concat(ptr %a1000, ptr %a1001, ptr %a1002) %t1003 = load { ptr, i64, i64 }, ptr %a1000 store { ptr, i64, i64 } %t1003, ptr %a1005 store { ptr, i64, i64 } { ptr @.str.2362, i64 43, i64 0 }, ptr %a1006 call void @finch_str_concat(ptr %a1004, ptr %a1005, ptr %a1006) store { ptr, i64, i64 } %t1003, ptr %a1007 call void @finch_str_drop(ptr %a1007) %t1008 = load { ptr, i64, i64 }, ptr %a1004 call void @finch.gen.fail(ptr %t996, %S.ast.Node %t997, { ptr, i64, i64 } %t1008) store { ptr, i64, i64 } %t1008, ptr %a1009 call void @finch_str_drop(ptr %a1009) br label %endif3796 endif3796: br label %endif3761 endif3761: br label %endif3755 endif3755: %t1010 = load ptr, ptr %a1 %t1011 = icmp eq ptr %t1010, null br i1 %t1011, label %panic3797, label %ok3798 panic3797: call void @finch_panic(ptr @.str.2363, i64 1617, ptr @.str.2364) unreachable ok3798: %t1012 = getelementptr inbounds %S.gen.Gen, ptr %t1010, i32 0, i32 14 %t1013 = load { ptr, i64, i64 }, ptr %t1012 store { ptr, i64, i64 } %t1013, ptr %a1014 call void @finch_str_copy(ptr %a1015, ptr %a1014) %t1016 = load { ptr, i64, i64 }, ptr %a1015 %t1017 = insertvalue %S.gen.FnSig zeroinitializer, { ptr, i64, i64 } %t1016, 0 %t1018 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t1019 = load { ptr, i64, i64 }, ptr %t1018 store { ptr, i64, i64 } %t1019, ptr %a1020 call void @finch_str_copy(ptr %a1021, ptr %a1020) %t1022 = load { ptr, i64, i64 }, ptr %a1021 %t1023 = insertvalue %S.gen.FnSig %t1017, { ptr, i64, i64 } %t1022, 1 %t1024 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t1025 = load { ptr, i64, i64 }, ptr %t1024 store { ptr, i64, i64 } %t1025, ptr %a1026 call void @finch_str_copy(ptr %a1027, ptr %a1026) %t1028 = load { ptr, i64, i64 }, ptr %a1027 %t1029 = insertvalue %S.gen.FnSig %t1023, { ptr, i64, i64 } %t1028, 2 %t1030 = load { ptr, i64, i64 }, ptr %a789 store { ptr, i64, i64 } %t1030, ptr %a1031 call void @finch_str_copy(ptr %a1032, ptr %a1031) %t1033 = load { ptr, i64, i64 }, ptr %a1032 %t1034 = insertvalue %S.gen.FnSig %t1029, { ptr, i64, i64 } %t1033, 3 %t1035 = load i1, ptr %a790 %t1036 = insertvalue %S.gen.FnSig %t1034, i1 %t1035, 4 %t1037 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 8 %t1038 = load i1, ptr %t1037 %t1039 = insertvalue %S.gen.FnSig %t1036, i1 %t1038, 5 %t1040 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 7 %t1041 = load i1, ptr %t1040 %t1042 = insertvalue %S.gen.FnSig %t1039, i1 %t1041, 9 %t1043 = load i64, ptr %a629 %t1044 = insertvalue %S.gen.FnSig %t1042, i64 %t1043, 16 %t1045 = load i64, ptr %a663 %t1046 = insertvalue %S.gen.FnSig %t1044, i64 %t1045, 17 store %S.gen.FnSig %t1046, ptr %a1047 %t1048 = load ptr, ptr %a1 %t1049 = icmp eq ptr %t1048, null br i1 %t1049, label %panic3799, label %ok3800 panic3799: call void @finch_panic(ptr @.str.2366, i64 1618, ptr @.str.2367) unreachable ok3800: %t1050 = getelementptr inbounds %S.gen.Gen, ptr %t1048, i32 0, i32 14 %t1051 = load { ptr, i64, i64 }, ptr %t1050 %t1052 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t1051) store { ptr, i64, i64 } { ptr @.str.2365, i64 7, i64 0 }, ptr %a1054 store { ptr, i64, i64 } %t1052, ptr %a1055 call void @finch_str_concat(ptr %a1053, ptr %a1054, ptr %a1055) store { ptr, i64, i64 } %t1052, ptr %a1056 call void @finch_str_drop(ptr %a1056) %t1057 = load { ptr, i64, i64 }, ptr %a1053 store { ptr, i64, i64 } %t1057, ptr %a1059 store { ptr, i64, i64 } { ptr @.str.2368, i64 1, i64 0 }, ptr %a1060 call void @finch_str_concat(ptr %a1058, ptr %a1059, ptr %a1060) store { ptr, i64, i64 } %t1057, ptr %a1061 call void @finch_str_drop(ptr %a1061) %t1062 = load { ptr, i64, i64 }, ptr %a1058 %t1063 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t1064 = load { ptr, i64, i64 }, ptr %t1063 store { ptr, i64, i64 } %t1062, ptr %a1066 store { ptr, i64, i64 } %t1064, ptr %a1067 call void @finch_str_concat(ptr %a1065, ptr %a1066, ptr %a1067) store { ptr, i64, i64 } %t1062, ptr %a1068 call void @finch_str_drop(ptr %a1068) %t1069 = load { ptr, i64, i64 }, ptr %a1065 %t1070 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 11 %t1071 = load { ptr, i64, i64 }, ptr %t1070 store { ptr, i64, i64 } %t1069, ptr %t1070 store { ptr, i64, i64 } %t1071, ptr %a1072 call void @finch_str_drop(ptr %a1072) %t1073 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t1074 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1073, i32 0, i32 1 %t1075 = load i64, ptr %t1074 %t1076 = icmp sgt i64 %t1075, 0 br i1 %t1076, label %then3801, label %endif3803 then3801: %t1077 = load ptr, ptr %a1 %t1078 = icmp eq ptr %t1077, null br i1 %t1078, label %panic3804, label %ok3805 panic3804: call void @finch_panic(ptr @.str.2370, i64 1620, ptr @.str.2371) unreachable ok3805: %t1079 = getelementptr inbounds %S.gen.Gen, ptr %t1077, i32 0, i32 14 %t1080 = load { ptr, i64, i64 }, ptr %t1079 %t1081 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t1080) store { ptr, i64, i64 } { ptr @.str.2369, i64 7, i64 0 }, ptr %a1083 store { ptr, i64, i64 } %t1081, ptr %a1084 call void @finch_str_concat(ptr %a1082, ptr %a1083, ptr %a1084) store { ptr, i64, i64 } %t1081, ptr %a1085 call void @finch_str_drop(ptr %a1085) %t1086 = load { ptr, i64, i64 }, ptr %a1082 store { ptr, i64, i64 } %t1086, ptr %a1088 store { ptr, i64, i64 } { ptr @.str.2372, i64 1, i64 0 }, ptr %a1089 call void @finch_str_concat(ptr %a1087, ptr %a1088, ptr %a1089) store { ptr, i64, i64 } %t1086, ptr %a1090 call void @finch_str_drop(ptr %a1090) %t1091 = load { ptr, i64, i64 }, ptr %a1087 %t1092 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t1093 = load { ptr, i64, i64 }, ptr %t1092 store { ptr, i64, i64 } %t1091, ptr %a1095 store { ptr, i64, i64 } %t1093, ptr %a1096 call void @finch_str_concat(ptr %a1094, ptr %a1095, ptr %a1096) store { ptr, i64, i64 } %t1091, ptr %a1097 call void @finch_str_drop(ptr %a1097) %t1098 = load { ptr, i64, i64 }, ptr %a1094 store { ptr, i64, i64 } %t1098, ptr %a1100 store { ptr, i64, i64 } { ptr @.str.2373, i64 1, i64 0 }, ptr %a1101 call void @finch_str_concat(ptr %a1099, ptr %a1100, ptr %a1101) store { ptr, i64, i64 } %t1098, ptr %a1102 call void @finch_str_drop(ptr %a1102) %t1103 = load { ptr, i64, i64 }, ptr %a1099 %t1104 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t1105 = load { ptr, i64, i64 }, ptr %t1104 store { ptr, i64, i64 } %t1103, ptr %a1107 store { ptr, i64, i64 } %t1105, ptr %a1108 call void @finch_str_concat(ptr %a1106, ptr %a1107, ptr %a1108) store { ptr, i64, i64 } %t1103, ptr %a1109 call void @finch_str_drop(ptr %a1109) %t1110 = load { ptr, i64, i64 }, ptr %a1106 %t1111 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 11 %t1112 = load { ptr, i64, i64 }, ptr %t1111 store { ptr, i64, i64 } %t1110, ptr %t1111 store { ptr, i64, i64 } %t1112, ptr %a1113 call void @finch_str_drop(ptr %a1113) br label %endif3803 endif3803: %t1114 = load ptr, ptr %a1 %t1115 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 5 %t1116 = load %S.ast.Type, ptr %t1115 %t1117 = load %S.ast.Node, ptr %a686 %t1118 = call %S.ast.Type @finch.gen.resolve(ptr %t1114, %S.ast.Type %t1116, %S.ast.Node %t1117) %t1119 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 12 %t1120 = load %S.ast.Type, ptr %t1119 store %S.ast.Type %t1118, ptr %t1119 store %S.ast.Type %t1120, ptr %a1121 call void @finch.drop.S_ast_Type(ptr %a1121) %t1122 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 %t1123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1122, i32 0, i32 1 %t1124 = load i64, ptr %t1123 %t1125 = sub i64 %t1124, 1 store i64 0, ptr %a1126 br label %for.cond3806 for.cond3806: %t1127 = load i64, ptr %a1126 %t1128 = icmp slt i64 %t1127, %t1125 br i1 %t1128, label %for.body3807, label %for.end3809 for.body3807: %t1129 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 %t1130 = load i64, ptr %a1126 %t1131 = load { ptr, i64, i64 }, ptr %t1129 %t1132 = extractvalue { ptr, i64, i64 } %t1131, 1 %t1133 = icmp uge i64 %t1130, %t1132 br i1 %t1133, label %range3810, label %inrange3811 range3810: call void @finch_panic_index(ptr @.str.2374, i64 1624, i64 %t1130, i64 %t1132) unreachable inrange3811: %t1134 = extractvalue { ptr, i64, i64 } %t1131, 0 %t1135 = getelementptr inbounds %S.ast.Node, ptr %t1134, i64 %t1130 %t1136 = getelementptr inbounds %S.ast.Node, ptr %t1135, i32 0, i32 1 %t1137 = load { ptr, i64, i64 }, ptr %t1136 store { ptr, i64, i64 } %t1137, ptr %a1138 store { ptr, i64, i64 } { ptr @.str.2375, i64 4, i64 0 }, ptr %a1139 %t1140 = call i32 @finch_str_eq(ptr %a1138, ptr %a1139) %t1141 = icmp ne i32 %t1140, 0 br label %logic.from3812 logic.from3812: br i1 %t1141, label %logic.rhs3813, label %logic.end3814 logic.rhs3813: %t1142 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t1143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1142, i32 0, i32 1 %t1144 = load i64, ptr %t1143 %t1145 = icmp sgt i64 %t1144, 0 br label %logic.rend3815 logic.rend3815: br label %logic.end3814 logic.end3814: %t1146 = phi i1 [ false, %logic.from3812 ], [ %t1145, %logic.rend3815 ] br i1 %t1146, label %then3816, label %endif3818 then3816: %t1147 = load ptr, ptr %a1 %t1148 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 %t1149 = load i64, ptr %a1126 %t1150 = load { ptr, i64, i64 }, ptr %t1148 %t1151 = extractvalue { ptr, i64, i64 } %t1150, 1 %t1152 = icmp uge i64 %t1149, %t1151 br i1 %t1152, label %range3819, label %inrange3820 range3819: call void @finch_panic_index(ptr @.str.2376, i64 1625, i64 %t1149, i64 %t1151) unreachable inrange3820: %t1153 = extractvalue { ptr, i64, i64 } %t1150, 0 %t1154 = getelementptr inbounds %S.ast.Node, ptr %t1153, i64 %t1149 %t1155 = load %S.ast.Node, ptr %t1154 %t1156 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t1157 = load { ptr, i64, i64 }, ptr %t1156 store { ptr, i64, i64 } { ptr @.str.2377, i64 22, i64 0 }, ptr %a1159 store { ptr, i64, i64 } %t1157, ptr %a1160 call void @finch_str_concat(ptr %a1158, ptr %a1159, ptr %a1160) %t1161 = load { ptr, i64, i64 }, ptr %a1158 store { ptr, i64, i64 } %t1161, ptr %a1163 store { ptr, i64, i64 } { ptr @.str.2378, i64 24, i64 0 }, ptr %a1164 call void @finch_str_concat(ptr %a1162, ptr %a1163, ptr %a1164) store { ptr, i64, i64 } %t1161, ptr %a1165 call void @finch_str_drop(ptr %a1165) %t1166 = load { ptr, i64, i64 }, ptr %a1162 call void @finch.gen.fail(ptr %t1147, %S.ast.Node %t1155, { ptr, i64, i64 } %t1166) store { ptr, i64, i64 } %t1166, ptr %a1167 call void @finch_str_drop(ptr %a1167) br label %endif3818 endif3818: %t1168 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 13 %t1169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1168, i32 0, i32 1 %t1170 = load ptr, ptr %a1 %t1171 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 %t1172 = load i64, ptr %a1126 %t1173 = load { ptr, i64, i64 }, ptr %t1171 %t1174 = extractvalue { ptr, i64, i64 } %t1173, 1 %t1175 = icmp uge i64 %t1172, %t1174 br i1 %t1175, label %range3821, label %inrange3822 range3821: call void @finch_panic_index(ptr @.str.2379, i64 1627, i64 %t1172, i64 %t1174) unreachable inrange3822: %t1176 = extractvalue { ptr, i64, i64 } %t1173, 0 %t1177 = getelementptr inbounds %S.ast.Node, ptr %t1176, i64 %t1172 %t1178 = getelementptr inbounds %S.ast.Node, ptr %t1177, i32 0, i32 5 %t1179 = load %S.ast.Type, ptr %t1178 %t1180 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 %t1181 = load i64, ptr %a1126 %t1182 = load { ptr, i64, i64 }, ptr %t1180 %t1183 = extractvalue { ptr, i64, i64 } %t1182, 1 %t1184 = icmp uge i64 %t1181, %t1183 br i1 %t1184, label %range3823, label %inrange3824 range3823: call void @finch_panic_index(ptr @.str.2380, i64 1627, i64 %t1181, i64 %t1183) unreachable inrange3824: %t1185 = extractvalue { ptr, i64, i64 } %t1182, 0 %t1186 = getelementptr inbounds %S.ast.Node, ptr %t1185, i64 %t1181 %t1187 = load %S.ast.Node, ptr %t1186 %t1188 = call %S.ast.Type @finch.gen.resolve(ptr %t1170, %S.ast.Type %t1179, %S.ast.Node %t1187) %t1189 = load i64, ptr %t1169 %t1190 = add i64 %t1189, 1 call void @finch_arr_reserve(ptr %t1168, i64 %t1190, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t1191 = load ptr, ptr %t1168 %t1192 = getelementptr inbounds %S.ast.Type, ptr %t1191, i64 %t1189 store %S.ast.Type %t1188, ptr %t1192 store i64 %t1190, ptr %t1169 %t1193 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 14 %t1194 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1193, i32 0, i32 1 %t1195 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 %t1196 = load i64, ptr %a1126 %t1197 = load { ptr, i64, i64 }, ptr %t1195 %t1198 = extractvalue { ptr, i64, i64 } %t1197, 1 %t1199 = icmp uge i64 %t1196, %t1198 br i1 %t1199, label %range3825, label %inrange3826 range3825: call void @finch_panic_index(ptr @.str.2381, i64 1628, i64 %t1196, i64 %t1198) unreachable inrange3826: %t1200 = extractvalue { ptr, i64, i64 } %t1197, 0 %t1201 = getelementptr inbounds %S.ast.Node, ptr %t1200, i64 %t1196 %t1202 = getelementptr inbounds %S.ast.Node, ptr %t1201, i32 0, i32 1 %t1203 = load { ptr, i64, i64 }, ptr %t1202 store { ptr, i64, i64 } %t1203, ptr %a1204 call void @finch_str_copy(ptr %a1205, ptr %a1204) %t1206 = load { ptr, i64, i64 }, ptr %a1205 %t1207 = load i64, ptr %t1194 %t1208 = add i64 %t1207, 1 call void @finch_arr_reserve(ptr %t1193, i64 %t1208, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t1209 = load ptr, ptr %t1193 %t1210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1209, i64 %t1207 store { ptr, i64, i64 } %t1206, ptr %t1210 store i64 %t1208, ptr %t1194 br label %for.step3808 for.step3808: %t1211 = load i64, ptr %a1126 %t1212 = add i64 %t1211, 1 store i64 %t1212, ptr %a1126 br label %for.cond3806 for.end3809: %t1213 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 8 %t1214 = load i1, ptr %t1213 br i1 %t1214, label %then3827, label %endif3829 then3827: %t1215 = load ptr, ptr %a1 %t1216 = load %S.ast.Node, ptr %a686 %t1217 = load %S.gen.FnSig, ptr %a1047 call void @finch.gen.checkExport(ptr %t1215, %S.ast.Node %t1216, %S.gen.FnSig %t1217) br label %endif3829 endif3829: %t1218 = load ptr, ptr %a1 %t1219 = icmp eq ptr %t1218, null br i1 %t1219, label %panic3830, label %ok3831 panic3830: call void @finch_panic(ptr @.str.2382, i64 1633, ptr @.str.2383) unreachable ok3831: %t1220 = getelementptr inbounds %S.gen.Gen, ptr %t1218, i32 0, i32 15 %t1221 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1220, i32 0, i32 1 %t1222 = load %S.gen.FnSig, ptr %a1047 store %S.gen.FnSig %t1222, ptr %a1223 call void @finch.copy.S_gen_FnSig(ptr %a1224, ptr %a1223) %t1225 = load %S.gen.FnSig, ptr %a1224 %t1226 = load i64, ptr %t1221 %t1227 = add i64 %t1226, 1 call void @finch_arr_reserve(ptr %t1220, i64 %t1227, i64 ptrtoint (ptr getelementptr (%S.gen.FnSig, ptr null, i32 1) to i64)) %t1228 = load ptr, ptr %t1220 %t1229 = getelementptr inbounds %S.gen.FnSig, ptr %t1228, i64 %t1226 store %S.gen.FnSig %t1225, ptr %t1229 store i64 %t1227, ptr %t1221 call void @finch.drop.S_gen_FnSig(ptr %a1047) call void @finch_str_drop(ptr %a789) call void @finch.drop.S_ast_Node(ptr %a686) br label %for.step3716 for.step3716: %t1230 = load i64, ptr %a663 %t1231 = add i64 %t1230, 1 store i64 %t1231, ptr %a663 br label %for.cond3714 for.end3717: br label %for.step3702 for.step3702: %t1232 = load i64, ptr %a629 %t1233 = add i64 %t1232, 1 store i64 %t1233, ptr %a629 br label %for.cond3700 for.end3703: store i1 true, ptr %a1234 br label %while.cond3832 while.cond3832: %t1235 = load i1, ptr %a1234 br i1 %t1235, label %while.body3833, label %while.end3834 while.body3833: store i1 false, ptr %a1234 %t1236 = load ptr, ptr %a1 %t1237 = icmp eq ptr %t1236, null br i1 %t1237, label %panic3835, label %ok3836 panic3835: call void @finch_panic(ptr @.str.2384, i64 1641, ptr @.str.2385) unreachable ok3836: %t1238 = getelementptr inbounds %S.gen.Gen, ptr %t1236, i32 0, i32 15 %t1239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1238, i32 0, i32 1 %t1240 = load i64, ptr %t1239 store i64 0, ptr %a1241 br label %for.cond3837 for.cond3837: %t1242 = load i64, ptr %a1241 %t1243 = icmp slt i64 %t1242, %t1240 br i1 %t1243, label %for.body3838, label %for.end3840 for.body3838: %t1244 = load ptr, ptr %a1 %t1245 = icmp eq ptr %t1244, null br i1 %t1245, label %panic3841, label %ok3842 panic3841: call void @finch_panic(ptr @.str.2386, i64 1642, ptr @.str.2387) unreachable ok3842: %t1246 = getelementptr inbounds %S.gen.Gen, ptr %t1244, i32 0, i32 15 %t1247 = load i64, ptr %a1241 %t1248 = load { ptr, i64, i64 }, ptr %t1246 %t1249 = extractvalue { ptr, i64, i64 } %t1248, 1 %t1250 = icmp uge i64 %t1247, %t1249 br i1 %t1250, label %range3843, label %inrange3844 range3843: call void @finch_panic_index(ptr @.str.2388, i64 1642, i64 %t1247, i64 %t1249) unreachable inrange3844: %t1251 = extractvalue { ptr, i64, i64 } %t1248, 0 %t1252 = getelementptr inbounds %S.gen.FnSig, ptr %t1251, i64 %t1247 %t1253 = getelementptr inbounds %S.gen.FnSig, ptr %t1252, i32 0, i32 2 %t1254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1253, i32 0, i32 1 %t1255 = load i64, ptr %t1254 %t1256 = icmp sgt i64 %t1255, 0 br label %logic.from3845 logic.from3845: br i1 %t1256, label %logic.rhs3846, label %logic.end3847 logic.rhs3846: %t1257 = load ptr, ptr %a1 %t1258 = icmp eq ptr %t1257, null br i1 %t1258, label %panic3848, label %ok3849 panic3848: call void @finch_panic(ptr @.str.2389, i64 1642, ptr @.str.2390) unreachable ok3849: %t1259 = getelementptr inbounds %S.gen.Gen, ptr %t1257, i32 0, i32 15 %t1260 = load i64, ptr %a1241 %t1261 = load { ptr, i64, i64 }, ptr %t1259 %t1262 = extractvalue { ptr, i64, i64 } %t1261, 1 %t1263 = icmp uge i64 %t1260, %t1262 br i1 %t1263, label %range3850, label %inrange3851 range3850: call void @finch_panic_index(ptr @.str.2391, i64 1642, i64 %t1260, i64 %t1262) unreachable inrange3851: %t1264 = extractvalue { ptr, i64, i64 } %t1261, 0 %t1265 = getelementptr inbounds %S.gen.FnSig, ptr %t1264, i64 %t1260 %t1266 = getelementptr inbounds %S.gen.FnSig, ptr %t1265, i32 0, i32 10 %t1267 = load i1, ptr %t1266 %t1268 = xor i1 %t1267, true br label %logic.rend3852 logic.rend3852: br label %logic.end3847 logic.end3847: %t1269 = phi i1 [ false, %logic.from3845 ], [ %t1268, %logic.rend3852 ] br i1 %t1269, label %then3853, label %endif3855 then3853: %t1270 = load ptr, ptr %a1 %t1271 = icmp eq ptr %t1270, null br i1 %t1271, label %panic3856, label %ok3857 panic3856: call void @finch_panic(ptr @.str.2392, i64 1643, ptr @.str.2393) unreachable ok3857: %t1272 = getelementptr inbounds %S.gen.Gen, ptr %t1270, i32 0, i32 0 %t1273 = load ptr, ptr %a1 %t1274 = icmp eq ptr %t1273, null br i1 %t1274, label %panic3858, label %ok3859 panic3858: call void @finch_panic(ptr @.str.2394, i64 1643, ptr @.str.2395) unreachable ok3859: %t1275 = getelementptr inbounds %S.gen.Gen, ptr %t1273, i32 0, i32 15 %t1276 = load i64, ptr %a1241 %t1277 = load { ptr, i64, i64 }, ptr %t1275 %t1278 = extractvalue { ptr, i64, i64 } %t1277, 1 %t1279 = icmp uge i64 %t1276, %t1278 br i1 %t1279, label %range3860, label %inrange3861 range3860: call void @finch_panic_index(ptr @.str.2396, i64 1643, i64 %t1276, i64 %t1278) unreachable inrange3861: %t1280 = extractvalue { ptr, i64, i64 } %t1277, 0 %t1281 = getelementptr inbounds %S.gen.FnSig, ptr %t1280, i64 %t1276 %t1282 = getelementptr inbounds %S.gen.FnSig, ptr %t1281, i32 0, i32 16 %t1283 = load i64, ptr %t1282 %t1284 = load { ptr, i64, i64 }, ptr %t1272 %t1285 = extractvalue { ptr, i64, i64 } %t1284, 1 %t1286 = icmp uge i64 %t1283, %t1285 br i1 %t1286, label %range3862, label %inrange3863 range3862: call void @finch_panic_index(ptr @.str.2397, i64 1643, i64 %t1283, i64 %t1285) unreachable inrange3863: %t1287 = extractvalue { ptr, i64, i64 } %t1284, 0 %t1288 = getelementptr inbounds %S.ast.Program, ptr %t1287, i64 %t1283 %t1289 = getelementptr inbounds %S.ast.Program, ptr %t1288, i32 0, i32 8 %t1290 = load ptr, ptr %a1 %t1291 = icmp eq ptr %t1290, null br i1 %t1291, label %panic3864, label %ok3865 panic3864: call void @finch_panic(ptr @.str.2398, i64 1643, ptr @.str.2399) unreachable ok3865: %t1292 = getelementptr inbounds %S.gen.Gen, ptr %t1290, i32 0, i32 15 %t1293 = load i64, ptr %a1241 %t1294 = load { ptr, i64, i64 }, ptr %t1292 %t1295 = extractvalue { ptr, i64, i64 } %t1294, 1 %t1296 = icmp uge i64 %t1293, %t1295 br i1 %t1296, label %range3866, label %inrange3867 range3866: call void @finch_panic_index(ptr @.str.2400, i64 1643, i64 %t1293, i64 %t1295) unreachable inrange3867: %t1297 = extractvalue { ptr, i64, i64 } %t1294, 0 %t1298 = getelementptr inbounds %S.gen.FnSig, ptr %t1297, i64 %t1293 %t1299 = getelementptr inbounds %S.gen.FnSig, ptr %t1298, i32 0, i32 17 %t1300 = load i64, ptr %t1299 %t1301 = load { ptr, i64, i64 }, ptr %t1289 %t1302 = extractvalue { ptr, i64, i64 } %t1301, 1 %t1303 = icmp uge i64 %t1300, %t1302 br i1 %t1303, label %range3868, label %inrange3869 range3868: call void @finch_panic_index(ptr @.str.2401, i64 1643, i64 %t1300, i64 %t1302) unreachable inrange3869: %t1304 = extractvalue { ptr, i64, i64 } %t1301, 0 %t1305 = getelementptr inbounds %S.ast.Node, ptr %t1304, i64 %t1300 %t1306 = load %S.ast.Node, ptr %t1305 store %S.ast.Node %t1306, ptr %a1307 call void @finch.copy.S_ast_Node(ptr %a1308, ptr %a1307) %t1309 = load %S.ast.Node, ptr %a1308 store %S.ast.Node %t1309, ptr %a1310 %t1311 = load ptr, ptr %a1 %t1312 = getelementptr inbounds %S.ast.Node, ptr %a1310, i32 0, i32 9 %t1313 = getelementptr inbounds %S.ast.Node, ptr %a1310, i32 0, i32 9 %t1314 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1313, i32 0, i32 1 %t1315 = load i64, ptr %t1314 %t1316 = sub i64 %t1315, 1 %t1317 = load { ptr, i64, i64 }, ptr %t1312 %t1318 = extractvalue { ptr, i64, i64 } %t1317, 1 %t1319 = icmp uge i64 %t1316, %t1318 br i1 %t1319, label %range3870, label %inrange3871 range3870: call void @finch_panic_index(ptr @.str.2403, i64 1644, i64 %t1316, i64 %t1318) unreachable inrange3871: %t1320 = extractvalue { ptr, i64, i64 } %t1317, 0 %t1321 = getelementptr inbounds %S.ast.Node, ptr %t1320, i64 %t1316 %t1322 = load %S.ast.Node, ptr %t1321 %t1323 = call i1 @finch.gen.mutates(ptr %t1311, { ptr, i64, i64 } { ptr @.str.2402, i64 4, i64 0 }, %S.ast.Node %t1322) br i1 %t1323, label %then3872, label %endif3874 then3872: %t1324 = load ptr, ptr %a1 %t1325 = icmp eq ptr %t1324, null br i1 %t1325, label %panic3875, label %ok3876 panic3875: call void @finch_panic(ptr @.str.2404, i64 1645, ptr @.str.2405) unreachable ok3876: %t1326 = getelementptr inbounds %S.gen.Gen, ptr %t1324, i32 0, i32 15 %t1327 = load i64, ptr %a1241 %t1328 = load { ptr, i64, i64 }, ptr %t1326 %t1329 = extractvalue { ptr, i64, i64 } %t1328, 1 %t1330 = icmp uge i64 %t1327, %t1329 br i1 %t1330, label %range3877, label %inrange3878 range3877: call void @finch_panic_index(ptr @.str.2406, i64 1645, i64 %t1327, i64 %t1329) unreachable inrange3878: %t1331 = extractvalue { ptr, i64, i64 } %t1328, 0 %t1332 = getelementptr inbounds %S.gen.FnSig, ptr %t1331, i64 %t1327 %t1333 = getelementptr inbounds %S.gen.FnSig, ptr %t1332, i32 0, i32 10 store i1 true, ptr %t1333 %t1334 = load ptr, ptr %a1 %t1335 = icmp eq ptr %t1334, null br i1 %t1335, label %panic3879, label %ok3880 panic3879: call void @finch_panic(ptr @.str.2407, i64 1646, ptr @.str.2408) unreachable ok3880: %t1336 = getelementptr inbounds %S.gen.Gen, ptr %t1334, i32 0, i32 24 %t1337 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1336, i32 0, i32 1 %t1338 = load ptr, ptr %a1 %t1339 = icmp eq ptr %t1338, null br i1 %t1339, label %panic3881, label %ok3882 panic3881: call void @finch_panic(ptr @.str.2409, i64 1646, ptr @.str.2410) unreachable ok3882: %t1340 = getelementptr inbounds %S.gen.Gen, ptr %t1338, i32 0, i32 15 %t1341 = load i64, ptr %a1241 %t1342 = load { ptr, i64, i64 }, ptr %t1340 %t1343 = extractvalue { ptr, i64, i64 } %t1342, 1 %t1344 = icmp uge i64 %t1341, %t1343 br i1 %t1344, label %range3883, label %inrange3884 range3883: call void @finch_panic_index(ptr @.str.2411, i64 1646, i64 %t1341, i64 %t1343) unreachable inrange3884: %t1345 = extractvalue { ptr, i64, i64 } %t1342, 0 %t1346 = getelementptr inbounds %S.gen.FnSig, ptr %t1345, i64 %t1341 %t1347 = getelementptr inbounds %S.gen.FnSig, ptr %t1346, i32 0, i32 1 %t1348 = load { ptr, i64, i64 }, ptr %t1347 store { ptr, i64, i64 } %t1348, ptr %a1349 call void @finch_str_copy(ptr %a1350, ptr %a1349) %t1351 = load { ptr, i64, i64 }, ptr %a1350 %t1352 = load i64, ptr %t1337 %t1353 = add i64 %t1352, 1 call void @finch_arr_reserve(ptr %t1336, i64 %t1353, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t1354 = load ptr, ptr %t1336 %t1355 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1354, i64 %t1352 store { ptr, i64, i64 } %t1351, ptr %t1355 store i64 %t1353, ptr %t1337 store i1 true, ptr %a1234 br label %endif3874 endif3874: call void @finch.drop.S_ast_Node(ptr %a1310) br label %endif3855 endif3855: br label %for.step3839 for.step3839: %t1356 = load i64, ptr %a1241 %t1357 = add i64 %t1356, 1 store i64 %t1357, ptr %a1241 br label %for.cond3837 for.end3840: %t1358 = load ptr, ptr %a1 %t1359 = icmp eq ptr %t1358, null br i1 %t1359, label %panic3885, label %ok3886 panic3885: call void @finch_panic(ptr @.str.2412, i64 1651, ptr @.str.2413) unreachable ok3886: %t1360 = getelementptr inbounds %S.gen.Gen, ptr %t1358, i32 0, i32 17 %t1361 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1360, i32 0, i32 1 %t1362 = load i64, ptr %t1361 store i64 0, ptr %a1363 br label %for.cond3887 for.cond3887: %t1364 = load i64, ptr %a1363 %t1365 = icmp slt i64 %t1364, %t1362 br i1 %t1365, label %for.body3888, label %for.end3890 for.body3888: %t1366 = load ptr, ptr %a1 %t1367 = icmp eq ptr %t1366, null br i1 %t1367, label %panic3891, label %ok3892 panic3891: call void @finch_panic(ptr @.str.2414, i64 1652, ptr @.str.2415) unreachable ok3892: %t1368 = getelementptr inbounds %S.gen.Gen, ptr %t1366, i32 0, i32 17 %t1369 = load i64, ptr %a1363 %t1370 = load { ptr, i64, i64 }, ptr %t1368 %t1371 = extractvalue { ptr, i64, i64 } %t1370, 1 %t1372 = icmp uge i64 %t1369, %t1371 br i1 %t1372, label %range3893, label %inrange3894 range3893: call void @finch_panic_index(ptr @.str.2416, i64 1652, i64 %t1369, i64 %t1371) unreachable inrange3894: %t1373 = extractvalue { ptr, i64, i64 } %t1370, 0 %t1374 = getelementptr inbounds %S.gen.Template, ptr %t1373, i64 %t1369 %t1375 = load %S.gen.Template, ptr %t1374 store %S.gen.Template %t1375, ptr %a1376 call void @finch.copy.S_gen_Template(ptr %a1377, ptr %a1376) %t1378 = load %S.gen.Template, ptr %a1377 store %S.gen.Template %t1378, ptr %a1379 %t1380 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 2 %t1381 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1380, i32 0, i32 1 %t1382 = load i64, ptr %t1381 %t1383 = icmp sgt i64 %t1382, 0 br label %logic.from3895 logic.from3895: br i1 %t1383, label %logic.rhs3896, label %logic.end3897 logic.rhs3896: %t1384 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 7 %t1385 = load i1, ptr %t1384 %t1386 = xor i1 %t1385, true br label %logic.rend3898 logic.rend3898: br label %logic.end3897 logic.end3897: %t1387 = phi i1 [ false, %logic.from3895 ], [ %t1386, %logic.rend3898 ] br i1 %t1387, label %then3899, label %endif3901 then3899: %t1388 = load ptr, ptr %a1 %t1389 = icmp eq ptr %t1388, null br i1 %t1389, label %panic3902, label %ok3903 panic3902: call void @finch_panic(ptr @.str.2417, i64 1654, ptr @.str.2418) unreachable ok3903: %t1390 = getelementptr inbounds %S.gen.Gen, ptr %t1388, i32 0, i32 0 %t1391 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 4 %t1392 = load i64, ptr %t1391 %t1393 = load { ptr, i64, i64 }, ptr %t1390 %t1394 = extractvalue { ptr, i64, i64 } %t1393, 1 %t1395 = icmp uge i64 %t1392, %t1394 br i1 %t1395, label %range3904, label %inrange3905 range3904: call void @finch_panic_index(ptr @.str.2419, i64 1654, i64 %t1392, i64 %t1394) unreachable inrange3905: %t1396 = extractvalue { ptr, i64, i64 } %t1393, 0 %t1397 = getelementptr inbounds %S.ast.Program, ptr %t1396, i64 %t1392 %t1398 = getelementptr inbounds %S.ast.Program, ptr %t1397, i32 0, i32 8 %t1399 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 5 %t1400 = load i64, ptr %t1399 %t1401 = load { ptr, i64, i64 }, ptr %t1398 %t1402 = extractvalue { ptr, i64, i64 } %t1401, 1 %t1403 = icmp uge i64 %t1400, %t1402 br i1 %t1403, label %range3906, label %inrange3907 range3906: call void @finch_panic_index(ptr @.str.2420, i64 1654, i64 %t1400, i64 %t1402) unreachable inrange3907: %t1404 = extractvalue { ptr, i64, i64 } %t1401, 0 %t1405 = getelementptr inbounds %S.ast.Node, ptr %t1404, i64 %t1400 %t1406 = load %S.ast.Node, ptr %t1405 store %S.ast.Node %t1406, ptr %a1407 call void @finch.copy.S_ast_Node(ptr %a1408, ptr %a1407) %t1409 = load %S.ast.Node, ptr %a1408 store %S.ast.Node %t1409, ptr %a1410 %t1411 = load ptr, ptr %a1 %t1412 = getelementptr inbounds %S.ast.Node, ptr %a1410, i32 0, i32 9 %t1413 = getelementptr inbounds %S.ast.Node, ptr %a1410, i32 0, i32 9 %t1414 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1413, i32 0, i32 1 %t1415 = load i64, ptr %t1414 %t1416 = sub i64 %t1415, 1 %t1417 = load { ptr, i64, i64 }, ptr %t1412 %t1418 = extractvalue { ptr, i64, i64 } %t1417, 1 %t1419 = icmp uge i64 %t1416, %t1418 br i1 %t1419, label %range3908, label %inrange3909 range3908: call void @finch_panic_index(ptr @.str.2422, i64 1655, i64 %t1416, i64 %t1418) unreachable inrange3909: %t1420 = extractvalue { ptr, i64, i64 } %t1417, 0 %t1421 = getelementptr inbounds %S.ast.Node, ptr %t1420, i64 %t1416 %t1422 = load %S.ast.Node, ptr %t1421 %t1423 = call i1 @finch.gen.mutates(ptr %t1411, { ptr, i64, i64 } { ptr @.str.2421, i64 4, i64 0 }, %S.ast.Node %t1422) br i1 %t1423, label %then3910, label %endif3912 then3910: %t1424 = load ptr, ptr %a1 %t1425 = icmp eq ptr %t1424, null br i1 %t1425, label %panic3913, label %ok3914 panic3913: call void @finch_panic(ptr @.str.2423, i64 1656, ptr @.str.2424) unreachable ok3914: %t1426 = getelementptr inbounds %S.gen.Gen, ptr %t1424, i32 0, i32 17 %t1427 = load i64, ptr %a1363 %t1428 = load { ptr, i64, i64 }, ptr %t1426 %t1429 = extractvalue { ptr, i64, i64 } %t1428, 1 %t1430 = icmp uge i64 %t1427, %t1429 br i1 %t1430, label %range3915, label %inrange3916 range3915: call void @finch_panic_index(ptr @.str.2425, i64 1656, i64 %t1427, i64 %t1429) unreachable inrange3916: %t1431 = extractvalue { ptr, i64, i64 } %t1428, 0 %t1432 = getelementptr inbounds %S.gen.Template, ptr %t1431, i64 %t1427 %t1433 = getelementptr inbounds %S.gen.Template, ptr %t1432, i32 0, i32 7 store i1 true, ptr %t1433 %t1434 = load ptr, ptr %a1 %t1435 = icmp eq ptr %t1434, null br i1 %t1435, label %panic3917, label %ok3918 panic3917: call void @finch_panic(ptr @.str.2426, i64 1657, ptr @.str.2427) unreachable ok3918: %t1436 = getelementptr inbounds %S.gen.Gen, ptr %t1434, i32 0, i32 24 %t1437 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1436, i32 0, i32 1 %t1438 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 1 %t1439 = load { ptr, i64, i64 }, ptr %t1438 store { ptr, i64, i64 } %t1439, ptr %a1440 call void @finch_str_copy(ptr %a1441, ptr %a1440) %t1442 = load { ptr, i64, i64 }, ptr %a1441 %t1443 = load i64, ptr %t1437 %t1444 = add i64 %t1443, 1 call void @finch_arr_reserve(ptr %t1436, i64 %t1444, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t1445 = load ptr, ptr %t1436 %t1446 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1445, i64 %t1443 store { ptr, i64, i64 } %t1442, ptr %t1446 store i64 %t1444, ptr %t1437 store i1 true, ptr %a1234 br label %endif3912 endif3912: call void @finch.drop.S_ast_Node(ptr %a1410) br label %endif3901 endif3901: call void @finch.drop.S_gen_Template(ptr %a1379) br label %for.step3889 for.step3889: %t1447 = load i64, ptr %a1363 %t1448 = add i64 %t1447, 1 store i64 %t1448, ptr %a1363 br label %for.cond3887 for.end3890: br label %while.cond3832 while.end3834: %t1449 = load ptr, ptr %a1 %t1450 = icmp eq ptr %t1449, null br i1 %t1450, label %panic3919, label %ok3920 panic3919: call void @finch_panic(ptr @.str.2428, i64 1664, ptr @.str.2429) unreachable ok3920: %t1451 = getelementptr inbounds %S.gen.Gen, ptr %t1449, i32 0, i32 15 %t1452 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1451, i32 0, i32 1 %t1453 = load i64, ptr %t1452 store i64 0, ptr %a1454 br label %for.cond3921 for.cond3921: %t1455 = load i64, ptr %a1454 %t1456 = icmp slt i64 %t1455, %t1453 br i1 %t1456, label %for.body3922, label %for.end3924 for.body3922: %t1457 = load ptr, ptr %a1 %t1458 = icmp eq ptr %t1457, null br i1 %t1458, label %panic3925, label %ok3926 panic3925: call void @finch_panic(ptr @.str.2430, i64 1665, ptr @.str.2431) unreachable ok3926: %t1459 = getelementptr inbounds %S.gen.Gen, ptr %t1457, i32 0, i32 0 %t1460 = load ptr, ptr %a1 %t1461 = icmp eq ptr %t1460, null br i1 %t1461, label %panic3927, label %ok3928 panic3927: call void @finch_panic(ptr @.str.2432, i64 1665, ptr @.str.2433) unreachable ok3928: %t1462 = getelementptr inbounds %S.gen.Gen, ptr %t1460, i32 0, i32 15 %t1463 = load i64, ptr %a1454 %t1464 = load { ptr, i64, i64 }, ptr %t1462 %t1465 = extractvalue { ptr, i64, i64 } %t1464, 1 %t1466 = icmp uge i64 %t1463, %t1465 br i1 %t1466, label %range3929, label %inrange3930 range3929: call void @finch_panic_index(ptr @.str.2434, i64 1665, i64 %t1463, i64 %t1465) unreachable inrange3930: %t1467 = extractvalue { ptr, i64, i64 } %t1464, 0 %t1468 = getelementptr inbounds %S.gen.FnSig, ptr %t1467, i64 %t1463 %t1469 = getelementptr inbounds %S.gen.FnSig, ptr %t1468, i32 0, i32 16 %t1470 = load i64, ptr %t1469 %t1471 = load { ptr, i64, i64 }, ptr %t1459 %t1472 = extractvalue { ptr, i64, i64 } %t1471, 1 %t1473 = icmp uge i64 %t1470, %t1472 br i1 %t1473, label %range3931, label %inrange3932 range3931: call void @finch_panic_index(ptr @.str.2435, i64 1665, i64 %t1470, i64 %t1472) unreachable inrange3932: %t1474 = extractvalue { ptr, i64, i64 } %t1471, 0 %t1475 = getelementptr inbounds %S.ast.Program, ptr %t1474, i64 %t1470 %t1476 = getelementptr inbounds %S.ast.Program, ptr %t1475, i32 0, i32 8 %t1477 = load ptr, ptr %a1 %t1478 = icmp eq ptr %t1477, null br i1 %t1478, label %panic3933, label %ok3934 panic3933: call void @finch_panic(ptr @.str.2436, i64 1665, ptr @.str.2437) unreachable ok3934: %t1479 = getelementptr inbounds %S.gen.Gen, ptr %t1477, i32 0, i32 15 %t1480 = load i64, ptr %a1454 %t1481 = load { ptr, i64, i64 }, ptr %t1479 %t1482 = extractvalue { ptr, i64, i64 } %t1481, 1 %t1483 = icmp uge i64 %t1480, %t1482 br i1 %t1483, label %range3935, label %inrange3936 range3935: call void @finch_panic_index(ptr @.str.2438, i64 1665, i64 %t1480, i64 %t1482) unreachable inrange3936: %t1484 = extractvalue { ptr, i64, i64 } %t1481, 0 %t1485 = getelementptr inbounds %S.gen.FnSig, ptr %t1484, i64 %t1480 %t1486 = getelementptr inbounds %S.gen.FnSig, ptr %t1485, i32 0, i32 17 %t1487 = load i64, ptr %t1486 %t1488 = load { ptr, i64, i64 }, ptr %t1476 %t1489 = extractvalue { ptr, i64, i64 } %t1488, 1 %t1490 = icmp uge i64 %t1487, %t1489 br i1 %t1490, label %range3937, label %inrange3938 range3937: call void @finch_panic_index(ptr @.str.2439, i64 1665, i64 %t1487, i64 %t1489) unreachable inrange3938: %t1491 = extractvalue { ptr, i64, i64 } %t1488, 0 %t1492 = getelementptr inbounds %S.ast.Node, ptr %t1491, i64 %t1487 %t1493 = load %S.ast.Node, ptr %t1492 store %S.ast.Node %t1493, ptr %a1494 call void @finch.copy.S_ast_Node(ptr %a1495, ptr %a1494) %t1496 = load %S.ast.Node, ptr %a1495 store %S.ast.Node %t1496, ptr %a1497 %t1498 = getelementptr inbounds %S.ast.Node, ptr %a1497, i32 0, i32 9 %t1499 = getelementptr inbounds %S.ast.Node, ptr %a1497, i32 0, i32 9 %t1500 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1499, i32 0, i32 1 %t1501 = load i64, ptr %t1500 %t1502 = sub i64 %t1501, 1 %t1503 = load { ptr, i64, i64 }, ptr %t1498 %t1504 = extractvalue { ptr, i64, i64 } %t1503, 1 %t1505 = icmp uge i64 %t1502, %t1504 br i1 %t1505, label %range3939, label %inrange3940 range3939: call void @finch_panic_index(ptr @.str.2440, i64 1666, i64 %t1502, i64 %t1504) unreachable inrange3940: %t1506 = extractvalue { ptr, i64, i64 } %t1503, 0 %t1507 = getelementptr inbounds %S.ast.Node, ptr %t1506, i64 %t1502 %t1508 = load %S.ast.Node, ptr %t1507 store %S.ast.Node %t1508, ptr %a1509 call void @finch.copy.S_ast_Node(ptr %a1510, ptr %a1509) %t1511 = load %S.ast.Node, ptr %a1510 store %S.ast.Node %t1511, ptr %a1512 %t1513 = load ptr, ptr %a1 %t1514 = icmp eq ptr %t1513, null br i1 %t1514, label %panic3941, label %ok3942 panic3941: call void @finch_panic(ptr @.str.2441, i64 1667, ptr @.str.2442) unreachable ok3942: %t1515 = getelementptr inbounds %S.gen.Gen, ptr %t1513, i32 0, i32 15 %t1516 = load i64, ptr %a1454 %t1517 = load { ptr, i64, i64 }, ptr %t1515 %t1518 = extractvalue { ptr, i64, i64 } %t1517, 1 %t1519 = icmp uge i64 %t1516, %t1518 br i1 %t1519, label %range3943, label %inrange3944 range3943: call void @finch_panic_index(ptr @.str.2443, i64 1667, i64 %t1516, i64 %t1518) unreachable inrange3944: %t1520 = extractvalue { ptr, i64, i64 } %t1517, 0 %t1521 = getelementptr inbounds %S.gen.FnSig, ptr %t1520, i64 %t1516 %t1522 = getelementptr inbounds %S.gen.FnSig, ptr %t1521, i32 0, i32 13 %t1523 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1522, i32 0, i32 1 %t1524 = load i64, ptr %t1523 store i64 0, ptr %a1525 br label %for.cond3945 for.cond3945: %t1526 = load i64, ptr %a1525 %t1527 = icmp slt i64 %t1526, %t1524 br i1 %t1527, label %for.body3946, label %for.end3948 for.body3946: %t1528 = load ptr, ptr %a1 %t1529 = icmp eq ptr %t1528, null br i1 %t1529, label %panic3949, label %ok3950 panic3949: call void @finch_panic(ptr @.str.2444, i64 1668, ptr @.str.2445) unreachable ok3950: %t1530 = getelementptr inbounds %S.gen.Gen, ptr %t1528, i32 0, i32 15 %t1531 = load i64, ptr %a1454 %t1532 = load { ptr, i64, i64 }, ptr %t1530 %t1533 = extractvalue { ptr, i64, i64 } %t1532, 1 %t1534 = icmp uge i64 %t1531, %t1533 br i1 %t1534, label %range3951, label %inrange3952 range3951: call void @finch_panic_index(ptr @.str.2446, i64 1668, i64 %t1531, i64 %t1533) unreachable inrange3952: %t1535 = extractvalue { ptr, i64, i64 } %t1532, 0 %t1536 = getelementptr inbounds %S.gen.FnSig, ptr %t1535, i64 %t1531 %t1537 = getelementptr inbounds %S.gen.FnSig, ptr %t1536, i32 0, i32 13 %t1538 = load i64, ptr %a1525 %t1539 = load { ptr, i64, i64 }, ptr %t1537 %t1540 = extractvalue { ptr, i64, i64 } %t1539, 1 %t1541 = icmp uge i64 %t1538, %t1540 br i1 %t1541, label %range3953, label %inrange3954 range3953: call void @finch_panic_index(ptr @.str.2447, i64 1668, i64 %t1538, i64 %t1540) unreachable inrange3954: %t1542 = extractvalue { ptr, i64, i64 } %t1539, 0 %t1543 = getelementptr inbounds %S.ast.Type, ptr %t1542, i64 %t1538 %t1544 = load %S.ast.Type, ptr %t1543 store %S.ast.Type %t1544, ptr %a1545 call void @finch.copy.S_ast_Type(ptr %a1546, ptr %a1545) %t1547 = load %S.ast.Type, ptr %a1546 store %S.ast.Type %t1547, ptr %a1548 %t1549 = load ptr, ptr %a1 %t1550 = icmp eq ptr %t1549, null br i1 %t1550, label %panic3955, label %ok3956 panic3955: call void @finch_panic(ptr @.str.2448, i64 1669, ptr @.str.2449) unreachable ok3956: %t1551 = getelementptr inbounds %S.gen.Gen, ptr %t1549, i32 0, i32 15 %t1552 = load i64, ptr %a1454 %t1553 = load { ptr, i64, i64 }, ptr %t1551 %t1554 = extractvalue { ptr, i64, i64 } %t1553, 1 %t1555 = icmp uge i64 %t1552, %t1554 br i1 %t1555, label %range3957, label %inrange3958 range3957: call void @finch_panic_index(ptr @.str.2450, i64 1669, i64 %t1552, i64 %t1554) unreachable inrange3958: %t1556 = extractvalue { ptr, i64, i64 } %t1553, 0 %t1557 = getelementptr inbounds %S.gen.FnSig, ptr %t1556, i64 %t1552 %t1558 = getelementptr inbounds %S.gen.FnSig, ptr %t1557, i32 0, i32 15 %t1559 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1558, i32 0, i32 1 %t1560 = load ptr, ptr %a1 %t1561 = load %S.ast.Type, ptr %a1548 %t1562 = call i1 @finch.gen.owning(ptr %t1560, %S.ast.Type %t1561) br label %logic.from3959 logic.from3959: br i1 %t1562, label %logic.rhs3960, label %logic.end3961 logic.rhs3960: %t1563 = load ptr, ptr %a1 %t1564 = load ptr, ptr %a1 %t1565 = icmp eq ptr %t1564, null br i1 %t1565, label %panic3962, label %ok3963 panic3962: call void @finch_panic(ptr @.str.2451, i64 1669, ptr @.str.2452) unreachable ok3963: %t1566 = getelementptr inbounds %S.gen.Gen, ptr %t1564, i32 0, i32 15 %t1567 = load i64, ptr %a1454 %t1568 = load { ptr, i64, i64 }, ptr %t1566 %t1569 = extractvalue { ptr, i64, i64 } %t1568, 1 %t1570 = icmp uge i64 %t1567, %t1569 br i1 %t1570, label %range3964, label %inrange3965 range3964: call void @finch_panic_index(ptr @.str.2453, i64 1669, i64 %t1567, i64 %t1569) unreachable inrange3965: %t1571 = extractvalue { ptr, i64, i64 } %t1568, 0 %t1572 = getelementptr inbounds %S.gen.FnSig, ptr %t1571, i64 %t1567 %t1573 = getelementptr inbounds %S.gen.FnSig, ptr %t1572, i32 0, i32 14 %t1574 = load i64, ptr %a1525 %t1575 = load { ptr, i64, i64 }, ptr %t1573 %t1576 = extractvalue { ptr, i64, i64 } %t1575, 1 %t1577 = icmp uge i64 %t1574, %t1576 br i1 %t1577, label %range3966, label %inrange3967 range3966: call void @finch_panic_index(ptr @.str.2454, i64 1669, i64 %t1574, i64 %t1576) unreachable inrange3967: %t1578 = extractvalue { ptr, i64, i64 } %t1575, 0 %t1579 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1578, i64 %t1574 %t1580 = load { ptr, i64, i64 }, ptr %t1579 %t1581 = load %S.ast.Node, ptr %a1512 %t1582 = call i1 @finch.gen.mutates(ptr %t1563, { ptr, i64, i64 } %t1580, %S.ast.Node %t1581) %t1583 = xor i1 %t1582, true br label %logic.rend3968 logic.rend3968: br label %logic.end3961 logic.end3961: %t1584 = phi i1 [ false, %logic.from3959 ], [ %t1583, %logic.rend3968 ] %t1585 = load i64, ptr %t1559 %t1586 = add i64 %t1585, 1 call void @finch_arr_reserve(ptr %t1558, i64 %t1586, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) %t1587 = load ptr, ptr %t1558 %t1588 = getelementptr inbounds i1, ptr %t1587, i64 %t1585 store i1 %t1584, ptr %t1588 store i64 %t1586, ptr %t1559 call void @finch.drop.S_ast_Type(ptr %a1548) br label %for.step3947 for.step3947: %t1589 = load i64, ptr %a1525 %t1590 = add i64 %t1589, 1 store i64 %t1590, ptr %a1525 br label %for.cond3945 for.end3948: call void @finch.drop.S_ast_Node(ptr %a1512) call void @finch.drop.S_ast_Node(ptr %a1497) br label %for.step3923 for.step3923: %t1591 = load i64, ptr %a1454 %t1592 = add i64 %t1591, 1 store i64 %t1592, ptr %a1454 br label %for.cond3921 for.end3924: ret void } define internal i64 @finch.gen.findTemplate(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, i1 %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca i1, align 16 %a11 = alloca i64, align 16 %a24 = alloca %S.gen.Template, align 16 %a25 = alloca %S.gen.Template, align 16 %a27 = alloca %S.gen.Template, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 store i1 %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic3969, label %ok3970 panic3969: call void @finch_panic(ptr @.str.2455, i64 1675, ptr @.str.2456) unreachable ok3970: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 %t10 = load i64, ptr %t9 store i64 0, ptr %a11 br label %for.cond3971 for.cond3971: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t10 br i1 %t13, label %for.body3972, label %for.end3974 for.body3972: %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null br i1 %t15, label %panic3975, label %ok3976 panic3975: call void @finch_panic(ptr @.str.2457, i64 1676, ptr @.str.2458) unreachable ok3976: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 17 %t17 = load i64, ptr %a11 %t18 = load { ptr, i64, i64 }, ptr %t16 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 %t17, %t19 br i1 %t20, label %range3977, label %inrange3978 range3977: call void @finch_panic_index(ptr @.str.2459, i64 1676, i64 %t17, i64 %t19) unreachable inrange3978: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.gen.Template, ptr %t21, i64 %t17 %t23 = load %S.gen.Template, ptr %t22 store %S.gen.Template %t23, ptr %a24 call void @finch.copy.S_gen_Template(ptr %a25, ptr %a24) %t26 = load %S.gen.Template, ptr %a25 store %S.gen.Template %t26, ptr %a27 %t28 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 0 %t29 = load { ptr, i64, i64 }, ptr %t28 %t30 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t29, ptr %a31 store { ptr, i64, i64 } %t30, ptr %a32 %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) %t34 = icmp ne i32 %t33, 0 br label %logic.from3979 logic.from3979: br i1 %t34, label %logic.rhs3980, label %logic.end3981 logic.rhs3980: %t35 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 1 %t36 = load { ptr, i64, i64 }, ptr %t35 %t37 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t36, ptr %a38 store { ptr, i64, i64 } %t37, ptr %a39 %t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39) %t41 = icmp ne i32 %t40, 0 br label %logic.rend3982 logic.rend3982: br label %logic.end3981 logic.end3981: %t42 = phi i1 [ false, %logic.from3979 ], [ %t41, %logic.rend3982 ] br label %logic.from3983 logic.from3983: br i1 %t42, label %logic.rhs3984, label %logic.end3985 logic.rhs3984: %t43 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 2 %t44 = load { ptr, i64, i64 }, ptr %t43 %t45 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t44, ptr %a46 store { ptr, i64, i64 } %t45, ptr %a47 %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) %t49 = icmp ne i32 %t48, 0 br label %logic.rend3986 logic.rend3986: br label %logic.end3985 logic.end3985: %t50 = phi i1 [ false, %logic.from3983 ], [ %t49, %logic.rend3986 ] br label %logic.from3987 logic.from3987: br i1 %t50, label %logic.rhs3988, label %logic.end3989 logic.rhs3988: %t51 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 6 %t52 = load i1, ptr %t51 %t53 = load i1, ptr %a5 %t54 = icmp eq i1 %t52, %t53 br label %logic.rend3990 logic.rend3990: br label %logic.end3989 logic.end3989: %t55 = phi i1 [ false, %logic.from3987 ], [ %t54, %logic.rend3990 ] br i1 %t55, label %then3991, label %endif3993 then3991: %t56 = load i64, ptr %a11 call void @finch.drop.S_gen_Template(ptr %a27) ret i64 %t56 endif3993: call void @finch.drop.S_gen_Template(ptr %a27) br label %for.step3973 for.step3973: %t57 = load i64, ptr %a11 %t58 = add i64 %t57, 1 store i64 %t58, ptr %a11 br label %for.cond3971 for.end3974: ret i64 -1 } define internal { ptr, i64, i64 } @finch.gen.shownTypes({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a11 = alloca %S.ast.Type, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a2 store i64 0, ptr %a3 br label %each.cond3994 each.cond3994: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 br i1 %t7, label %each.body3995, label %each.end3997 each.body3995: %t8 = load ptr, ptr %a1 %t9 = getelementptr inbounds %S.ast.Type, ptr %t8, i64 %t6 %t10 = load %S.ast.Type, ptr %t9 store %S.ast.Type %t10, ptr %a11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t13 = load %S.ast.Type, ptr %a11 %t14 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t13) %t15 = load i64, ptr %t12 %t16 = add i64 %t15, 1 call void @finch_arr_reserve(ptr %a2, i64 %t16, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t17 = load ptr, ptr %a2 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i64 %t15 store { ptr, i64, i64 } %t14, ptr %t18 store i64 %t16, ptr %t12 br label %each.step3996 each.step3996: %t19 = load i64, ptr %a3 %t20 = add i64 %t19, 1 store i64 %t20, ptr %a3 br label %each.cond3994 each.end3997: %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2460, i64 2, i64 0 }, ptr %a22 call void @finch_str_join(ptr %a23, ptr %a2, ptr %a22) %t24 = load { ptr, i64, i64 }, ptr %a23 call void @finch.drop.arr_str(ptr %a2) ret { ptr, i64, i64 } %t24 } define internal %S.ast.Type @finch.gen.instStruct(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, %S.ast.Node %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca %S.ast.Node, align 16 %a10 = alloca i64, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca %S.gen.Template, align 16 %a48 = alloca %S.gen.Template, align 16 %a50 = alloca %S.gen.Template, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 store %S.ast.Node %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = load { ptr, i64, i64 }, ptr %a2 %t8 = load { ptr, i64, i64 }, ptr %a3 %t9 = call i64 @finch.gen.findTemplate(ptr %t6, { ptr, i64, i64 } %t7, { ptr, i64, i64 } %t8, { ptr, i64, i64 } { ptr @.str.2461, i64 0, i64 0 }, i1 true) store i64 %t9, ptr %a10 %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, 0 br i1 %t12, label %then3998, label %endif4000 then3998: %t13 = load ptr, ptr %a1 %t14 = load %S.ast.Node, ptr %a5 %t15 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.2462, i64 34, i64 0 }, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t19, ptr %a21 store { ptr, i64, i64 } { ptr @.str.2463, i64 28, i64 0 }, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) store { ptr, i64, i64 } %t19, ptr %a23 call void @finch_str_drop(ptr %a23) %t24 = load { ptr, i64, i64 }, ptr %a20 %t25 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t24, ptr %a27 store { ptr, i64, i64 } %t25, ptr %a28 call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) store { ptr, i64, i64 } %t24, ptr %a29 call void @finch_str_drop(ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t30, ptr %a32 store { ptr, i64, i64 } { ptr @.str.2464, i64 34, i64 0 }, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) store { ptr, i64, i64 } %t30, ptr %a34 call void @finch_str_drop(ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a31 call void @finch.gen.fail(ptr %t13, %S.ast.Node %t14, { ptr, i64, i64 } %t35) store { ptr, i64, i64 } %t35, ptr %a36 call void @finch_str_drop(ptr %a36) br label %endif4000 endif4000: %t37 = load ptr, ptr %a1 %t38 = icmp eq ptr %t37, null br i1 %t38, label %panic4001, label %ok4002 panic4001: call void @finch_panic(ptr @.str.2465, i64 1698, ptr @.str.2466) unreachable ok4002: %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 17 %t40 = load i64, ptr %a10 %t41 = load { ptr, i64, i64 }, ptr %t39 %t42 = extractvalue { ptr, i64, i64 } %t41, 1 %t43 = icmp uge i64 %t40, %t42 br i1 %t43, label %range4003, label %inrange4004 range4003: call void @finch_panic_index(ptr @.str.2467, i64 1698, i64 %t40, i64 %t42) unreachable inrange4004: %t44 = extractvalue { ptr, i64, i64 } %t41, 0 %t45 = getelementptr inbounds %S.gen.Template, ptr %t44, i64 %t40 %t46 = load %S.gen.Template, ptr %t45 store %S.gen.Template %t46, ptr %a47 call void @finch.copy.S_gen_Template(ptr %a48, ptr %a47) %t49 = load %S.gen.Template, ptr %a48 store %S.gen.Template %t49, ptr %a50 %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t52 = load i64, ptr %t51 %t53 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 3 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 %t55 = load i64, ptr %t54 %t56 = icmp ne i64 %t52, %t55 br i1 %t56, label %then4005, label %endif4007 then4005: %t57 = load ptr, ptr %a1 %t58 = load %S.ast.Node, ptr %a5 %t59 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t59, ptr %a61 store { ptr, i64, i64 } { ptr @.str.2468, i64 7, i64 0 }, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a60 %t64 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 3 %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i32 0, i32 1 %t66 = load i64, ptr %t65 call void @finch_str_from_int(ptr %a67, i64 %t66) %t68 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t63, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) store { ptr, i64, i64 } %t63, ptr %a72 call void @finch_str_drop(ptr %a72) store { ptr, i64, i64 } %t68, ptr %a73 call void @finch_str_drop(ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t74, ptr %a76 store { ptr, i64, i64 } { ptr @.str.2469, i64 24, i64 0 }, ptr %a77 call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) store { ptr, i64, i64 } %t74, ptr %a78 call void @finch_str_drop(ptr %a78) %t79 = load { ptr, i64, i64 }, ptr %a75 %t80 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t79, ptr %a82 store { ptr, i64, i64 } %t80, ptr %a83 call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) store { ptr, i64, i64 } %t79, ptr %a84 call void @finch_str_drop(ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a81 store { ptr, i64, i64 } %t85, ptr %a87 store { ptr, i64, i64 } { ptr @.str.2470, i64 1, i64 0 }, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) store { ptr, i64, i64 } %t85, ptr %a89 call void @finch_str_drop(ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a86 %t91 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 3 %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2471, i64 2, i64 0 }, ptr %a93 call void @finch_str_join(ptr %a94, ptr %t91, ptr %a93) %t95 = load { ptr, i64, i64 }, ptr %a94 store { ptr, i64, i64 } %t90, ptr %a97 store { ptr, i64, i64 } %t95, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) store { ptr, i64, i64 } %t90, ptr %a99 call void @finch_str_drop(ptr %a99) store { ptr, i64, i64 } %t95, ptr %a100 call void @finch_str_drop(ptr %a100) %t101 = load { ptr, i64, i64 }, ptr %a96 store { ptr, i64, i64 } %t101, ptr %a103 store { ptr, i64, i64 } { ptr @.str.2472, i64 11, i64 0 }, ptr %a104 call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) store { ptr, i64, i64 } %t101, ptr %a105 call void @finch_str_drop(ptr %a105) %t106 = load { ptr, i64, i64 }, ptr %a102 %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t108 = load i64, ptr %t107 call void @finch_str_from_int(ptr %a109, i64 %t108) %t110 = load { ptr, i64, i64 }, ptr %a109 store { ptr, i64, i64 } %t106, ptr %a112 store { ptr, i64, i64 } %t110, ptr %a113 call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) store { ptr, i64, i64 } %t106, ptr %a114 call void @finch_str_drop(ptr %a114) store { ptr, i64, i64 } %t110, ptr %a115 call void @finch_str_drop(ptr %a115) %t116 = load { ptr, i64, i64 }, ptr %a111 call void @finch.gen.fail(ptr %t57, %S.ast.Node %t58, { ptr, i64, i64 } %t116) store { ptr, i64, i64 } %t116, ptr %a117 call void @finch_str_drop(ptr %a117) br label %endif4007 endif4007: %t118 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t118, ptr %a120 store { ptr, i64, i64 } { ptr @.str.2473, i64 1, i64 0 }, ptr %a121 call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) %t122 = load { ptr, i64, i64 }, ptr %a119 %t123 = load { ptr, i64, i64 }, ptr %a4 %t124 = call { ptr, i64, i64 } @finch.gen.shownTypes({ ptr, i64, i64 } %t123) store { ptr, i64, i64 } %t122, ptr %a126 store { ptr, i64, i64 } %t124, ptr %a127 call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) store { ptr, i64, i64 } %t122, ptr %a128 call void @finch_str_drop(ptr %a128) store { ptr, i64, i64 } %t124, ptr %a129 call void @finch_str_drop(ptr %a129) %t130 = load { ptr, i64, i64 }, ptr %a125 store { ptr, i64, i64 } %t130, ptr %a132 store { ptr, i64, i64 } { ptr @.str.2474, i64 1, i64 0 }, ptr %a133 call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) store { ptr, i64, i64 } %t130, ptr %a134 call void @finch_str_drop(ptr %a134) %t135 = load { ptr, i64, i64 }, ptr %a131 store { ptr, i64, i64 } %t135, ptr %a136 %t137 = load ptr, ptr %a1 %t138 = load { ptr, i64, i64 }, ptr %a2 %t139 = load { ptr, i64, i64 }, ptr %a136 %t140 = call i64 @finch.gen.findStruct(ptr %t137, { ptr, i64, i64 } %t138, { ptr, i64, i64 } %t139) %t141 = icmp slt i64 %t140, 0 br i1 %t141, label %then4008, label %endif4010 then4008: %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null br i1 %t143, label %panic4011, label %ok4012 panic4011: call void @finch_panic(ptr @.str.2475, i64 1704, ptr @.str.2476) unreachable ok4012: %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 16 %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 %t146 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t146, ptr %a147 call void @finch_str_copy(ptr %a148, ptr %a147) %t149 = load { ptr, i64, i64 }, ptr %a148 %t150 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } %t149, 0 %t151 = load { ptr, i64, i64 }, ptr %a136 store { ptr, i64, i64 } %t151, ptr %a152 call void @finch_str_copy(ptr %a153, ptr %a152) %t154 = load { ptr, i64, i64 }, ptr %a153 %t155 = insertvalue %S.gen.StructDef %t150, { ptr, i64, i64 } %t154, 1 %t156 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t156, ptr %a157 call void @finch_str_copy(ptr %a158, ptr %a157) %t159 = load { ptr, i64, i64 }, ptr %a158 %t160 = insertvalue %S.gen.StructDef %t155, { ptr, i64, i64 } %t159, 5 %t161 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 3 %t162 = load { ptr, i64, i64 }, ptr %t161 store { ptr, i64, i64 } %t162, ptr %a163 call void @finch.copy.arr_str(ptr %a164, ptr %a163) %t165 = load { ptr, i64, i64 }, ptr %a164 %t166 = insertvalue %S.gen.StructDef %t160, { ptr, i64, i64 } %t165, 6 %t167 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t167, ptr %a168 call void @finch.copy.arr_S_ast_Type(ptr %a169, ptr %a168) %t170 = load { ptr, i64, i64 }, ptr %a169 %t171 = insertvalue %S.gen.StructDef %t166, { ptr, i64, i64 } %t170, 7 %t172 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 4 %t173 = load i64, ptr %t172 %t174 = insertvalue %S.gen.StructDef %t171, i64 %t173, 13 %t175 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 5 %t176 = load i64, ptr %t175 %t177 = insertvalue %S.gen.StructDef %t174, i64 %t176, 14 %t178 = load i64, ptr %t145 %t179 = add i64 %t178, 1 call void @finch_arr_reserve(ptr %t144, i64 %t179, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64)) %t180 = load ptr, ptr %t144 %t181 = getelementptr inbounds %S.gen.StructDef, ptr %t180, i64 %t178 store %S.gen.StructDef %t177, ptr %t181 store i64 %t179, ptr %t145 %t182 = load ptr, ptr %a1 %t183 = load ptr, ptr %a1 %t184 = icmp eq ptr %t183, null br i1 %t184, label %panic4013, label %ok4014 panic4013: call void @finch_panic(ptr @.str.2477, i64 1705, ptr @.str.2478) unreachable ok4014: %t185 = getelementptr inbounds %S.gen.Gen, ptr %t183, i32 0, i32 16 %t186 = getelementptr inbounds { ptr, i64, i64 }, ptr %t185, i32 0, i32 1 %t187 = load i64, ptr %t186 %t188 = sub i64 %t187, 1 call void @finch.gen.resolveStruct(ptr %t182, i64 %t188) br label %endif4010 endif4010: %t189 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.2479, i64 6, i64 0 }, 0 %t190 = load { ptr, i64, i64 }, ptr %a136 store { ptr, i64, i64 } %t190, ptr %a191 call void @finch_str_copy(ptr %a192, ptr %a191) %t193 = load { ptr, i64, i64 }, ptr %a192 %t194 = insertvalue %S.ast.Type %t189, { ptr, i64, i64 } %t193, 2 %t195 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t195, ptr %a196 call void @finch_str_copy(ptr %a197, ptr %a196) %t198 = load { ptr, i64, i64 }, ptr %a197 %t199 = insertvalue %S.ast.Type %t194, { ptr, i64, i64 } %t198, 3 call void @finch_str_drop(ptr %a136) call void @finch.drop.S_gen_Template(ptr %a50) ret %S.ast.Type %t199 } define internal i64 @finch.gen.instFn(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, %S.ast.Node %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a5 = alloca %S.ast.Node, align 16 %a16 = alloca %S.gen.Template, align 16 %a17 = alloca %S.gen.Template, align 16 %a19 = alloca %S.gen.Template, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca i64, align 16 %a61 = alloca i64, align 16 %a84 = alloca %S.ast.Node, align 16 %a85 = alloca %S.ast.Node, align 16 %a87 = alloca %S.ast.Node, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca %S.gen.FnSig, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca %S.ast.Type, align 16 %a327 = alloca %S.ast.Node, align 16 %a328 = alloca %S.ast.Node, align 16 %a330 = alloca %S.ast.Node, align 16 %a335 = alloca i64, align 16 %a357 = alloca %S.ast.Type, align 16 %a361 = alloca %S.ast.Type, align 16 %a362 = alloca %S.ast.Type, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a415 = alloca { ptr, i64, i64 }, align 16 %a416 = alloca { ptr, i64, i64 }, align 16 %a419 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a434 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 %a442 = alloca { ptr, i64, i64 }, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a446 = alloca { ptr, i64, i64 }, align 16 %a452 = alloca %S.gen.FnSig, align 16 %a453 = alloca %S.gen.FnSig, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 store %S.ast.Node %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic4015, label %ok4016 panic4015: call void @finch_panic(ptr @.str.2480, i64 1712, ptr @.str.2481) unreachable ok4016: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 %t9 = load i64, ptr %a2 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 br i1 %t12, label %range4017, label %inrange4018 range4017: call void @finch_panic_index(ptr @.str.2482, i64 1712, i64 %t9, i64 %t11) unreachable inrange4018: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.Template, ptr %t13, i64 %t9 %t15 = load %S.gen.Template, ptr %t14 store %S.gen.Template %t15, ptr %a16 call void @finch.copy.S_gen_Template(ptr %a17, ptr %a16) %t18 = load %S.gen.Template, ptr %a17 store %S.gen.Template %t18, ptr %a19 %t20 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a23 store { ptr, i64, i64 } { ptr @.str.2483, i64 1, i64 0 }, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 %t26 = load { ptr, i64, i64 }, ptr %a3 %t27 = call { ptr, i64, i64 } @finch.gen.shownTypes({ ptr, i64, i64 } %t26) store { ptr, i64, i64 } %t25, ptr %a29 store { ptr, i64, i64 } %t27, ptr %a30 call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) store { ptr, i64, i64 } %t25, ptr %a31 call void @finch_str_drop(ptr %a31) store { ptr, i64, i64 } %t27, ptr %a32 call void @finch_str_drop(ptr %a32) %t33 = load { ptr, i64, i64 }, ptr %a28 store { ptr, i64, i64 } %t33, ptr %a35 store { ptr, i64, i64 } { ptr @.str.2484, i64 1, i64 0 }, ptr %a36 call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) store { ptr, i64, i64 } %t33, ptr %a37 call void @finch_str_drop(ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a34 store { ptr, i64, i64 } %t38, ptr %a39 %t40 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 2 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 %t42 = load i64, ptr %t41 %t43 = icmp sgt i64 %t42, 0 br i1 %t43, label %then4019, label %else4020 then4019: %t44 = load ptr, ptr %a1 %t45 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 %t48 = load { ptr, i64, i64 }, ptr %t47 %t49 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 %t50 = load { ptr, i64, i64 }, ptr %t49 %t51 = call i64 @finch.gen.findMethod(ptr %t44, { ptr, i64, i64 } %t46, { ptr, i64, i64 } %t48, { ptr, i64, i64 } %t50) store i64 %t51, ptr %a52 %t53 = load i64, ptr %a52 %t54 = icmp sge i64 %t53, 0 br i1 %t54, label %then4022, label %endif4024 then4022: %t55 = load i64, ptr %a52 call void @finch_str_drop(ptr %a39) call void @finch.drop.S_gen_Template(ptr %a19) ret i64 %t55 endif4024: br label %endif4021 else4020: %t56 = load ptr, ptr %a1 %t57 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t58 = load { ptr, i64, i64 }, ptr %t57 %t59 = load { ptr, i64, i64 }, ptr %a39 %t60 = call i64 @finch.gen.findFn(ptr %t56, { ptr, i64, i64 } %t58, { ptr, i64, i64 } %t59) store i64 %t60, ptr %a61 %t62 = load i64, ptr %a61 %t63 = icmp sge i64 %t62, 0 br i1 %t63, label %then4025, label %endif4027 then4025: %t64 = load i64, ptr %a61 call void @finch_str_drop(ptr %a39) call void @finch.drop.S_gen_Template(ptr %a19) ret i64 %t64 endif4027: br label %endif4021 endif4021: %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null br i1 %t66, label %panic4028, label %ok4029 panic4028: call void @finch_panic(ptr @.str.2485, i64 1725, ptr @.str.2486) unreachable ok4029: %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 0 %t68 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 %t69 = load i64, ptr %t68 %t70 = load { ptr, i64, i64 }, ptr %t67 %t71 = extractvalue { ptr, i64, i64 } %t70, 1 %t72 = icmp uge i64 %t69, %t71 br i1 %t72, label %range4030, label %inrange4031 range4030: call void @finch_panic_index(ptr @.str.2487, i64 1725, i64 %t69, i64 %t71) unreachable inrange4031: %t73 = extractvalue { ptr, i64, i64 } %t70, 0 %t74 = getelementptr inbounds %S.ast.Program, ptr %t73, i64 %t69 %t75 = getelementptr inbounds %S.ast.Program, ptr %t74, i32 0, i32 8 %t76 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 5 %t77 = load i64, ptr %t76 %t78 = load { ptr, i64, i64 }, ptr %t75 %t79 = extractvalue { ptr, i64, i64 } %t78, 1 %t80 = icmp uge i64 %t77, %t79 br i1 %t80, label %range4032, label %inrange4033 range4032: call void @finch_panic_index(ptr @.str.2488, i64 1725, i64 %t77, i64 %t79) unreachable inrange4033: %t81 = extractvalue { ptr, i64, i64 } %t78, 0 %t82 = getelementptr inbounds %S.ast.Node, ptr %t81, i64 %t77 %t83 = load %S.ast.Node, ptr %t82 store %S.ast.Node %t83, ptr %a84 call void @finch.copy.S_ast_Node(ptr %a85, ptr %a84) %t86 = load %S.ast.Node, ptr %a85 store %S.ast.Node %t86, ptr %a87 %t88 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t89 = load { ptr, i64, i64 }, ptr %t88 store { ptr, i64, i64 } %t89, ptr %a90 call void @finch_str_copy(ptr %a91, ptr %a90) %t92 = load { ptr, i64, i64 }, ptr %a91 %t93 = insertvalue %S.gen.FnSig zeroinitializer, { ptr, i64, i64 } %t92, 0 %t94 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t94, ptr %a95 call void @finch_str_copy(ptr %a96, ptr %a95) %t97 = load { ptr, i64, i64 }, ptr %a96 %t98 = insertvalue %S.gen.FnSig %t93, { ptr, i64, i64 } %t97, 1 %t99 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t100 = load { ptr, i64, i64 }, ptr %t99 store { ptr, i64, i64 } %t100, ptr %a101 call void @finch_str_copy(ptr %a102, ptr %a101) %t103 = load { ptr, i64, i64 }, ptr %a102 %t104 = insertvalue %S.gen.FnSig %t98, { ptr, i64, i64 } %t103, 3 %t105 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t106 = load { ptr, i64, i64 }, ptr %t105 store { ptr, i64, i64 } %t106, ptr %a107 call void @finch.copy.arr_str(ptr %a108, ptr %a107) %t109 = load { ptr, i64, i64 }, ptr %a108 %t110 = insertvalue %S.gen.FnSig %t104, { ptr, i64, i64 } %t109, 6 %t111 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t111, ptr %a112 call void @finch.copy.arr_S_ast_Type(ptr %a113, ptr %a112) %t114 = load { ptr, i64, i64 }, ptr %a113 %t115 = insertvalue %S.gen.FnSig %t110, { ptr, i64, i64 } %t114, 7 %t116 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t116, ptr %a117 call void @finch_str_copy(ptr %a118, ptr %a117) %t119 = load { ptr, i64, i64 }, ptr %a118 %t120 = insertvalue %S.gen.FnSig %t115, { ptr, i64, i64 } %t119, 8 %t121 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 7 %t122 = load i1, ptr %t121 %t123 = insertvalue %S.gen.FnSig %t120, i1 %t122, 9 %t124 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 7 %t125 = load i1, ptr %t124 %t126 = insertvalue %S.gen.FnSig %t123, i1 %t125, 10 %t127 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 %t128 = load i64, ptr %t127 %t129 = insertvalue %S.gen.FnSig %t126, i64 %t128, 16 %t130 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 5 %t131 = load i64, ptr %t130 %t132 = insertvalue %S.gen.FnSig %t129, i64 %t131, 17 store %S.gen.FnSig %t132, ptr %a133 %t134 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t135 = load { ptr, i64, i64 }, ptr %t134 %t136 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t135) store { ptr, i64, i64 } { ptr @.str.2489, i64 7, i64 0 }, ptr %a138 store { ptr, i64, i64 } %t136, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) store { ptr, i64, i64 } %t136, ptr %a140 call void @finch_str_drop(ptr %a140) %t141 = load { ptr, i64, i64 }, ptr %a137 store { ptr, i64, i64 } %t141, ptr %a143 store { ptr, i64, i64 } { ptr @.str.2490, i64 1, i64 0 }, ptr %a144 call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) store { ptr, i64, i64 } %t141, ptr %a145 call void @finch_str_drop(ptr %a145) %t146 = load { ptr, i64, i64 }, ptr %a142 %t147 = load { ptr, i64, i64 }, ptr %a39 %t148 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t147) store { ptr, i64, i64 } %t146, ptr %a150 store { ptr, i64, i64 } %t148, ptr %a151 call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) store { ptr, i64, i64 } %t146, ptr %a152 call void @finch_str_drop(ptr %a152) store { ptr, i64, i64 } %t148, ptr %a153 call void @finch_str_drop(ptr %a153) %t154 = load { ptr, i64, i64 }, ptr %a149 %t155 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 11 %t156 = load { ptr, i64, i64 }, ptr %t155 store { ptr, i64, i64 } %t154, ptr %t155 store { ptr, i64, i64 } %t156, ptr %a157 call void @finch_str_drop(ptr %a157) %t158 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 2 %t159 = getelementptr inbounds { ptr, i64, i64 }, ptr %t158, i32 0, i32 1 %t160 = load i64, ptr %t159 %t161 = icmp sgt i64 %t160, 0 br i1 %t161, label %then4034, label %endif4036 then4034: %t162 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 %t163 = load { ptr, i64, i64 }, ptr %t162 %t164 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 1 store { ptr, i64, i64 } %t163, ptr %a165 call void @finch_str_copy(ptr %a166, ptr %a165) %t167 = load { ptr, i64, i64 }, ptr %a166 %t168 = load { ptr, i64, i64 }, ptr %t164 store { ptr, i64, i64 } %t167, ptr %t164 store { ptr, i64, i64 } %t168, ptr %a169 call void @finch_str_drop(ptr %a169) %t170 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 %t171 = load { ptr, i64, i64 }, ptr %t170 %t172 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 2 store { ptr, i64, i64 } %t171, ptr %a173 call void @finch_str_copy(ptr %a174, ptr %a173) %t175 = load { ptr, i64, i64 }, ptr %a174 %t176 = load { ptr, i64, i64 }, ptr %t172 store { ptr, i64, i64 } %t175, ptr %t172 store { ptr, i64, i64 } %t176, ptr %a177 call void @finch_str_drop(ptr %a177) %t178 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 %t179 = load { ptr, i64, i64 }, ptr %t178 store { ptr, i64, i64 } %t179, ptr %a181 store { ptr, i64, i64 } { ptr @.str.2491, i64 1, i64 0 }, ptr %a182 call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) %t183 = load { ptr, i64, i64 }, ptr %a180 %t184 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 %t185 = load { ptr, i64, i64 }, ptr %t184 store { ptr, i64, i64 } %t183, ptr %a187 store { ptr, i64, i64 } %t185, ptr %a188 call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) store { ptr, i64, i64 } %t183, ptr %a189 call void @finch_str_drop(ptr %a189) %t190 = load { ptr, i64, i64 }, ptr %a186 %t191 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 8 %t192 = load { ptr, i64, i64 }, ptr %t191 store { ptr, i64, i64 } %t190, ptr %t191 store { ptr, i64, i64 } %t192, ptr %a193 call void @finch_str_drop(ptr %a193) %t194 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t195 = load { ptr, i64, i64 }, ptr %t194 %t196 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t195) store { ptr, i64, i64 } { ptr @.str.2492, i64 7, i64 0 }, ptr %a198 store { ptr, i64, i64 } %t196, ptr %a199 call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199) store { ptr, i64, i64 } %t196, ptr %a200 call void @finch_str_drop(ptr %a200) %t201 = load { ptr, i64, i64 }, ptr %a197 store { ptr, i64, i64 } %t201, ptr %a203 store { ptr, i64, i64 } { ptr @.str.2493, i64 1, i64 0 }, ptr %a204 call void @finch_str_concat(ptr %a202, ptr %a203, ptr %a204) store { ptr, i64, i64 } %t201, ptr %a205 call void @finch_str_drop(ptr %a205) %t206 = load { ptr, i64, i64 }, ptr %a202 %t207 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 %t208 = load { ptr, i64, i64 }, ptr %t207 %t209 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t208) store { ptr, i64, i64 } %t206, ptr %a211 store { ptr, i64, i64 } %t209, ptr %a212 call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) store { ptr, i64, i64 } %t206, ptr %a213 call void @finch_str_drop(ptr %a213) store { ptr, i64, i64 } %t209, ptr %a214 call void @finch_str_drop(ptr %a214) %t215 = load { ptr, i64, i64 }, ptr %a210 store { ptr, i64, i64 } %t215, ptr %a217 store { ptr, i64, i64 } { ptr @.str.2494, i64 1, i64 0 }, ptr %a218 call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) store { ptr, i64, i64 } %t215, ptr %a219 call void @finch_str_drop(ptr %a219) %t220 = load { ptr, i64, i64 }, ptr %a216 %t221 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 %t222 = load { ptr, i64, i64 }, ptr %t221 store { ptr, i64, i64 } %t220, ptr %a224 store { ptr, i64, i64 } %t222, ptr %a225 call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) store { ptr, i64, i64 } %t220, ptr %a226 call void @finch_str_drop(ptr %a226) %t227 = load { ptr, i64, i64 }, ptr %a223 %t228 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 11 %t229 = load { ptr, i64, i64 }, ptr %t228 store { ptr, i64, i64 } %t227, ptr %t228 store { ptr, i64, i64 } %t229, ptr %a230 call void @finch_str_drop(ptr %a230) br label %endif4036 endif4036: %t231 = load ptr, ptr %a1 %t232 = icmp eq ptr %t231, null br i1 %t232, label %panic4037, label %ok4038 panic4037: call void @finch_panic(ptr @.str.2495, i64 1734, ptr @.str.2496) unreachable ok4038: %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 18 %t234 = load { ptr, i64, i64 }, ptr %t233 store { ptr, i64, i64 } %t234, ptr %a235 call void @finch.copy.arr_str(ptr %a236, ptr %a235) %t237 = load { ptr, i64, i64 }, ptr %a236 store { ptr, i64, i64 } %t237, ptr %a238 %t239 = load ptr, ptr %a1 %t240 = icmp eq ptr %t239, null br i1 %t240, label %panic4039, label %ok4040 panic4039: call void @finch_panic(ptr @.str.2497, i64 1735, ptr @.str.2498) unreachable ok4040: %t241 = getelementptr inbounds %S.gen.Gen, ptr %t239, i32 0, i32 19 %t242 = load { ptr, i64, i64 }, ptr %t241 store { ptr, i64, i64 } %t242, ptr %a243 call void @finch.copy.arr_S_ast_Type(ptr %a244, ptr %a243) %t245 = load { ptr, i64, i64 }, ptr %a244 store { ptr, i64, i64 } %t245, ptr %a246 %t247 = load ptr, ptr %a1 %t248 = icmp eq ptr %t247, null br i1 %t248, label %panic4041, label %ok4042 panic4041: call void @finch_panic(ptr @.str.2499, i64 1736, ptr @.str.2500) unreachable ok4042: %t249 = getelementptr inbounds %S.gen.Gen, ptr %t247, i32 0, i32 14 %t250 = load { ptr, i64, i64 }, ptr %t249 store { ptr, i64, i64 } %t250, ptr %a251 call void @finch_str_copy(ptr %a252, ptr %a251) %t253 = load { ptr, i64, i64 }, ptr %a252 store { ptr, i64, i64 } %t253, ptr %a254 %t255 = load ptr, ptr %a1 %t256 = icmp eq ptr %t255, null br i1 %t256, label %panic4043, label %ok4044 panic4043: call void @finch_panic(ptr @.str.2501, i64 1737, ptr @.str.2502) unreachable ok4044: %t257 = getelementptr inbounds %S.gen.Gen, ptr %t255, i32 0, i32 20 %t258 = load { ptr, i64, i64 }, ptr %t257 store { ptr, i64, i64 } %t258, ptr %a259 call void @finch_str_copy(ptr %a260, ptr %a259) %t261 = load { ptr, i64, i64 }, ptr %a260 store { ptr, i64, i64 } %t261, ptr %a262 %t263 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t264 = load { ptr, i64, i64 }, ptr %t263 %t265 = load ptr, ptr %a1 %t266 = icmp eq ptr %t265, null br i1 %t266, label %panic4045, label %ok4046 panic4045: call void @finch_panic(ptr @.str.2503, i64 1738, ptr @.str.2504) unreachable ok4046: %t267 = getelementptr inbounds %S.gen.Gen, ptr %t265, i32 0, i32 18 store { ptr, i64, i64 } %t264, ptr %a268 call void @finch.copy.arr_str(ptr %a269, ptr %a268) %t270 = load { ptr, i64, i64 }, ptr %a269 %t271 = load { ptr, i64, i64 }, ptr %t267 store { ptr, i64, i64 } %t270, ptr %t267 store { ptr, i64, i64 } %t271, ptr %a272 call void @finch.drop.arr_str(ptr %a272) %t273 = load { ptr, i64, i64 }, ptr %a3 %t274 = load ptr, ptr %a1 %t275 = icmp eq ptr %t274, null br i1 %t275, label %panic4047, label %ok4048 panic4047: call void @finch_panic(ptr @.str.2505, i64 1739, ptr @.str.2506) unreachable ok4048: %t276 = getelementptr inbounds %S.gen.Gen, ptr %t274, i32 0, i32 19 store { ptr, i64, i64 } %t273, ptr %a277 call void @finch.copy.arr_S_ast_Type(ptr %a278, ptr %a277) %t279 = load { ptr, i64, i64 }, ptr %a278 %t280 = load { ptr, i64, i64 }, ptr %t276 store { ptr, i64, i64 } %t279, ptr %t276 store { ptr, i64, i64 } %t280, ptr %a281 call void @finch.drop.arr_S_ast_Type(ptr %a281) %t282 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t283 = load { ptr, i64, i64 }, ptr %t282 %t284 = load ptr, ptr %a1 %t285 = icmp eq ptr %t284, null br i1 %t285, label %panic4049, label %ok4050 panic4049: call void @finch_panic(ptr @.str.2507, i64 1740, ptr @.str.2508) unreachable ok4050: %t286 = getelementptr inbounds %S.gen.Gen, ptr %t284, i32 0, i32 14 store { ptr, i64, i64 } %t283, ptr %a287 call void @finch_str_copy(ptr %a288, ptr %a287) %t289 = load { ptr, i64, i64 }, ptr %a288 %t290 = load { ptr, i64, i64 }, ptr %t286 store { ptr, i64, i64 } %t289, ptr %t286 store { ptr, i64, i64 } %t290, ptr %a291 call void @finch_str_drop(ptr %a291) %t292 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 8 %t293 = load { ptr, i64, i64 }, ptr %t292 store { ptr, i64, i64 } { ptr @.str.2509, i64 17, i64 0 }, ptr %a295 store { ptr, i64, i64 } %t293, ptr %a296 call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296) %t297 = load { ptr, i64, i64 }, ptr %a294 store { ptr, i64, i64 } %t297, ptr %a299 store { ptr, i64, i64 } { ptr @.str.2510, i64 1, i64 0 }, ptr %a300 call void @finch_str_concat(ptr %a298, ptr %a299, ptr %a300) store { ptr, i64, i64 } %t297, ptr %a301 call void @finch_str_drop(ptr %a301) %t302 = load { ptr, i64, i64 }, ptr %a298 %t303 = load ptr, ptr %a1 %t304 = icmp eq ptr %t303, null br i1 %t304, label %panic4051, label %ok4052 panic4051: call void @finch_panic(ptr @.str.2511, i64 1741, ptr @.str.2512) unreachable ok4052: %t305 = getelementptr inbounds %S.gen.Gen, ptr %t303, i32 0, i32 20 %t306 = load { ptr, i64, i64 }, ptr %t305 store { ptr, i64, i64 } %t302, ptr %t305 store { ptr, i64, i64 } %t306, ptr %a307 call void @finch_str_drop(ptr %a307) %t308 = load ptr, ptr %a1 %t309 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 5 %t310 = load %S.ast.Type, ptr %t309 %t311 = load %S.ast.Node, ptr %a87 %t312 = call %S.ast.Type @finch.gen.resolve(ptr %t308, %S.ast.Type %t310, %S.ast.Node %t311) %t313 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 12 %t314 = load %S.ast.Type, ptr %t313 store %S.ast.Type %t312, ptr %t313 store %S.ast.Type %t314, ptr %a315 call void @finch.drop.S_ast_Type(ptr %a315) %t316 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 %t317 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t317, i32 0, i32 1 %t319 = load i64, ptr %t318 %t320 = sub i64 %t319, 1 %t321 = load { ptr, i64, i64 }, ptr %t316 %t322 = extractvalue { ptr, i64, i64 } %t321, 1 %t323 = icmp uge i64 %t320, %t322 br i1 %t323, label %range4053, label %inrange4054 range4053: call void @finch_panic_index(ptr @.str.2513, i64 1743, i64 %t320, i64 %t322) unreachable inrange4054: %t324 = extractvalue { ptr, i64, i64 } %t321, 0 %t325 = getelementptr inbounds %S.ast.Node, ptr %t324, i64 %t320 %t326 = load %S.ast.Node, ptr %t325 store %S.ast.Node %t326, ptr %a327 call void @finch.copy.S_ast_Node(ptr %a328, ptr %a327) %t329 = load %S.ast.Node, ptr %a328 store %S.ast.Node %t329, ptr %a330 %t331 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i32 0, i32 1 %t333 = load i64, ptr %t332 %t334 = sub i64 %t333, 1 store i64 0, ptr %a335 br label %for.cond4055 for.cond4055: %t336 = load i64, ptr %a335 %t337 = icmp slt i64 %t336, %t334 br i1 %t337, label %for.body4056, label %for.end4058 for.body4056: %t338 = load ptr, ptr %a1 %t339 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 %t340 = load i64, ptr %a335 %t341 = load { ptr, i64, i64 }, ptr %t339 %t342 = extractvalue { ptr, i64, i64 } %t341, 1 %t343 = icmp uge i64 %t340, %t342 br i1 %t343, label %range4059, label %inrange4060 range4059: call void @finch_panic_index(ptr @.str.2514, i64 1745, i64 %t340, i64 %t342) unreachable inrange4060: %t344 = extractvalue { ptr, i64, i64 } %t341, 0 %t345 = getelementptr inbounds %S.ast.Node, ptr %t344, i64 %t340 %t346 = getelementptr inbounds %S.ast.Node, ptr %t345, i32 0, i32 5 %t347 = load %S.ast.Type, ptr %t346 %t348 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 %t349 = load i64, ptr %a335 %t350 = load { ptr, i64, i64 }, ptr %t348 %t351 = extractvalue { ptr, i64, i64 } %t350, 1 %t352 = icmp uge i64 %t349, %t351 br i1 %t352, label %range4061, label %inrange4062 range4061: call void @finch_panic_index(ptr @.str.2515, i64 1745, i64 %t349, i64 %t351) unreachable inrange4062: %t353 = extractvalue { ptr, i64, i64 } %t350, 0 %t354 = getelementptr inbounds %S.ast.Node, ptr %t353, i64 %t349 %t355 = load %S.ast.Node, ptr %t354 %t356 = call %S.ast.Type @finch.gen.resolve(ptr %t338, %S.ast.Type %t347, %S.ast.Node %t355) store %S.ast.Type %t356, ptr %a357 %t358 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 13 %t359 = getelementptr inbounds { ptr, i64, i64 }, ptr %t358, i32 0, i32 1 %t360 = load %S.ast.Type, ptr %a357 store %S.ast.Type %t360, ptr %a361 call void @finch.copy.S_ast_Type(ptr %a362, ptr %a361) %t363 = load %S.ast.Type, ptr %a362 %t364 = load i64, ptr %t359 %t365 = add i64 %t364, 1 call void @finch_arr_reserve(ptr %t358, i64 %t365, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t366 = load ptr, ptr %t358 %t367 = getelementptr inbounds %S.ast.Type, ptr %t366, i64 %t364 store %S.ast.Type %t363, ptr %t367 store i64 %t365, ptr %t359 %t368 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 14 %t369 = getelementptr inbounds { ptr, i64, i64 }, ptr %t368, i32 0, i32 1 %t370 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 %t371 = load i64, ptr %a335 %t372 = load { ptr, i64, i64 }, ptr %t370 %t373 = extractvalue { ptr, i64, i64 } %t372, 1 %t374 = icmp uge i64 %t371, %t373 br i1 %t374, label %range4063, label %inrange4064 range4063: call void @finch_panic_index(ptr @.str.2516, i64 1747, i64 %t371, i64 %t373) unreachable inrange4064: %t375 = extractvalue { ptr, i64, i64 } %t372, 0 %t376 = getelementptr inbounds %S.ast.Node, ptr %t375, i64 %t371 %t377 = getelementptr inbounds %S.ast.Node, ptr %t376, i32 0, i32 1 %t378 = load { ptr, i64, i64 }, ptr %t377 store { ptr, i64, i64 } %t378, ptr %a379 call void @finch_str_copy(ptr %a380, ptr %a379) %t381 = load { ptr, i64, i64 }, ptr %a380 %t382 = load i64, ptr %t369 %t383 = add i64 %t382, 1 call void @finch_arr_reserve(ptr %t368, i64 %t383, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t384 = load ptr, ptr %t368 %t385 = getelementptr inbounds { ptr, i64, i64 }, ptr %t384, i64 %t382 store { ptr, i64, i64 } %t381, ptr %t385 store i64 %t383, ptr %t369 %t386 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 15 %t387 = getelementptr inbounds { ptr, i64, i64 }, ptr %t386, i32 0, i32 1 %t388 = load ptr, ptr %a1 %t389 = load %S.ast.Type, ptr %a357 %t390 = call i1 @finch.gen.owning(ptr %t388, %S.ast.Type %t389) br label %logic.from4065 logic.from4065: br i1 %t390, label %logic.rhs4066, label %logic.end4067 logic.rhs4066: %t391 = load ptr, ptr %a1 %t392 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 %t393 = load i64, ptr %a335 %t394 = load { ptr, i64, i64 }, ptr %t392 %t395 = extractvalue { ptr, i64, i64 } %t394, 1 %t396 = icmp uge i64 %t393, %t395 br i1 %t396, label %range4068, label %inrange4069 range4068: call void @finch_panic_index(ptr @.str.2517, i64 1748, i64 %t393, i64 %t395) unreachable inrange4069: %t397 = extractvalue { ptr, i64, i64 } %t394, 0 %t398 = getelementptr inbounds %S.ast.Node, ptr %t397, i64 %t393 %t399 = getelementptr inbounds %S.ast.Node, ptr %t398, i32 0, i32 1 %t400 = load { ptr, i64, i64 }, ptr %t399 %t401 = load %S.ast.Node, ptr %a330 %t402 = call i1 @finch.gen.mutates(ptr %t391, { ptr, i64, i64 } %t400, %S.ast.Node %t401) %t403 = xor i1 %t402, true br label %logic.rend4070 logic.rend4070: br label %logic.end4067 logic.end4067: %t404 = phi i1 [ false, %logic.from4065 ], [ %t403, %logic.rend4070 ] %t405 = load i64, ptr %t387 %t406 = add i64 %t405, 1 call void @finch_arr_reserve(ptr %t386, i64 %t406, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) %t407 = load ptr, ptr %t386 %t408 = getelementptr inbounds i1, ptr %t407, i64 %t405 store i1 %t404, ptr %t408 store i64 %t406, ptr %t387 call void @finch.drop.S_ast_Type(ptr %a357) br label %for.step4057 for.step4057: %t409 = load i64, ptr %a335 %t410 = add i64 %t409, 1 store i64 %t410, ptr %a335 br label %for.cond4055 for.end4058: %t411 = load { ptr, i64, i64 }, ptr %a238 %t412 = load ptr, ptr %a1 %t413 = icmp eq ptr %t412, null br i1 %t413, label %panic4071, label %ok4072 panic4071: call void @finch_panic(ptr @.str.2518, i64 1750, ptr @.str.2519) unreachable ok4072: %t414 = getelementptr inbounds %S.gen.Gen, ptr %t412, i32 0, i32 18 store { ptr, i64, i64 } %t411, ptr %a415 call void @finch.copy.arr_str(ptr %a416, ptr %a415) %t417 = load { ptr, i64, i64 }, ptr %a416 %t418 = load { ptr, i64, i64 }, ptr %t414 store { ptr, i64, i64 } %t417, ptr %t414 store { ptr, i64, i64 } %t418, ptr %a419 call void @finch.drop.arr_str(ptr %a419) %t420 = load { ptr, i64, i64 }, ptr %a246 %t421 = load ptr, ptr %a1 %t422 = icmp eq ptr %t421, null br i1 %t422, label %panic4073, label %ok4074 panic4073: call void @finch_panic(ptr @.str.2520, i64 1751, ptr @.str.2521) unreachable ok4074: %t423 = getelementptr inbounds %S.gen.Gen, ptr %t421, i32 0, i32 19 store { ptr, i64, i64 } %t420, ptr %a424 call void @finch.copy.arr_S_ast_Type(ptr %a425, ptr %a424) %t426 = load { ptr, i64, i64 }, ptr %a425 %t427 = load { ptr, i64, i64 }, ptr %t423 store { ptr, i64, i64 } %t426, ptr %t423 store { ptr, i64, i64 } %t427, ptr %a428 call void @finch.drop.arr_S_ast_Type(ptr %a428) %t429 = load { ptr, i64, i64 }, ptr %a254 %t430 = load ptr, ptr %a1 %t431 = icmp eq ptr %t430, null br i1 %t431, label %panic4075, label %ok4076 panic4075: call void @finch_panic(ptr @.str.2522, i64 1752, ptr @.str.2523) unreachable ok4076: %t432 = getelementptr inbounds %S.gen.Gen, ptr %t430, i32 0, i32 14 store { ptr, i64, i64 } %t429, ptr %a433 call void @finch_str_copy(ptr %a434, ptr %a433) %t435 = load { ptr, i64, i64 }, ptr %a434 %t436 = load { ptr, i64, i64 }, ptr %t432 store { ptr, i64, i64 } %t435, ptr %t432 store { ptr, i64, i64 } %t436, ptr %a437 call void @finch_str_drop(ptr %a437) %t438 = load { ptr, i64, i64 }, ptr %a262 %t439 = load ptr, ptr %a1 %t440 = icmp eq ptr %t439, null br i1 %t440, label %panic4077, label %ok4078 panic4077: call void @finch_panic(ptr @.str.2524, i64 1753, ptr @.str.2525) unreachable ok4078: %t441 = getelementptr inbounds %S.gen.Gen, ptr %t439, i32 0, i32 20 store { ptr, i64, i64 } %t438, ptr %a442 call void @finch_str_copy(ptr %a443, ptr %a442) %t444 = load { ptr, i64, i64 }, ptr %a443 %t445 = load { ptr, i64, i64 }, ptr %t441 store { ptr, i64, i64 } %t444, ptr %t441 store { ptr, i64, i64 } %t445, ptr %a446 call void @finch_str_drop(ptr %a446) %t447 = load ptr, ptr %a1 %t448 = icmp eq ptr %t447, null br i1 %t448, label %panic4079, label %ok4080 panic4079: call void @finch_panic(ptr @.str.2526, i64 1754, ptr @.str.2527) unreachable ok4080: %t449 = getelementptr inbounds %S.gen.Gen, ptr %t447, i32 0, i32 15 %t450 = getelementptr inbounds { ptr, i64, i64 }, ptr %t449, i32 0, i32 1 %t451 = load %S.gen.FnSig, ptr %a133 store %S.gen.FnSig %t451, ptr %a452 call void @finch.copy.S_gen_FnSig(ptr %a453, ptr %a452) %t454 = load %S.gen.FnSig, ptr %a453 %t455 = load i64, ptr %t450 %t456 = add i64 %t455, 1 call void @finch_arr_reserve(ptr %t449, i64 %t456, i64 ptrtoint (ptr getelementptr (%S.gen.FnSig, ptr null, i32 1) to i64)) %t457 = load ptr, ptr %t449 %t458 = getelementptr inbounds %S.gen.FnSig, ptr %t457, i64 %t455 store %S.gen.FnSig %t454, ptr %t458 store i64 %t456, ptr %t450 %t459 = load ptr, ptr %a1 %t460 = icmp eq ptr %t459, null br i1 %t460, label %panic4081, label %ok4082 panic4081: call void @finch_panic(ptr @.str.2528, i64 1755, ptr @.str.2529) unreachable ok4082: %t461 = getelementptr inbounds %S.gen.Gen, ptr %t459, i32 0, i32 15 %t462 = getelementptr inbounds { ptr, i64, i64 }, ptr %t461, i32 0, i32 1 %t463 = load i64, ptr %t462 %t464 = sub i64 %t463, 1 call void @finch.drop.S_ast_Node(ptr %a330) call void @finch_str_drop(ptr %a262) call void @finch_str_drop(ptr %a254) call void @finch.drop.arr_S_ast_Type(ptr %a246) call void @finch.drop.arr_str(ptr %a238) call void @finch.drop.S_gen_FnSig(ptr %a133) call void @finch.drop.S_ast_Node(ptr %a87) call void @finch_str_drop(ptr %a39) call void @finch.drop.S_gen_Template(ptr %a19) ret i64 %t464 } define internal void @finch.gen.bindType(ptr %p0, %S.ast.Type %p1, %S.ast.Type %p2, { ptr, i64, i64 } %p3, ptr %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca ptr, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca i64, align 16 %a28 = alloca i64, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca i64, align 16 %a47 = alloca i64, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca i64, align 16 %a80 = alloca %S.ast.Type, align 16 %a81 = alloca %S.ast.Type, align 16 %a84 = alloca %S.ast.Type, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca %S.gen.StructDef, align 16 %a231 = alloca %S.gen.StructDef, align 16 %a233 = alloca %S.gen.StructDef, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca i64, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 store ptr %p4, ptr %a5 %t6 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t7 = load { ptr, i64, i64 }, ptr %t6 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.2530, i64 5, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 br label %logic.from4083 logic.from4083: br i1 %t11, label %logic.rhs4084, label %logic.end4085 logic.rhs4084: %t12 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp eq i64 %t14, 0 br label %logic.rend4086 logic.rend4086: br label %logic.end4085 logic.end4085: %t16 = phi i1 [ false, %logic.from4083 ], [ %t15, %logic.rend4086 ] br label %logic.from4087 logic.from4087: br i1 %t16, label %logic.rhs4088, label %logic.end4089 logic.rhs4088: %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load i64, ptr %t18 %t20 = icmp eq i64 %t19, 0 br label %logic.rend4090 logic.rend4090: br label %logic.end4089 logic.end4089: %t21 = phi i1 [ false, %logic.from4087 ], [ %t20, %logic.rend4090 ] br label %logic.from4091 logic.from4091: br i1 %t21, label %logic.rhs4092, label %logic.end4093 logic.rhs4092: %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t24 = load { ptr, i64, i64 }, ptr %t23 store i64 -1, ptr %a25 %t26 = load i64, ptr %t22 %t27 = load ptr, ptr %a4 store i64 0, ptr %a28 br label %find.cond4094 find.cond4094: %t29 = load i64, ptr %a28 %t30 = icmp slt i64 %t29, %t26 br i1 %t30, label %find.body4095, label %find.end4098 find.body4095: %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t27, i64 %t29 %t32 = load { ptr, i64, i64 }, ptr %t31 store { ptr, i64, i64 } %t32, ptr %a33 store { ptr, i64, i64 } %t24, ptr %a34 %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) %t36 = icmp ne i32 %t35, 0 br i1 %t36, label %find.hit4096, label %find.next4097 find.hit4096: store i64 %t29, ptr %a25 br label %find.end4098 find.next4097: %t37 = add i64 %t29, 1 store i64 %t37, ptr %a28 br label %find.cond4094 find.end4098: %t38 = load i64, ptr %a25 %t39 = icmp sge i64 %t38, 0 br label %logic.rend4099 logic.rend4099: br label %logic.end4093 logic.end4093: %t40 = phi i1 [ false, %logic.from4091 ], [ %t39, %logic.rend4099 ] br i1 %t40, label %then4100, label %endif4102 then4100: %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t42 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t43 = load { ptr, i64, i64 }, ptr %t42 store i64 -1, ptr %a44 %t45 = load i64, ptr %t41 %t46 = load ptr, ptr %a4 store i64 0, ptr %a47 br label %find.cond4103 find.cond4103: %t48 = load i64, ptr %a47 %t49 = icmp slt i64 %t48, %t45 br i1 %t49, label %find.body4104, label %find.end4107 find.body4104: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t48 %t51 = load { ptr, i64, i64 }, ptr %t50 store { ptr, i64, i64 } %t51, ptr %a52 store { ptr, i64, i64 } %t43, ptr %a53 %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) %t55 = icmp ne i32 %t54, 0 br i1 %t55, label %find.hit4105, label %find.next4106 find.hit4105: store i64 %t48, ptr %a44 br label %find.end4107 find.next4106: %t56 = add i64 %t48, 1 store i64 %t56, ptr %a47 br label %find.cond4103 find.end4107: %t57 = load i64, ptr %a44 store i64 %t57, ptr %a58 %t59 = load ptr, ptr %a5 %t60 = icmp eq ptr %t59, null br i1 %t60, label %panic4108, label %ok4109 panic4108: call void @finch_panic(ptr @.str.2531, i64 1762, ptr @.str.2532) unreachable ok4109: %t61 = getelementptr inbounds %S.gen.Binds, ptr %t59, i32 0, i32 1 %t62 = load i64, ptr %a58 %t63 = load { ptr, i64, i64 }, ptr %t61 %t64 = extractvalue { ptr, i64, i64 } %t63, 1 %t65 = icmp uge i64 %t62, %t64 br i1 %t65, label %range4110, label %inrange4111 range4110: call void @finch_panic_index(ptr @.str.2533, i64 1762, i64 %t62, i64 %t64) unreachable inrange4111: %t66 = extractvalue { ptr, i64, i64 } %t63, 0 %t67 = getelementptr inbounds i1, ptr %t66, i64 %t62 %t68 = load i1, ptr %t67 %t69 = xor i1 %t68, true br i1 %t69, label %then4112, label %endif4114 then4112: %t70 = load %S.ast.Type, ptr %a3 %t71 = load ptr, ptr %a5 %t72 = icmp eq ptr %t71, null br i1 %t72, label %panic4115, label %ok4116 panic4115: call void @finch_panic(ptr @.str.2534, i64 1763, ptr @.str.2535) unreachable ok4116: %t73 = getelementptr inbounds %S.gen.Binds, ptr %t71, i32 0, i32 0 %t74 = load i64, ptr %a58 %t75 = load { ptr, i64, i64 }, ptr %t73 %t76 = extractvalue { ptr, i64, i64 } %t75, 1 %t77 = icmp uge i64 %t74, %t76 br i1 %t77, label %range4117, label %inrange4118 range4117: call void @finch_panic_index(ptr @.str.2536, i64 1763, i64 %t74, i64 %t76) unreachable inrange4118: %t78 = extractvalue { ptr, i64, i64 } %t75, 0 %t79 = getelementptr inbounds %S.ast.Type, ptr %t78, i64 %t74 store %S.ast.Type %t70, ptr %a80 call void @finch.copy.S_ast_Type(ptr %a81, ptr %a80) %t82 = load %S.ast.Type, ptr %a81 %t83 = load %S.ast.Type, ptr %t79 store %S.ast.Type %t82, ptr %t79 store %S.ast.Type %t83, ptr %a84 call void @finch.drop.S_ast_Type(ptr %a84) %t85 = load ptr, ptr %a5 %t86 = icmp eq ptr %t85, null br i1 %t86, label %panic4119, label %ok4120 panic4119: call void @finch_panic(ptr @.str.2537, i64 1764, ptr @.str.2538) unreachable ok4120: %t87 = getelementptr inbounds %S.gen.Binds, ptr %t85, i32 0, i32 1 %t88 = load i64, ptr %a58 %t89 = load { ptr, i64, i64 }, ptr %t87 %t90 = extractvalue { ptr, i64, i64 } %t89, 1 %t91 = icmp uge i64 %t88, %t90 br i1 %t91, label %range4121, label %inrange4122 range4121: call void @finch_panic_index(ptr @.str.2539, i64 1764, i64 %t88, i64 %t90) unreachable inrange4122: %t92 = extractvalue { ptr, i64, i64 } %t89, 0 %t93 = getelementptr inbounds i1, ptr %t92, i64 %t88 store i1 true, ptr %t93 br label %endif4114 endif4114: ret void endif4102: %t94 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t95 = load { ptr, i64, i64 }, ptr %t94 store { ptr, i64, i64 } %t95, ptr %a96 store { ptr, i64, i64 } { ptr @.str.2540, i64 5, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) %t99 = icmp ne i32 %t98, 0 br label %logic.from4123 logic.from4123: br i1 %t99, label %logic.end4125, label %logic.rhs4124 logic.rhs4124: %t100 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t101 = load { ptr, i64, i64 }, ptr %t100 store { ptr, i64, i64 } %t101, ptr %a102 store { ptr, i64, i64 } { ptr @.str.2541, i64 3, i64 0 }, ptr %a103 %t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103) %t105 = icmp ne i32 %t104, 0 br label %logic.rend4126 logic.rend4126: br label %logic.end4125 logic.end4125: %t106 = phi i1 [ true, %logic.from4123 ], [ %t105, %logic.rend4126 ] br label %logic.from4127 logic.from4127: br i1 %t106, label %logic.end4129, label %logic.rhs4128 logic.rhs4128: %t107 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t108 = load { ptr, i64, i64 }, ptr %t107 store { ptr, i64, i64 } %t108, ptr %a109 store { ptr, i64, i64 } { ptr @.str.2542, i64 5, i64 0 }, ptr %a110 %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) %t112 = icmp ne i32 %t111, 0 br label %logic.rend4130 logic.rend4130: br label %logic.end4129 logic.end4129: %t113 = phi i1 [ true, %logic.from4127 ], [ %t112, %logic.rend4130 ] br label %logic.from4131 logic.from4131: br i1 %t113, label %logic.rhs4132, label %logic.end4133 logic.rhs4132: %t114 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 %t116 = load i64, ptr %t115 %t117 = icmp sgt i64 %t116, 0 br label %logic.rend4134 logic.rend4134: br label %logic.end4133 logic.end4133: %t118 = phi i1 [ false, %logic.from4131 ], [ %t117, %logic.rend4134 ] br label %logic.from4135 logic.from4135: br i1 %t118, label %logic.rhs4136, label %logic.end4137 logic.rhs4136: %t119 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t120 = load { ptr, i64, i64 }, ptr %t119 %t121 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t122 = load { ptr, i64, i64 }, ptr %t121 store { ptr, i64, i64 } %t120, ptr %a123 store { ptr, i64, i64 } %t122, ptr %a124 %t125 = call i32 @finch_str_eq(ptr %a123, ptr %a124) %t126 = icmp ne i32 %t125, 0 br label %logic.rend4138 logic.rend4138: br label %logic.end4137 logic.end4137: %t127 = phi i1 [ false, %logic.from4135 ], [ %t126, %logic.rend4138 ] br label %logic.from4139 logic.from4139: br i1 %t127, label %logic.rhs4140, label %logic.end4141 logic.rhs4140: %t128 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i32 0, i32 1 %t130 = load i64, ptr %t129 %t131 = icmp sgt i64 %t130, 0 br label %logic.rend4142 logic.rend4142: br label %logic.end4141 logic.end4141: %t132 = phi i1 [ false, %logic.from4139 ], [ %t131, %logic.rend4142 ] br i1 %t132, label %then4143, label %endif4145 then4143: %t133 = load ptr, ptr %a1 %t134 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t135 = load { ptr, i64, i64 }, ptr %t134 %t136 = extractvalue { ptr, i64, i64 } %t135, 1 %t137 = icmp uge i64 0, %t136 br i1 %t137, label %range4146, label %inrange4147 range4146: call void @finch_panic_index(ptr @.str.2543, i64 1769, i64 0, i64 %t136) unreachable inrange4147: %t138 = extractvalue { ptr, i64, i64 } %t135, 0 %t139 = getelementptr inbounds %S.ast.Type, ptr %t138, i64 0 %t140 = load %S.ast.Type, ptr %t139 %t141 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t142 = load { ptr, i64, i64 }, ptr %t141 %t143 = extractvalue { ptr, i64, i64 } %t142, 1 %t144 = icmp uge i64 0, %t143 br i1 %t144, label %range4148, label %inrange4149 range4148: call void @finch_panic_index(ptr @.str.2544, i64 1769, i64 0, i64 %t143) unreachable inrange4149: %t145 = extractvalue { ptr, i64, i64 } %t142, 0 %t146 = getelementptr inbounds %S.ast.Type, ptr %t145, i64 0 %t147 = load %S.ast.Type, ptr %t146 %t148 = load { ptr, i64, i64 }, ptr %a4 %t149 = load ptr, ptr %a5 call void @finch.gen.bindType(ptr %t133, %S.ast.Type %t140, %S.ast.Type %t147, { ptr, i64, i64 } %t148, ptr %t149) ret void endif4145: %t150 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t151 = load { ptr, i64, i64 }, ptr %t150 store { ptr, i64, i64 } %t151, ptr %a152 store { ptr, i64, i64 } { ptr @.str.2545, i64 3, i64 0 }, ptr %a153 %t154 = call i32 @finch_str_eq(ptr %a152, ptr %a153) %t155 = icmp ne i32 %t154, 0 br label %logic.from4150 logic.from4150: br i1 %t155, label %logic.rhs4151, label %logic.end4152 logic.rhs4151: %t156 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t157 = load { ptr, i64, i64 }, ptr %t156 store { ptr, i64, i64 } %t157, ptr %a158 store { ptr, i64, i64 } { ptr @.str.2546, i64 3, i64 0 }, ptr %a159 %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) %t161 = icmp ne i32 %t160, 0 br label %logic.rend4153 logic.rend4153: br label %logic.end4152 logic.end4152: %t162 = phi i1 [ false, %logic.from4150 ], [ %t161, %logic.rend4153 ] br i1 %t162, label %then4154, label %endif4156 then4154: %t163 = load ptr, ptr %a1 %t164 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t165 = load { ptr, i64, i64 }, ptr %t164 %t166 = extractvalue { ptr, i64, i64 } %t165, 1 %t167 = icmp uge i64 0, %t166 br i1 %t167, label %range4157, label %inrange4158 range4157: call void @finch_panic_index(ptr @.str.2547, i64 1773, i64 0, i64 %t166) unreachable inrange4158: %t168 = extractvalue { ptr, i64, i64 } %t165, 0 %t169 = getelementptr inbounds %S.ast.Type, ptr %t168, i64 0 %t170 = load %S.ast.Type, ptr %t169 %t171 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t172 = load { ptr, i64, i64 }, ptr %t171 %t173 = extractvalue { ptr, i64, i64 } %t172, 1 %t174 = icmp uge i64 0, %t173 br i1 %t174, label %range4159, label %inrange4160 range4159: call void @finch_panic_index(ptr @.str.2548, i64 1773, i64 0, i64 %t173) unreachable inrange4160: %t175 = extractvalue { ptr, i64, i64 } %t172, 0 %t176 = getelementptr inbounds %S.ast.Type, ptr %t175, i64 0 %t177 = load %S.ast.Type, ptr %t176 %t178 = load { ptr, i64, i64 }, ptr %a4 %t179 = load ptr, ptr %a5 call void @finch.gen.bindType(ptr %t163, %S.ast.Type %t170, %S.ast.Type %t177, { ptr, i64, i64 } %t178, ptr %t179) %t180 = load ptr, ptr %a1 %t181 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t182 = load { ptr, i64, i64 }, ptr %t181 %t183 = extractvalue { ptr, i64, i64 } %t182, 1 %t184 = icmp uge i64 1, %t183 br i1 %t184, label %range4161, label %inrange4162 range4161: call void @finch_panic_index(ptr @.str.2549, i64 1774, i64 1, i64 %t183) unreachable inrange4162: %t185 = extractvalue { ptr, i64, i64 } %t182, 0 %t186 = getelementptr inbounds %S.ast.Type, ptr %t185, i64 1 %t187 = load %S.ast.Type, ptr %t186 %t188 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t189 = load { ptr, i64, i64 }, ptr %t188 %t190 = extractvalue { ptr, i64, i64 } %t189, 1 %t191 = icmp uge i64 1, %t190 br i1 %t191, label %range4163, label %inrange4164 range4163: call void @finch_panic_index(ptr @.str.2550, i64 1774, i64 1, i64 %t190) unreachable inrange4164: %t192 = extractvalue { ptr, i64, i64 } %t189, 0 %t193 = getelementptr inbounds %S.ast.Type, ptr %t192, i64 1 %t194 = load %S.ast.Type, ptr %t193 %t195 = load { ptr, i64, i64 }, ptr %a4 %t196 = load ptr, ptr %a5 call void @finch.gen.bindType(ptr %t180, %S.ast.Type %t187, %S.ast.Type %t194, { ptr, i64, i64 } %t195, ptr %t196) ret void endif4156: %t197 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t198 = load { ptr, i64, i64 }, ptr %t197 store { ptr, i64, i64 } %t198, ptr %a199 store { ptr, i64, i64 } { ptr @.str.2551, i64 5, i64 0 }, ptr %a200 %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) %t202 = icmp ne i32 %t201, 0 br label %logic.from4165 logic.from4165: br i1 %t202, label %logic.rhs4166, label %logic.end4167 logic.rhs4166: %t203 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t204 = getelementptr inbounds { ptr, i64, i64 }, ptr %t203, i32 0, i32 1 %t205 = load i64, ptr %t204 %t206 = icmp sgt i64 %t205, 0 br label %logic.rend4168 logic.rend4168: br label %logic.end4167 logic.end4167: %t207 = phi i1 [ false, %logic.from4165 ], [ %t206, %logic.rend4168 ] br label %logic.from4169 logic.from4169: br i1 %t207, label %logic.rhs4170, label %logic.end4171 logic.rhs4170: %t208 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t209 = load { ptr, i64, i64 }, ptr %t208 store { ptr, i64, i64 } %t209, ptr %a210 store { ptr, i64, i64 } { ptr @.str.2552, i64 6, i64 0 }, ptr %a211 %t212 = call i32 @finch_str_eq(ptr %a210, ptr %a211) %t213 = icmp ne i32 %t212, 0 br label %logic.rend4172 logic.rend4172: br label %logic.end4171 logic.end4171: %t214 = phi i1 [ false, %logic.from4169 ], [ %t213, %logic.rend4172 ] br i1 %t214, label %then4173, label %endif4175 then4173: %t215 = load ptr, ptr %a1 %t216 = icmp eq ptr %t215, null br i1 %t216, label %panic4176, label %ok4177 panic4176: call void @finch_panic(ptr @.str.2553, i64 1778, ptr @.str.2554) unreachable ok4177: %t217 = getelementptr inbounds %S.gen.Gen, ptr %t215, i32 0, i32 16 %t218 = load ptr, ptr %a1 %t219 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 3 %t220 = load { ptr, i64, i64 }, ptr %t219 %t221 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 2 %t222 = load { ptr, i64, i64 }, ptr %t221 %t223 = call i64 @finch.gen.findStruct(ptr %t218, { ptr, i64, i64 } %t220, { ptr, i64, i64 } %t222) %t224 = load { ptr, i64, i64 }, ptr %t217 %t225 = extractvalue { ptr, i64, i64 } %t224, 1 %t226 = icmp uge i64 %t223, %t225 br i1 %t226, label %range4178, label %inrange4179 range4178: call void @finch_panic_index(ptr @.str.2555, i64 1778, i64 %t223, i64 %t225) unreachable inrange4179: %t227 = extractvalue { ptr, i64, i64 } %t224, 0 %t228 = getelementptr inbounds %S.gen.StructDef, ptr %t227, i64 %t223 %t229 = load %S.gen.StructDef, ptr %t228 store %S.gen.StructDef %t229, ptr %a230 call void @finch.copy.S_gen_StructDef(ptr %a231, ptr %a230) %t232 = load %S.gen.StructDef, ptr %a231 store %S.gen.StructDef %t232, ptr %a233 %t234 = getelementptr inbounds %S.gen.StructDef, ptr %a233, i32 0, i32 5 %t235 = load { ptr, i64, i64 }, ptr %t234 %t236 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t237 = load { ptr, i64, i64 }, ptr %t236 store { ptr, i64, i64 } %t235, ptr %a238 store { ptr, i64, i64 } %t237, ptr %a239 %t240 = call i32 @finch_str_eq(ptr %a238, ptr %a239) %t241 = icmp ne i32 %t240, 0 br label %logic.from4180 logic.from4180: br i1 %t241, label %logic.rhs4181, label %logic.end4182 logic.rhs4181: %t242 = getelementptr inbounds %S.gen.StructDef, ptr %a233, i32 0, i32 7 %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i32 0, i32 1 %t244 = load i64, ptr %t243 %t245 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t246 = getelementptr inbounds { ptr, i64, i64 }, ptr %t245, i32 0, i32 1 %t247 = load i64, ptr %t246 %t248 = icmp eq i64 %t244, %t247 br label %logic.rend4183 logic.rend4183: br label %logic.end4182 logic.end4182: %t249 = phi i1 [ false, %logic.from4180 ], [ %t248, %logic.rend4183 ] br i1 %t249, label %then4184, label %endif4186 then4184: %t250 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t251 = getelementptr inbounds { ptr, i64, i64 }, ptr %t250, i32 0, i32 1 %t252 = load i64, ptr %t251 store i64 0, ptr %a253 br label %for.cond4187 for.cond4187: %t254 = load i64, ptr %a253 %t255 = icmp slt i64 %t254, %t252 br i1 %t255, label %for.body4188, label %for.end4190 for.body4188: %t256 = load ptr, ptr %a1 %t257 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t258 = load i64, ptr %a253 %t259 = load { ptr, i64, i64 }, ptr %t257 %t260 = extractvalue { ptr, i64, i64 } %t259, 1 %t261 = icmp uge i64 %t258, %t260 br i1 %t261, label %range4191, label %inrange4192 range4191: call void @finch_panic_index(ptr @.str.2556, i64 1781, i64 %t258, i64 %t260) unreachable inrange4192: %t262 = extractvalue { ptr, i64, i64 } %t259, 0 %t263 = getelementptr inbounds %S.ast.Type, ptr %t262, i64 %t258 %t264 = load %S.ast.Type, ptr %t263 %t265 = getelementptr inbounds %S.gen.StructDef, ptr %a233, i32 0, i32 7 %t266 = load i64, ptr %a253 %t267 = load { ptr, i64, i64 }, ptr %t265 %t268 = extractvalue { ptr, i64, i64 } %t267, 1 %t269 = icmp uge i64 %t266, %t268 br i1 %t269, label %range4193, label %inrange4194 range4193: call void @finch_panic_index(ptr @.str.2557, i64 1781, i64 %t266, i64 %t268) unreachable inrange4194: %t270 = extractvalue { ptr, i64, i64 } %t267, 0 %t271 = getelementptr inbounds %S.ast.Type, ptr %t270, i64 %t266 %t272 = load %S.ast.Type, ptr %t271 %t273 = load { ptr, i64, i64 }, ptr %a4 %t274 = load ptr, ptr %a5 call void @finch.gen.bindType(ptr %t256, %S.ast.Type %t264, %S.ast.Type %t272, { ptr, i64, i64 } %t273, ptr %t274) br label %for.step4189 for.step4189: %t275 = load i64, ptr %a253 %t276 = add i64 %t275, 1 store i64 %t276, ptr %a253 br label %for.cond4187 for.end4190: br label %endif4186 endif4186: call void @finch.drop.S_gen_StructDef(ptr %a233) br label %endif4175 endif4175: ret void } define internal void @finch.drop.arr_S_gen_Val(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond4271 n.cond4271: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body4272, label %n.end4273 n.body4272: %t7 = getelementptr inbounds %S.gen.Val, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Val(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond4271 n.end4273: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.S_gen_Binds(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.Binds, ptr %a, i32 0, i32 0 call void @finch.drop.arr_S_ast_Type(ptr %t1) %t2 = getelementptr inbounds %S.gen.Binds, ptr %a, i32 0, i32 1 call void @finch.drop.arr_bool(ptr %t2) ret void } define internal %S.gen.Val @finch.gen.genericCall(ptr %p0, %S.ast.Node %p1, i64 %p2, i64 %p3, { ptr, i64, i64 } %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i64, align 16 %a4 = alloca i64, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca %S.gen.Template, align 16 %a17 = alloca %S.gen.Template, align 16 %a19 = alloca %S.gen.Template, align 16 %a39 = alloca %S.ast.Node, align 16 %a40 = alloca %S.ast.Node, align 16 %a42 = alloca %S.ast.Node, align 16 %a47 = alloca i64, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca i64, align 16 %a113 = alloca %S.ast.Type, align 16 %a132 = alloca %S.ast.Type, align 16 %a137 = alloca %S.gen.Binds, align 16 %a141 = alloca i64, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca i64, align 16 %a167 = alloca i64, align 16 %a182 = alloca %S.gen.Val, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca %S.gen.Val, align 16 %a228 = alloca %S.gen.Val, align 16 %a255 = alloca i64, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a308 = alloca %S.ast.Type, align 16 %a309 = alloca i64, align 16 %a320 = alloca %S.gen.FnSig, align 16 %a321 = alloca %S.gen.FnSig, align 16 %a323 = alloca %S.gen.FnSig, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca i64, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a373 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a377 = alloca %S.gen.Val, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a399 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca %S.gen.Val, align 16 %a414 = alloca i64, align 16 %a422 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic4195, label %ok4196 panic4195: call void @finch_panic(ptr @.str.2558, i64 1789, ptr @.str.2559) unreachable ok4196: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 %t9 = load i64, ptr %a3 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 br i1 %t12, label %range4197, label %inrange4198 range4197: call void @finch_panic_index(ptr @.str.2560, i64 1789, i64 %t9, i64 %t11) unreachable inrange4198: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.Template, ptr %t13, i64 %t9 %t15 = load %S.gen.Template, ptr %t14 store %S.gen.Template %t15, ptr %a16 call void @finch.copy.S_gen_Template(ptr %a17, ptr %a16) %t18 = load %S.gen.Template, ptr %a17 store %S.gen.Template %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null br i1 %t21, label %panic4199, label %ok4200 panic4199: call void @finch_panic(ptr @.str.2561, i64 1790, ptr @.str.2562) unreachable ok4200: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 0 %t23 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 %t24 = load i64, ptr %t23 %t25 = load { ptr, i64, i64 }, ptr %t22 %t26 = extractvalue { ptr, i64, i64 } %t25, 1 %t27 = icmp uge i64 %t24, %t26 br i1 %t27, label %range4201, label %inrange4202 range4201: call void @finch_panic_index(ptr @.str.2563, i64 1790, i64 %t24, i64 %t26) unreachable inrange4202: %t28 = extractvalue { ptr, i64, i64 } %t25, 0 %t29 = getelementptr inbounds %S.ast.Program, ptr %t28, i64 %t24 %t30 = getelementptr inbounds %S.ast.Program, ptr %t29, i32 0, i32 8 %t31 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 5 %t32 = load i64, ptr %t31 %t33 = load { ptr, i64, i64 }, ptr %t30 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 br i1 %t35, label %range4203, label %inrange4204 range4203: call void @finch_panic_index(ptr @.str.2564, i64 1790, i64 %t32, i64 %t34) unreachable inrange4204: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds %S.ast.Node, ptr %t36, i64 %t32 %t38 = load %S.ast.Node, ptr %t37 store %S.ast.Node %t38, ptr %a39 call void @finch.copy.S_ast_Node(ptr %a40, ptr %a39) %t41 = load %S.ast.Node, ptr %a40 store %S.ast.Node %t41, ptr %a42 %t43 = getelementptr inbounds %S.ast.Node, ptr %a42, i32 0, i32 9 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i32 0, i32 1 %t45 = load i64, ptr %t44 %t46 = sub i64 %t45, 1 store i64 %t46, ptr %a47 %t48 = load ptr, ptr %a1 %t49 = load %S.ast.Node, ptr %a2 %t50 = load i64, ptr %a4 %t51 = load i64, ptr %a47 %t52 = load { ptr, i64, i64 }, ptr %a5 call void @finch.gen.checkArgs(ptr %t48, %S.ast.Node %t49, i64 %t50, i64 %t51, { ptr, i64, i64 } %t52) store { ptr, i64, i64 } zeroinitializer, ptr %a53 %t54 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t55 = getelementptr inbounds %S.ast.Type, ptr %t54, i32 0, i32 1 %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i32 0, i32 1 %t57 = load i64, ptr %t56 %t58 = icmp sgt i64 %t57, 0 br i1 %t58, label %then4205, label %endif4207 then4205: %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t60 = getelementptr inbounds %S.ast.Type, ptr %t59, i32 0, i32 1 %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i32 0, i32 1 %t62 = load i64, ptr %t61 %t63 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 %t65 = load i64, ptr %t64 %t66 = icmp ne i64 %t62, %t65 br i1 %t66, label %then4208, label %endif4210 then4208: %t67 = load ptr, ptr %a1 %t68 = load %S.ast.Node, ptr %a2 %t69 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t69, ptr %a71 store { ptr, i64, i64 } { ptr @.str.2565, i64 7, i64 0 }, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a70 %t74 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i32 0, i32 1 %t76 = load i64, ptr %t75 call void @finch_str_from_int(ptr %a77, i64 %t76) %t78 = load { ptr, i64, i64 }, ptr %a77 store { ptr, i64, i64 } %t73, ptr %a80 store { ptr, i64, i64 } %t78, ptr %a81 call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) store { ptr, i64, i64 } %t73, ptr %a82 call void @finch_str_drop(ptr %a82) store { ptr, i64, i64 } %t78, ptr %a83 call void @finch_str_drop(ptr %a83) %t84 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } %t84, ptr %a86 store { ptr, i64, i64 } { ptr @.str.2566, i64 27, i64 0 }, ptr %a87 call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) store { ptr, i64, i64 } %t84, ptr %a88 call void @finch_str_drop(ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a85 %t90 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t91 = getelementptr inbounds %S.ast.Type, ptr %t90, i32 0, i32 1 %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i32 0, i32 1 %t93 = load i64, ptr %t92 call void @finch_str_from_int(ptr %a94, i64 %t93) %t95 = load { ptr, i64, i64 }, ptr %a94 store { ptr, i64, i64 } %t89, ptr %a97 store { ptr, i64, i64 } %t95, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) store { ptr, i64, i64 } %t89, ptr %a99 call void @finch_str_drop(ptr %a99) store { ptr, i64, i64 } %t95, ptr %a100 call void @finch_str_drop(ptr %a100) %t101 = load { ptr, i64, i64 }, ptr %a96 call void @finch.gen.fail(ptr %t67, %S.ast.Node %t68, { ptr, i64, i64 } %t101) store { ptr, i64, i64 } %t101, ptr %a102 call void @finch_str_drop(ptr %a102) br label %endif4210 endif4210: %t103 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t104 = getelementptr inbounds %S.ast.Type, ptr %t103, i32 0, i32 1 store i64 0, ptr %a105 br label %each.cond4211 each.cond4211: %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 %t107 = load i64, ptr %t106 %t108 = load i64, ptr %a105 %t109 = icmp slt i64 %t108, %t107 br i1 %t109, label %each.body4212, label %each.end4214 each.body4212: %t110 = load ptr, ptr %t104 %t111 = getelementptr inbounds %S.ast.Type, ptr %t110, i64 %t108 %t112 = load %S.ast.Type, ptr %t111 store %S.ast.Type %t112, ptr %a113 %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %a53, i32 0, i32 1 %t115 = load ptr, ptr %a1 %t116 = load %S.ast.Type, ptr %a113 %t117 = load %S.ast.Node, ptr %a2 %t118 = call %S.ast.Type @finch.gen.resolve(ptr %t115, %S.ast.Type %t116, %S.ast.Node %t117) %t119 = load i64, ptr %t114 %t120 = add i64 %t119, 1 call void @finch_arr_reserve(ptr %a53, i64 %t120, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t121 = load ptr, ptr %a53 %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 %t119 store %S.ast.Type %t118, ptr %t122 store i64 %t120, ptr %t114 br label %each.step4213 each.step4213: %t123 = load i64, ptr %a105 %t124 = add i64 %t123, 1 store i64 %t124, ptr %a105 br label %each.cond4211 each.end4214: %t125 = load ptr, ptr %a1 %t126 = load ptr, ptr %a1 %t127 = load i64, ptr %a3 %t128 = load { ptr, i64, i64 }, ptr %a53 %t129 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2567, i64 4, i64 0 }) %t130 = load %S.ast.Node, ptr %a2 %t131 = call i64 @finch.gen.instFn(ptr %t126, i64 %t127, { ptr, i64, i64 } %t128, %S.ast.Type %t129, %S.ast.Node %t130) store %S.ast.Type %t129, ptr %a132 call void @finch.drop.S_ast_Type(ptr %a132) %t133 = load %S.ast.Node, ptr %a2 %t134 = load i64, ptr %a4 %t135 = load { ptr, i64, i64 }, ptr %a5 %t136 = call %S.gen.Val @finch.gen.callFn(ptr %t125, i64 %t131, %S.ast.Node %t133, i64 %t134, { ptr, i64, i64 } %t135, { ptr, i64, i64 } { ptr @.str.2568, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.2569, i64 0, i64 0 }) call void @finch.drop.arr_S_ast_Type(ptr %a53) call void @finch.drop.S_ast_Node(ptr %a42) call void @finch.drop.S_gen_Template(ptr %a19) ret %S.gen.Val %t136 endif4207: store %S.gen.Binds zeroinitializer, ptr %a137 %t138 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i32 0, i32 1 %t140 = load i64, ptr %t139 store i64 0, ptr %a141 br label %for.cond4215 for.cond4215: %t142 = load i64, ptr %a141 %t143 = icmp slt i64 %t142, %t140 br i1 %t143, label %for.body4216, label %for.end4218 for.body4216: %t144 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 0 %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 %t146 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2570, i64 4, i64 0 }) %t147 = load i64, ptr %t145 %t148 = add i64 %t147, 1 call void @finch_arr_reserve(ptr %t144, i64 %t148, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t149 = load ptr, ptr %t144 %t150 = getelementptr inbounds %S.ast.Type, ptr %t149, i64 %t147 store %S.ast.Type %t146, ptr %t150 store i64 %t148, ptr %t145 %t151 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 1 %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 %t153 = load i64, ptr %t152 %t154 = add i64 %t153, 1 call void @finch_arr_reserve(ptr %t151, i64 %t154, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) %t155 = load ptr, ptr %t151 %t156 = getelementptr inbounds i1, ptr %t155, i64 %t153 store i1 false, ptr %t156 store i64 %t154, ptr %t152 br label %for.step4217 for.step4217: %t157 = load i64, ptr %a141 %t158 = add i64 %t157, 1 store i64 %t158, ptr %a141 br label %for.cond4215 for.end4218: store { ptr, i64, i64 } zeroinitializer, ptr %a159 %t160 = load ptr, ptr %a1 %t161 = icmp eq ptr %t160, null br i1 %t161, label %panic4219, label %ok4220 panic4219: call void @finch_panic(ptr @.str.2571, i64 1809, ptr @.str.2572) unreachable ok4220: %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 11 %t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i32 0, i32 1 %t164 = load i64, ptr %t163 store i64 %t164, ptr %a165 %t166 = load i64, ptr %a47 store i64 0, ptr %a167 br label %for.cond4221 for.cond4221: %t168 = load i64, ptr %a167 %t169 = icmp slt i64 %t168, %t166 br i1 %t169, label %for.body4222, label %for.end4224 for.body4222: %t170 = load ptr, ptr %a1 %t171 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t172 = load i64, ptr %a4 %t173 = load i64, ptr %a167 %t174 = add i64 %t172, %t173 %t175 = load { ptr, i64, i64 }, ptr %t171 %t176 = extractvalue { ptr, i64, i64 } %t175, 1 %t177 = icmp uge i64 %t174, %t176 br i1 %t177, label %range4225, label %inrange4226 range4225: call void @finch_panic_index(ptr @.str.2573, i64 1811, i64 %t174, i64 %t176) unreachable inrange4226: %t178 = extractvalue { ptr, i64, i64 } %t175, 0 %t179 = getelementptr inbounds %S.ast.Node, ptr %t178, i64 %t174 %t180 = load %S.ast.Node, ptr %t179 %t181 = call %S.gen.Val @finch.gen.expr(ptr %t170, %S.ast.Node %t180) store %S.gen.Val %t181, ptr %a182 %t183 = getelementptr inbounds %S.gen.Val, ptr %a182, i32 0, i32 1 %t184 = getelementptr inbounds %S.ast.Type, ptr %t183, i32 0, i32 0 %t185 = load { ptr, i64, i64 }, ptr %t184 store { ptr, i64, i64 } %t185, ptr %a186 store { ptr, i64, i64 } { ptr @.str.2574, i64 4, i64 0 }, ptr %a187 %t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187) %t189 = icmp ne i32 %t188, 0 br label %logic.from4227 logic.from4227: br i1 %t189, label %logic.end4229, label %logic.rhs4228 logic.rhs4228: %t190 = getelementptr inbounds %S.gen.Val, ptr %a182, i32 0, i32 1 %t191 = getelementptr inbounds %S.ast.Type, ptr %t190, i32 0, i32 0 %t192 = load { ptr, i64, i64 }, ptr %t191 store { ptr, i64, i64 } %t192, ptr %a193 store { ptr, i64, i64 } { ptr @.str.2575, i64 4, i64 0 }, ptr %a194 %t195 = call i32 @finch_str_eq(ptr %a193, ptr %a194) %t196 = icmp ne i32 %t195, 0 br label %logic.rend4230 logic.rend4230: br label %logic.end4229 logic.end4229: %t197 = phi i1 [ true, %logic.from4227 ], [ %t196, %logic.rend4230 ] br i1 %t197, label %then4231, label %endif4233 then4231: %t198 = load ptr, ptr %a1 %t199 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t200 = load i64, ptr %a4 %t201 = load i64, ptr %a167 %t202 = add i64 %t200, %t201 %t203 = load { ptr, i64, i64 }, ptr %t199 %t204 = extractvalue { ptr, i64, i64 } %t203, 1 %t205 = icmp uge i64 %t202, %t204 br i1 %t205, label %range4234, label %inrange4235 range4234: call void @finch_panic_index(ptr @.str.2576, i64 1813, i64 %t202, i64 %t204) unreachable inrange4235: %t206 = extractvalue { ptr, i64, i64 } %t203, 0 %t207 = getelementptr inbounds %S.ast.Node, ptr %t206, i64 %t202 %t208 = load %S.ast.Node, ptr %t207 %t209 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2578, i64 2, i64 0 }, ptr %a211 call void @finch_str_join(ptr %a212, ptr %t209, ptr %a211) %t213 = load { ptr, i64, i64 }, ptr %a212 store { ptr, i64, i64 } { ptr @.str.2577, i64 29, i64 0 }, ptr %a215 store { ptr, i64, i64 } %t213, ptr %a216 call void @finch_str_concat(ptr %a214, ptr %a215, ptr %a216) store { ptr, i64, i64 } %t213, ptr %a217 call void @finch_str_drop(ptr %a217) %t218 = load { ptr, i64, i64 }, ptr %a214 store { ptr, i64, i64 } %t218, ptr %a220 store { ptr, i64, i64 } { ptr @.str.2579, i64 5, i64 0 }, ptr %a221 call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) store { ptr, i64, i64 } %t218, ptr %a222 call void @finch_str_drop(ptr %a222) %t223 = load { ptr, i64, i64 }, ptr %a219 call void @finch.gen.fail(ptr %t198, %S.ast.Node %t208, { ptr, i64, i64 } %t223) store { ptr, i64, i64 } %t223, ptr %a224 call void @finch_str_drop(ptr %a224) br label %endif4233 endif4233: %t225 = getelementptr inbounds { ptr, i64, i64 }, ptr %a159, i32 0, i32 1 %t226 = load %S.gen.Val, ptr %a182 store %S.gen.Val %t226, ptr %a227 call void @finch.copy.S_gen_Val(ptr %a228, ptr %a227) %t229 = load %S.gen.Val, ptr %a228 %t230 = load i64, ptr %t225 %t231 = add i64 %t230, 1 call void @finch_arr_reserve(ptr %a159, i64 %t231, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64)) %t232 = load ptr, ptr %a159 %t233 = getelementptr inbounds %S.gen.Val, ptr %t232, i64 %t230 store %S.gen.Val %t229, ptr %t233 store i64 %t231, ptr %t225 %t234 = load ptr, ptr %a1 %t235 = load %S.gen.Val, ptr %a182 call void @finch.gen.hold(ptr %t234, %S.gen.Val %t235) %t236 = load ptr, ptr %a1 %t237 = getelementptr inbounds %S.ast.Node, ptr %a42, i32 0, i32 9 %t238 = load i64, ptr %a167 %t239 = load { ptr, i64, i64 }, ptr %t237 %t240 = extractvalue { ptr, i64, i64 } %t239, 1 %t241 = icmp uge i64 %t238, %t240 br i1 %t241, label %range4236, label %inrange4237 range4236: call void @finch_panic_index(ptr @.str.2580, i64 1817, i64 %t238, i64 %t240) unreachable inrange4237: %t242 = extractvalue { ptr, i64, i64 } %t239, 0 %t243 = getelementptr inbounds %S.ast.Node, ptr %t242, i64 %t238 %t244 = getelementptr inbounds %S.ast.Node, ptr %t243, i32 0, i32 5 %t245 = load %S.ast.Type, ptr %t244 %t246 = getelementptr inbounds %S.gen.Val, ptr %a182, i32 0, i32 1 %t247 = load %S.ast.Type, ptr %t246 %t248 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t249 = load { ptr, i64, i64 }, ptr %t248 call void @finch.gen.bindType(ptr %t236, %S.ast.Type %t245, %S.ast.Type %t247, { ptr, i64, i64 } %t249, ptr %a137) call void @finch.drop.S_gen_Val(ptr %a182) br label %for.step4223 for.step4223: %t250 = load i64, ptr %a167 %t251 = add i64 %t250, 1 store i64 %t251, ptr %a167 br label %for.cond4221 for.end4224: %t252 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t253 = getelementptr inbounds { ptr, i64, i64 }, ptr %t252, i32 0, i32 1 %t254 = load i64, ptr %t253 store i64 0, ptr %a255 br label %for.cond4238 for.cond4238: %t256 = load i64, ptr %a255 %t257 = icmp slt i64 %t256, %t254 br i1 %t257, label %for.body4239, label %for.end4241 for.body4239: %t258 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 1 %t259 = load i64, ptr %a255 %t260 = load { ptr, i64, i64 }, ptr %t258 %t261 = extractvalue { ptr, i64, i64 } %t260, 1 %t262 = icmp uge i64 %t259, %t261 br i1 %t262, label %range4242, label %inrange4243 range4242: call void @finch_panic_index(ptr @.str.2581, i64 1820, i64 %t259, i64 %t261) unreachable inrange4243: %t263 = extractvalue { ptr, i64, i64 } %t260, 0 %t264 = getelementptr inbounds i1, ptr %t263, i64 %t259 %t265 = load i1, ptr %t264 %t266 = xor i1 %t265, true br i1 %t266, label %then4244, label %endif4246 then4244: %t267 = load ptr, ptr %a1 %t268 = load %S.ast.Node, ptr %a2 %t269 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t270 = load i64, ptr %a255 %t271 = load { ptr, i64, i64 }, ptr %t269 %t272 = extractvalue { ptr, i64, i64 } %t271, 1 %t273 = icmp uge i64 %t270, %t272 br i1 %t273, label %range4247, label %inrange4248 range4247: call void @finch_panic_index(ptr @.str.2583, i64 1821, i64 %t270, i64 %t272) unreachable inrange4248: %t274 = extractvalue { ptr, i64, i64 } %t271, 0 %t275 = getelementptr inbounds { ptr, i64, i64 }, ptr %t274, i64 %t270 %t276 = load { ptr, i64, i64 }, ptr %t275 store { ptr, i64, i64 } { ptr @.str.2582, i64 16, i64 0 }, ptr %a278 store { ptr, i64, i64 } %t276, ptr %a279 call void @finch_str_concat(ptr %a277, ptr %a278, ptr %a279) %t280 = load { ptr, i64, i64 }, ptr %a277 store { ptr, i64, i64 } %t280, ptr %a282 store { ptr, i64, i64 } { ptr @.str.2584, i64 24, i64 0 }, ptr %a283 call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) store { ptr, i64, i64 } %t280, ptr %a284 call void @finch_str_drop(ptr %a284) %t285 = load { ptr, i64, i64 }, ptr %a281 %t286 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 %t287 = load { ptr, i64, i64 }, ptr %t286 store { ptr, i64, i64 } %t285, ptr %a289 store { ptr, i64, i64 } %t287, ptr %a290 call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) store { ptr, i64, i64 } %t285, ptr %a291 call void @finch_str_drop(ptr %a291) %t292 = load { ptr, i64, i64 }, ptr %a288 store { ptr, i64, i64 } %t292, ptr %a294 store { ptr, i64, i64 } { ptr @.str.2585, i64 10, i64 0 }, ptr %a295 call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295) store { ptr, i64, i64 } %t292, ptr %a296 call void @finch_str_drop(ptr %a296) %t297 = load { ptr, i64, i64 }, ptr %a293 call void @finch.gen.fail(ptr %t267, %S.ast.Node %t268, { ptr, i64, i64 } %t297) store { ptr, i64, i64 } %t297, ptr %a298 call void @finch_str_drop(ptr %a298) br label %endif4246 endif4246: br label %for.step4240 for.step4240: %t299 = load i64, ptr %a255 %t300 = add i64 %t299, 1 store i64 %t300, ptr %a255 br label %for.cond4238 for.end4241: %t301 = load ptr, ptr %a1 %t302 = load i64, ptr %a3 %t303 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 0 %t304 = load { ptr, i64, i64 }, ptr %t303 %t305 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2586, i64 4, i64 0 }) %t306 = load %S.ast.Node, ptr %a2 %t307 = call i64 @finch.gen.instFn(ptr %t301, i64 %t302, { ptr, i64, i64 } %t304, %S.ast.Type %t305, %S.ast.Node %t306) store %S.ast.Type %t305, ptr %a308 call void @finch.drop.S_ast_Type(ptr %a308) store i64 %t307, ptr %a309 %t310 = load ptr, ptr %a1 %t311 = icmp eq ptr %t310, null br i1 %t311, label %panic4249, label %ok4250 panic4249: call void @finch_panic(ptr @.str.2587, i64 1825, ptr @.str.2588) unreachable ok4250: %t312 = getelementptr inbounds %S.gen.Gen, ptr %t310, i32 0, i32 15 %t313 = load i64, ptr %a309 %t314 = load { ptr, i64, i64 }, ptr %t312 %t315 = extractvalue { ptr, i64, i64 } %t314, 1 %t316 = icmp uge i64 %t313, %t315 br i1 %t316, label %range4251, label %inrange4252 range4251: call void @finch_panic_index(ptr @.str.2589, i64 1825, i64 %t313, i64 %t315) unreachable inrange4252: %t317 = extractvalue { ptr, i64, i64 } %t314, 0 %t318 = getelementptr inbounds %S.gen.FnSig, ptr %t317, i64 %t313 %t319 = load %S.gen.FnSig, ptr %t318 store %S.gen.FnSig %t319, ptr %a320 call void @finch.copy.S_gen_FnSig(ptr %a321, ptr %a320) %t322 = load %S.gen.FnSig, ptr %a321 store %S.gen.FnSig %t322, ptr %a323 %t324 = load ptr, ptr %a1 %t325 = load %S.ast.Node, ptr %a2 %t326 = load %S.gen.FnSig, ptr %a323 call void @finch.gen.noteCall(ptr %t324, %S.ast.Node %t325, %S.gen.FnSig %t326) store { ptr, i64, i64 } zeroinitializer, ptr %a327 %t328 = load i64, ptr %a47 store i64 0, ptr %a329 br label %for.cond4253 for.cond4253: %t330 = load i64, ptr %a329 %t331 = icmp slt i64 %t330, %t328 br i1 %t331, label %for.body4254, label %for.end4256 for.body4254: %t332 = load ptr, ptr %a1 %t333 = load i64, ptr %a329 %t334 = load { ptr, i64, i64 }, ptr %a159 %t335 = extractvalue { ptr, i64, i64 } %t334, 1 %t336 = icmp uge i64 %t333, %t335 br i1 %t336, label %range4257, label %inrange4258 range4257: call void @finch_panic_index(ptr @.str.2590, i64 1829, i64 %t333, i64 %t335) unreachable inrange4258: %t337 = extractvalue { ptr, i64, i64 } %t334, 0 %t338 = getelementptr inbounds %S.gen.Val, ptr %t337, i64 %t333 %t339 = load %S.gen.Val, ptr %t338 %t340 = getelementptr inbounds %S.gen.FnSig, ptr %a323, i32 0, i32 13 %t341 = load i64, ptr %a329 %t342 = load { ptr, i64, i64 }, ptr %t340 %t343 = extractvalue { ptr, i64, i64 } %t342, 1 %t344 = icmp uge i64 %t341, %t343 br i1 %t344, label %range4259, label %inrange4260 range4259: call void @finch_panic_index(ptr @.str.2591, i64 1829, i64 %t341, i64 %t343) unreachable inrange4260: %t345 = extractvalue { ptr, i64, i64 } %t342, 0 %t346 = getelementptr inbounds %S.ast.Type, ptr %t345, i64 %t341 %t347 = load %S.ast.Type, ptr %t346 %t348 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t349 = load i64, ptr %a4 %t350 = load i64, ptr %a329 %t351 = add i64 %t349, %t350 %t352 = load { ptr, i64, i64 }, ptr %t348 %t353 = extractvalue { ptr, i64, i64 } %t352, 1 %t354 = icmp uge i64 %t351, %t353 br i1 %t354, label %range4261, label %inrange4262 range4261: call void @finch_panic_index(ptr @.str.2592, i64 1829, i64 %t351, i64 %t353) unreachable inrange4262: %t355 = extractvalue { ptr, i64, i64 } %t352, 0 %t356 = getelementptr inbounds %S.ast.Node, ptr %t355, i64 %t351 %t357 = load %S.ast.Node, ptr %t356 %t358 = getelementptr inbounds %S.gen.FnSig, ptr %a323, i32 0, i32 14 %t359 = load i64, ptr %a329 %t360 = load { ptr, i64, i64 }, ptr %t358 %t361 = extractvalue { ptr, i64, i64 } %t360, 1 %t362 = icmp uge i64 %t359, %t361 br i1 %t362, label %range4263, label %inrange4264 range4263: call void @finch_panic_index(ptr @.str.2594, i64 1829, i64 %t359, i64 %t361) unreachable inrange4264: %t363 = extractvalue { ptr, i64, i64 } %t360, 0 %t364 = getelementptr inbounds { ptr, i64, i64 }, ptr %t363, i64 %t359 %t365 = load { ptr, i64, i64 }, ptr %t364 store { ptr, i64, i64 } { ptr @.str.2593, i64 10, i64 0 }, ptr %a367 store { ptr, i64, i64 } %t365, ptr %a368 call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) %t369 = load { ptr, i64, i64 }, ptr %a366 store { ptr, i64, i64 } %t369, ptr %a371 store { ptr, i64, i64 } { ptr @.str.2595, i64 1, i64 0 }, ptr %a372 call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) store { ptr, i64, i64 } %t369, ptr %a373 call void @finch_str_drop(ptr %a373) %t374 = load { ptr, i64, i64 }, ptr %a370 %t375 = call %S.gen.Val @finch.gen.coerce(ptr %t332, %S.gen.Val %t339, %S.ast.Type %t347, %S.ast.Node %t357, { ptr, i64, i64 } %t374) store { ptr, i64, i64 } %t374, ptr %a376 call void @finch_str_drop(ptr %a376) store %S.gen.Val %t375, ptr %a377 %t378 = getelementptr inbounds { ptr, i64, i64 }, ptr %a327, i32 0, i32 1 %t379 = load ptr, ptr %a1 %t380 = getelementptr inbounds %S.gen.FnSig, ptr %a323, i32 0, i32 13 %t381 = load i64, ptr %a329 %t382 = load { ptr, i64, i64 }, ptr %t380 %t383 = extractvalue { ptr, i64, i64 } %t382, 1 %t384 = icmp uge i64 %t381, %t383 br i1 %t384, label %range4265, label %inrange4266 range4265: call void @finch_panic_index(ptr @.str.2596, i64 1830, i64 %t381, i64 %t383) unreachable inrange4266: %t385 = extractvalue { ptr, i64, i64 } %t382, 0 %t386 = getelementptr inbounds %S.ast.Type, ptr %t385, i64 %t381 %t387 = load %S.ast.Type, ptr %t386 %t388 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t379, %S.ast.Type %t387) store { ptr, i64, i64 } %t388, ptr %a390 store { ptr, i64, i64 } { ptr @.str.2597, i64 1, i64 0 }, ptr %a391 call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) store { ptr, i64, i64 } %t388, ptr %a392 call void @finch_str_drop(ptr %a392) %t393 = load { ptr, i64, i64 }, ptr %a389 %t394 = getelementptr inbounds %S.gen.Val, ptr %a377, i32 0, i32 0 %t395 = load { ptr, i64, i64 }, ptr %t394 store { ptr, i64, i64 } %t393, ptr %a397 store { ptr, i64, i64 } %t395, ptr %a398 call void @finch_str_concat(ptr %a396, ptr %a397, ptr %a398) store { ptr, i64, i64 } %t393, ptr %a399 call void @finch_str_drop(ptr %a399) %t400 = load { ptr, i64, i64 }, ptr %a396 %t401 = load i64, ptr %t378 %t402 = add i64 %t401, 1 call void @finch_arr_reserve(ptr %a327, i64 %t402, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t403 = load ptr, ptr %a327 %t404 = getelementptr inbounds { ptr, i64, i64 }, ptr %t403, i64 %t401 store { ptr, i64, i64 } %t400, ptr %t404 store i64 %t402, ptr %t378 call void @finch.drop.S_gen_Val(ptr %a377) br label %for.step4255 for.step4255: %t405 = load i64, ptr %a329 %t406 = add i64 %t405, 1 store i64 %t406, ptr %a329 br label %for.cond4253 for.end4256: %t407 = load ptr, ptr %a1 %t408 = load %S.gen.FnSig, ptr %a323 %t409 = load %S.ast.Node, ptr %a2 %t410 = load { ptr, i64, i64 }, ptr %a327 %t411 = load { ptr, i64, i64 }, ptr %a5 %t412 = call %S.gen.Val @finch.gen.emitCall(ptr %t407, %S.gen.FnSig %t408, %S.ast.Node %t409, { ptr, i64, i64 } %t410, { ptr, i64, i64 } %t411) store %S.gen.Val %t412, ptr %a413 store i64 0, ptr %a414 br label %each.cond4267 each.cond4267: %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %a159, i32 0, i32 1 %t416 = load i64, ptr %t415 %t417 = load i64, ptr %a414 %t418 = icmp slt i64 %t417, %t416 br i1 %t418, label %each.body4268, label %each.end4270 each.body4268: %t419 = load ptr, ptr %a159 %t420 = getelementptr inbounds %S.gen.Val, ptr %t419, i64 %t417 %t421 = load %S.gen.Val, ptr %t420 store %S.gen.Val %t421, ptr %a422 %t423 = load ptr, ptr %a1 %t424 = load %S.gen.Val, ptr %a422 call void @finch.gen.release(ptr %t423, %S.gen.Val %t424) br label %each.step4269 each.step4269: %t425 = load i64, ptr %a414 %t426 = add i64 %t425, 1 store i64 %t426, ptr %a414 br label %each.cond4267 each.end4270: %t427 = load ptr, ptr %a1 %t428 = load i64, ptr %a165 call void @finch.gen.heldEnd(ptr %t427, i64 %t428) %t429 = load %S.gen.Val, ptr %a413 call void @finch.drop.arr_str(ptr %a327) call void @finch.drop.S_gen_FnSig(ptr %a323) call void @finch.drop.arr_S_gen_Val(ptr %a159) call void @finch.drop.S_gen_Binds(ptr %a137) call void @finch.drop.arr_S_ast_Type(ptr %a53) call void @finch.drop.S_ast_Node(ptr %a42) call void @finch.drop.S_gen_Template(ptr %a19) ret %S.gen.Val %t429 } define internal void @finch.copy.S_cimport_CField(ptr %dst, ptr %src) { entry: %t1 = load %S.cimport.CField, ptr %src store %S.cimport.CField %t1, ptr %dst %t2 = getelementptr inbounds %S.cimport.CField, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.cimport.CField, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.cimport.CField, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.cimport.CField, ptr %src, i32 0, i32 1 call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) ret void } define internal void @finch.copy.arr_S_cimport_CField(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.cimport.CField, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond4282 n.cond4282: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body4283, label %n.end4284 n.body4283: %t8 = getelementptr inbounds %S.cimport.CField, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.cimport.CField, ptr %t2, i64 %t6 call void @finch.copy.S_cimport_CField(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond4282 n.end4284: ret void } define internal void @finch.copy.S_cimport_CStruct(ptr %dst, ptr %src) { entry: %t1 = load %S.cimport.CStruct, ptr %src store %S.cimport.CStruct %t1, ptr %dst %t2 = getelementptr inbounds %S.cimport.CStruct, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.cimport.CStruct, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.cimport.CStruct, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.cimport.CStruct, ptr %src, i32 0, i32 1 call void @finch.copy.arr_S_cimport_CField(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.cimport.CStruct, ptr %dst, i32 0, i32 4 %t7 = getelementptr inbounds %S.cimport.CStruct, ptr %src, i32 0, i32 4 call void @finch_str_copy(ptr %t6, ptr %t7) ret void } define internal void @finch.gen.resolveCStruct(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca %S.cimport.CStruct, align 16 %a29 = alloca %S.cimport.CStruct, align 16 %a31 = alloca %S.cimport.CStruct, align 16 %a42 = alloca i64, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca i64, align 16 %a53 = alloca %S.cimport.CField, align 16 %a60 = alloca %S.ast.Type, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca %S.ast.Type, align 16 %a132 = alloca %S.ast.Type, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca { ptr, i64, i64 }, align 16 %a308 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic4274, label %ok4275 panic4274: call void @finch_panic(ptr @.str.2598, i64 1843, ptr @.str.2599) unreachable ok4275: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 26 %t6 = getelementptr inbounds %S.cimport.CImports, ptr %t5, i32 0, i32 3 %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null br i1 %t8, label %panic4276, label %ok4277 panic4276: call void @finch_panic(ptr @.str.2600, i64 1843, ptr @.str.2601) unreachable ok4277: %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 16 %t10 = load i64, ptr %a2 %t11 = load { ptr, i64, i64 }, ptr %t9 %t12 = extractvalue { ptr, i64, i64 } %t11, 1 %t13 = icmp uge i64 %t10, %t12 br i1 %t13, label %range4278, label %inrange4279 range4278: call void @finch_panic_index(ptr @.str.2602, i64 1843, i64 %t10, i64 %t12) unreachable inrange4279: %t14 = extractvalue { ptr, i64, i64 } %t11, 0 %t15 = getelementptr inbounds %S.gen.StructDef, ptr %t14, i64 %t10 %t16 = getelementptr inbounds %S.gen.StructDef, ptr %t15, i32 0, i32 1 %t17 = load { ptr, i64, i64 }, ptr %t16 store { ptr, i64, i64 } %t17, ptr %a18 %t19 = call i64 @finch_map_find(ptr %t6, ptr %a18, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t20 = icmp slt i64 %t19, 0 br i1 %t20, label %map.missing4280, label %map.found4281 map.missing4280: store { ptr, i64, i64 } zeroinitializer, ptr %a21 store { ptr, i64, i64 } %t17, ptr %a22 call void @finch_buf_str(ptr %a21, ptr %a22, i32 1) call void @finch_map_missing(ptr @.str.2603, i64 1843, ptr %a21) unreachable map.found4281: %t23 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 0 %t24 = load ptr, ptr %t23 %t25 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t24, i64 %t19 %t26 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t25, i32 0, i32 2 %t27 = load %S.cimport.CStruct, ptr %t26 store %S.cimport.CStruct %t27, ptr %a28 call void @finch.copy.S_cimport_CStruct(ptr %a29, ptr %a28) %t30 = load %S.cimport.CStruct, ptr %a29 store %S.cimport.CStruct %t30, ptr %a31 %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null br i1 %t33, label %panic4285, label %ok4286 panic4285: call void @finch_panic(ptr @.str.2604, i64 1844, ptr @.str.2605) unreachable ok4286: %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 16 %t35 = load i64, ptr %a2 %t36 = load { ptr, i64, i64 }, ptr %t34 %t37 = extractvalue { ptr, i64, i64 } %t36, 1 %t38 = icmp uge i64 %t35, %t37 br i1 %t38, label %range4287, label %inrange4288 range4287: call void @finch_panic_index(ptr @.str.2606, i64 1844, i64 %t35, i64 %t37) unreachable inrange4288: %t39 = extractvalue { ptr, i64, i64 } %t36, 0 %t40 = getelementptr inbounds %S.gen.StructDef, ptr %t39, i64 %t35 %t41 = getelementptr inbounds %S.gen.StructDef, ptr %t40, i32 0, i32 15 store i64 1, ptr %t41 store i64 0, ptr %a42 store { ptr, i64, i64 } zeroinitializer, ptr %a43 %t44 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 1 store i64 0, ptr %a45 br label %each.cond4289 each.cond4289: %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = load i64, ptr %a45 %t49 = icmp slt i64 %t48, %t47 br i1 %t49, label %each.body4290, label %each.end4292 each.body4290: %t50 = load ptr, ptr %t44 %t51 = getelementptr inbounds %S.cimport.CField, ptr %t50, i64 %t48 %t52 = load %S.cimport.CField, ptr %t51 store %S.cimport.CField %t52, ptr %a53 %t54 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 5 %t55 = load i1, ptr %t54 br i1 %t55, label %then4293, label %endif4295 then4293: br label %each.step4291 endif4295: %t56 = load ptr, ptr %a1 %t57 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 1 %t58 = load %S.ast.Type, ptr %t57 %t59 = call %S.ast.Type @finch.gen.resolve(ptr %t56, %S.ast.Type %t58, %S.ast.Node zeroinitializer) store %S.ast.Type %t59, ptr %a60 %t61 = getelementptr inbounds %S.ast.Type, ptr %a60, i32 0, i32 0 %t62 = load { ptr, i64, i64 }, ptr %t61 store { ptr, i64, i64 } %t62, ptr %a63 store { ptr, i64, i64 } { ptr @.str.2607, i64 6, i64 0 }, ptr %a64 %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) %t66 = icmp ne i32 %t65, 0 br i1 %t66, label %then4296, label %endif4298 then4296: %t67 = load ptr, ptr %a1 %t68 = load ptr, ptr %a1 %t69 = getelementptr inbounds %S.ast.Type, ptr %a60, i32 0, i32 3 %t70 = load { ptr, i64, i64 }, ptr %t69 %t71 = getelementptr inbounds %S.ast.Type, ptr %a60, i32 0, i32 2 %t72 = load { ptr, i64, i64 }, ptr %t71 %t73 = call i64 @finch.gen.findStruct(ptr %t68, { ptr, i64, i64 } %t70, { ptr, i64, i64 } %t72) call void @finch.gen.resolveStruct(ptr %t67, i64 %t73) br label %endif4298 endif4298: %t74 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 %t75 = load i64, ptr %t74 %t76 = load i64, ptr %a42 %t77 = icmp sgt i64 %t75, %t76 br i1 %t77, label %then4299, label %endif4301 then4299: %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 %t79 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 %t80 = load i64, ptr %t79 %t81 = load i64, ptr %a42 %t82 = sub i64 %t80, %t81 call void @finch_str_from_int(ptr %a83, i64 %t82) %t84 = load { ptr, i64, i64 }, ptr %a83 store { ptr, i64, i64 } { ptr @.str.2608, i64 1, i64 0 }, ptr %a86 store { ptr, i64, i64 } %t84, ptr %a87 call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) store { ptr, i64, i64 } %t84, ptr %a88 call void @finch_str_drop(ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a85 store { ptr, i64, i64 } %t89, ptr %a91 store { ptr, i64, i64 } { ptr @.str.2609, i64 6, i64 0 }, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) store { ptr, i64, i64 } %t89, ptr %a93 call void @finch_str_drop(ptr %a93) %t94 = load { ptr, i64, i64 }, ptr %a90 %t95 = load i64, ptr %t78 %t96 = add i64 %t95, 1 call void @finch_arr_reserve(ptr %a43, i64 %t96, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t97 = load ptr, ptr %a43 %t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %t97, i64 %t95 store { ptr, i64, i64 } %t94, ptr %t98 store i64 %t96, ptr %t78 br label %endif4301 endif4301: %t99 = load ptr, ptr %a1 %t100 = icmp eq ptr %t99, null br i1 %t100, label %panic4302, label %ok4303 panic4302: call void @finch_panic(ptr @.str.2610, i64 1858, ptr @.str.2611) unreachable ok4303: %t101 = getelementptr inbounds %S.gen.Gen, ptr %t99, i32 0, i32 16 %t102 = load i64, ptr %a2 %t103 = load { ptr, i64, i64 }, ptr %t101 %t104 = extractvalue { ptr, i64, i64 } %t103, 1 %t105 = icmp uge i64 %t102, %t104 br i1 %t105, label %range4304, label %inrange4305 range4304: call void @finch_panic_index(ptr @.str.2612, i64 1858, i64 %t102, i64 %t104) unreachable inrange4305: %t106 = extractvalue { ptr, i64, i64 } %t103, 0 %t107 = getelementptr inbounds %S.gen.StructDef, ptr %t106, i64 %t102 %t108 = getelementptr inbounds %S.gen.StructDef, ptr %t107, i32 0, i32 11 %t109 = getelementptr inbounds { ptr, i64, i64 }, ptr %t108, i32 0, i32 1 %t110 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 0 %t111 = load { ptr, i64, i64 }, ptr %t110 store { ptr, i64, i64 } %t111, ptr %a112 call void @finch_str_copy(ptr %a113, ptr %a112) %t114 = load { ptr, i64, i64 }, ptr %a113 %t115 = load i64, ptr %t109 %t116 = add i64 %t115, 1 call void @finch_arr_reserve(ptr %t108, i64 %t116, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t117 = load ptr, ptr %t108 %t118 = getelementptr inbounds { ptr, i64, i64 }, ptr %t117, i64 %t115 store { ptr, i64, i64 } %t114, ptr %t118 store i64 %t116, ptr %t109 %t119 = load ptr, ptr %a1 %t120 = icmp eq ptr %t119, null br i1 %t120, label %panic4306, label %ok4307 panic4306: call void @finch_panic(ptr @.str.2613, i64 1859, ptr @.str.2614) unreachable ok4307: %t121 = getelementptr inbounds %S.gen.Gen, ptr %t119, i32 0, i32 16 %t122 = load i64, ptr %a2 %t123 = load { ptr, i64, i64 }, ptr %t121 %t124 = extractvalue { ptr, i64, i64 } %t123, 1 %t125 = icmp uge i64 %t122, %t124 br i1 %t125, label %range4308, label %inrange4309 range4308: call void @finch_panic_index(ptr @.str.2615, i64 1859, i64 %t122, i64 %t124) unreachable inrange4309: %t126 = extractvalue { ptr, i64, i64 } %t123, 0 %t127 = getelementptr inbounds %S.gen.StructDef, ptr %t126, i64 %t122 %t128 = getelementptr inbounds %S.gen.StructDef, ptr %t127, i32 0, i32 12 %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i32 0, i32 1 %t130 = load %S.ast.Type, ptr %a60 store %S.ast.Type %t130, ptr %a131 call void @finch.copy.S_ast_Type(ptr %a132, ptr %a131) %t133 = load %S.ast.Type, ptr %a132 %t134 = load i64, ptr %t129 %t135 = add i64 %t134, 1 call void @finch_arr_reserve(ptr %t128, i64 %t135, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t136 = load ptr, ptr %t128 %t137 = getelementptr inbounds %S.ast.Type, ptr %t136, i64 %t134 store %S.ast.Type %t133, ptr %t137 store i64 %t135, ptr %t129 %t138 = load ptr, ptr %a1 %t139 = icmp eq ptr %t138, null br i1 %t139, label %panic4310, label %ok4311 panic4310: call void @finch_panic(ptr @.str.2616, i64 1860, ptr @.str.2617) unreachable ok4311: %t140 = getelementptr inbounds %S.gen.Gen, ptr %t138, i32 0, i32 16 %t141 = load i64, ptr %a2 %t142 = load { ptr, i64, i64 }, ptr %t140 %t143 = extractvalue { ptr, i64, i64 } %t142, 1 %t144 = icmp uge i64 %t141, %t143 br i1 %t144, label %range4312, label %inrange4313 range4312: call void @finch_panic_index(ptr @.str.2618, i64 1860, i64 %t141, i64 %t143) unreachable inrange4313: %t145 = extractvalue { ptr, i64, i64 } %t142, 0 %t146 = getelementptr inbounds %S.gen.StructDef, ptr %t145, i64 %t141 %t147 = getelementptr inbounds %S.gen.StructDef, ptr %t146, i32 0, i32 3 %t148 = getelementptr inbounds { ptr, i64, i64 }, ptr %t147, i32 0, i32 1 %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 %t150 = load i64, ptr %t149 %t151 = load i64, ptr %t148 %t152 = add i64 %t151, 1 call void @finch_arr_reserve(ptr %t147, i64 %t152, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t153 = load ptr, ptr %t147 %t154 = getelementptr inbounds i64, ptr %t153, i64 %t151 store i64 %t150, ptr %t154 store i64 %t152, ptr %t148 %t155 = load ptr, ptr %a1 %t156 = icmp eq ptr %t155, null br i1 %t156, label %panic4314, label %ok4315 panic4314: call void @finch_panic(ptr @.str.2619, i64 1861, ptr @.str.2620) unreachable ok4315: %t157 = getelementptr inbounds %S.gen.Gen, ptr %t155, i32 0, i32 16 %t158 = load i64, ptr %a2 %t159 = load { ptr, i64, i64 }, ptr %t157 %t160 = extractvalue { ptr, i64, i64 } %t159, 1 %t161 = icmp uge i64 %t158, %t160 br i1 %t161, label %range4316, label %inrange4317 range4316: call void @finch_panic_index(ptr @.str.2621, i64 1861, i64 %t158, i64 %t160) unreachable inrange4317: %t162 = extractvalue { ptr, i64, i64 } %t159, 0 %t163 = getelementptr inbounds %S.gen.StructDef, ptr %t162, i64 %t158 %t164 = getelementptr inbounds %S.gen.StructDef, ptr %t163, i32 0, i32 4 %t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %t164, i32 0, i32 1 %t166 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 %t167 = load i64, ptr %t166 %t168 = load i64, ptr %t165 %t169 = add i64 %t168, 1 call void @finch_arr_reserve(ptr %t164, i64 %t169, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t170 = load ptr, ptr %t164 %t171 = getelementptr inbounds i64, ptr %t170, i64 %t168 store i64 %t167, ptr %t171 store i64 %t169, ptr %t165 %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 %t173 = load ptr, ptr %a1 %t174 = load %S.ast.Type, ptr %a60 %t175 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t173, %S.ast.Type %t174) %t176 = load i64, ptr %t172 %t177 = add i64 %t176, 1 call void @finch_arr_reserve(ptr %a43, i64 %t177, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t178 = load ptr, ptr %a43 %t179 = getelementptr inbounds { ptr, i64, i64 }, ptr %t178, i64 %t176 store { ptr, i64, i64 } %t175, ptr %t179 store i64 %t177, ptr %t172 %t180 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 %t181 = load i64, ptr %t180 %t182 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 3 %t183 = load i64, ptr %t182 %t184 = add i64 %t181, %t183 store i64 %t184, ptr %a42 call void @finch.drop.S_ast_Type(ptr %a60) br label %each.step4291 each.step4291: %t185 = load i64, ptr %a45 %t186 = add i64 %t185, 1 store i64 %t186, ptr %a45 br label %each.cond4289 each.end4292: %t187 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 %t188 = load i64, ptr %t187 %t189 = load i64, ptr %a42 %t190 = icmp sgt i64 %t188, %t189 br i1 %t190, label %then4318, label %endif4320 then4318: %t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 %t192 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 %t193 = load i64, ptr %t192 %t194 = load i64, ptr %a42 %t195 = sub i64 %t193, %t194 call void @finch_str_from_int(ptr %a196, i64 %t195) %t197 = load { ptr, i64, i64 }, ptr %a196 store { ptr, i64, i64 } { ptr @.str.2622, i64 1, i64 0 }, ptr %a199 store { ptr, i64, i64 } %t197, ptr %a200 call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200) store { ptr, i64, i64 } %t197, ptr %a201 call void @finch_str_drop(ptr %a201) %t202 = load { ptr, i64, i64 }, ptr %a198 store { ptr, i64, i64 } %t202, ptr %a204 store { ptr, i64, i64 } { ptr @.str.2623, i64 6, i64 0 }, ptr %a205 call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) store { ptr, i64, i64 } %t202, ptr %a206 call void @finch_str_drop(ptr %a206) %t207 = load { ptr, i64, i64 }, ptr %a203 %t208 = load i64, ptr %t191 %t209 = add i64 %t208, 1 call void @finch_arr_reserve(ptr %a43, i64 %t209, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t210 = load ptr, ptr %a43 %t211 = getelementptr inbounds { ptr, i64, i64 }, ptr %t210, i64 %t208 store { ptr, i64, i64 } %t207, ptr %t211 store i64 %t209, ptr %t191 br label %endif4320 endif4320: %t212 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 4 %t213 = load { ptr, i64, i64 }, ptr %t212 %t214 = load ptr, ptr %a1 %t215 = icmp eq ptr %t214, null br i1 %t215, label %panic4321, label %ok4322 panic4321: call void @finch_panic(ptr @.str.2624, i64 1868, ptr @.str.2625) unreachable ok4322: %t216 = getelementptr inbounds %S.gen.Gen, ptr %t214, i32 0, i32 16 %t217 = load i64, ptr %a2 %t218 = load { ptr, i64, i64 }, ptr %t216 %t219 = extractvalue { ptr, i64, i64 } %t218, 1 %t220 = icmp uge i64 %t217, %t219 br i1 %t220, label %range4323, label %inrange4324 range4323: call void @finch_panic_index(ptr @.str.2626, i64 1868, i64 %t217, i64 %t219) unreachable inrange4324: %t221 = extractvalue { ptr, i64, i64 } %t218, 0 %t222 = getelementptr inbounds %S.gen.StructDef, ptr %t221, i64 %t217 %t223 = getelementptr inbounds %S.gen.StructDef, ptr %t222, i32 0, i32 8 store { ptr, i64, i64 } %t213, ptr %a224 call void @finch_str_copy(ptr %a225, ptr %a224) %t226 = load { ptr, i64, i64 }, ptr %a225 %t227 = load { ptr, i64, i64 }, ptr %t223 store { ptr, i64, i64 } %t226, ptr %t223 store { ptr, i64, i64 } %t227, ptr %a228 call void @finch_str_drop(ptr %a228) %t229 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 5 %t230 = load i1, ptr %t229 br label %logic.from4325 logic.from4325: br i1 %t230, label %logic.rhs4326, label %logic.end4327 logic.rhs4326: %t231 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 4 %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t231, i32 0, i32 1 %t233 = load i64, ptr %t232 %t234 = icmp eq i64 %t233, 0 br label %logic.rend4328 logic.rend4328: br label %logic.end4327 logic.end4327: %t235 = phi i1 [ false, %logic.from4325 ], [ %t234, %logic.rend4328 ] br i1 %t235, label %then4329, label %endif4331 then4329: %t236 = load ptr, ptr %a1 %t237 = icmp eq ptr %t236, null br i1 %t237, label %panic4332, label %ok4333 panic4332: call void @finch_panic(ptr @.str.2628, i64 1870, ptr @.str.2629) unreachable ok4333: %t238 = getelementptr inbounds %S.gen.Gen, ptr %t236, i32 0, i32 16 %t239 = load i64, ptr %a2 %t240 = load { ptr, i64, i64 }, ptr %t238 %t241 = extractvalue { ptr, i64, i64 } %t240, 1 %t242 = icmp uge i64 %t239, %t241 br i1 %t242, label %range4334, label %inrange4335 range4334: call void @finch_panic_index(ptr @.str.2630, i64 1870, i64 %t239, i64 %t241) unreachable inrange4335: %t243 = extractvalue { ptr, i64, i64 } %t240, 0 %t244 = getelementptr inbounds %S.gen.StructDef, ptr %t243, i64 %t239 %t245 = getelementptr inbounds %S.gen.StructDef, ptr %t244, i32 0, i32 8 %t246 = load { ptr, i64, i64 }, ptr %t245 store { ptr, i64, i64 } { ptr @.str.2627, i64 49, i64 0 }, ptr %t245 store { ptr, i64, i64 } %t246, ptr %a247 call void @finch_str_drop(ptr %a247) br label %endif4331 endif4331: %t248 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 %t249 = load i64, ptr %t248 %t250 = load ptr, ptr %a1 %t251 = icmp eq ptr %t250, null br i1 %t251, label %panic4336, label %ok4337 panic4336: call void @finch_panic(ptr @.str.2631, i64 1872, ptr @.str.2632) unreachable ok4337: %t252 = getelementptr inbounds %S.gen.Gen, ptr %t250, i32 0, i32 16 %t253 = load i64, ptr %a2 %t254 = load { ptr, i64, i64 }, ptr %t252 %t255 = extractvalue { ptr, i64, i64 } %t254, 1 %t256 = icmp uge i64 %t253, %t255 br i1 %t256, label %range4338, label %inrange4339 range4338: call void @finch_panic_index(ptr @.str.2633, i64 1872, i64 %t253, i64 %t255) unreachable inrange4339: %t257 = extractvalue { ptr, i64, i64 } %t254, 0 %t258 = getelementptr inbounds %S.gen.StructDef, ptr %t257, i64 %t253 %t259 = getelementptr inbounds %S.gen.StructDef, ptr %t258, i32 0, i32 9 store i64 %t249, ptr %t259 %t260 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 3 %t261 = load i64, ptr %t260 %t262 = load ptr, ptr %a1 %t263 = icmp eq ptr %t262, null br i1 %t263, label %panic4340, label %ok4341 panic4340: call void @finch_panic(ptr @.str.2634, i64 1873, ptr @.str.2635) unreachable ok4341: %t264 = getelementptr inbounds %S.gen.Gen, ptr %t262, i32 0, i32 16 %t265 = load i64, ptr %a2 %t266 = load { ptr, i64, i64 }, ptr %t264 %t267 = extractvalue { ptr, i64, i64 } %t266, 1 %t268 = icmp uge i64 %t265, %t267 br i1 %t268, label %range4342, label %inrange4343 range4342: call void @finch_panic_index(ptr @.str.2636, i64 1873, i64 %t265, i64 %t267) unreachable inrange4343: %t269 = extractvalue { ptr, i64, i64 } %t266, 0 %t270 = getelementptr inbounds %S.gen.StructDef, ptr %t269, i64 %t265 %t271 = getelementptr inbounds %S.gen.StructDef, ptr %t270, i32 0, i32 10 store i64 %t261, ptr %t271 %t272 = load ptr, ptr %a1 %t273 = icmp eq ptr %t272, null br i1 %t273, label %panic4344, label %ok4345 panic4344: call void @finch_panic(ptr @.str.2637, i64 1874, ptr @.str.2638) unreachable ok4345: %t274 = getelementptr inbounds %S.gen.Gen, ptr %t272, i32 0, i32 16 %t275 = load i64, ptr %a2 %t276 = load { ptr, i64, i64 }, ptr %t274 %t277 = extractvalue { ptr, i64, i64 } %t276, 1 %t278 = icmp uge i64 %t275, %t277 br i1 %t278, label %range4346, label %inrange4347 range4346: call void @finch_panic_index(ptr @.str.2639, i64 1874, i64 %t275, i64 %t277) unreachable inrange4347: %t279 = extractvalue { ptr, i64, i64 } %t276, 0 %t280 = getelementptr inbounds %S.gen.StructDef, ptr %t279, i64 %t275 %t281 = getelementptr inbounds %S.gen.StructDef, ptr %t280, i32 0, i32 15 store i64 2, ptr %t281 %t282 = load ptr, ptr %a1 %t283 = icmp eq ptr %t282, null br i1 %t283, label %panic4348, label %ok4349 panic4348: call void @finch_panic(ptr @.str.2640, i64 1875, ptr @.str.2641) unreachable ok4349: %t284 = getelementptr inbounds %S.gen.Gen, ptr %t282, i32 0, i32 2 %t285 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i32 0, i32 1 %t286 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 0 %t287 = load { ptr, i64, i64 }, ptr %t286 store { ptr, i64, i64 } { ptr @.str.2642, i64 5, i64 0 }, ptr %a289 store { ptr, i64, i64 } %t287, ptr %a290 call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) %t291 = load { ptr, i64, i64 }, ptr %a288 store { ptr, i64, i64 } %t291, ptr %a293 store { ptr, i64, i64 } { ptr @.str.2643, i64 10, i64 0 }, ptr %a294 call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) store { ptr, i64, i64 } %t291, ptr %a295 call void @finch_str_drop(ptr %a295) %t296 = load { ptr, i64, i64 }, ptr %a292 %t297 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2644, i64 2, i64 0 }, ptr %a298 call void @finch_str_join(ptr %a299, ptr %a43, ptr %a298) %t300 = load { ptr, i64, i64 }, ptr %a299 store { ptr, i64, i64 } %t296, ptr %a302 store { ptr, i64, i64 } %t300, ptr %a303 call void @finch_str_concat(ptr %a301, ptr %a302, ptr %a303) store { ptr, i64, i64 } %t296, ptr %a304 call void @finch_str_drop(ptr %a304) store { ptr, i64, i64 } %t300, ptr %a305 call void @finch_str_drop(ptr %a305) %t306 = load { ptr, i64, i64 }, ptr %a301 store { ptr, i64, i64 } %t306, ptr %a308 store { ptr, i64, i64 } { ptr @.str.2645, i64 2, i64 0 }, ptr %a309 call void @finch_str_concat(ptr %a307, ptr %a308, ptr %a309) store { ptr, i64, i64 } %t306, ptr %a310 call void @finch_str_drop(ptr %a310) %t311 = load { ptr, i64, i64 }, ptr %a307 %t312 = load i64, ptr %t285 %t313 = add i64 %t312, 1 call void @finch_arr_reserve(ptr %t284, i64 %t313, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t314 = load ptr, ptr %t284 %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 %t312 store { ptr, i64, i64 } %t311, ptr %t315 store i64 %t313, ptr %t285 call void @finch.drop.arr_str(ptr %a43) call void @finch.drop.S_cimport_CStruct(ptr %a31) ret void } define internal void @finch.gen.resolveStruct(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic4350, label %ok4351 panic4350: call void @finch_panic(ptr @.str.2646, i64 1879, ptr @.str.2647) unreachable ok4351: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 16 %t6 = load i64, ptr %a2 %t7 = load { ptr, i64, i64 }, ptr %t5 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 %t6, %t8 br i1 %t9, label %range4352, label %inrange4353 range4352: call void @finch_panic_index(ptr @.str.2648, i64 1879, i64 %t6, i64 %t8) unreachable inrange4353: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.gen.StructDef, ptr %t10, i64 %t6 %t12 = getelementptr inbounds %S.gen.StructDef, ptr %t11, i32 0, i32 15 %t13 = load i64, ptr %t12 %t14 = icmp eq i64 %t13, 2 br i1 %t14, label %then4354, label %endif4356 then4354: ret void endif4356: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic4357, label %ok4358 panic4357: call void @finch_panic(ptr @.str.2649, i64 1882, ptr @.str.2650) unreachable ok4358: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 16 %t18 = load i64, ptr %a2 %t19 = load { ptr, i64, i64 }, ptr %t17 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 br i1 %t21, label %range4359, label %inrange4360 range4359: call void @finch_panic_index(ptr @.str.2651, i64 1882, i64 %t18, i64 %t20) unreachable inrange4360: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds %S.gen.StructDef, ptr %t22, i64 %t18 %t24 = getelementptr inbounds %S.gen.StructDef, ptr %t23, i32 0, i32 2 %t25 = load i1, ptr %t24 br i1 %t25, label %then4361, label %endif4363 then4361: %t26 = load ptr, ptr %a1 %t27 = load i64, ptr %a2 call void @finch.gen.resolveCStruct(ptr %t26, i64 %t27) ret void endif4363: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic4364, label %ok4365 panic4364: call void @finch_panic(ptr @.str.2652, i64 1886, ptr @.str.2653) unreachable ok4365: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 16 %t31 = load i64, ptr %a2 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 br i1 %t34, label %range4366, label %inrange4367 range4366: call void @finch_panic_index(ptr @.str.2654, i64 1886, i64 %t31, i64 %t33) unreachable inrange4367: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.StructDef, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.StructDef, ptr %t36, i32 0, i32 5 %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i32 0, i32 1 %t39 = load i64, ptr %t38 %t40 = icmp eq i64 %t39, 0 br i1 %t40, label %then4368, label %endif4370 then4368: %t41 = load ptr, ptr %a1 %t42 = load i64, ptr %a2 call void @finch.gen.resolveStructBody(ptr %t41, i64 %t42) ret void endif4370: %t43 = load ptr, ptr %a1 %t44 = icmp eq ptr %t43, null br i1 %t44, label %panic4371, label %ok4372 panic4371: call void @finch_panic(ptr @.str.2655, i64 1891, ptr @.str.2656) unreachable ok4372: %t45 = getelementptr inbounds %S.gen.Gen, ptr %t43, i32 0, i32 18 %t46 = load { ptr, i64, i64 }, ptr %t45 store { ptr, i64, i64 } %t46, ptr %a47 call void @finch.copy.arr_str(ptr %a48, ptr %a47) %t49 = load { ptr, i64, i64 }, ptr %a48 store { ptr, i64, i64 } %t49, ptr %a50 %t51 = load ptr, ptr %a1 %t52 = icmp eq ptr %t51, null br i1 %t52, label %panic4373, label %ok4374 panic4373: call void @finch_panic(ptr @.str.2657, i64 1892, ptr @.str.2658) unreachable ok4374: %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 19 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t54, ptr %a55 call void @finch.copy.arr_S_ast_Type(ptr %a56, ptr %a55) %t57 = load { ptr, i64, i64 }, ptr %a56 store { ptr, i64, i64 } %t57, ptr %a58 %t59 = load ptr, ptr %a1 %t60 = icmp eq ptr %t59, null br i1 %t60, label %panic4375, label %ok4376 panic4375: call void @finch_panic(ptr @.str.2659, i64 1893, ptr @.str.2660) unreachable ok4376: %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 20 %t62 = load { ptr, i64, i64 }, ptr %t61 store { ptr, i64, i64 } %t62, ptr %a63 call void @finch_str_copy(ptr %a64, ptr %a63) %t65 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } %t65, ptr %a66 %t67 = load ptr, ptr %a1 %t68 = icmp eq ptr %t67, null br i1 %t68, label %panic4377, label %ok4378 panic4377: call void @finch_panic(ptr @.str.2661, i64 1894, ptr @.str.2662) unreachable ok4378: %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 16 %t70 = load i64, ptr %a2 %t71 = load { ptr, i64, i64 }, ptr %t69 %t72 = extractvalue { ptr, i64, i64 } %t71, 1 %t73 = icmp uge i64 %t70, %t72 br i1 %t73, label %range4379, label %inrange4380 range4379: call void @finch_panic_index(ptr @.str.2663, i64 1894, i64 %t70, i64 %t72) unreachable inrange4380: %t74 = extractvalue { ptr, i64, i64 } %t71, 0 %t75 = getelementptr inbounds %S.gen.StructDef, ptr %t74, i64 %t70 %t76 = getelementptr inbounds %S.gen.StructDef, ptr %t75, i32 0, i32 6 %t77 = load { ptr, i64, i64 }, ptr %t76 %t78 = load ptr, ptr %a1 %t79 = icmp eq ptr %t78, null br i1 %t79, label %panic4381, label %ok4382 panic4381: call void @finch_panic(ptr @.str.2664, i64 1894, ptr @.str.2665) unreachable ok4382: %t80 = getelementptr inbounds %S.gen.Gen, ptr %t78, i32 0, i32 18 store { ptr, i64, i64 } %t77, ptr %a81 call void @finch.copy.arr_str(ptr %a82, ptr %a81) %t83 = load { ptr, i64, i64 }, ptr %a82 %t84 = load { ptr, i64, i64 }, ptr %t80 store { ptr, i64, i64 } %t83, ptr %t80 store { ptr, i64, i64 } %t84, ptr %a85 call void @finch.drop.arr_str(ptr %a85) %t86 = load ptr, ptr %a1 %t87 = icmp eq ptr %t86, null br i1 %t87, label %panic4383, label %ok4384 panic4383: call void @finch_panic(ptr @.str.2666, i64 1895, ptr @.str.2667) unreachable ok4384: %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 16 %t89 = load i64, ptr %a2 %t90 = load { ptr, i64, i64 }, ptr %t88 %t91 = extractvalue { ptr, i64, i64 } %t90, 1 %t92 = icmp uge i64 %t89, %t91 br i1 %t92, label %range4385, label %inrange4386 range4385: call void @finch_panic_index(ptr @.str.2668, i64 1895, i64 %t89, i64 %t91) unreachable inrange4386: %t93 = extractvalue { ptr, i64, i64 } %t90, 0 %t94 = getelementptr inbounds %S.gen.StructDef, ptr %t93, i64 %t89 %t95 = getelementptr inbounds %S.gen.StructDef, ptr %t94, i32 0, i32 7 %t96 = load { ptr, i64, i64 }, ptr %t95 %t97 = load ptr, ptr %a1 %t98 = icmp eq ptr %t97, null br i1 %t98, label %panic4387, label %ok4388 panic4387: call void @finch_panic(ptr @.str.2669, i64 1895, ptr @.str.2670) unreachable ok4388: %t99 = getelementptr inbounds %S.gen.Gen, ptr %t97, i32 0, i32 19 store { ptr, i64, i64 } %t96, ptr %a100 call void @finch.copy.arr_S_ast_Type(ptr %a101, ptr %a100) %t102 = load { ptr, i64, i64 }, ptr %a101 %t103 = load { ptr, i64, i64 }, ptr %t99 store { ptr, i64, i64 } %t102, ptr %t99 store { ptr, i64, i64 } %t103, ptr %a104 call void @finch.drop.arr_S_ast_Type(ptr %a104) %t105 = load ptr, ptr %a1 %t106 = icmp eq ptr %t105, null br i1 %t106, label %panic4389, label %ok4390 panic4389: call void @finch_panic(ptr @.str.2672, i64 1896, ptr @.str.2673) unreachable ok4390: %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 16 %t108 = load i64, ptr %a2 %t109 = load { ptr, i64, i64 }, ptr %t107 %t110 = extractvalue { ptr, i64, i64 } %t109, 1 %t111 = icmp uge i64 %t108, %t110 br i1 %t111, label %range4391, label %inrange4392 range4391: call void @finch_panic_index(ptr @.str.2674, i64 1896, i64 %t108, i64 %t110) unreachable inrange4392: %t112 = extractvalue { ptr, i64, i64 } %t109, 0 %t113 = getelementptr inbounds %S.gen.StructDef, ptr %t112, i64 %t108 %t114 = getelementptr inbounds %S.gen.StructDef, ptr %t113, i32 0, i32 1 %t115 = load { ptr, i64, i64 }, ptr %t114 store { ptr, i64, i64 } { ptr @.str.2671, i64 17, i64 0 }, ptr %a117 store { ptr, i64, i64 } %t115, ptr %a118 call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a116 store { ptr, i64, i64 } %t119, ptr %a121 store { ptr, i64, i64 } { ptr @.str.2675, i64 1, i64 0 }, ptr %a122 call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) store { ptr, i64, i64 } %t119, ptr %a123 call void @finch_str_drop(ptr %a123) %t124 = load { ptr, i64, i64 }, ptr %a120 %t125 = load ptr, ptr %a1 %t126 = icmp eq ptr %t125, null br i1 %t126, label %panic4393, label %ok4394 panic4393: call void @finch_panic(ptr @.str.2676, i64 1896, ptr @.str.2677) unreachable ok4394: %t127 = getelementptr inbounds %S.gen.Gen, ptr %t125, i32 0, i32 20 %t128 = load { ptr, i64, i64 }, ptr %t127 store { ptr, i64, i64 } %t124, ptr %t127 store { ptr, i64, i64 } %t128, ptr %a129 call void @finch_str_drop(ptr %a129) %t130 = load ptr, ptr %a1 %t131 = load i64, ptr %a2 call void @finch.gen.resolveStructBody(ptr %t130, i64 %t131) %t132 = load { ptr, i64, i64 }, ptr %a50 %t133 = load ptr, ptr %a1 %t134 = icmp eq ptr %t133, null br i1 %t134, label %panic4395, label %ok4396 panic4395: call void @finch_panic(ptr @.str.2678, i64 1898, ptr @.str.2679) unreachable ok4396: %t135 = getelementptr inbounds %S.gen.Gen, ptr %t133, i32 0, i32 18 store { ptr, i64, i64 } %t132, ptr %a136 call void @finch.copy.arr_str(ptr %a137, ptr %a136) %t138 = load { ptr, i64, i64 }, ptr %a137 %t139 = load { ptr, i64, i64 }, ptr %t135 store { ptr, i64, i64 } %t138, ptr %t135 store { ptr, i64, i64 } %t139, ptr %a140 call void @finch.drop.arr_str(ptr %a140) %t141 = load { ptr, i64, i64 }, ptr %a58 %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null br i1 %t143, label %panic4397, label %ok4398 panic4397: call void @finch_panic(ptr @.str.2680, i64 1899, ptr @.str.2681) unreachable ok4398: %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 19 store { ptr, i64, i64 } %t141, ptr %a145 call void @finch.copy.arr_S_ast_Type(ptr %a146, ptr %a145) %t147 = load { ptr, i64, i64 }, ptr %a146 %t148 = load { ptr, i64, i64 }, ptr %t144 store { ptr, i64, i64 } %t147, ptr %t144 store { ptr, i64, i64 } %t148, ptr %a149 call void @finch.drop.arr_S_ast_Type(ptr %a149) %t150 = load { ptr, i64, i64 }, ptr %a66 %t151 = load ptr, ptr %a1 %t152 = icmp eq ptr %t151, null br i1 %t152, label %panic4399, label %ok4400 panic4399: call void @finch_panic(ptr @.str.2682, i64 1900, ptr @.str.2683) unreachable ok4400: %t153 = getelementptr inbounds %S.gen.Gen, ptr %t151, i32 0, i32 20 store { ptr, i64, i64 } %t150, ptr %a154 call void @finch_str_copy(ptr %a155, ptr %a154) %t156 = load { ptr, i64, i64 }, ptr %a155 %t157 = load { ptr, i64, i64 }, ptr %t153 store { ptr, i64, i64 } %t156, ptr %t153 store { ptr, i64, i64 } %t157, ptr %a158 call void @finch_str_drop(ptr %a158) call void @finch_str_drop(ptr %a66) call void @finch.drop.arr_S_ast_Type(ptr %a58) call void @finch.drop.arr_str(ptr %a50) ret void } define internal void @finch.gen.resolveStructBody(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a40 = alloca %S.ast.Node, align 16 %a41 = alloca %S.ast.Node, align 16 %a43 = alloca %S.ast.Node, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca i1, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca i64, align 16 %a142 = alloca %S.ast.Node, align 16 %a148 = alloca %S.ast.Type, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca %S.ast.Type, align 16 %a222 = alloca %S.ast.Type, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic4401, label %ok4402 panic4401: call void @finch_panic(ptr @.str.2684, i64 1904, ptr @.str.2685) unreachable ok4402: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic4403, label %ok4404 panic4403: call void @finch_panic(ptr @.str.2686, i64 1904, ptr @.str.2687) unreachable ok4404: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 16 %t9 = load i64, ptr %a2 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 br i1 %t12, label %range4405, label %inrange4406 range4405: call void @finch_panic_index(ptr @.str.2688, i64 1904, i64 %t9, i64 %t11) unreachable inrange4406: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.StructDef, ptr %t13, i64 %t9 %t15 = getelementptr inbounds %S.gen.StructDef, ptr %t14, i32 0, i32 13 %t16 = load i64, ptr %t15 %t17 = load { ptr, i64, i64 }, ptr %t5 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 %t16, %t18 br i1 %t19, label %range4407, label %inrange4408 range4407: call void @finch_panic_index(ptr @.str.2689, i64 1904, i64 %t16, i64 %t18) unreachable inrange4408: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.ast.Program, ptr %t20, i64 %t16 %t22 = getelementptr inbounds %S.ast.Program, ptr %t21, i32 0, i32 6 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null br i1 %t24, label %panic4409, label %ok4410 panic4409: call void @finch_panic(ptr @.str.2690, i64 1904, ptr @.str.2691) unreachable ok4410: %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 16 %t26 = load i64, ptr %a2 %t27 = load { ptr, i64, i64 }, ptr %t25 %t28 = extractvalue { ptr, i64, i64 } %t27, 1 %t29 = icmp uge i64 %t26, %t28 br i1 %t29, label %range4411, label %inrange4412 range4411: call void @finch_panic_index(ptr @.str.2692, i64 1904, i64 %t26, i64 %t28) unreachable inrange4412: %t30 = extractvalue { ptr, i64, i64 } %t27, 0 %t31 = getelementptr inbounds %S.gen.StructDef, ptr %t30, i64 %t26 %t32 = getelementptr inbounds %S.gen.StructDef, ptr %t31, i32 0, i32 14 %t33 = load i64, ptr %t32 %t34 = load { ptr, i64, i64 }, ptr %t22 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp uge i64 %t33, %t35 br i1 %t36, label %range4413, label %inrange4414 range4413: call void @finch_panic_index(ptr @.str.2693, i64 1904, i64 %t33, i64 %t35) unreachable inrange4414: %t37 = extractvalue { ptr, i64, i64 } %t34, 0 %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t33 %t39 = load %S.ast.Node, ptr %t38 store %S.ast.Node %t39, ptr %a40 call void @finch.copy.S_ast_Node(ptr %a41, ptr %a40) %t42 = load %S.ast.Node, ptr %a41 store %S.ast.Node %t42, ptr %a43 %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null br i1 %t45, label %panic4415, label %ok4416 panic4415: call void @finch_panic(ptr @.str.2694, i64 1905, ptr @.str.2695) unreachable ok4416: %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 16 %t47 = load i64, ptr %a2 %t48 = load { ptr, i64, i64 }, ptr %t46 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 br i1 %t50, label %range4417, label %inrange4418 range4417: call void @finch_panic_index(ptr @.str.2696, i64 1905, i64 %t47, i64 %t49) unreachable inrange4418: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds %S.gen.StructDef, ptr %t51, i64 %t47 %t53 = getelementptr inbounds %S.gen.StructDef, ptr %t52, i32 0, i32 15 %t54 = load i64, ptr %t53 %t55 = icmp eq i64 %t54, 1 br i1 %t55, label %then4419, label %endif4421 then4419: %t56 = load ptr, ptr %a1 %t57 = load %S.ast.Node, ptr %a43 %t58 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 %t59 = load { ptr, i64, i64 }, ptr %t58 store { ptr, i64, i64 } { ptr @.str.2697, i64 11, i64 0 }, ptr %a61 store { ptr, i64, i64 } %t59, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a60 store { ptr, i64, i64 } %t63, ptr %a65 store { ptr, i64, i64 } { ptr @.str.2698, i64 26, i64 0 }, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) store { ptr, i64, i64 } %t63, ptr %a67 call void @finch_str_drop(ptr %a67) %t68 = load { ptr, i64, i64 }, ptr %a64 %t69 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 %t70 = load { ptr, i64, i64 }, ptr %t69 store { ptr, i64, i64 } %t68, ptr %a72 store { ptr, i64, i64 } %t70, ptr %a73 call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) store { ptr, i64, i64 } %t68, ptr %a74 call void @finch_str_drop(ptr %a74) %t75 = load { ptr, i64, i64 }, ptr %a71 store { ptr, i64, i64 } %t75, ptr %a77 store { ptr, i64, i64 } { ptr @.str.2699, i64 7, i64 0 }, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) store { ptr, i64, i64 } %t75, ptr %a79 call void @finch_str_drop(ptr %a79) %t80 = load { ptr, i64, i64 }, ptr %a76 %t81 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 %t82 = load { ptr, i64, i64 }, ptr %t81 store { ptr, i64, i64 } %t80, ptr %a84 store { ptr, i64, i64 } %t82, ptr %a85 call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) store { ptr, i64, i64 } %t80, ptr %a86 call void @finch_str_drop(ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a83 store { ptr, i64, i64 } %t87, ptr %a89 store { ptr, i64, i64 } { ptr @.str.2700, i64 15, i64 0 }, ptr %a90 call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) store { ptr, i64, i64 } %t87, ptr %a91 call void @finch_str_drop(ptr %a91) %t92 = load { ptr, i64, i64 }, ptr %a88 call void @finch.gen.fail(ptr %t56, %S.ast.Node %t57, { ptr, i64, i64 } %t92) store { ptr, i64, i64 } %t92, ptr %a93 call void @finch_str_drop(ptr %a93) br label %endif4421 endif4421: %t94 = load ptr, ptr %a1 %t95 = icmp eq ptr %t94, null br i1 %t95, label %panic4422, label %ok4423 panic4422: call void @finch_panic(ptr @.str.2701, i64 1908, ptr @.str.2702) unreachable ok4423: %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 16 %t97 = load i64, ptr %a2 %t98 = load { ptr, i64, i64 }, ptr %t96 %t99 = extractvalue { ptr, i64, i64 } %t98, 1 %t100 = icmp uge i64 %t97, %t99 br i1 %t100, label %range4424, label %inrange4425 range4424: call void @finch_panic_index(ptr @.str.2703, i64 1908, i64 %t97, i64 %t99) unreachable inrange4425: %t101 = extractvalue { ptr, i64, i64 } %t98, 0 %t102 = getelementptr inbounds %S.gen.StructDef, ptr %t101, i64 %t97 %t103 = getelementptr inbounds %S.gen.StructDef, ptr %t102, i32 0, i32 15 store i64 1, ptr %t103 %t104 = load ptr, ptr %a1 %t105 = icmp eq ptr %t104, null br i1 %t105, label %panic4426, label %ok4427 panic4426: call void @finch_panic(ptr @.str.2704, i64 1909, ptr @.str.2705) unreachable ok4427: %t106 = getelementptr inbounds %S.gen.Gen, ptr %t104, i32 0, i32 14 %t107 = load { ptr, i64, i64 }, ptr %t106 store { ptr, i64, i64 } %t107, ptr %a108 call void @finch_str_copy(ptr %a109, ptr %a108) %t110 = load { ptr, i64, i64 }, ptr %a109 store { ptr, i64, i64 } %t110, ptr %a111 %t112 = load ptr, ptr %a1 %t113 = icmp eq ptr %t112, null br i1 %t113, label %panic4428, label %ok4429 panic4428: call void @finch_panic(ptr @.str.2706, i64 1910, ptr @.str.2707) unreachable ok4429: %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 16 %t115 = load i64, ptr %a2 %t116 = load { ptr, i64, i64 }, ptr %t114 %t117 = extractvalue { ptr, i64, i64 } %t116, 1 %t118 = icmp uge i64 %t115, %t117 br i1 %t118, label %range4430, label %inrange4431 range4430: call void @finch_panic_index(ptr @.str.2708, i64 1910, i64 %t115, i64 %t117) unreachable inrange4431: %t119 = extractvalue { ptr, i64, i64 } %t116, 0 %t120 = getelementptr inbounds %S.gen.StructDef, ptr %t119, i64 %t115 %t121 = getelementptr inbounds %S.gen.StructDef, ptr %t120, i32 0, i32 0 %t122 = load { ptr, i64, i64 }, ptr %t121 %t123 = load ptr, ptr %a1 %t124 = icmp eq ptr %t123, null br i1 %t124, label %panic4432, label %ok4433 panic4432: call void @finch_panic(ptr @.str.2709, i64 1910, ptr @.str.2710) unreachable ok4433: %t125 = getelementptr inbounds %S.gen.Gen, ptr %t123, i32 0, i32 14 store { ptr, i64, i64 } %t122, ptr %a126 call void @finch_str_copy(ptr %a127, ptr %a126) %t128 = load { ptr, i64, i64 }, ptr %a127 %t129 = load { ptr, i64, i64 }, ptr %t125 store { ptr, i64, i64 } %t128, ptr %t125 store { ptr, i64, i64 } %t129, ptr %a130 call void @finch_str_drop(ptr %a130) store i1 false, ptr %a131 store { ptr, i64, i64 } zeroinitializer, ptr %a132 %t133 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 9 store i64 0, ptr %a134 br label %each.cond4434 each.cond4434: %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 %t136 = load i64, ptr %t135 %t137 = load i64, ptr %a134 %t138 = icmp slt i64 %t137, %t136 br i1 %t138, label %each.body4435, label %each.end4437 each.body4435: %t139 = load ptr, ptr %t133 %t140 = getelementptr inbounds %S.ast.Node, ptr %t139, i64 %t137 %t141 = load %S.ast.Node, ptr %t140 store %S.ast.Node %t141, ptr %a142 %t143 = load ptr, ptr %a1 %t144 = getelementptr inbounds %S.ast.Node, ptr %a142, i32 0, i32 5 %t145 = load %S.ast.Type, ptr %t144 %t146 = load %S.ast.Node, ptr %a142 %t147 = call %S.ast.Type @finch.gen.resolve(ptr %t143, %S.ast.Type %t145, %S.ast.Node %t146) store %S.ast.Type %t147, ptr %a148 %t149 = getelementptr inbounds %S.ast.Type, ptr %a148, i32 0, i32 0 %t150 = load { ptr, i64, i64 }, ptr %t149 store { ptr, i64, i64 } %t150, ptr %a151 store { ptr, i64, i64 } { ptr @.str.2711, i64 6, i64 0 }, ptr %a152 %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) %t154 = icmp ne i32 %t153, 0 br i1 %t154, label %then4438, label %endif4440 then4438: %t155 = load ptr, ptr %a1 %t156 = load ptr, ptr %a1 %t157 = getelementptr inbounds %S.ast.Type, ptr %a148, i32 0, i32 3 %t158 = load { ptr, i64, i64 }, ptr %t157 %t159 = getelementptr inbounds %S.ast.Type, ptr %a148, i32 0, i32 2 %t160 = load { ptr, i64, i64 }, ptr %t159 %t161 = call i64 @finch.gen.findStruct(ptr %t156, { ptr, i64, i64 } %t158, { ptr, i64, i64 } %t160) call void @finch.gen.resolveStruct(ptr %t155, i64 %t161) br label %endif4440 endif4440: %t162 = load ptr, ptr %a1 %t163 = icmp eq ptr %t162, null br i1 %t163, label %panic4441, label %ok4442 panic4441: call void @finch_panic(ptr @.str.2712, i64 1918, ptr @.str.2713) unreachable ok4442: %t164 = getelementptr inbounds %S.gen.Gen, ptr %t162, i32 0, i32 16 %t165 = load i64, ptr %a2 %t166 = load { ptr, i64, i64 }, ptr %t164 %t167 = extractvalue { ptr, i64, i64 } %t166, 1 %t168 = icmp uge i64 %t165, %t167 br i1 %t168, label %range4443, label %inrange4444 range4443: call void @finch_panic_index(ptr @.str.2714, i64 1918, i64 %t165, i64 %t167) unreachable inrange4444: %t169 = extractvalue { ptr, i64, i64 } %t166, 0 %t170 = getelementptr inbounds %S.gen.StructDef, ptr %t169, i64 %t165 %t171 = getelementptr inbounds %S.gen.StructDef, ptr %t170, i32 0, i32 3 %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %t171, i32 0, i32 1 %t173 = load ptr, ptr %a1 %t174 = icmp eq ptr %t173, null br i1 %t174, label %panic4445, label %ok4446 panic4445: call void @finch_panic(ptr @.str.2715, i64 1918, ptr @.str.2716) unreachable ok4446: %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 16 %t176 = load i64, ptr %a2 %t177 = load { ptr, i64, i64 }, ptr %t175 %t178 = extractvalue { ptr, i64, i64 } %t177, 1 %t179 = icmp uge i64 %t176, %t178 br i1 %t179, label %range4447, label %inrange4448 range4447: call void @finch_panic_index(ptr @.str.2717, i64 1918, i64 %t176, i64 %t178) unreachable inrange4448: %t180 = extractvalue { ptr, i64, i64 } %t177, 0 %t181 = getelementptr inbounds %S.gen.StructDef, ptr %t180, i64 %t176 %t182 = getelementptr inbounds %S.gen.StructDef, ptr %t181, i32 0, i32 11 %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i32 0, i32 1 %t184 = load i64, ptr %t183 %t185 = load i64, ptr %t172 %t186 = add i64 %t185, 1 call void @finch_arr_reserve(ptr %t171, i64 %t186, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t187 = load ptr, ptr %t171 %t188 = getelementptr inbounds i64, ptr %t187, i64 %t185 store i64 %t184, ptr %t188 store i64 %t186, ptr %t172 %t189 = load ptr, ptr %a1 %t190 = icmp eq ptr %t189, null br i1 %t190, label %panic4449, label %ok4450 panic4449: call void @finch_panic(ptr @.str.2718, i64 1919, ptr @.str.2719) unreachable ok4450: %t191 = getelementptr inbounds %S.gen.Gen, ptr %t189, i32 0, i32 16 %t192 = load i64, ptr %a2 %t193 = load { ptr, i64, i64 }, ptr %t191 %t194 = extractvalue { ptr, i64, i64 } %t193, 1 %t195 = icmp uge i64 %t192, %t194 br i1 %t195, label %range4451, label %inrange4452 range4451: call void @finch_panic_index(ptr @.str.2720, i64 1919, i64 %t192, i64 %t194) unreachable inrange4452: %t196 = extractvalue { ptr, i64, i64 } %t193, 0 %t197 = getelementptr inbounds %S.gen.StructDef, ptr %t196, i64 %t192 %t198 = getelementptr inbounds %S.gen.StructDef, ptr %t197, i32 0, i32 11 %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t198, i32 0, i32 1 %t200 = getelementptr inbounds %S.ast.Node, ptr %a142, i32 0, i32 1 %t201 = load { ptr, i64, i64 }, ptr %t200 store { ptr, i64, i64 } %t201, ptr %a202 call void @finch_str_copy(ptr %a203, ptr %a202) %t204 = load { ptr, i64, i64 }, ptr %a203 %t205 = load i64, ptr %t199 %t206 = add i64 %t205, 1 call void @finch_arr_reserve(ptr %t198, i64 %t206, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t207 = load ptr, ptr %t198 %t208 = getelementptr inbounds { ptr, i64, i64 }, ptr %t207, i64 %t205 store { ptr, i64, i64 } %t204, ptr %t208 store i64 %t206, ptr %t199 %t209 = load ptr, ptr %a1 %t210 = icmp eq ptr %t209, null br i1 %t210, label %panic4453, label %ok4454 panic4453: call void @finch_panic(ptr @.str.2721, i64 1920, ptr @.str.2722) unreachable ok4454: %t211 = getelementptr inbounds %S.gen.Gen, ptr %t209, i32 0, i32 16 %t212 = load i64, ptr %a2 %t213 = load { ptr, i64, i64 }, ptr %t211 %t214 = extractvalue { ptr, i64, i64 } %t213, 1 %t215 = icmp uge i64 %t212, %t214 br i1 %t215, label %range4455, label %inrange4456 range4455: call void @finch_panic_index(ptr @.str.2723, i64 1920, i64 %t212, i64 %t214) unreachable inrange4456: %t216 = extractvalue { ptr, i64, i64 } %t213, 0 %t217 = getelementptr inbounds %S.gen.StructDef, ptr %t216, i64 %t212 %t218 = getelementptr inbounds %S.gen.StructDef, ptr %t217, i32 0, i32 12 %t219 = getelementptr inbounds { ptr, i64, i64 }, ptr %t218, i32 0, i32 1 %t220 = load %S.ast.Type, ptr %a148 store %S.ast.Type %t220, ptr %a221 call void @finch.copy.S_ast_Type(ptr %a222, ptr %a221) %t223 = load %S.ast.Type, ptr %a222 %t224 = load i64, ptr %t219 %t225 = add i64 %t224, 1 call void @finch_arr_reserve(ptr %t218, i64 %t225, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t226 = load ptr, ptr %t218 %t227 = getelementptr inbounds %S.ast.Type, ptr %t226, i64 %t224 store %S.ast.Type %t223, ptr %t227 store i64 %t225, ptr %t219 %t228 = load ptr, ptr %a1 %t229 = load %S.ast.Type, ptr %a148 %t230 = call i1 @finch.gen.owning(ptr %t228, %S.ast.Type %t229) br i1 %t230, label %then4457, label %endif4459 then4457: store i1 true, ptr %a131 br label %endif4459 endif4459: %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 %t232 = load ptr, ptr %a1 %t233 = load %S.ast.Type, ptr %a148 %t234 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t232, %S.ast.Type %t233) %t235 = load i64, ptr %t231 %t236 = add i64 %t235, 1 call void @finch_arr_reserve(ptr %a132, i64 %t236, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t237 = load ptr, ptr %a132 %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 %t235 store { ptr, i64, i64 } %t234, ptr %t238 store i64 %t236, ptr %t231 call void @finch.drop.S_ast_Type(ptr %a148) br label %each.step4436 each.step4436: %t239 = load i64, ptr %a134 %t240 = add i64 %t239, 1 store i64 %t240, ptr %a134 br label %each.cond4434 each.end4437: %t241 = load i1, ptr %a131 %t242 = load ptr, ptr %a1 %t243 = icmp eq ptr %t242, null br i1 %t243, label %panic4460, label %ok4461 panic4460: call void @finch_panic(ptr @.str.2724, i64 1926, ptr @.str.2725) unreachable ok4461: %t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 16 %t245 = load i64, ptr %a2 %t246 = load { ptr, i64, i64 }, ptr %t244 %t247 = extractvalue { ptr, i64, i64 } %t246, 1 %t248 = icmp uge i64 %t245, %t247 br i1 %t248, label %range4462, label %inrange4463 range4462: call void @finch_panic_index(ptr @.str.2726, i64 1926, i64 %t245, i64 %t247) unreachable inrange4463: %t249 = extractvalue { ptr, i64, i64 } %t246, 0 %t250 = getelementptr inbounds %S.gen.StructDef, ptr %t249, i64 %t245 %t251 = getelementptr inbounds %S.gen.StructDef, ptr %t250, i32 0, i32 16 store i1 %t241, ptr %t251 %t252 = load { ptr, i64, i64 }, ptr %a111 %t253 = load ptr, ptr %a1 %t254 = icmp eq ptr %t253, null br i1 %t254, label %panic4464, label %ok4465 panic4464: call void @finch_panic(ptr @.str.2727, i64 1927, ptr @.str.2728) unreachable ok4465: %t255 = getelementptr inbounds %S.gen.Gen, ptr %t253, i32 0, i32 14 store { ptr, i64, i64 } %t252, ptr %a256 call void @finch_str_copy(ptr %a257, ptr %a256) %t258 = load { ptr, i64, i64 }, ptr %a257 %t259 = load { ptr, i64, i64 }, ptr %t255 store { ptr, i64, i64 } %t258, ptr %t255 store { ptr, i64, i64 } %t259, ptr %a260 call void @finch_str_drop(ptr %a260) %t261 = load ptr, ptr %a1 %t262 = icmp eq ptr %t261, null br i1 %t262, label %panic4466, label %ok4467 panic4466: call void @finch_panic(ptr @.str.2729, i64 1928, ptr @.str.2730) unreachable ok4467: %t263 = getelementptr inbounds %S.gen.Gen, ptr %t261, i32 0, i32 16 %t264 = load i64, ptr %a2 %t265 = load { ptr, i64, i64 }, ptr %t263 %t266 = extractvalue { ptr, i64, i64 } %t265, 1 %t267 = icmp uge i64 %t264, %t266 br i1 %t267, label %range4468, label %inrange4469 range4468: call void @finch_panic_index(ptr @.str.2731, i64 1928, i64 %t264, i64 %t266) unreachable inrange4469: %t268 = extractvalue { ptr, i64, i64 } %t265, 0 %t269 = getelementptr inbounds %S.gen.StructDef, ptr %t268, i64 %t264 %t270 = getelementptr inbounds %S.gen.StructDef, ptr %t269, i32 0, i32 15 store i64 2, ptr %t270 %t271 = load ptr, ptr %a1 %t272 = icmp eq ptr %t271, null br i1 %t272, label %panic4470, label %ok4471 panic4470: call void @finch_panic(ptr @.str.2732, i64 1929, ptr @.str.2733) unreachable ok4471: %t273 = getelementptr inbounds %S.gen.Gen, ptr %t271, i32 0, i32 2 %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i32 0, i32 1 %t275 = load ptr, ptr %a1 %t276 = icmp eq ptr %t275, null br i1 %t276, label %panic4472, label %ok4473 panic4472: call void @finch_panic(ptr @.str.2735, i64 1929, ptr @.str.2736) unreachable ok4473: %t277 = getelementptr inbounds %S.gen.Gen, ptr %t275, i32 0, i32 16 %t278 = load i64, ptr %a2 %t279 = load { ptr, i64, i64 }, ptr %t277 %t280 = extractvalue { ptr, i64, i64 } %t279, 1 %t281 = icmp uge i64 %t278, %t280 br i1 %t281, label %range4474, label %inrange4475 range4474: call void @finch_panic_index(ptr @.str.2737, i64 1929, i64 %t278, i64 %t280) unreachable inrange4475: %t282 = extractvalue { ptr, i64, i64 } %t279, 0 %t283 = getelementptr inbounds %S.gen.StructDef, ptr %t282, i64 %t278 %t284 = getelementptr inbounds %S.gen.StructDef, ptr %t283, i32 0, i32 0 %t285 = load { ptr, i64, i64 }, ptr %t284 %t286 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t285) store { ptr, i64, i64 } { ptr @.str.2734, i64 3, i64 0 }, ptr %a288 store { ptr, i64, i64 } %t286, ptr %a289 call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) store { ptr, i64, i64 } %t286, ptr %a290 call void @finch_str_drop(ptr %a290) %t291 = load { ptr, i64, i64 }, ptr %a287 store { ptr, i64, i64 } %t291, ptr %a293 store { ptr, i64, i64 } { ptr @.str.2738, i64 1, i64 0 }, ptr %a294 call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) store { ptr, i64, i64 } %t291, ptr %a295 call void @finch_str_drop(ptr %a295) %t296 = load { ptr, i64, i64 }, ptr %a292 %t297 = load ptr, ptr %a1 %t298 = icmp eq ptr %t297, null br i1 %t298, label %panic4476, label %ok4477 panic4476: call void @finch_panic(ptr @.str.2739, i64 1929, ptr @.str.2740) unreachable ok4477: %t299 = getelementptr inbounds %S.gen.Gen, ptr %t297, i32 0, i32 16 %t300 = load i64, ptr %a2 %t301 = load { ptr, i64, i64 }, ptr %t299 %t302 = extractvalue { ptr, i64, i64 } %t301, 1 %t303 = icmp uge i64 %t300, %t302 br i1 %t303, label %range4478, label %inrange4479 range4478: call void @finch_panic_index(ptr @.str.2741, i64 1929, i64 %t300, i64 %t302) unreachable inrange4479: %t304 = extractvalue { ptr, i64, i64 } %t301, 0 %t305 = getelementptr inbounds %S.gen.StructDef, ptr %t304, i64 %t300 %t306 = getelementptr inbounds %S.gen.StructDef, ptr %t305, i32 0, i32 1 %t307 = load { ptr, i64, i64 }, ptr %t306 %t308 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t307) store { ptr, i64, i64 } %t296, ptr %a310 store { ptr, i64, i64 } %t308, ptr %a311 call void @finch_str_concat(ptr %a309, ptr %a310, ptr %a311) store { ptr, i64, i64 } %t296, ptr %a312 call void @finch_str_drop(ptr %a312) store { ptr, i64, i64 } %t308, ptr %a313 call void @finch_str_drop(ptr %a313) %t314 = load { ptr, i64, i64 }, ptr %a309 store { ptr, i64, i64 } %t314, ptr %a316 store { ptr, i64, i64 } { ptr @.str.2742, i64 10, i64 0 }, ptr %a317 call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317) store { ptr, i64, i64 } %t314, ptr %a318 call void @finch_str_drop(ptr %a318) %t319 = load { ptr, i64, i64 }, ptr %a315 %t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2743, i64 2, i64 0 }, ptr %a321 call void @finch_str_join(ptr %a322, ptr %a132, ptr %a321) %t323 = load { ptr, i64, i64 }, ptr %a322 store { ptr, i64, i64 } %t319, ptr %a325 store { ptr, i64, i64 } %t323, ptr %a326 call void @finch_str_concat(ptr %a324, ptr %a325, ptr %a326) store { ptr, i64, i64 } %t319, ptr %a327 call void @finch_str_drop(ptr %a327) store { ptr, i64, i64 } %t323, ptr %a328 call void @finch_str_drop(ptr %a328) %t329 = load { ptr, i64, i64 }, ptr %a324 store { ptr, i64, i64 } %t329, ptr %a331 store { ptr, i64, i64 } { ptr @.str.2744, i64 2, i64 0 }, ptr %a332 call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332) store { ptr, i64, i64 } %t329, ptr %a333 call void @finch_str_drop(ptr %a333) %t334 = load { ptr, i64, i64 }, ptr %a330 %t335 = load i64, ptr %t274 %t336 = add i64 %t335, 1 call void @finch_arr_reserve(ptr %t273, i64 %t336, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t337 = load ptr, ptr %t273 %t338 = getelementptr inbounds { ptr, i64, i64 }, ptr %t337, i64 %t335 store { ptr, i64, i64 } %t334, ptr %t338 store i64 %t336, ptr %t274 call void @finch.drop.arr_str(ptr %a132) call void @finch_str_drop(ptr %a111) call void @finch.drop.S_ast_Node(ptr %a43) ret void } define internal i64 @finch.gen.md(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic4480, label %ok4481 panic4480: call void @finch_panic(ptr @.str.2745, i64 1938, ptr @.str.2746) unreachable ok4481: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 33 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t7, ptr %a8 call void @finch_str_copy(ptr %a9, ptr %a8) %t10 = load { ptr, i64, i64 }, ptr %a9 %t11 = load i64, ptr %t6 %t12 = add i64 %t11, 1 call void @finch_arr_reserve(ptr %t5, i64 %t12, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t13 = load ptr, ptr %t5 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 %t11 store { ptr, i64, i64 } %t10, ptr %t14 store i64 %t12, ptr %t6 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic4482, label %ok4483 panic4482: call void @finch_panic(ptr @.str.2747, i64 1939, ptr @.str.2748) unreachable ok4483: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 33 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load i64, ptr %t18 %t20 = sub i64 %t19, 1 ret i64 %t20 } define internal { ptr, i64, i64 } @finch.gen.mdRef(i64 %p0) { entry: %a1 = alloca i64, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 store i64 %p0, ptr %a1 %t2 = load i64, ptr %a1 %t3 = icmp slt i64 %t2, 0 br i1 %t3, label %then4484, label %endif4486 then4484: ret { ptr, i64, i64 } { ptr @.str.2749, i64 4, i64 0 } endif4486: %t4 = load i64, ptr %a1 call void @finch_str_from_int(ptr %a5, i64 %t4) %t6 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.2750, i64 1, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t6, ptr %a9 call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) store { ptr, i64, i64 } %t6, ptr %a10 call void @finch_str_drop(ptr %a10) %t11 = load { ptr, i64, i64 }, ptr %a7 ret { ptr, i64, i64 } %t11 } define internal i64 @finch.gen.alignUp(i64 %p0, i64 %p1) { entry: %a1 = alloca i64, align 16 %a2 = alloca i64, align 16 store i64 %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load i64, ptr %a2 %t4 = icmp sle i64 %t3, 1 br i1 %t4, label %then4487, label %endif4489 then4487: %t5 = load i64, ptr %a1 ret i64 %t5 endif4489: %t6 = load i64, ptr %a1 %t7 = load i64, ptr %a2 %t8 = add i64 %t6, %t7 %t9 = sub i64 %t8, 1 %t10 = load i64, ptr %a2 %t11 = icmp eq i64 %t10, 0 br i1 %t11, label %panic4490, label %ok4491 panic4490: call void @finch_panic(ptr @.str.2751, i64 1958, ptr @.str.2752) unreachable ok4491: %t12 = sdiv i64 %t9, %t10 %t13 = load i64, ptr %a2 %t14 = mul i64 %t12, %t13 ret i64 %t14 } define internal %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca %S.gen.SizeAlign, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca %S.gen.StructDef, align 16 %a137 = alloca %S.gen.StructDef, align 16 %a139 = alloca %S.gen.StructDef, align 16 %a148 = alloca i64, align 16 %a149 = alloca i64, align 16 %a151 = alloca i64, align 16 %a159 = alloca %S.ast.Type, align 16 %a163 = alloca %S.gen.SizeAlign, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch_str_copy(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.2753, i64 4, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 br label %logic.from4492 logic.from4492: br i1 %t13, label %logic.end4494, label %logic.rhs4493 logic.rhs4493: %t14 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.2754, i64 4, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 br label %logic.rend4495 logic.rend4495: br label %logic.end4494 logic.end4494: %t19 = phi i1 [ true, %logic.from4492 ], [ %t18, %logic.rend4495 ] br label %logic.from4496 logic.from4496: br i1 %t19, label %logic.end4498, label %logic.rhs4497 logic.rhs4497: %t20 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.2755, i64 2, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) %t24 = icmp ne i32 %t23, 0 br label %logic.rend4499 logic.rend4499: br label %logic.end4498 logic.end4498: %t25 = phi i1 [ true, %logic.from4496 ], [ %t24, %logic.rend4499 ] br label %logic.from4500 logic.from4500: br i1 %t25, label %logic.end4502, label %logic.rhs4501 logic.rhs4501: %t26 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.2756, i64 2, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 br label %logic.rend4503 logic.rend4503: br label %logic.end4502 logic.end4502: %t31 = phi i1 [ true, %logic.from4500 ], [ %t30, %logic.rend4503 ] br i1 %t31, label %then4504, label %endif4506 then4504: %t32 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 1, 0 %t33 = insertvalue %S.gen.SizeAlign %t32, i64 1, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t33 endif4506: %t34 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t34, ptr %a35 store { ptr, i64, i64 } { ptr @.str.2757, i64 3, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 br label %logic.from4507 logic.from4507: br i1 %t38, label %logic.end4509, label %logic.rhs4508 logic.rhs4508: %t39 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t39, ptr %a40 store { ptr, i64, i64 } { ptr @.str.2758, i64 3, i64 0 }, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 br label %logic.rend4510 logic.rend4510: br label %logic.end4509 logic.end4509: %t44 = phi i1 [ true, %logic.from4507 ], [ %t43, %logic.rend4510 ] br i1 %t44, label %then4511, label %endif4513 then4511: %t45 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 2, 0 %t46 = insertvalue %S.gen.SizeAlign %t45, i64 2, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t46 endif4513: %t47 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t47, ptr %a48 store { ptr, i64, i64 } { ptr @.str.2759, i64 3, i64 0 }, ptr %a49 %t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49) %t51 = icmp ne i32 %t50, 0 br label %logic.from4514 logic.from4514: br i1 %t51, label %logic.end4516, label %logic.rhs4515 logic.rhs4515: %t52 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.2760, i64 3, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 br label %logic.rend4517 logic.rend4517: br label %logic.end4516 logic.end4516: %t57 = phi i1 [ true, %logic.from4514 ], [ %t56, %logic.rend4517 ] br label %logic.from4518 logic.from4518: br i1 %t57, label %logic.end4520, label %logic.rhs4519 logic.rhs4519: %t58 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t58, ptr %a59 store { ptr, i64, i64 } { ptr @.str.2761, i64 3, i64 0 }, ptr %a60 %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) %t62 = icmp ne i32 %t61, 0 br label %logic.rend4521 logic.rend4521: br label %logic.end4520 logic.end4520: %t63 = phi i1 [ true, %logic.from4518 ], [ %t62, %logic.rend4521 ] br label %logic.from4522 logic.from4522: br i1 %t63, label %logic.end4524, label %logic.rhs4523 logic.rhs4523: %t64 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t64, ptr %a65 store { ptr, i64, i64 } { ptr @.str.2762, i64 4, i64 0 }, ptr %a66 %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) %t68 = icmp ne i32 %t67, 0 br label %logic.rend4525 logic.rend4525: br label %logic.end4524 logic.end4524: %t69 = phi i1 [ true, %logic.from4522 ], [ %t68, %logic.rend4525 ] br i1 %t69, label %then4526, label %endif4528 then4526: %t70 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 4, 0 %t71 = insertvalue %S.gen.SizeAlign %t70, i64 4, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t71 endif4528: %t72 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t72, ptr %a73 store { ptr, i64, i64 } { ptr @.str.2763, i64 3, i64 0 }, ptr %a74 %t75 = call i32 @finch_str_eq(ptr %a73, ptr %a74) %t76 = icmp ne i32 %t75, 0 br label %logic.from4529 logic.from4529: br i1 %t76, label %logic.end4531, label %logic.rhs4530 logic.rhs4530: %t77 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t77, ptr %a78 store { ptr, i64, i64 } { ptr @.str.2764, i64 5, i64 0 }, ptr %a79 %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) %t81 = icmp ne i32 %t80, 0 br label %logic.rend4532 logic.rend4532: br label %logic.end4531 logic.end4531: %t82 = phi i1 [ true, %logic.from4529 ], [ %t81, %logic.rend4532 ] br i1 %t82, label %then4533, label %endif4535 then4533: %t83 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 24, 0 %t84 = insertvalue %S.gen.SizeAlign %t83, i64 8, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t84 endif4535: %t85 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t85, ptr %a86 store { ptr, i64, i64 } { ptr @.str.2765, i64 3, i64 0 }, ptr %a87 %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) %t89 = icmp ne i32 %t88, 0 br i1 %t89, label %then4536, label %endif4538 then4536: %t90 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 56, 0 %t91 = insertvalue %S.gen.SizeAlign %t90, i64 8, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t91 endif4538: %t92 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t92, ptr %a93 store { ptr, i64, i64 } { ptr @.str.2766, i64 5, i64 0 }, ptr %a94 %t95 = call i32 @finch_str_eq(ptr %a93, ptr %a94) %t96 = icmp ne i32 %t95, 0 br i1 %t96, label %then4539, label %endif4541 then4539: %t97 = load ptr, ptr %a1 %t98 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t99 = load { ptr, i64, i64 }, ptr %t98 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 0, %t100 br i1 %t101, label %range4542, label %inrange4543 range4542: call void @finch_panic_index(ptr @.str.2767, i64 1980, i64 0, i64 %t100) unreachable inrange4543: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i64 0 %t104 = load %S.ast.Type, ptr %t103 %t105 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t97, %S.ast.Type %t104) store %S.gen.SizeAlign %t105, ptr %a106 %t107 = getelementptr inbounds %S.gen.SizeAlign, ptr %a106, i32 0, i32 0 %t108 = load i64, ptr %t107 %t109 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t110 = load i64, ptr %t109 %t111 = mul i64 %t108, %t110 %t112 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 %t111, 0 %t113 = getelementptr inbounds %S.gen.SizeAlign, ptr %a106, i32 0, i32 1 %t114 = load i64, ptr %t113 %t115 = insertvalue %S.gen.SizeAlign %t112, i64 %t114, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t115 endif4541: %t116 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t116, ptr %a117 store { ptr, i64, i64 } { ptr @.str.2768, i64 6, i64 0 }, ptr %a118 %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) %t120 = icmp ne i32 %t119, 0 br i1 %t120, label %then4544, label %endif4546 then4544: %t121 = load ptr, ptr %a1 %t122 = icmp eq ptr %t121, null br i1 %t122, label %panic4547, label %ok4548 panic4547: call void @finch_panic(ptr @.str.2769, i64 1984, ptr @.str.2770) unreachable ok4548: %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 16 %t124 = load ptr, ptr %a1 %t125 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t126 = load { ptr, i64, i64 }, ptr %t125 %t127 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t128 = load { ptr, i64, i64 }, ptr %t127 %t129 = call i64 @finch.gen.findStruct(ptr %t124, { ptr, i64, i64 } %t126, { ptr, i64, i64 } %t128) %t130 = load { ptr, i64, i64 }, ptr %t123 %t131 = extractvalue { ptr, i64, i64 } %t130, 1 %t132 = icmp uge i64 %t129, %t131 br i1 %t132, label %range4549, label %inrange4550 range4549: call void @finch_panic_index(ptr @.str.2771, i64 1984, i64 %t129, i64 %t131) unreachable inrange4550: %t133 = extractvalue { ptr, i64, i64 } %t130, 0 %t134 = getelementptr inbounds %S.gen.StructDef, ptr %t133, i64 %t129 %t135 = load %S.gen.StructDef, ptr %t134 store %S.gen.StructDef %t135, ptr %a136 call void @finch.copy.S_gen_StructDef(ptr %a137, ptr %a136) %t138 = load %S.gen.StructDef, ptr %a137 store %S.gen.StructDef %t138, ptr %a139 %t140 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 2 %t141 = load i1, ptr %t140 br i1 %t141, label %then4551, label %endif4553 then4551: %t142 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 9 %t143 = load i64, ptr %t142 %t144 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 %t143, 0 %t145 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 10 %t146 = load i64, ptr %t145 %t147 = insertvalue %S.gen.SizeAlign %t144, i64 %t146, 1 call void @finch.drop.S_gen_StructDef(ptr %a139) call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t147 endif4553: store i64 0, ptr %a148 store i64 1, ptr %a149 %t150 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 12 store i64 0, ptr %a151 br label %each.cond4554 each.cond4554: %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i32 0, i32 1 %t153 = load i64, ptr %t152 %t154 = load i64, ptr %a151 %t155 = icmp slt i64 %t154, %t153 br i1 %t155, label %each.body4555, label %each.end4557 each.body4555: %t156 = load ptr, ptr %t150 %t157 = getelementptr inbounds %S.ast.Type, ptr %t156, i64 %t154 %t158 = load %S.ast.Type, ptr %t157 store %S.ast.Type %t158, ptr %a159 %t160 = load ptr, ptr %a1 %t161 = load %S.ast.Type, ptr %a159 %t162 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t160, %S.ast.Type %t161) store %S.gen.SizeAlign %t162, ptr %a163 %t164 = load i64, ptr %a148 %t165 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1 %t166 = load i64, ptr %t165 %t167 = call i64 @finch.gen.alignUp(i64 %t164, i64 %t166) %t168 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 0 %t169 = load i64, ptr %t168 %t170 = add i64 %t167, %t169 store i64 %t170, ptr %a148 %t171 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1 %t172 = load i64, ptr %t171 %t173 = load i64, ptr %a149 %t174 = icmp sgt i64 %t172, %t173 br i1 %t174, label %then4558, label %endif4560 then4558: %t175 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1 %t176 = load i64, ptr %t175 store i64 %t176, ptr %a149 br label %endif4560 endif4560: br label %each.step4556 each.step4556: %t177 = load i64, ptr %a151 %t178 = add i64 %t177, 1 store i64 %t178, ptr %a151 br label %each.cond4554 each.end4557: %t179 = load i64, ptr %a148 %t180 = load i64, ptr %a149 %t181 = call i64 @finch.gen.alignUp(i64 %t179, i64 %t180) %t182 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 %t181, 0 %t183 = load i64, ptr %a149 %t184 = insertvalue %S.gen.SizeAlign %t182, i64 %t183, 1 call void @finch.drop.S_gen_StructDef(ptr %a139) call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t184 endif4546: %t185 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 8, 0 %t186 = insertvalue %S.gen.SizeAlign %t185, i64 8, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t186 } define internal { ptr, i64, i64 } @finch.gen.fieldOffsets(ptr %p0, %S.gen.StructDef %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.StructDef, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca i64, align 16 %a13 = alloca i64, align 16 %a21 = alloca %S.ast.Type, align 16 %a25 = alloca %S.gen.SizeAlign, align 16 store ptr %p0, ptr %a1 store %S.gen.StructDef %p1, ptr %a2 %t3 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 2 %t4 = load i1, ptr %t3 br i1 %t4, label %then4561, label %endif4563 then4561: %t5 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 4 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 call void @finch.copy.arr_int(ptr %a8, ptr %a7) %t9 = load { ptr, i64, i64 }, ptr %a8 ret { ptr, i64, i64 } %t9 endif4563: store { ptr, i64, i64 } zeroinitializer, ptr %a10 store i64 0, ptr %a11 %t12 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 12 store i64 0, ptr %a13 br label %each.cond4564 each.cond4564: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = load i64, ptr %a13 %t17 = icmp slt i64 %t16, %t15 br i1 %t17, label %each.body4565, label %each.end4567 each.body4565: %t18 = load ptr, ptr %t12 %t19 = getelementptr inbounds %S.ast.Type, ptr %t18, i64 %t16 %t20 = load %S.ast.Type, ptr %t19 store %S.ast.Type %t20, ptr %a21 %t22 = load ptr, ptr %a1 %t23 = load %S.ast.Type, ptr %a21 %t24 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t22, %S.ast.Type %t23) store %S.gen.SizeAlign %t24, ptr %a25 %t26 = load i64, ptr %a11 %t27 = getelementptr inbounds %S.gen.SizeAlign, ptr %a25, i32 0, i32 1 %t28 = load i64, ptr %t27 %t29 = call i64 @finch.gen.alignUp(i64 %t26, i64 %t28) store i64 %t29, ptr %a11 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 %t31 = load i64, ptr %a11 %t32 = load i64, ptr %t30 %t33 = add i64 %t32, 1 call void @finch_arr_reserve(ptr %a10, i64 %t33, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t34 = load ptr, ptr %a10 %t35 = getelementptr inbounds i64, ptr %t34, i64 %t32 store i64 %t31, ptr %t35 store i64 %t33, ptr %t30 %t36 = getelementptr inbounds %S.gen.SizeAlign, ptr %a25, i32 0, i32 0 %t37 = load i64, ptr %t36 %t38 = load i64, ptr %a11 %t39 = add i64 %t38, %t37 store i64 %t39, ptr %a11 br label %each.step4566 each.step4566: %t40 = load i64, ptr %a13 %t41 = add i64 %t40, 1 store i64 %t41, ptr %a13 br label %each.cond4564 each.end4567: %t42 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t42 } define internal i64 @finch.gen.dbgMember(ptr %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3, i64 %p4, i64 %p5, i64 %p6, i64 %p7) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a4 = alloca i64, align 16 %a5 = alloca i64, align 16 %a6 = alloca i64, align 16 %a7 = alloca i64, align 16 %a8 = alloca i64, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 %p3, ptr %a4 store i64 %p4, ptr %a5 store i64 %p5, ptr %a6 store i64 %p6, ptr %a7 store i64 %p7, ptr %a8 %t9 = load ptr, ptr %a1 %t10 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.2772, i64 42, i64 0 }, ptr %a12 store { ptr, i64, i64 } %t10, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) %t14 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t14, ptr %a16 store { ptr, i64, i64 } { ptr @.str.2773, i64 11, i64 0 }, ptr %a17 call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) store { ptr, i64, i64 } %t14, ptr %a18 call void @finch_str_drop(ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a15 %t20 = load i64, ptr %a3 call void @finch_str_from_int(ptr %a21, i64 %t20) %t22 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t19, ptr %a24 store { ptr, i64, i64 } %t22, ptr %a25 call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) store { ptr, i64, i64 } %t19, ptr %a26 call void @finch_str_drop(ptr %a26) store { ptr, i64, i64 } %t22, ptr %a27 call void @finch_str_drop(ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t28, ptr %a30 store { ptr, i64, i64 } { ptr @.str.2774, i64 9, i64 0 }, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) store { ptr, i64, i64 } %t28, ptr %a32 call void @finch_str_drop(ptr %a32) %t33 = load { ptr, i64, i64 }, ptr %a29 %t34 = load i64, ptr %a4 call void @finch_str_from_int(ptr %a35, i64 %t34) %t36 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t33, ptr %a38 store { ptr, i64, i64 } %t36, ptr %a39 call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) store { ptr, i64, i64 } %t33, ptr %a40 call void @finch_str_drop(ptr %a40) store { ptr, i64, i64 } %t36, ptr %a41 call void @finch_str_drop(ptr %a41) %t42 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t42, ptr %a44 store { ptr, i64, i64 } { ptr @.str.2775, i64 8, i64 0 }, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) store { ptr, i64, i64 } %t42, ptr %a46 call void @finch_str_drop(ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a43 %t48 = load i64, ptr %a5 call void @finch_str_from_int(ptr %a49, i64 %t48) %t50 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t47, ptr %a52 store { ptr, i64, i64 } %t50, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) store { ptr, i64, i64 } %t47, ptr %a54 call void @finch_str_drop(ptr %a54) store { ptr, i64, i64 } %t50, ptr %a55 call void @finch_str_drop(ptr %a55) %t56 = load { ptr, i64, i64 }, ptr %a51 store { ptr, i64, i64 } %t56, ptr %a58 store { ptr, i64, i64 } { ptr @.str.2776, i64 12, i64 0 }, ptr %a59 call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) store { ptr, i64, i64 } %t56, ptr %a60 call void @finch_str_drop(ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a57 %t62 = load i64, ptr %a6 %t63 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t62) store { ptr, i64, i64 } %t61, ptr %a65 store { ptr, i64, i64 } %t63, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) store { ptr, i64, i64 } %t61, ptr %a67 call void @finch_str_drop(ptr %a67) store { ptr, i64, i64 } %t63, ptr %a68 call void @finch_str_drop(ptr %a68) %t69 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } %t69, ptr %a71 store { ptr, i64, i64 } { ptr @.str.2777, i64 8, i64 0 }, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) store { ptr, i64, i64 } %t69, ptr %a73 call void @finch_str_drop(ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a70 %t75 = load i64, ptr %a7 call void @finch_str_from_int(ptr %a76, i64 %t75) %t77 = load { ptr, i64, i64 }, ptr %a76 store { ptr, i64, i64 } %t74, ptr %a79 store { ptr, i64, i64 } %t77, ptr %a80 call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) store { ptr, i64, i64 } %t74, ptr %a81 call void @finch_str_drop(ptr %a81) store { ptr, i64, i64 } %t77, ptr %a82 call void @finch_str_drop(ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a78 store { ptr, i64, i64 } %t83, ptr %a85 store { ptr, i64, i64 } { ptr @.str.2778, i64 10, i64 0 }, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) store { ptr, i64, i64 } %t83, ptr %a87 call void @finch_str_drop(ptr %a87) %t88 = load { ptr, i64, i64 }, ptr %a84 %t89 = load i64, ptr %a8 call void @finch_str_from_int(ptr %a90, i64 %t89) %t91 = load { ptr, i64, i64 }, ptr %a90 store { ptr, i64, i64 } %t88, ptr %a93 store { ptr, i64, i64 } %t91, ptr %a94 call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) store { ptr, i64, i64 } %t88, ptr %a95 call void @finch_str_drop(ptr %a95) store { ptr, i64, i64 } %t91, ptr %a96 call void @finch_str_drop(ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a92 store { ptr, i64, i64 } %t97, ptr %a99 store { ptr, i64, i64 } { ptr @.str.2779, i64 1, i64 0 }, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) store { ptr, i64, i64 } %t97, ptr %a101 call void @finch_str_drop(ptr %a101) %t102 = load { ptr, i64, i64 }, ptr %a98 %t103 = call i64 @finch.gen.md(ptr %t9, { ptr, i64, i64 } %t102) store { ptr, i64, i64 } %t102, ptr %a104 call void @finch_str_drop(ptr %a104) ret i64 %t103 } define internal i64 @finch.gen.basicType(ptr %p0, { ptr, i64, i64 } %p1, i64 %p2, { ptr, i64, i64 } %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.2780, i64 20, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t6, ptr %a9 call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) %t10 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t10, ptr %a12 store { ptr, i64, i64 } { ptr @.str.2781, i64 9, i64 0 }, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) store { ptr, i64, i64 } %t10, ptr %a14 call void @finch_str_drop(ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a11 %t16 = load i64, ptr %a3 call void @finch_str_from_int(ptr %a17, i64 %t16) %t18 = load { ptr, i64, i64 }, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a20 store { ptr, i64, i64 } %t18, ptr %a21 call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) store { ptr, i64, i64 } %t15, ptr %a22 call void @finch_str_drop(ptr %a22) store { ptr, i64, i64 } %t18, ptr %a23 call void @finch_str_drop(ptr %a23) %t24 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t24, ptr %a26 store { ptr, i64, i64 } { ptr @.str.2782, i64 12, i64 0 }, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) store { ptr, i64, i64 } %t24, ptr %a28 call void @finch_str_drop(ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a25 %t30 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t29, ptr %a32 store { ptr, i64, i64 } %t30, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) store { ptr, i64, i64 } %t29, ptr %a34 call void @finch_str_drop(ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t35, ptr %a37 store { ptr, i64, i64 } { ptr @.str.2783, i64 1, i64 0 }, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) store { ptr, i64, i64 } %t35, ptr %a39 call void @finch_str_drop(ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a36 %t41 = call i64 @finch.gen.md(ptr %t5, { ptr, i64, i64 } %t40) store { ptr, i64, i64 } %t40, ptr %a42 call void @finch_str_drop(ptr %a42) ret i64 %t41 } define internal i64 @finch.gen.diType(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca i64, align 16 %a59 = alloca i64, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca %S.gen.EnumDef, align 16 %a129 = alloca %S.gen.EnumDef, align 16 %a131 = alloca %S.gen.EnumDef, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca i64, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca i32, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca i64, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca %S.gen.SizeAlign, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca i64, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a355 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca { ptr, i64, i64 }, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a369 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a373 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca %S.ast.Type, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a403 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca %S.ast.Type, align 16 %a414 = alloca %S.ast.Type, align 16 %a417 = alloca %S.ast.Type, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a434 = alloca { ptr, i64, i64 }, align 16 %a435 = alloca i64, align 16 %a439 = alloca %S.ast.Type, align 16 %a440 = alloca i64, align 16 %a446 = alloca i64, align 16 %a452 = alloca i64, align 16 %a458 = alloca i64, align 16 %a461 = alloca { ptr, i64, i64 }, align 16 %a462 = alloca { ptr, i64, i64 }, align 16 %a463 = alloca { ptr, i64, i64 }, align 16 %a464 = alloca { ptr, i64, i64 }, align 16 %a466 = alloca { ptr, i64, i64 }, align 16 %a467 = alloca { ptr, i64, i64 }, align 16 %a468 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a472 = alloca { ptr, i64, i64 }, align 16 %a474 = alloca { ptr, i64, i64 }, align 16 %a475 = alloca { ptr, i64, i64 }, align 16 %a476 = alloca { ptr, i64, i64 }, align 16 %a477 = alloca { ptr, i64, i64 }, align 16 %a478 = alloca { ptr, i64, i64 }, align 16 %a480 = alloca { ptr, i64, i64 }, align 16 %a481 = alloca { ptr, i64, i64 }, align 16 %a482 = alloca { ptr, i64, i64 }, align 16 %a483 = alloca { ptr, i64, i64 }, align 16 %a486 = alloca { ptr, i64, i64 }, align 16 %a488 = alloca { ptr, i64, i64 }, align 16 %a489 = alloca { ptr, i64, i64 }, align 16 %a490 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca { ptr, i64, i64 }, align 16 %a492 = alloca { ptr, i64, i64 }, align 16 %a494 = alloca { ptr, i64, i64 }, align 16 %a495 = alloca { ptr, i64, i64 }, align 16 %a496 = alloca { ptr, i64, i64 }, align 16 %a497 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a502 = alloca { ptr, i64, i64 }, align 16 %a503 = alloca { ptr, i64, i64 }, align 16 %a504 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a508 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca { ptr, i64, i64 }, align 16 %a511 = alloca { ptr, i64, i64 }, align 16 %a514 = alloca { ptr, i64, i64 }, align 16 %a516 = alloca { ptr, i64, i64 }, align 16 %a517 = alloca { ptr, i64, i64 }, align 16 %a518 = alloca { ptr, i64, i64 }, align 16 %a519 = alloca { ptr, i64, i64 }, align 16 %a520 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca { ptr, i64, i64 }, align 16 %a523 = alloca { ptr, i64, i64 }, align 16 %a524 = alloca { ptr, i64, i64 }, align 16 %a525 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a539 = alloca { ptr, i64, i64 }, align 16 %a540 = alloca { ptr, i64, i64 }, align 16 %a546 = alloca %S.ast.Type, align 16 %a547 = alloca i64, align 16 %a550 = alloca i64, align 16 %a563 = alloca { ptr, i64, i64 }, align 16 %a564 = alloca { ptr, i64, i64 }, align 16 %a565 = alloca i64, align 16 %a569 = alloca i64, align 16 %a591 = alloca { ptr, i64, i64 }, align 16 %a593 = alloca { ptr, i64, i64 }, align 16 %a594 = alloca { ptr, i64, i64 }, align 16 %a595 = alloca { ptr, i64, i64 }, align 16 %a596 = alloca { ptr, i64, i64 }, align 16 %a606 = alloca { ptr, i64, i64 }, align 16 %a607 = alloca { ptr, i64, i64 }, align 16 %a608 = alloca { ptr, i64, i64 }, align 16 %a609 = alloca { ptr, i64, i64 }, align 16 %a611 = alloca { ptr, i64, i64 }, align 16 %a612 = alloca { ptr, i64, i64 }, align 16 %a613 = alloca { ptr, i64, i64 }, align 16 %a614 = alloca { ptr, i64, i64 }, align 16 %a617 = alloca { ptr, i64, i64 }, align 16 %a619 = alloca { ptr, i64, i64 }, align 16 %a620 = alloca { ptr, i64, i64 }, align 16 %a621 = alloca { ptr, i64, i64 }, align 16 %a622 = alloca { ptr, i64, i64 }, align 16 %a623 = alloca { ptr, i64, i64 }, align 16 %a625 = alloca { ptr, i64, i64 }, align 16 %a626 = alloca { ptr, i64, i64 }, align 16 %a627 = alloca { ptr, i64, i64 }, align 16 %a628 = alloca { ptr, i64, i64 }, align 16 %a631 = alloca { ptr, i64, i64 }, align 16 %a632 = alloca { ptr, i64, i64 }, align 16 %a634 = alloca { ptr, i64, i64 }, align 16 %a635 = alloca { ptr, i64, i64 }, align 16 %a636 = alloca { ptr, i64, i64 }, align 16 %a637 = alloca { ptr, i64, i64 }, align 16 %a638 = alloca { ptr, i64, i64 }, align 16 %a640 = alloca { ptr, i64, i64 }, align 16 %a641 = alloca { ptr, i64, i64 }, align 16 %a642 = alloca { ptr, i64, i64 }, align 16 %a643 = alloca { ptr, i64, i64 }, align 16 %a655 = alloca { ptr, i64, i64 }, align 16 %a657 = alloca { ptr, i64, i64 }, align 16 %a658 = alloca { ptr, i64, i64 }, align 16 %a676 = alloca %S.gen.StructDef, align 16 %a677 = alloca %S.gen.StructDef, align 16 %a679 = alloca %S.gen.StructDef, align 16 %a683 = alloca { ptr, i64, i64 }, align 16 %a687 = alloca %S.gen.SizeAlign, align 16 %a688 = alloca { ptr, i64, i64 }, align 16 %a692 = alloca i64, align 16 %a705 = alloca %S.gen.SizeAlign, align 16 %a740 = alloca { ptr, i64, i64 }, align 16 %a742 = alloca { ptr, i64, i64 }, align 16 %a743 = alloca { ptr, i64, i64 }, align 16 %a744 = alloca { ptr, i64, i64 }, align 16 %a745 = alloca { ptr, i64, i64 }, align 16 %a755 = alloca { ptr, i64, i64 }, align 16 %a756 = alloca { ptr, i64, i64 }, align 16 %a757 = alloca { ptr, i64, i64 }, align 16 %a759 = alloca { ptr, i64, i64 }, align 16 %a760 = alloca { ptr, i64, i64 }, align 16 %a761 = alloca { ptr, i64, i64 }, align 16 %a762 = alloca { ptr, i64, i64 }, align 16 %a765 = alloca { ptr, i64, i64 }, align 16 %a767 = alloca { ptr, i64, i64 }, align 16 %a768 = alloca { ptr, i64, i64 }, align 16 %a769 = alloca { ptr, i64, i64 }, align 16 %a770 = alloca { ptr, i64, i64 }, align 16 %a771 = alloca { ptr, i64, i64 }, align 16 %a773 = alloca { ptr, i64, i64 }, align 16 %a774 = alloca { ptr, i64, i64 }, align 16 %a775 = alloca { ptr, i64, i64 }, align 16 %a776 = alloca { ptr, i64, i64 }, align 16 %a781 = alloca { ptr, i64, i64 }, align 16 %a783 = alloca { ptr, i64, i64 }, align 16 %a784 = alloca { ptr, i64, i64 }, align 16 %a785 = alloca { ptr, i64, i64 }, align 16 %a786 = alloca { ptr, i64, i64 }, align 16 %a787 = alloca { ptr, i64, i64 }, align 16 %a789 = alloca { ptr, i64, i64 }, align 16 %a790 = alloca { ptr, i64, i64 }, align 16 %a791 = alloca { ptr, i64, i64 }, align 16 %a792 = alloca { ptr, i64, i64 }, align 16 %a795 = alloca { ptr, i64, i64 }, align 16 %a796 = alloca { ptr, i64, i64 }, align 16 %a798 = alloca { ptr, i64, i64 }, align 16 %a799 = alloca { ptr, i64, i64 }, align 16 %a800 = alloca { ptr, i64, i64 }, align 16 %a801 = alloca { ptr, i64, i64 }, align 16 %a802 = alloca { ptr, i64, i64 }, align 16 %a804 = alloca { ptr, i64, i64 }, align 16 %a805 = alloca { ptr, i64, i64 }, align 16 %a806 = alloca { ptr, i64, i64 }, align 16 %a807 = alloca { ptr, i64, i64 }, align 16 %a819 = alloca { ptr, i64, i64 }, align 16 %a821 = alloca { ptr, i64, i64 }, align 16 %a822 = alloca { ptr, i64, i64 }, align 16 %a823 = alloca { ptr, i64, i64 }, align 16 %a825 = alloca { ptr, i64, i64 }, align 16 %a826 = alloca { ptr, i64, i64 }, align 16 %a827 = alloca { ptr, i64, i64 }, align 16 %a828 = alloca { ptr, i64, i64 }, align 16 %a840 = alloca { ptr, i64, i64 }, align 16 %a847 = alloca { ptr, i64, i64 }, align 16 %a848 = alloca i32, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch_str_copy(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.2784, i64 4, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 br label %logic.from4568 logic.from4568: br i1 %t13, label %logic.end4570, label %logic.rhs4569 logic.rhs4569: %t14 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.2785, i64 4, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 br label %logic.rend4571 logic.rend4571: br label %logic.end4570 logic.end4570: %t19 = phi i1 [ true, %logic.from4568 ], [ %t18, %logic.rend4571 ] br i1 %t19, label %then4572, label %endif4574 then4572: call void @finch_str_drop(ptr %a8) ret i64 -1 endif4574: %t20 = load %S.ast.Type, ptr %a2 %t21 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t20) store { ptr, i64, i64 } { ptr @.str.2786, i64 2, i64 0 }, ptr %a23 store { ptr, i64, i64 } %t21, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) store { ptr, i64, i64 } %t21, ptr %a25 call void @finch_str_drop(ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t26, ptr %a27 %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic4575, label %ok4576 panic4575: call void @finch_panic(ptr @.str.2787, i64 2033, ptr @.str.2788) unreachable ok4576: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 34 %t31 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t31, ptr %a32 %t33 = call i64 @finch_map_find(ptr %t30, ptr %a32, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t34 = icmp sge i64 %t33, 0 br i1 %t34, label %then4577, label %endif4579 then4577: %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null br i1 %t36, label %panic4580, label %ok4581 panic4580: call void @finch_panic(ptr @.str.2789, i64 2034, ptr @.str.2790) unreachable ok4581: %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 34 %t38 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t38, ptr %a39 %t40 = call i64 @finch_map_find(ptr %t37, ptr %a39, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t41 = icmp slt i64 %t40, 0 br i1 %t41, label %map.missing4582, label %map.found4583 map.missing4582: store { ptr, i64, i64 } zeroinitializer, ptr %a42 store { ptr, i64, i64 } %t38, ptr %a43 call void @finch_buf_str(ptr %a42, ptr %a43, i32 1) call void @finch_map_missing(ptr @.str.2791, i64 2034, ptr %a42) unreachable map.found4583: %t44 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t37, i32 0, i32 0 %t45 = load ptr, ptr %t44 %t46 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t45, i64 %t40 %t47 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t46, i32 0, i32 2 %t48 = load i64, ptr %t47 call void @finch_str_drop(ptr %a27) call void @finch_str_drop(ptr %a8) ret i64 %t48 endif4579: store i64 -1, ptr %a49 %t50 = load ptr, ptr %a1 %t51 = icmp eq ptr %t50, null br i1 %t51, label %panic4584, label %ok4585 panic4584: call void @finch_panic(ptr @.str.2792, i64 2037, ptr @.str.2793) unreachable ok4585: %t52 = getelementptr inbounds %S.gen.Gen, ptr %t50, i32 0, i32 35 %t53 = load { ptr, i64, i64 }, ptr %t52 %t54 = extractvalue { ptr, i64, i64 } %t53, 1 %t55 = icmp uge i64 0, %t54 br i1 %t55, label %range4586, label %inrange4587 range4586: call void @finch_panic_index(ptr @.str.2794, i64 2037, i64 0, i64 %t54) unreachable inrange4587: %t56 = extractvalue { ptr, i64, i64 } %t53, 0 %t57 = getelementptr inbounds i64, ptr %t56, i64 0 %t58 = load i64, ptr %t57 store i64 %t58, ptr %a59 %t60 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t60, ptr %a61 store { ptr, i64, i64 } { ptr @.str.2795, i64 4, i64 0 }, ptr %a62 %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) %t64 = icmp ne i32 %t63, 0 br i1 %t64, label %then4588, label %else4589 then4588: %t65 = load ptr, ptr %a1 %t66 = call i64 @finch.gen.basicType(ptr %t65, { ptr, i64, i64 } { ptr @.str.2796, i64 4, i64 0 }, i64 8, { ptr, i64, i64 } { ptr @.str.2797, i64 14, i64 0 }) store i64 %t66, ptr %a49 br label %endif4590 else4589: %t67 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t67, ptr %a68 store { ptr, i64, i64 } { ptr @.str.2798, i64 4, i64 0 }, ptr %a69 %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) %t71 = icmp ne i32 %t70, 0 br i1 %t71, label %then4591, label %else4592 then4591: %t72 = load ptr, ptr %a1 %t73 = call i64 @finch.gen.basicType(ptr %t72, { ptr, i64, i64 } { ptr @.str.2799, i64 4, i64 0 }, i64 8, { ptr, i64, i64 } { ptr @.str.2800, i64 18, i64 0 }) store i64 %t73, ptr %a49 br label %endif4593 else4592: %t74 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t74, ptr %a75 store { ptr, i64, i64 } { ptr @.str.2801, i64 3, i64 0 }, ptr %a76 %t77 = call i32 @finch_str_eq(ptr %a75, ptr %a76) %t78 = icmp ne i32 %t77, 0 br i1 %t78, label %then4594, label %else4595 then4594: %t79 = load ptr, ptr %a1 %t80 = call i64 @finch.gen.basicType(ptr %t79, { ptr, i64, i64 } { ptr @.str.2802, i64 3, i64 0 }, i64 64, { ptr, i64, i64 } { ptr @.str.2803, i64 13, i64 0 }) store i64 %t80, ptr %a49 br label %endif4596 else4595: %t81 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.2804, i64 5, i64 0 }, ptr %a83 %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) %t85 = icmp ne i32 %t84, 0 br i1 %t85, label %then4597, label %else4598 then4597: %t86 = load ptr, ptr %a1 %t87 = call i64 @finch.gen.basicType(ptr %t86, { ptr, i64, i64 } { ptr @.str.2805, i64 5, i64 0 }, i64 64, { ptr, i64, i64 } { ptr @.str.2806, i64 12, i64 0 }) store i64 %t87, ptr %a49 br label %endif4599 else4598: %t88 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t88, ptr %a89 store { ptr, i64, i64 } { ptr @.str.2807, i64 3, i64 0 }, ptr %a90 %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) %t92 = icmp ne i32 %t91, 0 br i1 %t92, label %then4600, label %else4601 then4600: %t93 = load ptr, ptr %a1 %t94 = call i64 @finch.gen.basicType(ptr %t93, { ptr, i64, i64 } { ptr @.str.2808, i64 3, i64 0 }, i64 32, { ptr, i64, i64 } { ptr @.str.2809, i64 12, i64 0 }) store i64 %t94, ptr %a49 br label %endif4602 else4601: %t95 = load %S.ast.Type, ptr %a2 %t96 = call i1 @finch.gen.isInt(%S.ast.Type %t95) br i1 %t96, label %then4603, label %else4604 then4603: store { ptr, i64, i64 } { ptr @.str.2810, i64 15, i64 0 }, ptr %a97 %t98 = load %S.ast.Type, ptr %a2 %t99 = call i1 @finch.gen.isSigned(%S.ast.Type %t98) br i1 %t99, label %then4606, label %endif4608 then4606: %t100 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } { ptr @.str.2811, i64 13, i64 0 }, ptr %a97 store { ptr, i64, i64 } %t100, ptr %a101 call void @finch_str_drop(ptr %a101) br label %endif4608 endif4608: %t102 = load ptr, ptr %a1 %t103 = load { ptr, i64, i64 }, ptr %a8 %t104 = load %S.ast.Type, ptr %a2 %t105 = call i64 @finch.gen.bitsOf(%S.ast.Type %t104) %t106 = load { ptr, i64, i64 }, ptr %a97 %t107 = call i64 @finch.gen.basicType(ptr %t102, { ptr, i64, i64 } %t103, i64 %t105, { ptr, i64, i64 } %t106) store i64 %t107, ptr %a49 call void @finch_str_drop(ptr %a97) br label %endif4605 else4604: %t108 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t108, ptr %a109 store { ptr, i64, i64 } { ptr @.str.2812, i64 4, i64 0 }, ptr %a110 %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) %t112 = icmp ne i32 %t111, 0 br i1 %t112, label %then4609, label %else4610 then4609: %t113 = load ptr, ptr %a1 %t114 = icmp eq ptr %t113, null br i1 %t114, label %panic4612, label %ok4613 panic4612: call void @finch_panic(ptr @.str.2813, i64 2055, ptr @.str.2814) unreachable ok4613: %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 21 %t116 = load ptr, ptr %a1 %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t118 = load { ptr, i64, i64 }, ptr %t117 %t119 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t120 = load { ptr, i64, i64 }, ptr %t119 %t121 = call i64 @finch.gen.findEnum(ptr %t116, { ptr, i64, i64 } %t118, { ptr, i64, i64 } %t120) %t122 = load { ptr, i64, i64 }, ptr %t115 %t123 = extractvalue { ptr, i64, i64 } %t122, 1 %t124 = icmp uge i64 %t121, %t123 br i1 %t124, label %range4614, label %inrange4615 range4614: call void @finch_panic_index(ptr @.str.2815, i64 2055, i64 %t121, i64 %t123) unreachable inrange4615: %t125 = extractvalue { ptr, i64, i64 } %t122, 0 %t126 = getelementptr inbounds %S.gen.EnumDef, ptr %t125, i64 %t121 %t127 = load %S.gen.EnumDef, ptr %t126 store %S.gen.EnumDef %t127, ptr %a128 call void @finch.copy.S_gen_EnumDef(ptr %a129, ptr %a128) %t130 = load %S.gen.EnumDef, ptr %a129 store %S.gen.EnumDef %t130, ptr %a131 store { ptr, i64, i64 } zeroinitializer, ptr %a132 %t133 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 2 %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 %t135 = load i64, ptr %t134 store i64 0, ptr %a136 br label %for.cond4616 for.cond4616: %t137 = load i64, ptr %a136 %t138 = icmp slt i64 %t137, %t135 br i1 %t138, label %for.body4617, label %for.end4619 for.body4617: %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 %t140 = load ptr, ptr %a1 %t141 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 2 %t142 = load i64, ptr %a136 %t143 = load { ptr, i64, i64 }, ptr %t141 %t144 = extractvalue { ptr, i64, i64 } %t143, 1 %t145 = icmp uge i64 %t142, %t144 br i1 %t145, label %range4620, label %inrange4621 range4620: call void @finch_panic_index(ptr @.str.2817, i64 2058, i64 %t142, i64 %t144) unreachable inrange4621: %t146 = extractvalue { ptr, i64, i64 } %t143, 0 %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i64 %t142 %t148 = load { ptr, i64, i64 }, ptr %t147 store { ptr, i64, i64 } { ptr @.str.2816, i64 21, i64 0 }, ptr %a150 store { ptr, i64, i64 } %t148, ptr %a151 call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) %t152 = load { ptr, i64, i64 }, ptr %a149 store { ptr, i64, i64 } %t152, ptr %a154 store { ptr, i64, i64 } { ptr @.str.2818, i64 10, i64 0 }, ptr %a155 call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) store { ptr, i64, i64 } %t152, ptr %a156 call void @finch_str_drop(ptr %a156) %t157 = load { ptr, i64, i64 }, ptr %a153 %t158 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 3 %t159 = load i64, ptr %a136 %t160 = load { ptr, i64, i64 }, ptr %t158 %t161 = extractvalue { ptr, i64, i64 } %t160, 1 %t162 = icmp uge i64 %t159, %t161 br i1 %t162, label %range4622, label %inrange4623 range4622: call void @finch_panic_index(ptr @.str.2819, i64 2058, i64 %t159, i64 %t161) unreachable inrange4623: %t163 = extractvalue { ptr, i64, i64 } %t160, 0 %t164 = getelementptr inbounds i64, ptr %t163, i64 %t159 %t165 = load i64, ptr %t164 call void @finch_str_from_int(ptr %a166, i64 %t165) %t167 = load { ptr, i64, i64 }, ptr %a166 store { ptr, i64, i64 } %t157, ptr %a169 store { ptr, i64, i64 } %t167, ptr %a170 call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) store { ptr, i64, i64 } %t157, ptr %a171 call void @finch_str_drop(ptr %a171) store { ptr, i64, i64 } %t167, ptr %a172 call void @finch_str_drop(ptr %a172) %t173 = load { ptr, i64, i64 }, ptr %a168 store { ptr, i64, i64 } %t173, ptr %a175 store { ptr, i64, i64 } { ptr @.str.2820, i64 1, i64 0 }, ptr %a176 call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) store { ptr, i64, i64 } %t173, ptr %a177 call void @finch_str_drop(ptr %a177) %t178 = load { ptr, i64, i64 }, ptr %a174 %t179 = call i64 @finch.gen.md(ptr %t140, { ptr, i64, i64 } %t178) store { ptr, i64, i64 } %t178, ptr %a180 call void @finch_str_drop(ptr %a180) %t181 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t179) %t182 = load i64, ptr %t139 %t183 = add i64 %t182, 1 call void @finch_arr_reserve(ptr %a132, i64 %t183, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t184 = load ptr, ptr %a132 %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i64 %t182 store { ptr, i64, i64 } %t181, ptr %t185 store i64 %t183, ptr %t139 br label %for.step4618 for.step4618: %t186 = load i64, ptr %a136 %t187 = add i64 %t186, 1 store i64 %t187, ptr %a136 br label %for.cond4616 for.end4619: %t188 = load ptr, ptr %a1 %t189 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 1 %t190 = load { ptr, i64, i64 }, ptr %t189 store { ptr, i64, i64 } { ptr @.str.2821, i64 54, i64 0 }, ptr %a192 store { ptr, i64, i64 } %t190, ptr %a193 call void @finch_str_concat(ptr %a191, ptr %a192, ptr %a193) %t194 = load { ptr, i64, i64 }, ptr %a191 store { ptr, i64, i64 } %t194, ptr %a196 store { ptr, i64, i64 } { ptr @.str.2822, i64 10, i64 0 }, ptr %a197 call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) store { ptr, i64, i64 } %t194, ptr %a198 call void @finch_str_drop(ptr %a198) %t199 = load { ptr, i64, i64 }, ptr %a195 %t200 = load i64, ptr %a59 call void @finch_str_from_int(ptr %a201, i64 %t200) %t202 = load { ptr, i64, i64 }, ptr %a201 store { ptr, i64, i64 } %t199, ptr %a204 store { ptr, i64, i64 } %t202, ptr %a205 call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) store { ptr, i64, i64 } %t199, ptr %a206 call void @finch_str_drop(ptr %a206) store { ptr, i64, i64 } %t202, ptr %a207 call void @finch_str_drop(ptr %a207) %t208 = load { ptr, i64, i64 }, ptr %a203 store { ptr, i64, i64 } %t208, ptr %a210 store { ptr, i64, i64 } { ptr @.str.2823, i64 24, i64 0 }, ptr %a211 call void @finch_str_concat(ptr %a209, ptr %a210, ptr %a211) store { ptr, i64, i64 } %t208, ptr %a212 call void @finch_str_drop(ptr %a212) %t213 = load { ptr, i64, i64 }, ptr %a209 %t214 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2824, i64 2, i64 0 }, ptr %a215 call void @finch_str_join(ptr %a216, ptr %a132, ptr %a215) %t217 = load { ptr, i64, i64 }, ptr %a216 store { ptr, i64, i64 } %t213, ptr %a219 store { ptr, i64, i64 } %t217, ptr %a220 call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) store { ptr, i64, i64 } %t213, ptr %a221 call void @finch_str_drop(ptr %a221) store { ptr, i64, i64 } %t217, ptr %a222 call void @finch_str_drop(ptr %a222) %t223 = load { ptr, i64, i64 }, ptr %a218 store { ptr, i64, i64 } %t223, ptr %a225 store { ptr, i64, i64 } { ptr @.str.2825, i64 2, i64 0 }, ptr %a226 call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) store { ptr, i64, i64 } %t223, ptr %a227 call void @finch_str_drop(ptr %a227) %t228 = load { ptr, i64, i64 }, ptr %a224 %t229 = call i64 @finch.gen.md(ptr %t188, { ptr, i64, i64 } %t228) store { ptr, i64, i64 } %t228, ptr %a230 call void @finch_str_drop(ptr %a230) store i64 %t229, ptr %a49 call void @finch.drop.arr_str(ptr %a132) call void @finch.drop.S_gen_EnumDef(ptr %a131) br label %endif4611 else4610: %t231 = load ptr, ptr %a1 %t232 = call i64 @finch.gen.md(ptr %t231, { ptr, i64, i64 } { ptr @.str.2826, i64 0, i64 0 }) store i64 %t232, ptr %a49 %t233 = load i64, ptr %a49 %t234 = load ptr, ptr %a1 %t235 = icmp eq ptr %t234, null br i1 %t235, label %panic4624, label %ok4625 panic4624: call void @finch_panic(ptr @.str.2827, i64 2064, ptr @.str.2828) unreachable ok4625: %t236 = getelementptr inbounds %S.gen.Gen, ptr %t234, i32 0, i32 34 %t237 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t237, ptr %a238 store i32 0, ptr %a239 %t240 = call i64 @finch_map_slot(ptr %t236, ptr %a238, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a239) %t241 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t236, i32 0, i32 0 %t242 = load ptr, ptr %t241 %t243 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t242, i64 %t240 %t244 = load i32, ptr %a239 %t245 = icmp ne i32 %t244, 0 br i1 %t245, label %map.new4626, label %map.have4627 map.new4626: %t246 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 1 call void @finch_str_copy(ptr %t246, ptr %a238) %t247 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 2 store i64 0, ptr %t247 br label %map.have4627 map.have4627: %t248 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 2 store i64 %t233, ptr %t248 %t249 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t249, ptr %a250 store { ptr, i64, i64 } { ptr @.str.2829, i64 3, i64 0 }, ptr %a251 %t252 = call i32 @finch_str_eq(ptr %a250, ptr %a251) %t253 = icmp ne i32 %t252, 0 br i1 %t253, label %then4628, label %else4629 then4628: store i64 -1, ptr %a254 %t255 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t256 = getelementptr inbounds { ptr, i64, i64 }, ptr %t255, i32 0, i32 1 %t257 = load i64, ptr %t256 %t258 = icmp sgt i64 %t257, 0 br i1 %t258, label %then4631, label %endif4633 then4631: %t259 = load ptr, ptr %a1 %t260 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t261 = load { ptr, i64, i64 }, ptr %t260 %t262 = extractvalue { ptr, i64, i64 } %t261, 1 %t263 = icmp uge i64 0, %t262 br i1 %t263, label %range4634, label %inrange4635 range4634: call void @finch_panic_index(ptr @.str.2830, i64 2068, i64 0, i64 %t262) unreachable inrange4635: %t264 = extractvalue { ptr, i64, i64 } %t261, 0 %t265 = getelementptr inbounds %S.ast.Type, ptr %t264, i64 0 %t266 = load %S.ast.Type, ptr %t265 %t267 = call i64 @finch.gen.diType(ptr %t259, %S.ast.Type %t266) store i64 %t267, ptr %a254 br label %endif4633 endif4633: %t268 = load i64, ptr %a254 %t269 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t268) store { ptr, i64, i64 } { ptr @.str.2831, i64 51, i64 0 }, ptr %a271 store { ptr, i64, i64 } %t269, ptr %a272 call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) store { ptr, i64, i64 } %t269, ptr %a273 call void @finch_str_drop(ptr %a273) %t274 = load { ptr, i64, i64 }, ptr %a270 store { ptr, i64, i64 } %t274, ptr %a276 store { ptr, i64, i64 } { ptr @.str.2832, i64 11, i64 0 }, ptr %a277 call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) store { ptr, i64, i64 } %t274, ptr %a278 call void @finch_str_drop(ptr %a278) %t279 = load { ptr, i64, i64 }, ptr %a275 %t280 = load ptr, ptr %a1 %t281 = icmp eq ptr %t280, null br i1 %t281, label %panic4636, label %ok4637 panic4636: call void @finch_panic(ptr @.str.2833, i64 2070, ptr @.str.2834) unreachable ok4637: %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 33 %t283 = load i64, ptr %a49 %t284 = load { ptr, i64, i64 }, ptr %t282 %t285 = extractvalue { ptr, i64, i64 } %t284, 1 %t286 = icmp uge i64 %t283, %t285 br i1 %t286, label %range4638, label %inrange4639 range4638: call void @finch_panic_index(ptr @.str.2835, i64 2070, i64 %t283, i64 %t285) unreachable inrange4639: %t287 = extractvalue { ptr, i64, i64 } %t284, 0 %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 %t283 %t289 = load { ptr, i64, i64 }, ptr %t288 store { ptr, i64, i64 } %t279, ptr %t288 store { ptr, i64, i64 } %t289, ptr %a290 call void @finch_str_drop(ptr %a290) br label %endif4630 else4629: %t291 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t291, ptr %a292 store { ptr, i64, i64 } { ptr @.str.2836, i64 5, i64 0 }, ptr %a293 %t294 = call i32 @finch_str_eq(ptr %a292, ptr %a293) %t295 = icmp ne i32 %t294, 0 br i1 %t295, label %then4640, label %else4641 then4640: %t296 = load ptr, ptr %a1 %t297 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t298 = load { ptr, i64, i64 }, ptr %t297 %t299 = extractvalue { ptr, i64, i64 } %t298, 1 %t300 = icmp uge i64 0, %t299 br i1 %t300, label %range4643, label %inrange4644 range4643: call void @finch_panic_index(ptr @.str.2837, i64 2072, i64 0, i64 %t299) unreachable inrange4644: %t301 = extractvalue { ptr, i64, i64 } %t298, 0 %t302 = getelementptr inbounds %S.ast.Type, ptr %t301, i64 0 %t303 = load %S.ast.Type, ptr %t302 %t304 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t296, %S.ast.Type %t303) store %S.gen.SizeAlign %t304, ptr %a305 %t306 = load ptr, ptr %a1 %t307 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t308 = load i64, ptr %t307 call void @finch_str_from_int(ptr %a309, i64 %t308) %t310 = load { ptr, i64, i64 }, ptr %a309 store { ptr, i64, i64 } { ptr @.str.2838, i64 19, i64 0 }, ptr %a312 store { ptr, i64, i64 } %t310, ptr %a313 call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313) store { ptr, i64, i64 } %t310, ptr %a314 call void @finch_str_drop(ptr %a314) %t315 = load { ptr, i64, i64 }, ptr %a311 store { ptr, i64, i64 } %t315, ptr %a317 store { ptr, i64, i64 } { ptr @.str.2839, i64 1, i64 0 }, ptr %a318 call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) store { ptr, i64, i64 } %t315, ptr %a319 call void @finch_str_drop(ptr %a319) %t320 = load { ptr, i64, i64 }, ptr %a316 %t321 = call i64 @finch.gen.md(ptr %t306, { ptr, i64, i64 } %t320) store { ptr, i64, i64 } %t320, ptr %a322 call void @finch_str_drop(ptr %a322) store i64 %t321, ptr %a323 %t324 = load ptr, ptr %a1 %t325 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t326 = load { ptr, i64, i64 }, ptr %t325 %t327 = extractvalue { ptr, i64, i64 } %t326, 1 %t328 = icmp uge i64 0, %t327 br i1 %t328, label %range4645, label %inrange4646 range4645: call void @finch_panic_index(ptr @.str.2841, i64 2074, i64 0, i64 %t327) unreachable inrange4646: %t329 = extractvalue { ptr, i64, i64 } %t326, 0 %t330 = getelementptr inbounds %S.ast.Type, ptr %t329, i64 0 %t331 = load %S.ast.Type, ptr %t330 %t332 = call i64 @finch.gen.diType(ptr %t324, %S.ast.Type %t331) %t333 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t332) store { ptr, i64, i64 } { ptr @.str.2840, i64 51, i64 0 }, ptr %a335 store { ptr, i64, i64 } %t333, ptr %a336 call void @finch_str_concat(ptr %a334, ptr %a335, ptr %a336) store { ptr, i64, i64 } %t333, ptr %a337 call void @finch_str_drop(ptr %a337) %t338 = load { ptr, i64, i64 }, ptr %a334 store { ptr, i64, i64 } %t338, ptr %a340 store { ptr, i64, i64 } { ptr @.str.2842, i64 8, i64 0 }, ptr %a341 call void @finch_str_concat(ptr %a339, ptr %a340, ptr %a341) store { ptr, i64, i64 } %t338, ptr %a342 call void @finch_str_drop(ptr %a342) %t343 = load { ptr, i64, i64 }, ptr %a339 %t344 = getelementptr inbounds %S.gen.SizeAlign, ptr %a305, i32 0, i32 0 %t345 = load i64, ptr %t344 %t346 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t347 = load i64, ptr %t346 %t348 = mul i64 %t345, %t347 %t349 = mul i64 %t348, 8 call void @finch_str_from_int(ptr %a350, i64 %t349) %t351 = load { ptr, i64, i64 }, ptr %a350 store { ptr, i64, i64 } %t343, ptr %a353 store { ptr, i64, i64 } %t351, ptr %a354 call void @finch_str_concat(ptr %a352, ptr %a353, ptr %a354) store { ptr, i64, i64 } %t343, ptr %a355 call void @finch_str_drop(ptr %a355) store { ptr, i64, i64 } %t351, ptr %a356 call void @finch_str_drop(ptr %a356) %t357 = load { ptr, i64, i64 }, ptr %a352 store { ptr, i64, i64 } %t357, ptr %a359 store { ptr, i64, i64 } { ptr @.str.2843, i64 15, i64 0 }, ptr %a360 call void @finch_str_concat(ptr %a358, ptr %a359, ptr %a360) store { ptr, i64, i64 } %t357, ptr %a361 call void @finch_str_drop(ptr %a361) %t362 = load { ptr, i64, i64 }, ptr %a358 %t363 = load i64, ptr %a323 call void @finch_str_from_int(ptr %a364, i64 %t363) %t365 = load { ptr, i64, i64 }, ptr %a364 store { ptr, i64, i64 } %t362, ptr %a367 store { ptr, i64, i64 } %t365, ptr %a368 call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) store { ptr, i64, i64 } %t362, ptr %a369 call void @finch_str_drop(ptr %a369) store { ptr, i64, i64 } %t365, ptr %a370 call void @finch_str_drop(ptr %a370) %t371 = load { ptr, i64, i64 }, ptr %a366 store { ptr, i64, i64 } %t371, ptr %a373 store { ptr, i64, i64 } { ptr @.str.2844, i64 2, i64 0 }, ptr %a374 call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) store { ptr, i64, i64 } %t371, ptr %a375 call void @finch_str_drop(ptr %a375) %t376 = load { ptr, i64, i64 }, ptr %a372 %t377 = load ptr, ptr %a1 %t378 = icmp eq ptr %t377, null br i1 %t378, label %panic4647, label %ok4648 panic4647: call void @finch_panic(ptr @.str.2845, i64 2074, ptr @.str.2846) unreachable ok4648: %t379 = getelementptr inbounds %S.gen.Gen, ptr %t377, i32 0, i32 33 %t380 = load i64, ptr %a49 %t381 = load { ptr, i64, i64 }, ptr %t379 %t382 = extractvalue { ptr, i64, i64 } %t381, 1 %t383 = icmp uge i64 %t380, %t382 br i1 %t383, label %range4649, label %inrange4650 range4649: call void @finch_panic_index(ptr @.str.2847, i64 2074, i64 %t380, i64 %t382) unreachable inrange4650: %t384 = extractvalue { ptr, i64, i64 } %t381, 0 %t385 = getelementptr inbounds { ptr, i64, i64 }, ptr %t384, i64 %t380 %t386 = load { ptr, i64, i64 }, ptr %t385 store { ptr, i64, i64 } %t376, ptr %t385 store { ptr, i64, i64 } %t386, ptr %a387 call void @finch_str_drop(ptr %a387) br label %endif4642 else4641: %t388 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t388, ptr %a389 store { ptr, i64, i64 } { ptr @.str.2848, i64 3, i64 0 }, ptr %a390 %t391 = call i32 @finch_str_eq(ptr %a389, ptr %a390) %t392 = icmp ne i32 %t391, 0 br label %logic.from4651 logic.from4651: br i1 %t392, label %logic.end4653, label %logic.rhs4652 logic.rhs4652: %t393 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t393, ptr %a394 store { ptr, i64, i64 } { ptr @.str.2849, i64 5, i64 0 }, ptr %a395 %t396 = call i32 @finch_str_eq(ptr %a394, ptr %a395) %t397 = icmp ne i32 %t396, 0 br label %logic.rend4654 logic.rend4654: br label %logic.end4653 logic.end4653: %t398 = phi i1 [ true, %logic.from4651 ], [ %t397, %logic.rend4654 ] br i1 %t398, label %then4655, label %else4656 then4655: %t399 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2850, i64 4, i64 0 }) store %S.ast.Type %t399, ptr %a400 %t401 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t401, ptr %a402 store { ptr, i64, i64 } { ptr @.str.2851, i64 5, i64 0 }, ptr %a403 %t404 = call i32 @finch_str_eq(ptr %a402, ptr %a403) %t405 = icmp ne i32 %t404, 0 br i1 %t405, label %then4658, label %endif4660 then4658: %t406 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t407 = load { ptr, i64, i64 }, ptr %t406 %t408 = extractvalue { ptr, i64, i64 } %t407, 1 %t409 = icmp uge i64 0, %t408 br i1 %t409, label %range4661, label %inrange4662 range4661: call void @finch_panic_index(ptr @.str.2852, i64 2078, i64 0, i64 %t408) unreachable inrange4662: %t410 = extractvalue { ptr, i64, i64 } %t407, 0 %t411 = getelementptr inbounds %S.ast.Type, ptr %t410, i64 0 %t412 = load %S.ast.Type, ptr %t411 store %S.ast.Type %t412, ptr %a413 call void @finch.copy.S_ast_Type(ptr %a414, ptr %a413) %t415 = load %S.ast.Type, ptr %a414 %t416 = load %S.ast.Type, ptr %a400 store %S.ast.Type %t415, ptr %a400 store %S.ast.Type %t416, ptr %a417 call void @finch.drop.S_ast_Type(ptr %a417) br label %endif4660 endif4660: %t418 = load ptr, ptr %a1 %t419 = load ptr, ptr %a1 %t420 = load %S.ast.Type, ptr %a400 %t421 = call i64 @finch.gen.diType(ptr %t419, %S.ast.Type %t420) %t422 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t421) store { ptr, i64, i64 } { ptr @.str.2853, i64 51, i64 0 }, ptr %a424 store { ptr, i64, i64 } %t422, ptr %a425 call void @finch_str_concat(ptr %a423, ptr %a424, ptr %a425) store { ptr, i64, i64 } %t422, ptr %a426 call void @finch_str_drop(ptr %a426) %t427 = load { ptr, i64, i64 }, ptr %a423 store { ptr, i64, i64 } %t427, ptr %a429 store { ptr, i64, i64 } { ptr @.str.2854, i64 11, i64 0 }, ptr %a430 call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430) store { ptr, i64, i64 } %t427, ptr %a431 call void @finch_str_drop(ptr %a431) %t432 = load { ptr, i64, i64 }, ptr %a428 %t433 = call i64 @finch.gen.md(ptr %t418, { ptr, i64, i64 } %t432) store { ptr, i64, i64 } %t432, ptr %a434 call void @finch_str_drop(ptr %a434) store i64 %t433, ptr %a435 %t436 = load ptr, ptr %a1 %t437 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2855, i64 3, i64 0 }) %t438 = call i64 @finch.gen.diType(ptr %t436, %S.ast.Type %t437) store %S.ast.Type %t437, ptr %a439 call void @finch.drop.S_ast_Type(ptr %a439) store i64 %t438, ptr %a440 %t441 = load ptr, ptr %a1 %t442 = load i64, ptr %a49 %t443 = load i64, ptr %a59 %t444 = load i64, ptr %a435 %t445 = call i64 @finch.gen.dbgMember(ptr %t441, { ptr, i64, i64 } { ptr @.str.2856, i64 3, i64 0 }, i64 %t442, i64 %t443, i64 0, i64 %t444, i64 64, i64 0) store i64 %t445, ptr %a446 %t447 = load ptr, ptr %a1 %t448 = load i64, ptr %a49 %t449 = load i64, ptr %a59 %t450 = load i64, ptr %a440 %t451 = call i64 @finch.gen.dbgMember(ptr %t447, { ptr, i64, i64 } { ptr @.str.2857, i64 3, i64 0 }, i64 %t448, i64 %t449, i64 0, i64 %t450, i64 64, i64 64) store i64 %t451, ptr %a452 %t453 = load ptr, ptr %a1 %t454 = load i64, ptr %a49 %t455 = load i64, ptr %a59 %t456 = load i64, ptr %a440 %t457 = call i64 @finch.gen.dbgMember(ptr %t453, { ptr, i64, i64 } { ptr @.str.2858, i64 3, i64 0 }, i64 %t454, i64 %t455, i64 0, i64 %t456, i64 64, i64 128) store i64 %t457, ptr %a458 %t459 = load %S.ast.Type, ptr %a2 %t460 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t459) store { ptr, i64, i64 } { ptr @.str.2859, i64 52, i64 0 }, ptr %a462 store { ptr, i64, i64 } %t460, ptr %a463 call void @finch_str_concat(ptr %a461, ptr %a462, ptr %a463) store { ptr, i64, i64 } %t460, ptr %a464 call void @finch_str_drop(ptr %a464) %t465 = load { ptr, i64, i64 }, ptr %a461 store { ptr, i64, i64 } %t465, ptr %a467 store { ptr, i64, i64 } { ptr @.str.2860, i64 10, i64 0 }, ptr %a468 call void @finch_str_concat(ptr %a466, ptr %a467, ptr %a468) store { ptr, i64, i64 } %t465, ptr %a469 call void @finch_str_drop(ptr %a469) %t470 = load { ptr, i64, i64 }, ptr %a466 %t471 = load i64, ptr %a59 call void @finch_str_from_int(ptr %a472, i64 %t471) %t473 = load { ptr, i64, i64 }, ptr %a472 store { ptr, i64, i64 } %t470, ptr %a475 store { ptr, i64, i64 } %t473, ptr %a476 call void @finch_str_concat(ptr %a474, ptr %a475, ptr %a476) store { ptr, i64, i64 } %t470, ptr %a477 call void @finch_str_drop(ptr %a477) store { ptr, i64, i64 } %t473, ptr %a478 call void @finch_str_drop(ptr %a478) %t479 = load { ptr, i64, i64 }, ptr %a474 store { ptr, i64, i64 } %t479, ptr %a481 store { ptr, i64, i64 } { ptr @.str.2861, i64 37, i64 0 }, ptr %a482 call void @finch_str_concat(ptr %a480, ptr %a481, ptr %a482) store { ptr, i64, i64 } %t479, ptr %a483 call void @finch_str_drop(ptr %a483) %t484 = load { ptr, i64, i64 }, ptr %a480 %t485 = load i64, ptr %a446 call void @finch_str_from_int(ptr %a486, i64 %t485) %t487 = load { ptr, i64, i64 }, ptr %a486 store { ptr, i64, i64 } %t484, ptr %a489 store { ptr, i64, i64 } %t487, ptr %a490 call void @finch_str_concat(ptr %a488, ptr %a489, ptr %a490) store { ptr, i64, i64 } %t484, ptr %a491 call void @finch_str_drop(ptr %a491) store { ptr, i64, i64 } %t487, ptr %a492 call void @finch_str_drop(ptr %a492) %t493 = load { ptr, i64, i64 }, ptr %a488 store { ptr, i64, i64 } %t493, ptr %a495 store { ptr, i64, i64 } { ptr @.str.2862, i64 3, i64 0 }, ptr %a496 call void @finch_str_concat(ptr %a494, ptr %a495, ptr %a496) store { ptr, i64, i64 } %t493, ptr %a497 call void @finch_str_drop(ptr %a497) %t498 = load { ptr, i64, i64 }, ptr %a494 %t499 = load i64, ptr %a452 call void @finch_str_from_int(ptr %a500, i64 %t499) %t501 = load { ptr, i64, i64 }, ptr %a500 store { ptr, i64, i64 } %t498, ptr %a503 store { ptr, i64, i64 } %t501, ptr %a504 call void @finch_str_concat(ptr %a502, ptr %a503, ptr %a504) store { ptr, i64, i64 } %t498, ptr %a505 call void @finch_str_drop(ptr %a505) store { ptr, i64, i64 } %t501, ptr %a506 call void @finch_str_drop(ptr %a506) %t507 = load { ptr, i64, i64 }, ptr %a502 store { ptr, i64, i64 } %t507, ptr %a509 store { ptr, i64, i64 } { ptr @.str.2863, i64 3, i64 0 }, ptr %a510 call void @finch_str_concat(ptr %a508, ptr %a509, ptr %a510) store { ptr, i64, i64 } %t507, ptr %a511 call void @finch_str_drop(ptr %a511) %t512 = load { ptr, i64, i64 }, ptr %a508 %t513 = load i64, ptr %a458 call void @finch_str_from_int(ptr %a514, i64 %t513) %t515 = load { ptr, i64, i64 }, ptr %a514 store { ptr, i64, i64 } %t512, ptr %a517 store { ptr, i64, i64 } %t515, ptr %a518 call void @finch_str_concat(ptr %a516, ptr %a517, ptr %a518) store { ptr, i64, i64 } %t512, ptr %a519 call void @finch_str_drop(ptr %a519) store { ptr, i64, i64 } %t515, ptr %a520 call void @finch_str_drop(ptr %a520) %t521 = load { ptr, i64, i64 }, ptr %a516 store { ptr, i64, i64 } %t521, ptr %a523 store { ptr, i64, i64 } { ptr @.str.2864, i64 2, i64 0 }, ptr %a524 call void @finch_str_concat(ptr %a522, ptr %a523, ptr %a524) store { ptr, i64, i64 } %t521, ptr %a525 call void @finch_str_drop(ptr %a525) %t526 = load { ptr, i64, i64 }, ptr %a522 %t527 = load ptr, ptr %a1 %t528 = icmp eq ptr %t527, null br i1 %t528, label %panic4663, label %ok4664 panic4663: call void @finch_panic(ptr @.str.2865, i64 2085, ptr @.str.2866) unreachable ok4664: %t529 = getelementptr inbounds %S.gen.Gen, ptr %t527, i32 0, i32 33 %t530 = load i64, ptr %a49 %t531 = load { ptr, i64, i64 }, ptr %t529 %t532 = extractvalue { ptr, i64, i64 } %t531, 1 %t533 = icmp uge i64 %t530, %t532 br i1 %t533, label %range4665, label %inrange4666 range4665: call void @finch_panic_index(ptr @.str.2867, i64 2085, i64 %t530, i64 %t532) unreachable inrange4666: %t534 = extractvalue { ptr, i64, i64 } %t531, 0 %t535 = getelementptr inbounds { ptr, i64, i64 }, ptr %t534, i64 %t530 %t536 = load { ptr, i64, i64 }, ptr %t535 store { ptr, i64, i64 } %t526, ptr %t535 store { ptr, i64, i64 } %t536, ptr %a537 call void @finch_str_drop(ptr %a537) call void @finch.drop.S_ast_Type(ptr %a400) br label %endif4657 else4656: %t538 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t538, ptr %a539 store { ptr, i64, i64 } { ptr @.str.2868, i64 3, i64 0 }, ptr %a540 %t541 = call i32 @finch_str_eq(ptr %a539, ptr %a540) %t542 = icmp ne i32 %t541, 0 br i1 %t542, label %then4667, label %else4668 then4667: %t543 = load ptr, ptr %a1 %t544 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2869, i64 3, i64 0 }) %t545 = call i64 @finch.gen.diType(ptr %t543, %S.ast.Type %t544) store %S.ast.Type %t544, ptr %a546 call void @finch.drop.S_ast_Type(ptr %a546) store i64 %t545, ptr %a547 %t548 = load ptr, ptr %a1 %t549 = call i64 @finch.gen.md(ptr %t548, { ptr, i64, i64 } { ptr @.str.2870, i64 66, i64 0 }) store i64 %t549, ptr %a550 %t551 = mul i64 7, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t552 = call ptr @finch_alloc(i64 %t551) %t553 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 0 store { ptr, i64, i64 } { ptr @.str.2871, i64 7, i64 0 }, ptr %t553 %t554 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 1 store { ptr, i64, i64 } { ptr @.str.2872, i64 3, i64 0 }, ptr %t554 %t555 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 2 store { ptr, i64, i64 } { ptr @.str.2873, i64 4, i64 0 }, ptr %t555 %t556 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 3 store { ptr, i64, i64 } { ptr @.str.2874, i64 3, i64 0 }, ptr %t556 %t557 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 4 store { ptr, i64, i64 } { ptr @.str.2875, i64 5, i64 0 }, ptr %t557 %t558 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 5 store { ptr, i64, i64 } { ptr @.str.2876, i64 4, i64 0 }, ptr %t558 %t559 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 6 store { ptr, i64, i64 } { ptr @.str.2877, i64 4, i64 0 }, ptr %t559 %t560 = insertvalue { ptr, i64, i64 } undef, ptr %t552, 0 %t561 = insertvalue { ptr, i64, i64 } %t560, i64 7, 1 %t562 = insertvalue { ptr, i64, i64 } %t561, i64 7, 2 store { ptr, i64, i64 } %t562, ptr %a563 store { ptr, i64, i64 } zeroinitializer, ptr %a564 store i64 0, ptr %a565 br label %for.cond4670 for.cond4670: %t566 = load i64, ptr %a565 %t567 = icmp slt i64 %t566, 7 br i1 %t567, label %for.body4671, label %for.end4673 for.body4671: %t568 = load i64, ptr %a547 store i64 %t568, ptr %a569 %t570 = load i64, ptr %a565 %t571 = icmp eq i64 %t570, 0 br label %logic.from4674 logic.from4674: br i1 %t571, label %logic.end4676, label %logic.rhs4675 logic.rhs4675: %t572 = load i64, ptr %a565 %t573 = icmp eq i64 %t572, 4 br label %logic.rend4677 logic.rend4677: br label %logic.end4676 logic.end4676: %t574 = phi i1 [ true, %logic.from4674 ], [ %t573, %logic.rend4677 ] br i1 %t574, label %then4678, label %endif4680 then4678: %t575 = load i64, ptr %a550 store i64 %t575, ptr %a569 br label %endif4680 endif4680: %t576 = getelementptr inbounds { ptr, i64, i64 }, ptr %a564, i32 0, i32 1 %t577 = load ptr, ptr %a1 %t578 = load i64, ptr %a565 %t579 = load { ptr, i64, i64 }, ptr %a563 %t580 = extractvalue { ptr, i64, i64 } %t579, 1 %t581 = icmp uge i64 %t578, %t580 br i1 %t581, label %range4681, label %inrange4682 range4681: call void @finch_panic_index(ptr @.str.2879, i64 2096, i64 %t578, i64 %t580) unreachable inrange4682: %t582 = extractvalue { ptr, i64, i64 } %t579, 0 %t583 = getelementptr inbounds { ptr, i64, i64 }, ptr %t582, i64 %t578 %t584 = load { ptr, i64, i64 }, ptr %t583 %t585 = load i64, ptr %a49 %t586 = load i64, ptr %a59 %t587 = load i64, ptr %a569 %t588 = load i64, ptr %a565 %t589 = mul i64 64, %t588 %t590 = call i64 @finch.gen.dbgMember(ptr %t577, { ptr, i64, i64 } %t584, i64 %t585, i64 %t586, i64 0, i64 %t587, i64 64, i64 %t589) call void @finch_str_from_int(ptr %a591, i64 %t590) %t592 = load { ptr, i64, i64 }, ptr %a591 store { ptr, i64, i64 } { ptr @.str.2878, i64 1, i64 0 }, ptr %a594 store { ptr, i64, i64 } %t592, ptr %a595 call void @finch_str_concat(ptr %a593, ptr %a594, ptr %a595) store { ptr, i64, i64 } %t592, ptr %a596 call void @finch_str_drop(ptr %a596) %t597 = load { ptr, i64, i64 }, ptr %a593 %t598 = load i64, ptr %t576 %t599 = add i64 %t598, 1 call void @finch_arr_reserve(ptr %a564, i64 %t599, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t600 = load ptr, ptr %a564 %t601 = getelementptr inbounds { ptr, i64, i64 }, ptr %t600, i64 %t598 store { ptr, i64, i64 } %t597, ptr %t601 store i64 %t599, ptr %t576 br label %for.step4672 for.step4672: %t602 = load i64, ptr %a565 %t603 = add i64 %t602, 1 store i64 %t603, ptr %a565 br label %for.cond4670 for.end4673: %t604 = load %S.ast.Type, ptr %a2 %t605 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t604) store { ptr, i64, i64 } { ptr @.str.2880, i64 52, i64 0 }, ptr %a607 store { ptr, i64, i64 } %t605, ptr %a608 call void @finch_str_concat(ptr %a606, ptr %a607, ptr %a608) store { ptr, i64, i64 } %t605, ptr %a609 call void @finch_str_drop(ptr %a609) %t610 = load { ptr, i64, i64 }, ptr %a606 store { ptr, i64, i64 } %t610, ptr %a612 store { ptr, i64, i64 } { ptr @.str.2881, i64 10, i64 0 }, ptr %a613 call void @finch_str_concat(ptr %a611, ptr %a612, ptr %a613) store { ptr, i64, i64 } %t610, ptr %a614 call void @finch_str_drop(ptr %a614) %t615 = load { ptr, i64, i64 }, ptr %a611 %t616 = load i64, ptr %a59 call void @finch_str_from_int(ptr %a617, i64 %t616) %t618 = load { ptr, i64, i64 }, ptr %a617 store { ptr, i64, i64 } %t615, ptr %a620 store { ptr, i64, i64 } %t618, ptr %a621 call void @finch_str_concat(ptr %a619, ptr %a620, ptr %a621) store { ptr, i64, i64 } %t615, ptr %a622 call void @finch_str_drop(ptr %a622) store { ptr, i64, i64 } %t618, ptr %a623 call void @finch_str_drop(ptr %a623) %t624 = load { ptr, i64, i64 }, ptr %a619 store { ptr, i64, i64 } %t624, ptr %a626 store { ptr, i64, i64 } { ptr @.str.2882, i64 36, i64 0 }, ptr %a627 call void @finch_str_concat(ptr %a625, ptr %a626, ptr %a627) store { ptr, i64, i64 } %t624, ptr %a628 call void @finch_str_drop(ptr %a628) %t629 = load { ptr, i64, i64 }, ptr %a625 %t630 = getelementptr inbounds { ptr, i64, i64 }, ptr %a564, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2883, i64 2, i64 0 }, ptr %a631 call void @finch_str_join(ptr %a632, ptr %a564, ptr %a631) %t633 = load { ptr, i64, i64 }, ptr %a632 store { ptr, i64, i64 } %t629, ptr %a635 store { ptr, i64, i64 } %t633, ptr %a636 call void @finch_str_concat(ptr %a634, ptr %a635, ptr %a636) store { ptr, i64, i64 } %t629, ptr %a637 call void @finch_str_drop(ptr %a637) store { ptr, i64, i64 } %t633, ptr %a638 call void @finch_str_drop(ptr %a638) %t639 = load { ptr, i64, i64 }, ptr %a634 store { ptr, i64, i64 } %t639, ptr %a641 store { ptr, i64, i64 } { ptr @.str.2884, i64 2, i64 0 }, ptr %a642 call void @finch_str_concat(ptr %a640, ptr %a641, ptr %a642) store { ptr, i64, i64 } %t639, ptr %a643 call void @finch_str_drop(ptr %a643) %t644 = load { ptr, i64, i64 }, ptr %a640 %t645 = load ptr, ptr %a1 %t646 = icmp eq ptr %t645, null br i1 %t646, label %panic4683, label %ok4684 panic4683: call void @finch_panic(ptr @.str.2885, i64 2098, ptr @.str.2886) unreachable ok4684: %t647 = getelementptr inbounds %S.gen.Gen, ptr %t645, i32 0, i32 33 %t648 = load i64, ptr %a49 %t649 = load { ptr, i64, i64 }, ptr %t647 %t650 = extractvalue { ptr, i64, i64 } %t649, 1 %t651 = icmp uge i64 %t648, %t650 br i1 %t651, label %range4685, label %inrange4686 range4685: call void @finch_panic_index(ptr @.str.2887, i64 2098, i64 %t648, i64 %t650) unreachable inrange4686: %t652 = extractvalue { ptr, i64, i64 } %t649, 0 %t653 = getelementptr inbounds { ptr, i64, i64 }, ptr %t652, i64 %t648 %t654 = load { ptr, i64, i64 }, ptr %t653 store { ptr, i64, i64 } %t644, ptr %t653 store { ptr, i64, i64 } %t654, ptr %a655 call void @finch_str_drop(ptr %a655) call void @finch.drop.arr_str(ptr %a564) call void @finch.drop.arr_str(ptr %a563) br label %endif4669 else4668: %t656 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t656, ptr %a657 store { ptr, i64, i64 } { ptr @.str.2888, i64 6, i64 0 }, ptr %a658 %t659 = call i32 @finch_str_eq(ptr %a657, ptr %a658) %t660 = icmp ne i32 %t659, 0 br i1 %t660, label %then4687, label %else4688 then4687: %t661 = load ptr, ptr %a1 %t662 = icmp eq ptr %t661, null br i1 %t662, label %panic4690, label %ok4691 panic4690: call void @finch_panic(ptr @.str.2889, i64 2100, ptr @.str.2890) unreachable ok4691: %t663 = getelementptr inbounds %S.gen.Gen, ptr %t661, i32 0, i32 16 %t664 = load ptr, ptr %a1 %t665 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t666 = load { ptr, i64, i64 }, ptr %t665 %t667 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t668 = load { ptr, i64, i64 }, ptr %t667 %t669 = call i64 @finch.gen.findStruct(ptr %t664, { ptr, i64, i64 } %t666, { ptr, i64, i64 } %t668) %t670 = load { ptr, i64, i64 }, ptr %t663 %t671 = extractvalue { ptr, i64, i64 } %t670, 1 %t672 = icmp uge i64 %t669, %t671 br i1 %t672, label %range4692, label %inrange4693 range4692: call void @finch_panic_index(ptr @.str.2891, i64 2100, i64 %t669, i64 %t671) unreachable inrange4693: %t673 = extractvalue { ptr, i64, i64 } %t670, 0 %t674 = getelementptr inbounds %S.gen.StructDef, ptr %t673, i64 %t669 %t675 = load %S.gen.StructDef, ptr %t674 store %S.gen.StructDef %t675, ptr %a676 call void @finch.copy.S_gen_StructDef(ptr %a677, ptr %a676) %t678 = load %S.gen.StructDef, ptr %a677 store %S.gen.StructDef %t678, ptr %a679 %t680 = load ptr, ptr %a1 %t681 = load %S.gen.StructDef, ptr %a679 %t682 = call { ptr, i64, i64 } @finch.gen.fieldOffsets(ptr %t680, %S.gen.StructDef %t681) store { ptr, i64, i64 } %t682, ptr %a683 %t684 = load ptr, ptr %a1 %t685 = load %S.ast.Type, ptr %a2 %t686 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t684, %S.ast.Type %t685) store %S.gen.SizeAlign %t686, ptr %a687 store { ptr, i64, i64 } zeroinitializer, ptr %a688 %t689 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 12 %t690 = getelementptr inbounds { ptr, i64, i64 }, ptr %t689, i32 0, i32 1 %t691 = load i64, ptr %t690 store i64 0, ptr %a692 br label %for.cond4694 for.cond4694: %t693 = load i64, ptr %a692 %t694 = icmp slt i64 %t693, %t691 br i1 %t694, label %for.body4695, label %for.end4697 for.body4695: %t695 = load ptr, ptr %a1 %t696 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 12 %t697 = load i64, ptr %a692 %t698 = load { ptr, i64, i64 }, ptr %t696 %t699 = extractvalue { ptr, i64, i64 } %t698, 1 %t700 = icmp uge i64 %t697, %t699 br i1 %t700, label %range4698, label %inrange4699 range4698: call void @finch_panic_index(ptr @.str.2892, i64 2105, i64 %t697, i64 %t699) unreachable inrange4699: %t701 = extractvalue { ptr, i64, i64 } %t698, 0 %t702 = getelementptr inbounds %S.ast.Type, ptr %t701, i64 %t697 %t703 = load %S.ast.Type, ptr %t702 %t704 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t695, %S.ast.Type %t703) store %S.gen.SizeAlign %t704, ptr %a705 %t706 = getelementptr inbounds { ptr, i64, i64 }, ptr %a688, i32 0, i32 1 %t707 = load ptr, ptr %a1 %t708 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 11 %t709 = load i64, ptr %a692 %t710 = load { ptr, i64, i64 }, ptr %t708 %t711 = extractvalue { ptr, i64, i64 } %t710, 1 %t712 = icmp uge i64 %t709, %t711 br i1 %t712, label %range4700, label %inrange4701 range4700: call void @finch_panic_index(ptr @.str.2894, i64 2106, i64 %t709, i64 %t711) unreachable inrange4701: %t713 = extractvalue { ptr, i64, i64 } %t710, 0 %t714 = getelementptr inbounds { ptr, i64, i64 }, ptr %t713, i64 %t709 %t715 = load { ptr, i64, i64 }, ptr %t714 %t716 = load i64, ptr %a49 %t717 = load i64, ptr %a59 %t718 = load ptr, ptr %a1 %t719 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 12 %t720 = load i64, ptr %a692 %t721 = load { ptr, i64, i64 }, ptr %t719 %t722 = extractvalue { ptr, i64, i64 } %t721, 1 %t723 = icmp uge i64 %t720, %t722 br i1 %t723, label %range4702, label %inrange4703 range4702: call void @finch_panic_index(ptr @.str.2895, i64 2106, i64 %t720, i64 %t722) unreachable inrange4703: %t724 = extractvalue { ptr, i64, i64 } %t721, 0 %t725 = getelementptr inbounds %S.ast.Type, ptr %t724, i64 %t720 %t726 = load %S.ast.Type, ptr %t725 %t727 = call i64 @finch.gen.diType(ptr %t718, %S.ast.Type %t726) %t728 = getelementptr inbounds %S.gen.SizeAlign, ptr %a705, i32 0, i32 0 %t729 = load i64, ptr %t728 %t730 = mul i64 %t729, 8 %t731 = load i64, ptr %a692 %t732 = load { ptr, i64, i64 }, ptr %a683 %t733 = extractvalue { ptr, i64, i64 } %t732, 1 %t734 = icmp uge i64 %t731, %t733 br i1 %t734, label %range4704, label %inrange4705 range4704: call void @finch_panic_index(ptr @.str.2896, i64 2106, i64 %t731, i64 %t733) unreachable inrange4705: %t735 = extractvalue { ptr, i64, i64 } %t732, 0 %t736 = getelementptr inbounds i64, ptr %t735, i64 %t731 %t737 = load i64, ptr %t736 %t738 = mul i64 %t737, 8 %t739 = call i64 @finch.gen.dbgMember(ptr %t707, { ptr, i64, i64 } %t715, i64 %t716, i64 %t717, i64 0, i64 %t727, i64 %t730, i64 %t738) call void @finch_str_from_int(ptr %a740, i64 %t739) %t741 = load { ptr, i64, i64 }, ptr %a740 store { ptr, i64, i64 } { ptr @.str.2893, i64 1, i64 0 }, ptr %a743 store { ptr, i64, i64 } %t741, ptr %a744 call void @finch_str_concat(ptr %a742, ptr %a743, ptr %a744) store { ptr, i64, i64 } %t741, ptr %a745 call void @finch_str_drop(ptr %a745) %t746 = load { ptr, i64, i64 }, ptr %a742 %t747 = load i64, ptr %t706 %t748 = add i64 %t747, 1 call void @finch_arr_reserve(ptr %a688, i64 %t748, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t749 = load ptr, ptr %a688 %t750 = getelementptr inbounds { ptr, i64, i64 }, ptr %t749, i64 %t747 store { ptr, i64, i64 } %t746, ptr %t750 store i64 %t748, ptr %t706 br label %for.step4696 for.step4696: %t751 = load i64, ptr %a692 %t752 = add i64 %t751, 1 store i64 %t752, ptr %a692 br label %for.cond4694 for.end4697: %t753 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 1 %t754 = load { ptr, i64, i64 }, ptr %t753 store { ptr, i64, i64 } { ptr @.str.2897, i64 52, i64 0 }, ptr %a756 store { ptr, i64, i64 } %t754, ptr %a757 call void @finch_str_concat(ptr %a755, ptr %a756, ptr %a757) %t758 = load { ptr, i64, i64 }, ptr %a755 store { ptr, i64, i64 } %t758, ptr %a760 store { ptr, i64, i64 } { ptr @.str.2898, i64 10, i64 0 }, ptr %a761 call void @finch_str_concat(ptr %a759, ptr %a760, ptr %a761) store { ptr, i64, i64 } %t758, ptr %a762 call void @finch_str_drop(ptr %a762) %t763 = load { ptr, i64, i64 }, ptr %a759 %t764 = load i64, ptr %a59 call void @finch_str_from_int(ptr %a765, i64 %t764) %t766 = load { ptr, i64, i64 }, ptr %a765 store { ptr, i64, i64 } %t763, ptr %a768 store { ptr, i64, i64 } %t766, ptr %a769 call void @finch_str_concat(ptr %a767, ptr %a768, ptr %a769) store { ptr, i64, i64 } %t763, ptr %a770 call void @finch_str_drop(ptr %a770) store { ptr, i64, i64 } %t766, ptr %a771 call void @finch_str_drop(ptr %a771) %t772 = load { ptr, i64, i64 }, ptr %a767 store { ptr, i64, i64 } %t772, ptr %a774 store { ptr, i64, i64 } { ptr @.str.2899, i64 8, i64 0 }, ptr %a775 call void @finch_str_concat(ptr %a773, ptr %a774, ptr %a775) store { ptr, i64, i64 } %t772, ptr %a776 call void @finch_str_drop(ptr %a776) %t777 = load { ptr, i64, i64 }, ptr %a773 %t778 = getelementptr inbounds %S.gen.SizeAlign, ptr %a687, i32 0, i32 0 %t779 = load i64, ptr %t778 %t780 = mul i64 %t779, 8 call void @finch_str_from_int(ptr %a781, i64 %t780) %t782 = load { ptr, i64, i64 }, ptr %a781 store { ptr, i64, i64 } %t777, ptr %a784 store { ptr, i64, i64 } %t782, ptr %a785 call void @finch_str_concat(ptr %a783, ptr %a784, ptr %a785) store { ptr, i64, i64 } %t777, ptr %a786 call void @finch_str_drop(ptr %a786) store { ptr, i64, i64 } %t782, ptr %a787 call void @finch_str_drop(ptr %a787) %t788 = load { ptr, i64, i64 }, ptr %a783 store { ptr, i64, i64 } %t788, ptr %a790 store { ptr, i64, i64 } { ptr @.str.2900, i64 24, i64 0 }, ptr %a791 call void @finch_str_concat(ptr %a789, ptr %a790, ptr %a791) store { ptr, i64, i64 } %t788, ptr %a792 call void @finch_str_drop(ptr %a792) %t793 = load { ptr, i64, i64 }, ptr %a789 %t794 = getelementptr inbounds { ptr, i64, i64 }, ptr %a688, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2901, i64 2, i64 0 }, ptr %a795 call void @finch_str_join(ptr %a796, ptr %a688, ptr %a795) %t797 = load { ptr, i64, i64 }, ptr %a796 store { ptr, i64, i64 } %t793, ptr %a799 store { ptr, i64, i64 } %t797, ptr %a800 call void @finch_str_concat(ptr %a798, ptr %a799, ptr %a800) store { ptr, i64, i64 } %t793, ptr %a801 call void @finch_str_drop(ptr %a801) store { ptr, i64, i64 } %t797, ptr %a802 call void @finch_str_drop(ptr %a802) %t803 = load { ptr, i64, i64 }, ptr %a798 store { ptr, i64, i64 } %t803, ptr %a805 store { ptr, i64, i64 } { ptr @.str.2902, i64 2, i64 0 }, ptr %a806 call void @finch_str_concat(ptr %a804, ptr %a805, ptr %a806) store { ptr, i64, i64 } %t803, ptr %a807 call void @finch_str_drop(ptr %a807) %t808 = load { ptr, i64, i64 }, ptr %a804 %t809 = load ptr, ptr %a1 %t810 = icmp eq ptr %t809, null br i1 %t810, label %panic4706, label %ok4707 panic4706: call void @finch_panic(ptr @.str.2903, i64 2108, ptr @.str.2904) unreachable ok4707: %t811 = getelementptr inbounds %S.gen.Gen, ptr %t809, i32 0, i32 33 %t812 = load i64, ptr %a49 %t813 = load { ptr, i64, i64 }, ptr %t811 %t814 = extractvalue { ptr, i64, i64 } %t813, 1 %t815 = icmp uge i64 %t812, %t814 br i1 %t815, label %range4708, label %inrange4709 range4708: call void @finch_panic_index(ptr @.str.2905, i64 2108, i64 %t812, i64 %t814) unreachable inrange4709: %t816 = extractvalue { ptr, i64, i64 } %t813, 0 %t817 = getelementptr inbounds { ptr, i64, i64 }, ptr %t816, i64 %t812 %t818 = load { ptr, i64, i64 }, ptr %t817 store { ptr, i64, i64 } %t808, ptr %t817 store { ptr, i64, i64 } %t818, ptr %a819 call void @finch_str_drop(ptr %a819) call void @finch.drop.arr_str(ptr %a688) call void @finch.drop.arr_int(ptr %a683) call void @finch.drop.S_gen_StructDef(ptr %a679) br label %endif4689 else4688: %t820 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.2906, i64 20, i64 0 }, ptr %a822 store { ptr, i64, i64 } %t820, ptr %a823 call void @finch_str_concat(ptr %a821, ptr %a822, ptr %a823) %t824 = load { ptr, i64, i64 }, ptr %a821 store { ptr, i64, i64 } %t824, ptr %a826 store { ptr, i64, i64 } { ptr @.str.2907, i64 39, i64 0 }, ptr %a827 call void @finch_str_concat(ptr %a825, ptr %a826, ptr %a827) store { ptr, i64, i64 } %t824, ptr %a828 call void @finch_str_drop(ptr %a828) %t829 = load { ptr, i64, i64 }, ptr %a825 %t830 = load ptr, ptr %a1 %t831 = icmp eq ptr %t830, null br i1 %t831, label %panic4710, label %ok4711 panic4710: call void @finch_panic(ptr @.str.2908, i64 2110, ptr @.str.2909) unreachable ok4711: %t832 = getelementptr inbounds %S.gen.Gen, ptr %t830, i32 0, i32 33 %t833 = load i64, ptr %a49 %t834 = load { ptr, i64, i64 }, ptr %t832 %t835 = extractvalue { ptr, i64, i64 } %t834, 1 %t836 = icmp uge i64 %t833, %t835 br i1 %t836, label %range4712, label %inrange4713 range4712: call void @finch_panic_index(ptr @.str.2910, i64 2110, i64 %t833, i64 %t835) unreachable inrange4713: %t837 = extractvalue { ptr, i64, i64 } %t834, 0 %t838 = getelementptr inbounds { ptr, i64, i64 }, ptr %t837, i64 %t833 %t839 = load { ptr, i64, i64 }, ptr %t838 store { ptr, i64, i64 } %t829, ptr %t838 store { ptr, i64, i64 } %t839, ptr %a840 call void @finch_str_drop(ptr %a840) br label %endif4689 endif4689: br label %endif4669 endif4669: br label %endif4657 endif4657: br label %endif4642 endif4642: br label %endif4630 endif4630: %t841 = load i64, ptr %a49 call void @finch_str_drop(ptr %a27) call void @finch_str_drop(ptr %a8) ret i64 %t841 endif4611: br label %endif4605 endif4605: br label %endif4602 endif4602: br label %endif4599 endif4599: br label %endif4596 endif4596: br label %endif4593 endif4593: br label %endif4590 endif4590: %t842 = load i64, ptr %a49 %t843 = load ptr, ptr %a1 %t844 = icmp eq ptr %t843, null br i1 %t844, label %panic4714, label %ok4715 panic4714: call void @finch_panic(ptr @.str.2911, i64 2114, ptr @.str.2912) unreachable ok4715: %t845 = getelementptr inbounds %S.gen.Gen, ptr %t843, i32 0, i32 34 %t846 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t846, ptr %a847 store i32 0, ptr %a848 %t849 = call i64 @finch_map_slot(ptr %t845, ptr %a847, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a848) %t850 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t845, i32 0, i32 0 %t851 = load ptr, ptr %t850 %t852 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t851, i64 %t849 %t853 = load i32, ptr %a848 %t854 = icmp ne i32 %t853, 0 br i1 %t854, label %map.new4716, label %map.have4717 map.new4716: %t855 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 1 call void @finch_str_copy(ptr %t855, ptr %a847) %t856 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 2 store i64 0, ptr %t856 br label %map.have4717 map.have4717: %t857 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 2 store i64 %t842, ptr %t857 %t858 = load i64, ptr %a49 call void @finch_str_drop(ptr %a27) call void @finch_str_drop(ptr %a8) ret i64 %t858 } define internal i64 @finch.gen.dbgLocation(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca i64, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca i32, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic4718, label %ok4719 panic4718: call void @finch_panic(ptr @.str.2914, i64 2119, ptr @.str.2915) unreachable ok4719: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 37 %t5 = load i64, ptr %t4 call void @finch_str_from_int(ptr %a6, i64 %t5) %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } { ptr @.str.2913, i64 2, i64 0 }, ptr %a9 store { ptr, i64, i64 } %t7, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) store { ptr, i64, i64 } %t7, ptr %a11 call void @finch_str_drop(ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t12, ptr %a14 store { ptr, i64, i64 } { ptr @.str.2916, i64 1, i64 0 }, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) store { ptr, i64, i64 } %t12, ptr %a16 call void @finch_str_drop(ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a13 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic4720, label %ok4721 panic4720: call void @finch_panic(ptr @.str.2917, i64 2119, ptr @.str.2918) unreachable ok4721: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 38 %t21 = load i64, ptr %t20 call void @finch_str_from_int(ptr %a22, i64 %t21) %t23 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t17, ptr %a25 store { ptr, i64, i64 } %t23, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) store { ptr, i64, i64 } %t17, ptr %a27 call void @finch_str_drop(ptr %a27) store { ptr, i64, i64 } %t23, ptr %a28 call void @finch_str_drop(ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t29, ptr %a31 store { ptr, i64, i64 } { ptr @.str.2919, i64 1, i64 0 }, ptr %a32 call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) store { ptr, i64, i64 } %t29, ptr %a33 call void @finch_str_drop(ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a30 %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null br i1 %t36, label %panic4722, label %ok4723 panic4722: call void @finch_panic(ptr @.str.2920, i64 2119, ptr @.str.2921) unreachable ok4723: %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 36 %t38 = load i64, ptr %t37 call void @finch_str_from_int(ptr %a39, i64 %t38) %t40 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t34, ptr %a42 store { ptr, i64, i64 } %t40, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) store { ptr, i64, i64 } %t34, ptr %a44 call void @finch_str_drop(ptr %a44) store { ptr, i64, i64 } %t40, ptr %a45 call void @finch_str_drop(ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a41 store { ptr, i64, i64 } %t46, ptr %a47 %t48 = load ptr, ptr %a1 %t49 = icmp eq ptr %t48, null br i1 %t49, label %panic4724, label %ok4725 panic4724: call void @finch_panic(ptr @.str.2922, i64 2120, ptr @.str.2923) unreachable ok4725: %t50 = getelementptr inbounds %S.gen.Gen, ptr %t48, i32 0, i32 34 %t51 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t51, ptr %a52 %t53 = call i64 @finch_map_find(ptr %t50, ptr %a52, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t54 = icmp sge i64 %t53, 0 br i1 %t54, label %then4726, label %endif4728 then4726: %t55 = load ptr, ptr %a1 %t56 = icmp eq ptr %t55, null br i1 %t56, label %panic4729, label %ok4730 panic4729: call void @finch_panic(ptr @.str.2924, i64 2121, ptr @.str.2925) unreachable ok4730: %t57 = getelementptr inbounds %S.gen.Gen, ptr %t55, i32 0, i32 34 %t58 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t58, ptr %a59 %t60 = call i64 @finch_map_find(ptr %t57, ptr %a59, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t61 = icmp slt i64 %t60, 0 br i1 %t61, label %map.missing4731, label %map.found4732 map.missing4731: store { ptr, i64, i64 } zeroinitializer, ptr %a62 store { ptr, i64, i64 } %t58, ptr %a63 call void @finch_buf_str(ptr %a62, ptr %a63, i32 1) call void @finch_map_missing(ptr @.str.2926, i64 2121, ptr %a62) unreachable map.found4732: %t64 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t57, i32 0, i32 0 %t65 = load ptr, ptr %t64 %t66 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t65, i64 %t60 %t67 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t66, i32 0, i32 2 %t68 = load i64, ptr %t67 call void @finch_str_drop(ptr %a47) ret i64 %t68 endif4728: %t69 = load ptr, ptr %a1 %t70 = load ptr, ptr %a1 %t71 = icmp eq ptr %t70, null br i1 %t71, label %panic4733, label %ok4734 panic4733: call void @finch_panic(ptr @.str.2928, i64 2123, ptr @.str.2929) unreachable ok4734: %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 37 %t73 = load i64, ptr %t72 call void @finch_str_from_int(ptr %a74, i64 %t73) %t75 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } { ptr @.str.2927, i64 18, i64 0 }, ptr %a77 store { ptr, i64, i64 } %t75, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) store { ptr, i64, i64 } %t75, ptr %a79 call void @finch_str_drop(ptr %a79) %t80 = load { ptr, i64, i64 }, ptr %a76 store { ptr, i64, i64 } %t80, ptr %a82 store { ptr, i64, i64 } { ptr @.str.2930, i64 10, i64 0 }, ptr %a83 call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) store { ptr, i64, i64 } %t80, ptr %a84 call void @finch_str_drop(ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a81 %t86 = load ptr, ptr %a1 %t87 = icmp eq ptr %t86, null br i1 %t87, label %panic4735, label %ok4736 panic4735: call void @finch_panic(ptr @.str.2931, i64 2123, ptr @.str.2932) unreachable ok4736: %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 38 %t89 = load i64, ptr %t88 call void @finch_str_from_int(ptr %a90, i64 %t89) %t91 = load { ptr, i64, i64 }, ptr %a90 store { ptr, i64, i64 } %t85, ptr %a93 store { ptr, i64, i64 } %t91, ptr %a94 call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) store { ptr, i64, i64 } %t85, ptr %a95 call void @finch_str_drop(ptr %a95) store { ptr, i64, i64 } %t91, ptr %a96 call void @finch_str_drop(ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a92 store { ptr, i64, i64 } %t97, ptr %a99 store { ptr, i64, i64 } { ptr @.str.2933, i64 10, i64 0 }, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) store { ptr, i64, i64 } %t97, ptr %a101 call void @finch_str_drop(ptr %a101) %t102 = load { ptr, i64, i64 }, ptr %a98 %t103 = load ptr, ptr %a1 %t104 = icmp eq ptr %t103, null br i1 %t104, label %panic4737, label %ok4738 panic4737: call void @finch_panic(ptr @.str.2934, i64 2123, ptr @.str.2935) unreachable ok4738: %t105 = getelementptr inbounds %S.gen.Gen, ptr %t103, i32 0, i32 36 %t106 = load i64, ptr %t105 call void @finch_str_from_int(ptr %a107, i64 %t106) %t108 = load { ptr, i64, i64 }, ptr %a107 store { ptr, i64, i64 } %t102, ptr %a110 store { ptr, i64, i64 } %t108, ptr %a111 call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) store { ptr, i64, i64 } %t102, ptr %a112 call void @finch_str_drop(ptr %a112) store { ptr, i64, i64 } %t108, ptr %a113 call void @finch_str_drop(ptr %a113) %t114 = load { ptr, i64, i64 }, ptr %a109 store { ptr, i64, i64 } %t114, ptr %a116 store { ptr, i64, i64 } { ptr @.str.2936, i64 1, i64 0 }, ptr %a117 call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) store { ptr, i64, i64 } %t114, ptr %a118 call void @finch_str_drop(ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a115 %t120 = call i64 @finch.gen.md(ptr %t69, { ptr, i64, i64 } %t119) store { ptr, i64, i64 } %t119, ptr %a121 call void @finch_str_drop(ptr %a121) store i64 %t120, ptr %a122 %t123 = load i64, ptr %a122 %t124 = load ptr, ptr %a1 %t125 = icmp eq ptr %t124, null br i1 %t125, label %panic4739, label %ok4740 panic4739: call void @finch_panic(ptr @.str.2937, i64 2124, ptr @.str.2938) unreachable ok4740: %t126 = getelementptr inbounds %S.gen.Gen, ptr %t124, i32 0, i32 34 %t127 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t127, ptr %a128 store i32 0, ptr %a129 %t130 = call i64 @finch_map_slot(ptr %t126, ptr %a128, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a129) %t131 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t126, i32 0, i32 0 %t132 = load ptr, ptr %t131 %t133 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t132, i64 %t130 %t134 = load i32, ptr %a129 %t135 = icmp ne i32 %t134, 0 br i1 %t135, label %map.new4741, label %map.have4742 map.new4741: %t136 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 1 call void @finch_str_copy(ptr %t136, ptr %a128) %t137 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 2 store i64 0, ptr %t137 br label %map.have4742 map.have4742: %t138 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 2 store i64 %t123, ptr %t138 %t139 = load i64, ptr %a122 call void @finch_str_drop(ptr %a47) ret i64 %t139 } define internal i64 @finch.gen.dbgSubprogram(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a7 = alloca %S.gen.FnSig, align 16 %a8 = alloca %S.gen.FnSig, align 16 %a10 = alloca %S.gen.FnSig, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca i64, align 16 %a40 = alloca %S.ast.Type, align 16 %a63 = alloca i64, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca i64, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic4743, label %ok4744 panic4743: call void @finch_panic(ptr @.str.2939, i64 2129, ptr @.str.2940) unreachable ok4744: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 13 %t6 = load %S.gen.FnSig, ptr %t5 store %S.gen.FnSig %t6, ptr %a7 call void @finch.copy.S_gen_FnSig(ptr %a8, ptr %a7) %t9 = load %S.gen.FnSig, ptr %a8 store %S.gen.FnSig %t9, ptr %a10 store { ptr, i64, i64 } zeroinitializer, ptr %a11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 %t13 = load ptr, ptr %a1 %t14 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 12 %t15 = load %S.ast.Type, ptr %t14 %t16 = call i64 @finch.gen.diType(ptr %t13, %S.ast.Type %t15) %t17 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t16) %t18 = load i64, ptr %t12 %t19 = add i64 %t18, 1 call void @finch_arr_reserve(ptr %a11, i64 %t19, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t20 = load ptr, ptr %a11 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 store { ptr, i64, i64 } %t17, ptr %t21 store i64 %t19, ptr %t12 %t22 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 2 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = icmp sgt i64 %t24, 0 br i1 %t25, label %then4745, label %endif4747 then4745: %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 %t27 = load i64, ptr %t26 %t28 = add i64 %t27, 1 call void @finch_arr_reserve(ptr %a11, i64 %t28, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t29 = load ptr, ptr %a11 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 %t27 store { ptr, i64, i64 } { ptr @.str.2941, i64 4, i64 0 }, ptr %t30 store i64 %t28, ptr %t26 br label %endif4747 endif4747: %t31 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 13 store i64 0, ptr %a32 br label %each.cond4748 each.cond4748: %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 %t34 = load i64, ptr %t33 %t35 = load i64, ptr %a32 %t36 = icmp slt i64 %t35, %t34 br i1 %t36, label %each.body4749, label %each.end4751 each.body4749: %t37 = load ptr, ptr %t31 %t38 = getelementptr inbounds %S.ast.Type, ptr %t37, i64 %t35 %t39 = load %S.ast.Type, ptr %t38 store %S.ast.Type %t39, ptr %a40 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 %t42 = load ptr, ptr %a1 %t43 = load %S.ast.Type, ptr %a40 %t44 = call i64 @finch.gen.diType(ptr %t42, %S.ast.Type %t43) %t45 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t44) %t46 = load i64, ptr %t41 %t47 = add i64 %t46, 1 call void @finch_arr_reserve(ptr %a11, i64 %t47, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t48 = load ptr, ptr %a11 %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i64 %t46 store { ptr, i64, i64 } %t45, ptr %t49 store i64 %t47, ptr %t41 br label %each.step4750 each.step4750: %t50 = load i64, ptr %a32 %t51 = add i64 %t50, 1 store i64 %t51, ptr %a32 br label %each.cond4748 each.end4751: %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null br i1 %t53, label %panic4752, label %ok4753 panic4752: call void @finch_panic(ptr @.str.2942, i64 2138, ptr @.str.2943) unreachable ok4753: %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 35 %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t56 = load i64, ptr %t55 %t57 = load { ptr, i64, i64 }, ptr %t54 %t58 = extractvalue { ptr, i64, i64 } %t57, 1 %t59 = icmp uge i64 %t56, %t58 br i1 %t59, label %range4754, label %inrange4755 range4754: call void @finch_panic_index(ptr @.str.2944, i64 2138, i64 %t56, i64 %t58) unreachable inrange4755: %t60 = extractvalue { ptr, i64, i64 } %t57, 0 %t61 = getelementptr inbounds i64, ptr %t60, i64 %t56 %t62 = load i64, ptr %t61 store i64 %t62, ptr %a63 %t64 = load ptr, ptr %a1 %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2946, i64 2, i64 0 }, ptr %a66 call void @finch_str_join(ptr %a67, ptr %a11, ptr %a66) %t68 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } { ptr @.str.2945, i64 27, i64 0 }, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) store { ptr, i64, i64 } %t68, ptr %a72 call void @finch_str_drop(ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t73, ptr %a75 store { ptr, i64, i64 } { ptr @.str.2947, i64 2, i64 0 }, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) store { ptr, i64, i64 } %t73, ptr %a77 call void @finch_str_drop(ptr %a77) %t78 = load { ptr, i64, i64 }, ptr %a74 %t79 = call i64 @finch.gen.md(ptr %t64, { ptr, i64, i64 } %t78) store { ptr, i64, i64 } %t78, ptr %a80 call void @finch_str_drop(ptr %a80) store i64 %t79, ptr %a81 %t82 = load ptr, ptr %a1 %t83 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 1 %t84 = load { ptr, i64, i64 }, ptr %t83 store { ptr, i64, i64 } { ptr @.str.2948, i64 30, i64 0 }, ptr %a86 store { ptr, i64, i64 } %t84, ptr %a87 call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) %t88 = load { ptr, i64, i64 }, ptr %a85 store { ptr, i64, i64 } %t88, ptr %a90 store { ptr, i64, i64 } { ptr @.str.2949, i64 17, i64 0 }, ptr %a91 call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) store { ptr, i64, i64 } %t88, ptr %a92 call void @finch_str_drop(ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a89 %t94 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 11 %t95 = load { ptr, i64, i64 }, ptr %t94 store { ptr, i64, i64 } %t95, ptr %a96 %t98 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 11 %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1 %t100 = load i64, ptr %t99 call void @finch_str_sub(ptr %a97, ptr %a96, i64 1, i64 %t100, ptr @.str.2950, i64 2140) %t101 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } %t93, ptr %a103 store { ptr, i64, i64 } %t101, ptr %a104 call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) store { ptr, i64, i64 } %t93, ptr %a105 call void @finch_str_drop(ptr %a105) store { ptr, i64, i64 } %t101, ptr %a106 call void @finch_str_drop(ptr %a106) %t107 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t107, ptr %a109 store { ptr, i64, i64 } { ptr @.str.2951, i64 11, i64 0 }, ptr %a110 call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) store { ptr, i64, i64 } %t107, ptr %a111 call void @finch_str_drop(ptr %a111) %t112 = load { ptr, i64, i64 }, ptr %a108 %t113 = load i64, ptr %a63 call void @finch_str_from_int(ptr %a114, i64 %t113) %t115 = load { ptr, i64, i64 }, ptr %a114 store { ptr, i64, i64 } %t112, ptr %a117 store { ptr, i64, i64 } %t115, ptr %a118 call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) store { ptr, i64, i64 } %t112, ptr %a119 call void @finch_str_drop(ptr %a119) store { ptr, i64, i64 } %t115, ptr %a120 call void @finch_str_drop(ptr %a120) %t121 = load { ptr, i64, i64 }, ptr %a116 store { ptr, i64, i64 } %t121, ptr %a123 store { ptr, i64, i64 } { ptr @.str.2952, i64 9, i64 0 }, ptr %a124 call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) store { ptr, i64, i64 } %t121, ptr %a125 call void @finch_str_drop(ptr %a125) %t126 = load { ptr, i64, i64 }, ptr %a122 %t127 = load i64, ptr %a63 call void @finch_str_from_int(ptr %a128, i64 %t127) %t129 = load { ptr, i64, i64 }, ptr %a128 store { ptr, i64, i64 } %t126, ptr %a131 store { ptr, i64, i64 } %t129, ptr %a132 call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) store { ptr, i64, i64 } %t126, ptr %a133 call void @finch_str_drop(ptr %a133) store { ptr, i64, i64 } %t129, ptr %a134 call void @finch_str_drop(ptr %a134) %t135 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t135, ptr %a137 store { ptr, i64, i64 } { ptr @.str.2953, i64 8, i64 0 }, ptr %a138 call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) store { ptr, i64, i64 } %t135, ptr %a139 call void @finch_str_drop(ptr %a139) %t140 = load { ptr, i64, i64 }, ptr %a136 %t141 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t142 = load i64, ptr %t141 call void @finch_str_from_int(ptr %a143, i64 %t142) %t144 = load { ptr, i64, i64 }, ptr %a143 store { ptr, i64, i64 } %t140, ptr %a146 store { ptr, i64, i64 } %t144, ptr %a147 call void @finch_str_concat(ptr %a145, ptr %a146, ptr %a147) store { ptr, i64, i64 } %t140, ptr %a148 call void @finch_str_drop(ptr %a148) store { ptr, i64, i64 } %t144, ptr %a149 call void @finch_str_drop(ptr %a149) %t150 = load { ptr, i64, i64 }, ptr %a145 store { ptr, i64, i64 } %t150, ptr %a152 store { ptr, i64, i64 } { ptr @.str.2954, i64 9, i64 0 }, ptr %a153 call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) store { ptr, i64, i64 } %t150, ptr %a154 call void @finch_str_drop(ptr %a154) %t155 = load { ptr, i64, i64 }, ptr %a151 %t156 = load i64, ptr %a81 call void @finch_str_from_int(ptr %a157, i64 %t156) %t158 = load { ptr, i64, i64 }, ptr %a157 store { ptr, i64, i64 } %t155, ptr %a160 store { ptr, i64, i64 } %t158, ptr %a161 call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) store { ptr, i64, i64 } %t155, ptr %a162 call void @finch_str_drop(ptr %a162) store { ptr, i64, i64 } %t158, ptr %a163 call void @finch_str_drop(ptr %a163) %t164 = load { ptr, i64, i64 }, ptr %a159 store { ptr, i64, i64 } %t164, ptr %a166 store { ptr, i64, i64 } { ptr @.str.2955, i64 13, i64 0 }, ptr %a167 call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) store { ptr, i64, i64 } %t164, ptr %a168 call void @finch_str_drop(ptr %a168) %t169 = load { ptr, i64, i64 }, ptr %a165 %t170 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t171 = load i64, ptr %t170 call void @finch_str_from_int(ptr %a172, i64 %t171) %t173 = load { ptr, i64, i64 }, ptr %a172 store { ptr, i64, i64 } %t169, ptr %a175 store { ptr, i64, i64 } %t173, ptr %a176 call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) store { ptr, i64, i64 } %t169, ptr %a177 call void @finch_str_drop(ptr %a177) store { ptr, i64, i64 } %t173, ptr %a178 call void @finch_str_drop(ptr %a178) %t179 = load { ptr, i64, i64 }, ptr %a174 store { ptr, i64, i64 } %t179, ptr %a181 store { ptr, i64, i64 } { ptr @.str.2956, i64 87, i64 0 }, ptr %a182 call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) store { ptr, i64, i64 } %t179, ptr %a183 call void @finch_str_drop(ptr %a183) %t184 = load { ptr, i64, i64 }, ptr %a180 %t185 = call i64 @finch.gen.md(ptr %t82, { ptr, i64, i64 } %t184) store { ptr, i64, i64 } %t184, ptr %a186 call void @finch_str_drop(ptr %a186) call void @finch.drop.arr_str(ptr %a11) call void @finch.drop.S_gen_FnSig(ptr %a10) ret i64 %t185 } define internal void @finch.gen.dbgVariable(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, { ptr, i64, i64 } %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca i64, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca i64, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic4756, label %ok4757 panic4756: call void @finch_panic(ptr @.str.2957, i64 2144, ptr @.str.2958) unreachable ok4757: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 30 %t9 = load i1, ptr %t8 %t10 = xor i1 %t9, true br label %logic.from4758 logic.from4758: br i1 %t10, label %logic.end4760, label %logic.rhs4759 logic.rhs4759: %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null br i1 %t12, label %panic4761, label %ok4762 panic4761: call void @finch_panic(ptr @.str.2959, i64 2144, ptr @.str.2960) unreachable ok4762: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 36 %t14 = load i64, ptr %t13 %t15 = icmp slt i64 %t14, 0 br label %logic.rend4763 logic.rend4763: br label %logic.end4760 logic.end4760: %t16 = phi i1 [ true, %logic.from4758 ], [ %t15, %logic.rend4763 ] br i1 %t16, label %then4764, label %endif4766 then4764: ret void endif4766: %t17 = load ptr, ptr %a1 %t18 = load %S.ast.Type, ptr %a4 %t19 = call i64 @finch.gen.diType(ptr %t17, %S.ast.Type %t18) store i64 %t19, ptr %a20 %t21 = load i64, ptr %a20 %t22 = icmp slt i64 %t21, 0 br i1 %t22, label %then4767, label %endif4769 then4767: ret void endif4769: store { ptr, i64, i64 } { ptr @.str.2961, i64 0, i64 0 }, ptr %a23 %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null br i1 %t25, label %panic4770, label %ok4771 panic4770: call void @finch_panic(ptr @.str.2962, i64 2152, ptr @.str.2963) unreachable ok4771: %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 39 %t27 = load i64, ptr %t26 %t28 = icmp sgt i64 %t27, 0 br i1 %t28, label %then4772, label %endif4774 then4772: %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null br i1 %t30, label %panic4775, label %ok4776 panic4775: call void @finch_panic(ptr @.str.2965, i64 2153, ptr @.str.2966) unreachable ok4776: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 39 %t32 = load i64, ptr %t31 call void @finch_str_from_int(ptr %a33, i64 %t32) %t34 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } { ptr @.str.2964, i64 7, i64 0 }, ptr %a36 store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) store { ptr, i64, i64 } %t34, ptr %a38 call void @finch_str_drop(ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a35 %t40 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t39, ptr %a23 store { ptr, i64, i64 } %t40, ptr %a41 call void @finch_str_drop(ptr %a41) br label %endif4774 endif4774: %t42 = load ptr, ptr %a1 %t43 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.2967, i64 24, i64 0 }, ptr %a45 store { ptr, i64, i64 } %t43, ptr %a46 call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } %t47, ptr %a49 store { ptr, i64, i64 } { ptr @.str.2968, i64 11, i64 0 }, ptr %a50 call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) store { ptr, i64, i64 } %t47, ptr %a51 call void @finch_str_drop(ptr %a51) %t52 = load { ptr, i64, i64 }, ptr %a48 %t53 = load ptr, ptr %a1 %t54 = icmp eq ptr %t53, null br i1 %t54, label %panic4777, label %ok4778 panic4777: call void @finch_panic(ptr @.str.2969, i64 2155, ptr @.str.2970) unreachable ok4778: %t55 = getelementptr inbounds %S.gen.Gen, ptr %t53, i32 0, i32 36 %t56 = load i64, ptr %t55 call void @finch_str_from_int(ptr %a57, i64 %t56) %t58 = load { ptr, i64, i64 }, ptr %a57 store { ptr, i64, i64 } %t52, ptr %a60 store { ptr, i64, i64 } %t58, ptr %a61 call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) store { ptr, i64, i64 } %t52, ptr %a62 call void @finch_str_drop(ptr %a62) store { ptr, i64, i64 } %t58, ptr %a63 call void @finch_str_drop(ptr %a63) %t64 = load { ptr, i64, i64 }, ptr %a59 store { ptr, i64, i64 } %t64, ptr %a66 store { ptr, i64, i64 } { ptr @.str.2971, i64 9, i64 0 }, ptr %a67 call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) store { ptr, i64, i64 } %t64, ptr %a68 call void @finch_str_drop(ptr %a68) %t69 = load { ptr, i64, i64 }, ptr %a65 %t70 = load ptr, ptr %a1 %t71 = icmp eq ptr %t70, null br i1 %t71, label %panic4779, label %ok4780 panic4779: call void @finch_panic(ptr @.str.2972, i64 2155, ptr @.str.2973) unreachable ok4780: %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 35 %t73 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t74 = load i64, ptr %t73 %t75 = load { ptr, i64, i64 }, ptr %t72 %t76 = extractvalue { ptr, i64, i64 } %t75, 1 %t77 = icmp uge i64 %t74, %t76 br i1 %t77, label %range4781, label %inrange4782 range4781: call void @finch_panic_index(ptr @.str.2974, i64 2155, i64 %t74, i64 %t76) unreachable inrange4782: %t78 = extractvalue { ptr, i64, i64 } %t75, 0 %t79 = getelementptr inbounds i64, ptr %t78, i64 %t74 %t80 = load i64, ptr %t79 call void @finch_str_from_int(ptr %a81, i64 %t80) %t82 = load { ptr, i64, i64 }, ptr %a81 store { ptr, i64, i64 } %t69, ptr %a84 store { ptr, i64, i64 } %t82, ptr %a85 call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) store { ptr, i64, i64 } %t69, ptr %a86 call void @finch_str_drop(ptr %a86) store { ptr, i64, i64 } %t82, ptr %a87 call void @finch_str_drop(ptr %a87) %t88 = load { ptr, i64, i64 }, ptr %a83 store { ptr, i64, i64 } %t88, ptr %a90 store { ptr, i64, i64 } { ptr @.str.2975, i64 8, i64 0 }, ptr %a91 call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) store { ptr, i64, i64 } %t88, ptr %a92 call void @finch_str_drop(ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a89 %t94 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t95 = load i64, ptr %t94 call void @finch_str_from_int(ptr %a96, i64 %t95) %t97 = load { ptr, i64, i64 }, ptr %a96 store { ptr, i64, i64 } %t93, ptr %a99 store { ptr, i64, i64 } %t97, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) store { ptr, i64, i64 } %t93, ptr %a101 call void @finch_str_drop(ptr %a101) store { ptr, i64, i64 } %t97, ptr %a102 call void @finch_str_drop(ptr %a102) %t103 = load { ptr, i64, i64 }, ptr %a98 store { ptr, i64, i64 } %t103, ptr %a105 store { ptr, i64, i64 } { ptr @.str.2976, i64 9, i64 0 }, ptr %a106 call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) store { ptr, i64, i64 } %t103, ptr %a107 call void @finch_str_drop(ptr %a107) %t108 = load { ptr, i64, i64 }, ptr %a104 %t109 = load i64, ptr %a20 call void @finch_str_from_int(ptr %a110, i64 %t109) %t111 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } %t108, ptr %a113 store { ptr, i64, i64 } %t111, ptr %a114 call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) store { ptr, i64, i64 } %t108, ptr %a115 call void @finch_str_drop(ptr %a115) store { ptr, i64, i64 } %t111, ptr %a116 call void @finch_str_drop(ptr %a116) %t117 = load { ptr, i64, i64 }, ptr %a112 %t118 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t117, ptr %a120 store { ptr, i64, i64 } %t118, ptr %a121 call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) store { ptr, i64, i64 } %t117, ptr %a122 call void @finch_str_drop(ptr %a122) %t123 = load { ptr, i64, i64 }, ptr %a119 store { ptr, i64, i64 } %t123, ptr %a125 store { ptr, i64, i64 } { ptr @.str.2977, i64 1, i64 0 }, ptr %a126 call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) store { ptr, i64, i64 } %t123, ptr %a127 call void @finch_str_drop(ptr %a127) %t128 = load { ptr, i64, i64 }, ptr %a124 %t129 = call i64 @finch.gen.md(ptr %t42, { ptr, i64, i64 } %t128) store { ptr, i64, i64 } %t128, ptr %a130 call void @finch_str_drop(ptr %a130) store i64 %t129, ptr %a131 %t132 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t133 = load i64, ptr %t132 %t134 = load ptr, ptr %a1 %t135 = icmp eq ptr %t134, null br i1 %t135, label %panic4783, label %ok4784 panic4783: call void @finch_panic(ptr @.str.2978, i64 2156, ptr @.str.2979) unreachable ok4784: %t136 = getelementptr inbounds %S.gen.Gen, ptr %t134, i32 0, i32 37 store i64 %t133, ptr %t136 %t137 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t138 = load i64, ptr %t137 %t139 = load ptr, ptr %a1 %t140 = icmp eq ptr %t139, null br i1 %t140, label %panic4785, label %ok4786 panic4785: call void @finch_panic(ptr @.str.2980, i64 2157, ptr @.str.2981) unreachable ok4786: %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 38 store i64 %t138, ptr %t141 %t142 = load ptr, ptr %a1 %t143 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.2982, i64 41, i64 0 }, ptr %a145 store { ptr, i64, i64 } %t143, ptr %a146 call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) %t147 = load { ptr, i64, i64 }, ptr %a144 store { ptr, i64, i64 } %t147, ptr %a149 store { ptr, i64, i64 } { ptr @.str.2983, i64 12, i64 0 }, ptr %a150 call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) store { ptr, i64, i64 } %t147, ptr %a151 call void @finch_str_drop(ptr %a151) %t152 = load { ptr, i64, i64 }, ptr %a148 %t153 = load i64, ptr %a131 call void @finch_str_from_int(ptr %a154, i64 %t153) %t155 = load { ptr, i64, i64 }, ptr %a154 store { ptr, i64, i64 } %t152, ptr %a157 store { ptr, i64, i64 } %t155, ptr %a158 call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158) store { ptr, i64, i64 } %t152, ptr %a159 call void @finch_str_drop(ptr %a159) store { ptr, i64, i64 } %t155, ptr %a160 call void @finch_str_drop(ptr %a160) %t161 = load { ptr, i64, i64 }, ptr %a156 store { ptr, i64, i64 } %t161, ptr %a163 store { ptr, i64, i64 } { ptr @.str.2984, i64 27, i64 0 }, ptr %a164 call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164) store { ptr, i64, i64 } %t161, ptr %a165 call void @finch_str_drop(ptr %a165) %t166 = load { ptr, i64, i64 }, ptr %a162 call void @finch.gen.emit(ptr %t142, { ptr, i64, i64 } %t166) store { ptr, i64, i64 } %t166, ptr %a167 call void @finch_str_drop(ptr %a167) call void @finch_str_drop(ptr %a23) ret void } define internal { ptr, i64, i64 } @finch.gen.dbgModule(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca i64, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = mul i64 2, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 store { ptr, i64, i64 } { ptr @.str.2985, i64 20, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 store { ptr, i64, i64 } { ptr @.str.2986, i64 30, i64 0 }, ptr %t5 %t6 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t7 = insertvalue { ptr, i64, i64 } %t6, i64 2, 1 %t8 = insertvalue { ptr, i64, i64 } %t7, i64 2, 2 store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic4787, label %ok4788 panic4787: call void @finch_panic(ptr @.str.2987, i64 2164, ptr @.str.2988) unreachable ok4788: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 33 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 store i64 0, ptr %a15 br label %for.cond4789 for.cond4789: %t16 = load i64, ptr %a15 %t17 = icmp slt i64 %t16, %t14 br i1 %t17, label %for.body4790, label %for.end4792 for.body4790: %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t19 = load i64, ptr %a15 call void @finch_str_from_int(ptr %a20, i64 %t19) %t21 = load { ptr, i64, i64 }, ptr %a20 store { ptr, i64, i64 } { ptr @.str.2989, i64 1, i64 0 }, ptr %a23 store { ptr, i64, i64 } %t21, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) store { ptr, i64, i64 } %t21, ptr %a25 call void @finch_str_drop(ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t26, ptr %a28 store { ptr, i64, i64 } { ptr @.str.2990, i64 3, i64 0 }, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) store { ptr, i64, i64 } %t26, ptr %a30 call void @finch_str_drop(ptr %a30) %t31 = load { ptr, i64, i64 }, ptr %a27 %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null br i1 %t33, label %panic4793, label %ok4794 panic4793: call void @finch_panic(ptr @.str.2991, i64 2165, ptr @.str.2992) unreachable ok4794: %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 33 %t35 = load i64, ptr %a15 %t36 = load { ptr, i64, i64 }, ptr %t34 %t37 = extractvalue { ptr, i64, i64 } %t36, 1 %t38 = icmp uge i64 %t35, %t37 br i1 %t38, label %range4795, label %inrange4796 range4795: call void @finch_panic_index(ptr @.str.2993, i64 2165, i64 %t35, i64 %t37) unreachable inrange4796: %t39 = extractvalue { ptr, i64, i64 } %t36, 0 %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i64 %t35 %t41 = load { ptr, i64, i64 }, ptr %t40 store { ptr, i64, i64 } %t31, ptr %a43 store { ptr, i64, i64 } %t41, ptr %a44 call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) store { ptr, i64, i64 } %t31, ptr %a45 call void @finch_str_drop(ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a42 %t47 = load i64, ptr %t18 %t48 = add i64 %t47, 1 call void @finch_arr_reserve(ptr %a9, i64 %t48, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t49 = load ptr, ptr %a9 %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 store { ptr, i64, i64 } %t46, ptr %t50 store i64 %t48, ptr %t18 br label %for.step4791 for.step4791: %t51 = load i64, ptr %a15 %t52 = add i64 %t51, 1 store i64 %t52, ptr %a15 br label %for.cond4789 for.end4792: %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2994, i64 1, i64 0 }, ptr %a54 call void @finch_str_join(ptr %a55, ptr %a9, ptr %a54) %t56 = load { ptr, i64, i64 }, ptr %a55 store { ptr, i64, i64 } %t56, ptr %a58 store { ptr, i64, i64 } { ptr @.str.2995, i64 1, i64 0 }, ptr %a59 call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) store { ptr, i64, i64 } %t56, ptr %a60 call void @finch_str_drop(ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a57 call void @finch.drop.arr_str(ptr %a9) ret { ptr, i64, i64 } %t61 } define internal void @finch.copy.arr_S_gen_Var(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.gen.Var, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond4868 n.cond4868: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body4869, label %n.end4870 n.body4869: %t8 = getelementptr inbounds %S.gen.Var, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.gen.Var, ptr %t2, i64 %t6 call void @finch.copy.S_gen_Var(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond4868 n.end4870: ret void } define internal void @finch.copy.arr_S_gen_Cleanup(ptr %dst, ptr %src) { entry: call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.gen.Cleanup, ptr null, i32 1) to i64)) ret void } define internal void @finch.copy.S_gen_Scope(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Scope, ptr %src store %S.gen.Scope %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 0 call void @finch.copy.arr_S_gen_Var(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 1 call void @finch.copy.arr_S_ast_Node(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 2 call void @finch.copy.arr_int(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 3 call void @finch.copy.arr_S_gen_Cleanup(ptr %t8, ptr %t9) ret void } define internal void @finch.copy.arr_S_gen_Scope(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.gen.Scope, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond4865 n.cond4865: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body4866, label %n.end4867 n.body4866: %t8 = getelementptr inbounds %S.gen.Scope, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.gen.Scope, ptr %t2, i64 %t6 call void @finch.copy.S_gen_Scope(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond4865 n.end4867: ret void } define internal void @finch.drop.arr_S_gen_Scope(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond4871 n.cond4871: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body4872, label %n.end4873 n.body4872: %t7 = getelementptr inbounds %S.gen.Scope, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Scope(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond4871 n.end4873: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.gen.define(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a16 = alloca %S.gen.FnSig, align 16 %a17 = alloca %S.gen.FnSig, align 16 %a20 = alloca %S.gen.FnSig, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca %S.ast.Node, align 16 %a117 = alloca %S.ast.Node, align 16 %a119 = alloca %S.ast.Node, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca i64, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca %S.ast.Type, align 16 %a247 = alloca %S.ast.Type, align 16 %a248 = alloca %S.ast.Type, align 16 %a270 = alloca i64, align 16 %a284 = alloca %S.ast.Type, align 16 %a285 = alloca %S.ast.Type, align 16 %a287 = alloca %S.ast.Type, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a434 = alloca { ptr, i64, i64 }, align 16 %a435 = alloca { ptr, i64, i64 }, align 16 %a436 = alloca { ptr, i64, i64 }, align 16 %a438 = alloca { ptr, i64, i64 }, align 16 %a439 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca { ptr, i64, i64 }, align 16 %a441 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 %a450 = alloca { ptr, i64, i64 }, align 16 %a451 = alloca { ptr, i64, i64 }, align 16 %a452 = alloca { ptr, i64, i64 }, align 16 %a453 = alloca { ptr, i64, i64 }, align 16 %a455 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a470 = alloca { ptr, i64, i64 }, align 16 %a471 = alloca { ptr, i64, i64 }, align 16 %a472 = alloca { ptr, i64, i64 }, align 16 %a474 = alloca { ptr, i64, i64 }, align 16 %a475 = alloca { ptr, i64, i64 }, align 16 %a476 = alloca { ptr, i64, i64 }, align 16 %a477 = alloca { ptr, i64, i64 }, align 16 %a479 = alloca { ptr, i64, i64 }, align 16 %a481 = alloca { ptr, i64, i64 }, align 16 %a485 = alloca { ptr, i64, i64 }, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a488 = alloca { ptr, i64, i64 }, align 16 %a489 = alloca { ptr, i64, i64 }, align 16 %a490 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a508 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca { ptr, i64, i64 }, align 16 %a512 = alloca { ptr, i64, i64 }, align 16 %a513 = alloca { ptr, i64, i64 }, align 16 %a514 = alloca { ptr, i64, i64 }, align 16 %a515 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca { ptr, i64, i64 }, align 16 %a523 = alloca { ptr, i64, i64 }, align 16 %a524 = alloca { ptr, i64, i64 }, align 16 %a525 = alloca { ptr, i64, i64 }, align 16 %a527 = alloca { ptr, i64, i64 }, align 16 %a528 = alloca { ptr, i64, i64 }, align 16 %a529 = alloca { ptr, i64, i64 }, align 16 %a530 = alloca { ptr, i64, i64 }, align 16 %a533 = alloca { ptr, i64, i64 }, align 16 %a534 = alloca { ptr, i64, i64 }, align 16 %a536 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a538 = alloca { ptr, i64, i64 }, align 16 %a539 = alloca { ptr, i64, i64 }, align 16 %a540 = alloca { ptr, i64, i64 }, align 16 %a542 = alloca { ptr, i64, i64 }, align 16 %a543 = alloca { ptr, i64, i64 }, align 16 %a544 = alloca { ptr, i64, i64 }, align 16 %a545 = alloca { ptr, i64, i64 }, align 16 %a548 = alloca { ptr, i64, i64 }, align 16 %a549 = alloca { ptr, i64, i64 }, align 16 %a550 = alloca { ptr, i64, i64 }, align 16 %a551 = alloca { ptr, i64, i64 }, align 16 %a553 = alloca { ptr, i64, i64 }, align 16 %a554 = alloca { ptr, i64, i64 }, align 16 %a555 = alloca { ptr, i64, i64 }, align 16 %a556 = alloca { ptr, i64, i64 }, align 16 %a562 = alloca { ptr, i64, i64 }, align 16 %a563 = alloca { ptr, i64, i64 }, align 16 %a565 = alloca { ptr, i64, i64 }, align 16 %a566 = alloca { ptr, i64, i64 }, align 16 %a567 = alloca { ptr, i64, i64 }, align 16 %a568 = alloca { ptr, i64, i64 }, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a571 = alloca { ptr, i64, i64 }, align 16 %a572 = alloca { ptr, i64, i64 }, align 16 %a573 = alloca { ptr, i64, i64 }, align 16 %a574 = alloca { ptr, i64, i64 }, align 16 %a580 = alloca { ptr, i64, i64 }, align 16 %a581 = alloca { ptr, i64, i64 }, align 16 %a583 = alloca { ptr, i64, i64 }, align 16 %a584 = alloca { ptr, i64, i64 }, align 16 %a585 = alloca { ptr, i64, i64 }, align 16 %a586 = alloca { ptr, i64, i64 }, align 16 %a587 = alloca { ptr, i64, i64 }, align 16 %a589 = alloca { ptr, i64, i64 }, align 16 %a590 = alloca { ptr, i64, i64 }, align 16 %a591 = alloca { ptr, i64, i64 }, align 16 %a592 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic4797, label %ok4798 panic4797: call void @finch_panic(ptr @.str.2996, i64 2171, ptr @.str.2997) unreachable ok4798: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 15 %t6 = load i64, ptr %a2 %t7 = load { ptr, i64, i64 }, ptr %t5 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 %t6, %t8 br i1 %t9, label %range4799, label %inrange4800 range4799: call void @finch_panic_index(ptr @.str.2998, i64 2171, i64 %t6, i64 %t8) unreachable inrange4800: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.gen.FnSig, ptr %t10, i64 %t6 %t12 = load %S.gen.FnSig, ptr %t11 %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null br i1 %t14, label %panic4801, label %ok4802 panic4801: call void @finch_panic(ptr @.str.2999, i64 2171, ptr @.str.3000) unreachable ok4802: %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 13 store %S.gen.FnSig %t12, ptr %a16 call void @finch.copy.S_gen_FnSig(ptr %a17, ptr %a16) %t18 = load %S.gen.FnSig, ptr %a17 %t19 = load %S.gen.FnSig, ptr %t15 store %S.gen.FnSig %t18, ptr %t15 store %S.gen.FnSig %t19, ptr %a20 call void @finch.drop.S_gen_FnSig(ptr %a20) %t21 = load ptr, ptr %a1 %t22 = icmp eq ptr %t21, null br i1 %t22, label %panic4803, label %ok4804 panic4803: call void @finch_panic(ptr @.str.3001, i64 2172, ptr @.str.3002) unreachable ok4804: %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 13 %t24 = getelementptr inbounds %S.gen.FnSig, ptr %t23, i32 0, i32 0 %t25 = load { ptr, i64, i64 }, ptr %t24 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null br i1 %t27, label %panic4805, label %ok4806 panic4805: call void @finch_panic(ptr @.str.3003, i64 2172, ptr @.str.3004) unreachable ok4806: %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 14 store { ptr, i64, i64 } %t25, ptr %a29 call void @finch_str_copy(ptr %a30, ptr %a29) %t31 = load { ptr, i64, i64 }, ptr %a30 %t32 = load { ptr, i64, i64 }, ptr %t28 store { ptr, i64, i64 } %t31, ptr %t28 store { ptr, i64, i64 } %t32, ptr %a33 call void @finch_str_drop(ptr %a33) %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null br i1 %t35, label %panic4807, label %ok4808 panic4807: call void @finch_panic(ptr @.str.3005, i64 2173, ptr @.str.3006) unreachable ok4808: %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 13 %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i32 0, i32 6 %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null br i1 %t40, label %panic4809, label %ok4810 panic4809: call void @finch_panic(ptr @.str.3007, i64 2173, ptr @.str.3008) unreachable ok4810: %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 18 store { ptr, i64, i64 } %t38, ptr %a42 call void @finch.copy.arr_str(ptr %a43, ptr %a42) %t44 = load { ptr, i64, i64 }, ptr %a43 %t45 = load { ptr, i64, i64 }, ptr %t41 store { ptr, i64, i64 } %t44, ptr %t41 store { ptr, i64, i64 } %t45, ptr %a46 call void @finch.drop.arr_str(ptr %a46) %t47 = load ptr, ptr %a1 %t48 = icmp eq ptr %t47, null br i1 %t48, label %panic4811, label %ok4812 panic4811: call void @finch_panic(ptr @.str.3009, i64 2174, ptr @.str.3010) unreachable ok4812: %t49 = getelementptr inbounds %S.gen.Gen, ptr %t47, i32 0, i32 13 %t50 = getelementptr inbounds %S.gen.FnSig, ptr %t49, i32 0, i32 7 %t51 = load { ptr, i64, i64 }, ptr %t50 %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null br i1 %t53, label %panic4813, label %ok4814 panic4813: call void @finch_panic(ptr @.str.3011, i64 2174, ptr @.str.3012) unreachable ok4814: %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 19 store { ptr, i64, i64 } %t51, ptr %a55 call void @finch.copy.arr_S_ast_Type(ptr %a56, ptr %a55) %t57 = load { ptr, i64, i64 }, ptr %a56 %t58 = load { ptr, i64, i64 }, ptr %t54 store { ptr, i64, i64 } %t57, ptr %t54 store { ptr, i64, i64 } %t58, ptr %a59 call void @finch.drop.arr_S_ast_Type(ptr %a59) %t60 = load ptr, ptr %a1 %t61 = icmp eq ptr %t60, null br i1 %t61, label %panic4815, label %ok4816 panic4815: call void @finch_panic(ptr @.str.3014, i64 2175, ptr @.str.3015) unreachable ok4816: %t62 = getelementptr inbounds %S.gen.Gen, ptr %t60, i32 0, i32 20 %t63 = load { ptr, i64, i64 }, ptr %t62 store { ptr, i64, i64 } { ptr @.str.3013, i64 0, i64 0 }, ptr %t62 store { ptr, i64, i64 } %t63, ptr %a64 call void @finch_str_drop(ptr %a64) %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null br i1 %t66, label %panic4817, label %ok4818 panic4817: call void @finch_panic(ptr @.str.3016, i64 2176, ptr @.str.3017) unreachable ok4818: %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 13 %t68 = getelementptr inbounds %S.gen.FnSig, ptr %t67, i32 0, i32 7 %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i32 0, i32 1 %t70 = load i64, ptr %t69 %t71 = icmp sgt i64 %t70, 0 br i1 %t71, label %then4819, label %endif4821 then4819: %t72 = load ptr, ptr %a1 %t73 = icmp eq ptr %t72, null br i1 %t73, label %panic4822, label %ok4823 panic4822: call void @finch_panic(ptr @.str.3019, i64 2177, ptr @.str.3020) unreachable ok4823: %t74 = getelementptr inbounds %S.gen.Gen, ptr %t72, i32 0, i32 13 %t75 = getelementptr inbounds %S.gen.FnSig, ptr %t74, i32 0, i32 8 %t76 = load { ptr, i64, i64 }, ptr %t75 store { ptr, i64, i64 } { ptr @.str.3018, i64 17, i64 0 }, ptr %a78 store { ptr, i64, i64 } %t76, ptr %a79 call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) %t80 = load { ptr, i64, i64 }, ptr %a77 store { ptr, i64, i64 } %t80, ptr %a82 store { ptr, i64, i64 } { ptr @.str.3021, i64 1, i64 0 }, ptr %a83 call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) store { ptr, i64, i64 } %t80, ptr %a84 call void @finch_str_drop(ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a81 %t86 = load ptr, ptr %a1 %t87 = icmp eq ptr %t86, null br i1 %t87, label %panic4824, label %ok4825 panic4824: call void @finch_panic(ptr @.str.3022, i64 2177, ptr @.str.3023) unreachable ok4825: %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 20 %t89 = load { ptr, i64, i64 }, ptr %t88 store { ptr, i64, i64 } %t85, ptr %t88 store { ptr, i64, i64 } %t89, ptr %a90 call void @finch_str_drop(ptr %a90) br label %endif4821 endif4821: %t91 = load ptr, ptr %a1 %t92 = icmp eq ptr %t91, null br i1 %t92, label %panic4826, label %ok4827 panic4826: call void @finch_panic(ptr @.str.3024, i64 2179, ptr @.str.3025) unreachable ok4827: %t93 = getelementptr inbounds %S.gen.Gen, ptr %t91, i32 0, i32 0 %t94 = load ptr, ptr %a1 %t95 = icmp eq ptr %t94, null br i1 %t95, label %panic4828, label %ok4829 panic4828: call void @finch_panic(ptr @.str.3026, i64 2179, ptr @.str.3027) unreachable ok4829: %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 13 %t97 = getelementptr inbounds %S.gen.FnSig, ptr %t96, i32 0, i32 16 %t98 = load i64, ptr %t97 %t99 = load { ptr, i64, i64 }, ptr %t93 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 %t98, %t100 br i1 %t101, label %range4830, label %inrange4831 range4830: call void @finch_panic_index(ptr @.str.3028, i64 2179, i64 %t98, i64 %t100) unreachable inrange4831: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.ast.Program, ptr %t102, i64 %t98 %t104 = getelementptr inbounds %S.ast.Program, ptr %t103, i32 0, i32 8 %t105 = load ptr, ptr %a1 %t106 = icmp eq ptr %t105, null br i1 %t106, label %panic4832, label %ok4833 panic4832: call void @finch_panic(ptr @.str.3029, i64 2179, ptr @.str.3030) unreachable ok4833: %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 13 %t108 = getelementptr inbounds %S.gen.FnSig, ptr %t107, i32 0, i32 17 %t109 = load i64, ptr %t108 %t110 = load { ptr, i64, i64 }, ptr %t104 %t111 = extractvalue { ptr, i64, i64 } %t110, 1 %t112 = icmp uge i64 %t109, %t111 br i1 %t112, label %range4834, label %inrange4835 range4834: call void @finch_panic_index(ptr @.str.3031, i64 2179, i64 %t109, i64 %t111) unreachable inrange4835: %t113 = extractvalue { ptr, i64, i64 } %t110, 0 %t114 = getelementptr inbounds %S.ast.Node, ptr %t113, i64 %t109 %t115 = load %S.ast.Node, ptr %t114 store %S.ast.Node %t115, ptr %a116 call void @finch.copy.S_ast_Node(ptr %a117, ptr %a116) %t118 = load %S.ast.Node, ptr %a117 store %S.ast.Node %t118, ptr %a119 store { ptr, i64, i64 } zeroinitializer, ptr %a120 %t121 = load { ptr, i64, i64 }, ptr %a120 %t122 = load ptr, ptr %a1 %t123 = icmp eq ptr %t122, null br i1 %t123, label %panic4836, label %ok4837 panic4836: call void @finch_panic(ptr @.str.3032, i64 2181, ptr @.str.3033) unreachable ok4837: %t124 = getelementptr inbounds %S.gen.Gen, ptr %t122, i32 0, i32 4 store { ptr, i64, i64 } %t121, ptr %a125 call void @finch.copy.arr_str(ptr %a126, ptr %a125) %t127 = load { ptr, i64, i64 }, ptr %a126 %t128 = load { ptr, i64, i64 }, ptr %t124 store { ptr, i64, i64 } %t127, ptr %t124 store { ptr, i64, i64 } %t128, ptr %a129 call void @finch.drop.arr_str(ptr %a129) %t130 = load { ptr, i64, i64 }, ptr %a120 %t131 = load ptr, ptr %a1 %t132 = icmp eq ptr %t131, null br i1 %t132, label %panic4838, label %ok4839 panic4838: call void @finch_panic(ptr @.str.3034, i64 2182, ptr @.str.3035) unreachable ok4839: %t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 5 store { ptr, i64, i64 } %t130, ptr %a134 call void @finch.copy.arr_str(ptr %a135, ptr %a134) %t136 = load { ptr, i64, i64 }, ptr %a135 %t137 = load { ptr, i64, i64 }, ptr %t133 store { ptr, i64, i64 } %t136, ptr %t133 store { ptr, i64, i64 } %t137, ptr %a138 call void @finch.drop.arr_str(ptr %a138) %t139 = load ptr, ptr %a1 %t140 = icmp eq ptr %t139, null br i1 %t140, label %panic4840, label %ok4841 panic4840: call void @finch_panic(ptr @.str.3036, i64 2183, ptr @.str.3037) unreachable ok4841: %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 6 store i64 0, ptr %t141 %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null br i1 %t143, label %panic4842, label %ok4843 panic4842: call void @finch_panic(ptr @.str.3038, i64 2184, ptr @.str.3039) unreachable ok4843: %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 9 store i1 false, ptr %t144 %t145 = load ptr, ptr %a1 %t146 = icmp eq ptr %t145, null br i1 %t146, label %panic4844, label %ok4845 panic4844: call void @finch_panic(ptr @.str.3040, i64 2185, ptr @.str.3041) unreachable ok4845: %t147 = getelementptr inbounds %S.gen.Gen, ptr %t145, i32 0, i32 25 store i64 0, ptr %t147 %t148 = load ptr, ptr %a1 %t149 = icmp eq ptr %t148, null br i1 %t149, label %panic4846, label %ok4847 panic4846: call void @finch_panic(ptr @.str.3042, i64 2186, ptr @.str.3043) unreachable ok4847: %t150 = getelementptr inbounds %S.gen.Gen, ptr %t148, i32 0, i32 36 store i64 -1, ptr %t150 store i64 -1, ptr %a151 %t152 = load ptr, ptr %a1 %t153 = icmp eq ptr %t152, null br i1 %t153, label %panic4848, label %ok4849 panic4848: call void @finch_panic(ptr @.str.3044, i64 2188, ptr @.str.3045) unreachable ok4849: %t154 = getelementptr inbounds %S.gen.Gen, ptr %t152, i32 0, i32 30 %t155 = load i1, ptr %t154 br i1 %t155, label %then4850, label %endif4852 then4850: %t156 = load ptr, ptr %a1 %t157 = load %S.ast.Node, ptr %a119 %t158 = call i64 @finch.gen.dbgSubprogram(ptr %t156, %S.ast.Node %t157) store i64 %t158, ptr %a151 %t159 = load i64, ptr %a151 %t160 = load ptr, ptr %a1 %t161 = icmp eq ptr %t160, null br i1 %t161, label %panic4853, label %ok4854 panic4853: call void @finch_panic(ptr @.str.3046, i64 2190, ptr @.str.3047) unreachable ok4854: %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 36 store i64 %t159, ptr %t162 %t163 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 11 %t164 = load i64, ptr %t163 %t165 = load ptr, ptr %a1 %t166 = icmp eq ptr %t165, null br i1 %t166, label %panic4855, label %ok4856 panic4855: call void @finch_panic(ptr @.str.3048, i64 2191, ptr @.str.3049) unreachable ok4856: %t167 = getelementptr inbounds %S.gen.Gen, ptr %t165, i32 0, i32 37 store i64 %t164, ptr %t167 %t168 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 12 %t169 = load i64, ptr %t168 %t170 = load ptr, ptr %a1 %t171 = icmp eq ptr %t170, null br i1 %t171, label %panic4857, label %ok4858 panic4857: call void @finch_panic(ptr @.str.3050, i64 2192, ptr @.str.3051) unreachable ok4858: %t172 = getelementptr inbounds %S.gen.Gen, ptr %t170, i32 0, i32 38 store i64 %t169, ptr %t172 br label %endif4852 endif4852: %t173 = load ptr, ptr %a1 %t174 = icmp eq ptr %t173, null br i1 %t174, label %panic4859, label %ok4860 panic4859: call void @finch_panic(ptr @.str.3052, i64 2194, ptr @.str.3053) unreachable ok4860: %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 44 store i1 false, ptr %t175 %t176 = load ptr, ptr %a1 %t177 = icmp eq ptr %t176, null br i1 %t177, label %panic4861, label %ok4862 panic4861: call void @finch_panic(ptr @.str.3054, i64 2195, ptr @.str.3055) unreachable ok4862: %t178 = getelementptr inbounds %S.gen.Gen, ptr %t176, i32 0, i32 46 store i64 0, ptr %t178 store { ptr, i64, i64 } zeroinitializer, ptr %a179 %t180 = load { ptr, i64, i64 }, ptr %a179 %t181 = load ptr, ptr %a1 %t182 = icmp eq ptr %t181, null br i1 %t182, label %panic4863, label %ok4864 panic4863: call void @finch_panic(ptr @.str.3056, i64 2197, ptr @.str.3057) unreachable ok4864: %t183 = getelementptr inbounds %S.gen.Gen, ptr %t181, i32 0, i32 10 store { ptr, i64, i64 } %t180, ptr %a184 call void @finch.copy.arr_S_gen_Scope(ptr %a185, ptr %a184) %t186 = load { ptr, i64, i64 }, ptr %a185 %t187 = load { ptr, i64, i64 }, ptr %t183 store { ptr, i64, i64 } %t186, ptr %t183 store { ptr, i64, i64 } %t187, ptr %a188 call void @finch.drop.arr_S_gen_Scope(ptr %a188) %t189 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t189) store { ptr, i64, i64 } zeroinitializer, ptr %a190 %t191 = load ptr, ptr %a1 %t192 = icmp eq ptr %t191, null br i1 %t192, label %panic4874, label %ok4875 panic4874: call void @finch_panic(ptr @.str.3058, i64 2200, ptr @.str.3059) unreachable ok4875: %t193 = getelementptr inbounds %S.gen.Gen, ptr %t191, i32 0, i32 13 %t194 = getelementptr inbounds %S.gen.FnSig, ptr %t193, i32 0, i32 2 %t195 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1 %t196 = load i64, ptr %t195 %t197 = icmp sgt i64 %t196, 0 br i1 %t197, label %then4876, label %endif4878 then4876: %t198 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1 %t199 = load i64, ptr %t198 %t200 = add i64 %t199, 1 call void @finch_arr_reserve(ptr %a190, i64 %t200, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t201 = load ptr, ptr %a190 %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %t201, i64 %t199 store { ptr, i64, i64 } { ptr @.str.3060, i64 9, i64 0 }, ptr %t202 store i64 %t200, ptr %t198 store { ptr, i64, i64 } { ptr @.str.3061, i64 6, i64 0 }, ptr %a203 %t204 = load ptr, ptr %a1 %t205 = icmp eq ptr %t204, null br i1 %t205, label %panic4879, label %ok4880 panic4879: call void @finch_panic(ptr @.str.3062, i64 2204, ptr @.str.3063) unreachable ok4880: %t206 = getelementptr inbounds %S.gen.Gen, ptr %t204, i32 0, i32 13 %t207 = getelementptr inbounds %S.gen.FnSig, ptr %t206, i32 0, i32 4 %t208 = load i1, ptr %t207 br i1 %t208, label %then4881, label %endif4883 then4881: %t209 = load { ptr, i64, i64 }, ptr %a203 store { ptr, i64, i64 } { ptr @.str.3064, i64 4, i64 0 }, ptr %a203 store { ptr, i64, i64 } %t209, ptr %a210 call void @finch_str_drop(ptr %a210) br label %endif4883 endif4883: %t211 = load { ptr, i64, i64 }, ptr %a203 store { ptr, i64, i64 } %t211, ptr %a212 call void @finch_str_copy(ptr %a213, ptr %a212) %t214 = load { ptr, i64, i64 }, ptr %a213 %t215 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } %t214, 0 %t216 = load ptr, ptr %a1 %t217 = icmp eq ptr %t216, null br i1 %t217, label %panic4884, label %ok4885 panic4884: call void @finch_panic(ptr @.str.3065, i64 2207, ptr @.str.3066) unreachable ok4885: %t218 = getelementptr inbounds %S.gen.Gen, ptr %t216, i32 0, i32 13 %t219 = getelementptr inbounds %S.gen.FnSig, ptr %t218, i32 0, i32 2 %t220 = load { ptr, i64, i64 }, ptr %t219 store { ptr, i64, i64 } %t220, ptr %a221 call void @finch_str_copy(ptr %a222, ptr %a221) %t223 = load { ptr, i64, i64 }, ptr %a222 %t224 = insertvalue %S.ast.Type %t215, { ptr, i64, i64 } %t223, 2 %t225 = load ptr, ptr %a1 %t226 = icmp eq ptr %t225, null br i1 %t226, label %panic4886, label %ok4887 panic4886: call void @finch_panic(ptr @.str.3067, i64 2207, ptr @.str.3068) unreachable ok4887: %t227 = getelementptr inbounds %S.gen.Gen, ptr %t225, i32 0, i32 13 %t228 = getelementptr inbounds %S.gen.FnSig, ptr %t227, i32 0, i32 3 %t229 = load { ptr, i64, i64 }, ptr %t228 store { ptr, i64, i64 } %t229, ptr %a230 call void @finch_str_copy(ptr %a231, ptr %a230) %t232 = load { ptr, i64, i64 }, ptr %a231 %t233 = insertvalue %S.ast.Type %t224, { ptr, i64, i64 } %t232, 3 store %S.ast.Type %t233, ptr %a234 %t235 = load ptr, ptr %a1 %t236 = icmp eq ptr %t235, null br i1 %t236, label %panic4888, label %ok4889 panic4888: call void @finch_panic(ptr @.str.3069, i64 2208, ptr @.str.3070) unreachable ok4889: %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 10 %t238 = load { ptr, i64, i64 }, ptr %t237 %t239 = extractvalue { ptr, i64, i64 } %t238, 1 %t240 = icmp uge i64 0, %t239 br i1 %t240, label %range4890, label %inrange4891 range4890: call void @finch_panic_index(ptr @.str.3071, i64 2208, i64 0, i64 %t239) unreachable inrange4891: %t241 = extractvalue { ptr, i64, i64 } %t238, 0 %t242 = getelementptr inbounds %S.gen.Scope, ptr %t241, i64 0 %t243 = getelementptr inbounds %S.gen.Scope, ptr %t242, i32 0, i32 0 %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %t243, i32 0, i32 1 %t245 = insertvalue %S.gen.Var zeroinitializer, { ptr, i64, i64 } { ptr @.str.3072, i64 4, i64 0 }, 0 %t246 = load %S.ast.Type, ptr %a234 store %S.ast.Type %t246, ptr %a247 call void @finch.copy.S_ast_Type(ptr %a248, ptr %a247) %t249 = load %S.ast.Type, ptr %a248 %t250 = insertvalue %S.gen.Var %t245, %S.ast.Type %t249, 1 %t251 = insertvalue %S.gen.Var %t250, { ptr, i64, i64 } { ptr @.str.3073, i64 5, i64 0 }, 2 %t252 = insertvalue %S.gen.Var %t251, i1 false, 3 %t253 = load i64, ptr %t244 %t254 = add i64 %t253, 1 call void @finch_arr_reserve(ptr %t243, i64 %t254, i64 ptrtoint (ptr getelementptr (%S.gen.Var, ptr null, i32 1) to i64)) %t255 = load ptr, ptr %t243 %t256 = getelementptr inbounds %S.gen.Var, ptr %t255, i64 %t253 store %S.gen.Var %t252, ptr %t256 store i64 %t254, ptr %t244 %t257 = load ptr, ptr %a1 %t258 = icmp eq ptr %t257, null br i1 %t258, label %panic4892, label %ok4893 panic4892: call void @finch_panic(ptr @.str.3074, i64 2209, ptr @.str.3075) unreachable ok4893: %t259 = getelementptr inbounds %S.gen.Gen, ptr %t257, i32 0, i32 30 %t260 = load i1, ptr %t259 br i1 %t260, label %then4894, label %endif4896 then4894: %t261 = load ptr, ptr %a1 %t262 = load %S.ast.Node, ptr %a119 %t263 = load %S.ast.Type, ptr %a234 call void @finch.gen.dbgVariable(ptr %t261, %S.ast.Node %t262, { ptr, i64, i64 } { ptr @.str.3076, i64 4, i64 0 }, %S.ast.Type %t263, { ptr, i64, i64 } { ptr @.str.3077, i64 5, i64 0 }) br label %endif4896 endif4896: call void @finch.drop.S_ast_Type(ptr %a234) call void @finch_str_drop(ptr %a203) br label %endif4878 endif4878: %t264 = load ptr, ptr %a1 %t265 = icmp eq ptr %t264, null br i1 %t265, label %panic4897, label %ok4898 panic4897: call void @finch_panic(ptr @.str.3078, i64 2214, ptr @.str.3079) unreachable ok4898: %t266 = getelementptr inbounds %S.gen.Gen, ptr %t264, i32 0, i32 13 %t267 = getelementptr inbounds %S.gen.FnSig, ptr %t266, i32 0, i32 13 %t268 = getelementptr inbounds { ptr, i64, i64 }, ptr %t267, i32 0, i32 1 %t269 = load i64, ptr %t268 store i64 0, ptr %a270 br label %for.cond4899 for.cond4899: %t271 = load i64, ptr %a270 %t272 = icmp slt i64 %t271, %t269 br i1 %t272, label %for.body4900, label %for.end4902 for.body4900: %t273 = load ptr, ptr %a1 %t274 = icmp eq ptr %t273, null br i1 %t274, label %panic4903, label %ok4904 panic4903: call void @finch_panic(ptr @.str.3080, i64 2215, ptr @.str.3081) unreachable ok4904: %t275 = getelementptr inbounds %S.gen.Gen, ptr %t273, i32 0, i32 13 %t276 = getelementptr inbounds %S.gen.FnSig, ptr %t275, i32 0, i32 13 %t277 = load i64, ptr %a270 %t278 = load { ptr, i64, i64 }, ptr %t276 %t279 = extractvalue { ptr, i64, i64 } %t278, 1 %t280 = icmp uge i64 %t277, %t279 br i1 %t280, label %range4905, label %inrange4906 range4905: call void @finch_panic_index(ptr @.str.3082, i64 2215, i64 %t277, i64 %t279) unreachable inrange4906: %t281 = extractvalue { ptr, i64, i64 } %t278, 0 %t282 = getelementptr inbounds %S.ast.Type, ptr %t281, i64 %t277 %t283 = load %S.ast.Type, ptr %t282 store %S.ast.Type %t283, ptr %a284 call void @finch.copy.S_ast_Type(ptr %a285, ptr %a284) %t286 = load %S.ast.Type, ptr %a285 store %S.ast.Type %t286, ptr %a287 %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1 %t289 = load ptr, ptr %a1 %t290 = load %S.ast.Type, ptr %a287 %t291 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t289, %S.ast.Type %t290) store { ptr, i64, i64 } %t291, ptr %a293 store { ptr, i64, i64 } { ptr @.str.3083, i64 3, i64 0 }, ptr %a294 call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) store { ptr, i64, i64 } %t291, ptr %a295 call void @finch_str_drop(ptr %a295) %t296 = load { ptr, i64, i64 }, ptr %a292 %t297 = load i64, ptr %a270 call void @finch_str_from_int(ptr %a298, i64 %t297) %t299 = load { ptr, i64, i64 }, ptr %a298 store { ptr, i64, i64 } %t296, ptr %a301 store { ptr, i64, i64 } %t299, ptr %a302 call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) store { ptr, i64, i64 } %t296, ptr %a303 call void @finch_str_drop(ptr %a303) store { ptr, i64, i64 } %t299, ptr %a304 call void @finch_str_drop(ptr %a304) %t305 = load { ptr, i64, i64 }, ptr %a300 %t306 = load i64, ptr %t288 %t307 = add i64 %t306, 1 call void @finch_arr_reserve(ptr %a190, i64 %t307, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t308 = load ptr, ptr %a190 %t309 = getelementptr inbounds { ptr, i64, i64 }, ptr %t308, i64 %t306 store { ptr, i64, i64 } %t305, ptr %t309 store i64 %t307, ptr %t288 %t310 = load i64, ptr %a270 call void @finch_str_from_int(ptr %a311, i64 %t310) %t312 = load { ptr, i64, i64 }, ptr %a311 store { ptr, i64, i64 } { ptr @.str.3084, i64 2, i64 0 }, ptr %a314 store { ptr, i64, i64 } %t312, ptr %a315 call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) store { ptr, i64, i64 } %t312, ptr %a316 call void @finch_str_drop(ptr %a316) %t317 = load { ptr, i64, i64 }, ptr %a313 store { ptr, i64, i64 } %t317, ptr %a318 %t319 = load ptr, ptr %a1 %t320 = load %S.ast.Type, ptr %a287 %t321 = call i1 @finch.gen.owning(ptr %t319, %S.ast.Type %t320) br label %logic.from4907 logic.from4907: br i1 %t321, label %logic.rhs4908, label %logic.end4909 logic.rhs4908: %t322 = load ptr, ptr %a1 %t323 = icmp eq ptr %t322, null br i1 %t323, label %panic4910, label %ok4911 panic4910: call void @finch_panic(ptr @.str.3085, i64 2218, ptr @.str.3086) unreachable ok4911: %t324 = getelementptr inbounds %S.gen.Gen, ptr %t322, i32 0, i32 13 %t325 = getelementptr inbounds %S.gen.FnSig, ptr %t324, i32 0, i32 15 %t326 = load i64, ptr %a270 %t327 = load { ptr, i64, i64 }, ptr %t325 %t328 = extractvalue { ptr, i64, i64 } %t327, 1 %t329 = icmp uge i64 %t326, %t328 br i1 %t329, label %range4912, label %inrange4913 range4912: call void @finch_panic_index(ptr @.str.3087, i64 2218, i64 %t326, i64 %t328) unreachable inrange4913: %t330 = extractvalue { ptr, i64, i64 } %t327, 0 %t331 = getelementptr inbounds i1, ptr %t330, i64 %t326 %t332 = load i1, ptr %t331 %t333 = xor i1 %t332, true br label %logic.rend4914 logic.rend4914: br label %logic.end4909 logic.end4909: %t334 = phi i1 [ false, %logic.from4907 ], [ %t333, %logic.rend4914 ] br i1 %t334, label %then4915, label %endif4917 then4915: %t335 = load ptr, ptr %a1 %t336 = load { ptr, i64, i64 }, ptr %a318 %t337 = load %S.ast.Type, ptr %a287 %t338 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t335, { ptr, i64, i64 } %t336, %S.ast.Type %t337) %t339 = load { ptr, i64, i64 }, ptr %a318 store { ptr, i64, i64 } %t338, ptr %a318 store { ptr, i64, i64 } %t339, ptr %a340 call void @finch_str_drop(ptr %a340) br label %endif4917 endif4917: %t341 = load i64, ptr %a270 %t342 = add i64 %t341, 1 %t343 = load ptr, ptr %a1 %t344 = icmp eq ptr %t343, null br i1 %t344, label %panic4918, label %ok4919 panic4918: call void @finch_panic(ptr @.str.3088, i64 2221, ptr @.str.3089) unreachable ok4919: %t345 = getelementptr inbounds %S.gen.Gen, ptr %t343, i32 0, i32 39 store i64 %t342, ptr %t345 %t346 = load ptr, ptr %a1 %t347 = icmp eq ptr %t346, null br i1 %t347, label %panic4920, label %ok4921 panic4920: call void @finch_panic(ptr @.str.3090, i64 2222, ptr @.str.3091) unreachable ok4921: %t348 = getelementptr inbounds %S.gen.Gen, ptr %t346, i32 0, i32 13 %t349 = getelementptr inbounds %S.gen.FnSig, ptr %t348, i32 0, i32 2 %t350 = getelementptr inbounds { ptr, i64, i64 }, ptr %t349, i32 0, i32 1 %t351 = load i64, ptr %t350 %t352 = icmp sgt i64 %t351, 0 br i1 %t352, label %then4922, label %endif4924 then4922: %t353 = load i64, ptr %a270 %t354 = add i64 %t353, 2 %t355 = load ptr, ptr %a1 %t356 = icmp eq ptr %t355, null br i1 %t356, label %panic4925, label %ok4926 panic4925: call void @finch_panic(ptr @.str.3092, i64 2223, ptr @.str.3093) unreachable ok4926: %t357 = getelementptr inbounds %S.gen.Gen, ptr %t355, i32 0, i32 39 store i64 %t354, ptr %t357 br label %endif4924 endif4924: %t358 = load ptr, ptr %a1 %t359 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 %t360 = load i64, ptr %a270 %t361 = load { ptr, i64, i64 }, ptr %t359 %t362 = extractvalue { ptr, i64, i64 } %t361, 1 %t363 = icmp uge i64 %t360, %t362 br i1 %t363, label %range4927, label %inrange4928 range4927: call void @finch_panic_index(ptr @.str.3094, i64 2225, i64 %t360, i64 %t362) unreachable inrange4928: %t364 = extractvalue { ptr, i64, i64 } %t361, 0 %t365 = getelementptr inbounds %S.ast.Node, ptr %t364, i64 %t360 %t366 = load %S.ast.Node, ptr %t365 %t367 = load ptr, ptr %a1 %t368 = icmp eq ptr %t367, null br i1 %t368, label %panic4929, label %ok4930 panic4929: call void @finch_panic(ptr @.str.3095, i64 2225, ptr @.str.3096) unreachable ok4930: %t369 = getelementptr inbounds %S.gen.Gen, ptr %t367, i32 0, i32 13 %t370 = getelementptr inbounds %S.gen.FnSig, ptr %t369, i32 0, i32 14 %t371 = load i64, ptr %a270 %t372 = load { ptr, i64, i64 }, ptr %t370 %t373 = extractvalue { ptr, i64, i64 } %t372, 1 %t374 = icmp uge i64 %t371, %t373 br i1 %t374, label %range4931, label %inrange4932 range4931: call void @finch_panic_index(ptr @.str.3097, i64 2225, i64 %t371, i64 %t373) unreachable inrange4932: %t375 = extractvalue { ptr, i64, i64 } %t372, 0 %t376 = getelementptr inbounds { ptr, i64, i64 }, ptr %t375, i64 %t371 %t377 = load { ptr, i64, i64 }, ptr %t376 %t378 = load %S.ast.Type, ptr %a287 %t379 = load { ptr, i64, i64 }, ptr %a318 %t380 = load ptr, ptr %a1 %t381 = load %S.ast.Type, ptr %a287 %t382 = call i1 @finch.gen.owning(ptr %t380, %S.ast.Type %t381) br label %logic.from4933 logic.from4933: br i1 %t382, label %logic.rhs4934, label %logic.end4935 logic.rhs4934: %t383 = load ptr, ptr %a1 %t384 = icmp eq ptr %t383, null br i1 %t384, label %panic4936, label %ok4937 panic4936: call void @finch_panic(ptr @.str.3098, i64 2225, ptr @.str.3099) unreachable ok4937: %t385 = getelementptr inbounds %S.gen.Gen, ptr %t383, i32 0, i32 13 %t386 = getelementptr inbounds %S.gen.FnSig, ptr %t385, i32 0, i32 15 %t387 = load i64, ptr %a270 %t388 = load { ptr, i64, i64 }, ptr %t386 %t389 = extractvalue { ptr, i64, i64 } %t388, 1 %t390 = icmp uge i64 %t387, %t389 br i1 %t390, label %range4938, label %inrange4939 range4938: call void @finch_panic_index(ptr @.str.3100, i64 2225, i64 %t387, i64 %t389) unreachable inrange4939: %t391 = extractvalue { ptr, i64, i64 } %t388, 0 %t392 = getelementptr inbounds i1, ptr %t391, i64 %t387 %t393 = load i1, ptr %t392 %t394 = xor i1 %t393, true br label %logic.rend4940 logic.rend4940: br label %logic.end4935 logic.end4935: %t395 = phi i1 [ false, %logic.from4933 ], [ %t394, %logic.rend4940 ] %t396 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t358, %S.ast.Node %t366, { ptr, i64, i64 } %t377, %S.ast.Type %t378, { ptr, i64, i64 } %t379, i1 false, i1 %t395) store { ptr, i64, i64 } %t396, ptr %a397 call void @finch_str_drop(ptr %a397) %t398 = load ptr, ptr %a1 %t399 = icmp eq ptr %t398, null br i1 %t399, label %panic4941, label %ok4942 panic4941: call void @finch_panic(ptr @.str.3101, i64 2226, ptr @.str.3102) unreachable ok4942: %t400 = getelementptr inbounds %S.gen.Gen, ptr %t398, i32 0, i32 39 store i64 0, ptr %t400 call void @finch_str_drop(ptr %a318) call void @finch.drop.S_ast_Type(ptr %a287) br label %for.step4901 for.step4901: %t401 = load i64, ptr %a270 %t402 = add i64 %t401, 1 store i64 %t402, ptr %a270 br label %for.cond4899 for.end4902: %t403 = load ptr, ptr %a1 %t404 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 %t405 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 %t406 = getelementptr inbounds { ptr, i64, i64 }, ptr %t405, i32 0, i32 1 %t407 = load i64, ptr %t406 %t408 = sub i64 %t407, 1 %t409 = load { ptr, i64, i64 }, ptr %t404 %t410 = extractvalue { ptr, i64, i64 } %t409, 1 %t411 = icmp uge i64 %t408, %t410 br i1 %t411, label %range4943, label %inrange4944 range4943: call void @finch_panic_index(ptr @.str.3103, i64 2228, i64 %t408, i64 %t410) unreachable inrange4944: %t412 = extractvalue { ptr, i64, i64 } %t409, 0 %t413 = getelementptr inbounds %S.ast.Node, ptr %t412, i64 %t408 %t414 = load %S.ast.Node, ptr %t413 call void @finch.gen.block(ptr %t403, %S.ast.Node %t414, i1 false) %t415 = load ptr, ptr %a1 %t416 = icmp eq ptr %t415, null br i1 %t416, label %panic4945, label %ok4946 panic4945: call void @finch_panic(ptr @.str.3104, i64 2229, ptr @.str.3105) unreachable ok4946: %t417 = getelementptr inbounds %S.gen.Gen, ptr %t415, i32 0, i32 9 %t418 = load i1, ptr %t417 %t419 = xor i1 %t418, true br i1 %t419, label %then4947, label %endif4949 then4947: %t420 = load ptr, ptr %a1 %t421 = icmp eq ptr %t420, null br i1 %t421, label %panic4950, label %ok4951 panic4950: call void @finch_panic(ptr @.str.3106, i64 2230, ptr @.str.3107) unreachable ok4951: %t422 = getelementptr inbounds %S.gen.Gen, ptr %t420, i32 0, i32 13 %t423 = getelementptr inbounds %S.gen.FnSig, ptr %t422, i32 0, i32 12 %t424 = getelementptr inbounds %S.ast.Type, ptr %t423, i32 0, i32 0 %t425 = load { ptr, i64, i64 }, ptr %t424 store { ptr, i64, i64 } %t425, ptr %a426 store { ptr, i64, i64 } { ptr @.str.3108, i64 4, i64 0 }, ptr %a427 %t428 = call i32 @finch_str_eq(ptr %a426, ptr %a427) %t429 = icmp eq i32 %t428, 0 br i1 %t429, label %then4952, label %endif4954 then4952: %t430 = load ptr, ptr %a1 %t431 = load %S.ast.Node, ptr %a119 %t432 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 1 %t433 = load { ptr, i64, i64 }, ptr %t432 store { ptr, i64, i64 } { ptr @.str.3109, i64 10, i64 0 }, ptr %a435 store { ptr, i64, i64 } %t433, ptr %a436 call void @finch_str_concat(ptr %a434, ptr %a435, ptr %a436) %t437 = load { ptr, i64, i64 }, ptr %a434 store { ptr, i64, i64 } %t437, ptr %a439 store { ptr, i64, i64 } { ptr @.str.3110, i64 38, i64 0 }, ptr %a440 call void @finch_str_concat(ptr %a438, ptr %a439, ptr %a440) store { ptr, i64, i64 } %t437, ptr %a441 call void @finch_str_drop(ptr %a441) %t442 = load { ptr, i64, i64 }, ptr %a438 %t443 = load ptr, ptr %a1 %t444 = icmp eq ptr %t443, null br i1 %t444, label %panic4955, label %ok4956 panic4955: call void @finch_panic(ptr @.str.3111, i64 2231, ptr @.str.3112) unreachable ok4956: %t445 = getelementptr inbounds %S.gen.Gen, ptr %t443, i32 0, i32 13 %t446 = getelementptr inbounds %S.gen.FnSig, ptr %t445, i32 0, i32 12 %t447 = load %S.ast.Type, ptr %t446 %t448 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t447) store { ptr, i64, i64 } %t442, ptr %a450 store { ptr, i64, i64 } %t448, ptr %a451 call void @finch_str_concat(ptr %a449, ptr %a450, ptr %a451) store { ptr, i64, i64 } %t442, ptr %a452 call void @finch_str_drop(ptr %a452) store { ptr, i64, i64 } %t448, ptr %a453 call void @finch_str_drop(ptr %a453) %t454 = load { ptr, i64, i64 }, ptr %a449 call void @finch.gen.fail(ptr %t430, %S.ast.Node %t431, { ptr, i64, i64 } %t454) store { ptr, i64, i64 } %t454, ptr %a455 call void @finch_str_drop(ptr %a455) br label %endif4954 endif4954: %t456 = load ptr, ptr %a1 call void @finch.gen.unwind(ptr %t456, i64 0) %t457 = load ptr, ptr %a1 %t458 = icmp eq ptr %t457, null br i1 %t458, label %panic4957, label %ok4958 panic4957: call void @finch_panic(ptr @.str.3113, i64 2234, ptr @.str.3114) unreachable ok4958: %t459 = getelementptr inbounds %S.gen.Gen, ptr %t457, i32 0, i32 13 %t460 = getelementptr inbounds %S.gen.FnSig, ptr %t459, i32 0, i32 9 %t461 = load i1, ptr %t460 br i1 %t461, label %then4959, label %else4960 then4959: %t462 = load ptr, ptr %a1 %t463 = load ptr, ptr %a1 %t464 = load ptr, ptr %a1 %t465 = icmp eq ptr %t464, null br i1 %t465, label %panic4962, label %ok4963 panic4962: call void @finch_panic(ptr @.str.3116, i64 2235, ptr @.str.3117) unreachable ok4963: %t466 = getelementptr inbounds %S.gen.Gen, ptr %t464, i32 0, i32 13 %t467 = load %S.gen.FnSig, ptr %t466 %t468 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t463, %S.gen.FnSig %t467) store { ptr, i64, i64 } { ptr @.str.3115, i64 4, i64 0 }, ptr %a470 store { ptr, i64, i64 } %t468, ptr %a471 call void @finch_str_concat(ptr %a469, ptr %a470, ptr %a471) store { ptr, i64, i64 } %t468, ptr %a472 call void @finch_str_drop(ptr %a472) %t473 = load { ptr, i64, i64 }, ptr %a469 store { ptr, i64, i64 } %t473, ptr %a475 store { ptr, i64, i64 } { ptr @.str.3118, i64 53, i64 0 }, ptr %a476 call void @finch_str_concat(ptr %a474, ptr %a475, ptr %a476) store { ptr, i64, i64 } %t473, ptr %a477 call void @finch_str_drop(ptr %a477) %t478 = load { ptr, i64, i64 }, ptr %a474 call void @finch.gen.emit(ptr %t462, { ptr, i64, i64 } %t478) store { ptr, i64, i64 } %t478, ptr %a479 call void @finch_str_drop(ptr %a479) br label %endif4961 else4960: %t480 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t480, { ptr, i64, i64 } { ptr @.str.3119, i64 8, i64 0 }) br label %endif4961 endif4961: br label %endif4949 endif4949: store { ptr, i64, i64 } { ptr @.str.3120, i64 0, i64 0 }, ptr %a481 %t482 = load i64, ptr %a151 %t483 = icmp sge i64 %t482, 0 br i1 %t483, label %then4964, label %endif4966 then4964: %t484 = load i64, ptr %a151 call void @finch_str_from_int(ptr %a485, i64 %t484) %t486 = load { ptr, i64, i64 }, ptr %a485 store { ptr, i64, i64 } { ptr @.str.3121, i64 7, i64 0 }, ptr %a488 store { ptr, i64, i64 } %t486, ptr %a489 call void @finch_str_concat(ptr %a487, ptr %a488, ptr %a489) store { ptr, i64, i64 } %t486, ptr %a490 call void @finch_str_drop(ptr %a490) %t491 = load { ptr, i64, i64 }, ptr %a487 %t492 = load { ptr, i64, i64 }, ptr %a481 store { ptr, i64, i64 } %t491, ptr %a481 store { ptr, i64, i64 } %t492, ptr %a493 call void @finch_str_drop(ptr %a493) br label %endif4966 endif4966: %t494 = load ptr, ptr %a1 %t495 = icmp eq ptr %t494, null br i1 %t495, label %panic4967, label %ok4968 panic4967: call void @finch_panic(ptr @.str.3122, i64 2244, ptr @.str.3123) unreachable ok4968: %t496 = getelementptr inbounds %S.gen.Gen, ptr %t494, i32 0, i32 36 store i64 -1, ptr %t496 %t497 = load ptr, ptr %a1 %t498 = icmp eq ptr %t497, null br i1 %t498, label %panic4969, label %ok4970 panic4969: call void @finch_panic(ptr @.str.3124, i64 2245, ptr @.str.3125) unreachable ok4970: %t499 = getelementptr inbounds %S.gen.Gen, ptr %t497, i32 0, i32 3 %t500 = getelementptr inbounds { ptr, i64, i64 }, ptr %t499, i32 0, i32 1 %t501 = load ptr, ptr %a1 %t502 = load ptr, ptr %a1 %t503 = icmp eq ptr %t502, null br i1 %t503, label %panic4971, label %ok4972 panic4971: call void @finch_panic(ptr @.str.3127, i64 2245, ptr @.str.3128) unreachable ok4972: %t504 = getelementptr inbounds %S.gen.Gen, ptr %t502, i32 0, i32 13 %t505 = load %S.gen.FnSig, ptr %t504 %t506 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t501, %S.gen.FnSig %t505) store { ptr, i64, i64 } { ptr @.str.3126, i64 16, i64 0 }, ptr %a508 store { ptr, i64, i64 } %t506, ptr %a509 call void @finch_str_concat(ptr %a507, ptr %a508, ptr %a509) store { ptr, i64, i64 } %t506, ptr %a510 call void @finch_str_drop(ptr %a510) %t511 = load { ptr, i64, i64 }, ptr %a507 store { ptr, i64, i64 } %t511, ptr %a513 store { ptr, i64, i64 } { ptr @.str.3129, i64 1, i64 0 }, ptr %a514 call void @finch_str_concat(ptr %a512, ptr %a513, ptr %a514) store { ptr, i64, i64 } %t511, ptr %a515 call void @finch_str_drop(ptr %a515) %t516 = load { ptr, i64, i64 }, ptr %a512 %t517 = load ptr, ptr %a1 %t518 = icmp eq ptr %t517, null br i1 %t518, label %panic4973, label %ok4974 panic4973: call void @finch_panic(ptr @.str.3130, i64 2245, ptr @.str.3131) unreachable ok4974: %t519 = getelementptr inbounds %S.gen.Gen, ptr %t517, i32 0, i32 13 %t520 = getelementptr inbounds %S.gen.FnSig, ptr %t519, i32 0, i32 11 %t521 = load { ptr, i64, i64 }, ptr %t520 store { ptr, i64, i64 } %t516, ptr %a523 store { ptr, i64, i64 } %t521, ptr %a524 call void @finch_str_concat(ptr %a522, ptr %a523, ptr %a524) store { ptr, i64, i64 } %t516, ptr %a525 call void @finch_str_drop(ptr %a525) %t526 = load { ptr, i64, i64 }, ptr %a522 store { ptr, i64, i64 } %t526, ptr %a528 store { ptr, i64, i64 } { ptr @.str.3132, i64 1, i64 0 }, ptr %a529 call void @finch_str_concat(ptr %a527, ptr %a528, ptr %a529) store { ptr, i64, i64 } %t526, ptr %a530 call void @finch_str_drop(ptr %a530) %t531 = load { ptr, i64, i64 }, ptr %a527 %t532 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.3133, i64 2, i64 0 }, ptr %a533 call void @finch_str_join(ptr %a534, ptr %a190, ptr %a533) %t535 = load { ptr, i64, i64 }, ptr %a534 store { ptr, i64, i64 } %t531, ptr %a537 store { ptr, i64, i64 } %t535, ptr %a538 call void @finch_str_concat(ptr %a536, ptr %a537, ptr %a538) store { ptr, i64, i64 } %t531, ptr %a539 call void @finch_str_drop(ptr %a539) store { ptr, i64, i64 } %t535, ptr %a540 call void @finch_str_drop(ptr %a540) %t541 = load { ptr, i64, i64 }, ptr %a536 store { ptr, i64, i64 } %t541, ptr %a543 store { ptr, i64, i64 } { ptr @.str.3134, i64 1, i64 0 }, ptr %a544 call void @finch_str_concat(ptr %a542, ptr %a543, ptr %a544) store { ptr, i64, i64 } %t541, ptr %a545 call void @finch_str_drop(ptr %a545) %t546 = load { ptr, i64, i64 }, ptr %a542 %t547 = load { ptr, i64, i64 }, ptr %a481 store { ptr, i64, i64 } %t546, ptr %a549 store { ptr, i64, i64 } %t547, ptr %a550 call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) store { ptr, i64, i64 } %t546, ptr %a551 call void @finch_str_drop(ptr %a551) %t552 = load { ptr, i64, i64 }, ptr %a548 store { ptr, i64, i64 } %t552, ptr %a554 store { ptr, i64, i64 } { ptr @.str.3135, i64 10, i64 0 }, ptr %a555 call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555) store { ptr, i64, i64 } %t552, ptr %a556 call void @finch_str_drop(ptr %a556) %t557 = load { ptr, i64, i64 }, ptr %a553 %t558 = load ptr, ptr %a1 %t559 = icmp eq ptr %t558, null br i1 %t559, label %panic4975, label %ok4976 panic4975: call void @finch_panic(ptr @.str.3136, i64 2246, ptr @.str.3137) unreachable ok4976: %t560 = getelementptr inbounds %S.gen.Gen, ptr %t558, i32 0, i32 5 %t561 = getelementptr inbounds { ptr, i64, i64 }, ptr %t560, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.3138, i64 1, i64 0 }, ptr %a562 call void @finch_str_join(ptr %a563, ptr %t560, ptr %a562) %t564 = load { ptr, i64, i64 }, ptr %a563 store { ptr, i64, i64 } %t557, ptr %a566 store { ptr, i64, i64 } %t564, ptr %a567 call void @finch_str_concat(ptr %a565, ptr %a566, ptr %a567) store { ptr, i64, i64 } %t557, ptr %a568 call void @finch_str_drop(ptr %a568) store { ptr, i64, i64 } %t564, ptr %a569 call void @finch_str_drop(ptr %a569) %t570 = load { ptr, i64, i64 }, ptr %a565 store { ptr, i64, i64 } %t570, ptr %a572 store { ptr, i64, i64 } { ptr @.str.3139, i64 1, i64 0 }, ptr %a573 call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573) store { ptr, i64, i64 } %t570, ptr %a574 call void @finch_str_drop(ptr %a574) %t575 = load { ptr, i64, i64 }, ptr %a571 %t576 = load ptr, ptr %a1 %t577 = icmp eq ptr %t576, null br i1 %t577, label %panic4977, label %ok4978 panic4977: call void @finch_panic(ptr @.str.3140, i64 2246, ptr @.str.3141) unreachable ok4978: %t578 = getelementptr inbounds %S.gen.Gen, ptr %t576, i32 0, i32 4 %t579 = getelementptr inbounds { ptr, i64, i64 }, ptr %t578, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.3142, i64 1, i64 0 }, ptr %a580 call void @finch_str_join(ptr %a581, ptr %t578, ptr %a580) %t582 = load { ptr, i64, i64 }, ptr %a581 store { ptr, i64, i64 } %t575, ptr %a584 store { ptr, i64, i64 } %t582, ptr %a585 call void @finch_str_concat(ptr %a583, ptr %a584, ptr %a585) store { ptr, i64, i64 } %t575, ptr %a586 call void @finch_str_drop(ptr %a586) store { ptr, i64, i64 } %t582, ptr %a587 call void @finch_str_drop(ptr %a587) %t588 = load { ptr, i64, i64 }, ptr %a583 store { ptr, i64, i64 } %t588, ptr %a590 store { ptr, i64, i64 } { ptr @.str.3143, i64 3, i64 0 }, ptr %a591 call void @finch_str_concat(ptr %a589, ptr %a590, ptr %a591) store { ptr, i64, i64 } %t588, ptr %a592 call void @finch_str_drop(ptr %a592) %t593 = load { ptr, i64, i64 }, ptr %a589 %t594 = load i64, ptr %t500 %t595 = add i64 %t594, 1 call void @finch_arr_reserve(ptr %t499, i64 %t595, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t596 = load ptr, ptr %t499 %t597 = getelementptr inbounds { ptr, i64, i64 }, ptr %t596, i64 %t594 store { ptr, i64, i64 } %t593, ptr %t597 store i64 %t595, ptr %t500 call void @finch_str_drop(ptr %a481) call void @finch.drop.arr_str(ptr %a190) call void @finch.drop.arr_S_gen_Scope(ptr %a179) call void @finch.drop.arr_str(ptr %a120) call void @finch.drop.S_ast_Node(ptr %a119) ret void } define internal void @finch.gen.block(ptr %p0, %S.ast.Node %p1, i1 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i1, align 16 %a7 = alloca i64, align 16 %a15 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i1 %p2, ptr %a3 %t4 = load i1, ptr %a3 br i1 %t4, label %then4979, label %endif4981 then4979: %t5 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t5) br label %endif4981 endif4981: %t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 store i64 0, ptr %a7 br label %each.cond4982 each.cond4982: %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load i64, ptr %a7 %t11 = icmp slt i64 %t10, %t9 br i1 %t11, label %each.body4983, label %each.end4985 each.body4983: %t12 = load ptr, ptr %t6 %t13 = getelementptr inbounds %S.ast.Node, ptr %t12, i64 %t10 %t14 = load %S.ast.Node, ptr %t13 store %S.ast.Node %t14, ptr %a15 %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null br i1 %t17, label %panic4986, label %ok4987 panic4986: call void @finch_panic(ptr @.str.3144, i64 2256, ptr @.str.3145) unreachable ok4987: %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 9 %t19 = load i1, ptr %t18 br i1 %t19, label %then4988, label %endif4990 then4988: %t20 = load ptr, ptr %a1 %t21 = load %S.ast.Node, ptr %a15 call void @finch.gen.fail(ptr %t20, %S.ast.Node %t21, { ptr, i64, i64 } { ptr @.str.3146, i64 66, i64 0 }) br label %endif4990 endif4990: %t22 = load ptr, ptr %a1 %t23 = load %S.ast.Node, ptr %a15 call void @finch.gen.stmt(ptr %t22, %S.ast.Node %t23) br label %each.step4984 each.step4984: %t24 = load i64, ptr %a7 %t25 = add i64 %t24, 1 store i64 %t25, ptr %a7 br label %each.cond4982 each.end4985: %t26 = load i1, ptr %a3 br i1 %t26, label %then4991, label %endif4993 then4991: %t27 = load ptr, ptr %a1 call void @finch.gen.endScope(ptr %t27) br label %endif4993 endif4993: ret void } define internal void @finch.copy.S_gen_Loop(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Loop, ptr %src store %S.gen.Loop %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Loop, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Loop, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Loop, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Loop, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) ret void } define internal void @finch.drop.S_gen_Loop(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.Loop, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.gen.Loop, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) ret void } define internal void @finch.gen.stmt(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca %S.gen.Val, align 16 %a78 = alloca %S.gen.Val, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca %S.gen.Val, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca i64, align 16 %a189 = alloca %S.ast.Node, align 16 %a190 = alloca %S.ast.Node, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca %S.gen.Loop, align 16 %a269 = alloca %S.gen.Loop, align 16 %a271 = alloca %S.gen.Loop, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t4 = load i64, ptr %t3 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic4994, label %ok4995 panic4994: call void @finch_panic(ptr @.str.3147, i64 2267, ptr @.str.3148) unreachable ok4995: %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 37 store i64 %t4, ptr %t7 %t8 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t9 = load i64, ptr %t8 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic4996, label %ok4997 panic4996: call void @finch_panic(ptr @.str.3149, i64 2268, ptr @.str.3150) unreachable ok4997: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 38 store i64 %t9, ptr %t12 %t13 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t14 = load { ptr, i64, i64 }, ptr %t13 store { ptr, i64, i64 } %t14, ptr %a15 call void @finch_str_copy(ptr %a16, ptr %a15) %t17 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t17, ptr %a18 %t19 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.3151, i64 5, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 br i1 %t23, label %then4998, label %else4999 then4998: %t24 = load ptr, ptr %a1 %t25 = load %S.ast.Node, ptr %a2 call void @finch.gen.block(ptr %t24, %S.ast.Node %t25, i1 true) br label %endif5000 else4999: %t26 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.3152, i64 4, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 br i1 %t30, label %then5001, label %else5002 then5001: %t31 = load ptr, ptr %a1 %t32 = load %S.ast.Node, ptr %a2 call void @finch.gen.declStmt(ptr %t31, %S.ast.Node %t32) br label %endif5003 else5002: %t33 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } { ptr @.str.3153, i64 6, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 br i1 %t37, label %then5004, label %else5005 then5004: %t38 = load ptr, ptr %a1 %t39 = load %S.ast.Node, ptr %a2 call void @finch.gen.assignStmt(ptr %t38, %S.ast.Node %t39) br label %endif5006 else5005: %t40 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } { ptr @.str.3154, i64 4, i64 0 }, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 br i1 %t44, label %then5007, label %else5008 then5007: %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 0, %t47 br i1 %t48, label %range5010, label %inrange5011 range5010: call void @finch_panic_index(ptr @.str.3155, i64 2277, i64 0, i64 %t47) unreachable inrange5011: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 0 %t51 = getelementptr inbounds %S.ast.Node, ptr %t50, i32 0, i32 0 %t52 = load { ptr, i64, i64 }, ptr %t51 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.3156, i64 2, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 br i1 %t56, label %then5012, label %else5013 then5012: %t57 = load ptr, ptr %a1 %t58 = load ptr, ptr %a1 %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t60 = load { ptr, i64, i64 }, ptr %t59 %t61 = extractvalue { ptr, i64, i64 } %t60, 1 %t62 = icmp uge i64 0, %t61 br i1 %t62, label %range5015, label %inrange5016 range5015: call void @finch_panic_index(ptr @.str.3157, i64 2278, i64 0, i64 %t61) unreachable inrange5016: %t63 = extractvalue { ptr, i64, i64 } %t60, 0 %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 0 %t65 = load %S.ast.Node, ptr %t64 %t66 = call %S.gen.Val @finch.gen.orElse(ptr %t58, %S.ast.Node %t65, i1 true) call void @finch.gen.release(ptr %t57, %S.gen.Val %t66) store %S.gen.Val %t66, ptr %a67 call void @finch.drop.S_gen_Val(ptr %a67) br label %endif5014 else5013: %t68 = load ptr, ptr %a1 %t69 = load ptr, ptr %a1 %t70 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t71 = load { ptr, i64, i64 }, ptr %t70 %t72 = extractvalue { ptr, i64, i64 } %t71, 1 %t73 = icmp uge i64 0, %t72 br i1 %t73, label %range5017, label %inrange5018 range5017: call void @finch_panic_index(ptr @.str.3158, i64 2280, i64 0, i64 %t72) unreachable inrange5018: %t74 = extractvalue { ptr, i64, i64 } %t71, 0 %t75 = getelementptr inbounds %S.ast.Node, ptr %t74, i64 0 %t76 = load %S.ast.Node, ptr %t75 %t77 = call %S.gen.Val @finch.gen.expr(ptr %t69, %S.ast.Node %t76) call void @finch.gen.release(ptr %t68, %S.gen.Val %t77) store %S.gen.Val %t77, ptr %a78 call void @finch.drop.S_gen_Val(ptr %a78) br label %endif5014 endif5014: br label %endif5009 else5008: %t79 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t79, ptr %a80 store { ptr, i64, i64 } { ptr @.str.3159, i64 5, i64 0 }, ptr %a81 %t82 = call i32 @finch_str_eq(ptr %a80, ptr %a81) %t83 = icmp ne i32 %t82, 0 br i1 %t83, label %then5019, label %else5020 then5019: %t84 = load ptr, ptr %a1 %t85 = load %S.ast.Node, ptr %a2 %t86 = call %S.gen.Val @finch.gen.matchGen(ptr %t84, %S.ast.Node %t85, i1 false) store %S.gen.Val %t86, ptr %a87 call void @finch.drop.S_gen_Val(ptr %a87) br label %endif5021 else5020: %t88 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t88, ptr %a89 store { ptr, i64, i64 } { ptr @.str.3160, i64 2, i64 0 }, ptr %a90 %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) %t92 = icmp ne i32 %t91, 0 br i1 %t92, label %then5022, label %else5023 then5022: %t93 = load ptr, ptr %a1 %t94 = load %S.ast.Node, ptr %a2 call void @finch.gen.ifStmt(ptr %t93, %S.ast.Node %t94) br label %endif5024 else5023: %t95 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t95, ptr %a96 store { ptr, i64, i64 } { ptr @.str.3161, i64 5, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) %t99 = icmp ne i32 %t98, 0 br i1 %t99, label %then5025, label %else5026 then5025: %t100 = load ptr, ptr %a1 %t101 = load %S.ast.Node, ptr %a2 call void @finch.gen.whileStmt(ptr %t100, %S.ast.Node %t101) br label %endif5027 else5026: %t102 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t102, ptr %a103 store { ptr, i64, i64 } { ptr @.str.3162, i64 3, i64 0 }, ptr %a104 %t105 = call i32 @finch_str_eq(ptr %a103, ptr %a104) %t106 = icmp ne i32 %t105, 0 br i1 %t106, label %then5028, label %else5029 then5028: %t107 = load ptr, ptr %a1 %t108 = load %S.ast.Node, ptr %a2 call void @finch.gen.forStmt(ptr %t107, %S.ast.Node %t108) br label %endif5030 else5029: %t109 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t109, ptr %a110 store { ptr, i64, i64 } { ptr @.str.3163, i64 4, i64 0 }, ptr %a111 %t112 = call i32 @finch_str_eq(ptr %a110, ptr %a111) %t113 = icmp ne i32 %t112, 0 br i1 %t113, label %then5031, label %else5032 then5031: %t114 = load ptr, ptr %a1 %t115 = load %S.ast.Node, ptr %a2 call void @finch.gen.eachStmt(ptr %t114, %S.ast.Node %t115) br label %endif5033 else5032: %t116 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t116, ptr %a117 store { ptr, i64, i64 } { ptr @.str.3164, i64 6, i64 0 }, ptr %a118 %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) %t120 = icmp ne i32 %t119, 0 br i1 %t120, label %then5034, label %else5035 then5034: %t121 = load ptr, ptr %a1 %t122 = load %S.ast.Node, ptr %a2 call void @finch.gen.returnStmt(ptr %t121, %S.ast.Node %t122) br label %endif5036 else5035: %t123 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t123, ptr %a124 store { ptr, i64, i64 } { ptr @.str.3165, i64 5, i64 0 }, ptr %a125 %t126 = call i32 @finch_str_eq(ptr %a124, ptr %a125) %t127 = icmp ne i32 %t126, 0 br i1 %t127, label %then5037, label %else5038 then5037: %t128 = load ptr, ptr %a1 %t129 = icmp eq ptr %t128, null br i1 %t129, label %panic5040, label %ok5041 panic5040: call void @finch_panic(ptr @.str.3166, i64 2295, ptr @.str.3167) unreachable ok5041: %t130 = getelementptr inbounds %S.gen.Gen, ptr %t128, i32 0, i32 46 %t131 = load i64, ptr %t130 %t132 = icmp sgt i64 %t131, 0 br i1 %t132, label %then5042, label %endif5044 then5042: %t133 = load ptr, ptr %a1 %t134 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t133, %S.ast.Node %t134, { ptr, i64, i64 } { ptr @.str.3168, i64 33, i64 0 }) br label %endif5044 endif5044: %t135 = load ptr, ptr %a1 %t136 = icmp eq ptr %t135, null br i1 %t136, label %panic5045, label %ok5046 panic5045: call void @finch_panic(ptr @.str.3169, i64 2298, ptr @.str.3170) unreachable ok5046: %t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 10 %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 %t139 = load i64, ptr %t138 %t140 = sub i64 %t139, 1 store i64 %t140, ptr %a141 %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null br i1 %t143, label %panic5047, label %ok5048 panic5047: call void @finch_panic(ptr @.str.3171, i64 2299, ptr @.str.3172) unreachable ok5048: %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 10 %t145 = load i64, ptr %a141 %t146 = load { ptr, i64, i64 }, ptr %t144 %t147 = extractvalue { ptr, i64, i64 } %t146, 1 %t148 = icmp uge i64 %t145, %t147 br i1 %t148, label %range5049, label %inrange5050 range5049: call void @finch_panic_index(ptr @.str.3173, i64 2299, i64 %t145, i64 %t147) unreachable inrange5050: %t149 = extractvalue { ptr, i64, i64 } %t146, 0 %t150 = getelementptr inbounds %S.gen.Scope, ptr %t149, i64 %t145 %t151 = getelementptr inbounds %S.gen.Scope, ptr %t150, i32 0, i32 3 %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 %t153 = insertvalue %S.gen.Cleanup zeroinitializer, i1 true, 0 %t154 = load ptr, ptr %a1 %t155 = icmp eq ptr %t154, null br i1 %t155, label %panic5051, label %ok5052 panic5051: call void @finch_panic(ptr @.str.3174, i64 2299, ptr @.str.3175) unreachable ok5052: %t156 = getelementptr inbounds %S.gen.Gen, ptr %t154, i32 0, i32 10 %t157 = load i64, ptr %a141 %t158 = load { ptr, i64, i64 }, ptr %t156 %t159 = extractvalue { ptr, i64, i64 } %t158, 1 %t160 = icmp uge i64 %t157, %t159 br i1 %t160, label %range5053, label %inrange5054 range5053: call void @finch_panic_index(ptr @.str.3176, i64 2299, i64 %t157, i64 %t159) unreachable inrange5054: %t161 = extractvalue { ptr, i64, i64 } %t158, 0 %t162 = getelementptr inbounds %S.gen.Scope, ptr %t161, i64 %t157 %t163 = getelementptr inbounds %S.gen.Scope, ptr %t162, i32 0, i32 1 %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %t163, i32 0, i32 1 %t165 = load i64, ptr %t164 %t166 = insertvalue %S.gen.Cleanup %t153, i64 %t165, 1 %t167 = load i64, ptr %t152 %t168 = add i64 %t167, 1 call void @finch_arr_reserve(ptr %t151, i64 %t168, i64 ptrtoint (ptr getelementptr (%S.gen.Cleanup, ptr null, i32 1) to i64)) %t169 = load ptr, ptr %t151 %t170 = getelementptr inbounds %S.gen.Cleanup, ptr %t169, i64 %t167 store %S.gen.Cleanup %t166, ptr %t170 store i64 %t168, ptr %t152 %t171 = load ptr, ptr %a1 %t172 = icmp eq ptr %t171, null br i1 %t172, label %panic5055, label %ok5056 panic5055: call void @finch_panic(ptr @.str.3177, i64 2300, ptr @.str.3178) unreachable ok5056: %t173 = getelementptr inbounds %S.gen.Gen, ptr %t171, i32 0, i32 10 %t174 = load i64, ptr %a141 %t175 = load { ptr, i64, i64 }, ptr %t173 %t176 = extractvalue { ptr, i64, i64 } %t175, 1 %t177 = icmp uge i64 %t174, %t176 br i1 %t177, label %range5057, label %inrange5058 range5057: call void @finch_panic_index(ptr @.str.3179, i64 2300, i64 %t174, i64 %t176) unreachable inrange5058: %t178 = extractvalue { ptr, i64, i64 } %t175, 0 %t179 = getelementptr inbounds %S.gen.Scope, ptr %t178, i64 %t174 %t180 = getelementptr inbounds %S.gen.Scope, ptr %t179, i32 0, i32 1 %t181 = getelementptr inbounds { ptr, i64, i64 }, ptr %t180, i32 0, i32 1 %t182 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t183 = load { ptr, i64, i64 }, ptr %t182 %t184 = extractvalue { ptr, i64, i64 } %t183, 1 %t185 = icmp uge i64 0, %t184 br i1 %t185, label %range5059, label %inrange5060 range5059: call void @finch_panic_index(ptr @.str.3180, i64 2300, i64 0, i64 %t184) unreachable inrange5060: %t186 = extractvalue { ptr, i64, i64 } %t183, 0 %t187 = getelementptr inbounds %S.ast.Node, ptr %t186, i64 0 %t188 = load %S.ast.Node, ptr %t187 store %S.ast.Node %t188, ptr %a189 call void @finch.copy.S_ast_Node(ptr %a190, ptr %a189) %t191 = load %S.ast.Node, ptr %a190 %t192 = load i64, ptr %t181 %t193 = add i64 %t192, 1 call void @finch_arr_reserve(ptr %t180, i64 %t193, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t194 = load ptr, ptr %t180 %t195 = getelementptr inbounds %S.ast.Node, ptr %t194, i64 %t192 store %S.ast.Node %t191, ptr %t195 store i64 %t193, ptr %t181 %t196 = load ptr, ptr %a1 %t197 = icmp eq ptr %t196, null br i1 %t197, label %panic5061, label %ok5062 panic5061: call void @finch_panic(ptr @.str.3181, i64 2301, ptr @.str.3182) unreachable ok5062: %t198 = getelementptr inbounds %S.gen.Gen, ptr %t196, i32 0, i32 10 %t199 = load i64, ptr %a141 %t200 = load { ptr, i64, i64 }, ptr %t198 %t201 = extractvalue { ptr, i64, i64 } %t200, 1 %t202 = icmp uge i64 %t199, %t201 br i1 %t202, label %range5063, label %inrange5064 range5063: call void @finch_panic_index(ptr @.str.3183, i64 2301, i64 %t199, i64 %t201) unreachable inrange5064: %t203 = extractvalue { ptr, i64, i64 } %t200, 0 %t204 = getelementptr inbounds %S.gen.Scope, ptr %t203, i64 %t199 %t205 = getelementptr inbounds %S.gen.Scope, ptr %t204, i32 0, i32 2 %t206 = getelementptr inbounds { ptr, i64, i64 }, ptr %t205, i32 0, i32 1 %t207 = load ptr, ptr %a1 %t208 = icmp eq ptr %t207, null br i1 %t208, label %panic5065, label %ok5066 panic5065: call void @finch_panic(ptr @.str.3184, i64 2301, ptr @.str.3185) unreachable ok5066: %t209 = getelementptr inbounds %S.gen.Gen, ptr %t207, i32 0, i32 25 %t210 = load i64, ptr %t209 %t211 = load i64, ptr %t206 %t212 = add i64 %t211, 1 call void @finch_arr_reserve(ptr %t205, i64 %t212, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t213 = load ptr, ptr %t205 %t214 = getelementptr inbounds i64, ptr %t213, i64 %t211 store i64 %t210, ptr %t214 store i64 %t212, ptr %t206 br label %endif5039 else5038: %t215 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t215, ptr %a216 store { ptr, i64, i64 } { ptr @.str.3186, i64 5, i64 0 }, ptr %a217 %t218 = call i32 @finch_str_eq(ptr %a216, ptr %a217) %t219 = icmp ne i32 %t218, 0 br label %logic.from5067 logic.from5067: br i1 %t219, label %logic.end5069, label %logic.rhs5068 logic.rhs5068: %t220 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t220, ptr %a221 store { ptr, i64, i64 } { ptr @.str.3187, i64 8, i64 0 }, ptr %a222 %t223 = call i32 @finch_str_eq(ptr %a221, ptr %a222) %t224 = icmp ne i32 %t223, 0 br label %logic.rend5070 logic.rend5070: br label %logic.end5069 logic.end5069: %t225 = phi i1 [ true, %logic.from5067 ], [ %t224, %logic.rend5070 ] br i1 %t225, label %then5071, label %else5072 then5071: %t226 = load ptr, ptr %a1 %t227 = icmp eq ptr %t226, null br i1 %t227, label %panic5074, label %ok5075 panic5074: call void @finch_panic(ptr @.str.3188, i64 2303, ptr @.str.3189) unreachable ok5075: %t228 = getelementptr inbounds %S.gen.Gen, ptr %t226, i32 0, i32 46 %t229 = load i64, ptr %t228 %t230 = icmp sgt i64 %t229, 0 br i1 %t230, label %then5076, label %endif5078 then5076: %t231 = load ptr, ptr %a1 %t232 = load %S.ast.Node, ptr %a2 %t233 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t233, ptr %a235 store { ptr, i64, i64 } { ptr @.str.3190, i64 27, i64 0 }, ptr %a236 call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) %t237 = load { ptr, i64, i64 }, ptr %a234 call void @finch.gen.fail(ptr %t231, %S.ast.Node %t232, { ptr, i64, i64 } %t237) store { ptr, i64, i64 } %t237, ptr %a238 call void @finch_str_drop(ptr %a238) br label %endif5078 endif5078: %t239 = load ptr, ptr %a1 %t240 = icmp eq ptr %t239, null br i1 %t240, label %panic5079, label %ok5080 panic5079: call void @finch_panic(ptr @.str.3191, i64 2306, ptr @.str.3192) unreachable ok5080: %t241 = getelementptr inbounds %S.gen.Gen, ptr %t239, i32 0, i32 12 %t242 = getelementptr inbounds { ptr, i64, i64 }, ptr %t241, i32 0, i32 1 %t243 = load i64, ptr %t242 %t244 = icmp eq i64 %t243, 0 br i1 %t244, label %then5081, label %endif5083 then5081: %t245 = load ptr, ptr %a1 %t246 = load %S.ast.Node, ptr %a2 %t247 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t247, ptr %a249 store { ptr, i64, i64 } { ptr @.str.3193, i64 31, i64 0 }, ptr %a250 call void @finch_str_concat(ptr %a248, ptr %a249, ptr %a250) %t251 = load { ptr, i64, i64 }, ptr %a248 call void @finch.gen.fail(ptr %t245, %S.ast.Node %t246, { ptr, i64, i64 } %t251) store { ptr, i64, i64 } %t251, ptr %a252 call void @finch_str_drop(ptr %a252) br label %endif5083 endif5083: %t253 = load ptr, ptr %a1 %t254 = icmp eq ptr %t253, null br i1 %t254, label %panic5084, label %ok5085 panic5084: call void @finch_panic(ptr @.str.3194, i64 2309, ptr @.str.3195) unreachable ok5085: %t255 = getelementptr inbounds %S.gen.Gen, ptr %t253, i32 0, i32 12 %t256 = load ptr, ptr %a1 %t257 = icmp eq ptr %t256, null br i1 %t257, label %panic5086, label %ok5087 panic5086: call void @finch_panic(ptr @.str.3196, i64 2309, ptr @.str.3197) unreachable ok5087: %t258 = getelementptr inbounds %S.gen.Gen, ptr %t256, i32 0, i32 12 %t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %t258, i32 0, i32 1 %t260 = load i64, ptr %t259 %t261 = sub i64 %t260, 1 %t262 = load { ptr, i64, i64 }, ptr %t255 %t263 = extractvalue { ptr, i64, i64 } %t262, 1 %t264 = icmp uge i64 %t261, %t263 br i1 %t264, label %range5088, label %inrange5089 range5088: call void @finch_panic_index(ptr @.str.3198, i64 2309, i64 %t261, i64 %t263) unreachable inrange5089: %t265 = extractvalue { ptr, i64, i64 } %t262, 0 %t266 = getelementptr inbounds %S.gen.Loop, ptr %t265, i64 %t261 %t267 = load %S.gen.Loop, ptr %t266 store %S.gen.Loop %t267, ptr %a268 call void @finch.copy.S_gen_Loop(ptr %a269, ptr %a268) %t270 = load %S.gen.Loop, ptr %a269 store %S.gen.Loop %t270, ptr %a271 %t272 = load ptr, ptr %a1 %t273 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 3 %t274 = load i64, ptr %t273 call void @finch.gen.dropPending(ptr %t272, i64 %t274) %t275 = load ptr, ptr %a1 %t276 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 2 %t277 = load i64, ptr %t276 call void @finch.gen.unwind(ptr %t275, i64 %t277) %t278 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t278, ptr %a279 store { ptr, i64, i64 } { ptr @.str.3199, i64 5, i64 0 }, ptr %a280 %t281 = call i32 @finch_str_eq(ptr %a279, ptr %a280) %t282 = icmp ne i32 %t281, 0 br i1 %t282, label %then5090, label %else5091 then5090: %t283 = load ptr, ptr %a1 %t284 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 1 %t285 = load { ptr, i64, i64 }, ptr %t284 call void @finch.gen.br(ptr %t283, { ptr, i64, i64 } %t285) br label %endif5092 else5091: %t286 = load ptr, ptr %a1 %t287 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 0 %t288 = load { ptr, i64, i64 }, ptr %t287 call void @finch.gen.br(ptr %t286, { ptr, i64, i64 } %t288) br label %endif5092 endif5092: call void @finch.drop.S_gen_Loop(ptr %a271) br label %endif5073 else5072: %t289 = load ptr, ptr %a1 %t290 = load %S.ast.Node, ptr %a2 %t291 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } { ptr @.str.3200, i64 18, i64 0 }, ptr %a293 store { ptr, i64, i64 } %t291, ptr %a294 call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) %t295 = load { ptr, i64, i64 }, ptr %a292 call void @finch.gen.fail(ptr %t289, %S.ast.Node %t290, { ptr, i64, i64 } %t295) store { ptr, i64, i64 } %t295, ptr %a296 call void @finch_str_drop(ptr %a296) br label %endif5073 endif5073: br label %endif5039 endif5039: br label %endif5036 endif5036: br label %endif5033 endif5033: br label %endif5030 endif5030: br label %endif5027 endif5027: br label %endif5024 endif5024: br label %endif5021 endif5021: br label %endif5009 endif5009: br label %endif5006 endif5006: br label %endif5003 endif5003: br label %endif5000 endif5000: call void @finch_str_drop(ptr %a18) ret void } define internal void @finch.gen.declStmt(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a15 = alloca %S.gen.Val, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca %S.ast.Type, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca %S.gen.Val, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca %S.gen.Val, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca %S.gen.Val, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 6 %t4 = load i1, ptr %t3 %t5 = xor i1 %t4, true br i1 %t5, label %then5093, label %endif5095 then5093: %t6 = load ptr, ptr %a1 %t7 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t8 = load { ptr, i64, i64 }, ptr %t7 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 0, %t9 br i1 %t10, label %range5096, label %inrange5097 range5096: call void @finch_panic_index(ptr @.str.3201, i64 2324, i64 0, i64 %t9) unreachable inrange5097: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.ast.Node, ptr %t11, i64 0 %t13 = load %S.ast.Node, ptr %t12 %t14 = call %S.gen.Val @finch.gen.expr(ptr %t6, %S.ast.Node %t13) store %S.gen.Val %t14, ptr %a15 %t16 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1 %t17 = getelementptr inbounds %S.ast.Type, ptr %t16, i32 0, i32 0 %t18 = load { ptr, i64, i64 }, ptr %t17 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } { ptr @.str.3202, i64 4, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 br i1 %t22, label %then5098, label %endif5100 then5098: %t23 = load ptr, ptr %a1 %t24 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t25 = load { ptr, i64, i64 }, ptr %t24 %t26 = extractvalue { ptr, i64, i64 } %t25, 1 %t27 = icmp uge i64 0, %t26 br i1 %t27, label %range5101, label %inrange5102 range5101: call void @finch_panic_index(ptr @.str.3203, i64 2326, i64 0, i64 %t26) unreachable inrange5102: %t28 = extractvalue { ptr, i64, i64 } %t25, 0 %t29 = getelementptr inbounds %S.ast.Node, ptr %t28, i64 0 %t30 = load %S.ast.Node, ptr %t29 call void @finch.gen.fail(ptr %t23, %S.ast.Node %t30, { ptr, i64, i64 } { ptr @.str.3204, i64 46, i64 0 }) br label %endif5100 endif5100: %t31 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1 %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i32 0, i32 0 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } { ptr @.str.3205, i64 4, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 br i1 %t37, label %then5103, label %endif5105 then5103: %t38 = load ptr, ptr %a1 %t39 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = extractvalue { ptr, i64, i64 } %t40, 1 %t42 = icmp uge i64 0, %t41 br i1 %t42, label %range5106, label %inrange5107 range5106: call void @finch_panic_index(ptr @.str.3206, i64 2329, i64 0, i64 %t41) unreachable inrange5107: %t43 = extractvalue { ptr, i64, i64 } %t40, 0 %t44 = getelementptr inbounds %S.ast.Node, ptr %t43, i64 0 %t45 = load %S.ast.Node, ptr %t44 %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t47 = load { ptr, i64, i64 }, ptr %t46 store { ptr, i64, i64 } { ptr @.str.3207, i64 34, i64 0 }, ptr %a49 store { ptr, i64, i64 } %t47, ptr %a50 call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) %t51 = load { ptr, i64, i64 }, ptr %a48 store { ptr, i64, i64 } %t51, ptr %a53 store { ptr, i64, i64 } { ptr @.str.3208, i64 7, i64 0 }, ptr %a54 call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) store { ptr, i64, i64 } %t51, ptr %a55 call void @finch_str_drop(ptr %a55) %t56 = load { ptr, i64, i64 }, ptr %a52 call void @finch.gen.fail(ptr %t38, %S.ast.Node %t45, { ptr, i64, i64 } %t56) store { ptr, i64, i64 } %t56, ptr %a57 call void @finch_str_drop(ptr %a57) br label %endif5105 endif5105: %t58 = load ptr, ptr %a1 %t59 = load %S.ast.Node, ptr %a2 %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t61 = load { ptr, i64, i64 }, ptr %t60 %t62 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1 %t63 = load %S.ast.Type, ptr %t62 %t64 = load ptr, ptr %a1 %t65 = load %S.gen.Val, ptr %a15 %t66 = call { ptr, i64, i64 } @finch.gen.own(ptr %t64, %S.gen.Val %t65) %t67 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t58, %S.ast.Node %t59, { ptr, i64, i64 } %t61, %S.ast.Type %t63, { ptr, i64, i64 } %t66, i1 false, i1 true) store { ptr, i64, i64 } %t66, ptr %a68 call void @finch_str_drop(ptr %a68) store { ptr, i64, i64 } %t67, ptr %a69 call void @finch_str_drop(ptr %a69) call void @finch.drop.S_gen_Val(ptr %a15) ret void endif5095: %t70 = load ptr, ptr %a1 %t71 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t72 = load %S.ast.Type, ptr %t71 %t73 = load %S.ast.Node, ptr %a2 %t74 = call %S.ast.Type @finch.gen.resolve(ptr %t70, %S.ast.Type %t72, %S.ast.Node %t73) store %S.ast.Type %t74, ptr %a75 %t76 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 %t78 = load i64, ptr %t77 %t79 = icmp eq i64 %t78, 0 br i1 %t79, label %then5108, label %endif5110 then5108: %t80 = getelementptr inbounds %S.ast.Type, ptr %a75, i32 0, i32 0 %t81 = load { ptr, i64, i64 }, ptr %t80 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.3209, i64 6, i64 0 }, ptr %a83 %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) %t85 = icmp ne i32 %t84, 0 br label %logic.from5111 logic.from5111: br i1 %t85, label %logic.rhs5112, label %logic.end5113 logic.rhs5112: %t86 = load ptr, ptr %a1 %t87 = load %S.ast.Type, ptr %a75 %t88 = call i1 @finch.gen.hasDefaults(ptr %t86, %S.ast.Type %t87) br label %logic.rend5114 logic.rend5114: br label %logic.end5113 logic.end5113: %t89 = phi i1 [ false, %logic.from5111 ], [ %t88, %logic.rend5114 ] br i1 %t89, label %then5115, label %endif5117 then5115: store { ptr, i64, i64 } zeroinitializer, ptr %a90 store { ptr, i64, i64 } zeroinitializer, ptr %a91 %t92 = load ptr, ptr %a1 %t93 = load ptr, ptr %a1 %t94 = getelementptr inbounds %S.ast.Type, ptr %a75, i32 0, i32 3 %t95 = load { ptr, i64, i64 }, ptr %t94 %t96 = getelementptr inbounds %S.ast.Type, ptr %a75, i32 0, i32 2 %t97 = load { ptr, i64, i64 }, ptr %t96 %t98 = call i64 @finch.gen.findStruct(ptr %t93, { ptr, i64, i64 } %t95, { ptr, i64, i64 } %t97) %t99 = load { ptr, i64, i64 }, ptr %a90 %t100 = load { ptr, i64, i64 }, ptr %a91 %t101 = load %S.ast.Node, ptr %a2 %t102 = call %S.gen.Val @finch.gen.construct(ptr %t92, i64 %t98, { ptr, i64, i64 } %t99, { ptr, i64, i64 } %t100, %S.ast.Node %t101) store %S.gen.Val %t102, ptr %a103 %t104 = load ptr, ptr %a1 %t105 = load %S.ast.Node, ptr %a2 %t106 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t107 = load { ptr, i64, i64 }, ptr %t106 %t108 = load %S.ast.Type, ptr %a75 %t109 = getelementptr inbounds %S.gen.Val, ptr %a103, i32 0, i32 0 %t110 = load { ptr, i64, i64 }, ptr %t109 %t111 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t104, %S.ast.Node %t105, { ptr, i64, i64 } %t107, %S.ast.Type %t108, { ptr, i64, i64 } %t110, i1 false, i1 true) store { ptr, i64, i64 } %t111, ptr %a112 call void @finch_str_drop(ptr %a112) call void @finch.drop.S_gen_Val(ptr %a103) call void @finch.drop.arr_str(ptr %a91) call void @finch.drop.arr_S_ast_Node(ptr %a90) call void @finch.drop.S_ast_Type(ptr %a75) ret void endif5117: %t113 = load ptr, ptr %a1 %t114 = load %S.ast.Node, ptr %a2 %t115 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t116 = load { ptr, i64, i64 }, ptr %t115 %t117 = load %S.ast.Type, ptr %a75 %t118 = load %S.ast.Type, ptr %a75 %t119 = call { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %t118) %t120 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t113, %S.ast.Node %t114, { ptr, i64, i64 } %t116, %S.ast.Type %t117, { ptr, i64, i64 } %t119, i1 false, i1 true) store { ptr, i64, i64 } %t119, ptr %a121 call void @finch_str_drop(ptr %a121) store { ptr, i64, i64 } %t120, ptr %a122 call void @finch_str_drop(ptr %a122) call void @finch.drop.S_ast_Type(ptr %a75) ret void endif5110: %t123 = load ptr, ptr %a1 %t124 = load ptr, ptr %a1 %t125 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t126 = load { ptr, i64, i64 }, ptr %t125 %t127 = extractvalue { ptr, i64, i64 } %t126, 1 %t128 = icmp uge i64 0, %t127 br i1 %t128, label %range5118, label %inrange5119 range5118: call void @finch_panic_index(ptr @.str.3210, i64 2346, i64 0, i64 %t127) unreachable inrange5119: %t129 = extractvalue { ptr, i64, i64 } %t126, 0 %t130 = getelementptr inbounds %S.ast.Node, ptr %t129, i64 0 %t131 = load %S.ast.Node, ptr %t130 %t132 = load %S.ast.Type, ptr %a75 %t133 = call %S.gen.Val @finch.gen.exprWant(ptr %t124, %S.ast.Node %t131, %S.ast.Type %t132) %t134 = load %S.ast.Type, ptr %a75 %t135 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t136 = load { ptr, i64, i64 }, ptr %t135 %t137 = extractvalue { ptr, i64, i64 } %t136, 1 %t138 = icmp uge i64 0, %t137 br i1 %t138, label %range5120, label %inrange5121 range5120: call void @finch_panic_index(ptr @.str.3211, i64 2346, i64 0, i64 %t137) unreachable inrange5121: %t139 = extractvalue { ptr, i64, i64 } %t136, 0 %t140 = getelementptr inbounds %S.ast.Node, ptr %t139, i64 0 %t141 = load %S.ast.Node, ptr %t140 %t142 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t143 = load { ptr, i64, i64 }, ptr %t142 store { ptr, i64, i64 } { ptr @.str.3212, i64 1, i64 0 }, ptr %a145 store { ptr, i64, i64 } %t143, ptr %a146 call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) %t147 = load { ptr, i64, i64 }, ptr %a144 store { ptr, i64, i64 } %t147, ptr %a149 store { ptr, i64, i64 } { ptr @.str.3213, i64 1, i64 0 }, ptr %a150 call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) store { ptr, i64, i64 } %t147, ptr %a151 call void @finch_str_drop(ptr %a151) %t152 = load { ptr, i64, i64 }, ptr %a148 %t153 = call %S.gen.Val @finch.gen.coerce(ptr %t123, %S.gen.Val %t133, %S.ast.Type %t134, %S.ast.Node %t141, { ptr, i64, i64 } %t152) store %S.gen.Val %t133, ptr %a154 call void @finch.drop.S_gen_Val(ptr %a154) store { ptr, i64, i64 } %t152, ptr %a155 call void @finch_str_drop(ptr %a155) store %S.gen.Val %t153, ptr %a156 %t157 = load ptr, ptr %a1 %t158 = load %S.ast.Node, ptr %a2 %t159 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t160 = load { ptr, i64, i64 }, ptr %t159 %t161 = load %S.ast.Type, ptr %a75 %t162 = load ptr, ptr %a1 %t163 = load %S.gen.Val, ptr %a156 %t164 = call { ptr, i64, i64 } @finch.gen.own(ptr %t162, %S.gen.Val %t163) %t165 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t157, %S.ast.Node %t158, { ptr, i64, i64 } %t160, %S.ast.Type %t161, { ptr, i64, i64 } %t164, i1 false, i1 true) store { ptr, i64, i64 } %t164, ptr %a166 call void @finch_str_drop(ptr %a166) store { ptr, i64, i64 } %t165, ptr %a167 call void @finch_str_drop(ptr %a167) call void @finch.drop.S_gen_Val(ptr %a156) call void @finch.drop.S_ast_Type(ptr %a75) ret void } define internal i1 @finch.gen.hasDefaults(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a18 = alloca %S.gen.StructDef, align 16 %a19 = alloca %S.gen.StructDef, align 16 %a21 = alloca %S.gen.StructDef, align 16 %a43 = alloca i64, align 16 %a51 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic5122, label %ok5123 panic5122: call void @finch_panic(ptr @.str.3214, i64 2351, ptr @.str.3215) unreachable ok5123: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 16 %t6 = load ptr, ptr %a1 %t7 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t8 = load { ptr, i64, i64 }, ptr %t7 %t9 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t10 = load { ptr, i64, i64 }, ptr %t9 %t11 = call i64 @finch.gen.findStruct(ptr %t6, { ptr, i64, i64 } %t8, { ptr, i64, i64 } %t10) %t12 = load { ptr, i64, i64 }, ptr %t5 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 %t11, %t13 br i1 %t14, label %range5124, label %inrange5125 range5124: call void @finch_panic_index(ptr @.str.3216, i64 2351, i64 %t11, i64 %t13) unreachable inrange5125: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.gen.StructDef, ptr %t15, i64 %t11 %t17 = load %S.gen.StructDef, ptr %t16 store %S.gen.StructDef %t17, ptr %a18 call void @finch.copy.S_gen_StructDef(ptr %a19, ptr %a18) %t20 = load %S.gen.StructDef, ptr %a19 store %S.gen.StructDef %t20, ptr %a21 %t22 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 2 %t23 = load i1, ptr %t22 br i1 %t23, label %then5126, label %endif5128 then5126: call void @finch.drop.S_gen_StructDef(ptr %a21) ret i1 false endif5128: %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null br i1 %t25, label %panic5129, label %ok5130 panic5129: call void @finch_panic(ptr @.str.3217, i64 2355, ptr @.str.3218) unreachable ok5130: %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 0 %t27 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 13 %t28 = load i64, ptr %t27 %t29 = load { ptr, i64, i64 }, ptr %t26 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 %t28, %t30 br i1 %t31, label %range5131, label %inrange5132 range5131: call void @finch_panic_index(ptr @.str.3219, i64 2355, i64 %t28, i64 %t30) unreachable inrange5132: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds %S.ast.Program, ptr %t32, i64 %t28 %t34 = getelementptr inbounds %S.ast.Program, ptr %t33, i32 0, i32 6 %t35 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 14 %t36 = load i64, ptr %t35 %t37 = load { ptr, i64, i64 }, ptr %t34 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 br i1 %t39, label %range5133, label %inrange5134 range5133: call void @finch_panic_index(ptr @.str.3220, i64 2355, i64 %t36, i64 %t38) unreachable inrange5134: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i32 0, i32 9 store i64 0, ptr %a43 br label %each.cond5135 each.cond5135: %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 %t45 = load i64, ptr %t44 %t46 = load i64, ptr %a43 %t47 = icmp slt i64 %t46, %t45 br i1 %t47, label %each.body5136, label %each.end5138 each.body5136: %t48 = load ptr, ptr %t42 %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i64 %t46 %t50 = load %S.ast.Node, ptr %t49 store %S.ast.Node %t50, ptr %a51 %t52 = getelementptr inbounds %S.ast.Node, ptr %a51, i32 0, i32 9 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 %t54 = load i64, ptr %t53 %t55 = icmp sgt i64 %t54, 0 br i1 %t55, label %then5139, label %endif5141 then5139: call void @finch.drop.S_gen_StructDef(ptr %a21) ret i1 true endif5141: br label %each.step5137 each.step5137: %t56 = load i64, ptr %a43 %t57 = add i64 %t56, 1 store i64 %t57, ptr %a43 br label %each.cond5135 each.end5138: call void @finch.drop.S_gen_StructDef(ptr %a21) ret i1 false } define internal void @finch.drop.S_gen_Place(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.Place, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.gen.Place, ptr %a, i32 0, i32 1 call void @finch.drop.S_ast_Type(ptr %t2) ret void } define internal void @finch.gen.assignStmt(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a10 = alloca %S.ast.Node, align 16 %a11 = alloca %S.ast.Node, align 16 %a13 = alloca %S.ast.Node, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca i64, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca %S.gen.Var, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca %S.ast.Type, align 16 %a105 = alloca i1, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca i64, align 16 %a122 = alloca %S.ast.Type, align 16 %a123 = alloca %S.ast.Type, align 16 %a125 = alloca %S.gen.Var, align 16 %a127 = alloca %S.ast.Type, align 16 %a128 = alloca %S.gen.Val, align 16 %a141 = alloca %S.gen.Val, align 16 %a152 = alloca %S.gen.Val, align 16 %a158 = alloca i64, align 16 %a164 = alloca %S.gen.Place, align 16 %a179 = alloca %S.gen.Val, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca %S.gen.Val, align 16 %a237 = alloca i64, align 16 %a243 = alloca %S.gen.Place, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca %S.ast.Type, align 16 %a257 = alloca %S.ast.Type, align 16 %a260 = alloca %S.gen.Val, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca %S.gen.Val, align 16 %a280 = alloca %S.gen.Val, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t4 = load { ptr, i64, i64 }, ptr %t3 %t5 = extractvalue { ptr, i64, i64 } %t4, 1 %t6 = icmp uge i64 0, %t5 br i1 %t6, label %range5142, label %inrange5143 range5142: call void @finch_panic_index(ptr @.str.3221, i64 2364, i64 0, i64 %t5) unreachable inrange5143: %t7 = extractvalue { ptr, i64, i64 } %t4, 0 %t8 = getelementptr inbounds %S.ast.Node, ptr %t7, i64 0 %t9 = load %S.ast.Node, ptr %t8 store %S.ast.Node %t9, ptr %a10 call void @finch.copy.S_ast_Node(ptr %a11, ptr %a10) %t12 = load %S.ast.Node, ptr %a11 store %S.ast.Node %t12, ptr %a13 %t14 = load %S.ast.Node, ptr %a13 %t15 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t14) store { ptr, i64, i64 } %t15, ptr %a16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a16, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = icmp sgt i64 %t18, 0 br i1 %t19, label %then5144, label %endif5146 then5144: %t20 = load ptr, ptr %a1 %t21 = load { ptr, i64, i64 }, ptr %a16 %t22 = call i64 @finch.gen.lookup(ptr %t20, { ptr, i64, i64 } %t21) store i64 %t22, ptr %a23 %t24 = load i64, ptr %a23 %t25 = icmp slt i64 %t24, 0 br label %logic.from5147 logic.from5147: br i1 %t25, label %logic.rhs5148, label %logic.end5149 logic.rhs5148: %t26 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.3222, i64 3, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 br label %logic.rend5150 logic.rend5150: br label %logic.end5149 logic.end5149: %t32 = phi i1 [ false, %logic.from5147 ], [ %t31, %logic.rend5150 ] br i1 %t32, label %then5151, label %endif5153 then5151: %t33 = load ptr, ptr %a1 %t34 = load %S.ast.Node, ptr %a2 %t35 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3223, i64 28, i64 0 }, ptr %a37 store { ptr, i64, i64 } %t35, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t39, ptr %a41 store { ptr, i64, i64 } { ptr @.str.3224, i64 18, i64 0 }, ptr %a42 call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) store { ptr, i64, i64 } %t39, ptr %a43 call void @finch_str_drop(ptr %a43) %t44 = load { ptr, i64, i64 }, ptr %a40 %t45 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t44, ptr %a47 store { ptr, i64, i64 } %t45, ptr %a48 call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) store { ptr, i64, i64 } %t44, ptr %a49 call void @finch_str_drop(ptr %a49) %t50 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t50, ptr %a52 store { ptr, i64, i64 } { ptr @.str.3225, i64 8, i64 0 }, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) store { ptr, i64, i64 } %t50, ptr %a54 call void @finch_str_drop(ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a51 call void @finch.gen.fail(ptr %t33, %S.ast.Node %t34, { ptr, i64, i64 } %t55) store { ptr, i64, i64 } %t55, ptr %a56 call void @finch_str_drop(ptr %a56) br label %endif5153 endif5153: %t57 = load i64, ptr %a23 %t58 = icmp sge i64 %t57, 0 br label %logic.from5154 logic.from5154: br i1 %t58, label %logic.rhs5155, label %logic.end5156 logic.rhs5155: %t59 = load ptr, ptr %a1 %t60 = load i64, ptr %a23 %t61 = call %S.gen.Var @finch.gen.varAt(ptr %t59, i64 %t60) %t62 = extractvalue %S.gen.Var %t61, 3 store %S.gen.Var %t61, ptr %a63 call void @finch.drop.S_gen_Var(ptr %a63) br label %logic.rend5157 logic.rend5157: br label %logic.end5156 logic.end5156: %t64 = phi i1 [ false, %logic.from5154 ], [ %t62, %logic.rend5157 ] br i1 %t64, label %then5158, label %endif5160 then5158: %t65 = load ptr, ptr %a1 %t66 = load %S.ast.Node, ptr %a2 %t67 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3226, i64 19, i64 0 }, ptr %a69 store { ptr, i64, i64 } %t67, ptr %a70 call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a68 store { ptr, i64, i64 } %t71, ptr %a73 store { ptr, i64, i64 } { ptr @.str.3227, i64 18, i64 0 }, ptr %a74 call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) store { ptr, i64, i64 } %t71, ptr %a75 call void @finch_str_drop(ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a72 call void @finch.gen.fail(ptr %t65, %S.ast.Node %t66, { ptr, i64, i64 } %t76) store { ptr, i64, i64 } %t76, ptr %a77 call void @finch_str_drop(ptr %a77) br label %endif5160 endif5160: br label %endif5146 endif5146: store { ptr, i64, i64 } { ptr @.str.3228, i64 9, i64 0 }, ptr %a78 %t79 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 %t80 = load { ptr, i64, i64 }, ptr %t79 store { ptr, i64, i64 } %t80, ptr %a81 store { ptr, i64, i64 } { ptr @.str.3229, i64 3, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp ne i32 %t83, 0 br i1 %t84, label %then5161, label %endif5163 then5161: %t85 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3230, i64 1, i64 0 }, ptr %a87 store { ptr, i64, i64 } %t85, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a86 store { ptr, i64, i64 } %t89, ptr %a91 store { ptr, i64, i64 } { ptr @.str.3231, i64 1, i64 0 }, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) store { ptr, i64, i64 } %t89, ptr %a93 call void @finch_str_drop(ptr %a93) %t94 = load { ptr, i64, i64 }, ptr %a90 %t95 = load { ptr, i64, i64 }, ptr %a78 store { ptr, i64, i64 } %t94, ptr %a78 store { ptr, i64, i64 } %t95, ptr %a96 call void @finch_str_drop(ptr %a96) br label %endif5163 endif5163: %t97 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t98 = load { ptr, i64, i64 }, ptr %t97 store { ptr, i64, i64 } %t98, ptr %a99 store { ptr, i64, i64 } { ptr @.str.3232, i64 1, i64 0 }, ptr %a100 %t101 = call i32 @finch_str_eq(ptr %a99, ptr %a100) %t102 = icmp ne i32 %t101, 0 br i1 %t102, label %then5164, label %endif5166 then5164: %t103 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3233, i64 4, i64 0 }) store %S.ast.Type %t103, ptr %a104 store i1 false, ptr %a105 %t106 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 %t107 = load { ptr, i64, i64 }, ptr %t106 store { ptr, i64, i64 } %t107, ptr %a108 store { ptr, i64, i64 } { ptr @.str.3234, i64 3, i64 0 }, ptr %a109 %t110 = call i32 @finch_str_eq(ptr %a108, ptr %a109) %t111 = icmp ne i32 %t110, 0 br i1 %t111, label %then5167, label %endif5169 then5167: %t112 = load ptr, ptr %a1 %t113 = load { ptr, i64, i64 }, ptr %a16 %t114 = call i64 @finch.gen.lookup(ptr %t112, { ptr, i64, i64 } %t113) store i64 %t114, ptr %a115 %t116 = load i64, ptr %a115 %t117 = icmp sge i64 %t116, 0 br i1 %t117, label %then5170, label %endif5172 then5170: %t118 = load ptr, ptr %a1 %t119 = load i64, ptr %a115 %t120 = call %S.gen.Var @finch.gen.varAt(ptr %t118, i64 %t119) %t121 = extractvalue %S.gen.Var %t120, 1 store %S.ast.Type %t121, ptr %a122 call void @finch.copy.S_ast_Type(ptr %a123, ptr %a122) %t124 = load %S.ast.Type, ptr %a123 store %S.gen.Var %t120, ptr %a125 call void @finch.drop.S_gen_Var(ptr %a125) %t126 = load %S.ast.Type, ptr %a104 store %S.ast.Type %t124, ptr %a104 store %S.ast.Type %t126, ptr %a127 call void @finch.drop.S_ast_Type(ptr %a127) store i1 true, ptr %a105 br label %endif5172 endif5172: br label %endif5169 endif5169: store %S.gen.Val zeroinitializer, ptr %a128 %t129 = load i1, ptr %a105 br i1 %t129, label %then5173, label %else5174 then5173: %t130 = load ptr, ptr %a1 %t131 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t132 = load { ptr, i64, i64 }, ptr %t131 %t133 = extractvalue { ptr, i64, i64 } %t132, 1 %t134 = icmp uge i64 1, %t133 br i1 %t134, label %range5176, label %inrange5177 range5176: call void @finch_panic_index(ptr @.str.3235, i64 2392, i64 1, i64 %t133) unreachable inrange5177: %t135 = extractvalue { ptr, i64, i64 } %t132, 0 %t136 = getelementptr inbounds %S.ast.Node, ptr %t135, i64 1 %t137 = load %S.ast.Node, ptr %t136 %t138 = load %S.ast.Type, ptr %a104 %t139 = call %S.gen.Val @finch.gen.exprWant(ptr %t130, %S.ast.Node %t137, %S.ast.Type %t138) %t140 = load %S.gen.Val, ptr %a128 store %S.gen.Val %t139, ptr %a128 store %S.gen.Val %t140, ptr %a141 call void @finch.drop.S_gen_Val(ptr %a141) br label %endif5175 else5174: %t142 = load ptr, ptr %a1 %t143 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t144 = load { ptr, i64, i64 }, ptr %t143 %t145 = extractvalue { ptr, i64, i64 } %t144, 1 %t146 = icmp uge i64 1, %t145 br i1 %t146, label %range5178, label %inrange5179 range5178: call void @finch_panic_index(ptr @.str.3236, i64 2394, i64 1, i64 %t145) unreachable inrange5179: %t147 = extractvalue { ptr, i64, i64 } %t144, 0 %t148 = getelementptr inbounds %S.ast.Node, ptr %t147, i64 1 %t149 = load %S.ast.Node, ptr %t148 %t150 = call %S.gen.Val @finch.gen.expr(ptr %t142, %S.ast.Node %t149) %t151 = load %S.gen.Val, ptr %a128 store %S.gen.Val %t150, ptr %a128 store %S.gen.Val %t151, ptr %a152 call void @finch.drop.S_gen_Val(ptr %a152) br label %endif5175 endif5175: %t153 = load ptr, ptr %a1 %t154 = icmp eq ptr %t153, null br i1 %t154, label %panic5180, label %ok5181 panic5180: call void @finch_panic(ptr @.str.3237, i64 2396, ptr @.str.3238) unreachable ok5181: %t155 = getelementptr inbounds %S.gen.Gen, ptr %t153, i32 0, i32 11 %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %t155, i32 0, i32 1 %t157 = load i64, ptr %t156 store i64 %t157, ptr %a158 %t159 = load ptr, ptr %a1 %t160 = load %S.gen.Val, ptr %a128 call void @finch.gen.hold(ptr %t159, %S.gen.Val %t160) %t161 = load ptr, ptr %a1 %t162 = load %S.ast.Node, ptr %a13 %t163 = call %S.gen.Place @finch.gen.place(ptr %t161, %S.ast.Node %t162, i1 true) store %S.gen.Place %t163, ptr %a164 %t165 = load ptr, ptr %a1 %t166 = load %S.gen.Val, ptr %a128 %t167 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 %t168 = load %S.ast.Type, ptr %t167 %t169 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t170 = load { ptr, i64, i64 }, ptr %t169 %t171 = extractvalue { ptr, i64, i64 } %t170, 1 %t172 = icmp uge i64 1, %t171 br i1 %t172, label %range5182, label %inrange5183 range5182: call void @finch_panic_index(ptr @.str.3239, i64 2399, i64 1, i64 %t171) unreachable inrange5183: %t173 = extractvalue { ptr, i64, i64 } %t170, 0 %t174 = getelementptr inbounds %S.ast.Node, ptr %t173, i64 1 %t175 = load %S.ast.Node, ptr %t174 %t176 = load { ptr, i64, i64 }, ptr %a78 %t177 = call %S.gen.Val @finch.gen.coerce(ptr %t165, %S.gen.Val %t166, %S.ast.Type %t168, %S.ast.Node %t175, { ptr, i64, i64 } %t176) %t178 = load %S.gen.Val, ptr %a128 store %S.gen.Val %t177, ptr %a128 store %S.gen.Val %t178, ptr %a179 call void @finch.drop.S_gen_Val(ptr %a179) %t180 = load ptr, ptr %a1 %t181 = load %S.gen.Val, ptr %a128 %t182 = call { ptr, i64, i64 } @finch.gen.own(ptr %t180, %S.gen.Val %t181) store { ptr, i64, i64 } %t182, ptr %a183 %t184 = load ptr, ptr %a1 %t185 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 %t186 = load %S.ast.Type, ptr %t185 %t187 = call i1 @finch.gen.owning(ptr %t184, %S.ast.Type %t186) br i1 %t187, label %then5184, label %else5185 then5184: %t188 = load ptr, ptr %a1 %t189 = load ptr, ptr %a1 %t190 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 %t191 = load %S.ast.Type, ptr %t190 %t192 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t189, %S.ast.Type %t191) %t193 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 0 %t194 = load { ptr, i64, i64 }, ptr %t193 %t195 = call { ptr, i64, i64 } @finch.gen.load(ptr %t188, { ptr, i64, i64 } %t192, { ptr, i64, i64 } %t194) store { ptr, i64, i64 } %t192, ptr %a196 call void @finch_str_drop(ptr %a196) store { ptr, i64, i64 } %t195, ptr %a197 %t198 = load ptr, ptr %a1 %t199 = load ptr, ptr %a1 %t200 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 %t201 = load %S.ast.Type, ptr %t200 %t202 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t199, %S.ast.Type %t201) %t203 = load { ptr, i64, i64 }, ptr %a183 %t204 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 0 %t205 = load { ptr, i64, i64 }, ptr %t204 call void @finch.gen.store(ptr %t198, { ptr, i64, i64 } %t202, { ptr, i64, i64 } %t203, { ptr, i64, i64 } %t205) store { ptr, i64, i64 } %t202, ptr %a206 call void @finch_str_drop(ptr %a206) %t207 = load ptr, ptr %a1 %t208 = load { ptr, i64, i64 }, ptr %a197 %t209 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 %t210 = load %S.ast.Type, ptr %t209 call void @finch.gen.dropValue(ptr %t207, { ptr, i64, i64 } %t208, %S.ast.Type %t210) call void @finch_str_drop(ptr %a197) br label %endif5186 else5185: %t211 = load ptr, ptr %a1 %t212 = load ptr, ptr %a1 %t213 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 %t214 = load %S.ast.Type, ptr %t213 %t215 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t212, %S.ast.Type %t214) %t216 = load { ptr, i64, i64 }, ptr %a183 %t217 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 0 %t218 = load { ptr, i64, i64 }, ptr %t217 call void @finch.gen.store(ptr %t211, { ptr, i64, i64 } %t215, { ptr, i64, i64 } %t216, { ptr, i64, i64 } %t218) store { ptr, i64, i64 } %t215, ptr %a219 call void @finch_str_drop(ptr %a219) br label %endif5186 endif5186: %t220 = load ptr, ptr %a1 %t221 = load i64, ptr %a158 call void @finch.gen.heldEnd(ptr %t220, i64 %t221) call void @finch_str_drop(ptr %a183) call void @finch.drop.S_gen_Place(ptr %a164) call void @finch.drop.S_gen_Val(ptr %a128) call void @finch.drop.S_ast_Type(ptr %a104) call void @finch_str_drop(ptr %a78) call void @finch_str_drop(ptr %a16) call void @finch.drop.S_ast_Node(ptr %a13) ret void endif5166: %t222 = load ptr, ptr %a1 %t223 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t224 = load { ptr, i64, i64 }, ptr %t223 %t225 = extractvalue { ptr, i64, i64 } %t224, 1 %t226 = icmp uge i64 1, %t225 br i1 %t226, label %range5187, label %inrange5188 range5187: call void @finch_panic_index(ptr @.str.3240, i64 2411, i64 1, i64 %t225) unreachable inrange5188: %t227 = extractvalue { ptr, i64, i64 } %t224, 0 %t228 = getelementptr inbounds %S.ast.Node, ptr %t227, i64 1 %t229 = load %S.ast.Node, ptr %t228 %t230 = call %S.gen.Val @finch.gen.expr(ptr %t222, %S.ast.Node %t229) store %S.gen.Val %t230, ptr %a231 %t232 = load ptr, ptr %a1 %t233 = icmp eq ptr %t232, null br i1 %t233, label %panic5189, label %ok5190 panic5189: call void @finch_panic(ptr @.str.3241, i64 2412, ptr @.str.3242) unreachable ok5190: %t234 = getelementptr inbounds %S.gen.Gen, ptr %t232, i32 0, i32 11 %t235 = getelementptr inbounds { ptr, i64, i64 }, ptr %t234, i32 0, i32 1 %t236 = load i64, ptr %t235 store i64 %t236, ptr %a237 %t238 = load ptr, ptr %a1 %t239 = load %S.gen.Val, ptr %a231 call void @finch.gen.hold(ptr %t238, %S.gen.Val %t239) %t240 = load ptr, ptr %a1 %t241 = load %S.ast.Node, ptr %a13 %t242 = call %S.gen.Place @finch.gen.place(ptr %t240, %S.ast.Node %t241, i1 true) store %S.gen.Place %t242, ptr %a243 %t244 = load ptr, ptr %a1 %t245 = load ptr, ptr %a1 %t246 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 %t247 = load %S.ast.Type, ptr %t246 %t248 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t245, %S.ast.Type %t247) %t249 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 0 %t250 = load { ptr, i64, i64 }, ptr %t249 %t251 = call { ptr, i64, i64 } @finch.gen.load(ptr %t244, { ptr, i64, i64 } %t248, { ptr, i64, i64 } %t250) store { ptr, i64, i64 } %t248, ptr %a252 call void @finch_str_drop(ptr %a252) %t253 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t251, 0 %t254 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 %t255 = load %S.ast.Type, ptr %t254 store %S.ast.Type %t255, ptr %a256 call void @finch.copy.S_ast_Type(ptr %a257, ptr %a256) %t258 = load %S.ast.Type, ptr %a257 %t259 = insertvalue %S.gen.Val %t253, %S.ast.Type %t258, 1 store %S.gen.Val %t259, ptr %a260 %t261 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t262 = load { ptr, i64, i64 }, ptr %t261 store { ptr, i64, i64 } %t262, ptr %a263 call void @finch_str_sub(ptr %a264, ptr %a263, i64 0, i64 1, ptr @.str.3243, i64 2416) %t265 = load { ptr, i64, i64 }, ptr %a264 store { ptr, i64, i64 } %t265, ptr %a266 %t267 = load ptr, ptr %a1 %t268 = load ptr, ptr %a1 %t269 = load { ptr, i64, i64 }, ptr %a266 %t270 = load %S.gen.Val, ptr %a260 %t271 = load %S.gen.Val, ptr %a231 %t272 = load %S.ast.Node, ptr %a2 %t273 = call %S.gen.Val @finch.gen.arith(ptr %t268, { ptr, i64, i64 } %t269, %S.gen.Val %t270, %S.gen.Val %t271, %S.ast.Node %t272) %t274 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 %t275 = load %S.ast.Type, ptr %t274 %t276 = load %S.ast.Node, ptr %a2 %t277 = load { ptr, i64, i64 }, ptr %a78 %t278 = call %S.gen.Val @finch.gen.coerce(ptr %t267, %S.gen.Val %t273, %S.ast.Type %t275, %S.ast.Node %t276, { ptr, i64, i64 } %t277) store %S.gen.Val %t273, ptr %a279 call void @finch.drop.S_gen_Val(ptr %a279) store %S.gen.Val %t278, ptr %a280 %t281 = load ptr, ptr %a1 %t282 = load %S.gen.Val, ptr %a280 %t283 = call { ptr, i64, i64 } @finch.gen.own(ptr %t281, %S.gen.Val %t282) store { ptr, i64, i64 } %t283, ptr %a284 %t285 = load ptr, ptr %a1 %t286 = load ptr, ptr %a1 %t287 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 %t288 = load %S.ast.Type, ptr %t287 %t289 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t286, %S.ast.Type %t288) %t290 = load { ptr, i64, i64 }, ptr %a284 %t291 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 0 %t292 = load { ptr, i64, i64 }, ptr %t291 call void @finch.gen.store(ptr %t285, { ptr, i64, i64 } %t289, { ptr, i64, i64 } %t290, { ptr, i64, i64 } %t292) store { ptr, i64, i64 } %t289, ptr %a293 call void @finch_str_drop(ptr %a293) %t294 = load ptr, ptr %a1 %t295 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 %t296 = load %S.ast.Type, ptr %t295 %t297 = call i1 @finch.gen.owning(ptr %t294, %S.ast.Type %t296) br i1 %t297, label %then5191, label %endif5193 then5191: %t298 = load ptr, ptr %a1 %t299 = getelementptr inbounds %S.gen.Val, ptr %a260, i32 0, i32 0 %t300 = load { ptr, i64, i64 }, ptr %t299 %t301 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 %t302 = load %S.ast.Type, ptr %t301 call void @finch.gen.dropValue(ptr %t298, { ptr, i64, i64 } %t300, %S.ast.Type %t302) br label %endif5193 endif5193: %t303 = load ptr, ptr %a1 %t304 = load i64, ptr %a237 call void @finch.gen.heldEnd(ptr %t303, i64 %t304) call void @finch_str_drop(ptr %a284) call void @finch.drop.S_gen_Val(ptr %a280) call void @finch_str_drop(ptr %a266) call void @finch.drop.S_gen_Val(ptr %a260) call void @finch.drop.S_gen_Place(ptr %a243) call void @finch.drop.S_gen_Val(ptr %a231) call void @finch_str_drop(ptr %a78) call void @finch_str_drop(ptr %a16) call void @finch.drop.S_ast_Node(ptr %a13) ret void } define internal { ptr, i64, i64 } @finch.gen.condition(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a10 = alloca %S.gen.Val, align 16 %a11 = alloca %S.ast.Type, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load ptr, ptr %a1 %t5 = load %S.ast.Node, ptr %a2 %t6 = call %S.gen.Val @finch.gen.expr(ptr %t4, %S.ast.Node %t5) %t7 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3244, i64 4, i64 0 }) %t8 = load %S.ast.Node, ptr %a2 %t9 = call %S.gen.Val @finch.gen.coerce(ptr %t3, %S.gen.Val %t6, %S.ast.Type %t7, %S.ast.Node %t8, { ptr, i64, i64 } { ptr @.str.3245, i64 11, i64 0 }) store %S.gen.Val %t6, ptr %a10 call void @finch.drop.S_gen_Val(ptr %a10) store %S.ast.Type %t7, ptr %a11 call void @finch.drop.S_ast_Type(ptr %a11) %t12 = extractvalue %S.gen.Val %t9, 0 store { ptr, i64, i64 } %t12, ptr %a13 call void @finch_str_copy(ptr %a14, ptr %a13) %t15 = load { ptr, i64, i64 }, ptr %a14 store %S.gen.Val %t9, ptr %a16 call void @finch.drop.S_gen_Val(ptr %a16) ret { ptr, i64, i64 } %t15 } define internal void @finch.gen.ifStmt(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca i1, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t5 = load { ptr, i64, i64 }, ptr %t4 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 0, %t6 br i1 %t7, label %range5194, label %inrange5195 range5194: call void @finch_panic_index(ptr @.str.3246, i64 2431, i64 0, i64 %t6) unreachable inrange5195: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds %S.ast.Node, ptr %t8, i64 0 %t10 = load %S.ast.Node, ptr %t9 %t11 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t3, %S.ast.Node %t10) store { ptr, i64, i64 } %t11, ptr %a12 %t13 = load ptr, ptr %a1 %t14 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t13, { ptr, i64, i64 } { ptr @.str.3247, i64 4, i64 0 }) store { ptr, i64, i64 } %t14, ptr %a15 %t16 = load ptr, ptr %a1 %t17 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t16, { ptr, i64, i64 } { ptr @.str.3248, i64 4, i64 0 }) store { ptr, i64, i64 } %t17, ptr %a18 %t19 = load ptr, ptr %a1 %t20 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t19, { ptr, i64, i64 } { ptr @.str.3249, i64 5, i64 0 }) store { ptr, i64, i64 } %t20, ptr %a21 %t22 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = icmp sgt i64 %t24, 2 br i1 %t25, label %then5196, label %else5197 then5196: %t26 = load ptr, ptr %a1 %t27 = load { ptr, i64, i64 }, ptr %a12 %t28 = load { ptr, i64, i64 }, ptr %a15 %t29 = load { ptr, i64, i64 }, ptr %a18 call void @finch.gen.condBr(ptr %t26, { ptr, i64, i64 } %t27, { ptr, i64, i64 } %t28, { ptr, i64, i64 } %t29) br label %endif5198 else5197: %t30 = load ptr, ptr %a1 %t31 = load { ptr, i64, i64 }, ptr %a12 %t32 = load { ptr, i64, i64 }, ptr %a15 %t33 = load { ptr, i64, i64 }, ptr %a21 call void @finch.gen.condBr(ptr %t30, { ptr, i64, i64 } %t31, { ptr, i64, i64 } %t32, { ptr, i64, i64 } %t33) br label %endif5198 endif5198: %t34 = load ptr, ptr %a1 %t35 = load { ptr, i64, i64 }, ptr %a15 call void @finch.gen.label(ptr %t34, { ptr, i64, i64 } %t35) %t36 = load ptr, ptr %a1 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp uge i64 1, %t39 br i1 %t40, label %range5199, label %inrange5200 range5199: call void @finch_panic_index(ptr @.str.3250, i64 2441, i64 1, i64 %t39) unreachable inrange5200: %t41 = extractvalue { ptr, i64, i64 } %t38, 0 %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 1 %t43 = load %S.ast.Node, ptr %t42 call void @finch.gen.block(ptr %t36, %S.ast.Node %t43, i1 true) %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null br i1 %t45, label %panic5201, label %ok5202 panic5201: call void @finch_panic(ptr @.str.3251, i64 2442, ptr @.str.3252) unreachable ok5202: %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 9 %t47 = load i1, ptr %t46 %t48 = xor i1 %t47, true store i1 %t48, ptr %a49 %t50 = load ptr, ptr %a1 %t51 = load { ptr, i64, i64 }, ptr %a21 call void @finch.gen.br(ptr %t50, { ptr, i64, i64 } %t51) %t52 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 %t54 = load i64, ptr %t53 %t55 = icmp sgt i64 %t54, 2 br i1 %t55, label %then5203, label %else5204 then5203: %t56 = load ptr, ptr %a1 %t57 = load { ptr, i64, i64 }, ptr %a18 call void @finch.gen.label(ptr %t56, { ptr, i64, i64 } %t57) %t58 = load ptr, ptr %a1 %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t60 = load { ptr, i64, i64 }, ptr %t59 %t61 = extractvalue { ptr, i64, i64 } %t60, 1 %t62 = icmp uge i64 2, %t61 br i1 %t62, label %range5206, label %inrange5207 range5206: call void @finch_panic_index(ptr @.str.3253, i64 2446, i64 2, i64 %t61) unreachable inrange5207: %t63 = extractvalue { ptr, i64, i64 } %t60, 0 %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 2 %t65 = load %S.ast.Node, ptr %t64 call void @finch.gen.stmt(ptr %t58, %S.ast.Node %t65) %t66 = load i1, ptr %a49 br label %logic.from5208 logic.from5208: br i1 %t66, label %logic.end5210, label %logic.rhs5209 logic.rhs5209: %t67 = load ptr, ptr %a1 %t68 = icmp eq ptr %t67, null br i1 %t68, label %panic5211, label %ok5212 panic5211: call void @finch_panic(ptr @.str.3254, i64 2447, ptr @.str.3255) unreachable ok5212: %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 9 %t70 = load i1, ptr %t69 %t71 = xor i1 %t70, true br label %logic.rend5213 logic.rend5213: br label %logic.end5210 logic.end5210: %t72 = phi i1 [ true, %logic.from5208 ], [ %t71, %logic.rend5213 ] store i1 %t72, ptr %a49 %t73 = load ptr, ptr %a1 %t74 = load { ptr, i64, i64 }, ptr %a21 call void @finch.gen.br(ptr %t73, { ptr, i64, i64 } %t74) br label %endif5205 else5204: store i1 true, ptr %a49 br label %endif5205 endif5205: %t75 = load i1, ptr %a49 br i1 %t75, label %then5214, label %endif5216 then5214: %t76 = load ptr, ptr %a1 %t77 = load { ptr, i64, i64 }, ptr %a21 call void @finch.gen.label(ptr %t76, { ptr, i64, i64 } %t77) br label %endif5216 endif5216: call void @finch_str_drop(ptr %a21) call void @finch_str_drop(ptr %a18) call void @finch_str_drop(ptr %a15) call void @finch_str_drop(ptr %a12) ret void } define internal void @finch.gen.whileStmt(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca i1, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca i1, align 16 %a118 = alloca %S.gen.Loop, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t3, { ptr, i64, i64 } { ptr @.str.3256, i64 10, i64 0 }) store { ptr, i64, i64 } %t4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t6, { ptr, i64, i64 } { ptr @.str.3257, i64 10, i64 0 }) store { ptr, i64, i64 } %t7, ptr %a8 %t9 = load ptr, ptr %a1 %t10 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t9, { ptr, i64, i64 } { ptr @.str.3258, i64 9, i64 0 }) store { ptr, i64, i64 } %t10, ptr %a11 %t12 = load ptr, ptr %a1 %t13 = load { ptr, i64, i64 }, ptr %a5 call void @finch.gen.br(ptr %t12, { ptr, i64, i64 } %t13) %t14 = load ptr, ptr %a1 %t15 = load { ptr, i64, i64 }, ptr %a5 call void @finch.gen.label(ptr %t14, { ptr, i64, i64 } %t15) %t16 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t17 = load { ptr, i64, i64 }, ptr %t16 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 0, %t18 br i1 %t19, label %range5217, label %inrange5218 range5217: call void @finch_panic_index(ptr @.str.3259, i64 2463, i64 0, i64 %t18) unreachable inrange5218: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.ast.Node, ptr %t20, i64 0 %t22 = getelementptr inbounds %S.ast.Node, ptr %t21, i32 0, i32 0 %t23 = load { ptr, i64, i64 }, ptr %t22 store { ptr, i64, i64 } %t23, ptr %a24 store { ptr, i64, i64 } { ptr @.str.3260, i64 4, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 br label %logic.from5219 logic.from5219: br i1 %t27, label %logic.rhs5220, label %logic.end5221 logic.rhs5220: %t28 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t29 = load { ptr, i64, i64 }, ptr %t28 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 0, %t30 br i1 %t31, label %range5222, label %inrange5223 range5222: call void @finch_panic_index(ptr @.str.3261, i64 2463, i64 0, i64 %t30) unreachable inrange5223: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds %S.ast.Node, ptr %t32, i64 0 %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i32 0, i32 4 %t35 = load { ptr, i64, i64 }, ptr %t34 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.3262, i64 4, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 br label %logic.rend5224 logic.rend5224: br label %logic.end5221 logic.end5221: %t40 = phi i1 [ false, %logic.from5219 ], [ %t39, %logic.rend5224 ] store i1 %t40, ptr %a41 %t42 = load ptr, ptr %a1 %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t44 = load { ptr, i64, i64 }, ptr %t43 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 0, %t45 br i1 %t46, label %range5225, label %inrange5226 range5225: call void @finch_panic_index(ptr @.str.3263, i64 2464, i64 0, i64 %t45) unreachable inrange5226: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 %t49 = load %S.ast.Node, ptr %t48 %t50 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t42, %S.ast.Node %t49) store { ptr, i64, i64 } %t50, ptr %a51 %t52 = load i1, ptr %a41 br i1 %t52, label %then5227, label %else5228 then5227: %t53 = load ptr, ptr %a1 %t54 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.br(ptr %t53, { ptr, i64, i64 } %t54) br label %endif5229 else5228: %t55 = load ptr, ptr %a1 %t56 = load { ptr, i64, i64 }, ptr %a51 %t57 = load { ptr, i64, i64 }, ptr %a8 %t58 = load { ptr, i64, i64 }, ptr %a11 call void @finch.gen.condBr(ptr %t55, { ptr, i64, i64 } %t56, { ptr, i64, i64 } %t57, { ptr, i64, i64 } %t58) br label %endif5229 endif5229: %t59 = load ptr, ptr %a1 %t60 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.label(ptr %t59, { ptr, i64, i64 } %t60) %t61 = load ptr, ptr %a1 %t62 = icmp eq ptr %t61, null br i1 %t62, label %panic5230, label %ok5231 panic5230: call void @finch_panic(ptr @.str.3264, i64 2471, ptr @.str.3265) unreachable ok5231: %t63 = getelementptr inbounds %S.gen.Gen, ptr %t61, i32 0, i32 12 %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 %t65 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t65, ptr %a66 call void @finch_str_copy(ptr %a67, ptr %a66) %t68 = load { ptr, i64, i64 }, ptr %a67 %t69 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t68, 0 %t70 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t70, ptr %a71 call void @finch_str_copy(ptr %a72, ptr %a71) %t73 = load { ptr, i64, i64 }, ptr %a72 %t74 = insertvalue %S.gen.Loop %t69, { ptr, i64, i64 } %t73, 1 %t75 = load ptr, ptr %a1 %t76 = icmp eq ptr %t75, null br i1 %t76, label %panic5232, label %ok5233 panic5232: call void @finch_panic(ptr @.str.3266, i64 2471, ptr @.str.3267) unreachable ok5233: %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 10 %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1 %t79 = load i64, ptr %t78 %t80 = insertvalue %S.gen.Loop %t74, i64 %t79, 2 %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null br i1 %t82, label %panic5234, label %ok5235 panic5234: call void @finch_panic(ptr @.str.3268, i64 2471, ptr @.str.3269) unreachable ok5235: %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 11 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i32 0, i32 1 %t85 = load i64, ptr %t84 %t86 = insertvalue %S.gen.Loop %t80, i64 %t85, 3 %t87 = load i64, ptr %t64 %t88 = add i64 %t87, 1 call void @finch_arr_reserve(ptr %t63, i64 %t88, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) %t89 = load ptr, ptr %t63 %t90 = getelementptr inbounds %S.gen.Loop, ptr %t89, i64 %t87 store %S.gen.Loop %t86, ptr %t90 store i64 %t88, ptr %t64 %t91 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t92 = load { ptr, i64, i64 }, ptr %t91 %t93 = extractvalue { ptr, i64, i64 } %t92, 1 %t94 = icmp uge i64 1, %t93 br i1 %t94, label %range5236, label %inrange5237 range5236: call void @finch_panic_index(ptr @.str.3270, i64 2472, i64 1, i64 %t93) unreachable inrange5237: %t95 = extractvalue { ptr, i64, i64 } %t92, 0 %t96 = getelementptr inbounds %S.ast.Node, ptr %t95, i64 1 %t97 = load %S.ast.Node, ptr %t96 %t98 = call i1 @finch.gen.countBreaks(%S.ast.Node %t97) store i1 %t98, ptr %a99 %t100 = load ptr, ptr %a1 %t101 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t102 = load { ptr, i64, i64 }, ptr %t101 %t103 = extractvalue { ptr, i64, i64 } %t102, 1 %t104 = icmp uge i64 1, %t103 br i1 %t104, label %range5238, label %inrange5239 range5238: call void @finch_panic_index(ptr @.str.3271, i64 2473, i64 1, i64 %t103) unreachable inrange5239: %t105 = extractvalue { ptr, i64, i64 } %t102, 0 %t106 = getelementptr inbounds %S.ast.Node, ptr %t105, i64 1 %t107 = load %S.ast.Node, ptr %t106 call void @finch.gen.block(ptr %t100, %S.ast.Node %t107, i1 true) %t108 = load ptr, ptr %a1 %t109 = icmp eq ptr %t108, null br i1 %t109, label %panic5240, label %ok5241 panic5240: call void @finch_panic(ptr @.str.3272, i64 2474, ptr @.str.3273) unreachable ok5241: %t110 = getelementptr inbounds %S.gen.Gen, ptr %t108, i32 0, i32 12 %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i32 0, i32 1 %t112 = load i64, ptr %t111 %t113 = icmp eq i64 %t112, 0 br i1 %t113, label %panic5242, label %ok5243 panic5242: call void @finch_panic(ptr @.str.3274, i64 2474, ptr @.str.3275) unreachable ok5243: %t114 = sub i64 %t112, 1 %t115 = load ptr, ptr %t110 %t116 = getelementptr inbounds %S.gen.Loop, ptr %t115, i64 %t114 %t117 = load %S.gen.Loop, ptr %t116 store i64 %t114, ptr %t111 store %S.gen.Loop %t117, ptr %a118 call void @finch.drop.S_gen_Loop(ptr %a118) %t119 = load ptr, ptr %a1 %t120 = load { ptr, i64, i64 }, ptr %a5 call void @finch.gen.br(ptr %t119, { ptr, i64, i64 } %t120) %t121 = load i1, ptr %a41 %t122 = xor i1 %t121, true br label %logic.from5244 logic.from5244: br i1 %t122, label %logic.end5246, label %logic.rhs5245 logic.rhs5245: %t123 = load i1, ptr %a99 br label %logic.rend5247 logic.rend5247: br label %logic.end5246 logic.end5246: %t124 = phi i1 [ true, %logic.from5244 ], [ %t123, %logic.rend5247 ] br i1 %t124, label %then5248, label %endif5250 then5248: %t125 = load ptr, ptr %a1 %t126 = load { ptr, i64, i64 }, ptr %a11 call void @finch.gen.label(ptr %t125, { ptr, i64, i64 } %t126) br label %endif5250 endif5250: call void @finch_str_drop(ptr %a51) call void @finch_str_drop(ptr %a11) call void @finch_str_drop(ptr %a8) call void @finch_str_drop(ptr %a5) ret void } define internal i1 @finch.gen.countBreaks(%S.ast.Node %p0) { entry: %a1 = alloca %S.ast.Node, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca i64, align 16 %a37 = alloca %S.ast.Node, align 16 store %S.ast.Node %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.3276, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then5251, label %endif5253 then5251: ret i1 true endif5253: %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.3277, i64 5, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 br label %logic.from5254 logic.from5254: br i1 %t13, label %logic.end5256, label %logic.rhs5255 logic.rhs5255: %t14 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3278, i64 3, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 br label %logic.rend5257 logic.rend5257: br label %logic.end5256 logic.end5256: %t20 = phi i1 [ true, %logic.from5254 ], [ %t19, %logic.rend5257 ] br label %logic.from5258 logic.from5258: br i1 %t20, label %logic.end5260, label %logic.rhs5259 logic.rhs5259: %t21 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.3279, i64 4, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 br label %logic.rend5261 logic.rend5261: br label %logic.end5260 logic.end5260: %t27 = phi i1 [ true, %logic.from5258 ], [ %t26, %logic.rend5261 ] br i1 %t27, label %then5262, label %endif5264 then5262: ret i1 false endif5264: %t28 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 store i64 0, ptr %a29 br label %each.cond5265 each.cond5265: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = load i64, ptr %a29 %t33 = icmp slt i64 %t32, %t31 br i1 %t33, label %each.body5266, label %each.end5268 each.body5266: %t34 = load ptr, ptr %t28 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 %t32 %t36 = load %S.ast.Node, ptr %t35 store %S.ast.Node %t36, ptr %a37 %t38 = load %S.ast.Node, ptr %a37 %t39 = call i1 @finch.gen.countBreaks(%S.ast.Node %t38) br i1 %t39, label %then5269, label %endif5271 then5269: ret i1 true endif5271: br label %each.step5267 each.step5267: %t40 = load i64, ptr %a29 %t41 = add i64 %t40, 1 store i64 %t41, ptr %a29 br label %each.cond5265 each.end5268: ret i1 false } define internal void @finch.gen.forStmt(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a22 = alloca %S.gen.Val, align 16 %a23 = alloca %S.ast.Type, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca %S.gen.Val, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca %S.gen.Val, align 16 %a50 = alloca %S.ast.Type, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca %S.gen.Val, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca %S.ast.Type, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca %S.gen.Loop, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load ptr, ptr %a1 %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 br i1 %t8, label %range5272, label %inrange5273 range5272: call void @finch_panic_index(ptr @.str.3280, i64 2498, i64 0, i64 %t7) unreachable inrange5273: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 %t12 = call %S.gen.Val @finch.gen.expr(ptr %t4, %S.ast.Node %t11) %t13 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3281, i64 3, i64 0 }) %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t15 = load { ptr, i64, i64 }, ptr %t14 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 0, %t16 br i1 %t17, label %range5274, label %inrange5275 range5274: call void @finch_panic_index(ptr @.str.3282, i64 2498, i64 0, i64 %t16) unreachable inrange5275: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds %S.ast.Node, ptr %t18, i64 0 %t20 = load %S.ast.Node, ptr %t19 %t21 = call %S.gen.Val @finch.gen.coerce(ptr %t3, %S.gen.Val %t12, %S.ast.Type %t13, %S.ast.Node %t20, { ptr, i64, i64 } { ptr @.str.3283, i64 20, i64 0 }) store %S.gen.Val %t12, ptr %a22 call void @finch.drop.S_gen_Val(ptr %a22) store %S.ast.Type %t13, ptr %a23 call void @finch.drop.S_ast_Type(ptr %a23) %t24 = extractvalue %S.gen.Val %t21, 0 store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_copy(ptr %a26, ptr %a25) %t27 = load { ptr, i64, i64 }, ptr %a26 store %S.gen.Val %t21, ptr %a28 call void @finch.drop.S_gen_Val(ptr %a28) store { ptr, i64, i64 } %t27, ptr %a29 %t30 = load ptr, ptr %a1 %t31 = load ptr, ptr %a1 %t32 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t33 = load { ptr, i64, i64 }, ptr %t32 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 1, %t34 br i1 %t35, label %range5276, label %inrange5277 range5276: call void @finch_panic_index(ptr @.str.3284, i64 2499, i64 1, i64 %t34) unreachable inrange5277: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds %S.ast.Node, ptr %t36, i64 1 %t38 = load %S.ast.Node, ptr %t37 %t39 = call %S.gen.Val @finch.gen.expr(ptr %t31, %S.ast.Node %t38) %t40 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3285, i64 3, i64 0 }) %t41 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t42 = load { ptr, i64, i64 }, ptr %t41 %t43 = extractvalue { ptr, i64, i64 } %t42, 1 %t44 = icmp uge i64 1, %t43 br i1 %t44, label %range5278, label %inrange5279 range5278: call void @finch_panic_index(ptr @.str.3286, i64 2499, i64 1, i64 %t43) unreachable inrange5279: %t45 = extractvalue { ptr, i64, i64 } %t42, 0 %t46 = getelementptr inbounds %S.ast.Node, ptr %t45, i64 1 %t47 = load %S.ast.Node, ptr %t46 %t48 = call %S.gen.Val @finch.gen.coerce(ptr %t30, %S.gen.Val %t39, %S.ast.Type %t40, %S.ast.Node %t47, { ptr, i64, i64 } { ptr @.str.3287, i64 18, i64 0 }) store %S.gen.Val %t39, ptr %a49 call void @finch.drop.S_gen_Val(ptr %a49) store %S.ast.Type %t40, ptr %a50 call void @finch.drop.S_ast_Type(ptr %a50) %t51 = extractvalue %S.gen.Val %t48, 0 store { ptr, i64, i64 } %t51, ptr %a52 call void @finch_str_copy(ptr %a53, ptr %a52) %t54 = load { ptr, i64, i64 }, ptr %a53 store %S.gen.Val %t48, ptr %a55 call void @finch.drop.S_gen_Val(ptr %a55) store { ptr, i64, i64 } %t54, ptr %a56 %t57 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t57) %t58 = load ptr, ptr %a1 %t59 = load %S.ast.Node, ptr %a2 %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t61 = load { ptr, i64, i64 }, ptr %t60 %t62 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3288, i64 3, i64 0 }) %t63 = load { ptr, i64, i64 }, ptr %a29 %t64 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t58, %S.ast.Node %t59, { ptr, i64, i64 } %t61, %S.ast.Type %t62, { ptr, i64, i64 } %t63, i1 true, i1 false) store %S.ast.Type %t62, ptr %a65 call void @finch.drop.S_ast_Type(ptr %a65) store { ptr, i64, i64 } %t64, ptr %a66 %t67 = load ptr, ptr %a1 %t68 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t67, { ptr, i64, i64 } { ptr @.str.3289, i64 8, i64 0 }) store { ptr, i64, i64 } %t68, ptr %a69 %t70 = load ptr, ptr %a1 %t71 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t70, { ptr, i64, i64 } { ptr @.str.3290, i64 8, i64 0 }) store { ptr, i64, i64 } %t71, ptr %a72 %t73 = load ptr, ptr %a1 %t74 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t73, { ptr, i64, i64 } { ptr @.str.3291, i64 8, i64 0 }) store { ptr, i64, i64 } %t74, ptr %a75 %t76 = load ptr, ptr %a1 %t77 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t76, { ptr, i64, i64 } { ptr @.str.3292, i64 7, i64 0 }) store { ptr, i64, i64 } %t77, ptr %a78 %t79 = load ptr, ptr %a1 %t80 = load { ptr, i64, i64 }, ptr %a69 call void @finch.gen.br(ptr %t79, { ptr, i64, i64 } %t80) %t81 = load ptr, ptr %a1 %t82 = load { ptr, i64, i64 }, ptr %a69 call void @finch.gen.label(ptr %t81, { ptr, i64, i64 } %t82) %t83 = load ptr, ptr %a1 %t84 = load { ptr, i64, i64 }, ptr %a66 %t85 = call { ptr, i64, i64 } @finch.gen.load(ptr %t83, { ptr, i64, i64 } { ptr @.str.3293, i64 3, i64 0 }, { ptr, i64, i64 } %t84) store { ptr, i64, i64 } %t85, ptr %a86 %t87 = load ptr, ptr %a1 %t88 = load { ptr, i64, i64 }, ptr %a86 store { ptr, i64, i64 } { ptr @.str.3294, i64 13, i64 0 }, ptr %a90 store { ptr, i64, i64 } %t88, ptr %a91 call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) %t92 = load { ptr, i64, i64 }, ptr %a89 store { ptr, i64, i64 } %t92, ptr %a94 store { ptr, i64, i64 } { ptr @.str.3295, i64 2, i64 0 }, ptr %a95 call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) store { ptr, i64, i64 } %t92, ptr %a96 call void @finch_str_drop(ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a93 %t98 = load { ptr, i64, i64 }, ptr %a56 store { ptr, i64, i64 } %t97, ptr %a100 store { ptr, i64, i64 } %t98, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) store { ptr, i64, i64 } %t97, ptr %a102 call void @finch_str_drop(ptr %a102) %t103 = load { ptr, i64, i64 }, ptr %a99 %t104 = call { ptr, i64, i64 } @finch.gen.op(ptr %t87, { ptr, i64, i64 } %t103) store { ptr, i64, i64 } %t103, ptr %a105 call void @finch_str_drop(ptr %a105) store { ptr, i64, i64 } %t104, ptr %a106 %t107 = load ptr, ptr %a1 %t108 = load { ptr, i64, i64 }, ptr %a106 %t109 = load { ptr, i64, i64 }, ptr %a72 %t110 = load { ptr, i64, i64 }, ptr %a78 call void @finch.gen.condBr(ptr %t107, { ptr, i64, i64 } %t108, { ptr, i64, i64 } %t109, { ptr, i64, i64 } %t110) %t111 = load ptr, ptr %a1 %t112 = load { ptr, i64, i64 }, ptr %a72 call void @finch.gen.label(ptr %t111, { ptr, i64, i64 } %t112) %t113 = load ptr, ptr %a1 %t114 = icmp eq ptr %t113, null br i1 %t114, label %panic5280, label %ok5281 panic5280: call void @finch_panic(ptr @.str.3296, i64 2512, ptr @.str.3297) unreachable ok5281: %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 12 %t116 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i32 0, i32 1 %t117 = load { ptr, i64, i64 }, ptr %a75 store { ptr, i64, i64 } %t117, ptr %a118 call void @finch_str_copy(ptr %a119, ptr %a118) %t120 = load { ptr, i64, i64 }, ptr %a119 %t121 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t120, 0 %t122 = load { ptr, i64, i64 }, ptr %a78 store { ptr, i64, i64 } %t122, ptr %a123 call void @finch_str_copy(ptr %a124, ptr %a123) %t125 = load { ptr, i64, i64 }, ptr %a124 %t126 = insertvalue %S.gen.Loop %t121, { ptr, i64, i64 } %t125, 1 %t127 = load ptr, ptr %a1 %t128 = icmp eq ptr %t127, null br i1 %t128, label %panic5282, label %ok5283 panic5282: call void @finch_panic(ptr @.str.3298, i64 2512, ptr @.str.3299) unreachable ok5283: %t129 = getelementptr inbounds %S.gen.Gen, ptr %t127, i32 0, i32 10 %t130 = getelementptr inbounds { ptr, i64, i64 }, ptr %t129, i32 0, i32 1 %t131 = load i64, ptr %t130 %t132 = insertvalue %S.gen.Loop %t126, i64 %t131, 2 %t133 = load ptr, ptr %a1 %t134 = icmp eq ptr %t133, null br i1 %t134, label %panic5284, label %ok5285 panic5284: call void @finch_panic(ptr @.str.3300, i64 2512, ptr @.str.3301) unreachable ok5285: %t135 = getelementptr inbounds %S.gen.Gen, ptr %t133, i32 0, i32 11 %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i32 0, i32 1 %t137 = load i64, ptr %t136 %t138 = insertvalue %S.gen.Loop %t132, i64 %t137, 3 %t139 = load i64, ptr %t116 %t140 = add i64 %t139, 1 call void @finch_arr_reserve(ptr %t115, i64 %t140, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) %t141 = load ptr, ptr %t115 %t142 = getelementptr inbounds %S.gen.Loop, ptr %t141, i64 %t139 store %S.gen.Loop %t138, ptr %t142 store i64 %t140, ptr %t116 %t143 = load ptr, ptr %a1 %t144 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t145 = load { ptr, i64, i64 }, ptr %t144 %t146 = extractvalue { ptr, i64, i64 } %t145, 1 %t147 = icmp uge i64 2, %t146 br i1 %t147, label %range5286, label %inrange5287 range5286: call void @finch_panic_index(ptr @.str.3302, i64 2513, i64 2, i64 %t146) unreachable inrange5287: %t148 = extractvalue { ptr, i64, i64 } %t145, 0 %t149 = getelementptr inbounds %S.ast.Node, ptr %t148, i64 2 %t150 = load %S.ast.Node, ptr %t149 call void @finch.gen.block(ptr %t143, %S.ast.Node %t150, i1 true) %t151 = load ptr, ptr %a1 %t152 = icmp eq ptr %t151, null br i1 %t152, label %panic5288, label %ok5289 panic5288: call void @finch_panic(ptr @.str.3303, i64 2514, ptr @.str.3304) unreachable ok5289: %t153 = getelementptr inbounds %S.gen.Gen, ptr %t151, i32 0, i32 12 %t154 = getelementptr inbounds { ptr, i64, i64 }, ptr %t153, i32 0, i32 1 %t155 = load i64, ptr %t154 %t156 = icmp eq i64 %t155, 0 br i1 %t156, label %panic5290, label %ok5291 panic5290: call void @finch_panic(ptr @.str.3305, i64 2514, ptr @.str.3306) unreachable ok5291: %t157 = sub i64 %t155, 1 %t158 = load ptr, ptr %t153 %t159 = getelementptr inbounds %S.gen.Loop, ptr %t158, i64 %t157 %t160 = load %S.gen.Loop, ptr %t159 store i64 %t157, ptr %t154 store %S.gen.Loop %t160, ptr %a161 call void @finch.drop.S_gen_Loop(ptr %a161) %t162 = load ptr, ptr %a1 %t163 = load { ptr, i64, i64 }, ptr %a75 call void @finch.gen.br(ptr %t162, { ptr, i64, i64 } %t163) %t164 = load ptr, ptr %a1 %t165 = load { ptr, i64, i64 }, ptr %a75 call void @finch.gen.label(ptr %t164, { ptr, i64, i64 } %t165) %t166 = load ptr, ptr %a1 %t167 = load { ptr, i64, i64 }, ptr %a66 %t168 = call { ptr, i64, i64 } @finch.gen.load(ptr %t166, { ptr, i64, i64 } { ptr @.str.3307, i64 3, i64 0 }, { ptr, i64, i64 } %t167) store { ptr, i64, i64 } %t168, ptr %a169 %t170 = load ptr, ptr %a1 %t171 = load ptr, ptr %a1 %t172 = load { ptr, i64, i64 }, ptr %a169 store { ptr, i64, i64 } { ptr @.str.3309, i64 8, i64 0 }, ptr %a174 store { ptr, i64, i64 } %t172, ptr %a175 call void @finch_str_concat(ptr %a173, ptr %a174, ptr %a175) %t176 = load { ptr, i64, i64 }, ptr %a173 store { ptr, i64, i64 } %t176, ptr %a178 store { ptr, i64, i64 } { ptr @.str.3310, i64 3, i64 0 }, ptr %a179 call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) store { ptr, i64, i64 } %t176, ptr %a180 call void @finch_str_drop(ptr %a180) %t181 = load { ptr, i64, i64 }, ptr %a177 %t182 = call { ptr, i64, i64 } @finch.gen.op(ptr %t171, { ptr, i64, i64 } %t181) store { ptr, i64, i64 } %t181, ptr %a183 call void @finch_str_drop(ptr %a183) %t184 = load { ptr, i64, i64 }, ptr %a66 call void @finch.gen.store(ptr %t170, { ptr, i64, i64 } { ptr @.str.3308, i64 3, i64 0 }, { ptr, i64, i64 } %t182, { ptr, i64, i64 } %t184) store { ptr, i64, i64 } %t182, ptr %a185 call void @finch_str_drop(ptr %a185) %t186 = load ptr, ptr %a1 %t187 = load { ptr, i64, i64 }, ptr %a69 call void @finch.gen.br(ptr %t186, { ptr, i64, i64 } %t187) %t188 = load ptr, ptr %a1 %t189 = load { ptr, i64, i64 }, ptr %a78 call void @finch.gen.label(ptr %t188, { ptr, i64, i64 } %t189) %t190 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t190) call void @finch_str_drop(ptr %a169) call void @finch_str_drop(ptr %a106) call void @finch_str_drop(ptr %a86) call void @finch_str_drop(ptr %a78) call void @finch_str_drop(ptr %a75) call void @finch_str_drop(ptr %a72) call void @finch_str_drop(ptr %a69) call void @finch_str_drop(ptr %a66) call void @finch_str_drop(ptr %a56) call void @finch_str_drop(ptr %a29) ret void } define internal void @finch.gen.eachMap(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, i1 %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a5 = alloca i1, align 16 %a13 = alloca %S.ast.Type, align 16 %a14 = alloca %S.ast.Type, align 16 %a16 = alloca %S.ast.Type, align 16 %a24 = alloca %S.ast.Type, align 16 %a25 = alloca %S.ast.Type, align 16 %a27 = alloca %S.ast.Type, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca i1, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a308 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a369 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a384 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a401 = alloca { ptr, i64, i64 }, align 16 %a421 = alloca %S.gen.Loop, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a434 = alloca { ptr, i64, i64 }, align 16 %a435 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 %a438 = alloca { ptr, i64, i64 }, align 16 %a439 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca { ptr, i64, i64 }, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a445 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 store i1 %p4, ptr %a5 %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %t6 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 0, %t8 br i1 %t9, label %range5292, label %inrange5293 range5292: call void @finch_panic_index(ptr @.str.3311, i64 2526, i64 0, i64 %t8) unreachable inrange5293: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 %t12 = load %S.ast.Type, ptr %t11 store %S.ast.Type %t12, ptr %a13 call void @finch.copy.S_ast_Type(ptr %a14, ptr %a13) %t15 = load %S.ast.Type, ptr %a14 store %S.ast.Type %t15, ptr %a16 %t17 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t18 = load { ptr, i64, i64 }, ptr %t17 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 1, %t19 br i1 %t20, label %range5294, label %inrange5295 range5294: call void @finch_panic_index(ptr @.str.3312, i64 2527, i64 1, i64 %t19) unreachable inrange5295: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.ast.Type, ptr %t21, i64 1 %t23 = load %S.ast.Type, ptr %t22 store %S.ast.Type %t23, ptr %a24 call void @finch.copy.S_ast_Type(ptr %a25, ptr %a24) %t26 = load %S.ast.Type, ptr %a25 store %S.ast.Type %t26, ptr %a27 %t28 = load i1, ptr %a5 br label %logic.from5296 logic.from5296: br i1 %t28, label %logic.rhs5297, label %logic.end5298 logic.rhs5297: %t29 = load ptr, ptr %a1 %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t31 = load { ptr, i64, i64 }, ptr %t30 %t32 = extractvalue { ptr, i64, i64 } %t31, 1 %t33 = icmp uge i64 0, %t32 br i1 %t33, label %range5299, label %inrange5300 range5299: call void @finch_panic_index(ptr @.str.3313, i64 2528, i64 0, i64 %t32) unreachable inrange5300: %t34 = extractvalue { ptr, i64, i64 } %t31, 0 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 0 %t36 = load %S.ast.Node, ptr %t35 %t37 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t36) %t38 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t39 = load { ptr, i64, i64 }, ptr %t38 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 1, %t40 br i1 %t41, label %range5301, label %inrange5302 range5301: call void @finch_panic_index(ptr @.str.3314, i64 2528, i64 1, i64 %t40) unreachable inrange5302: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 1 %t44 = load %S.ast.Node, ptr %t43 %t45 = call i1 @finch.gen.mutates(ptr %t29, { ptr, i64, i64 } %t37, %S.ast.Node %t44) store { ptr, i64, i64 } %t37, ptr %a46 call void @finch_str_drop(ptr %a46) br label %logic.rend5303 logic.rend5303: br label %logic.end5298 logic.end5298: %t47 = phi i1 [ false, %logic.from5296 ], [ %t45, %logic.rend5303 ] store i1 %t47, ptr %a48 %t49 = load ptr, ptr %a1 %t50 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t49, { ptr, i64, i64 } { ptr @.str.3315, i64 3, i64 0 }) store { ptr, i64, i64 } %t50, ptr %a51 %t52 = load ptr, ptr %a1 %t53 = load { ptr, i64, i64 }, ptr %a51 call void @finch.gen.store(ptr %t52, { ptr, i64, i64 } { ptr @.str.3316, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3317, i64 1, i64 0 }, { ptr, i64, i64 } %t53) store { ptr, i64, i64 } { ptr @.str.3318, i64 0, i64 0 }, ptr %a54 %t55 = load i1, ptr %a5 br i1 %t55, label %then5304, label %endif5306 then5304: %t56 = load ptr, ptr %a1 %t57 = load ptr, ptr %a1 %t58 = load ptr, ptr %a1 %t59 = load %S.ast.Type, ptr %a4 %t60 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t58, %S.ast.Type %t59) store { ptr, i64, i64 } { ptr @.str.3320, i64 23, i64 0 }, ptr %a62 store { ptr, i64, i64 } %t60, ptr %a63 call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) store { ptr, i64, i64 } %t60, ptr %a64 call void @finch_str_drop(ptr %a64) %t65 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } %t65, ptr %a67 store { ptr, i64, i64 } { ptr @.str.3321, i64 6, i64 0 }, ptr %a68 call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) store { ptr, i64, i64 } %t65, ptr %a69 call void @finch_str_drop(ptr %a69) %t70 = load { ptr, i64, i64 }, ptr %a66 %t71 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t70, ptr %a73 store { ptr, i64, i64 } %t71, ptr %a74 call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) store { ptr, i64, i64 } %t70, ptr %a75 call void @finch_str_drop(ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a72 store { ptr, i64, i64 } %t76, ptr %a78 store { ptr, i64, i64 } { ptr @.str.3322, i64 14, i64 0 }, ptr %a79 call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) store { ptr, i64, i64 } %t76, ptr %a80 call void @finch_str_drop(ptr %a80) %t81 = load { ptr, i64, i64 }, ptr %a77 %t82 = call { ptr, i64, i64 } @finch.gen.op(ptr %t57, { ptr, i64, i64 } %t81) store { ptr, i64, i64 } %t81, ptr %a83 call void @finch_str_drop(ptr %a83) %t84 = call { ptr, i64, i64 } @finch.gen.load(ptr %t56, { ptr, i64, i64 } { ptr @.str.3319, i64 3, i64 0 }, { ptr, i64, i64 } %t82) store { ptr, i64, i64 } %t82, ptr %a85 call void @finch_str_drop(ptr %a85) %t86 = load { ptr, i64, i64 }, ptr %a54 store { ptr, i64, i64 } %t84, ptr %a54 store { ptr, i64, i64 } %t86, ptr %a87 call void @finch_str_drop(ptr %a87) br label %endif5306 endif5306: %t88 = load ptr, ptr %a1 %t89 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t88, { ptr, i64, i64 } { ptr @.str.3323, i64 8, i64 0 }) store { ptr, i64, i64 } %t89, ptr %a90 %t91 = load ptr, ptr %a1 %t92 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t91, { ptr, i64, i64 } { ptr @.str.3324, i64 9, i64 0 }) store { ptr, i64, i64 } %t92, ptr %a93 %t94 = load ptr, ptr %a1 %t95 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t94, { ptr, i64, i64 } { ptr @.str.3325, i64 8, i64 0 }) store { ptr, i64, i64 } %t95, ptr %a96 %t97 = load ptr, ptr %a1 %t98 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t97, { ptr, i64, i64 } { ptr @.str.3326, i64 8, i64 0 }) store { ptr, i64, i64 } %t98, ptr %a99 %t100 = load ptr, ptr %a1 %t101 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t100, { ptr, i64, i64 } { ptr @.str.3327, i64 7, i64 0 }) store { ptr, i64, i64 } %t101, ptr %a102 %t103 = load ptr, ptr %a1 %t104 = load { ptr, i64, i64 }, ptr %a90 call void @finch.gen.br(ptr %t103, { ptr, i64, i64 } %t104) %t105 = load ptr, ptr %a1 %t106 = load { ptr, i64, i64 }, ptr %a90 call void @finch.gen.label(ptr %t105, { ptr, i64, i64 } %t106) %t107 = load i1, ptr %a5 br label %logic.from5307 logic.from5307: br i1 %t107, label %logic.rhs5308, label %logic.end5309 logic.rhs5308: %t108 = load i1, ptr %a48 br label %logic.rend5310 logic.rend5310: br label %logic.end5309 logic.end5309: %t109 = phi i1 [ false, %logic.from5307 ], [ %t108, %logic.rend5310 ] br i1 %t109, label %then5311, label %endif5313 then5311: %t110 = load ptr, ptr %a1 %t111 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t110, { ptr, i64, i64 } { ptr @.str.3328, i64 11, i64 0 }) store { ptr, i64, i64 } %t111, ptr %a112 %t113 = load ptr, ptr %a1 %t114 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t113, { ptr, i64, i64 } { ptr @.str.3329, i64 8, i64 0 }) store { ptr, i64, i64 } %t114, ptr %a115 %t116 = load ptr, ptr %a1 %t117 = load ptr, ptr %a1 %t118 = load ptr, ptr %a1 %t119 = load %S.ast.Type, ptr %a4 %t120 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t118, %S.ast.Type %t119) store { ptr, i64, i64 } { ptr @.str.3331, i64 23, i64 0 }, ptr %a122 store { ptr, i64, i64 } %t120, ptr %a123 call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) store { ptr, i64, i64 } %t120, ptr %a124 call void @finch_str_drop(ptr %a124) %t125 = load { ptr, i64, i64 }, ptr %a121 store { ptr, i64, i64 } %t125, ptr %a127 store { ptr, i64, i64 } { ptr @.str.3332, i64 6, i64 0 }, ptr %a128 call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) store { ptr, i64, i64 } %t125, ptr %a129 call void @finch_str_drop(ptr %a129) %t130 = load { ptr, i64, i64 }, ptr %a126 %t131 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t130, ptr %a133 store { ptr, i64, i64 } %t131, ptr %a134 call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) store { ptr, i64, i64 } %t130, ptr %a135 call void @finch_str_drop(ptr %a135) %t136 = load { ptr, i64, i64 }, ptr %a132 store { ptr, i64, i64 } %t136, ptr %a138 store { ptr, i64, i64 } { ptr @.str.3333, i64 14, i64 0 }, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) store { ptr, i64, i64 } %t136, ptr %a140 call void @finch_str_drop(ptr %a140) %t141 = load { ptr, i64, i64 }, ptr %a137 %t142 = call { ptr, i64, i64 } @finch.gen.op(ptr %t117, { ptr, i64, i64 } %t141) store { ptr, i64, i64 } %t141, ptr %a143 call void @finch_str_drop(ptr %a143) %t144 = call { ptr, i64, i64 } @finch.gen.load(ptr %t116, { ptr, i64, i64 } { ptr @.str.3330, i64 3, i64 0 }, { ptr, i64, i64 } %t142) store { ptr, i64, i64 } %t142, ptr %a145 call void @finch_str_drop(ptr %a145) store { ptr, i64, i64 } %t144, ptr %a146 %t147 = load ptr, ptr %a1 %t148 = load ptr, ptr %a1 %t149 = load { ptr, i64, i64 }, ptr %a146 store { ptr, i64, i64 } { ptr @.str.3334, i64 12, i64 0 }, ptr %a151 store { ptr, i64, i64 } %t149, ptr %a152 call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) %t153 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } %t153, ptr %a155 store { ptr, i64, i64 } { ptr @.str.3335, i64 2, i64 0 }, ptr %a156 call void @finch_str_concat(ptr %a154, ptr %a155, ptr %a156) store { ptr, i64, i64 } %t153, ptr %a157 call void @finch_str_drop(ptr %a157) %t158 = load { ptr, i64, i64 }, ptr %a154 %t159 = load { ptr, i64, i64 }, ptr %a54 store { ptr, i64, i64 } %t158, ptr %a161 store { ptr, i64, i64 } %t159, ptr %a162 call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) store { ptr, i64, i64 } %t158, ptr %a163 call void @finch_str_drop(ptr %a163) %t164 = load { ptr, i64, i64 }, ptr %a160 %t165 = call { ptr, i64, i64 } @finch.gen.op(ptr %t148, { ptr, i64, i64 } %t164) store { ptr, i64, i64 } %t164, ptr %a166 call void @finch_str_drop(ptr %a166) %t167 = load { ptr, i64, i64 }, ptr %a112 %t168 = load { ptr, i64, i64 }, ptr %a115 call void @finch.gen.condBr(ptr %t147, { ptr, i64, i64 } %t165, { ptr, i64, i64 } %t167, { ptr, i64, i64 } %t168) store { ptr, i64, i64 } %t165, ptr %a169 call void @finch_str_drop(ptr %a169) %t170 = load ptr, ptr %a1 %t171 = load { ptr, i64, i64 }, ptr %a112 call void @finch.gen.label(ptr %t170, { ptr, i64, i64 } %t171) %t172 = load ptr, ptr %a1 %t173 = load ptr, ptr %a1 %t174 = load ptr, ptr %a1 %t175 = icmp eq ptr %t174, null br i1 %t175, label %panic5314, label %ok5315 panic5314: call void @finch_panic(ptr @.str.3337, i64 2549, ptr @.str.3338) unreachable ok5315: %t176 = getelementptr inbounds %S.gen.Gen, ptr %t174, i32 0, i32 1 %t177 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t178 = load i64, ptr %t177 %t179 = load { ptr, i64, i64 }, ptr %t176 %t180 = extractvalue { ptr, i64, i64 } %t179, 1 %t181 = icmp uge i64 %t178, %t180 br i1 %t181, label %range5316, label %inrange5317 range5316: call void @finch_panic_index(ptr @.str.3339, i64 2549, i64 %t178, i64 %t180) unreachable inrange5317: %t182 = extractvalue { ptr, i64, i64 } %t179, 0 %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i64 %t178 %t184 = load { ptr, i64, i64 }, ptr %t183 %t185 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t173, { ptr, i64, i64 } %t184) store { ptr, i64, i64 } { ptr @.str.3336, i64 33, i64 0 }, ptr %a187 store { ptr, i64, i64 } %t185, ptr %a188 call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) store { ptr, i64, i64 } %t185, ptr %a189 call void @finch_str_drop(ptr %a189) %t190 = load { ptr, i64, i64 }, ptr %a186 store { ptr, i64, i64 } %t190, ptr %a192 store { ptr, i64, i64 } { ptr @.str.3340, i64 6, i64 0 }, ptr %a193 call void @finch_str_concat(ptr %a191, ptr %a192, ptr %a193) store { ptr, i64, i64 } %t190, ptr %a194 call void @finch_str_drop(ptr %a194) %t195 = load { ptr, i64, i64 }, ptr %a191 %t196 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t197 = load i64, ptr %t196 call void @finch_str_from_int(ptr %a198, i64 %t197) %t199 = load { ptr, i64, i64 }, ptr %a198 store { ptr, i64, i64 } %t195, ptr %a201 store { ptr, i64, i64 } %t199, ptr %a202 call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) store { ptr, i64, i64 } %t195, ptr %a203 call void @finch_str_drop(ptr %a203) store { ptr, i64, i64 } %t199, ptr %a204 call void @finch_str_drop(ptr %a204) %t205 = load { ptr, i64, i64 }, ptr %a200 store { ptr, i64, i64 } %t205, ptr %a207 store { ptr, i64, i64 } { ptr @.str.3341, i64 1, i64 0 }, ptr %a208 call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) store { ptr, i64, i64 } %t205, ptr %a209 call void @finch_str_drop(ptr %a209) %t210 = load { ptr, i64, i64 }, ptr %a206 call void @finch.gen.emit(ptr %t172, { ptr, i64, i64 } %t210) store { ptr, i64, i64 } %t210, ptr %a211 call void @finch_str_drop(ptr %a211) %t212 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t212, { ptr, i64, i64 } { ptr @.str.3342, i64 11, i64 0 }) %t213 = load ptr, ptr %a1 %t214 = icmp eq ptr %t213, null br i1 %t214, label %panic5318, label %ok5319 panic5318: call void @finch_panic(ptr @.str.3343, i64 2551, ptr @.str.3344) unreachable ok5319: %t215 = getelementptr inbounds %S.gen.Gen, ptr %t213, i32 0, i32 9 store i1 true, ptr %t215 %t216 = load ptr, ptr %a1 %t217 = load { ptr, i64, i64 }, ptr %a115 call void @finch.gen.label(ptr %t216, { ptr, i64, i64 } %t217) call void @finch_str_drop(ptr %a146) call void @finch_str_drop(ptr %a115) call void @finch_str_drop(ptr %a112) br label %endif5313 endif5313: %t218 = load ptr, ptr %a1 %t219 = load { ptr, i64, i64 }, ptr %a51 %t220 = call { ptr, i64, i64 } @finch.gen.load(ptr %t218, { ptr, i64, i64 } { ptr @.str.3345, i64 3, i64 0 }, { ptr, i64, i64 } %t219) store { ptr, i64, i64 } %t220, ptr %a221 %t222 = load ptr, ptr %a1 %t223 = load ptr, ptr %a1 %t224 = load ptr, ptr %a1 %t225 = load %S.ast.Type, ptr %a4 %t226 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t224, %S.ast.Type %t225) store { ptr, i64, i64 } { ptr @.str.3347, i64 23, i64 0 }, ptr %a228 store { ptr, i64, i64 } %t226, ptr %a229 call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229) store { ptr, i64, i64 } %t226, ptr %a230 call void @finch_str_drop(ptr %a230) %t231 = load { ptr, i64, i64 }, ptr %a227 store { ptr, i64, i64 } %t231, ptr %a233 store { ptr, i64, i64 } { ptr @.str.3348, i64 6, i64 0 }, ptr %a234 call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) store { ptr, i64, i64 } %t231, ptr %a235 call void @finch_str_drop(ptr %a235) %t236 = load { ptr, i64, i64 }, ptr %a232 %t237 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t236, ptr %a239 store { ptr, i64, i64 } %t237, ptr %a240 call void @finch_str_concat(ptr %a238, ptr %a239, ptr %a240) store { ptr, i64, i64 } %t236, ptr %a241 call void @finch_str_drop(ptr %a241) %t242 = load { ptr, i64, i64 }, ptr %a238 store { ptr, i64, i64 } %t242, ptr %a244 store { ptr, i64, i64 } { ptr @.str.3349, i64 14, i64 0 }, ptr %a245 call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245) store { ptr, i64, i64 } %t242, ptr %a246 call void @finch_str_drop(ptr %a246) %t247 = load { ptr, i64, i64 }, ptr %a243 %t248 = call { ptr, i64, i64 } @finch.gen.op(ptr %t223, { ptr, i64, i64 } %t247) store { ptr, i64, i64 } %t247, ptr %a249 call void @finch_str_drop(ptr %a249) %t250 = call { ptr, i64, i64 } @finch.gen.load(ptr %t222, { ptr, i64, i64 } { ptr @.str.3346, i64 3, i64 0 }, { ptr, i64, i64 } %t248) store { ptr, i64, i64 } %t248, ptr %a251 call void @finch_str_drop(ptr %a251) store { ptr, i64, i64 } %t250, ptr %a252 %t253 = load ptr, ptr %a1 %t254 = load ptr, ptr %a1 %t255 = load { ptr, i64, i64 }, ptr %a221 store { ptr, i64, i64 } { ptr @.str.3350, i64 13, i64 0 }, ptr %a257 store { ptr, i64, i64 } %t255, ptr %a258 call void @finch_str_concat(ptr %a256, ptr %a257, ptr %a258) %t259 = load { ptr, i64, i64 }, ptr %a256 store { ptr, i64, i64 } %t259, ptr %a261 store { ptr, i64, i64 } { ptr @.str.3351, i64 2, i64 0 }, ptr %a262 call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) store { ptr, i64, i64 } %t259, ptr %a263 call void @finch_str_drop(ptr %a263) %t264 = load { ptr, i64, i64 }, ptr %a260 %t265 = load { ptr, i64, i64 }, ptr %a252 store { ptr, i64, i64 } %t264, ptr %a267 store { ptr, i64, i64 } %t265, ptr %a268 call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) store { ptr, i64, i64 } %t264, ptr %a269 call void @finch_str_drop(ptr %a269) %t270 = load { ptr, i64, i64 }, ptr %a266 %t271 = call { ptr, i64, i64 } @finch.gen.op(ptr %t254, { ptr, i64, i64 } %t270) store { ptr, i64, i64 } %t270, ptr %a272 call void @finch_str_drop(ptr %a272) %t273 = load { ptr, i64, i64 }, ptr %a93 %t274 = load { ptr, i64, i64 }, ptr %a102 call void @finch.gen.condBr(ptr %t253, { ptr, i64, i64 } %t271, { ptr, i64, i64 } %t273, { ptr, i64, i64 } %t274) store { ptr, i64, i64 } %t271, ptr %a275 call void @finch_str_drop(ptr %a275) %t276 = load ptr, ptr %a1 %t277 = load { ptr, i64, i64 }, ptr %a93 call void @finch.gen.label(ptr %t276, { ptr, i64, i64 } %t277) %t278 = load ptr, ptr %a1 %t279 = load { ptr, i64, i64 }, ptr %a3 %t280 = load %S.ast.Type, ptr %a4 %t281 = load { ptr, i64, i64 }, ptr %a221 %t282 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t278, { ptr, i64, i64 } %t279, %S.ast.Type %t280, { ptr, i64, i64 } %t281) store { ptr, i64, i64 } %t282, ptr %a283 %t284 = load ptr, ptr %a1 %t285 = load ptr, ptr %a1 %t286 = load { ptr, i64, i64 }, ptr %a283 %t287 = load %S.ast.Type, ptr %a4 %t288 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t285, { ptr, i64, i64 } %t286, %S.ast.Type %t287, i64 0) %t289 = call { ptr, i64, i64 } @finch.gen.load(ptr %t284, { ptr, i64, i64 } { ptr @.str.3352, i64 3, i64 0 }, { ptr, i64, i64 } %t288) store { ptr, i64, i64 } %t288, ptr %a290 call void @finch_str_drop(ptr %a290) store { ptr, i64, i64 } %t289, ptr %a291 %t292 = load ptr, ptr %a1 %t293 = load ptr, ptr %a1 %t294 = load { ptr, i64, i64 }, ptr %a291 store { ptr, i64, i64 } { ptr @.str.3353, i64 12, i64 0 }, ptr %a296 store { ptr, i64, i64 } %t294, ptr %a297 call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297) %t298 = load { ptr, i64, i64 }, ptr %a295 store { ptr, i64, i64 } %t298, ptr %a300 store { ptr, i64, i64 } { ptr @.str.3354, i64 3, i64 0 }, ptr %a301 call void @finch_str_concat(ptr %a299, ptr %a300, ptr %a301) store { ptr, i64, i64 } %t298, ptr %a302 call void @finch_str_drop(ptr %a302) %t303 = load { ptr, i64, i64 }, ptr %a299 %t304 = call { ptr, i64, i64 } @finch.gen.op(ptr %t293, { ptr, i64, i64 } %t303) store { ptr, i64, i64 } %t303, ptr %a305 call void @finch_str_drop(ptr %a305) %t306 = load { ptr, i64, i64 }, ptr %a99 %t307 = load { ptr, i64, i64 }, ptr %a96 call void @finch.gen.condBr(ptr %t292, { ptr, i64, i64 } %t304, { ptr, i64, i64 } %t306, { ptr, i64, i64 } %t307) store { ptr, i64, i64 } %t304, ptr %a308 call void @finch_str_drop(ptr %a308) %t309 = load ptr, ptr %a1 %t310 = load { ptr, i64, i64 }, ptr %a96 call void @finch.gen.label(ptr %t309, { ptr, i64, i64 } %t310) %t311 = load ptr, ptr %a1 %t312 = icmp eq ptr %t311, null br i1 %t312, label %panic5320, label %ok5321 panic5320: call void @finch_panic(ptr @.str.3355, i64 2562, ptr @.str.3356) unreachable ok5321: %t313 = getelementptr inbounds %S.gen.Gen, ptr %t311, i32 0, i32 12 %t314 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i32 0, i32 1 %t315 = load { ptr, i64, i64 }, ptr %a99 store { ptr, i64, i64 } %t315, ptr %a316 call void @finch_str_copy(ptr %a317, ptr %a316) %t318 = load { ptr, i64, i64 }, ptr %a317 %t319 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t318, 0 %t320 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t320, ptr %a321 call void @finch_str_copy(ptr %a322, ptr %a321) %t323 = load { ptr, i64, i64 }, ptr %a322 %t324 = insertvalue %S.gen.Loop %t319, { ptr, i64, i64 } %t323, 1 %t325 = load ptr, ptr %a1 %t326 = icmp eq ptr %t325, null br i1 %t326, label %panic5322, label %ok5323 panic5322: call void @finch_panic(ptr @.str.3357, i64 2562, ptr @.str.3358) unreachable ok5323: %t327 = getelementptr inbounds %S.gen.Gen, ptr %t325, i32 0, i32 10 %t328 = getelementptr inbounds { ptr, i64, i64 }, ptr %t327, i32 0, i32 1 %t329 = load i64, ptr %t328 %t330 = insertvalue %S.gen.Loop %t324, i64 %t329, 2 %t331 = load ptr, ptr %a1 %t332 = icmp eq ptr %t331, null br i1 %t332, label %panic5324, label %ok5325 panic5324: call void @finch_panic(ptr @.str.3359, i64 2562, ptr @.str.3360) unreachable ok5325: %t333 = getelementptr inbounds %S.gen.Gen, ptr %t331, i32 0, i32 11 %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t333, i32 0, i32 1 %t335 = load i64, ptr %t334 %t336 = insertvalue %S.gen.Loop %t330, i64 %t335, 3 %t337 = load i64, ptr %t314 %t338 = add i64 %t337, 1 call void @finch_arr_reserve(ptr %t313, i64 %t338, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) %t339 = load ptr, ptr %t313 %t340 = getelementptr inbounds %S.gen.Loop, ptr %t339, i64 %t337 store %S.gen.Loop %t336, ptr %t340 store i64 %t338, ptr %t314 %t341 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t341) %t342 = load ptr, ptr %a1 %t343 = load ptr, ptr %a1 %t344 = load %S.ast.Type, ptr %a16 %t345 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t343, %S.ast.Type %t344) %t346 = load ptr, ptr %a1 %t347 = load { ptr, i64, i64 }, ptr %a283 %t348 = load %S.ast.Type, ptr %a4 %t349 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t346, { ptr, i64, i64 } %t347, %S.ast.Type %t348, i64 1) %t350 = call { ptr, i64, i64 } @finch.gen.load(ptr %t342, { ptr, i64, i64 } %t345, { ptr, i64, i64 } %t349) store { ptr, i64, i64 } %t345, ptr %a351 call void @finch_str_drop(ptr %a351) store { ptr, i64, i64 } %t349, ptr %a352 call void @finch_str_drop(ptr %a352) store { ptr, i64, i64 } %t350, ptr %a353 %t354 = load i1, ptr %a48 br i1 %t354, label %then5326, label %endif5328 then5326: %t355 = load ptr, ptr %a1 %t356 = load { ptr, i64, i64 }, ptr %a353 %t357 = load %S.ast.Type, ptr %a16 %t358 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t355, { ptr, i64, i64 } %t356, %S.ast.Type %t357) %t359 = load { ptr, i64, i64 }, ptr %a353 store { ptr, i64, i64 } %t358, ptr %a353 store { ptr, i64, i64 } %t359, ptr %a360 call void @finch_str_drop(ptr %a360) br label %endif5328 endif5328: %t361 = load ptr, ptr %a1 %t362 = load %S.ast.Node, ptr %a2 %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t364 = load { ptr, i64, i64 }, ptr %t363 %t365 = load %S.ast.Type, ptr %a16 %t366 = load { ptr, i64, i64 }, ptr %a353 %t367 = load i1, ptr %a48 %t368 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t361, %S.ast.Node %t362, { ptr, i64, i64 } %t364, %S.ast.Type %t365, { ptr, i64, i64 } %t366, i1 true, i1 %t367) store { ptr, i64, i64 } %t368, ptr %a369 call void @finch_str_drop(ptr %a369) %t370 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t371 = getelementptr inbounds { ptr, i64, i64 }, ptr %t370, i32 0, i32 1 %t372 = load i64, ptr %t371 %t373 = icmp sgt i64 %t372, 0 br i1 %t373, label %then5329, label %endif5331 then5329: %t374 = load ptr, ptr %a1 %t375 = load ptr, ptr %a1 %t376 = load %S.ast.Type, ptr %a27 %t377 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t375, %S.ast.Type %t376) %t378 = load ptr, ptr %a1 %t379 = load { ptr, i64, i64 }, ptr %a283 %t380 = load %S.ast.Type, ptr %a4 %t381 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t378, { ptr, i64, i64 } %t379, %S.ast.Type %t380, i64 2) %t382 = call { ptr, i64, i64 } @finch.gen.load(ptr %t374, { ptr, i64, i64 } %t377, { ptr, i64, i64 } %t381) store { ptr, i64, i64 } %t377, ptr %a383 call void @finch_str_drop(ptr %a383) store { ptr, i64, i64 } %t381, ptr %a384 call void @finch_str_drop(ptr %a384) store { ptr, i64, i64 } %t382, ptr %a385 %t386 = load i1, ptr %a48 br i1 %t386, label %then5332, label %endif5334 then5332: %t387 = load ptr, ptr %a1 %t388 = load { ptr, i64, i64 }, ptr %a385 %t389 = load %S.ast.Type, ptr %a27 %t390 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t387, { ptr, i64, i64 } %t388, %S.ast.Type %t389) %t391 = load { ptr, i64, i64 }, ptr %a385 store { ptr, i64, i64 } %t390, ptr %a385 store { ptr, i64, i64 } %t391, ptr %a392 call void @finch_str_drop(ptr %a392) br label %endif5334 endif5334: %t393 = load ptr, ptr %a1 %t394 = load %S.ast.Node, ptr %a2 %t395 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t396 = load { ptr, i64, i64 }, ptr %t395 %t397 = load %S.ast.Type, ptr %a27 %t398 = load { ptr, i64, i64 }, ptr %a385 %t399 = load i1, ptr %a48 %t400 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t393, %S.ast.Node %t394, { ptr, i64, i64 } %t396, %S.ast.Type %t397, { ptr, i64, i64 } %t398, i1 true, i1 %t399) store { ptr, i64, i64 } %t400, ptr %a401 call void @finch_str_drop(ptr %a401) call void @finch_str_drop(ptr %a385) br label %endif5331 endif5331: %t402 = load ptr, ptr %a1 %t403 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t404 = load { ptr, i64, i64 }, ptr %t403 %t405 = extractvalue { ptr, i64, i64 } %t404, 1 %t406 = icmp uge i64 1, %t405 br i1 %t406, label %range5335, label %inrange5336 range5335: call void @finch_panic_index(ptr @.str.3361, i64 2576, i64 1, i64 %t405) unreachable inrange5336: %t407 = extractvalue { ptr, i64, i64 } %t404, 0 %t408 = getelementptr inbounds %S.ast.Node, ptr %t407, i64 1 %t409 = load %S.ast.Node, ptr %t408 call void @finch.gen.block(ptr %t402, %S.ast.Node %t409, i1 true) %t410 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t410) %t411 = load ptr, ptr %a1 %t412 = icmp eq ptr %t411, null br i1 %t412, label %panic5337, label %ok5338 panic5337: call void @finch_panic(ptr @.str.3362, i64 2578, ptr @.str.3363) unreachable ok5338: %t413 = getelementptr inbounds %S.gen.Gen, ptr %t411, i32 0, i32 12 %t414 = getelementptr inbounds { ptr, i64, i64 }, ptr %t413, i32 0, i32 1 %t415 = load i64, ptr %t414 %t416 = icmp eq i64 %t415, 0 br i1 %t416, label %panic5339, label %ok5340 panic5339: call void @finch_panic(ptr @.str.3364, i64 2578, ptr @.str.3365) unreachable ok5340: %t417 = sub i64 %t415, 1 %t418 = load ptr, ptr %t413 %t419 = getelementptr inbounds %S.gen.Loop, ptr %t418, i64 %t417 %t420 = load %S.gen.Loop, ptr %t419 store i64 %t417, ptr %t414 store %S.gen.Loop %t420, ptr %a421 call void @finch.drop.S_gen_Loop(ptr %a421) %t422 = load ptr, ptr %a1 %t423 = load { ptr, i64, i64 }, ptr %a99 call void @finch.gen.br(ptr %t422, { ptr, i64, i64 } %t423) %t424 = load ptr, ptr %a1 %t425 = load { ptr, i64, i64 }, ptr %a99 call void @finch.gen.label(ptr %t424, { ptr, i64, i64 } %t425) %t426 = load ptr, ptr %a1 %t427 = load { ptr, i64, i64 }, ptr %a51 %t428 = call { ptr, i64, i64 } @finch.gen.load(ptr %t426, { ptr, i64, i64 } { ptr @.str.3366, i64 3, i64 0 }, { ptr, i64, i64 } %t427) store { ptr, i64, i64 } %t428, ptr %a429 %t430 = load ptr, ptr %a1 %t431 = load ptr, ptr %a1 %t432 = load { ptr, i64, i64 }, ptr %a429 store { ptr, i64, i64 } { ptr @.str.3368, i64 8, i64 0 }, ptr %a434 store { ptr, i64, i64 } %t432, ptr %a435 call void @finch_str_concat(ptr %a433, ptr %a434, ptr %a435) %t436 = load { ptr, i64, i64 }, ptr %a433 store { ptr, i64, i64 } %t436, ptr %a438 store { ptr, i64, i64 } { ptr @.str.3369, i64 3, i64 0 }, ptr %a439 call void @finch_str_concat(ptr %a437, ptr %a438, ptr %a439) store { ptr, i64, i64 } %t436, ptr %a440 call void @finch_str_drop(ptr %a440) %t441 = load { ptr, i64, i64 }, ptr %a437 %t442 = call { ptr, i64, i64 } @finch.gen.op(ptr %t431, { ptr, i64, i64 } %t441) store { ptr, i64, i64 } %t441, ptr %a443 call void @finch_str_drop(ptr %a443) %t444 = load { ptr, i64, i64 }, ptr %a51 call void @finch.gen.store(ptr %t430, { ptr, i64, i64 } { ptr @.str.3367, i64 3, i64 0 }, { ptr, i64, i64 } %t442, { ptr, i64, i64 } %t444) store { ptr, i64, i64 } %t442, ptr %a445 call void @finch_str_drop(ptr %a445) %t446 = load ptr, ptr %a1 %t447 = load { ptr, i64, i64 }, ptr %a90 call void @finch.gen.br(ptr %t446, { ptr, i64, i64 } %t447) %t448 = load ptr, ptr %a1 %t449 = load { ptr, i64, i64 }, ptr %a102 call void @finch.gen.label(ptr %t448, { ptr, i64, i64 } %t449) call void @finch_str_drop(ptr %a429) call void @finch_str_drop(ptr %a353) call void @finch_str_drop(ptr %a291) call void @finch_str_drop(ptr %a283) call void @finch_str_drop(ptr %a252) call void @finch_str_drop(ptr %a221) call void @finch_str_drop(ptr %a102) call void @finch_str_drop(ptr %a99) call void @finch_str_drop(ptr %a96) call void @finch_str_drop(ptr %a93) call void @finch_str_drop(ptr %a90) call void @finch_str_drop(ptr %a54) call void @finch_str_drop(ptr %a51) call void @finch.drop.S_ast_Type(ptr %a27) call void @finch.drop.S_ast_Type(ptr %a16) ret void } define internal void @finch.drop.S_gen_Ref(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.Ref, ptr %a, i32 0, i32 1 call void @finch.drop.S_gen_Place(ptr %t1) %t2 = getelementptr inbounds %S.gen.Ref, ptr %a, i32 0, i32 2 call void @finch.drop.S_gen_Val(ptr %t2) ret void } define internal void @finch.gen.eachStmt(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a13 = alloca %S.gen.Ref, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca %S.ast.Type, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca %S.ast.Type, align 16 %a31 = alloca %S.ast.Type, align 16 %a34 = alloca %S.ast.Type, align 16 %a38 = alloca %S.ast.Type, align 16 %a39 = alloca %S.ast.Type, align 16 %a42 = alloca %S.ast.Type, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca %S.ast.Type, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca %S.ast.Type, align 16 %a129 = alloca %S.ast.Type, align 16 %a132 = alloca %S.ast.Type, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca i1, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca %S.ast.Type, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca %S.gen.Loop, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a377 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a382 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t3) %t4 = load ptr, ptr %a1 %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 br i1 %t8, label %range5341, label %inrange5342 range5341: call void @finch_panic_index(ptr @.str.3370, i64 2589, i64 0, i64 %t7) unreachable inrange5342: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 %t12 = call %S.gen.Ref @finch.gen.ref(ptr %t4, %S.ast.Node %t11, i1 false) store %S.gen.Ref %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.3371, i64 0, i64 0 }, ptr %a14 %t15 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3372, i64 4, i64 0 }) store %S.ast.Type %t15, ptr %a16 %t17 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 %t18 = load i1, ptr %t17 br i1 %t18, label %then5343, label %else5344 then5343: %t19 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 1 %t20 = getelementptr inbounds %S.gen.Place, ptr %t19, i32 0, i32 0 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a22 call void @finch_str_copy(ptr %a23, ptr %a22) %t24 = load { ptr, i64, i64 }, ptr %a23 %t25 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t24, ptr %a14 store { ptr, i64, i64 } %t25, ptr %a26 call void @finch_str_drop(ptr %a26) %t27 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 1 %t28 = getelementptr inbounds %S.gen.Place, ptr %t27, i32 0, i32 1 %t29 = load %S.ast.Type, ptr %t28 store %S.ast.Type %t29, ptr %a30 call void @finch.copy.S_ast_Type(ptr %a31, ptr %a30) %t32 = load %S.ast.Type, ptr %a31 %t33 = load %S.ast.Type, ptr %a16 store %S.ast.Type %t32, ptr %a16 store %S.ast.Type %t33, ptr %a34 call void @finch.drop.S_ast_Type(ptr %a34) br label %endif5345 else5344: %t35 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 2 %t36 = getelementptr inbounds %S.gen.Val, ptr %t35, i32 0, i32 1 %t37 = load %S.ast.Type, ptr %t36 store %S.ast.Type %t37, ptr %a38 call void @finch.copy.S_ast_Type(ptr %a39, ptr %a38) %t40 = load %S.ast.Type, ptr %a39 %t41 = load %S.ast.Type, ptr %a16 store %S.ast.Type %t40, ptr %a16 store %S.ast.Type %t41, ptr %a42 call void @finch.drop.S_ast_Type(ptr %a42) %t43 = load ptr, ptr %a1 %t44 = load %S.ast.Node, ptr %a2 %t45 = load ptr, ptr %a1 %t46 = icmp eq ptr %t45, null br i1 %t46, label %panic5346, label %ok5347 panic5346: call void @finch_panic(ptr @.str.3374, i64 2597, ptr @.str.3375) unreachable ok5347: %t47 = getelementptr inbounds %S.gen.Gen, ptr %t45, i32 0, i32 25 %t48 = load i64, ptr %t47 call void @finch_str_from_int(ptr %a49, i64 %t48) %t50 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } { ptr @.str.3373, i64 5, i64 0 }, ptr %a52 store { ptr, i64, i64 } %t50, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) store { ptr, i64, i64 } %t50, ptr %a54 call void @finch_str_drop(ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a51 %t56 = load %S.ast.Type, ptr %a16 %t57 = load ptr, ptr %a1 %t58 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 2 %t59 = load %S.gen.Val, ptr %t58 %t60 = call { ptr, i64, i64 } @finch.gen.own(ptr %t57, %S.gen.Val %t59) %t61 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t43, %S.ast.Node %t44, { ptr, i64, i64 } %t55, %S.ast.Type %t56, { ptr, i64, i64 } %t60, i1 false, i1 true) store { ptr, i64, i64 } %t55, ptr %a62 call void @finch_str_drop(ptr %a62) store { ptr, i64, i64 } %t60, ptr %a63 call void @finch_str_drop(ptr %a63) %t64 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t61, ptr %a14 store { ptr, i64, i64 } %t64, ptr %a65 call void @finch_str_drop(ptr %a65) br label %endif5345 endif5345: %t66 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 %t67 = load { ptr, i64, i64 }, ptr %t66 store { ptr, i64, i64 } %t67, ptr %a68 store { ptr, i64, i64 } { ptr @.str.3376, i64 3, i64 0 }, ptr %a69 %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) %t71 = icmp ne i32 %t70, 0 br i1 %t71, label %then5348, label %endif5350 then5348: %t72 = load ptr, ptr %a1 %t73 = load %S.ast.Node, ptr %a2 %t74 = load { ptr, i64, i64 }, ptr %a14 %t75 = load %S.ast.Type, ptr %a16 %t76 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 %t77 = load i1, ptr %t76 call void @finch.gen.eachMap(ptr %t72, %S.ast.Node %t73, { ptr, i64, i64 } %t74, %S.ast.Type %t75, i1 %t77) %t78 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t78) call void @finch.drop.S_ast_Type(ptr %a16) call void @finch_str_drop(ptr %a14) call void @finch.drop.S_gen_Ref(ptr %a13) ret void endif5350: %t79 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 %t80 = load { ptr, i64, i64 }, ptr %t79 store { ptr, i64, i64 } %t80, ptr %a81 store { ptr, i64, i64 } { ptr @.str.3377, i64 5, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp eq i32 %t83, 0 br label %logic.from5351 logic.from5351: br i1 %t84, label %logic.rhs5352, label %logic.end5353 logic.rhs5352: %t85 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 %t86 = load { ptr, i64, i64 }, ptr %t85 store { ptr, i64, i64 } %t86, ptr %a87 store { ptr, i64, i64 } { ptr @.str.3378, i64 3, i64 0 }, ptr %a88 %t89 = call i32 @finch_str_eq(ptr %a87, ptr %a88) %t90 = icmp eq i32 %t89, 0 br label %logic.rend5354 logic.rend5354: br label %logic.end5353 logic.end5353: %t91 = phi i1 [ false, %logic.from5351 ], [ %t90, %logic.rend5354 ] br i1 %t91, label %then5355, label %endif5357 then5355: %t92 = load ptr, ptr %a1 %t93 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t94 = load { ptr, i64, i64 }, ptr %t93 %t95 = extractvalue { ptr, i64, i64 } %t94, 1 %t96 = icmp uge i64 0, %t95 br i1 %t96, label %range5358, label %inrange5359 range5358: call void @finch_panic_index(ptr @.str.3379, i64 2605, i64 0, i64 %t95) unreachable inrange5359: %t97 = extractvalue { ptr, i64, i64 } %t94, 0 %t98 = getelementptr inbounds %S.ast.Node, ptr %t97, i64 0 %t99 = load %S.ast.Node, ptr %t98 %t100 = load %S.ast.Type, ptr %a16 %t101 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t100) store { ptr, i64, i64 } { ptr @.str.3380, i64 55, i64 0 }, ptr %a103 store { ptr, i64, i64 } %t101, ptr %a104 call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) store { ptr, i64, i64 } %t101, ptr %a105 call void @finch_str_drop(ptr %a105) %t106 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t106, ptr %a108 store { ptr, i64, i64 } { ptr @.str.3381, i64 36, i64 0 }, ptr %a109 call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) store { ptr, i64, i64 } %t106, ptr %a110 call void @finch_str_drop(ptr %a110) %t111 = load { ptr, i64, i64 }, ptr %a107 call void @finch.gen.fail(ptr %t92, %S.ast.Node %t99, { ptr, i64, i64 } %t111) store { ptr, i64, i64 } %t111, ptr %a112 call void @finch_str_drop(ptr %a112) br label %endif5357 endif5357: %t113 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3382, i64 4, i64 0 }) store %S.ast.Type %t113, ptr %a114 %t115 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 %t116 = load { ptr, i64, i64 }, ptr %t115 store { ptr, i64, i64 } %t116, ptr %a117 store { ptr, i64, i64 } { ptr @.str.3383, i64 5, i64 0 }, ptr %a118 %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) %t120 = icmp ne i32 %t119, 0 br i1 %t120, label %then5360, label %endif5362 then5360: %t121 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 1 %t122 = load { ptr, i64, i64 }, ptr %t121 %t123 = extractvalue { ptr, i64, i64 } %t122, 1 %t124 = icmp uge i64 0, %t123 br i1 %t124, label %range5363, label %inrange5364 range5363: call void @finch_panic_index(ptr @.str.3384, i64 2609, i64 0, i64 %t123) unreachable inrange5364: %t125 = extractvalue { ptr, i64, i64 } %t122, 0 %t126 = getelementptr inbounds %S.ast.Type, ptr %t125, i64 0 %t127 = load %S.ast.Type, ptr %t126 store %S.ast.Type %t127, ptr %a128 call void @finch.copy.S_ast_Type(ptr %a129, ptr %a128) %t130 = load %S.ast.Type, ptr %a129 %t131 = load %S.ast.Type, ptr %a114 store %S.ast.Type %t130, ptr %a114 store %S.ast.Type %t131, ptr %a132 call void @finch.drop.S_ast_Type(ptr %a132) br label %endif5362 endif5362: %t133 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 %t134 = load i1, ptr %t133 br label %logic.from5365 logic.from5365: br i1 %t134, label %logic.rhs5366, label %logic.end5367 logic.rhs5366: %t135 = load ptr, ptr %a1 %t136 = load %S.ast.Type, ptr %a114 %t137 = call i1 @finch.gen.owning(ptr %t135, %S.ast.Type %t136) br label %logic.rend5368 logic.rend5368: br label %logic.end5367 logic.end5367: %t138 = phi i1 [ false, %logic.from5365 ], [ %t137, %logic.rend5368 ] br label %logic.from5369 logic.from5369: br i1 %t138, label %logic.rhs5370, label %logic.end5371 logic.rhs5370: %t139 = load ptr, ptr %a1 %t140 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t141 = load { ptr, i64, i64 }, ptr %t140 %t142 = extractvalue { ptr, i64, i64 } %t141, 1 %t143 = icmp uge i64 0, %t142 br i1 %t143, label %range5372, label %inrange5373 range5372: call void @finch_panic_index(ptr @.str.3385, i64 2611, i64 0, i64 %t142) unreachable inrange5373: %t144 = extractvalue { ptr, i64, i64 } %t141, 0 %t145 = getelementptr inbounds %S.ast.Node, ptr %t144, i64 0 %t146 = load %S.ast.Node, ptr %t145 %t147 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t146) %t148 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t149 = load { ptr, i64, i64 }, ptr %t148 %t150 = extractvalue { ptr, i64, i64 } %t149, 1 %t151 = icmp uge i64 1, %t150 br i1 %t151, label %range5374, label %inrange5375 range5374: call void @finch_panic_index(ptr @.str.3386, i64 2611, i64 1, i64 %t150) unreachable inrange5375: %t152 = extractvalue { ptr, i64, i64 } %t149, 0 %t153 = getelementptr inbounds %S.ast.Node, ptr %t152, i64 1 %t154 = load %S.ast.Node, ptr %t153 %t155 = call i1 @finch.gen.mutates(ptr %t139, { ptr, i64, i64 } %t147, %S.ast.Node %t154) store { ptr, i64, i64 } %t147, ptr %a156 call void @finch_str_drop(ptr %a156) br label %logic.rend5376 logic.rend5376: br label %logic.end5371 logic.end5371: %t157 = phi i1 [ false, %logic.from5369 ], [ %t155, %logic.rend5376 ] store i1 %t157, ptr %a158 %t159 = load ptr, ptr %a1 %t160 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t159, { ptr, i64, i64 } { ptr @.str.3387, i64 3, i64 0 }) store { ptr, i64, i64 } %t160, ptr %a161 %t162 = load ptr, ptr %a1 %t163 = load { ptr, i64, i64 }, ptr %a161 call void @finch.gen.store(ptr %t162, { ptr, i64, i64 } { ptr @.str.3388, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3389, i64 1, i64 0 }, { ptr, i64, i64 } %t163) %t164 = load ptr, ptr %a1 %t165 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t164, { ptr, i64, i64 } { ptr @.str.3390, i64 9, i64 0 }) store { ptr, i64, i64 } %t165, ptr %a166 %t167 = load ptr, ptr %a1 %t168 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t167, { ptr, i64, i64 } { ptr @.str.3391, i64 9, i64 0 }) store { ptr, i64, i64 } %t168, ptr %a169 %t170 = load ptr, ptr %a1 %t171 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t170, { ptr, i64, i64 } { ptr @.str.3392, i64 9, i64 0 }) store { ptr, i64, i64 } %t171, ptr %a172 %t173 = load ptr, ptr %a1 %t174 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t173, { ptr, i64, i64 } { ptr @.str.3393, i64 8, i64 0 }) store { ptr, i64, i64 } %t174, ptr %a175 %t176 = load ptr, ptr %a1 %t177 = load { ptr, i64, i64 }, ptr %a166 call void @finch.gen.br(ptr %t176, { ptr, i64, i64 } %t177) %t178 = load ptr, ptr %a1 %t179 = load { ptr, i64, i64 }, ptr %a166 call void @finch.gen.label(ptr %t178, { ptr, i64, i64 } %t179) %t180 = load ptr, ptr %a1 %t181 = load ptr, ptr %a1 %t182 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } { ptr @.str.3395, i64 46, i64 0 }, ptr %a184 store { ptr, i64, i64 } %t182, ptr %a185 call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) %t186 = load { ptr, i64, i64 }, ptr %a183 store { ptr, i64, i64 } %t186, ptr %a188 store { ptr, i64, i64 } { ptr @.str.3396, i64 14, i64 0 }, ptr %a189 call void @finch_str_concat(ptr %a187, ptr %a188, ptr %a189) store { ptr, i64, i64 } %t186, ptr %a190 call void @finch_str_drop(ptr %a190) %t191 = load { ptr, i64, i64 }, ptr %a187 %t192 = call { ptr, i64, i64 } @finch.gen.op(ptr %t181, { ptr, i64, i64 } %t191) store { ptr, i64, i64 } %t191, ptr %a193 call void @finch_str_drop(ptr %a193) %t194 = call { ptr, i64, i64 } @finch.gen.load(ptr %t180, { ptr, i64, i64 } { ptr @.str.3394, i64 3, i64 0 }, { ptr, i64, i64 } %t192) store { ptr, i64, i64 } %t192, ptr %a195 call void @finch_str_drop(ptr %a195) store { ptr, i64, i64 } %t194, ptr %a196 %t197 = load ptr, ptr %a1 %t198 = load { ptr, i64, i64 }, ptr %a161 %t199 = call { ptr, i64, i64 } @finch.gen.load(ptr %t197, { ptr, i64, i64 } { ptr @.str.3397, i64 3, i64 0 }, { ptr, i64, i64 } %t198) store { ptr, i64, i64 } %t199, ptr %a200 %t201 = load ptr, ptr %a1 %t202 = load { ptr, i64, i64 }, ptr %a200 store { ptr, i64, i64 } { ptr @.str.3398, i64 13, i64 0 }, ptr %a204 store { ptr, i64, i64 } %t202, ptr %a205 call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) %t206 = load { ptr, i64, i64 }, ptr %a203 store { ptr, i64, i64 } %t206, ptr %a208 store { ptr, i64, i64 } { ptr @.str.3399, i64 2, i64 0 }, ptr %a209 call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) store { ptr, i64, i64 } %t206, ptr %a210 call void @finch_str_drop(ptr %a210) %t211 = load { ptr, i64, i64 }, ptr %a207 %t212 = load { ptr, i64, i64 }, ptr %a196 store { ptr, i64, i64 } %t211, ptr %a214 store { ptr, i64, i64 } %t212, ptr %a215 call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) store { ptr, i64, i64 } %t211, ptr %a216 call void @finch_str_drop(ptr %a216) %t217 = load { ptr, i64, i64 }, ptr %a213 %t218 = call { ptr, i64, i64 } @finch.gen.op(ptr %t201, { ptr, i64, i64 } %t217) store { ptr, i64, i64 } %t217, ptr %a219 call void @finch_str_drop(ptr %a219) store { ptr, i64, i64 } %t218, ptr %a220 %t221 = load ptr, ptr %a1 %t222 = load { ptr, i64, i64 }, ptr %a220 %t223 = load { ptr, i64, i64 }, ptr %a169 %t224 = load { ptr, i64, i64 }, ptr %a175 call void @finch.gen.condBr(ptr %t221, { ptr, i64, i64 } %t222, { ptr, i64, i64 } %t223, { ptr, i64, i64 } %t224) %t225 = load ptr, ptr %a1 %t226 = load { ptr, i64, i64 }, ptr %a169 call void @finch.gen.label(ptr %t225, { ptr, i64, i64 } %t226) %t227 = load ptr, ptr %a1 %t228 = load { ptr, i64, i64 }, ptr %a14 %t229 = call { ptr, i64, i64 } @finch.gen.load(ptr %t227, { ptr, i64, i64 } { ptr @.str.3400, i64 3, i64 0 }, { ptr, i64, i64 } %t228) store { ptr, i64, i64 } %t229, ptr %a230 %t231 = load ptr, ptr %a1 %t232 = load ptr, ptr %a1 %t233 = load %S.ast.Type, ptr %a114 %t234 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t232, %S.ast.Type %t233) store { ptr, i64, i64 } { ptr @.str.3401, i64 23, i64 0 }, ptr %a236 store { ptr, i64, i64 } %t234, ptr %a237 call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) store { ptr, i64, i64 } %t234, ptr %a238 call void @finch_str_drop(ptr %a238) %t239 = load { ptr, i64, i64 }, ptr %a235 store { ptr, i64, i64 } %t239, ptr %a241 store { ptr, i64, i64 } { ptr @.str.3402, i64 6, i64 0 }, ptr %a242 call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) store { ptr, i64, i64 } %t239, ptr %a243 call void @finch_str_drop(ptr %a243) %t244 = load { ptr, i64, i64 }, ptr %a240 %t245 = load { ptr, i64, i64 }, ptr %a230 store { ptr, i64, i64 } %t244, ptr %a247 store { ptr, i64, i64 } %t245, ptr %a248 call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) store { ptr, i64, i64 } %t244, ptr %a249 call void @finch_str_drop(ptr %a249) %t250 = load { ptr, i64, i64 }, ptr %a246 store { ptr, i64, i64 } %t250, ptr %a252 store { ptr, i64, i64 } { ptr @.str.3403, i64 6, i64 0 }, ptr %a253 call void @finch_str_concat(ptr %a251, ptr %a252, ptr %a253) store { ptr, i64, i64 } %t250, ptr %a254 call void @finch_str_drop(ptr %a254) %t255 = load { ptr, i64, i64 }, ptr %a251 %t256 = load { ptr, i64, i64 }, ptr %a200 store { ptr, i64, i64 } %t255, ptr %a258 store { ptr, i64, i64 } %t256, ptr %a259 call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) store { ptr, i64, i64 } %t255, ptr %a260 call void @finch_str_drop(ptr %a260) %t261 = load { ptr, i64, i64 }, ptr %a257 %t262 = call { ptr, i64, i64 } @finch.gen.op(ptr %t231, { ptr, i64, i64 } %t261) store { ptr, i64, i64 } %t261, ptr %a263 call void @finch_str_drop(ptr %a263) store { ptr, i64, i64 } %t262, ptr %a264 %t265 = load ptr, ptr %a1 %t266 = load ptr, ptr %a1 %t267 = load %S.ast.Type, ptr %a114 %t268 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t266, %S.ast.Type %t267) %t269 = load { ptr, i64, i64 }, ptr %a264 %t270 = call { ptr, i64, i64 } @finch.gen.load(ptr %t265, { ptr, i64, i64 } %t268, { ptr, i64, i64 } %t269) store { ptr, i64, i64 } %t268, ptr %a271 call void @finch_str_drop(ptr %a271) store { ptr, i64, i64 } %t270, ptr %a272 %t273 = load i1, ptr %a158 br i1 %t273, label %then5377, label %endif5379 then5377: %t274 = load ptr, ptr %a1 %t275 = load { ptr, i64, i64 }, ptr %a272 %t276 = load %S.ast.Type, ptr %a114 %t277 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t274, { ptr, i64, i64 } %t275, %S.ast.Type %t276) %t278 = load { ptr, i64, i64 }, ptr %a272 store { ptr, i64, i64 } %t277, ptr %a272 store { ptr, i64, i64 } %t278, ptr %a279 call void @finch_str_drop(ptr %a279) br label %endif5379 endif5379: %t280 = load ptr, ptr %a1 %t281 = icmp eq ptr %t280, null br i1 %t281, label %panic5380, label %ok5381 panic5380: call void @finch_panic(ptr @.str.3404, i64 2631, ptr @.str.3405) unreachable ok5381: %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 12 %t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1 %t284 = load { ptr, i64, i64 }, ptr %a172 store { ptr, i64, i64 } %t284, ptr %a285 call void @finch_str_copy(ptr %a286, ptr %a285) %t287 = load { ptr, i64, i64 }, ptr %a286 %t288 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t287, 0 %t289 = load { ptr, i64, i64 }, ptr %a175 store { ptr, i64, i64 } %t289, ptr %a290 call void @finch_str_copy(ptr %a291, ptr %a290) %t292 = load { ptr, i64, i64 }, ptr %a291 %t293 = insertvalue %S.gen.Loop %t288, { ptr, i64, i64 } %t292, 1 %t294 = load ptr, ptr %a1 %t295 = icmp eq ptr %t294, null br i1 %t295, label %panic5382, label %ok5383 panic5382: call void @finch_panic(ptr @.str.3406, i64 2631, ptr @.str.3407) unreachable ok5383: %t296 = getelementptr inbounds %S.gen.Gen, ptr %t294, i32 0, i32 10 %t297 = getelementptr inbounds { ptr, i64, i64 }, ptr %t296, i32 0, i32 1 %t298 = load i64, ptr %t297 %t299 = insertvalue %S.gen.Loop %t293, i64 %t298, 2 %t300 = load ptr, ptr %a1 %t301 = icmp eq ptr %t300, null br i1 %t301, label %panic5384, label %ok5385 panic5384: call void @finch_panic(ptr @.str.3408, i64 2631, ptr @.str.3409) unreachable ok5385: %t302 = getelementptr inbounds %S.gen.Gen, ptr %t300, i32 0, i32 11 %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t302, i32 0, i32 1 %t304 = load i64, ptr %t303 %t305 = insertvalue %S.gen.Loop %t299, i64 %t304, 3 %t306 = load i64, ptr %t283 %t307 = add i64 %t306, 1 call void @finch_arr_reserve(ptr %t282, i64 %t307, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) %t308 = load ptr, ptr %t282 %t309 = getelementptr inbounds %S.gen.Loop, ptr %t308, i64 %t306 store %S.gen.Loop %t305, ptr %t309 store i64 %t307, ptr %t283 %t310 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t310) %t311 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t312 = load { ptr, i64, i64 }, ptr %t311 store { ptr, i64, i64 } %t312, ptr %a313 call void @finch_str_copy(ptr %a314, ptr %a313) %t315 = load { ptr, i64, i64 }, ptr %a314 store { ptr, i64, i64 } %t315, ptr %a316 %t317 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t317, i32 0, i32 1 %t319 = load i64, ptr %t318 %t320 = icmp sgt i64 %t319, 0 br i1 %t320, label %then5386, label %endif5388 then5386: %t321 = load ptr, ptr %a1 %t322 = load %S.ast.Node, ptr %a2 %t323 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t324 = load { ptr, i64, i64 }, ptr %t323 %t325 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3410, i64 3, i64 0 }) %t326 = load { ptr, i64, i64 }, ptr %a200 %t327 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t321, %S.ast.Node %t322, { ptr, i64, i64 } %t324, %S.ast.Type %t325, { ptr, i64, i64 } %t326, i1 true, i1 false) store %S.ast.Type %t325, ptr %a328 call void @finch.drop.S_ast_Type(ptr %a328) store { ptr, i64, i64 } %t327, ptr %a329 call void @finch_str_drop(ptr %a329) %t330 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t331 = load { ptr, i64, i64 }, ptr %t330 store { ptr, i64, i64 } %t331, ptr %a332 call void @finch_str_copy(ptr %a333, ptr %a332) %t334 = load { ptr, i64, i64 }, ptr %a333 %t335 = load { ptr, i64, i64 }, ptr %a316 store { ptr, i64, i64 } %t334, ptr %a316 store { ptr, i64, i64 } %t335, ptr %a336 call void @finch_str_drop(ptr %a336) br label %endif5388 endif5388: %t337 = load ptr, ptr %a1 %t338 = load %S.ast.Node, ptr %a2 %t339 = load { ptr, i64, i64 }, ptr %a316 %t340 = load %S.ast.Type, ptr %a114 %t341 = load { ptr, i64, i64 }, ptr %a272 %t342 = load i1, ptr %a158 %t343 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t337, %S.ast.Node %t338, { ptr, i64, i64 } %t339, %S.ast.Type %t340, { ptr, i64, i64 } %t341, i1 true, i1 %t342) store { ptr, i64, i64 } %t343, ptr %a344 call void @finch_str_drop(ptr %a344) %t345 = load ptr, ptr %a1 %t346 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t347 = load { ptr, i64, i64 }, ptr %t346 %t348 = extractvalue { ptr, i64, i64 } %t347, 1 %t349 = icmp uge i64 1, %t348 br i1 %t349, label %range5389, label %inrange5390 range5389: call void @finch_panic_index(ptr @.str.3411, i64 2639, i64 1, i64 %t348) unreachable inrange5390: %t350 = extractvalue { ptr, i64, i64 } %t347, 0 %t351 = getelementptr inbounds %S.ast.Node, ptr %t350, i64 1 %t352 = load %S.ast.Node, ptr %t351 call void @finch.gen.block(ptr %t345, %S.ast.Node %t352, i1 true) %t353 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t353) %t354 = load ptr, ptr %a1 %t355 = icmp eq ptr %t354, null br i1 %t355, label %panic5391, label %ok5392 panic5391: call void @finch_panic(ptr @.str.3412, i64 2641, ptr @.str.3413) unreachable ok5392: %t356 = getelementptr inbounds %S.gen.Gen, ptr %t354, i32 0, i32 12 %t357 = getelementptr inbounds { ptr, i64, i64 }, ptr %t356, i32 0, i32 1 %t358 = load i64, ptr %t357 %t359 = icmp eq i64 %t358, 0 br i1 %t359, label %panic5393, label %ok5394 panic5393: call void @finch_panic(ptr @.str.3414, i64 2641, ptr @.str.3415) unreachable ok5394: %t360 = sub i64 %t358, 1 %t361 = load ptr, ptr %t356 %t362 = getelementptr inbounds %S.gen.Loop, ptr %t361, i64 %t360 %t363 = load %S.gen.Loop, ptr %t362 store i64 %t360, ptr %t357 store %S.gen.Loop %t363, ptr %a364 call void @finch.drop.S_gen_Loop(ptr %a364) %t365 = load ptr, ptr %a1 %t366 = load { ptr, i64, i64 }, ptr %a172 call void @finch.gen.br(ptr %t365, { ptr, i64, i64 } %t366) %t367 = load ptr, ptr %a1 %t368 = load { ptr, i64, i64 }, ptr %a172 call void @finch.gen.label(ptr %t367, { ptr, i64, i64 } %t368) %t369 = load ptr, ptr %a1 %t370 = load { ptr, i64, i64 }, ptr %a161 %t371 = call { ptr, i64, i64 } @finch.gen.load(ptr %t369, { ptr, i64, i64 } { ptr @.str.3416, i64 3, i64 0 }, { ptr, i64, i64 } %t370) store { ptr, i64, i64 } %t371, ptr %a372 %t373 = load ptr, ptr %a1 %t374 = load ptr, ptr %a1 %t375 = load { ptr, i64, i64 }, ptr %a372 store { ptr, i64, i64 } { ptr @.str.3418, i64 8, i64 0 }, ptr %a377 store { ptr, i64, i64 } %t375, ptr %a378 call void @finch_str_concat(ptr %a376, ptr %a377, ptr %a378) %t379 = load { ptr, i64, i64 }, ptr %a376 store { ptr, i64, i64 } %t379, ptr %a381 store { ptr, i64, i64 } { ptr @.str.3419, i64 3, i64 0 }, ptr %a382 call void @finch_str_concat(ptr %a380, ptr %a381, ptr %a382) store { ptr, i64, i64 } %t379, ptr %a383 call void @finch_str_drop(ptr %a383) %t384 = load { ptr, i64, i64 }, ptr %a380 %t385 = call { ptr, i64, i64 } @finch.gen.op(ptr %t374, { ptr, i64, i64 } %t384) store { ptr, i64, i64 } %t384, ptr %a386 call void @finch_str_drop(ptr %a386) %t387 = load { ptr, i64, i64 }, ptr %a161 call void @finch.gen.store(ptr %t373, { ptr, i64, i64 } { ptr @.str.3417, i64 3, i64 0 }, { ptr, i64, i64 } %t385, { ptr, i64, i64 } %t387) store { ptr, i64, i64 } %t385, ptr %a388 call void @finch_str_drop(ptr %a388) %t389 = load ptr, ptr %a1 %t390 = load { ptr, i64, i64 }, ptr %a166 call void @finch.gen.br(ptr %t389, { ptr, i64, i64 } %t390) %t391 = load ptr, ptr %a1 %t392 = load { ptr, i64, i64 }, ptr %a175 call void @finch.gen.label(ptr %t391, { ptr, i64, i64 } %t392) %t393 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t393) call void @finch_str_drop(ptr %a372) call void @finch_str_drop(ptr %a316) call void @finch_str_drop(ptr %a272) call void @finch_str_drop(ptr %a264) call void @finch_str_drop(ptr %a230) call void @finch_str_drop(ptr %a220) call void @finch_str_drop(ptr %a200) call void @finch_str_drop(ptr %a196) call void @finch_str_drop(ptr %a175) call void @finch_str_drop(ptr %a172) call void @finch_str_drop(ptr %a169) call void @finch_str_drop(ptr %a166) call void @finch_str_drop(ptr %a161) call void @finch.drop.S_ast_Type(ptr %a114) call void @finch.drop.S_ast_Type(ptr %a16) call void @finch_str_drop(ptr %a14) call void @finch.drop.S_gen_Ref(ptr %a13) ret void } define internal void @finch.gen.returnStmt(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca %S.ast.Node, align 16 %a48 = alloca %S.ast.Node, align 16 %a50 = alloca %S.ast.Node, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca %S.gen.Val, align 16 %a131 = alloca %S.ast.Type, align 16 %a132 = alloca %S.gen.Val, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca i64, align 16 %a329 = alloca i64, align 16 %a342 = alloca i64, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a420 = alloca %S.gen.Var, align 16 %a421 = alloca %S.gen.Var, align 16 %a423 = alloca %S.gen.Var, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a444 = alloca { ptr, i64, i64 }, align 16 %a511 = alloca %S.gen.Val, align 16 %a512 = alloca %S.gen.Val, align 16 %a516 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic5395, label %ok5396 panic5395: call void @finch_panic(ptr @.str.3420, i64 2652, ptr @.str.3421) unreachable ok5396: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 46 %t6 = load i64, ptr %t5 %t7 = icmp sgt i64 %t6, 0 br i1 %t7, label %then5397, label %endif5399 then5397: %t8 = load ptr, ptr %a1 %t9 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.3422, i64 33, i64 0 }) br label %endif5399 endif5399: %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = icmp sgt i64 %t12, 0 br label %logic.from5400 logic.from5400: br i1 %t13, label %logic.rhs5401, label %logic.end5402 logic.rhs5401: %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t15 = load { ptr, i64, i64 }, ptr %t14 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 0, %t16 br i1 %t17, label %range5403, label %inrange5404 range5403: call void @finch_panic_index(ptr @.str.3423, i64 2656, i64 0, i64 %t16) unreachable inrange5404: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds %S.ast.Node, ptr %t18, i64 0 %t20 = getelementptr inbounds %S.ast.Node, ptr %t19, i32 0, i32 0 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a22 store { ptr, i64, i64 } { ptr @.str.3424, i64 4, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) %t25 = icmp ne i32 %t24, 0 br label %logic.rend5405 logic.rend5405: br label %logic.end5402 logic.end5402: %t26 = phi i1 [ false, %logic.from5400 ], [ %t25, %logic.rend5405 ] br label %logic.from5406 logic.from5406: br i1 %t26, label %logic.rhs5407, label %logic.end5408 logic.rhs5407: %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 0, %t29 br i1 %t30, label %range5409, label %inrange5410 range5409: call void @finch_panic_index(ptr @.str.3425, i64 2656, i64 0, i64 %t29) unreachable inrange5410: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds %S.ast.Node, ptr %t31, i64 0 %t33 = getelementptr inbounds %S.ast.Node, ptr %t32, i32 0, i32 1 %t34 = load { ptr, i64, i64 }, ptr %t33 store { ptr, i64, i64 } %t34, ptr %a35 store { ptr, i64, i64 } { ptr @.str.3426, i64 5, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 br label %logic.rend5411 logic.rend5411: br label %logic.end5408 logic.end5408: %t39 = phi i1 [ false, %logic.from5406 ], [ %t38, %logic.rend5411 ] br i1 %t39, label %then5412, label %endif5414 then5412: %t40 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t41 = load { ptr, i64, i64 }, ptr %t40 %t42 = extractvalue { ptr, i64, i64 } %t41, 1 %t43 = icmp uge i64 0, %t42 br i1 %t43, label %range5415, label %inrange5416 range5415: call void @finch_panic_index(ptr @.str.3427, i64 2657, i64 0, i64 %t42) unreachable inrange5416: %t44 = extractvalue { ptr, i64, i64 } %t41, 0 %t45 = getelementptr inbounds %S.ast.Node, ptr %t44, i64 0 %t46 = load %S.ast.Node, ptr %t45 store %S.ast.Node %t46, ptr %a47 call void @finch.copy.S_ast_Node(ptr %a48, ptr %a47) %t49 = load %S.ast.Node, ptr %a48 store %S.ast.Node %t49, ptr %a50 %t51 = load ptr, ptr %a1 %t52 = icmp eq ptr %t51, null br i1 %t52, label %panic5417, label %ok5418 panic5417: call void @finch_panic(ptr @.str.3428, i64 2658, ptr @.str.3429) unreachable ok5418: %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 13 %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i32 0, i32 9 %t55 = load i1, ptr %t54 %t56 = xor i1 %t55, true br i1 %t56, label %then5419, label %endif5421 then5419: store { ptr, i64, i64 } { ptr @.str.3430, i64 1, i64 0 }, ptr %a57 %t58 = load ptr, ptr %a1 %t59 = icmp eq ptr %t58, null br i1 %t59, label %panic5422, label %ok5423 panic5422: call void @finch_panic(ptr @.str.3431, i64 2660, ptr @.str.3432) unreachable ok5423: %t60 = getelementptr inbounds %S.gen.Gen, ptr %t58, i32 0, i32 13 %t61 = getelementptr inbounds %S.gen.FnSig, ptr %t60, i32 0, i32 12 %t62 = getelementptr inbounds %S.ast.Type, ptr %t61, i32 0, i32 0 %t63 = load { ptr, i64, i64 }, ptr %t62 store { ptr, i64, i64 } %t63, ptr %a64 store { ptr, i64, i64 } { ptr @.str.3433, i64 4, i64 0 }, ptr %a65 %t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65) %t67 = icmp eq i32 %t66, 0 br i1 %t67, label %then5424, label %endif5426 then5424: %t68 = load ptr, ptr %a1 %t69 = icmp eq ptr %t68, null br i1 %t69, label %panic5427, label %ok5428 panic5427: call void @finch_panic(ptr @.str.3434, i64 2661, ptr @.str.3435) unreachable ok5428: %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 13 %t71 = getelementptr inbounds %S.gen.FnSig, ptr %t70, i32 0, i32 12 %t72 = load %S.ast.Type, ptr %t71 %t73 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t72) store { ptr, i64, i64 } %t73, ptr %a75 store { ptr, i64, i64 } { ptr @.str.3436, i64 1, i64 0 }, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) store { ptr, i64, i64 } %t73, ptr %a77 call void @finch_str_drop(ptr %a77) %t78 = load { ptr, i64, i64 }, ptr %a74 %t79 = load { ptr, i64, i64 }, ptr %a57 store { ptr, i64, i64 } %t78, ptr %a57 store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_drop(ptr %a80) br label %endif5426 endif5426: %t81 = load ptr, ptr %a1 %t82 = load %S.ast.Node, ptr %a50 %t83 = load ptr, ptr %a1 %t84 = icmp eq ptr %t83, null br i1 %t84, label %panic5429, label %ok5430 panic5429: call void @finch_panic(ptr @.str.3438, i64 2663, ptr @.str.3439) unreachable ok5430: %t85 = getelementptr inbounds %S.gen.Gen, ptr %t83, i32 0, i32 13 %t86 = getelementptr inbounds %S.gen.FnSig, ptr %t85, i32 0, i32 1 %t87 = load { ptr, i64, i64 }, ptr %t86 store { ptr, i64, i64 } { ptr @.str.3437, i64 1, i64 0 }, ptr %a89 store { ptr, i64, i64 } %t87, ptr %a90 call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) %t91 = load { ptr, i64, i64 }, ptr %a88 store { ptr, i64, i64 } %t91, ptr %a93 store { ptr, i64, i64 } { ptr @.str.3440, i64 64, i64 0 }, ptr %a94 call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) store { ptr, i64, i64 } %t91, ptr %a95 call void @finch_str_drop(ptr %a95) %t96 = load { ptr, i64, i64 }, ptr %a92 %t97 = load { ptr, i64, i64 }, ptr %a57 store { ptr, i64, i64 } %t96, ptr %a99 store { ptr, i64, i64 } %t97, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) store { ptr, i64, i64 } %t96, ptr %a101 call void @finch_str_drop(ptr %a101) %t102 = load { ptr, i64, i64 }, ptr %a98 store { ptr, i64, i64 } %t102, ptr %a104 store { ptr, i64, i64 } { ptr @.str.3441, i64 1, i64 0 }, ptr %a105 call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) store { ptr, i64, i64 } %t102, ptr %a106 call void @finch_str_drop(ptr %a106) %t107 = load { ptr, i64, i64 }, ptr %a103 call void @finch.gen.fail(ptr %t81, %S.ast.Node %t82, { ptr, i64, i64 } %t107) store { ptr, i64, i64 } %t107, ptr %a108 call void @finch_str_drop(ptr %a108) call void @finch_str_drop(ptr %a57) br label %endif5421 endif5421: %t109 = load ptr, ptr %a1 %t110 = load %S.ast.Node, ptr %a50 call void @finch.gen.checkArgs(ptr %t109, %S.ast.Node %t110, i64 0, i64 1, { ptr, i64, i64 } { ptr @.str.3442, i64 5, i64 0 }) %t111 = load ptr, ptr %a1 %t112 = load ptr, ptr %a1 %t113 = getelementptr inbounds %S.ast.Node, ptr %a50, i32 0, i32 9 %t114 = load { ptr, i64, i64 }, ptr %t113 %t115 = extractvalue { ptr, i64, i64 } %t114, 1 %t116 = icmp uge i64 0, %t115 br i1 %t116, label %range5431, label %inrange5432 range5431: call void @finch_panic_index(ptr @.str.3443, i64 2666, i64 0, i64 %t115) unreachable inrange5432: %t117 = extractvalue { ptr, i64, i64 } %t114, 0 %t118 = getelementptr inbounds %S.ast.Node, ptr %t117, i64 0 %t119 = load %S.ast.Node, ptr %t118 %t120 = call %S.gen.Val @finch.gen.expr(ptr %t112, %S.ast.Node %t119) %t121 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3444, i64 3, i64 0 }) %t122 = getelementptr inbounds %S.ast.Node, ptr %a50, i32 0, i32 9 %t123 = load { ptr, i64, i64 }, ptr %t122 %t124 = extractvalue { ptr, i64, i64 } %t123, 1 %t125 = icmp uge i64 0, %t124 br i1 %t125, label %range5433, label %inrange5434 range5433: call void @finch_panic_index(ptr @.str.3445, i64 2666, i64 0, i64 %t124) unreachable inrange5434: %t126 = extractvalue { ptr, i64, i64 } %t123, 0 %t127 = getelementptr inbounds %S.ast.Node, ptr %t126, i64 0 %t128 = load %S.ast.Node, ptr %t127 %t129 = call %S.gen.Val @finch.gen.coerce(ptr %t111, %S.gen.Val %t120, %S.ast.Type %t121, %S.ast.Node %t128, { ptr, i64, i64 } { ptr @.str.3446, i64 17, i64 0 }) store %S.gen.Val %t120, ptr %a130 call void @finch.drop.S_gen_Val(ptr %a130) store %S.ast.Type %t121, ptr %a131 call void @finch.drop.S_ast_Type(ptr %a131) store %S.gen.Val %t129, ptr %a132 %t133 = load ptr, ptr %a1 %t134 = load %S.gen.Val, ptr %a132 %t135 = call { ptr, i64, i64 } @finch.gen.own(ptr %t133, %S.gen.Val %t134) store { ptr, i64, i64 } %t135, ptr %a136 %t137 = load ptr, ptr %a1 call void @finch.gen.dropPending(ptr %t137, i64 0) %t138 = load ptr, ptr %a1 call void @finch.gen.unwind(ptr %t138, i64 0) %t139 = load ptr, ptr %a1 %t140 = load ptr, ptr %a1 %t141 = load ptr, ptr %a1 %t142 = icmp eq ptr %t141, null br i1 %t142, label %panic5435, label %ok5436 panic5435: call void @finch_panic(ptr @.str.3448, i64 2670, ptr @.str.3449) unreachable ok5436: %t143 = getelementptr inbounds %S.gen.Gen, ptr %t141, i32 0, i32 13 %t144 = load %S.gen.FnSig, ptr %t143 %t145 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t140, %S.gen.FnSig %t144) store { ptr, i64, i64 } { ptr @.str.3447, i64 4, i64 0 }, ptr %a147 store { ptr, i64, i64 } %t145, ptr %a148 call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) store { ptr, i64, i64 } %t145, ptr %a149 call void @finch_str_drop(ptr %a149) %t150 = load { ptr, i64, i64 }, ptr %a146 store { ptr, i64, i64 } %t150, ptr %a152 store { ptr, i64, i64 } { ptr @.str.3450, i64 1, i64 0 }, ptr %a153 call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) store { ptr, i64, i64 } %t150, ptr %a154 call void @finch_str_drop(ptr %a154) %t155 = load { ptr, i64, i64 }, ptr %a151 %t156 = load ptr, ptr %a1 %t157 = load ptr, ptr %a1 %t158 = load ptr, ptr %a1 %t159 = icmp eq ptr %t158, null br i1 %t159, label %panic5437, label %ok5438 panic5437: call void @finch_panic(ptr @.str.3452, i64 2670, ptr @.str.3453) unreachable ok5438: %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 13 %t161 = load %S.gen.FnSig, ptr %t160 %t162 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t157, %S.gen.FnSig %t161) store { ptr, i64, i64 } { ptr @.str.3451, i64 12, i64 0 }, ptr %a164 store { ptr, i64, i64 } %t162, ptr %a165 call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) store { ptr, i64, i64 } %t162, ptr %a166 call void @finch_str_drop(ptr %a166) %t167 = load { ptr, i64, i64 }, ptr %a163 store { ptr, i64, i64 } %t167, ptr %a169 store { ptr, i64, i64 } { ptr @.str.3454, i64 36, i64 0 }, ptr %a170 call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) store { ptr, i64, i64 } %t167, ptr %a171 call void @finch_str_drop(ptr %a171) %t172 = load { ptr, i64, i64 }, ptr %a168 %t173 = load { ptr, i64, i64 }, ptr %a136 store { ptr, i64, i64 } %t172, ptr %a175 store { ptr, i64, i64 } %t173, ptr %a176 call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) store { ptr, i64, i64 } %t172, ptr %a177 call void @finch_str_drop(ptr %a177) %t178 = load { ptr, i64, i64 }, ptr %a174 store { ptr, i64, i64 } %t178, ptr %a180 store { ptr, i64, i64 } { ptr @.str.3455, i64 3, i64 0 }, ptr %a181 call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) store { ptr, i64, i64 } %t178, ptr %a182 call void @finch_str_drop(ptr %a182) %t183 = load { ptr, i64, i64 }, ptr %a179 %t184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t156, { ptr, i64, i64 } %t183) store { ptr, i64, i64 } %t183, ptr %a185 call void @finch_str_drop(ptr %a185) store { ptr, i64, i64 } %t155, ptr %a187 store { ptr, i64, i64 } %t184, ptr %a188 call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) store { ptr, i64, i64 } %t155, ptr %a189 call void @finch_str_drop(ptr %a189) store { ptr, i64, i64 } %t184, ptr %a190 call void @finch_str_drop(ptr %a190) %t191 = load { ptr, i64, i64 }, ptr %a186 call void @finch.gen.emit(ptr %t139, { ptr, i64, i64 } %t191) store { ptr, i64, i64 } %t191, ptr %a192 call void @finch_str_drop(ptr %a192) %t193 = load ptr, ptr %a1 %t194 = icmp eq ptr %t193, null br i1 %t194, label %panic5439, label %ok5440 panic5439: call void @finch_panic(ptr @.str.3456, i64 2671, ptr @.str.3457) unreachable ok5440: %t195 = getelementptr inbounds %S.gen.Gen, ptr %t193, i32 0, i32 9 store i1 true, ptr %t195 call void @finch_str_drop(ptr %a136) call void @finch.drop.S_gen_Val(ptr %a132) call void @finch.drop.S_ast_Node(ptr %a50) ret void endif5414: %t196 = load ptr, ptr %a1 %t197 = icmp eq ptr %t196, null br i1 %t197, label %panic5441, label %ok5442 panic5441: call void @finch_panic(ptr @.str.3458, i64 2674, ptr @.str.3459) unreachable ok5442: %t198 = getelementptr inbounds %S.gen.Gen, ptr %t196, i32 0, i32 13 %t199 = getelementptr inbounds %S.gen.FnSig, ptr %t198, i32 0, i32 12 %t200 = getelementptr inbounds %S.ast.Type, ptr %t199, i32 0, i32 0 %t201 = load { ptr, i64, i64 }, ptr %t200 store { ptr, i64, i64 } %t201, ptr %a202 store { ptr, i64, i64 } { ptr @.str.3460, i64 4, i64 0 }, ptr %a203 %t204 = call i32 @finch_str_eq(ptr %a202, ptr %a203) %t205 = icmp ne i32 %t204, 0 br i1 %t205, label %then5443, label %endif5445 then5443: %t206 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t207 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i32 0, i32 1 %t208 = load i64, ptr %t207 %t209 = icmp sgt i64 %t208, 0 br i1 %t209, label %then5446, label %endif5448 then5446: %t210 = load ptr, ptr %a1 %t211 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t212 = load { ptr, i64, i64 }, ptr %t211 %t213 = extractvalue { ptr, i64, i64 } %t212, 1 %t214 = icmp uge i64 0, %t213 br i1 %t214, label %range5449, label %inrange5450 range5449: call void @finch_panic_index(ptr @.str.3461, i64 2676, i64 0, i64 %t213) unreachable inrange5450: %t215 = extractvalue { ptr, i64, i64 } %t212, 0 %t216 = getelementptr inbounds %S.ast.Node, ptr %t215, i64 0 %t217 = load %S.ast.Node, ptr %t216 %t218 = load ptr, ptr %a1 %t219 = icmp eq ptr %t218, null br i1 %t219, label %panic5451, label %ok5452 panic5451: call void @finch_panic(ptr @.str.3463, i64 2676, ptr @.str.3464) unreachable ok5452: %t220 = getelementptr inbounds %S.gen.Gen, ptr %t218, i32 0, i32 13 %t221 = getelementptr inbounds %S.gen.FnSig, ptr %t220, i32 0, i32 1 %t222 = load { ptr, i64, i64 }, ptr %t221 store { ptr, i64, i64 } { ptr @.str.3462, i64 1, i64 0 }, ptr %a224 store { ptr, i64, i64 } %t222, ptr %a225 call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) %t226 = load { ptr, i64, i64 }, ptr %a223 store { ptr, i64, i64 } %t226, ptr %a228 store { ptr, i64, i64 } { ptr @.str.3465, i64 46, i64 0 }, ptr %a229 call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229) store { ptr, i64, i64 } %t226, ptr %a230 call void @finch_str_drop(ptr %a230) %t231 = load { ptr, i64, i64 }, ptr %a227 call void @finch.gen.fail(ptr %t210, %S.ast.Node %t217, { ptr, i64, i64 } %t231) store { ptr, i64, i64 } %t231, ptr %a232 call void @finch_str_drop(ptr %a232) br label %endif5448 endif5448: %t233 = load ptr, ptr %a1 call void @finch.gen.dropPending(ptr %t233, i64 0) %t234 = load ptr, ptr %a1 call void @finch.gen.unwind(ptr %t234, i64 0) %t235 = load ptr, ptr %a1 %t236 = icmp eq ptr %t235, null br i1 %t236, label %panic5453, label %ok5454 panic5453: call void @finch_panic(ptr @.str.3466, i64 2680, ptr @.str.3467) unreachable ok5454: %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 13 %t238 = getelementptr inbounds %S.gen.FnSig, ptr %t237, i32 0, i32 9 %t239 = load i1, ptr %t238 br i1 %t239, label %then5455, label %else5456 then5455: %t240 = load ptr, ptr %a1 %t241 = load ptr, ptr %a1 %t242 = load ptr, ptr %a1 %t243 = icmp eq ptr %t242, null br i1 %t243, label %panic5458, label %ok5459 panic5458: call void @finch_panic(ptr @.str.3469, i64 2681, ptr @.str.3470) unreachable ok5459: %t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 13 %t245 = load %S.gen.FnSig, ptr %t244 %t246 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t241, %S.gen.FnSig %t245) store { ptr, i64, i64 } { ptr @.str.3468, i64 4, i64 0 }, ptr %a248 store { ptr, i64, i64 } %t246, ptr %a249 call void @finch_str_concat(ptr %a247, ptr %a248, ptr %a249) store { ptr, i64, i64 } %t246, ptr %a250 call void @finch_str_drop(ptr %a250) %t251 = load { ptr, i64, i64 }, ptr %a247 store { ptr, i64, i64 } %t251, ptr %a253 store { ptr, i64, i64 } { ptr @.str.3471, i64 53, i64 0 }, ptr %a254 call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) store { ptr, i64, i64 } %t251, ptr %a255 call void @finch_str_drop(ptr %a255) %t256 = load { ptr, i64, i64 }, ptr %a252 call void @finch.gen.emit(ptr %t240, { ptr, i64, i64 } %t256) store { ptr, i64, i64 } %t256, ptr %a257 call void @finch_str_drop(ptr %a257) br label %endif5457 else5456: %t258 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t258, { ptr, i64, i64 } { ptr @.str.3472, i64 8, i64 0 }) br label %endif5457 endif5457: %t259 = load ptr, ptr %a1 %t260 = icmp eq ptr %t259, null br i1 %t260, label %panic5460, label %ok5461 panic5460: call void @finch_panic(ptr @.str.3473, i64 2685, ptr @.str.3474) unreachable ok5461: %t261 = getelementptr inbounds %S.gen.Gen, ptr %t259, i32 0, i32 9 store i1 true, ptr %t261 ret void endif5445: %t262 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i32 0, i32 1 %t264 = load i64, ptr %t263 %t265 = icmp eq i64 %t264, 0 br i1 %t265, label %then5462, label %endif5464 then5462: %t266 = load ptr, ptr %a1 %t267 = load %S.ast.Node, ptr %a2 %t268 = load ptr, ptr %a1 %t269 = icmp eq ptr %t268, null br i1 %t269, label %panic5465, label %ok5466 panic5465: call void @finch_panic(ptr @.str.3476, i64 2689, ptr @.str.3477) unreachable ok5466: %t270 = getelementptr inbounds %S.gen.Gen, ptr %t268, i32 0, i32 13 %t271 = getelementptr inbounds %S.gen.FnSig, ptr %t270, i32 0, i32 1 %t272 = load { ptr, i64, i64 }, ptr %t271 store { ptr, i64, i64 } { ptr @.str.3475, i64 1, i64 0 }, ptr %a274 store { ptr, i64, i64 } %t272, ptr %a275 call void @finch_str_concat(ptr %a273, ptr %a274, ptr %a275) %t276 = load { ptr, i64, i64 }, ptr %a273 store { ptr, i64, i64 } %t276, ptr %a278 store { ptr, i64, i64 } { ptr @.str.3478, i64 14, i64 0 }, ptr %a279 call void @finch_str_concat(ptr %a277, ptr %a278, ptr %a279) store { ptr, i64, i64 } %t276, ptr %a280 call void @finch_str_drop(ptr %a280) %t281 = load { ptr, i64, i64 }, ptr %a277 %t282 = load ptr, ptr %a1 %t283 = icmp eq ptr %t282, null br i1 %t283, label %panic5467, label %ok5468 panic5467: call void @finch_panic(ptr @.str.3479, i64 2689, ptr @.str.3480) unreachable ok5468: %t284 = getelementptr inbounds %S.gen.Gen, ptr %t282, i32 0, i32 13 %t285 = getelementptr inbounds %S.gen.FnSig, ptr %t284, i32 0, i32 12 %t286 = load %S.ast.Type, ptr %t285 %t287 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t286) store { ptr, i64, i64 } %t281, ptr %a289 store { ptr, i64, i64 } %t287, ptr %a290 call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) store { ptr, i64, i64 } %t281, ptr %a291 call void @finch_str_drop(ptr %a291) store { ptr, i64, i64 } %t287, ptr %a292 call void @finch_str_drop(ptr %a292) %t293 = load { ptr, i64, i64 }, ptr %a288 call void @finch.gen.fail(ptr %t266, %S.ast.Node %t267, { ptr, i64, i64 } %t293) store { ptr, i64, i64 } %t293, ptr %a294 call void @finch_str_drop(ptr %a294) br label %endif5464 endif5464: %t295 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t296 = load { ptr, i64, i64 }, ptr %t295 %t297 = extractvalue { ptr, i64, i64 } %t296, 1 %t298 = icmp uge i64 0, %t297 br i1 %t298, label %range5469, label %inrange5470 range5469: call void @finch_panic_index(ptr @.str.3481, i64 2692, i64 0, i64 %t297) unreachable inrange5470: %t299 = extractvalue { ptr, i64, i64 } %t296, 0 %t300 = getelementptr inbounds %S.ast.Node, ptr %t299, i64 0 %t301 = getelementptr inbounds %S.ast.Node, ptr %t300, i32 0, i32 0 %t302 = load { ptr, i64, i64 }, ptr %t301 store { ptr, i64, i64 } %t302, ptr %a303 store { ptr, i64, i64 } { ptr @.str.3482, i64 3, i64 0 }, ptr %a304 %t305 = call i32 @finch_str_eq(ptr %a303, ptr %a304) %t306 = icmp ne i32 %t305, 0 br i1 %t306, label %then5471, label %endif5473 then5471: %t307 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t308 = load { ptr, i64, i64 }, ptr %t307 %t309 = extractvalue { ptr, i64, i64 } %t308, 1 %t310 = icmp uge i64 0, %t309 br i1 %t310, label %range5474, label %inrange5475 range5474: call void @finch_panic_index(ptr @.str.3483, i64 2693, i64 0, i64 %t309) unreachable inrange5475: %t311 = extractvalue { ptr, i64, i64 } %t308, 0 %t312 = getelementptr inbounds %S.ast.Node, ptr %t311, i64 0 %t313 = getelementptr inbounds %S.ast.Node, ptr %t312, i32 0, i32 1 %t314 = load { ptr, i64, i64 }, ptr %t313 store { ptr, i64, i64 } %t314, ptr %a315 call void @finch_str_copy(ptr %a316, ptr %a315) %t317 = load { ptr, i64, i64 }, ptr %a316 store { ptr, i64, i64 } %t317, ptr %a318 %t319 = load ptr, ptr %a1 %t320 = icmp eq ptr %t319, null br i1 %t320, label %panic5476, label %ok5477 panic5476: call void @finch_panic(ptr @.str.3484, i64 2694, ptr @.str.3485) unreachable ok5477: %t321 = getelementptr inbounds %S.gen.Gen, ptr %t319, i32 0, i32 10 %t322 = getelementptr inbounds { ptr, i64, i64 }, ptr %t321, i32 0, i32 1 %t323 = load i64, ptr %t322 store i64 %t323, ptr %a324 br label %while.cond5478 while.cond5478: %t325 = load i64, ptr %a324 %t326 = icmp sgt i64 %t325, 0 br i1 %t326, label %while.body5479, label %while.end5480 while.body5479: %t327 = load i64, ptr %a324 %t328 = sub i64 %t327, 1 store i64 %t328, ptr %a324 store i64 -1, ptr %a329 %t330 = load ptr, ptr %a1 %t331 = icmp eq ptr %t330, null br i1 %t331, label %panic5481, label %ok5482 panic5481: call void @finch_panic(ptr @.str.3486, i64 2698, ptr @.str.3487) unreachable ok5482: %t332 = getelementptr inbounds %S.gen.Gen, ptr %t330, i32 0, i32 10 %t333 = load i64, ptr %a324 %t334 = load { ptr, i64, i64 }, ptr %t332 %t335 = extractvalue { ptr, i64, i64 } %t334, 1 %t336 = icmp uge i64 %t333, %t335 br i1 %t336, label %range5483, label %inrange5484 range5483: call void @finch_panic_index(ptr @.str.3488, i64 2698, i64 %t333, i64 %t335) unreachable inrange5484: %t337 = extractvalue { ptr, i64, i64 } %t334, 0 %t338 = getelementptr inbounds %S.gen.Scope, ptr %t337, i64 %t333 %t339 = getelementptr inbounds %S.gen.Scope, ptr %t338, i32 0, i32 0 %t340 = getelementptr inbounds { ptr, i64, i64 }, ptr %t339, i32 0, i32 1 %t341 = load i64, ptr %t340 store i64 0, ptr %a342 br label %for.cond5485 for.cond5485: %t343 = load i64, ptr %a342 %t344 = icmp slt i64 %t343, %t341 br i1 %t344, label %for.body5486, label %for.end5488 for.body5486: %t345 = load ptr, ptr %a1 %t346 = icmp eq ptr %t345, null br i1 %t346, label %panic5489, label %ok5490 panic5489: call void @finch_panic(ptr @.str.3489, i64 2699, ptr @.str.3490) unreachable ok5490: %t347 = getelementptr inbounds %S.gen.Gen, ptr %t345, i32 0, i32 10 %t348 = load i64, ptr %a324 %t349 = load { ptr, i64, i64 }, ptr %t347 %t350 = extractvalue { ptr, i64, i64 } %t349, 1 %t351 = icmp uge i64 %t348, %t350 br i1 %t351, label %range5491, label %inrange5492 range5491: call void @finch_panic_index(ptr @.str.3491, i64 2699, i64 %t348, i64 %t350) unreachable inrange5492: %t352 = extractvalue { ptr, i64, i64 } %t349, 0 %t353 = getelementptr inbounds %S.gen.Scope, ptr %t352, i64 %t348 %t354 = getelementptr inbounds %S.gen.Scope, ptr %t353, i32 0, i32 0 %t355 = load i64, ptr %a342 %t356 = load { ptr, i64, i64 }, ptr %t354 %t357 = extractvalue { ptr, i64, i64 } %t356, 1 %t358 = icmp uge i64 %t355, %t357 br i1 %t358, label %range5493, label %inrange5494 range5493: call void @finch_panic_index(ptr @.str.3492, i64 2699, i64 %t355, i64 %t357) unreachable inrange5494: %t359 = extractvalue { ptr, i64, i64 } %t356, 0 %t360 = getelementptr inbounds %S.gen.Var, ptr %t359, i64 %t355 %t361 = getelementptr inbounds %S.gen.Var, ptr %t360, i32 0, i32 0 %t362 = load { ptr, i64, i64 }, ptr %t361 %t363 = load { ptr, i64, i64 }, ptr %a318 store { ptr, i64, i64 } %t362, ptr %a364 store { ptr, i64, i64 } %t363, ptr %a365 %t366 = call i32 @finch_str_eq(ptr %a364, ptr %a365) %t367 = icmp ne i32 %t366, 0 br label %logic.from5495 logic.from5495: br i1 %t367, label %logic.rhs5496, label %logic.end5497 logic.rhs5496: %t368 = load ptr, ptr %a1 %t369 = icmp eq ptr %t368, null br i1 %t369, label %panic5498, label %ok5499 panic5498: call void @finch_panic(ptr @.str.3493, i64 2699, ptr @.str.3494) unreachable ok5499: %t370 = getelementptr inbounds %S.gen.Gen, ptr %t368, i32 0, i32 44 %t371 = load i1, ptr %t370 br label %logic.from5500 logic.from5500: br i1 %t371, label %logic.rhs5501, label %logic.end5502 logic.rhs5501: %t372 = load ptr, ptr %a1 %t373 = icmp eq ptr %t372, null br i1 %t373, label %panic5503, label %ok5504 panic5503: call void @finch_panic(ptr @.str.3495, i64 2699, ptr @.str.3496) unreachable ok5504: %t374 = getelementptr inbounds %S.gen.Gen, ptr %t372, i32 0, i32 10 %t375 = load i64, ptr %a324 %t376 = load { ptr, i64, i64 }, ptr %t374 %t377 = extractvalue { ptr, i64, i64 } %t376, 1 %t378 = icmp uge i64 %t375, %t377 br i1 %t378, label %range5505, label %inrange5506 range5505: call void @finch_panic_index(ptr @.str.3497, i64 2699, i64 %t375, i64 %t377) unreachable inrange5506: %t379 = extractvalue { ptr, i64, i64 } %t376, 0 %t380 = getelementptr inbounds %S.gen.Scope, ptr %t379, i64 %t375 %t381 = getelementptr inbounds %S.gen.Scope, ptr %t380, i32 0, i32 0 %t382 = load i64, ptr %a342 %t383 = load { ptr, i64, i64 }, ptr %t381 %t384 = extractvalue { ptr, i64, i64 } %t383, 1 %t385 = icmp uge i64 %t382, %t384 br i1 %t385, label %range5507, label %inrange5508 range5507: call void @finch_panic_index(ptr @.str.3498, i64 2699, i64 %t382, i64 %t384) unreachable inrange5508: %t386 = extractvalue { ptr, i64, i64 } %t383, 0 %t387 = getelementptr inbounds %S.gen.Var, ptr %t386, i64 %t382 %t388 = getelementptr inbounds %S.gen.Var, ptr %t387, i32 0, i32 4 %t389 = load i64, ptr %t388 %t390 = load ptr, ptr %a1 %t391 = icmp eq ptr %t390, null br i1 %t391, label %panic5509, label %ok5510 panic5509: call void @finch_panic(ptr @.str.3499, i64 2699, ptr @.str.3500) unreachable ok5510: %t392 = getelementptr inbounds %S.gen.Gen, ptr %t390, i32 0, i32 45 %t393 = load i64, ptr %t392 %t394 = icmp sge i64 %t389, %t393 br label %logic.rend5511 logic.rend5511: br label %logic.end5502 logic.end5502: %t395 = phi i1 [ false, %logic.from5500 ], [ %t394, %logic.rend5511 ] %t396 = xor i1 %t395, true br label %logic.rend5512 logic.rend5512: br label %logic.end5497 logic.end5497: %t397 = phi i1 [ false, %logic.from5495 ], [ %t396, %logic.rend5512 ] br i1 %t397, label %then5513, label %endif5515 then5513: %t398 = load i64, ptr %a342 store i64 %t398, ptr %a329 br label %endif5515 endif5515: br label %for.step5487 for.step5487: %t399 = load i64, ptr %a342 %t400 = add i64 %t399, 1 store i64 %t400, ptr %a342 br label %for.cond5485 for.end5488: %t401 = load i64, ptr %a329 %t402 = icmp slt i64 %t401, 0 br i1 %t402, label %then5516, label %endif5518 then5516: br label %while.cond5478 endif5518: %t403 = load ptr, ptr %a1 %t404 = icmp eq ptr %t403, null br i1 %t404, label %panic5519, label %ok5520 panic5519: call void @finch_panic(ptr @.str.3501, i64 2706, ptr @.str.3502) unreachable ok5520: %t405 = getelementptr inbounds %S.gen.Gen, ptr %t403, i32 0, i32 10 %t406 = load i64, ptr %a324 %t407 = load { ptr, i64, i64 }, ptr %t405 %t408 = extractvalue { ptr, i64, i64 } %t407, 1 %t409 = icmp uge i64 %t406, %t408 br i1 %t409, label %range5521, label %inrange5522 range5521: call void @finch_panic_index(ptr @.str.3503, i64 2706, i64 %t406, i64 %t408) unreachable inrange5522: %t410 = extractvalue { ptr, i64, i64 } %t407, 0 %t411 = getelementptr inbounds %S.gen.Scope, ptr %t410, i64 %t406 %t412 = getelementptr inbounds %S.gen.Scope, ptr %t411, i32 0, i32 0 %t413 = load i64, ptr %a329 %t414 = load { ptr, i64, i64 }, ptr %t412 %t415 = extractvalue { ptr, i64, i64 } %t414, 1 %t416 = icmp uge i64 %t413, %t415 br i1 %t416, label %range5523, label %inrange5524 range5523: call void @finch_panic_index(ptr @.str.3504, i64 2706, i64 %t413, i64 %t415) unreachable inrange5524: %t417 = extractvalue { ptr, i64, i64 } %t414, 0 %t418 = getelementptr inbounds %S.gen.Var, ptr %t417, i64 %t413 %t419 = load %S.gen.Var, ptr %t418 store %S.gen.Var %t419, ptr %a420 call void @finch.copy.S_gen_Var(ptr %a421, ptr %a420) %t422 = load %S.gen.Var, ptr %a421 store %S.gen.Var %t422, ptr %a423 %t424 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 5 %t425 = load i1, ptr %t424 br label %logic.from5525 logic.from5525: br i1 %t425, label %logic.rhs5526, label %logic.end5527 logic.rhs5526: %t426 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 1 %t427 = load %S.ast.Type, ptr %t426 %t428 = load ptr, ptr %a1 %t429 = icmp eq ptr %t428, null br i1 %t429, label %panic5528, label %ok5529 panic5528: call void @finch_panic(ptr @.str.3505, i64 2707, ptr @.str.3506) unreachable ok5529: %t430 = getelementptr inbounds %S.gen.Gen, ptr %t428, i32 0, i32 13 %t431 = getelementptr inbounds %S.gen.FnSig, ptr %t430, i32 0, i32 12 %t432 = load %S.ast.Type, ptr %t431 %t433 = call i1 @finch.ast.same(%S.ast.Type %t427, %S.ast.Type %t432) br label %logic.rend5530 logic.rend5530: br label %logic.end5527 logic.end5527: %t434 = phi i1 [ false, %logic.from5525 ], [ %t433, %logic.rend5530 ] br i1 %t434, label %then5531, label %endif5533 then5531: %t435 = load ptr, ptr %a1 %t436 = load ptr, ptr %a1 %t437 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 1 %t438 = load %S.ast.Type, ptr %t437 %t439 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t436, %S.ast.Type %t438) %t440 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 2 %t441 = load { ptr, i64, i64 }, ptr %t440 %t442 = call { ptr, i64, i64 } @finch.gen.load(ptr %t435, { ptr, i64, i64 } %t439, { ptr, i64, i64 } %t441) store { ptr, i64, i64 } %t439, ptr %a443 call void @finch_str_drop(ptr %a443) store { ptr, i64, i64 } %t442, ptr %a444 %t445 = load ptr, ptr %a1 %t446 = icmp eq ptr %t445, null br i1 %t446, label %panic5534, label %ok5535 panic5534: call void @finch_panic(ptr @.str.3507, i64 2709, ptr @.str.3508) unreachable ok5535: %t447 = getelementptr inbounds %S.gen.Gen, ptr %t445, i32 0, i32 10 %t448 = load i64, ptr %a324 %t449 = load { ptr, i64, i64 }, ptr %t447 %t450 = extractvalue { ptr, i64, i64 } %t449, 1 %t451 = icmp uge i64 %t448, %t450 br i1 %t451, label %range5536, label %inrange5537 range5536: call void @finch_panic_index(ptr @.str.3509, i64 2709, i64 %t448, i64 %t450) unreachable inrange5537: %t452 = extractvalue { ptr, i64, i64 } %t449, 0 %t453 = getelementptr inbounds %S.gen.Scope, ptr %t452, i64 %t448 %t454 = getelementptr inbounds %S.gen.Scope, ptr %t453, i32 0, i32 0 %t455 = load i64, ptr %a329 %t456 = load { ptr, i64, i64 }, ptr %t454 %t457 = extractvalue { ptr, i64, i64 } %t456, 1 %t458 = icmp uge i64 %t455, %t457 br i1 %t458, label %range5538, label %inrange5539 range5538: call void @finch_panic_index(ptr @.str.3510, i64 2709, i64 %t455, i64 %t457) unreachable inrange5539: %t459 = extractvalue { ptr, i64, i64 } %t456, 0 %t460 = getelementptr inbounds %S.gen.Var, ptr %t459, i64 %t455 %t461 = getelementptr inbounds %S.gen.Var, ptr %t460, i32 0, i32 6 store i1 true, ptr %t461 %t462 = load ptr, ptr %a1 call void @finch.gen.dropPending(ptr %t462, i64 0) %t463 = load ptr, ptr %a1 call void @finch.gen.unwind(ptr %t463, i64 0) %t464 = load ptr, ptr %a1 %t465 = icmp eq ptr %t464, null br i1 %t465, label %panic5540, label %ok5541 panic5540: call void @finch_panic(ptr @.str.3511, i64 2712, ptr @.str.3512) unreachable ok5541: %t466 = getelementptr inbounds %S.gen.Gen, ptr %t464, i32 0, i32 10 %t467 = load i64, ptr %a324 %t468 = load { ptr, i64, i64 }, ptr %t466 %t469 = extractvalue { ptr, i64, i64 } %t468, 1 %t470 = icmp uge i64 %t467, %t469 br i1 %t470, label %range5542, label %inrange5543 range5542: call void @finch_panic_index(ptr @.str.3513, i64 2712, i64 %t467, i64 %t469) unreachable inrange5543: %t471 = extractvalue { ptr, i64, i64 } %t468, 0 %t472 = getelementptr inbounds %S.gen.Scope, ptr %t471, i64 %t467 %t473 = getelementptr inbounds %S.gen.Scope, ptr %t472, i32 0, i32 0 %t474 = load i64, ptr %a329 %t475 = load { ptr, i64, i64 }, ptr %t473 %t476 = extractvalue { ptr, i64, i64 } %t475, 1 %t477 = icmp uge i64 %t474, %t476 br i1 %t477, label %range5544, label %inrange5545 range5544: call void @finch_panic_index(ptr @.str.3514, i64 2712, i64 %t474, i64 %t476) unreachable inrange5545: %t478 = extractvalue { ptr, i64, i64 } %t475, 0 %t479 = getelementptr inbounds %S.gen.Var, ptr %t478, i64 %t474 %t480 = getelementptr inbounds %S.gen.Var, ptr %t479, i32 0, i32 6 store i1 false, ptr %t480 %t481 = load ptr, ptr %a1 %t482 = load { ptr, i64, i64 }, ptr %a444 call void @finch.gen.finishReturn(ptr %t481, { ptr, i64, i64 } %t482) call void @finch_str_drop(ptr %a444) call void @finch.drop.S_gen_Var(ptr %a423) call void @finch_str_drop(ptr %a318) ret void endif5533: call void @finch.drop.S_gen_Var(ptr %a423) br label %while.end5480 while.end5480: call void @finch_str_drop(ptr %a318) br label %endif5473 endif5473: %t483 = load ptr, ptr %a1 %t484 = load ptr, ptr %a1 %t485 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t486 = load { ptr, i64, i64 }, ptr %t485 %t487 = extractvalue { ptr, i64, i64 } %t486, 1 %t488 = icmp uge i64 0, %t487 br i1 %t488, label %range5546, label %inrange5547 range5546: call void @finch_panic_index(ptr @.str.3515, i64 2719, i64 0, i64 %t487) unreachable inrange5547: %t489 = extractvalue { ptr, i64, i64 } %t486, 0 %t490 = getelementptr inbounds %S.ast.Node, ptr %t489, i64 0 %t491 = load %S.ast.Node, ptr %t490 %t492 = load ptr, ptr %a1 %t493 = icmp eq ptr %t492, null br i1 %t493, label %panic5548, label %ok5549 panic5548: call void @finch_panic(ptr @.str.3516, i64 2719, ptr @.str.3517) unreachable ok5549: %t494 = getelementptr inbounds %S.gen.Gen, ptr %t492, i32 0, i32 13 %t495 = getelementptr inbounds %S.gen.FnSig, ptr %t494, i32 0, i32 12 %t496 = load %S.ast.Type, ptr %t495 %t497 = call %S.gen.Val @finch.gen.exprWant(ptr %t484, %S.ast.Node %t491, %S.ast.Type %t496) %t498 = load ptr, ptr %a1 %t499 = icmp eq ptr %t498, null br i1 %t499, label %panic5550, label %ok5551 panic5550: call void @finch_panic(ptr @.str.3518, i64 2719, ptr @.str.3519) unreachable ok5551: %t500 = getelementptr inbounds %S.gen.Gen, ptr %t498, i32 0, i32 13 %t501 = getelementptr inbounds %S.gen.FnSig, ptr %t500, i32 0, i32 12 %t502 = load %S.ast.Type, ptr %t501 %t503 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t504 = load { ptr, i64, i64 }, ptr %t503 %t505 = extractvalue { ptr, i64, i64 } %t504, 1 %t506 = icmp uge i64 0, %t505 br i1 %t506, label %range5552, label %inrange5553 range5552: call void @finch_panic_index(ptr @.str.3520, i64 2719, i64 0, i64 %t505) unreachable inrange5553: %t507 = extractvalue { ptr, i64, i64 } %t504, 0 %t508 = getelementptr inbounds %S.ast.Node, ptr %t507, i64 0 %t509 = load %S.ast.Node, ptr %t508 %t510 = call %S.gen.Val @finch.gen.coerce(ptr %t483, %S.gen.Val %t497, %S.ast.Type %t502, %S.ast.Node %t509, { ptr, i64, i64 } { ptr @.str.3521, i64 18, i64 0 }) store %S.gen.Val %t497, ptr %a511 call void @finch.drop.S_gen_Val(ptr %a511) store %S.gen.Val %t510, ptr %a512 %t513 = load ptr, ptr %a1 %t514 = load %S.gen.Val, ptr %a512 %t515 = call { ptr, i64, i64 } @finch.gen.own(ptr %t513, %S.gen.Val %t514) store { ptr, i64, i64 } %t515, ptr %a516 %t517 = load ptr, ptr %a1 call void @finch.gen.dropPending(ptr %t517, i64 0) %t518 = load ptr, ptr %a1 call void @finch.gen.unwind(ptr %t518, i64 0) %t519 = load ptr, ptr %a1 %t520 = load { ptr, i64, i64 }, ptr %a516 call void @finch.gen.finishReturn(ptr %t519, { ptr, i64, i64 } %t520) call void @finch_str_drop(ptr %a516) call void @finch.drop.S_gen_Val(ptr %a512) ret void } define internal void @finch.gen.finishReturn(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic5554, label %ok5555 panic5554: call void @finch_panic(ptr @.str.3522, i64 2727, ptr @.str.3523) unreachable ok5555: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 13 %t6 = getelementptr inbounds %S.gen.FnSig, ptr %t5, i32 0, i32 9 %t7 = load i1, ptr %t6 br i1 %t7, label %then5556, label %else5557 then5556: %t8 = load ptr, ptr %a1 %t9 = load ptr, ptr %a1 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic5559, label %ok5560 panic5559: call void @finch_panic(ptr @.str.3525, i64 2728, ptr @.str.3526) unreachable ok5560: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 13 %t13 = load %S.gen.FnSig, ptr %t12 %t14 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t9, %S.gen.FnSig %t13) store { ptr, i64, i64 } { ptr @.str.3524, i64 12, i64 0 }, ptr %a16 store { ptr, i64, i64 } %t14, ptr %a17 call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) store { ptr, i64, i64 } %t14, ptr %a18 call void @finch_str_drop(ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t19, ptr %a21 store { ptr, i64, i64 } { ptr @.str.3527, i64 28, i64 0 }, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) store { ptr, i64, i64 } %t19, ptr %a23 call void @finch_str_drop(ptr %a23) %t24 = load { ptr, i64, i64 }, ptr %a20 %t25 = call { ptr, i64, i64 } @finch.gen.op(ptr %t8, { ptr, i64, i64 } %t24) store { ptr, i64, i64 } %t24, ptr %a26 call void @finch_str_drop(ptr %a26) store { ptr, i64, i64 } %t25, ptr %a27 %t28 = load ptr, ptr %a1 %t29 = load ptr, ptr %a1 %t30 = load ptr, ptr %a1 %t31 = icmp eq ptr %t30, null br i1 %t31, label %panic5561, label %ok5562 panic5561: call void @finch_panic(ptr @.str.3529, i64 2729, ptr @.str.3530) unreachable ok5562: %t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 13 %t33 = load %S.gen.FnSig, ptr %t32 %t34 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t29, %S.gen.FnSig %t33) store { ptr, i64, i64 } { ptr @.str.3528, i64 12, i64 0 }, ptr %a36 store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) store { ptr, i64, i64 } %t34, ptr %a38 call void @finch_str_drop(ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t39, ptr %a41 store { ptr, i64, i64 } { ptr @.str.3531, i64 1, i64 0 }, ptr %a42 call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) store { ptr, i64, i64 } %t39, ptr %a43 call void @finch_str_drop(ptr %a43) %t44 = load { ptr, i64, i64 }, ptr %a40 %t45 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t44, ptr %a47 store { ptr, i64, i64 } %t45, ptr %a48 call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) store { ptr, i64, i64 } %t44, ptr %a49 call void @finch_str_drop(ptr %a49) %t50 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t50, ptr %a52 store { ptr, i64, i64 } { ptr @.str.3532, i64 2, i64 0 }, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) store { ptr, i64, i64 } %t50, ptr %a54 call void @finch_str_drop(ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a51 %t56 = load ptr, ptr %a1 %t57 = load ptr, ptr %a1 %t58 = icmp eq ptr %t57, null br i1 %t58, label %panic5563, label %ok5564 panic5563: call void @finch_panic(ptr @.str.3533, i64 2729, ptr @.str.3534) unreachable ok5564: %t59 = getelementptr inbounds %S.gen.Gen, ptr %t57, i32 0, i32 13 %t60 = getelementptr inbounds %S.gen.FnSig, ptr %t59, i32 0, i32 12 %t61 = load %S.ast.Type, ptr %t60 %t62 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t56, %S.ast.Type %t61) store { ptr, i64, i64 } %t55, ptr %a64 store { ptr, i64, i64 } %t62, ptr %a65 call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) store { ptr, i64, i64 } %t55, ptr %a66 call void @finch_str_drop(ptr %a66) store { ptr, i64, i64 } %t62, ptr %a67 call void @finch_str_drop(ptr %a67) %t68 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } %t68, ptr %a70 store { ptr, i64, i64 } { ptr @.str.3535, i64 1, i64 0 }, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) store { ptr, i64, i64 } %t68, ptr %a72 call void @finch_str_drop(ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a69 %t74 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t73, ptr %a76 store { ptr, i64, i64 } %t74, ptr %a77 call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) store { ptr, i64, i64 } %t73, ptr %a78 call void @finch_str_drop(ptr %a78) %t79 = load { ptr, i64, i64 }, ptr %a75 store { ptr, i64, i64 } %t79, ptr %a81 store { ptr, i64, i64 } { ptr @.str.3536, i64 3, i64 0 }, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) store { ptr, i64, i64 } %t79, ptr %a83 call void @finch_str_drop(ptr %a83) %t84 = load { ptr, i64, i64 }, ptr %a80 %t85 = call { ptr, i64, i64 } @finch.gen.op(ptr %t28, { ptr, i64, i64 } %t84) store { ptr, i64, i64 } %t84, ptr %a86 call void @finch_str_drop(ptr %a86) store { ptr, i64, i64 } %t85, ptr %a87 %t88 = load ptr, ptr %a1 %t89 = load ptr, ptr %a1 %t90 = load ptr, ptr %a1 %t91 = icmp eq ptr %t90, null br i1 %t91, label %panic5565, label %ok5566 panic5565: call void @finch_panic(ptr @.str.3538, i64 2730, ptr @.str.3539) unreachable ok5566: %t92 = getelementptr inbounds %S.gen.Gen, ptr %t90, i32 0, i32 13 %t93 = load %S.gen.FnSig, ptr %t92 %t94 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t89, %S.gen.FnSig %t93) store { ptr, i64, i64 } { ptr @.str.3537, i64 4, i64 0 }, ptr %a96 store { ptr, i64, i64 } %t94, ptr %a97 call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) store { ptr, i64, i64 } %t94, ptr %a98 call void @finch_str_drop(ptr %a98) %t99 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t99, ptr %a101 store { ptr, i64, i64 } { ptr @.str.3540, i64 1, i64 0 }, ptr %a102 call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) store { ptr, i64, i64 } %t99, ptr %a103 call void @finch_str_drop(ptr %a103) %t104 = load { ptr, i64, i64 }, ptr %a100 %t105 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t104, ptr %a107 store { ptr, i64, i64 } %t105, ptr %a108 call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) store { ptr, i64, i64 } %t104, ptr %a109 call void @finch_str_drop(ptr %a109) %t110 = load { ptr, i64, i64 }, ptr %a106 call void @finch.gen.emit(ptr %t88, { ptr, i64, i64 } %t110) store { ptr, i64, i64 } %t110, ptr %a111 call void @finch_str_drop(ptr %a111) call void @finch_str_drop(ptr %a87) call void @finch_str_drop(ptr %a27) br label %endif5558 else5557: %t112 = load ptr, ptr %a1 %t113 = load ptr, ptr %a1 %t114 = load ptr, ptr %a1 %t115 = icmp eq ptr %t114, null br i1 %t115, label %panic5567, label %ok5568 panic5567: call void @finch_panic(ptr @.str.3542, i64 2732, ptr @.str.3543) unreachable ok5568: %t116 = getelementptr inbounds %S.gen.Gen, ptr %t114, i32 0, i32 13 %t117 = getelementptr inbounds %S.gen.FnSig, ptr %t116, i32 0, i32 12 %t118 = load %S.ast.Type, ptr %t117 %t119 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t113, %S.ast.Type %t118) store { ptr, i64, i64 } { ptr @.str.3541, i64 4, i64 0 }, ptr %a121 store { ptr, i64, i64 } %t119, ptr %a122 call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) store { ptr, i64, i64 } %t119, ptr %a123 call void @finch_str_drop(ptr %a123) %t124 = load { ptr, i64, i64 }, ptr %a120 store { ptr, i64, i64 } %t124, ptr %a126 store { ptr, i64, i64 } { ptr @.str.3544, i64 1, i64 0 }, ptr %a127 call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) store { ptr, i64, i64 } %t124, ptr %a128 call void @finch_str_drop(ptr %a128) %t129 = load { ptr, i64, i64 }, ptr %a125 %t130 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t129, ptr %a132 store { ptr, i64, i64 } %t130, ptr %a133 call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) store { ptr, i64, i64 } %t129, ptr %a134 call void @finch_str_drop(ptr %a134) %t135 = load { ptr, i64, i64 }, ptr %a131 call void @finch.gen.emit(ptr %t112, { ptr, i64, i64 } %t135) store { ptr, i64, i64 } %t135, ptr %a136 call void @finch_str_drop(ptr %a136) br label %endif5558 endif5558: %t137 = load ptr, ptr %a1 %t138 = icmp eq ptr %t137, null br i1 %t138, label %panic5569, label %ok5570 panic5569: call void @finch_panic(ptr @.str.3545, i64 2734, ptr @.str.3546) unreachable ok5570: %t139 = getelementptr inbounds %S.gen.Gen, ptr %t137, i32 0, i32 9 store i1 true, ptr %t139 ret void } define internal { ptr, i64, i64 } @finch.gen.entryTy(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t5 = load { ptr, i64, i64 }, ptr %t4 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 0, %t6 br i1 %t7, label %range5571, label %inrange5572 range5571: call void @finch_panic_index(ptr @.str.3548, i64 2746, i64 0, i64 %t6) unreachable inrange5572: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds %S.ast.Type, ptr %t8, i64 0 %t10 = load %S.ast.Type, ptr %t9 %t11 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t3, %S.ast.Type %t10) store { ptr, i64, i64 } { ptr @.str.3547, i64 7, i64 0 }, ptr %a13 store { ptr, i64, i64 } %t11, ptr %a14 call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) store { ptr, i64, i64 } %t11, ptr %a15 call void @finch_str_drop(ptr %a15) %t16 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t16, ptr %a18 store { ptr, i64, i64 } { ptr @.str.3549, i64 2, i64 0 }, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) store { ptr, i64, i64 } %t16, ptr %a20 call void @finch_str_drop(ptr %a20) %t21 = load { ptr, i64, i64 }, ptr %a17 %t22 = load ptr, ptr %a1 %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t24 = load { ptr, i64, i64 }, ptr %t23 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 1, %t25 br i1 %t26, label %range5573, label %inrange5574 range5573: call void @finch_panic_index(ptr @.str.3550, i64 2746, i64 1, i64 %t25) unreachable inrange5574: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds %S.ast.Type, ptr %t27, i64 1 %t29 = load %S.ast.Type, ptr %t28 %t30 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t22, %S.ast.Type %t29) store { ptr, i64, i64 } %t21, ptr %a32 store { ptr, i64, i64 } %t30, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) store { ptr, i64, i64 } %t21, ptr %a34 call void @finch_str_drop(ptr %a34) store { ptr, i64, i64 } %t30, ptr %a35 call void @finch_str_drop(ptr %a35) %t36 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t36, ptr %a38 store { ptr, i64, i64 } { ptr @.str.3551, i64 2, i64 0 }, ptr %a39 call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) store { ptr, i64, i64 } %t36, ptr %a40 call void @finch_str_drop(ptr %a40) %t41 = load { ptr, i64, i64 }, ptr %a37 ret { ptr, i64, i64 } %t41 } define internal { ptr, i64, i64 } @finch.gen.entrySize(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load %S.ast.Type, ptr %a2 %t5 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t3, %S.ast.Type %t4) store { ptr, i64, i64 } { ptr @.str.3552, i64 29, i64 0 }, ptr %a7 store { ptr, i64, i64 } %t5, ptr %a8 call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) store { ptr, i64, i64 } %t5, ptr %a9 call void @finch_str_drop(ptr %a9) %t10 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t10, ptr %a12 store { ptr, i64, i64 } { ptr @.str.3553, i64 26, i64 0 }, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) store { ptr, i64, i64 } %t10, ptr %a14 call void @finch_str_drop(ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a11 ret { ptr, i64, i64 } %t15 } define internal { ptr, i64, i64 } @finch.gen.entryAt(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, { ptr, i64, i64 } %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = load ptr, ptr %a1 %t7 = load ptr, ptr %a1 %t8 = load %S.ast.Type, ptr %a3 %t9 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t7, %S.ast.Type %t8) store { ptr, i64, i64 } { ptr @.str.3555, i64 23, i64 0 }, ptr %a11 store { ptr, i64, i64 } %t9, ptr %a12 call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) store { ptr, i64, i64 } %t9, ptr %a13 call void @finch_str_drop(ptr %a13) %t14 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t14, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3556, i64 6, i64 0 }, ptr %a17 call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) store { ptr, i64, i64 } %t14, ptr %a18 call void @finch_str_drop(ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a15 %t20 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t19, ptr %a22 store { ptr, i64, i64 } %t20, ptr %a23 call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) store { ptr, i64, i64 } %t19, ptr %a24 call void @finch_str_drop(ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t25, ptr %a27 store { ptr, i64, i64 } { ptr @.str.3557, i64 14, i64 0 }, ptr %a28 call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) store { ptr, i64, i64 } %t25, ptr %a29 call void @finch_str_drop(ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a26 %t31 = call { ptr, i64, i64 } @finch.gen.op(ptr %t6, { ptr, i64, i64 } %t30) store { ptr, i64, i64 } %t30, ptr %a32 call void @finch_str_drop(ptr %a32) %t33 = call { ptr, i64, i64 } @finch.gen.load(ptr %t5, { ptr, i64, i64 } { ptr @.str.3554, i64 3, i64 0 }, { ptr, i64, i64 } %t31) store { ptr, i64, i64 } %t31, ptr %a34 call void @finch_str_drop(ptr %a34) store { ptr, i64, i64 } %t33, ptr %a35 %t36 = load ptr, ptr %a1 %t37 = load ptr, ptr %a1 %t38 = load %S.ast.Type, ptr %a3 %t39 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t37, %S.ast.Type %t38) store { ptr, i64, i64 } { ptr @.str.3558, i64 23, i64 0 }, ptr %a41 store { ptr, i64, i64 } %t39, ptr %a42 call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) store { ptr, i64, i64 } %t39, ptr %a43 call void @finch_str_drop(ptr %a43) %t44 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t44, ptr %a46 store { ptr, i64, i64 } { ptr @.str.3559, i64 6, i64 0 }, ptr %a47 call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) store { ptr, i64, i64 } %t44, ptr %a48 call void @finch_str_drop(ptr %a48) %t49 = load { ptr, i64, i64 }, ptr %a45 %t50 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t49, ptr %a52 store { ptr, i64, i64 } %t50, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) store { ptr, i64, i64 } %t49, ptr %a54 call void @finch_str_drop(ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a51 store { ptr, i64, i64 } %t55, ptr %a57 store { ptr, i64, i64 } { ptr @.str.3560, i64 6, i64 0 }, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) store { ptr, i64, i64 } %t55, ptr %a59 call void @finch_str_drop(ptr %a59) %t60 = load { ptr, i64, i64 }, ptr %a56 %t61 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t60, ptr %a63 store { ptr, i64, i64 } %t61, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) store { ptr, i64, i64 } %t60, ptr %a65 call void @finch_str_drop(ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a62 %t67 = call { ptr, i64, i64 } @finch.gen.op(ptr %t36, { ptr, i64, i64 } %t66) store { ptr, i64, i64 } %t66, ptr %a68 call void @finch_str_drop(ptr %a68) call void @finch_str_drop(ptr %a35) ret { ptr, i64, i64 } %t67 } define internal { ptr, i64, i64 } @finch.gen.entryField(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, i64 %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca i64, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store i64 %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = load ptr, ptr %a1 %t7 = load %S.ast.Type, ptr %a3 %t8 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t6, %S.ast.Type %t7) store { ptr, i64, i64 } { ptr @.str.3561, i64 23, i64 0 }, ptr %a10 store { ptr, i64, i64 } %t8, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) store { ptr, i64, i64 } %t8, ptr %a12 call void @finch_str_drop(ptr %a12) %t13 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t13, ptr %a15 store { ptr, i64, i64 } { ptr @.str.3562, i64 6, i64 0 }, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) store { ptr, i64, i64 } %t13, ptr %a17 call void @finch_str_drop(ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a14 %t19 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t18, ptr %a21 store { ptr, i64, i64 } %t19, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) store { ptr, i64, i64 } %t18, ptr %a23 call void @finch_str_drop(ptr %a23) %t24 = load { ptr, i64, i64 }, ptr %a20 store { ptr, i64, i64 } %t24, ptr %a26 store { ptr, i64, i64 } { ptr @.str.3563, i64 13, i64 0 }, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) store { ptr, i64, i64 } %t24, ptr %a28 call void @finch_str_drop(ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a25 %t30 = load i64, ptr %a4 call void @finch_str_from_int(ptr %a31, i64 %t30) %t32 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t29, ptr %a34 store { ptr, i64, i64 } %t32, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) store { ptr, i64, i64 } %t29, ptr %a36 call void @finch_str_drop(ptr %a36) store { ptr, i64, i64 } %t32, ptr %a37 call void @finch_str_drop(ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a33 %t39 = call { ptr, i64, i64 } @finch.gen.op(ptr %t5, { ptr, i64, i64 } %t38) store { ptr, i64, i64 } %t38, ptr %a40 call void @finch_str_drop(ptr %a40) ret { ptr, i64, i64 } %t39 } define internal { ptr, i64, i64 } @finch.gen.mapArgs(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.3564, i64 1, i64 0 }, ptr %a5 %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %t6 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 0, %t8 br i1 %t9, label %range5575, label %inrange5576 range5575: call void @finch_panic_index(ptr @.str.3565, i64 2766, i64 0, i64 %t8) unreachable inrange5576: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 %t12 = getelementptr inbounds %S.ast.Type, ptr %t11, i32 0, i32 0 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.3566, i64 3, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 br i1 %t17, label %then5577, label %endif5579 then5577: %t18 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.3567, i64 1, i64 0 }, ptr %a5 store { ptr, i64, i64 } %t18, ptr %a19 call void @finch_str_drop(ptr %a19) br label %endif5579 endif5579: %t20 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.3568, i64 4, i64 0 }, ptr %a22 store { ptr, i64, i64 } %t20, ptr %a23 call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) %t24 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t24, ptr %a26 store { ptr, i64, i64 } { ptr @.str.3569, i64 6, i64 0 }, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) store { ptr, i64, i64 } %t24, ptr %a28 call void @finch_str_drop(ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a25 %t30 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t29, ptr %a32 store { ptr, i64, i64 } %t30, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) store { ptr, i64, i64 } %t29, ptr %a34 call void @finch_str_drop(ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t35, ptr %a37 store { ptr, i64, i64 } { ptr @.str.3570, i64 6, i64 0 }, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) store { ptr, i64, i64 } %t35, ptr %a39 call void @finch_str_drop(ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a36 %t41 = load ptr, ptr %a1 %t42 = load %S.ast.Type, ptr %a4 %t43 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t41, %S.ast.Type %t42) store { ptr, i64, i64 } %t40, ptr %a45 store { ptr, i64, i64 } %t43, ptr %a46 call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) store { ptr, i64, i64 } %t40, ptr %a47 call void @finch_str_drop(ptr %a47) store { ptr, i64, i64 } %t43, ptr %a48 call void @finch_str_drop(ptr %a48) %t49 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } %t49, ptr %a51 store { ptr, i64, i64 } { ptr @.str.3571, i64 6, i64 0 }, ptr %a52 call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) store { ptr, i64, i64 } %t49, ptr %a53 call void @finch_str_drop(ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a50 %t55 = load ptr, ptr %a1 %t56 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t57 = load { ptr, i64, i64 }, ptr %t56 %t58 = extractvalue { ptr, i64, i64 } %t57, 1 %t59 = icmp uge i64 0, %t58 br i1 %t59, label %range5580, label %inrange5581 range5580: call void @finch_panic_index(ptr @.str.3572, i64 2769, i64 0, i64 %t58) unreachable inrange5581: %t60 = extractvalue { ptr, i64, i64 } %t57, 0 %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i64 0 %t62 = load %S.ast.Type, ptr %t61 %t63 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t55, %S.ast.Type %t62) store { ptr, i64, i64 } %t54, ptr %a65 store { ptr, i64, i64 } %t63, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) store { ptr, i64, i64 } %t54, ptr %a67 call void @finch_str_drop(ptr %a67) store { ptr, i64, i64 } %t63, ptr %a68 call void @finch_str_drop(ptr %a68) %t69 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } %t69, ptr %a71 store { ptr, i64, i64 } { ptr @.str.3573, i64 6, i64 0 }, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) store { ptr, i64, i64 } %t69, ptr %a73 call void @finch_str_drop(ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a70 %t75 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t74, ptr %a77 store { ptr, i64, i64 } %t75, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) store { ptr, i64, i64 } %t74, ptr %a79 call void @finch_str_drop(ptr %a79) %t80 = load { ptr, i64, i64 }, ptr %a76 call void @finch_str_drop(ptr %a5) ret { ptr, i64, i64 } %t80 } define internal { ptr, i64, i64 } @finch.gen.mapFind(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = load ptr, ptr %a1 %t7 = load { ptr, i64, i64 }, ptr %a2 %t8 = load { ptr, i64, i64 }, ptr %a3 %t9 = load %S.ast.Type, ptr %a4 %t10 = call { ptr, i64, i64 } @finch.gen.mapArgs(ptr %t6, { ptr, i64, i64 } %t7, { ptr, i64, i64 } %t8, %S.ast.Type %t9) store { ptr, i64, i64 } { ptr @.str.3574, i64 25, i64 0 }, ptr %a12 store { ptr, i64, i64 } %t10, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) store { ptr, i64, i64 } %t10, ptr %a14 call void @finch_str_drop(ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t15, ptr %a17 store { ptr, i64, i64 } { ptr @.str.3575, i64 1, i64 0 }, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) store { ptr, i64, i64 } %t15, ptr %a19 call void @finch_str_drop(ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a16 %t21 = call { ptr, i64, i64 } @finch.gen.op(ptr %t5, { ptr, i64, i64 } %t20) store { ptr, i64, i64 } %t20, ptr %a22 call void @finch_str_drop(ptr %a22) ret { ptr, i64, i64 } %t21 } define internal { ptr, i64, i64 } @finch.gen.defaultVal(ptr %p0, %S.ast.Type %p1, %S.ast.Node %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a3 = alloca %S.ast.Node, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 store %S.ast.Node %p2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.3576, i64 6, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 br label %logic.from5582 logic.from5582: br i1 %t9, label %logic.rhs5583, label %logic.end5584 logic.rhs5583: %t10 = load ptr, ptr %a1 %t11 = load %S.ast.Type, ptr %a2 %t12 = call i1 @finch.gen.hasDefaults(ptr %t10, %S.ast.Type %t11) br label %logic.rend5585 logic.rend5585: br label %logic.end5584 logic.end5584: %t13 = phi i1 [ false, %logic.from5582 ], [ %t12, %logic.rend5585 ] br i1 %t13, label %then5586, label %endif5588 then5586: store { ptr, i64, i64 } zeroinitializer, ptr %a14 store { ptr, i64, i64 } zeroinitializer, ptr %a15 %t16 = load ptr, ptr %a1 %t17 = load ptr, ptr %a1 %t18 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t21 = load { ptr, i64, i64 }, ptr %t20 %t22 = call i64 @finch.gen.findStruct(ptr %t17, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) %t23 = load { ptr, i64, i64 }, ptr %a14 %t24 = load { ptr, i64, i64 }, ptr %a15 %t25 = load %S.ast.Node, ptr %a3 %t26 = call %S.gen.Val @finch.gen.construct(ptr %t16, i64 %t22, { ptr, i64, i64 } %t23, { ptr, i64, i64 } %t24, %S.ast.Node %t25) %t27 = extractvalue %S.gen.Val %t26, 0 store { ptr, i64, i64 } %t27, ptr %a28 call void @finch_str_copy(ptr %a29, ptr %a28) %t30 = load { ptr, i64, i64 }, ptr %a29 store %S.gen.Val %t26, ptr %a31 call void @finch.drop.S_gen_Val(ptr %a31) call void @finch.drop.arr_str(ptr %a15) call void @finch.drop.arr_S_ast_Node(ptr %a14) ret { ptr, i64, i64 } %t30 endif5588: %t32 = load %S.ast.Type, ptr %a2 %t33 = call { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %t32) ret { ptr, i64, i64 } %t33 } define internal { ptr, i64, i64 } @finch.gen.mapSlot(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.gen.Val %p3, i1 %p4, %S.ast.Node %p5) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca %S.gen.Val, align 16 %a5 = alloca i1, align 16 %a6 = alloca %S.ast.Node, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca %S.ast.Type, align 16 %a125 = alloca %S.ast.Type, align 16 %a130 = alloca %S.gen.Val, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store %S.gen.Val %p3, ptr %a4 store i1 %p4, ptr %a5 store %S.ast.Node %p5, ptr %a6 %t7 = load ptr, ptr %a1 %t8 = load %S.gen.Val, ptr %a4 %t9 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t7, %S.gen.Val %t8) store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t11, { ptr, i64, i64 } { ptr @.str.3577, i64 3, i64 0 }) store { ptr, i64, i64 } %t12, ptr %a13 %t14 = load ptr, ptr %a1 %t15 = load { ptr, i64, i64 }, ptr %a13 call void @finch.gen.store(ptr %t14, { ptr, i64, i64 } { ptr @.str.3578, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3579, i64 1, i64 0 }, { ptr, i64, i64 } %t15) %t16 = load ptr, ptr %a1 %t17 = load ptr, ptr %a1 %t18 = load { ptr, i64, i64 }, ptr %a2 %t19 = load { ptr, i64, i64 }, ptr %a10 %t20 = load %S.ast.Type, ptr %a3 %t21 = call { ptr, i64, i64 } @finch.gen.mapArgs(ptr %t17, { ptr, i64, i64 } %t18, { ptr, i64, i64 } %t19, %S.ast.Type %t20) store { ptr, i64, i64 } { ptr @.str.3580, i64 25, i64 0 }, ptr %a23 store { ptr, i64, i64 } %t21, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) store { ptr, i64, i64 } %t21, ptr %a25 call void @finch_str_drop(ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t26, ptr %a28 store { ptr, i64, i64 } { ptr @.str.3581, i64 6, i64 0 }, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) store { ptr, i64, i64 } %t26, ptr %a30 call void @finch_str_drop(ptr %a30) %t31 = load { ptr, i64, i64 }, ptr %a27 %t32 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t31, ptr %a34 store { ptr, i64, i64 } %t32, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) store { ptr, i64, i64 } %t31, ptr %a36 call void @finch_str_drop(ptr %a36) %t37 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t37, ptr %a39 store { ptr, i64, i64 } { ptr @.str.3582, i64 1, i64 0 }, ptr %a40 call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) store { ptr, i64, i64 } %t37, ptr %a41 call void @finch_str_drop(ptr %a41) %t42 = load { ptr, i64, i64 }, ptr %a38 %t43 = call { ptr, i64, i64 } @finch.gen.op(ptr %t16, { ptr, i64, i64 } %t42) store { ptr, i64, i64 } %t42, ptr %a44 call void @finch_str_drop(ptr %a44) store { ptr, i64, i64 } %t43, ptr %a45 %t46 = load ptr, ptr %a1 %t47 = load { ptr, i64, i64 }, ptr %a2 %t48 = load %S.ast.Type, ptr %a3 %t49 = load { ptr, i64, i64 }, ptr %a45 %t50 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t46, { ptr, i64, i64 } %t47, %S.ast.Type %t48, { ptr, i64, i64 } %t49) store { ptr, i64, i64 } %t50, ptr %a51 %t52 = load ptr, ptr %a1 %t53 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t52, { ptr, i64, i64 } { ptr @.str.3583, i64 7, i64 0 }) store { ptr, i64, i64 } %t53, ptr %a54 %t55 = load ptr, ptr %a1 %t56 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t55, { ptr, i64, i64 } { ptr @.str.3584, i64 8, i64 0 }) store { ptr, i64, i64 } %t56, ptr %a57 %t58 = load ptr, ptr %a1 %t59 = load ptr, ptr %a1 %t60 = load ptr, ptr %a1 %t61 = load { ptr, i64, i64 }, ptr %a13 %t62 = call { ptr, i64, i64 } @finch.gen.load(ptr %t60, { ptr, i64, i64 } { ptr @.str.3586, i64 3, i64 0 }, { ptr, i64, i64 } %t61) store { ptr, i64, i64 } { ptr @.str.3585, i64 12, i64 0 }, ptr %a64 store { ptr, i64, i64 } %t62, ptr %a65 call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) store { ptr, i64, i64 } %t62, ptr %a66 call void @finch_str_drop(ptr %a66) %t67 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } %t67, ptr %a69 store { ptr, i64, i64 } { ptr @.str.3587, i64 3, i64 0 }, ptr %a70 call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) store { ptr, i64, i64 } %t67, ptr %a71 call void @finch_str_drop(ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a68 %t73 = call { ptr, i64, i64 } @finch.gen.op(ptr %t59, { ptr, i64, i64 } %t72) store { ptr, i64, i64 } %t72, ptr %a74 call void @finch_str_drop(ptr %a74) %t75 = load { ptr, i64, i64 }, ptr %a54 %t76 = load { ptr, i64, i64 }, ptr %a57 call void @finch.gen.condBr(ptr %t58, { ptr, i64, i64 } %t73, { ptr, i64, i64 } %t75, { ptr, i64, i64 } %t76) store { ptr, i64, i64 } %t73, ptr %a77 call void @finch_str_drop(ptr %a77) %t78 = load ptr, ptr %a1 %t79 = load { ptr, i64, i64 }, ptr %a54 call void @finch.gen.label(ptr %t78, { ptr, i64, i64 } %t79) %t80 = load ptr, ptr %a1 %t81 = load ptr, ptr %a1 %t82 = load { ptr, i64, i64 }, ptr %a51 %t83 = load %S.ast.Type, ptr %a3 %t84 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t81, { ptr, i64, i64 } %t82, %S.ast.Type %t83, i64 1) %t85 = load { ptr, i64, i64 }, ptr %a10 %t86 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t87 = load { ptr, i64, i64 }, ptr %t86 %t88 = extractvalue { ptr, i64, i64 } %t87, 1 %t89 = icmp uge i64 0, %t88 br i1 %t89, label %range5589, label %inrange5590 range5589: call void @finch_panic_index(ptr @.str.3588, i64 2797, i64 0, i64 %t88) unreachable inrange5590: %t90 = extractvalue { ptr, i64, i64 } %t87, 0 %t91 = getelementptr inbounds %S.ast.Type, ptr %t90, i64 0 %t92 = load %S.ast.Type, ptr %t91 call void @finch.gen.copyAt(ptr %t80, { ptr, i64, i64 } %t84, { ptr, i64, i64 } %t85, %S.ast.Type %t92) store { ptr, i64, i64 } %t84, ptr %a93 call void @finch_str_drop(ptr %a93) %t94 = load i1, ptr %a5 br i1 %t94, label %then5591, label %endif5593 then5591: %t95 = load ptr, ptr %a1 %t96 = load ptr, ptr %a1 %t97 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t98 = load { ptr, i64, i64 }, ptr %t97 %t99 = extractvalue { ptr, i64, i64 } %t98, 1 %t100 = icmp uge i64 1, %t99 br i1 %t100, label %range5594, label %inrange5595 range5594: call void @finch_panic_index(ptr @.str.3589, i64 2799, i64 1, i64 %t99) unreachable inrange5595: %t101 = extractvalue { ptr, i64, i64 } %t98, 0 %t102 = getelementptr inbounds %S.ast.Type, ptr %t101, i64 1 %t103 = load %S.ast.Type, ptr %t102 %t104 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t96, %S.ast.Type %t103) %t105 = load ptr, ptr %a1 %t106 = load ptr, ptr %a1 %t107 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t108 = load { ptr, i64, i64 }, ptr %t107 %t109 = extractvalue { ptr, i64, i64 } %t108, 1 %t110 = icmp uge i64 1, %t109 br i1 %t110, label %range5596, label %inrange5597 range5596: call void @finch_panic_index(ptr @.str.3590, i64 2799, i64 1, i64 %t109) unreachable inrange5597: %t111 = extractvalue { ptr, i64, i64 } %t108, 0 %t112 = getelementptr inbounds %S.ast.Type, ptr %t111, i64 1 %t113 = load %S.ast.Type, ptr %t112 %t114 = load %S.ast.Node, ptr %a6 %t115 = call { ptr, i64, i64 } @finch.gen.defaultVal(ptr %t106, %S.ast.Type %t113, %S.ast.Node %t114) %t116 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t115, 0 %t117 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t118 = load { ptr, i64, i64 }, ptr %t117 %t119 = extractvalue { ptr, i64, i64 } %t118, 1 %t120 = icmp uge i64 1, %t119 br i1 %t120, label %range5598, label %inrange5599 range5598: call void @finch_panic_index(ptr @.str.3591, i64 2799, i64 1, i64 %t119) unreachable inrange5599: %t121 = extractvalue { ptr, i64, i64 } %t118, 0 %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 1 %t123 = load %S.ast.Type, ptr %t122 store %S.ast.Type %t123, ptr %a124 call void @finch.copy.S_ast_Type(ptr %a125, ptr %a124) %t126 = load %S.ast.Type, ptr %a125 %t127 = insertvalue %S.gen.Val %t116, %S.ast.Type %t126, 1 %t128 = insertvalue %S.gen.Val %t127, i1 true, 2 %t129 = call { ptr, i64, i64 } @finch.gen.own(ptr %t105, %S.gen.Val %t128) store %S.gen.Val %t128, ptr %a130 call void @finch.drop.S_gen_Val(ptr %a130) %t131 = load ptr, ptr %a1 %t132 = load { ptr, i64, i64 }, ptr %a51 %t133 = load %S.ast.Type, ptr %a3 %t134 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t131, { ptr, i64, i64 } %t132, %S.ast.Type %t133, i64 2) call void @finch.gen.store(ptr %t95, { ptr, i64, i64 } %t104, { ptr, i64, i64 } %t129, { ptr, i64, i64 } %t134) store { ptr, i64, i64 } %t104, ptr %a135 call void @finch_str_drop(ptr %a135) store { ptr, i64, i64 } %t129, ptr %a136 call void @finch_str_drop(ptr %a136) store { ptr, i64, i64 } %t134, ptr %a137 call void @finch_str_drop(ptr %a137) br label %endif5593 endif5593: %t138 = load ptr, ptr %a1 %t139 = load { ptr, i64, i64 }, ptr %a57 call void @finch.gen.br(ptr %t138, { ptr, i64, i64 } %t139) %t140 = load ptr, ptr %a1 %t141 = load { ptr, i64, i64 }, ptr %a57 call void @finch.gen.label(ptr %t140, { ptr, i64, i64 } %t141) %t142 = load { ptr, i64, i64 }, ptr %a51 call void @finch_str_drop(ptr %a57) call void @finch_str_drop(ptr %a54) call void @finch_str_drop(ptr %a45) call void @finch_str_drop(ptr %a13) call void @finch_str_drop(ptr %a10) ret { ptr, i64, i64 } %t142 } define internal %S.gen.Ref @finch.gen.mapIndex(ptr %p0, %S.ast.Node %p1, %S.gen.Ref %p2, %S.ast.Type %p3, i1 %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.gen.Ref, align 16 %a4 = alloca %S.ast.Type, align 16 %a5 = alloca i1, align 16 %a13 = alloca %S.ast.Type, align 16 %a14 = alloca %S.ast.Type, align 16 %a16 = alloca %S.ast.Type, align 16 %a24 = alloca %S.ast.Type, align 16 %a25 = alloca %S.ast.Type, align 16 %a27 = alloca %S.ast.Type, align 16 %a48 = alloca %S.gen.Val, align 16 %a49 = alloca %S.gen.Val, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca %S.ast.Type, align 16 %a75 = alloca %S.ast.Type, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca %S.ast.Type, align 16 %a220 = alloca %S.ast.Type, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca %S.ast.Type, align 16 %a239 = alloca %S.ast.Type, align 16 %a242 = alloca %S.gen.Val, align 16 %a256 = alloca %S.ast.Type, align 16 %a257 = alloca %S.ast.Type, align 16 %a262 = alloca %S.gen.Val, align 16 %a268 = alloca %S.gen.Val, align 16 %a269 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.gen.Ref %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 store i1 %p4, ptr %a5 %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %t6 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 0, %t8 br i1 %t9, label %range5600, label %inrange5601 range5600: call void @finch_panic_index(ptr @.str.3592, i64 2808, i64 0, i64 %t8) unreachable inrange5601: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 %t12 = load %S.ast.Type, ptr %t11 store %S.ast.Type %t12, ptr %a13 call void @finch.copy.S_ast_Type(ptr %a14, ptr %a13) %t15 = load %S.ast.Type, ptr %a14 store %S.ast.Type %t15, ptr %a16 %t17 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t18 = load { ptr, i64, i64 }, ptr %t17 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 1, %t19 br i1 %t20, label %range5602, label %inrange5603 range5602: call void @finch_panic_index(ptr @.str.3593, i64 2809, i64 1, i64 %t19) unreachable inrange5603: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.ast.Type, ptr %t21, i64 1 %t23 = load %S.ast.Type, ptr %t22 store %S.ast.Type %t23, ptr %a24 call void @finch.copy.S_ast_Type(ptr %a25, ptr %a24) %t26 = load %S.ast.Type, ptr %a25 store %S.ast.Type %t26, ptr %a27 %t28 = load ptr, ptr %a1 %t29 = load ptr, ptr %a1 %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t31 = load { ptr, i64, i64 }, ptr %t30 %t32 = extractvalue { ptr, i64, i64 } %t31, 1 %t33 = icmp uge i64 1, %t32 br i1 %t33, label %range5604, label %inrange5605 range5604: call void @finch_panic_index(ptr @.str.3594, i64 2810, i64 1, i64 %t32) unreachable inrange5605: %t34 = extractvalue { ptr, i64, i64 } %t31, 0 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 1 %t36 = load %S.ast.Node, ptr %t35 %t37 = load %S.ast.Type, ptr %a16 %t38 = call %S.gen.Val @finch.gen.exprWant(ptr %t29, %S.ast.Node %t36, %S.ast.Type %t37) %t39 = load %S.ast.Type, ptr %a16 %t40 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t41 = load { ptr, i64, i64 }, ptr %t40 %t42 = extractvalue { ptr, i64, i64 } %t41, 1 %t43 = icmp uge i64 1, %t42 br i1 %t43, label %range5606, label %inrange5607 range5606: call void @finch_panic_index(ptr @.str.3595, i64 2810, i64 1, i64 %t42) unreachable inrange5607: %t44 = extractvalue { ptr, i64, i64 } %t41, 0 %t45 = getelementptr inbounds %S.ast.Node, ptr %t44, i64 1 %t46 = load %S.ast.Node, ptr %t45 %t47 = call %S.gen.Val @finch.gen.coerce(ptr %t28, %S.gen.Val %t38, %S.ast.Type %t39, %S.ast.Node %t46, { ptr, i64, i64 } { ptr @.str.3596, i64 7, i64 0 }) store %S.gen.Val %t38, ptr %a48 call void @finch.drop.S_gen_Val(ptr %a48) store %S.gen.Val %t47, ptr %a49 %t50 = load i1, ptr %a5 br i1 %t50, label %then5608, label %endif5610 then5608: %t51 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t52 = load i1, ptr %t51 %t53 = xor i1 %t52, true br i1 %t53, label %then5611, label %endif5613 then5611: %t54 = load ptr, ptr %a1 %t55 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t54, %S.ast.Node %t55, { ptr, i64, i64 } { ptr @.str.3597, i64 44, i64 0 }) br label %endif5613 endif5613: %t56 = load ptr, ptr %a1 %t57 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t58 = getelementptr inbounds %S.gen.Place, ptr %t57, i32 0, i32 0 %t59 = load { ptr, i64, i64 }, ptr %t58 %t60 = load %S.ast.Type, ptr %a4 %t61 = load %S.gen.Val, ptr %a49 %t62 = load %S.ast.Node, ptr %a2 %t63 = call { ptr, i64, i64 } @finch.gen.mapSlot(ptr %t56, { ptr, i64, i64 } %t59, %S.ast.Type %t60, %S.gen.Val %t61, i1 true, %S.ast.Node %t62) store { ptr, i64, i64 } %t63, ptr %a64 %t65 = load ptr, ptr %a1 %t66 = load %S.gen.Val, ptr %a49 call void @finch.gen.release(ptr %t65, %S.gen.Val %t66) %t67 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t68 = load ptr, ptr %a1 %t69 = load { ptr, i64, i64 }, ptr %a64 %t70 = load %S.ast.Type, ptr %a4 %t71 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t68, { ptr, i64, i64 } %t69, %S.ast.Type %t70, i64 2) %t72 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t71, 0 %t73 = load %S.ast.Type, ptr %a27 store %S.ast.Type %t73, ptr %a74 call void @finch.copy.S_ast_Type(ptr %a75, ptr %a74) %t76 = load %S.ast.Type, ptr %a75 %t77 = insertvalue %S.gen.Place %t72, %S.ast.Type %t76, 1 %t78 = insertvalue %S.gen.Ref %t67, %S.gen.Place %t77, 1 call void @finch_str_drop(ptr %a64) call void @finch.drop.S_gen_Val(ptr %a49) call void @finch.drop.S_ast_Type(ptr %a27) call void @finch.drop.S_ast_Type(ptr %a16) ret %S.gen.Ref %t78 endif5610: store { ptr, i64, i64 } { ptr @.str.3598, i64 0, i64 0 }, ptr %a79 %t80 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t81 = load i1, ptr %t80 br i1 %t81, label %then5614, label %else5615 then5614: %t82 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t83 = getelementptr inbounds %S.gen.Place, ptr %t82, i32 0, i32 0 %t84 = load { ptr, i64, i64 }, ptr %t83 store { ptr, i64, i64 } %t84, ptr %a85 call void @finch_str_copy(ptr %a86, ptr %a85) %t87 = load { ptr, i64, i64 }, ptr %a86 %t88 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } %t87, ptr %a79 store { ptr, i64, i64 } %t88, ptr %a89 call void @finch_str_drop(ptr %a89) br label %endif5616 else5615: %t90 = load ptr, ptr %a1 %t91 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t92 = load %S.gen.Val, ptr %t91 %t93 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t90, %S.gen.Val %t92) %t94 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } %t93, ptr %a79 store { ptr, i64, i64 } %t94, ptr %a95 call void @finch_str_drop(ptr %a95) br label %endif5616 endif5616: %t96 = load ptr, ptr %a1 %t97 = load %S.gen.Val, ptr %a49 %t98 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t96, %S.gen.Val %t97) store { ptr, i64, i64 } %t98, ptr %a99 %t100 = load ptr, ptr %a1 %t101 = load { ptr, i64, i64 }, ptr %a79 %t102 = load { ptr, i64, i64 }, ptr %a99 %t103 = load %S.ast.Type, ptr %a4 %t104 = call { ptr, i64, i64 } @finch.gen.mapFind(ptr %t100, { ptr, i64, i64 } %t101, { ptr, i64, i64 } %t102, %S.ast.Type %t103) store { ptr, i64, i64 } %t104, ptr %a105 %t106 = load ptr, ptr %a1 %t107 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t106, { ptr, i64, i64 } { ptr @.str.3599, i64 11, i64 0 }) store { ptr, i64, i64 } %t107, ptr %a108 %t109 = load ptr, ptr %a1 %t110 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t109, { ptr, i64, i64 } { ptr @.str.3600, i64 9, i64 0 }) store { ptr, i64, i64 } %t110, ptr %a111 %t112 = load ptr, ptr %a1 %t113 = load ptr, ptr %a1 %t114 = load { ptr, i64, i64 }, ptr %a105 store { ptr, i64, i64 } { ptr @.str.3601, i64 13, i64 0 }, ptr %a116 store { ptr, i64, i64 } %t114, ptr %a117 call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) %t118 = load { ptr, i64, i64 }, ptr %a115 store { ptr, i64, i64 } %t118, ptr %a120 store { ptr, i64, i64 } { ptr @.str.3602, i64 3, i64 0 }, ptr %a121 call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) store { ptr, i64, i64 } %t118, ptr %a122 call void @finch_str_drop(ptr %a122) %t123 = load { ptr, i64, i64 }, ptr %a119 %t124 = call { ptr, i64, i64 } @finch.gen.op(ptr %t113, { ptr, i64, i64 } %t123) store { ptr, i64, i64 } %t123, ptr %a125 call void @finch_str_drop(ptr %a125) %t126 = load { ptr, i64, i64 }, ptr %a108 %t127 = load { ptr, i64, i64 }, ptr %a111 call void @finch.gen.condBr(ptr %t112, { ptr, i64, i64 } %t124, { ptr, i64, i64 } %t126, { ptr, i64, i64 } %t127) store { ptr, i64, i64 } %t124, ptr %a128 call void @finch_str_drop(ptr %a128) %t129 = load ptr, ptr %a1 %t130 = load { ptr, i64, i64 }, ptr %a108 call void @finch.gen.label(ptr %t129, { ptr, i64, i64 } %t130) %t131 = load ptr, ptr %a1 %t132 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t131, { ptr, i64, i64 } { ptr @.str.3603, i64 17, i64 0 }) store { ptr, i64, i64 } %t132, ptr %a133 %t134 = load ptr, ptr %a1 %t135 = load { ptr, i64, i64 }, ptr %a133 call void @finch.gen.store(ptr %t134, { ptr, i64, i64 } { ptr @.str.3604, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.3605, i64 15, i64 0 }, { ptr, i64, i64 } %t135) %t136 = load ptr, ptr %a1 %t137 = load { ptr, i64, i64 }, ptr %a133 %t138 = getelementptr inbounds %S.gen.Val, ptr %a49, i32 0, i32 0 %t139 = load { ptr, i64, i64 }, ptr %t138 %t140 = load %S.ast.Type, ptr %a16 call void @finch.gen.emitFormat(ptr %t136, { ptr, i64, i64 } %t137, { ptr, i64, i64 } %t139, %S.ast.Type %t140, i1 true) %t141 = load ptr, ptr %a1 %t142 = load ptr, ptr %a1 %t143 = load ptr, ptr %a1 %t144 = icmp eq ptr %t143, null br i1 %t144, label %panic5617, label %ok5618 panic5617: call void @finch_panic(ptr @.str.3607, i64 2834, ptr @.str.3608) unreachable ok5618: %t145 = getelementptr inbounds %S.gen.Gen, ptr %t143, i32 0, i32 1 %t146 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t147 = load i64, ptr %t146 %t148 = load { ptr, i64, i64 }, ptr %t145 %t149 = extractvalue { ptr, i64, i64 } %t148, 1 %t150 = icmp uge i64 %t147, %t149 br i1 %t150, label %range5619, label %inrange5620 range5619: call void @finch_panic_index(ptr @.str.3609, i64 2834, i64 %t147, i64 %t149) unreachable inrange5620: %t151 = extractvalue { ptr, i64, i64 } %t148, 0 %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i64 %t147 %t153 = load { ptr, i64, i64 }, ptr %t152 %t154 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t142, { ptr, i64, i64 } %t153) store { ptr, i64, i64 } { ptr @.str.3606, i64 33, i64 0 }, ptr %a156 store { ptr, i64, i64 } %t154, ptr %a157 call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) store { ptr, i64, i64 } %t154, ptr %a158 call void @finch_str_drop(ptr %a158) %t159 = load { ptr, i64, i64 }, ptr %a155 store { ptr, i64, i64 } %t159, ptr %a161 store { ptr, i64, i64 } { ptr @.str.3610, i64 6, i64 0 }, ptr %a162 call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) store { ptr, i64, i64 } %t159, ptr %a163 call void @finch_str_drop(ptr %a163) %t164 = load { ptr, i64, i64 }, ptr %a160 %t165 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t166 = load i64, ptr %t165 call void @finch_str_from_int(ptr %a167, i64 %t166) %t168 = load { ptr, i64, i64 }, ptr %a167 store { ptr, i64, i64 } %t164, ptr %a170 store { ptr, i64, i64 } %t168, ptr %a171 call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) store { ptr, i64, i64 } %t164, ptr %a172 call void @finch_str_drop(ptr %a172) store { ptr, i64, i64 } %t168, ptr %a173 call void @finch_str_drop(ptr %a173) %t174 = load { ptr, i64, i64 }, ptr %a169 store { ptr, i64, i64 } %t174, ptr %a176 store { ptr, i64, i64 } { ptr @.str.3611, i64 6, i64 0 }, ptr %a177 call void @finch_str_concat(ptr %a175, ptr %a176, ptr %a177) store { ptr, i64, i64 } %t174, ptr %a178 call void @finch_str_drop(ptr %a178) %t179 = load { ptr, i64, i64 }, ptr %a175 %t180 = load { ptr, i64, i64 }, ptr %a133 store { ptr, i64, i64 } %t179, ptr %a182 store { ptr, i64, i64 } %t180, ptr %a183 call void @finch_str_concat(ptr %a181, ptr %a182, ptr %a183) store { ptr, i64, i64 } %t179, ptr %a184 call void @finch_str_drop(ptr %a184) %t185 = load { ptr, i64, i64 }, ptr %a181 store { ptr, i64, i64 } %t185, ptr %a187 store { ptr, i64, i64 } { ptr @.str.3612, i64 1, i64 0 }, ptr %a188 call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) store { ptr, i64, i64 } %t185, ptr %a189 call void @finch_str_drop(ptr %a189) %t190 = load { ptr, i64, i64 }, ptr %a186 call void @finch.gen.emit(ptr %t141, { ptr, i64, i64 } %t190) store { ptr, i64, i64 } %t190, ptr %a191 call void @finch_str_drop(ptr %a191) %t192 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t192, { ptr, i64, i64 } { ptr @.str.3613, i64 11, i64 0 }) %t193 = load ptr, ptr %a1 %t194 = icmp eq ptr %t193, null br i1 %t194, label %panic5621, label %ok5622 panic5621: call void @finch_panic(ptr @.str.3614, i64 2836, ptr @.str.3615) unreachable ok5622: %t195 = getelementptr inbounds %S.gen.Gen, ptr %t193, i32 0, i32 9 store i1 true, ptr %t195 %t196 = load ptr, ptr %a1 %t197 = load { ptr, i64, i64 }, ptr %a111 call void @finch.gen.label(ptr %t196, { ptr, i64, i64 } %t197) %t198 = load ptr, ptr %a1 %t199 = load %S.gen.Val, ptr %a49 call void @finch.gen.release(ptr %t198, %S.gen.Val %t199) %t200 = load ptr, ptr %a1 %t201 = load ptr, ptr %a1 %t202 = load { ptr, i64, i64 }, ptr %a79 %t203 = load %S.ast.Type, ptr %a4 %t204 = load { ptr, i64, i64 }, ptr %a105 %t205 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t201, { ptr, i64, i64 } %t202, %S.ast.Type %t203, { ptr, i64, i64 } %t204) %t206 = load %S.ast.Type, ptr %a4 %t207 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t200, { ptr, i64, i64 } %t205, %S.ast.Type %t206, i64 2) store { ptr, i64, i64 } %t205, ptr %a208 call void @finch_str_drop(ptr %a208) store { ptr, i64, i64 } %t207, ptr %a209 %t210 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t211 = load i1, ptr %t210 br i1 %t211, label %then5623, label %endif5625 then5623: %t212 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t213 = load { ptr, i64, i64 }, ptr %a209 store { ptr, i64, i64 } %t213, ptr %a214 call void @finch_str_copy(ptr %a215, ptr %a214) %t216 = load { ptr, i64, i64 }, ptr %a215 %t217 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t216, 0 %t218 = load %S.ast.Type, ptr %a27 store %S.ast.Type %t218, ptr %a219 call void @finch.copy.S_ast_Type(ptr %a220, ptr %a219) %t221 = load %S.ast.Type, ptr %a220 %t222 = insertvalue %S.gen.Place %t217, %S.ast.Type %t221, 1 %t223 = insertvalue %S.gen.Ref %t212, %S.gen.Place %t222, 1 call void @finch_str_drop(ptr %a209) call void @finch_str_drop(ptr %a133) call void @finch_str_drop(ptr %a111) call void @finch_str_drop(ptr %a108) call void @finch_str_drop(ptr %a105) call void @finch_str_drop(ptr %a99) call void @finch_str_drop(ptr %a79) call void @finch.drop.S_gen_Val(ptr %a49) call void @finch.drop.S_ast_Type(ptr %a27) call void @finch.drop.S_ast_Type(ptr %a16) ret %S.gen.Ref %t223 endif5625: %t224 = load ptr, ptr %a1 %t225 = load ptr, ptr %a1 %t226 = load %S.ast.Type, ptr %a27 %t227 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t225, %S.ast.Type %t226) %t228 = load { ptr, i64, i64 }, ptr %a209 %t229 = call { ptr, i64, i64 } @finch.gen.load(ptr %t224, { ptr, i64, i64 } %t227, { ptr, i64, i64 } %t228) store { ptr, i64, i64 } %t227, ptr %a230 call void @finch_str_drop(ptr %a230) store { ptr, i64, i64 } %t229, ptr %a231 %t232 = load { ptr, i64, i64 }, ptr %a231 store { ptr, i64, i64 } %t232, ptr %a233 call void @finch_str_copy(ptr %a234, ptr %a233) %t235 = load { ptr, i64, i64 }, ptr %a234 %t236 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t235, 0 %t237 = load %S.ast.Type, ptr %a27 store %S.ast.Type %t237, ptr %a238 call void @finch.copy.S_ast_Type(ptr %a239, ptr %a238) %t240 = load %S.ast.Type, ptr %a239 %t241 = insertvalue %S.gen.Val %t236, %S.ast.Type %t240, 1 store %S.gen.Val %t241, ptr %a242 %t243 = load ptr, ptr %a1 %t244 = load %S.ast.Type, ptr %a27 %t245 = call i1 @finch.gen.owning(ptr %t243, %S.ast.Type %t244) br label %logic.from5626 logic.from5626: br i1 %t245, label %logic.rhs5627, label %logic.end5628 logic.rhs5627: %t246 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t247 = getelementptr inbounds %S.gen.Val, ptr %t246, i32 0, i32 2 %t248 = load i1, ptr %t247 br label %logic.rend5629 logic.rend5629: br label %logic.end5628 logic.end5628: %t249 = phi i1 [ false, %logic.from5626 ], [ %t248, %logic.rend5629 ] br i1 %t249, label %then5630, label %endif5632 then5630: %t250 = load ptr, ptr %a1 %t251 = load { ptr, i64, i64 }, ptr %a231 %t252 = load %S.ast.Type, ptr %a27 %t253 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t250, { ptr, i64, i64 } %t251, %S.ast.Type %t252) %t254 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t253, 0 %t255 = load %S.ast.Type, ptr %a27 store %S.ast.Type %t255, ptr %a256 call void @finch.copy.S_ast_Type(ptr %a257, ptr %a256) %t258 = load %S.ast.Type, ptr %a257 %t259 = insertvalue %S.gen.Val %t254, %S.ast.Type %t258, 1 %t260 = insertvalue %S.gen.Val %t259, i1 true, 2 %t261 = load %S.gen.Val, ptr %a242 store %S.gen.Val %t260, ptr %a242 store %S.gen.Val %t261, ptr %a262 call void @finch.drop.S_gen_Val(ptr %a262) br label %endif5632 endif5632: %t263 = load ptr, ptr %a1 %t264 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t265 = load %S.gen.Val, ptr %t264 call void @finch.gen.release(ptr %t263, %S.gen.Val %t265) %t266 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t267 = load %S.gen.Val, ptr %a242 store %S.gen.Val %t267, ptr %a268 call void @finch.copy.S_gen_Val(ptr %a269, ptr %a268) %t270 = load %S.gen.Val, ptr %a269 %t271 = insertvalue %S.gen.Ref %t266, %S.gen.Val %t270, 2 call void @finch.drop.S_gen_Val(ptr %a242) call void @finch_str_drop(ptr %a231) call void @finch_str_drop(ptr %a209) call void @finch_str_drop(ptr %a133) call void @finch_str_drop(ptr %a111) call void @finch_str_drop(ptr %a108) call void @finch_str_drop(ptr %a105) call void @finch_str_drop(ptr %a99) call void @finch_str_drop(ptr %a79) call void @finch.drop.S_gen_Val(ptr %a49) call void @finch.drop.S_ast_Type(ptr %a27) call void @finch.drop.S_ast_Type(ptr %a16) ret %S.gen.Ref %t271 } define internal %S.gen.Val @finch.gen.mapLit(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.ast.Type, align 16 %a5 = alloca %S.ast.Type, align 16 %a6 = alloca %S.ast.Type, align 16 %a8 = alloca %S.ast.Type, align 16 %a9 = alloca i1, align 16 %a10 = alloca %S.gen.Val, align 16 %a11 = alloca %S.gen.Val, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca i1, align 16 %a25 = alloca i1, align 16 %a30 = alloca i64, align 16 %a43 = alloca %S.ast.Node, align 16 %a44 = alloca %S.ast.Node, align 16 %a46 = alloca %S.ast.Node, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca %S.ast.Node, align 16 %a68 = alloca %S.ast.Node, align 16 %a71 = alloca %S.ast.Node, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca %S.gen.Val, align 16 %a107 = alloca %S.gen.Val, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca %S.ast.Type, align 16 %a157 = alloca %S.ast.Type, align 16 %a159 = alloca %S.ast.Type, align 16 %a165 = alloca %S.ast.Type, align 16 %a171 = alloca %S.ast.Type, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca i64, align 16 %a198 = alloca i64, align 16 %a206 = alloca i64, align 16 %a208 = alloca %S.gen.Val, align 16 %a209 = alloca %S.gen.Val, align 16 %a211 = alloca %S.gen.Val, align 16 %a236 = alloca %S.gen.Val, align 16 %a257 = alloca %S.gen.Val, align 16 %a261 = alloca %S.gen.Val, align 16 %a262 = alloca %S.gen.Val, align 16 %a264 = alloca %S.gen.Val, align 16 %a290 = alloca %S.gen.Val, align 16 %a312 = alloca %S.gen.Val, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca %S.ast.Type, align 16 %a369 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 %t4 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t4, ptr %a5 call void @finch.copy.S_ast_Type(ptr %a6, ptr %a5) %t7 = load %S.ast.Type, ptr %a6 store %S.ast.Type %t7, ptr %a8 store i1 false, ptr %a9 store %S.gen.Val zeroinitializer, ptr %a10 store %S.gen.Val zeroinitializer, ptr %a11 %t12 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.3616, i64 3, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp eq i32 %t16, 0 br i1 %t17, label %then5633, label %endif5635 then5633: %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i32 0, i32 1 %t20 = load i64, ptr %t19 %t21 = icmp eq i64 %t20, 0 br i1 %t21, label %then5636, label %endif5638 then5636: %t22 = load ptr, ptr %a1 %t23 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t22, %S.ast.Node %t23, { ptr, i64, i64 } { ptr @.str.3617, i64 52, i64 0 }) br label %endif5638 endif5638: store i1 true, ptr %a24 store i1 false, ptr %a25 %t26 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i32 0, i32 1 %t28 = load i64, ptr %t27 %t29 = sdiv i64 %t28, 2 store i64 0, ptr %a30 br label %for.cond5639 for.cond5639: %t31 = load i64, ptr %a30 %t32 = icmp slt i64 %t31, %t29 br i1 %t32, label %for.body5640, label %for.end5642 for.body5640: %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t34 = load i64, ptr %a30 %t35 = mul i64 2, %t34 %t36 = add i64 %t35, 1 %t37 = load { ptr, i64, i64 }, ptr %t33 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 br i1 %t39, label %range5643, label %inrange5644 range5643: call void @finch_panic_index(ptr @.str.3618, i64 2866, i64 %t36, i64 %t38) unreachable inrange5644: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 %t42 = load %S.ast.Node, ptr %t41 store %S.ast.Node %t42, ptr %a43 call void @finch.copy.S_ast_Node(ptr %a44, ptr %a43) %t45 = load %S.ast.Node, ptr %a44 store %S.ast.Node %t45, ptr %a46 %t47 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 %t48 = load { ptr, i64, i64 }, ptr %t47 store { ptr, i64, i64 } %t48, ptr %a49 store { ptr, i64, i64 } { ptr @.str.3619, i64 5, i64 0 }, ptr %a50 %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) %t52 = icmp ne i32 %t51, 0 br label %logic.from5645 logic.from5645: br i1 %t52, label %logic.rhs5646, label %logic.end5647 logic.rhs5646: %t53 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 1 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t54, ptr %a55 store { ptr, i64, i64 } { ptr @.str.3620, i64 1, i64 0 }, ptr %a56 %t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56) %t58 = icmp ne i32 %t57, 0 br label %logic.rend5648 logic.rend5648: br label %logic.end5647 logic.end5647: %t59 = phi i1 [ false, %logic.from5645 ], [ %t58, %logic.rend5648 ] br i1 %t59, label %then5649, label %endif5651 then5649: %t60 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 9 %t61 = load { ptr, i64, i64 }, ptr %t60 %t62 = extractvalue { ptr, i64, i64 } %t61, 1 %t63 = icmp uge i64 0, %t62 br i1 %t63, label %range5652, label %inrange5653 range5652: call void @finch_panic_index(ptr @.str.3621, i64 2868, i64 0, i64 %t62) unreachable inrange5653: %t64 = extractvalue { ptr, i64, i64 } %t61, 0 %t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 0 %t66 = load %S.ast.Node, ptr %t65 store %S.ast.Node %t66, ptr %a67 call void @finch.copy.S_ast_Node(ptr %a68, ptr %a67) %t69 = load %S.ast.Node, ptr %a68 %t70 = load %S.ast.Node, ptr %a46 store %S.ast.Node %t69, ptr %a46 store %S.ast.Node %t70, ptr %a71 call void @finch.drop.S_ast_Node(ptr %a71) br label %endif5651 endif5651: %t72 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 %t73 = load { ptr, i64, i64 }, ptr %t72 store { ptr, i64, i64 } %t73, ptr %a74 store { ptr, i64, i64 } { ptr @.str.3622, i64 5, i64 0 }, ptr %a75 %t76 = call i32 @finch_str_eq(ptr %a74, ptr %a75) %t77 = icmp ne i32 %t76, 0 br i1 %t77, label %then5654, label %else5655 then5654: store i1 true, ptr %a25 br label %endif5656 else5655: %t78 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 %t79 = load { ptr, i64, i64 }, ptr %t78 store { ptr, i64, i64 } %t79, ptr %a80 store { ptr, i64, i64 } { ptr @.str.3623, i64 3, i64 0 }, ptr %a81 %t82 = call i32 @finch_str_eq(ptr %a80, ptr %a81) %t83 = icmp eq i32 %t82, 0 br i1 %t83, label %then5657, label %endif5659 then5657: store i1 false, ptr %a24 br label %endif5659 endif5659: br label %endif5656 endif5656: call void @finch.drop.S_ast_Node(ptr %a46) br label %for.step5641 for.step5641: %t84 = load i64, ptr %a30 %t85 = add i64 %t84, 1 store i64 %t85, ptr %a30 br label %for.cond5639 for.end5642: %t86 = load ptr, ptr %a1 %t87 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t88 = load { ptr, i64, i64 }, ptr %t87 %t89 = extractvalue { ptr, i64, i64 } %t88, 1 %t90 = icmp uge i64 0, %t89 br i1 %t90, label %range5660, label %inrange5661 range5660: call void @finch_panic_index(ptr @.str.3624, i64 2876, i64 0, i64 %t89) unreachable inrange5661: %t91 = extractvalue { ptr, i64, i64 } %t88, 0 %t92 = getelementptr inbounds %S.ast.Node, ptr %t91, i64 0 %t93 = load %S.ast.Node, ptr %t92 %t94 = call %S.gen.Val @finch.gen.expr(ptr %t86, %S.ast.Node %t93) %t95 = load %S.gen.Val, ptr %a10 store %S.gen.Val %t94, ptr %a10 store %S.gen.Val %t95, ptr %a96 call void @finch.drop.S_gen_Val(ptr %a96) %t97 = load ptr, ptr %a1 %t98 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t99 = load { ptr, i64, i64 }, ptr %t98 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 1, %t100 br i1 %t101, label %range5662, label %inrange5663 range5662: call void @finch_panic_index(ptr @.str.3625, i64 2877, i64 1, i64 %t100) unreachable inrange5663: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.ast.Node, ptr %t102, i64 1 %t104 = load %S.ast.Node, ptr %t103 %t105 = call %S.gen.Val @finch.gen.expr(ptr %t97, %S.ast.Node %t104) %t106 = load %S.gen.Val, ptr %a11 store %S.gen.Val %t105, ptr %a11 store %S.gen.Val %t106, ptr %a107 call void @finch.drop.S_gen_Val(ptr %a107) %t108 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t109 = getelementptr inbounds %S.ast.Type, ptr %t108, i32 0, i32 0 %t110 = load { ptr, i64, i64 }, ptr %t109 store { ptr, i64, i64 } %t110, ptr %a111 store { ptr, i64, i64 } { ptr @.str.3626, i64 4, i64 0 }, ptr %a112 %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) %t114 = icmp ne i32 %t113, 0 br label %logic.from5664 logic.from5664: br i1 %t114, label %logic.end5666, label %logic.rhs5665 logic.rhs5665: %t115 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t116 = getelementptr inbounds %S.ast.Type, ptr %t115, i32 0, i32 0 %t117 = load { ptr, i64, i64 }, ptr %t116 store { ptr, i64, i64 } %t117, ptr %a118 store { ptr, i64, i64 } { ptr @.str.3627, i64 4, i64 0 }, ptr %a119 %t120 = call i32 @finch_str_eq(ptr %a118, ptr %a119) %t121 = icmp ne i32 %t120, 0 br label %logic.rend5667 logic.rend5667: br label %logic.end5666 logic.end5666: %t122 = phi i1 [ true, %logic.from5664 ], [ %t121, %logic.rend5667 ] br i1 %t122, label %then5668, label %endif5670 then5668: %t123 = load ptr, ptr %a1 %t124 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t125 = load { ptr, i64, i64 }, ptr %t124 %t126 = extractvalue { ptr, i64, i64 } %t125, 1 %t127 = icmp uge i64 0, %t126 br i1 %t127, label %range5671, label %inrange5672 range5671: call void @finch_panic_index(ptr @.str.3628, i64 2879, i64 0, i64 %t126) unreachable inrange5672: %t128 = extractvalue { ptr, i64, i64 } %t125, 0 %t129 = getelementptr inbounds %S.ast.Node, ptr %t128, i64 0 %t130 = load %S.ast.Node, ptr %t129 call void @finch.gen.fail(ptr %t123, %S.ast.Node %t130, { ptr, i64, i64 } { ptr @.str.3629, i64 35, i64 0 }) br label %endif5670 endif5670: %t131 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 %t133 = load { ptr, i64, i64 }, ptr %t132 store { ptr, i64, i64 } %t133, ptr %a134 store { ptr, i64, i64 } { ptr @.str.3630, i64 4, i64 0 }, ptr %a135 %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) %t137 = icmp ne i32 %t136, 0 br label %logic.from5673 logic.from5673: br i1 %t137, label %logic.end5675, label %logic.rhs5674 logic.rhs5674: %t138 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 %t139 = getelementptr inbounds %S.ast.Type, ptr %t138, i32 0, i32 0 %t140 = load { ptr, i64, i64 }, ptr %t139 store { ptr, i64, i64 } %t140, ptr %a141 store { ptr, i64, i64 } { ptr @.str.3631, i64 4, i64 0 }, ptr %a142 %t143 = call i32 @finch_str_eq(ptr %a141, ptr %a142) %t144 = icmp ne i32 %t143, 0 br label %logic.rend5676 logic.rend5676: br label %logic.end5675 logic.end5675: %t145 = phi i1 [ true, %logic.from5673 ], [ %t144, %logic.rend5676 ] br i1 %t145, label %then5677, label %endif5679 then5677: %t146 = load ptr, ptr %a1 %t147 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t148 = load { ptr, i64, i64 }, ptr %t147 %t149 = extractvalue { ptr, i64, i64 } %t148, 1 %t150 = icmp uge i64 1, %t149 br i1 %t150, label %range5680, label %inrange5681 range5680: call void @finch_panic_index(ptr @.str.3632, i64 2882, i64 1, i64 %t149) unreachable inrange5681: %t151 = extractvalue { ptr, i64, i64 } %t148, 0 %t152 = getelementptr inbounds %S.ast.Node, ptr %t151, i64 1 %t153 = load %S.ast.Node, ptr %t152 call void @finch.gen.fail(ptr %t146, %S.ast.Node %t153, { ptr, i64, i64 } { ptr @.str.3633, i64 37, i64 0 }) br label %endif5679 endif5679: %t154 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 %t155 = load %S.ast.Type, ptr %t154 store %S.ast.Type %t155, ptr %a156 call void @finch.copy.S_ast_Type(ptr %a157, ptr %a156) %t158 = load %S.ast.Type, ptr %a157 store %S.ast.Type %t158, ptr %a159 %t160 = load i1, ptr %a24 br label %logic.from5682 logic.from5682: br i1 %t160, label %logic.rhs5683, label %logic.end5684 logic.rhs5683: %t161 = load i1, ptr %a25 br label %logic.rend5685 logic.rend5685: br label %logic.end5684 logic.end5684: %t162 = phi i1 [ false, %logic.from5682 ], [ %t161, %logic.rend5685 ] br i1 %t162, label %then5686, label %endif5688 then5686: %t163 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3634, i64 5, i64 0 }) %t164 = load %S.ast.Type, ptr %a159 store %S.ast.Type %t163, ptr %a159 store %S.ast.Type %t164, ptr %a165 call void @finch.drop.S_ast_Type(ptr %a165) br label %endif5688 endif5688: %t166 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t167 = load %S.ast.Type, ptr %t166 %t168 = load %S.ast.Type, ptr %a159 %t169 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t167, %S.ast.Type %t168) %t170 = load %S.ast.Type, ptr %a8 store %S.ast.Type %t169, ptr %a8 store %S.ast.Type %t170, ptr %a171 call void @finch.drop.S_ast_Type(ptr %a171) store i1 true, ptr %a9 call void @finch.drop.S_ast_Type(ptr %a159) br label %endif5635 endif5635: %t172 = load ptr, ptr %a1 %t173 = load ptr, ptr %a1 %t174 = load %S.ast.Type, ptr %a8 %t175 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t173, %S.ast.Type %t174) %t176 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t172, { ptr, i64, i64 } %t175) store { ptr, i64, i64 } %t175, ptr %a177 call void @finch_str_drop(ptr %a177) store { ptr, i64, i64 } %t176, ptr %a178 %t179 = load ptr, ptr %a1 %t180 = load ptr, ptr %a1 %t181 = load %S.ast.Type, ptr %a8 %t182 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t180, %S.ast.Type %t181) %t183 = load { ptr, i64, i64 }, ptr %a178 call void @finch.gen.store(ptr %t179, { ptr, i64, i64 } %t182, { ptr, i64, i64 } { ptr @.str.3635, i64 15, i64 0 }, { ptr, i64, i64 } %t183) store { ptr, i64, i64 } %t182, ptr %a184 call void @finch_str_drop(ptr %a184) %t185 = load ptr, ptr %a1 %t186 = icmp eq ptr %t185, null br i1 %t186, label %panic5689, label %ok5690 panic5689: call void @finch_panic(ptr @.str.3636, i64 2893, ptr @.str.3637) unreachable ok5690: %t187 = getelementptr inbounds %S.gen.Gen, ptr %t185, i32 0, i32 11 %t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t187, i32 0, i32 1 %t189 = load i64, ptr %t188 store i64 %t189, ptr %a190 %t191 = load ptr, ptr %a1 %t192 = load { ptr, i64, i64 }, ptr %a178 %t193 = load %S.ast.Type, ptr %a8 call void @finch.gen.holdAddr(ptr %t191, { ptr, i64, i64 } %t192, %S.ast.Type %t193) %t194 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t195 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1 %t196 = load i64, ptr %t195 %t197 = sdiv i64 %t196, 2 store i64 0, ptr %a198 br label %for.cond5691 for.cond5691: %t199 = load i64, ptr %a198 %t200 = icmp slt i64 %t199, %t197 br i1 %t200, label %for.body5692, label %for.end5694 for.body5692: %t201 = load ptr, ptr %a1 %t202 = icmp eq ptr %t201, null br i1 %t202, label %panic5695, label %ok5696 panic5695: call void @finch_panic(ptr @.str.3638, i64 2896, ptr @.str.3639) unreachable ok5696: %t203 = getelementptr inbounds %S.gen.Gen, ptr %t201, i32 0, i32 11 %t204 = getelementptr inbounds { ptr, i64, i64 }, ptr %t203, i32 0, i32 1 %t205 = load i64, ptr %t204 store i64 %t205, ptr %a206 %t207 = load %S.gen.Val, ptr %a10 store %S.gen.Val %t207, ptr %a208 call void @finch.copy.S_gen_Val(ptr %a209, ptr %a208) %t210 = load %S.gen.Val, ptr %a209 store %S.gen.Val %t210, ptr %a211 %t212 = load i64, ptr %a198 %t213 = icmp eq i64 %t212, 0 br label %logic.from5697 logic.from5697: br i1 %t213, label %logic.rhs5698, label %logic.end5699 logic.rhs5698: %t214 = load i1, ptr %a9 br label %logic.rend5700 logic.rend5700: br label %logic.end5699 logic.end5699: %t215 = phi i1 [ false, %logic.from5697 ], [ %t214, %logic.rend5700 ] %t216 = xor i1 %t215, true br i1 %t216, label %then5701, label %endif5703 then5701: %t217 = load ptr, ptr %a1 %t218 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t219 = load i64, ptr %a198 %t220 = mul i64 2, %t219 %t221 = load { ptr, i64, i64 }, ptr %t218 %t222 = extractvalue { ptr, i64, i64 } %t221, 1 %t223 = icmp uge i64 %t220, %t222 br i1 %t223, label %range5704, label %inrange5705 range5704: call void @finch_panic_index(ptr @.str.3640, i64 2899, i64 %t220, i64 %t222) unreachable inrange5705: %t224 = extractvalue { ptr, i64, i64 } %t221, 0 %t225 = getelementptr inbounds %S.ast.Node, ptr %t224, i64 %t220 %t226 = load %S.ast.Node, ptr %t225 %t227 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 %t228 = load { ptr, i64, i64 }, ptr %t227 %t229 = extractvalue { ptr, i64, i64 } %t228, 1 %t230 = icmp uge i64 0, %t229 br i1 %t230, label %range5706, label %inrange5707 range5706: call void @finch_panic_index(ptr @.str.3641, i64 2899, i64 0, i64 %t229) unreachable inrange5707: %t231 = extractvalue { ptr, i64, i64 } %t228, 0 %t232 = getelementptr inbounds %S.ast.Type, ptr %t231, i64 0 %t233 = load %S.ast.Type, ptr %t232 %t234 = call %S.gen.Val @finch.gen.exprWant(ptr %t217, %S.ast.Node %t226, %S.ast.Type %t233) %t235 = load %S.gen.Val, ptr %a211 store %S.gen.Val %t234, ptr %a211 store %S.gen.Val %t235, ptr %a236 call void @finch.drop.S_gen_Val(ptr %a236) br label %endif5703 endif5703: %t237 = load ptr, ptr %a1 %t238 = load %S.gen.Val, ptr %a211 %t239 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 %t240 = load { ptr, i64, i64 }, ptr %t239 %t241 = extractvalue { ptr, i64, i64 } %t240, 1 %t242 = icmp uge i64 0, %t241 br i1 %t242, label %range5708, label %inrange5709 range5708: call void @finch_panic_index(ptr @.str.3642, i64 2901, i64 0, i64 %t241) unreachable inrange5709: %t243 = extractvalue { ptr, i64, i64 } %t240, 0 %t244 = getelementptr inbounds %S.ast.Type, ptr %t243, i64 0 %t245 = load %S.ast.Type, ptr %t244 %t246 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t247 = load i64, ptr %a198 %t248 = mul i64 2, %t247 %t249 = load { ptr, i64, i64 }, ptr %t246 %t250 = extractvalue { ptr, i64, i64 } %t249, 1 %t251 = icmp uge i64 %t248, %t250 br i1 %t251, label %range5710, label %inrange5711 range5710: call void @finch_panic_index(ptr @.str.3643, i64 2901, i64 %t248, i64 %t250) unreachable inrange5711: %t252 = extractvalue { ptr, i64, i64 } %t249, 0 %t253 = getelementptr inbounds %S.ast.Node, ptr %t252, i64 %t248 %t254 = load %S.ast.Node, ptr %t253 %t255 = call %S.gen.Val @finch.gen.coerce(ptr %t237, %S.gen.Val %t238, %S.ast.Type %t245, %S.ast.Node %t254, { ptr, i64, i64 } { ptr @.str.3644, i64 21, i64 0 }) %t256 = load %S.gen.Val, ptr %a211 store %S.gen.Val %t255, ptr %a211 store %S.gen.Val %t256, ptr %a257 call void @finch.drop.S_gen_Val(ptr %a257) %t258 = load ptr, ptr %a1 %t259 = load %S.gen.Val, ptr %a211 call void @finch.gen.hold(ptr %t258, %S.gen.Val %t259) %t260 = load %S.gen.Val, ptr %a11 store %S.gen.Val %t260, ptr %a261 call void @finch.copy.S_gen_Val(ptr %a262, ptr %a261) %t263 = load %S.gen.Val, ptr %a262 store %S.gen.Val %t263, ptr %a264 %t265 = load i64, ptr %a198 %t266 = icmp eq i64 %t265, 0 br label %logic.from5712 logic.from5712: br i1 %t266, label %logic.rhs5713, label %logic.end5714 logic.rhs5713: %t267 = load i1, ptr %a9 br label %logic.rend5715 logic.rend5715: br label %logic.end5714 logic.end5714: %t268 = phi i1 [ false, %logic.from5712 ], [ %t267, %logic.rend5715 ] %t269 = xor i1 %t268, true br i1 %t269, label %then5716, label %endif5718 then5716: %t270 = load ptr, ptr %a1 %t271 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t272 = load i64, ptr %a198 %t273 = mul i64 2, %t272 %t274 = add i64 %t273, 1 %t275 = load { ptr, i64, i64 }, ptr %t271 %t276 = extractvalue { ptr, i64, i64 } %t275, 1 %t277 = icmp uge i64 %t274, %t276 br i1 %t277, label %range5719, label %inrange5720 range5719: call void @finch_panic_index(ptr @.str.3645, i64 2905, i64 %t274, i64 %t276) unreachable inrange5720: %t278 = extractvalue { ptr, i64, i64 } %t275, 0 %t279 = getelementptr inbounds %S.ast.Node, ptr %t278, i64 %t274 %t280 = load %S.ast.Node, ptr %t279 %t281 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 %t282 = load { ptr, i64, i64 }, ptr %t281 %t283 = extractvalue { ptr, i64, i64 } %t282, 1 %t284 = icmp uge i64 1, %t283 br i1 %t284, label %range5721, label %inrange5722 range5721: call void @finch_panic_index(ptr @.str.3646, i64 2905, i64 1, i64 %t283) unreachable inrange5722: %t285 = extractvalue { ptr, i64, i64 } %t282, 0 %t286 = getelementptr inbounds %S.ast.Type, ptr %t285, i64 1 %t287 = load %S.ast.Type, ptr %t286 %t288 = call %S.gen.Val @finch.gen.exprWant(ptr %t270, %S.ast.Node %t280, %S.ast.Type %t287) %t289 = load %S.gen.Val, ptr %a264 store %S.gen.Val %t288, ptr %a264 store %S.gen.Val %t289, ptr %a290 call void @finch.drop.S_gen_Val(ptr %a290) br label %endif5718 endif5718: %t291 = load ptr, ptr %a1 %t292 = load %S.gen.Val, ptr %a264 %t293 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 %t294 = load { ptr, i64, i64 }, ptr %t293 %t295 = extractvalue { ptr, i64, i64 } %t294, 1 %t296 = icmp uge i64 1, %t295 br i1 %t296, label %range5723, label %inrange5724 range5723: call void @finch_panic_index(ptr @.str.3647, i64 2907, i64 1, i64 %t295) unreachable inrange5724: %t297 = extractvalue { ptr, i64, i64 } %t294, 0 %t298 = getelementptr inbounds %S.ast.Type, ptr %t297, i64 1 %t299 = load %S.ast.Type, ptr %t298 %t300 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t301 = load i64, ptr %a198 %t302 = mul i64 2, %t301 %t303 = add i64 %t302, 1 %t304 = load { ptr, i64, i64 }, ptr %t300 %t305 = extractvalue { ptr, i64, i64 } %t304, 1 %t306 = icmp uge i64 %t303, %t305 br i1 %t306, label %range5725, label %inrange5726 range5725: call void @finch_panic_index(ptr @.str.3648, i64 2907, i64 %t303, i64 %t305) unreachable inrange5726: %t307 = extractvalue { ptr, i64, i64 } %t304, 0 %t308 = getelementptr inbounds %S.ast.Node, ptr %t307, i64 %t303 %t309 = load %S.ast.Node, ptr %t308 %t310 = call %S.gen.Val @finch.gen.coerce(ptr %t291, %S.gen.Val %t292, %S.ast.Type %t299, %S.ast.Node %t309, { ptr, i64, i64 } { ptr @.str.3649, i64 23, i64 0 }) %t311 = load %S.gen.Val, ptr %a264 store %S.gen.Val %t310, ptr %a264 store %S.gen.Val %t311, ptr %a312 call void @finch.drop.S_gen_Val(ptr %a312) %t313 = load ptr, ptr %a1 %t314 = load %S.gen.Val, ptr %a264 %t315 = call { ptr, i64, i64 } @finch.gen.own(ptr %t313, %S.gen.Val %t314) store { ptr, i64, i64 } %t315, ptr %a316 %t317 = load ptr, ptr %a1 %t318 = load { ptr, i64, i64 }, ptr %a178 %t319 = load %S.ast.Type, ptr %a8 %t320 = load %S.gen.Val, ptr %a211 %t321 = load %S.ast.Node, ptr %a2 %t322 = call { ptr, i64, i64 } @finch.gen.mapSlot(ptr %t317, { ptr, i64, i64 } %t318, %S.ast.Type %t319, %S.gen.Val %t320, i1 false, %S.ast.Node %t321) store { ptr, i64, i64 } %t322, ptr %a323 %t324 = load ptr, ptr %a1 %t325 = load { ptr, i64, i64 }, ptr %a323 %t326 = load %S.ast.Type, ptr %a8 %t327 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t324, { ptr, i64, i64 } %t325, %S.ast.Type %t326, i64 2) store { ptr, i64, i64 } %t327, ptr %a328 %t329 = load ptr, ptr %a1 %t330 = load { ptr, i64, i64 }, ptr %a328 %t331 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 %t332 = load { ptr, i64, i64 }, ptr %t331 %t333 = extractvalue { ptr, i64, i64 } %t332, 1 %t334 = icmp uge i64 1, %t333 br i1 %t334, label %range5727, label %inrange5728 range5727: call void @finch_panic_index(ptr @.str.3650, i64 2911, i64 1, i64 %t333) unreachable inrange5728: %t335 = extractvalue { ptr, i64, i64 } %t332, 0 %t336 = getelementptr inbounds %S.ast.Type, ptr %t335, i64 1 %t337 = load %S.ast.Type, ptr %t336 call void @finch.gen.dropAt(ptr %t329, { ptr, i64, i64 } %t330, %S.ast.Type %t337) %t338 = load ptr, ptr %a1 %t339 = load ptr, ptr %a1 %t340 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 %t341 = load { ptr, i64, i64 }, ptr %t340 %t342 = extractvalue { ptr, i64, i64 } %t341, 1 %t343 = icmp uge i64 1, %t342 br i1 %t343, label %range5729, label %inrange5730 range5729: call void @finch_panic_index(ptr @.str.3651, i64 2912, i64 1, i64 %t342) unreachable inrange5730: %t344 = extractvalue { ptr, i64, i64 } %t341, 0 %t345 = getelementptr inbounds %S.ast.Type, ptr %t344, i64 1 %t346 = load %S.ast.Type, ptr %t345 %t347 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t339, %S.ast.Type %t346) %t348 = load { ptr, i64, i64 }, ptr %a316 %t349 = load { ptr, i64, i64 }, ptr %a328 call void @finch.gen.store(ptr %t338, { ptr, i64, i64 } %t347, { ptr, i64, i64 } %t348, { ptr, i64, i64 } %t349) store { ptr, i64, i64 } %t347, ptr %a350 call void @finch_str_drop(ptr %a350) %t351 = load ptr, ptr %a1 %t352 = load %S.gen.Val, ptr %a211 call void @finch.gen.release(ptr %t351, %S.gen.Val %t352) %t353 = load ptr, ptr %a1 %t354 = load i64, ptr %a206 call void @finch.gen.heldEnd(ptr %t353, i64 %t354) call void @finch_str_drop(ptr %a328) call void @finch_str_drop(ptr %a323) call void @finch_str_drop(ptr %a316) call void @finch.drop.S_gen_Val(ptr %a264) call void @finch.drop.S_gen_Val(ptr %a211) br label %for.step5693 for.step5693: %t355 = load i64, ptr %a198 %t356 = add i64 %t355, 1 store i64 %t356, ptr %a198 br label %for.cond5691 for.end5694: %t357 = load ptr, ptr %a1 %t358 = load i64, ptr %a190 call void @finch.gen.heldEnd(ptr %t357, i64 %t358) %t359 = load ptr, ptr %a1 %t360 = load ptr, ptr %a1 %t361 = load %S.ast.Type, ptr %a8 %t362 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t360, %S.ast.Type %t361) %t363 = load { ptr, i64, i64 }, ptr %a178 %t364 = call { ptr, i64, i64 } @finch.gen.load(ptr %t359, { ptr, i64, i64 } %t362, { ptr, i64, i64 } %t363) store { ptr, i64, i64 } %t362, ptr %a365 call void @finch_str_drop(ptr %a365) %t366 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t364, 0 %t367 = load %S.ast.Type, ptr %a8 store %S.ast.Type %t367, ptr %a368 call void @finch.copy.S_ast_Type(ptr %a369, ptr %a368) %t370 = load %S.ast.Type, ptr %a369 %t371 = insertvalue %S.gen.Val %t366, %S.ast.Type %t370, 1 %t372 = insertvalue %S.gen.Val %t371, i1 true, 2 call void @finch_str_drop(ptr %a178) call void @finch.drop.S_gen_Val(ptr %a11) call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_ast_Type(ptr %a8) ret %S.gen.Val %t372 } define internal %S.gen.Val @finch.gen.mapMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca %S.ast.Type, align 16 %a19 = alloca %S.ast.Type, align 16 %a21 = alloca %S.ast.Type, align 16 %a29 = alloca %S.ast.Type, align 16 %a30 = alloca %S.ast.Type, align 16 %a32 = alloca %S.ast.Type, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca %S.gen.Val, align 16 %a82 = alloca %S.gen.Val, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca %S.gen.Val, align 16 %a278 = alloca %S.gen.Val, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a308 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca %S.ast.Type, align 16 %a351 = alloca %S.ast.Type, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a384 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a403 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a418 = alloca { ptr, i64, i64 }, align 16 %a421 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a434 = alloca { ptr, i64, i64 }, align 16 %a435 = alloca { ptr, i64, i64 }, align 16 %a436 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 %a439 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca { ptr, i64, i64 }, align 16 %a441 = alloca { ptr, i64, i64 }, align 16 %a442 = alloca { ptr, i64, i64 }, align 16 %a445 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a464 = alloca { ptr, i64, i64 }, align 16 %a473 = alloca { ptr, i64, i64 }, align 16 %a474 = alloca { ptr, i64, i64 }, align 16 %a475 = alloca { ptr, i64, i64 }, align 16 %a477 = alloca { ptr, i64, i64 }, align 16 %a478 = alloca { ptr, i64, i64 }, align 16 %a479 = alloca { ptr, i64, i64 }, align 16 %a480 = alloca { ptr, i64, i64 }, align 16 %a482 = alloca { ptr, i64, i64 }, align 16 %a486 = alloca { ptr, i64, i64 }, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca { ptr, i64, i64 }, align 16 %a492 = alloca { ptr, i64, i64 }, align 16 %a499 = alloca i64, align 16 %a501 = alloca %S.ast.Type, align 16 %a502 = alloca %S.ast.Type, align 16 %a504 = alloca %S.ast.Type, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a511 = alloca %S.ast.Type, align 16 %a512 = alloca %S.ast.Type, align 16 %a515 = alloca %S.ast.Type, align 16 %a518 = alloca %S.ast.Type, align 16 %a521 = alloca { ptr, i64, i64 }, align 16 %a529 = alloca { ptr, i64, i64 }, align 16 %a530 = alloca { ptr, i64, i64 }, align 16 %a531 = alloca { ptr, i64, i64 }, align 16 %a532 = alloca { ptr, i64, i64 }, align 16 %a534 = alloca { ptr, i64, i64 }, align 16 %a535 = alloca { ptr, i64, i64 }, align 16 %a536 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a540 = alloca { ptr, i64, i64 }, align 16 %a541 = alloca { ptr, i64, i64 }, align 16 %a542 = alloca { ptr, i64, i64 }, align 16 %a543 = alloca { ptr, i64, i64 }, align 16 %a545 = alloca { ptr, i64, i64 }, align 16 %a546 = alloca { ptr, i64, i64 }, align 16 %a547 = alloca { ptr, i64, i64 }, align 16 %a548 = alloca { ptr, i64, i64 }, align 16 %a551 = alloca { ptr, i64, i64 }, align 16 %a553 = alloca { ptr, i64, i64 }, align 16 %a554 = alloca { ptr, i64, i64 }, align 16 %a557 = alloca { ptr, i64, i64 }, align 16 %a558 = alloca { ptr, i64, i64 }, align 16 %a559 = alloca { ptr, i64, i64 }, align 16 %a561 = alloca { ptr, i64, i64 }, align 16 %a562 = alloca { ptr, i64, i64 }, align 16 %a563 = alloca { ptr, i64, i64 }, align 16 %a564 = alloca { ptr, i64, i64 }, align 16 %a567 = alloca { ptr, i64, i64 }, align 16 %a568 = alloca { ptr, i64, i64 }, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a570 = alloca { ptr, i64, i64 }, align 16 %a572 = alloca { ptr, i64, i64 }, align 16 %a573 = alloca { ptr, i64, i64 }, align 16 %a574 = alloca { ptr, i64, i64 }, align 16 %a575 = alloca { ptr, i64, i64 }, align 16 %a580 = alloca { ptr, i64, i64 }, align 16 %a581 = alloca { ptr, i64, i64 }, align 16 %a582 = alloca { ptr, i64, i64 }, align 16 %a583 = alloca { ptr, i64, i64 }, align 16 %a584 = alloca { ptr, i64, i64 }, align 16 %a586 = alloca { ptr, i64, i64 }, align 16 %a587 = alloca { ptr, i64, i64 }, align 16 %a588 = alloca { ptr, i64, i64 }, align 16 %a589 = alloca { ptr, i64, i64 }, align 16 %a591 = alloca { ptr, i64, i64 }, align 16 %a595 = alloca { ptr, i64, i64 }, align 16 %a598 = alloca { ptr, i64, i64 }, align 16 %a606 = alloca { ptr, i64, i64 }, align 16 %a607 = alloca { ptr, i64, i64 }, align 16 %a608 = alloca { ptr, i64, i64 }, align 16 %a609 = alloca { ptr, i64, i64 }, align 16 %a611 = alloca { ptr, i64, i64 }, align 16 %a612 = alloca { ptr, i64, i64 }, align 16 %a613 = alloca { ptr, i64, i64 }, align 16 %a614 = alloca { ptr, i64, i64 }, align 16 %a617 = alloca { ptr, i64, i64 }, align 16 %a618 = alloca { ptr, i64, i64 }, align 16 %a619 = alloca { ptr, i64, i64 }, align 16 %a620 = alloca { ptr, i64, i64 }, align 16 %a622 = alloca { ptr, i64, i64 }, align 16 %a623 = alloca { ptr, i64, i64 }, align 16 %a624 = alloca { ptr, i64, i64 }, align 16 %a625 = alloca { ptr, i64, i64 }, align 16 %a628 = alloca { ptr, i64, i64 }, align 16 %a630 = alloca { ptr, i64, i64 }, align 16 %a631 = alloca { ptr, i64, i64 }, align 16 %a635 = alloca { ptr, i64, i64 }, align 16 %a646 = alloca { ptr, i64, i64 }, align 16 %a649 = alloca { ptr, i64, i64 }, align 16 %a652 = alloca { ptr, i64, i64 }, align 16 %a661 = alloca { ptr, i64, i64 }, align 16 %a662 = alloca { ptr, i64, i64 }, align 16 %a663 = alloca { ptr, i64, i64 }, align 16 %a664 = alloca { ptr, i64, i64 }, align 16 %a665 = alloca { ptr, i64, i64 }, align 16 %a667 = alloca { ptr, i64, i64 }, align 16 %a668 = alloca { ptr, i64, i64 }, align 16 %a669 = alloca { ptr, i64, i64 }, align 16 %a670 = alloca { ptr, i64, i64 }, align 16 %a673 = alloca { ptr, i64, i64 }, align 16 %a676 = alloca { ptr, i64, i64 }, align 16 %a682 = alloca { ptr, i64, i64 }, align 16 %a688 = alloca { ptr, i64, i64 }, align 16 %a689 = alloca { ptr, i64, i64 }, align 16 %a690 = alloca { ptr, i64, i64 }, align 16 %a691 = alloca { ptr, i64, i64 }, align 16 %a693 = alloca { ptr, i64, i64 }, align 16 %a694 = alloca { ptr, i64, i64 }, align 16 %a695 = alloca { ptr, i64, i64 }, align 16 %a696 = alloca { ptr, i64, i64 }, align 16 %a699 = alloca { ptr, i64, i64 }, align 16 %a700 = alloca { ptr, i64, i64 }, align 16 %a701 = alloca { ptr, i64, i64 }, align 16 %a702 = alloca { ptr, i64, i64 }, align 16 %a704 = alloca { ptr, i64, i64 }, align 16 %a705 = alloca { ptr, i64, i64 }, align 16 %a706 = alloca { ptr, i64, i64 }, align 16 %a707 = alloca { ptr, i64, i64 }, align 16 %a710 = alloca { ptr, i64, i64 }, align 16 %a711 = alloca { ptr, i64, i64 }, align 16 %a712 = alloca { ptr, i64, i64 }, align 16 %a713 = alloca { ptr, i64, i64 }, align 16 %a716 = alloca { ptr, i64, i64 }, align 16 %a723 = alloca { ptr, i64, i64 }, align 16 %a724 = alloca { ptr, i64, i64 }, align 16 %a728 = alloca { ptr, i64, i64 }, align 16 %a729 = alloca { ptr, i64, i64 }, align 16 %a730 = alloca { ptr, i64, i64 }, align 16 %a732 = alloca { ptr, i64, i64 }, align 16 %a733 = alloca { ptr, i64, i64 }, align 16 %a734 = alloca { ptr, i64, i64 }, align 16 %a735 = alloca { ptr, i64, i64 }, align 16 %a738 = alloca { ptr, i64, i64 }, align 16 %a740 = alloca { ptr, i64, i64 }, align 16 %a752 = alloca %S.ast.Type, align 16 %a753 = alloca %S.ast.Type, align 16 %a760 = alloca { ptr, i64, i64 }, align 16 %a761 = alloca { ptr, i64, i64 }, align 16 %a762 = alloca { ptr, i64, i64 }, align 16 %a764 = alloca { ptr, i64, i64 }, align 16 %a765 = alloca { ptr, i64, i64 }, align 16 %a766 = alloca { ptr, i64, i64 }, align 16 %a767 = alloca { ptr, i64, i64 }, align 16 %a769 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 call void @finch_str_copy(ptr %a8, ptr %a7) %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 %t11 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t12 = load { ptr, i64, i64 }, ptr %t11 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 0, %t13 br i1 %t14, label %range5731, label %inrange5732 range5731: call void @finch_panic_index(ptr @.str.3652, i64 2922, i64 0, i64 %t13) unreachable inrange5732: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 0 %t17 = load %S.ast.Type, ptr %t16 store %S.ast.Type %t17, ptr %a18 call void @finch.copy.S_ast_Type(ptr %a19, ptr %a18) %t20 = load %S.ast.Type, ptr %a19 store %S.ast.Type %t20, ptr %a21 %t22 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t23 = load { ptr, i64, i64 }, ptr %t22 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 1, %t24 br i1 %t25, label %range5733, label %inrange5734 range5733: call void @finch_panic_index(ptr @.str.3653, i64 2923, i64 1, i64 %t24) unreachable inrange5734: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds %S.ast.Type, ptr %t26, i64 1 %t28 = load %S.ast.Type, ptr %t27 store %S.ast.Type %t28, ptr %a29 call void @finch.copy.S_ast_Type(ptr %a30, ptr %a29) %t31 = load %S.ast.Type, ptr %a30 store %S.ast.Type %t31, ptr %a32 %t33 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } { ptr @.str.3654, i64 3, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 br label %logic.from5735 logic.from5735: br i1 %t37, label %logic.end5737, label %logic.rhs5736 logic.rhs5736: %t38 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t38, ptr %a39 store { ptr, i64, i64 } { ptr @.str.3655, i64 3, i64 0 }, ptr %a40 %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) %t42 = icmp ne i32 %t41, 0 br label %logic.rend5738 logic.rend5738: br label %logic.end5737 logic.end5737: %t43 = phi i1 [ true, %logic.from5735 ], [ %t42, %logic.rend5738 ] br label %logic.from5739 logic.from5739: br i1 %t43, label %logic.end5741, label %logic.rhs5740 logic.rhs5740: %t44 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t44, ptr %a45 store { ptr, i64, i64 } { ptr @.str.3656, i64 6, i64 0 }, ptr %a46 %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) %t48 = icmp ne i32 %t47, 0 br label %logic.rend5742 logic.rend5742: br label %logic.end5741 logic.end5741: %t49 = phi i1 [ true, %logic.from5739 ], [ %t48, %logic.rend5742 ] br i1 %t49, label %then5743, label %endif5745 then5743: %t50 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.3657, i64 3, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 br i1 %t54, label %then5746, label %else5747 then5746: %t55 = load ptr, ptr %a1 %t56 = load %S.ast.Node, ptr %a2 %t57 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.checkArgs(ptr %t55, %S.ast.Node %t56, i64 1, i64 2, { ptr, i64, i64 } %t57) br label %endif5748 else5747: %t58 = load ptr, ptr %a1 %t59 = load %S.ast.Node, ptr %a2 %t60 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.checkArgs(ptr %t58, %S.ast.Node %t59, i64 1, i64 1, { ptr, i64, i64 } %t60) br label %endif5748 endif5748: %t61 = load ptr, ptr %a1 %t62 = load ptr, ptr %a1 %t63 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t64 = load { ptr, i64, i64 }, ptr %t63 %t65 = extractvalue { ptr, i64, i64 } %t64, 1 %t66 = icmp uge i64 1, %t65 br i1 %t66, label %range5749, label %inrange5750 range5749: call void @finch_panic_index(ptr @.str.3658, i64 2930, i64 1, i64 %t65) unreachable inrange5750: %t67 = extractvalue { ptr, i64, i64 } %t64, 0 %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 1 %t69 = load %S.ast.Node, ptr %t68 %t70 = load %S.ast.Type, ptr %a21 %t71 = call %S.gen.Val @finch.gen.exprWant(ptr %t62, %S.ast.Node %t69, %S.ast.Type %t70) %t72 = load %S.ast.Type, ptr %a21 %t73 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t74 = load { ptr, i64, i64 }, ptr %t73 %t75 = extractvalue { ptr, i64, i64 } %t74, 1 %t76 = icmp uge i64 1, %t75 br i1 %t76, label %range5751, label %inrange5752 range5751: call void @finch_panic_index(ptr @.str.3659, i64 2930, i64 1, i64 %t75) unreachable inrange5752: %t77 = extractvalue { ptr, i64, i64 } %t74, 0 %t78 = getelementptr inbounds %S.ast.Node, ptr %t77, i64 1 %t79 = load %S.ast.Node, ptr %t78 %t80 = call %S.gen.Val @finch.gen.coerce(ptr %t61, %S.gen.Val %t71, %S.ast.Type %t72, %S.ast.Node %t79, { ptr, i64, i64 } { ptr @.str.3660, i64 7, i64 0 }) store %S.gen.Val %t71, ptr %a81 call void @finch.drop.S_gen_Val(ptr %a81) store %S.gen.Val %t80, ptr %a82 %t83 = load ptr, ptr %a1 %t84 = load { ptr, i64, i64 }, ptr %a3 %t85 = load ptr, ptr %a1 %t86 = load %S.gen.Val, ptr %a82 %t87 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t85, %S.gen.Val %t86) %t88 = load %S.ast.Type, ptr %a4 %t89 = call { ptr, i64, i64 } @finch.gen.mapFind(ptr %t83, { ptr, i64, i64 } %t84, { ptr, i64, i64 } %t87, %S.ast.Type %t88) store { ptr, i64, i64 } %t87, ptr %a90 call void @finch_str_drop(ptr %a90) store { ptr, i64, i64 } %t89, ptr %a91 %t92 = load ptr, ptr %a1 %t93 = load %S.gen.Val, ptr %a82 call void @finch.gen.release(ptr %t92, %S.gen.Val %t93) %t94 = load ptr, ptr %a1 %t95 = load { ptr, i64, i64 }, ptr %a91 store { ptr, i64, i64 } { ptr @.str.3661, i64 13, i64 0 }, ptr %a97 store { ptr, i64, i64 } %t95, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) %t99 = load { ptr, i64, i64 }, ptr %a96 store { ptr, i64, i64 } %t99, ptr %a101 store { ptr, i64, i64 } { ptr @.str.3662, i64 3, i64 0 }, ptr %a102 call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) store { ptr, i64, i64 } %t99, ptr %a103 call void @finch_str_drop(ptr %a103) %t104 = load { ptr, i64, i64 }, ptr %a100 %t105 = call { ptr, i64, i64 } @finch.gen.op(ptr %t94, { ptr, i64, i64 } %t104) store { ptr, i64, i64 } %t104, ptr %a106 call void @finch_str_drop(ptr %a106) store { ptr, i64, i64 } %t105, ptr %a107 %t108 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t108, ptr %a109 store { ptr, i64, i64 } { ptr @.str.3663, i64 3, i64 0 }, ptr %a110 %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) %t112 = icmp ne i32 %t111, 0 br i1 %t112, label %then5753, label %endif5755 then5753: %t113 = load { ptr, i64, i64 }, ptr %a107 store { ptr, i64, i64 } %t113, ptr %a114 call void @finch_str_copy(ptr %a115, ptr %a114) %t116 = load { ptr, i64, i64 }, ptr %a115 %t117 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t116, 0 %t118 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3664, i64 4, i64 0 }) %t119 = insertvalue %S.gen.Val %t117, %S.ast.Type %t118, 1 call void @finch_str_drop(ptr %a107) call void @finch_str_drop(ptr %a91) call void @finch.drop.S_gen_Val(ptr %a82) call void @finch.drop.S_ast_Type(ptr %a32) call void @finch.drop.S_ast_Type(ptr %a21) call void @finch_str_drop(ptr %a10) ret %S.gen.Val %t119 endif5755: %t120 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t120, ptr %a121 store { ptr, i64, i64 } { ptr @.str.3665, i64 6, i64 0 }, ptr %a122 %t123 = call i32 @finch_str_eq(ptr %a121, ptr %a122) %t124 = icmp ne i32 %t123, 0 br i1 %t124, label %then5756, label %endif5758 then5756: %t125 = load ptr, ptr %a1 %t126 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t125, { ptr, i64, i64 } { ptr @.str.3666, i64 10, i64 0 }) store { ptr, i64, i64 } %t126, ptr %a127 %t128 = load ptr, ptr %a1 %t129 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t128, { ptr, i64, i64 } { ptr @.str.3667, i64 10, i64 0 }) store { ptr, i64, i64 } %t129, ptr %a130 %t131 = load ptr, ptr %a1 %t132 = load { ptr, i64, i64 }, ptr %a107 %t133 = load { ptr, i64, i64 }, ptr %a127 %t134 = load { ptr, i64, i64 }, ptr %a130 call void @finch.gen.condBr(ptr %t131, { ptr, i64, i64 } %t132, { ptr, i64, i64 } %t133, { ptr, i64, i64 } %t134) %t135 = load ptr, ptr %a1 %t136 = load { ptr, i64, i64 }, ptr %a127 call void @finch.gen.label(ptr %t135, { ptr, i64, i64 } %t136) %t137 = load ptr, ptr %a1 %t138 = load { ptr, i64, i64 }, ptr %a3 %t139 = load %S.ast.Type, ptr %a4 %t140 = load { ptr, i64, i64 }, ptr %a91 %t141 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t137, { ptr, i64, i64 } %t138, %S.ast.Type %t139, { ptr, i64, i64 } %t140) store { ptr, i64, i64 } %t141, ptr %a142 %t143 = load ptr, ptr %a1 %t144 = load ptr, ptr %a1 %t145 = load { ptr, i64, i64 }, ptr %a142 %t146 = load %S.ast.Type, ptr %a4 %t147 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t144, { ptr, i64, i64 } %t145, %S.ast.Type %t146, i64 1) %t148 = load %S.ast.Type, ptr %a21 call void @finch.gen.dropAt(ptr %t143, { ptr, i64, i64 } %t147, %S.ast.Type %t148) store { ptr, i64, i64 } %t147, ptr %a149 call void @finch_str_drop(ptr %a149) %t150 = load ptr, ptr %a1 %t151 = load ptr, ptr %a1 %t152 = load { ptr, i64, i64 }, ptr %a142 %t153 = load %S.ast.Type, ptr %a4 %t154 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t151, { ptr, i64, i64 } %t152, %S.ast.Type %t153, i64 2) %t155 = load %S.ast.Type, ptr %a32 call void @finch.gen.dropAt(ptr %t150, { ptr, i64, i64 } %t154, %S.ast.Type %t155) store { ptr, i64, i64 } %t154, ptr %a156 call void @finch_str_drop(ptr %a156) %t157 = load ptr, ptr %a1 %t158 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.3668, i64 35, i64 0 }, ptr %a160 store { ptr, i64, i64 } %t158, ptr %a161 call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) %t162 = load { ptr, i64, i64 }, ptr %a159 store { ptr, i64, i64 } %t162, ptr %a164 store { ptr, i64, i64 } { ptr @.str.3669, i64 6, i64 0 }, ptr %a165 call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) store { ptr, i64, i64 } %t162, ptr %a166 call void @finch_str_drop(ptr %a166) %t167 = load { ptr, i64, i64 }, ptr %a163 %t168 = load { ptr, i64, i64 }, ptr %a91 store { ptr, i64, i64 } %t167, ptr %a170 store { ptr, i64, i64 } %t168, ptr %a171 call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) store { ptr, i64, i64 } %t167, ptr %a172 call void @finch_str_drop(ptr %a172) %t173 = load { ptr, i64, i64 }, ptr %a169 store { ptr, i64, i64 } %t173, ptr %a175 store { ptr, i64, i64 } { ptr @.str.3670, i64 6, i64 0 }, ptr %a176 call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) store { ptr, i64, i64 } %t173, ptr %a177 call void @finch_str_drop(ptr %a177) %t178 = load { ptr, i64, i64 }, ptr %a174 %t179 = load ptr, ptr %a1 %t180 = load %S.ast.Type, ptr %a4 %t181 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t179, %S.ast.Type %t180) store { ptr, i64, i64 } %t178, ptr %a183 store { ptr, i64, i64 } %t181, ptr %a184 call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184) store { ptr, i64, i64 } %t178, ptr %a185 call void @finch_str_drop(ptr %a185) store { ptr, i64, i64 } %t181, ptr %a186 call void @finch_str_drop(ptr %a186) %t187 = load { ptr, i64, i64 }, ptr %a182 store { ptr, i64, i64 } %t187, ptr %a189 store { ptr, i64, i64 } { ptr @.str.3671, i64 1, i64 0 }, ptr %a190 call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) store { ptr, i64, i64 } %t187, ptr %a191 call void @finch_str_drop(ptr %a191) %t192 = load { ptr, i64, i64 }, ptr %a188 call void @finch.gen.emit(ptr %t157, { ptr, i64, i64 } %t192) store { ptr, i64, i64 } %t192, ptr %a193 call void @finch_str_drop(ptr %a193) %t194 = load ptr, ptr %a1 %t195 = load { ptr, i64, i64 }, ptr %a130 call void @finch.gen.br(ptr %t194, { ptr, i64, i64 } %t195) %t196 = load ptr, ptr %a1 %t197 = load { ptr, i64, i64 }, ptr %a130 call void @finch.gen.label(ptr %t196, { ptr, i64, i64 } %t197) %t198 = load { ptr, i64, i64 }, ptr %a107 store { ptr, i64, i64 } %t198, ptr %a199 call void @finch_str_copy(ptr %a200, ptr %a199) %t201 = load { ptr, i64, i64 }, ptr %a200 %t202 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t201, 0 %t203 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3672, i64 4, i64 0 }) %t204 = insertvalue %S.gen.Val %t202, %S.ast.Type %t203, 1 call void @finch_str_drop(ptr %a142) call void @finch_str_drop(ptr %a130) call void @finch_str_drop(ptr %a127) call void @finch_str_drop(ptr %a107) call void @finch_str_drop(ptr %a91) call void @finch.drop.S_gen_Val(ptr %a82) call void @finch.drop.S_ast_Type(ptr %a32) call void @finch.drop.S_ast_Type(ptr %a21) call void @finch_str_drop(ptr %a10) ret %S.gen.Val %t204 endif5758: %t205 = load ptr, ptr %a1 %t206 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t205, { ptr, i64, i64 } { ptr @.str.3673, i64 9, i64 0 }) store { ptr, i64, i64 } %t206, ptr %a207 %t208 = load ptr, ptr %a1 %t209 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t208, { ptr, i64, i64 } { ptr @.str.3674, i64 11, i64 0 }) store { ptr, i64, i64 } %t209, ptr %a210 %t211 = load ptr, ptr %a1 %t212 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t211, { ptr, i64, i64 } { ptr @.str.3675, i64 8, i64 0 }) store { ptr, i64, i64 } %t212, ptr %a213 %t214 = load ptr, ptr %a1 %t215 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t214, { ptr, i64, i64 } { ptr @.str.3676, i64 8, i64 0 }) store { ptr, i64, i64 } %t215, ptr %a216 %t217 = load ptr, ptr %a1 %t218 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t217, { ptr, i64, i64 } { ptr @.str.3677, i64 7, i64 0 }) store { ptr, i64, i64 } %t218, ptr %a219 %t220 = load ptr, ptr %a1 %t221 = load { ptr, i64, i64 }, ptr %a107 %t222 = load { ptr, i64, i64 }, ptr %a207 %t223 = load { ptr, i64, i64 }, ptr %a210 call void @finch.gen.condBr(ptr %t220, { ptr, i64, i64 } %t221, { ptr, i64, i64 } %t222, { ptr, i64, i64 } %t223) %t224 = load ptr, ptr %a1 %t225 = load { ptr, i64, i64 }, ptr %a207 call void @finch.gen.label(ptr %t224, { ptr, i64, i64 } %t225) %t226 = load ptr, ptr %a1 %t227 = load ptr, ptr %a1 %t228 = load ptr, ptr %a1 %t229 = load %S.ast.Type, ptr %a32 %t230 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t228, %S.ast.Type %t229) %t231 = load ptr, ptr %a1 %t232 = load ptr, ptr %a1 %t233 = load { ptr, i64, i64 }, ptr %a3 %t234 = load %S.ast.Type, ptr %a4 %t235 = load { ptr, i64, i64 }, ptr %a91 %t236 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t232, { ptr, i64, i64 } %t233, %S.ast.Type %t234, { ptr, i64, i64 } %t235) %t237 = load %S.ast.Type, ptr %a4 %t238 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t231, { ptr, i64, i64 } %t236, %S.ast.Type %t237, i64 2) store { ptr, i64, i64 } %t236, ptr %a239 call void @finch_str_drop(ptr %a239) %t240 = call { ptr, i64, i64 } @finch.gen.load(ptr %t227, { ptr, i64, i64 } %t230, { ptr, i64, i64 } %t238) store { ptr, i64, i64 } %t230, ptr %a241 call void @finch_str_drop(ptr %a241) store { ptr, i64, i64 } %t238, ptr %a242 call void @finch_str_drop(ptr %a242) %t243 = load %S.ast.Type, ptr %a32 %t244 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t226, { ptr, i64, i64 } %t240, %S.ast.Type %t243) store { ptr, i64, i64 } %t240, ptr %a245 call void @finch_str_drop(ptr %a245) store { ptr, i64, i64 } %t244, ptr %a246 %t247 = load ptr, ptr %a1 %t248 = load { ptr, i64, i64 }, ptr %a213 call void @finch.gen.br(ptr %t247, { ptr, i64, i64 } %t248) %t249 = load ptr, ptr %a1 %t250 = load { ptr, i64, i64 }, ptr %a213 call void @finch.gen.label(ptr %t249, { ptr, i64, i64 } %t250) %t251 = load ptr, ptr %a1 %t252 = load { ptr, i64, i64 }, ptr %a219 call void @finch.gen.br(ptr %t251, { ptr, i64, i64 } %t252) %t253 = load ptr, ptr %a1 %t254 = load { ptr, i64, i64 }, ptr %a210 call void @finch.gen.label(ptr %t253, { ptr, i64, i64 } %t254) %t255 = load ptr, ptr %a1 %t256 = load ptr, ptr %a1 %t257 = load ptr, ptr %a1 %t258 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t259 = load { ptr, i64, i64 }, ptr %t258 %t260 = extractvalue { ptr, i64, i64 } %t259, 1 %t261 = icmp uge i64 2, %t260 br i1 %t261, label %range5759, label %inrange5760 range5759: call void @finch_panic_index(ptr @.str.3678, i64 2963, i64 2, i64 %t260) unreachable inrange5760: %t262 = extractvalue { ptr, i64, i64 } %t259, 0 %t263 = getelementptr inbounds %S.ast.Node, ptr %t262, i64 2 %t264 = load %S.ast.Node, ptr %t263 %t265 = load %S.ast.Type, ptr %a32 %t266 = call %S.gen.Val @finch.gen.exprWant(ptr %t257, %S.ast.Node %t264, %S.ast.Type %t265) %t267 = load %S.ast.Type, ptr %a32 %t268 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t269 = load { ptr, i64, i64 }, ptr %t268 %t270 = extractvalue { ptr, i64, i64 } %t269, 1 %t271 = icmp uge i64 2, %t270 br i1 %t271, label %range5761, label %inrange5762 range5761: call void @finch_panic_index(ptr @.str.3679, i64 2963, i64 2, i64 %t270) unreachable inrange5762: %t272 = extractvalue { ptr, i64, i64 } %t269, 0 %t273 = getelementptr inbounds %S.ast.Node, ptr %t272, i64 2 %t274 = load %S.ast.Node, ptr %t273 %t275 = call %S.gen.Val @finch.gen.coerce(ptr %t256, %S.gen.Val %t266, %S.ast.Type %t267, %S.ast.Node %t274, { ptr, i64, i64 } { ptr @.str.3680, i64 11, i64 0 }) store %S.gen.Val %t266, ptr %a276 call void @finch.drop.S_gen_Val(ptr %a276) %t277 = call { ptr, i64, i64 } @finch.gen.own(ptr %t255, %S.gen.Val %t275) store %S.gen.Val %t275, ptr %a278 call void @finch.drop.S_gen_Val(ptr %a278) store { ptr, i64, i64 } %t277, ptr %a279 %t280 = load ptr, ptr %a1 %t281 = load { ptr, i64, i64 }, ptr %a216 call void @finch.gen.br(ptr %t280, { ptr, i64, i64 } %t281) %t282 = load ptr, ptr %a1 %t283 = load { ptr, i64, i64 }, ptr %a216 call void @finch.gen.label(ptr %t282, { ptr, i64, i64 } %t283) %t284 = load ptr, ptr %a1 %t285 = load { ptr, i64, i64 }, ptr %a219 call void @finch.gen.br(ptr %t284, { ptr, i64, i64 } %t285) %t286 = load ptr, ptr %a1 %t287 = load { ptr, i64, i64 }, ptr %a219 call void @finch.gen.label(ptr %t286, { ptr, i64, i64 } %t287) %t288 = load ptr, ptr %a1 %t289 = load ptr, ptr %a1 %t290 = load %S.ast.Type, ptr %a32 %t291 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t289, %S.ast.Type %t290) store { ptr, i64, i64 } { ptr @.str.3681, i64 4, i64 0 }, ptr %a293 store { ptr, i64, i64 } %t291, ptr %a294 call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) store { ptr, i64, i64 } %t291, ptr %a295 call void @finch_str_drop(ptr %a295) %t296 = load { ptr, i64, i64 }, ptr %a292 store { ptr, i64, i64 } %t296, ptr %a298 store { ptr, i64, i64 } { ptr @.str.3682, i64 3, i64 0 }, ptr %a299 call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) store { ptr, i64, i64 } %t296, ptr %a300 call void @finch_str_drop(ptr %a300) %t301 = load { ptr, i64, i64 }, ptr %a297 %t302 = load { ptr, i64, i64 }, ptr %a246 store { ptr, i64, i64 } %t301, ptr %a304 store { ptr, i64, i64 } %t302, ptr %a305 call void @finch_str_concat(ptr %a303, ptr %a304, ptr %a305) store { ptr, i64, i64 } %t301, ptr %a306 call void @finch_str_drop(ptr %a306) %t307 = load { ptr, i64, i64 }, ptr %a303 store { ptr, i64, i64 } %t307, ptr %a309 store { ptr, i64, i64 } { ptr @.str.3683, i64 3, i64 0 }, ptr %a310 call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) store { ptr, i64, i64 } %t307, ptr %a311 call void @finch_str_drop(ptr %a311) %t312 = load { ptr, i64, i64 }, ptr %a308 %t313 = load { ptr, i64, i64 }, ptr %a213 store { ptr, i64, i64 } %t312, ptr %a315 store { ptr, i64, i64 } %t313, ptr %a316 call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) store { ptr, i64, i64 } %t312, ptr %a317 call void @finch_str_drop(ptr %a317) %t318 = load { ptr, i64, i64 }, ptr %a314 store { ptr, i64, i64 } %t318, ptr %a320 store { ptr, i64, i64 } { ptr @.str.3684, i64 6, i64 0 }, ptr %a321 call void @finch_str_concat(ptr %a319, ptr %a320, ptr %a321) store { ptr, i64, i64 } %t318, ptr %a322 call void @finch_str_drop(ptr %a322) %t323 = load { ptr, i64, i64 }, ptr %a319 %t324 = load { ptr, i64, i64 }, ptr %a279 store { ptr, i64, i64 } %t323, ptr %a326 store { ptr, i64, i64 } %t324, ptr %a327 call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327) store { ptr, i64, i64 } %t323, ptr %a328 call void @finch_str_drop(ptr %a328) %t329 = load { ptr, i64, i64 }, ptr %a325 store { ptr, i64, i64 } %t329, ptr %a331 store { ptr, i64, i64 } { ptr @.str.3685, i64 3, i64 0 }, ptr %a332 call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332) store { ptr, i64, i64 } %t329, ptr %a333 call void @finch_str_drop(ptr %a333) %t334 = load { ptr, i64, i64 }, ptr %a330 %t335 = load { ptr, i64, i64 }, ptr %a216 store { ptr, i64, i64 } %t334, ptr %a337 store { ptr, i64, i64 } %t335, ptr %a338 call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338) store { ptr, i64, i64 } %t334, ptr %a339 call void @finch_str_drop(ptr %a339) %t340 = load { ptr, i64, i64 }, ptr %a336 store { ptr, i64, i64 } %t340, ptr %a342 store { ptr, i64, i64 } { ptr @.str.3686, i64 2, i64 0 }, ptr %a343 call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) store { ptr, i64, i64 } %t340, ptr %a344 call void @finch_str_drop(ptr %a344) %t345 = load { ptr, i64, i64 }, ptr %a341 %t346 = call { ptr, i64, i64 } @finch.gen.op(ptr %t288, { ptr, i64, i64 } %t345) store { ptr, i64, i64 } %t345, ptr %a347 call void @finch_str_drop(ptr %a347) %t348 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t346, 0 %t349 = load %S.ast.Type, ptr %a32 store %S.ast.Type %t349, ptr %a350 call void @finch.copy.S_ast_Type(ptr %a351, ptr %a350) %t352 = load %S.ast.Type, ptr %a351 %t353 = insertvalue %S.gen.Val %t348, %S.ast.Type %t352, 1 %t354 = load ptr, ptr %a1 %t355 = load %S.ast.Type, ptr %a32 %t356 = call i1 @finch.gen.owning(ptr %t354, %S.ast.Type %t355) %t357 = insertvalue %S.gen.Val %t353, i1 %t356, 2 call void @finch_str_drop(ptr %a279) call void @finch_str_drop(ptr %a246) call void @finch_str_drop(ptr %a219) call void @finch_str_drop(ptr %a216) call void @finch_str_drop(ptr %a213) call void @finch_str_drop(ptr %a210) call void @finch_str_drop(ptr %a207) call void @finch_str_drop(ptr %a107) call void @finch_str_drop(ptr %a91) call void @finch.drop.S_gen_Val(ptr %a82) call void @finch.drop.S_ast_Type(ptr %a32) call void @finch.drop.S_ast_Type(ptr %a21) call void @finch_str_drop(ptr %a10) ret %S.gen.Val %t357 endif5745: %t358 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t358, ptr %a359 store { ptr, i64, i64 } { ptr @.str.3687, i64 5, i64 0 }, ptr %a360 %t361 = call i32 @finch_str_eq(ptr %a359, ptr %a360) %t362 = icmp ne i32 %t361, 0 br i1 %t362, label %then5763, label %endif5765 then5763: %t363 = load ptr, ptr %a1 %t364 = load %S.ast.Node, ptr %a2 %t365 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.checkArgs(ptr %t363, %S.ast.Node %t364, i64 1, i64 0, { ptr, i64, i64 } %t365) %t366 = load ptr, ptr %a1 %t367 = load %S.ast.Type, ptr %a21 %t368 = call i1 @finch.gen.owning(ptr %t366, %S.ast.Type %t367) br label %logic.from5766 logic.from5766: br i1 %t368, label %logic.end5768, label %logic.rhs5767 logic.rhs5767: %t369 = load ptr, ptr %a1 %t370 = load %S.ast.Type, ptr %a32 %t371 = call i1 @finch.gen.owning(ptr %t369, %S.ast.Type %t370) br label %logic.rend5769 logic.rend5769: br label %logic.end5768 logic.end5768: %t372 = phi i1 [ true, %logic.from5766 ], [ %t371, %logic.rend5769 ] br i1 %t372, label %then5770, label %endif5772 then5770: %t373 = load ptr, ptr %a1 %t374 = load ptr, ptr %a1 %t375 = load ptr, ptr %a1 %t376 = load %S.ast.Type, ptr %a4 %t377 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t375, %S.ast.Type %t376) store { ptr, i64, i64 } { ptr @.str.3689, i64 23, i64 0 }, ptr %a379 store { ptr, i64, i64 } %t377, ptr %a380 call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380) store { ptr, i64, i64 } %t377, ptr %a381 call void @finch_str_drop(ptr %a381) %t382 = load { ptr, i64, i64 }, ptr %a378 store { ptr, i64, i64 } %t382, ptr %a384 store { ptr, i64, i64 } { ptr @.str.3690, i64 6, i64 0 }, ptr %a385 call void @finch_str_concat(ptr %a383, ptr %a384, ptr %a385) store { ptr, i64, i64 } %t382, ptr %a386 call void @finch_str_drop(ptr %a386) %t387 = load { ptr, i64, i64 }, ptr %a383 %t388 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t387, ptr %a390 store { ptr, i64, i64 } %t388, ptr %a391 call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) store { ptr, i64, i64 } %t387, ptr %a392 call void @finch_str_drop(ptr %a392) %t393 = load { ptr, i64, i64 }, ptr %a389 store { ptr, i64, i64 } %t393, ptr %a395 store { ptr, i64, i64 } { ptr @.str.3691, i64 14, i64 0 }, ptr %a396 call void @finch_str_concat(ptr %a394, ptr %a395, ptr %a396) store { ptr, i64, i64 } %t393, ptr %a397 call void @finch_str_drop(ptr %a397) %t398 = load { ptr, i64, i64 }, ptr %a394 %t399 = call { ptr, i64, i64 } @finch.gen.op(ptr %t374, { ptr, i64, i64 } %t398) store { ptr, i64, i64 } %t398, ptr %a400 call void @finch_str_drop(ptr %a400) %t401 = call { ptr, i64, i64 } @finch.gen.load(ptr %t373, { ptr, i64, i64 } { ptr @.str.3688, i64 3, i64 0 }, { ptr, i64, i64 } %t399) store { ptr, i64, i64 } %t399, ptr %a402 call void @finch_str_drop(ptr %a402) store { ptr, i64, i64 } %t401, ptr %a403 %t404 = load ptr, ptr %a1 %t405 = load { ptr, i64, i64 }, ptr %a403 %t406 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t404, { ptr, i64, i64 } %t405) store { ptr, i64, i64 } %t406, ptr %a407 %t408 = load ptr, ptr %a1 %t409 = load { ptr, i64, i64 }, ptr %a3 %t410 = load %S.ast.Type, ptr %a4 %t411 = load { ptr, i64, i64 }, ptr %a407 %t412 = extractvalue { ptr, i64, i64 } %t411, 1 %t413 = icmp uge i64 3, %t412 br i1 %t413, label %range5773, label %inrange5774 range5773: call void @finch_panic_index(ptr @.str.3692, i64 2975, i64 3, i64 %t412) unreachable inrange5774: %t414 = extractvalue { ptr, i64, i64 } %t411, 0 %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %t414, i64 3 %t416 = load { ptr, i64, i64 }, ptr %t415 %t417 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t408, { ptr, i64, i64 } %t409, %S.ast.Type %t410, { ptr, i64, i64 } %t416) store { ptr, i64, i64 } %t417, ptr %a418 %t419 = load ptr, ptr %a1 %t420 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t419, { ptr, i64, i64 } { ptr @.str.3693, i64 10, i64 0 }) store { ptr, i64, i64 } %t420, ptr %a421 %t422 = load ptr, ptr %a1 %t423 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t422, { ptr, i64, i64 } { ptr @.str.3694, i64 10, i64 0 }) store { ptr, i64, i64 } %t423, ptr %a424 %t425 = load ptr, ptr %a1 %t426 = load ptr, ptr %a1 %t427 = load ptr, ptr %a1 %t428 = load ptr, ptr %a1 %t429 = load { ptr, i64, i64 }, ptr %a418 %t430 = load %S.ast.Type, ptr %a4 %t431 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t428, { ptr, i64, i64 } %t429, %S.ast.Type %t430, i64 0) %t432 = call { ptr, i64, i64 } @finch.gen.load(ptr %t427, { ptr, i64, i64 } { ptr @.str.3696, i64 3, i64 0 }, { ptr, i64, i64 } %t431) store { ptr, i64, i64 } %t431, ptr %a433 call void @finch_str_drop(ptr %a433) store { ptr, i64, i64 } { ptr @.str.3695, i64 12, i64 0 }, ptr %a435 store { ptr, i64, i64 } %t432, ptr %a436 call void @finch_str_concat(ptr %a434, ptr %a435, ptr %a436) store { ptr, i64, i64 } %t432, ptr %a437 call void @finch_str_drop(ptr %a437) %t438 = load { ptr, i64, i64 }, ptr %a434 store { ptr, i64, i64 } %t438, ptr %a440 store { ptr, i64, i64 } { ptr @.str.3697, i64 3, i64 0 }, ptr %a441 call void @finch_str_concat(ptr %a439, ptr %a440, ptr %a441) store { ptr, i64, i64 } %t438, ptr %a442 call void @finch_str_drop(ptr %a442) %t443 = load { ptr, i64, i64 }, ptr %a439 %t444 = call { ptr, i64, i64 } @finch.gen.op(ptr %t426, { ptr, i64, i64 } %t443) store { ptr, i64, i64 } %t443, ptr %a445 call void @finch_str_drop(ptr %a445) %t446 = load { ptr, i64, i64 }, ptr %a421 %t447 = load { ptr, i64, i64 }, ptr %a424 call void @finch.gen.condBr(ptr %t425, { ptr, i64, i64 } %t444, { ptr, i64, i64 } %t446, { ptr, i64, i64 } %t447) store { ptr, i64, i64 } %t444, ptr %a448 call void @finch_str_drop(ptr %a448) %t449 = load ptr, ptr %a1 %t450 = load { ptr, i64, i64 }, ptr %a421 call void @finch.gen.label(ptr %t449, { ptr, i64, i64 } %t450) %t451 = load ptr, ptr %a1 %t452 = load ptr, ptr %a1 %t453 = load { ptr, i64, i64 }, ptr %a418 %t454 = load %S.ast.Type, ptr %a4 %t455 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t452, { ptr, i64, i64 } %t453, %S.ast.Type %t454, i64 1) %t456 = load %S.ast.Type, ptr %a21 call void @finch.gen.dropAt(ptr %t451, { ptr, i64, i64 } %t455, %S.ast.Type %t456) store { ptr, i64, i64 } %t455, ptr %a457 call void @finch_str_drop(ptr %a457) %t458 = load ptr, ptr %a1 %t459 = load ptr, ptr %a1 %t460 = load { ptr, i64, i64 }, ptr %a418 %t461 = load %S.ast.Type, ptr %a4 %t462 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t459, { ptr, i64, i64 } %t460, %S.ast.Type %t461, i64 2) %t463 = load %S.ast.Type, ptr %a32 call void @finch.gen.dropAt(ptr %t458, { ptr, i64, i64 } %t462, %S.ast.Type %t463) store { ptr, i64, i64 } %t462, ptr %a464 call void @finch_str_drop(ptr %a464) %t465 = load ptr, ptr %a1 %t466 = load { ptr, i64, i64 }, ptr %a424 call void @finch.gen.br(ptr %t465, { ptr, i64, i64 } %t466) %t467 = load ptr, ptr %a1 %t468 = load { ptr, i64, i64 }, ptr %a424 call void @finch.gen.label(ptr %t467, { ptr, i64, i64 } %t468) %t469 = load ptr, ptr %a1 %t470 = load { ptr, i64, i64 }, ptr %a407 call void @finch.gen.loopEnd(ptr %t469, { ptr, i64, i64 } %t470) call void @finch_str_drop(ptr %a424) call void @finch_str_drop(ptr %a421) call void @finch_str_drop(ptr %a418) call void @finch.drop.arr_str(ptr %a407) call void @finch_str_drop(ptr %a403) br label %endif5772 endif5772: %t471 = load ptr, ptr %a1 %t472 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.3698, i64 31, i64 0 }, ptr %a474 store { ptr, i64, i64 } %t472, ptr %a475 call void @finch_str_concat(ptr %a473, ptr %a474, ptr %a475) %t476 = load { ptr, i64, i64 }, ptr %a473 store { ptr, i64, i64 } %t476, ptr %a478 store { ptr, i64, i64 } { ptr @.str.3699, i64 1, i64 0 }, ptr %a479 call void @finch_str_concat(ptr %a477, ptr %a478, ptr %a479) store { ptr, i64, i64 } %t476, ptr %a480 call void @finch_str_drop(ptr %a480) %t481 = load { ptr, i64, i64 }, ptr %a477 call void @finch.gen.emit(ptr %t471, { ptr, i64, i64 } %t481) store { ptr, i64, i64 } %t481, ptr %a482 call void @finch_str_drop(ptr %a482) %t483 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3700, i64 4, i64 0 }) %t484 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t483, 1 call void @finch.drop.S_ast_Type(ptr %a32) call void @finch.drop.S_ast_Type(ptr %a21) call void @finch_str_drop(ptr %a10) ret %S.gen.Val %t484 endif5765: %t485 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t485, ptr %a486 store { ptr, i64, i64 } { ptr @.str.3701, i64 4, i64 0 }, ptr %a487 %t488 = call i32 @finch_str_eq(ptr %a486, ptr %a487) %t489 = icmp ne i32 %t488, 0 br label %logic.from5775 logic.from5775: br i1 %t489, label %logic.end5777, label %logic.rhs5776 logic.rhs5776: %t490 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t490, ptr %a491 store { ptr, i64, i64 } { ptr @.str.3702, i64 6, i64 0 }, ptr %a492 %t493 = call i32 @finch_str_eq(ptr %a491, ptr %a492) %t494 = icmp ne i32 %t493, 0 br label %logic.rend5778 logic.rend5778: br label %logic.end5777 logic.end5777: %t495 = phi i1 [ true, %logic.from5775 ], [ %t494, %logic.rend5778 ] br i1 %t495, label %then5779, label %endif5781 then5779: %t496 = load ptr, ptr %a1 %t497 = load %S.ast.Node, ptr %a2 %t498 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.checkArgs(ptr %t496, %S.ast.Node %t497, i64 1, i64 0, { ptr, i64, i64 } %t498) store i64 1, ptr %a499 %t500 = load %S.ast.Type, ptr %a21 store %S.ast.Type %t500, ptr %a501 call void @finch.copy.S_ast_Type(ptr %a502, ptr %a501) %t503 = load %S.ast.Type, ptr %a502 store %S.ast.Type %t503, ptr %a504 %t505 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t505, ptr %a506 store { ptr, i64, i64 } { ptr @.str.3703, i64 6, i64 0 }, ptr %a507 %t508 = call i32 @finch_str_eq(ptr %a506, ptr %a507) %t509 = icmp ne i32 %t508, 0 br i1 %t509, label %then5782, label %endif5784 then5782: store i64 2, ptr %a499 %t510 = load %S.ast.Type, ptr %a32 store %S.ast.Type %t510, ptr %a511 call void @finch.copy.S_ast_Type(ptr %a512, ptr %a511) %t513 = load %S.ast.Type, ptr %a512 %t514 = load %S.ast.Type, ptr %a504 store %S.ast.Type %t513, ptr %a504 store %S.ast.Type %t514, ptr %a515 call void @finch.drop.S_ast_Type(ptr %a515) br label %endif5784 endif5784: %t516 = load %S.ast.Type, ptr %a504 %t517 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t516) store %S.ast.Type %t517, ptr %a518 %t519 = load ptr, ptr %a1 %t520 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t519, { ptr, i64, i64 } { ptr @.str.3704, i64 17, i64 0 }) store { ptr, i64, i64 } %t520, ptr %a521 %t522 = load ptr, ptr %a1 %t523 = load { ptr, i64, i64 }, ptr %a521 call void @finch.gen.store(ptr %t522, { ptr, i64, i64 } { ptr @.str.3705, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.3706, i64 15, i64 0 }, { ptr, i64, i64 } %t523) %t524 = load ptr, ptr %a1 %t525 = load ptr, ptr %a1 %t526 = load ptr, ptr %a1 %t527 = load %S.ast.Type, ptr %a4 %t528 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t526, %S.ast.Type %t527) store { ptr, i64, i64 } { ptr @.str.3708, i64 23, i64 0 }, ptr %a530 store { ptr, i64, i64 } %t528, ptr %a531 call void @finch_str_concat(ptr %a529, ptr %a530, ptr %a531) store { ptr, i64, i64 } %t528, ptr %a532 call void @finch_str_drop(ptr %a532) %t533 = load { ptr, i64, i64 }, ptr %a529 store { ptr, i64, i64 } %t533, ptr %a535 store { ptr, i64, i64 } { ptr @.str.3709, i64 6, i64 0 }, ptr %a536 call void @finch_str_concat(ptr %a534, ptr %a535, ptr %a536) store { ptr, i64, i64 } %t533, ptr %a537 call void @finch_str_drop(ptr %a537) %t538 = load { ptr, i64, i64 }, ptr %a534 %t539 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t538, ptr %a541 store { ptr, i64, i64 } %t539, ptr %a542 call void @finch_str_concat(ptr %a540, ptr %a541, ptr %a542) store { ptr, i64, i64 } %t538, ptr %a543 call void @finch_str_drop(ptr %a543) %t544 = load { ptr, i64, i64 }, ptr %a540 store { ptr, i64, i64 } %t544, ptr %a546 store { ptr, i64, i64 } { ptr @.str.3710, i64 14, i64 0 }, ptr %a547 call void @finch_str_concat(ptr %a545, ptr %a546, ptr %a547) store { ptr, i64, i64 } %t544, ptr %a548 call void @finch_str_drop(ptr %a548) %t549 = load { ptr, i64, i64 }, ptr %a545 %t550 = call { ptr, i64, i64 } @finch.gen.op(ptr %t525, { ptr, i64, i64 } %t549) store { ptr, i64, i64 } %t549, ptr %a551 call void @finch_str_drop(ptr %a551) %t552 = call { ptr, i64, i64 } @finch.gen.load(ptr %t524, { ptr, i64, i64 } { ptr @.str.3707, i64 3, i64 0 }, { ptr, i64, i64 } %t550) store { ptr, i64, i64 } %t550, ptr %a553 call void @finch_str_drop(ptr %a553) store { ptr, i64, i64 } %t552, ptr %a554 %t555 = load ptr, ptr %a1 %t556 = load { ptr, i64, i64 }, ptr %a521 store { ptr, i64, i64 } { ptr @.str.3711, i64 30, i64 0 }, ptr %a558 store { ptr, i64, i64 } %t556, ptr %a559 call void @finch_str_concat(ptr %a557, ptr %a558, ptr %a559) %t560 = load { ptr, i64, i64 }, ptr %a557 store { ptr, i64, i64 } %t560, ptr %a562 store { ptr, i64, i64 } { ptr @.str.3712, i64 6, i64 0 }, ptr %a563 call void @finch_str_concat(ptr %a561, ptr %a562, ptr %a563) store { ptr, i64, i64 } %t560, ptr %a564 call void @finch_str_drop(ptr %a564) %t565 = load { ptr, i64, i64 }, ptr %a561 %t566 = load { ptr, i64, i64 }, ptr %a554 store { ptr, i64, i64 } %t565, ptr %a568 store { ptr, i64, i64 } %t566, ptr %a569 call void @finch_str_concat(ptr %a567, ptr %a568, ptr %a569) store { ptr, i64, i64 } %t565, ptr %a570 call void @finch_str_drop(ptr %a570) %t571 = load { ptr, i64, i64 }, ptr %a567 store { ptr, i64, i64 } %t571, ptr %a573 store { ptr, i64, i64 } { ptr @.str.3713, i64 6, i64 0 }, ptr %a574 call void @finch_str_concat(ptr %a572, ptr %a573, ptr %a574) store { ptr, i64, i64 } %t571, ptr %a575 call void @finch_str_drop(ptr %a575) %t576 = load { ptr, i64, i64 }, ptr %a572 %t577 = load ptr, ptr %a1 %t578 = load %S.ast.Type, ptr %a504 %t579 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t577, %S.ast.Type %t578) store { ptr, i64, i64 } %t576, ptr %a581 store { ptr, i64, i64 } %t579, ptr %a582 call void @finch_str_concat(ptr %a580, ptr %a581, ptr %a582) store { ptr, i64, i64 } %t576, ptr %a583 call void @finch_str_drop(ptr %a583) store { ptr, i64, i64 } %t579, ptr %a584 call void @finch_str_drop(ptr %a584) %t585 = load { ptr, i64, i64 }, ptr %a580 store { ptr, i64, i64 } %t585, ptr %a587 store { ptr, i64, i64 } { ptr @.str.3714, i64 1, i64 0 }, ptr %a588 call void @finch_str_concat(ptr %a586, ptr %a587, ptr %a588) store { ptr, i64, i64 } %t585, ptr %a589 call void @finch_str_drop(ptr %a589) %t590 = load { ptr, i64, i64 }, ptr %a586 call void @finch.gen.emit(ptr %t555, { ptr, i64, i64 } %t590) store { ptr, i64, i64 } %t590, ptr %a591 call void @finch_str_drop(ptr %a591) %t592 = load ptr, ptr %a1 %t593 = load { ptr, i64, i64 }, ptr %a521 %t594 = call { ptr, i64, i64 } @finch.gen.load(ptr %t592, { ptr, i64, i64 } { ptr @.str.3715, i64 3, i64 0 }, { ptr, i64, i64 } %t593) store { ptr, i64, i64 } %t594, ptr %a595 %t596 = load ptr, ptr %a1 %t597 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t596, { ptr, i64, i64 } { ptr @.str.3716, i64 3, i64 0 }) store { ptr, i64, i64 } %t597, ptr %a598 %t599 = load ptr, ptr %a1 %t600 = load { ptr, i64, i64 }, ptr %a598 call void @finch.gen.store(ptr %t599, { ptr, i64, i64 } { ptr @.str.3717, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3718, i64 1, i64 0 }, { ptr, i64, i64 } %t600) %t601 = load ptr, ptr %a1 %t602 = load ptr, ptr %a1 %t603 = load ptr, ptr %a1 %t604 = load %S.ast.Type, ptr %a4 %t605 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t603, %S.ast.Type %t604) store { ptr, i64, i64 } { ptr @.str.3720, i64 23, i64 0 }, ptr %a607 store { ptr, i64, i64 } %t605, ptr %a608 call void @finch_str_concat(ptr %a606, ptr %a607, ptr %a608) store { ptr, i64, i64 } %t605, ptr %a609 call void @finch_str_drop(ptr %a609) %t610 = load { ptr, i64, i64 }, ptr %a606 store { ptr, i64, i64 } %t610, ptr %a612 store { ptr, i64, i64 } { ptr @.str.3721, i64 6, i64 0 }, ptr %a613 call void @finch_str_concat(ptr %a611, ptr %a612, ptr %a613) store { ptr, i64, i64 } %t610, ptr %a614 call void @finch_str_drop(ptr %a614) %t615 = load { ptr, i64, i64 }, ptr %a611 %t616 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t615, ptr %a618 store { ptr, i64, i64 } %t616, ptr %a619 call void @finch_str_concat(ptr %a617, ptr %a618, ptr %a619) store { ptr, i64, i64 } %t615, ptr %a620 call void @finch_str_drop(ptr %a620) %t621 = load { ptr, i64, i64 }, ptr %a617 store { ptr, i64, i64 } %t621, ptr %a623 store { ptr, i64, i64 } { ptr @.str.3722, i64 14, i64 0 }, ptr %a624 call void @finch_str_concat(ptr %a622, ptr %a623, ptr %a624) store { ptr, i64, i64 } %t621, ptr %a625 call void @finch_str_drop(ptr %a625) %t626 = load { ptr, i64, i64 }, ptr %a622 %t627 = call { ptr, i64, i64 } @finch.gen.op(ptr %t602, { ptr, i64, i64 } %t626) store { ptr, i64, i64 } %t626, ptr %a628 call void @finch_str_drop(ptr %a628) %t629 = call { ptr, i64, i64 } @finch.gen.load(ptr %t601, { ptr, i64, i64 } { ptr @.str.3719, i64 3, i64 0 }, { ptr, i64, i64 } %t627) store { ptr, i64, i64 } %t627, ptr %a630 call void @finch_str_drop(ptr %a630) store { ptr, i64, i64 } %t629, ptr %a631 %t632 = load ptr, ptr %a1 %t633 = load { ptr, i64, i64 }, ptr %a631 %t634 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t632, { ptr, i64, i64 } %t633) store { ptr, i64, i64 } %t634, ptr %a635 %t636 = load ptr, ptr %a1 %t637 = load { ptr, i64, i64 }, ptr %a3 %t638 = load %S.ast.Type, ptr %a4 %t639 = load { ptr, i64, i64 }, ptr %a635 %t640 = extractvalue { ptr, i64, i64 } %t639, 1 %t641 = icmp uge i64 3, %t640 br i1 %t641, label %range5785, label %inrange5786 range5785: call void @finch_panic_index(ptr @.str.3723, i64 3007, i64 3, i64 %t640) unreachable inrange5786: %t642 = extractvalue { ptr, i64, i64 } %t639, 0 %t643 = getelementptr inbounds { ptr, i64, i64 }, ptr %t642, i64 3 %t644 = load { ptr, i64, i64 }, ptr %t643 %t645 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t636, { ptr, i64, i64 } %t637, %S.ast.Type %t638, { ptr, i64, i64 } %t644) store { ptr, i64, i64 } %t645, ptr %a646 %t647 = load ptr, ptr %a1 %t648 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t647, { ptr, i64, i64 } { ptr @.str.3724, i64 10, i64 0 }) store { ptr, i64, i64 } %t648, ptr %a649 %t650 = load ptr, ptr %a1 %t651 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t650, { ptr, i64, i64 } { ptr @.str.3725, i64 10, i64 0 }) store { ptr, i64, i64 } %t651, ptr %a652 %t653 = load ptr, ptr %a1 %t654 = load ptr, ptr %a1 %t655 = load ptr, ptr %a1 %t656 = load ptr, ptr %a1 %t657 = load { ptr, i64, i64 }, ptr %a646 %t658 = load %S.ast.Type, ptr %a4 %t659 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t656, { ptr, i64, i64 } %t657, %S.ast.Type %t658, i64 0) %t660 = call { ptr, i64, i64 } @finch.gen.load(ptr %t655, { ptr, i64, i64 } { ptr @.str.3727, i64 3, i64 0 }, { ptr, i64, i64 } %t659) store { ptr, i64, i64 } %t659, ptr %a661 call void @finch_str_drop(ptr %a661) store { ptr, i64, i64 } { ptr @.str.3726, i64 12, i64 0 }, ptr %a663 store { ptr, i64, i64 } %t660, ptr %a664 call void @finch_str_concat(ptr %a662, ptr %a663, ptr %a664) store { ptr, i64, i64 } %t660, ptr %a665 call void @finch_str_drop(ptr %a665) %t666 = load { ptr, i64, i64 }, ptr %a662 store { ptr, i64, i64 } %t666, ptr %a668 store { ptr, i64, i64 } { ptr @.str.3728, i64 3, i64 0 }, ptr %a669 call void @finch_str_concat(ptr %a667, ptr %a668, ptr %a669) store { ptr, i64, i64 } %t666, ptr %a670 call void @finch_str_drop(ptr %a670) %t671 = load { ptr, i64, i64 }, ptr %a667 %t672 = call { ptr, i64, i64 } @finch.gen.op(ptr %t654, { ptr, i64, i64 } %t671) store { ptr, i64, i64 } %t671, ptr %a673 call void @finch_str_drop(ptr %a673) %t674 = load { ptr, i64, i64 }, ptr %a649 %t675 = load { ptr, i64, i64 }, ptr %a652 call void @finch.gen.condBr(ptr %t653, { ptr, i64, i64 } %t672, { ptr, i64, i64 } %t674, { ptr, i64, i64 } %t675) store { ptr, i64, i64 } %t672, ptr %a676 call void @finch_str_drop(ptr %a676) %t677 = load ptr, ptr %a1 %t678 = load { ptr, i64, i64 }, ptr %a649 call void @finch.gen.label(ptr %t677, { ptr, i64, i64 } %t678) %t679 = load ptr, ptr %a1 %t680 = load { ptr, i64, i64 }, ptr %a598 %t681 = call { ptr, i64, i64 } @finch.gen.load(ptr %t679, { ptr, i64, i64 } { ptr @.str.3729, i64 3, i64 0 }, { ptr, i64, i64 } %t680) store { ptr, i64, i64 } %t681, ptr %a682 %t683 = load ptr, ptr %a1 %t684 = load ptr, ptr %a1 %t685 = load ptr, ptr %a1 %t686 = load %S.ast.Type, ptr %a504 %t687 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t685, %S.ast.Type %t686) store { ptr, i64, i64 } { ptr @.str.3730, i64 23, i64 0 }, ptr %a689 store { ptr, i64, i64 } %t687, ptr %a690 call void @finch_str_concat(ptr %a688, ptr %a689, ptr %a690) store { ptr, i64, i64 } %t687, ptr %a691 call void @finch_str_drop(ptr %a691) %t692 = load { ptr, i64, i64 }, ptr %a688 store { ptr, i64, i64 } %t692, ptr %a694 store { ptr, i64, i64 } { ptr @.str.3731, i64 6, i64 0 }, ptr %a695 call void @finch_str_concat(ptr %a693, ptr %a694, ptr %a695) store { ptr, i64, i64 } %t692, ptr %a696 call void @finch_str_drop(ptr %a696) %t697 = load { ptr, i64, i64 }, ptr %a693 %t698 = load { ptr, i64, i64 }, ptr %a595 store { ptr, i64, i64 } %t697, ptr %a700 store { ptr, i64, i64 } %t698, ptr %a701 call void @finch_str_concat(ptr %a699, ptr %a700, ptr %a701) store { ptr, i64, i64 } %t697, ptr %a702 call void @finch_str_drop(ptr %a702) %t703 = load { ptr, i64, i64 }, ptr %a699 store { ptr, i64, i64 } %t703, ptr %a705 store { ptr, i64, i64 } { ptr @.str.3732, i64 6, i64 0 }, ptr %a706 call void @finch_str_concat(ptr %a704, ptr %a705, ptr %a706) store { ptr, i64, i64 } %t703, ptr %a707 call void @finch_str_drop(ptr %a707) %t708 = load { ptr, i64, i64 }, ptr %a704 %t709 = load { ptr, i64, i64 }, ptr %a682 store { ptr, i64, i64 } %t708, ptr %a711 store { ptr, i64, i64 } %t709, ptr %a712 call void @finch_str_concat(ptr %a710, ptr %a711, ptr %a712) store { ptr, i64, i64 } %t708, ptr %a713 call void @finch_str_drop(ptr %a713) %t714 = load { ptr, i64, i64 }, ptr %a710 %t715 = call { ptr, i64, i64 } @finch.gen.op(ptr %t684, { ptr, i64, i64 } %t714) store { ptr, i64, i64 } %t714, ptr %a716 call void @finch_str_drop(ptr %a716) %t717 = load ptr, ptr %a1 %t718 = load { ptr, i64, i64 }, ptr %a646 %t719 = load %S.ast.Type, ptr %a4 %t720 = load i64, ptr %a499 %t721 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t717, { ptr, i64, i64 } %t718, %S.ast.Type %t719, i64 %t720) %t722 = load %S.ast.Type, ptr %a504 call void @finch.gen.copyAt(ptr %t683, { ptr, i64, i64 } %t715, { ptr, i64, i64 } %t721, %S.ast.Type %t722) store { ptr, i64, i64 } %t715, ptr %a723 call void @finch_str_drop(ptr %a723) store { ptr, i64, i64 } %t721, ptr %a724 call void @finch_str_drop(ptr %a724) %t725 = load ptr, ptr %a1 %t726 = load ptr, ptr %a1 %t727 = load { ptr, i64, i64 }, ptr %a682 store { ptr, i64, i64 } { ptr @.str.3734, i64 8, i64 0 }, ptr %a729 store { ptr, i64, i64 } %t727, ptr %a730 call void @finch_str_concat(ptr %a728, ptr %a729, ptr %a730) %t731 = load { ptr, i64, i64 }, ptr %a728 store { ptr, i64, i64 } %t731, ptr %a733 store { ptr, i64, i64 } { ptr @.str.3735, i64 3, i64 0 }, ptr %a734 call void @finch_str_concat(ptr %a732, ptr %a733, ptr %a734) store { ptr, i64, i64 } %t731, ptr %a735 call void @finch_str_drop(ptr %a735) %t736 = load { ptr, i64, i64 }, ptr %a732 %t737 = call { ptr, i64, i64 } @finch.gen.op(ptr %t726, { ptr, i64, i64 } %t736) store { ptr, i64, i64 } %t736, ptr %a738 call void @finch_str_drop(ptr %a738) %t739 = load { ptr, i64, i64 }, ptr %a598 call void @finch.gen.store(ptr %t725, { ptr, i64, i64 } { ptr @.str.3733, i64 3, i64 0 }, { ptr, i64, i64 } %t737, { ptr, i64, i64 } %t739) store { ptr, i64, i64 } %t737, ptr %a740 call void @finch_str_drop(ptr %a740) %t741 = load ptr, ptr %a1 %t742 = load { ptr, i64, i64 }, ptr %a652 call void @finch.gen.br(ptr %t741, { ptr, i64, i64 } %t742) %t743 = load ptr, ptr %a1 %t744 = load { ptr, i64, i64 }, ptr %a652 call void @finch.gen.label(ptr %t743, { ptr, i64, i64 } %t744) %t745 = load ptr, ptr %a1 %t746 = load { ptr, i64, i64 }, ptr %a635 call void @finch.gen.loopEnd(ptr %t745, { ptr, i64, i64 } %t746) %t747 = load ptr, ptr %a1 %t748 = load { ptr, i64, i64 }, ptr %a521 %t749 = call { ptr, i64, i64 } @finch.gen.load(ptr %t747, { ptr, i64, i64 } { ptr @.str.3736, i64 17, i64 0 }, { ptr, i64, i64 } %t748) %t750 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t749, 0 %t751 = load %S.ast.Type, ptr %a518 store %S.ast.Type %t751, ptr %a752 call void @finch.copy.S_ast_Type(ptr %a753, ptr %a752) %t754 = load %S.ast.Type, ptr %a753 %t755 = insertvalue %S.gen.Val %t750, %S.ast.Type %t754, 1 %t756 = insertvalue %S.gen.Val %t755, i1 true, 2 call void @finch_str_drop(ptr %a682) call void @finch_str_drop(ptr %a652) call void @finch_str_drop(ptr %a649) call void @finch_str_drop(ptr %a646) call void @finch.drop.arr_str(ptr %a635) call void @finch_str_drop(ptr %a631) call void @finch_str_drop(ptr %a598) call void @finch_str_drop(ptr %a595) call void @finch_str_drop(ptr %a554) call void @finch_str_drop(ptr %a521) call void @finch.drop.S_ast_Type(ptr %a518) call void @finch.drop.S_ast_Type(ptr %a504) call void @finch.drop.S_ast_Type(ptr %a32) call void @finch.drop.S_ast_Type(ptr %a21) call void @finch_str_drop(ptr %a10) ret %S.gen.Val %t756 endif5781: %t757 = load ptr, ptr %a1 %t758 = load %S.ast.Node, ptr %a2 %t759 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } { ptr @.str.3737, i64 21, i64 0 }, ptr %a761 store { ptr, i64, i64 } %t759, ptr %a762 call void @finch_str_concat(ptr %a760, ptr %a761, ptr %a762) %t763 = load { ptr, i64, i64 }, ptr %a760 store { ptr, i64, i64 } %t763, ptr %a765 store { ptr, i64, i64 } { ptr @.str.3738, i64 49, i64 0 }, ptr %a766 call void @finch_str_concat(ptr %a764, ptr %a765, ptr %a766) store { ptr, i64, i64 } %t763, ptr %a767 call void @finch_str_drop(ptr %a767) %t768 = load { ptr, i64, i64 }, ptr %a764 call void @finch.gen.fail(ptr %t757, %S.ast.Node %t758, { ptr, i64, i64 } %t768) store { ptr, i64, i64 } %t768, ptr %a769 call void @finch_str_drop(ptr %a769) call void @finch.drop.S_ast_Type(ptr %a32) call void @finch.drop.S_ast_Type(ptr %a21) call void @finch_str_drop(ptr %a10) ret %S.gen.Val zeroinitializer } define internal %S.gen.Val @finch.gen.patternValue(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.ast.Type, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca %S.gen.EnumDef, align 16 %a39 = alloca %S.gen.EnumDef, align 16 %a41 = alloca %S.gen.EnumDef, align 16 %a46 = alloca i64, align 16 %a49 = alloca i64, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca i64, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca %S.ast.Type, align 16 %a118 = alloca %S.ast.Type, align 16 %a129 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.3739, i64 4, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 br label %logic.from5787 logic.from5787: br i1 %t9, label %logic.rhs5788, label %logic.end5789 logic.rhs5788: %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t11 = load { ptr, i64, i64 }, ptr %t10 store { ptr, i64, i64 } %t11, ptr %a12 store { ptr, i64, i64 } { ptr @.str.3740, i64 3, i64 0 }, ptr %a13 %t14 = call i32 @finch_str_eq(ptr %a12, ptr %a13) %t15 = icmp ne i32 %t14, 0 br label %logic.rend5790 logic.rend5790: br label %logic.end5789 logic.end5789: %t16 = phi i1 [ false, %logic.from5787 ], [ %t15, %logic.rend5790 ] br label %logic.from5791 logic.from5791: br i1 %t16, label %logic.rhs5792, label %logic.end5793 logic.rhs5792: %t17 = load ptr, ptr %a1 %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = call i64 @finch.gen.lookup(ptr %t17, { ptr, i64, i64 } %t19) %t21 = icmp slt i64 %t20, 0 br label %logic.rend5794 logic.rend5794: br label %logic.end5793 logic.end5793: %t22 = phi i1 [ false, %logic.from5791 ], [ %t21, %logic.rend5794 ] br i1 %t22, label %then5795, label %endif5797 then5795: %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null br i1 %t24, label %panic5798, label %ok5799 panic5798: call void @finch_panic(ptr @.str.3741, i64 3029, ptr @.str.3742) unreachable ok5799: %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 21 %t26 = load ptr, ptr %a1 %t27 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 3 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 2 %t30 = load { ptr, i64, i64 }, ptr %t29 %t31 = call i64 @finch.gen.findEnum(ptr %t26, { ptr, i64, i64 } %t28, { ptr, i64, i64 } %t30) %t32 = load { ptr, i64, i64 }, ptr %t25 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 br i1 %t34, label %range5800, label %inrange5801 range5800: call void @finch_panic_index(ptr @.str.3743, i64 3029, i64 %t31, i64 %t33) unreachable inrange5801: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.EnumDef, ptr %t35, i64 %t31 %t37 = load %S.gen.EnumDef, ptr %t36 store %S.gen.EnumDef %t37, ptr %a38 call void @finch.copy.S_gen_EnumDef(ptr %a39, ptr %a38) %t40 = load %S.gen.EnumDef, ptr %a39 store %S.gen.EnumDef %t40, ptr %a41 %t42 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 2 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 %t44 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t45 = load { ptr, i64, i64 }, ptr %t44 store i64 -1, ptr %a46 %t47 = load i64, ptr %t43 %t48 = load ptr, ptr %t42 store i64 0, ptr %a49 br label %find.cond5802 find.cond5802: %t50 = load i64, ptr %a49 %t51 = icmp slt i64 %t50, %t47 br i1 %t51, label %find.body5803, label %find.end5806 find.body5803: %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i64 %t50 %t53 = load { ptr, i64, i64 }, ptr %t52 store { ptr, i64, i64 } %t53, ptr %a54 store { ptr, i64, i64 } %t45, ptr %a55 %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) %t57 = icmp ne i32 %t56, 0 br i1 %t57, label %find.hit5804, label %find.next5805 find.hit5804: store i64 %t50, ptr %a46 br label %find.end5806 find.next5805: %t58 = add i64 %t50, 1 store i64 %t58, ptr %a49 br label %find.cond5802 find.end5806: %t59 = load i64, ptr %a46 store i64 %t59, ptr %a60 %t61 = load i64, ptr %a60 %t62 = icmp slt i64 %t61, 0 br i1 %t62, label %then5807, label %endif5809 then5807: %t63 = load ptr, ptr %a1 %t64 = load %S.ast.Node, ptr %a2 %t65 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t66 = load { ptr, i64, i64 }, ptr %t65 store { ptr, i64, i64 } { ptr @.str.3744, i64 1, i64 0 }, ptr %a68 store { ptr, i64, i64 } %t66, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) %t70 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t70, ptr %a72 store { ptr, i64, i64 } { ptr @.str.3745, i64 22, i64 0 }, ptr %a73 call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) store { ptr, i64, i64 } %t70, ptr %a74 call void @finch_str_drop(ptr %a74) %t75 = load { ptr, i64, i64 }, ptr %a71 %t76 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 1 %t77 = load { ptr, i64, i64 }, ptr %t76 store { ptr, i64, i64 } %t75, ptr %a79 store { ptr, i64, i64 } %t77, ptr %a80 call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) store { ptr, i64, i64 } %t75, ptr %a81 call void @finch_str_drop(ptr %a81) %t82 = load { ptr, i64, i64 }, ptr %a78 store { ptr, i64, i64 } %t82, ptr %a84 store { ptr, i64, i64 } { ptr @.str.3746, i64 10, i64 0 }, ptr %a85 call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) store { ptr, i64, i64 } %t82, ptr %a86 call void @finch_str_drop(ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a83 %t88 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 2 %t89 = getelementptr inbounds { ptr, i64, i64 }, ptr %t88, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.3747, i64 2, i64 0 }, ptr %a90 call void @finch_str_join(ptr %a91, ptr %t88, ptr %a90) %t92 = load { ptr, i64, i64 }, ptr %a91 store { ptr, i64, i64 } %t87, ptr %a94 store { ptr, i64, i64 } %t92, ptr %a95 call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) store { ptr, i64, i64 } %t87, ptr %a96 call void @finch_str_drop(ptr %a96) store { ptr, i64, i64 } %t92, ptr %a97 call void @finch_str_drop(ptr %a97) %t98 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t98, ptr %a100 store { ptr, i64, i64 } { ptr @.str.3748, i64 1, i64 0 }, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) store { ptr, i64, i64 } %t98, ptr %a102 call void @finch_str_drop(ptr %a102) %t103 = load { ptr, i64, i64 }, ptr %a99 call void @finch.gen.fail(ptr %t63, %S.ast.Node %t64, { ptr, i64, i64 } %t103) store { ptr, i64, i64 } %t103, ptr %a104 call void @finch_str_drop(ptr %a104) br label %endif5809 endif5809: %t105 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 3 %t106 = load i64, ptr %a60 %t107 = load { ptr, i64, i64 }, ptr %t105 %t108 = extractvalue { ptr, i64, i64 } %t107, 1 %t109 = icmp uge i64 %t106, %t108 br i1 %t109, label %range5810, label %inrange5811 range5810: call void @finch_panic_index(ptr @.str.3749, i64 3034, i64 %t106, i64 %t108) unreachable inrange5811: %t110 = extractvalue { ptr, i64, i64 } %t107, 0 %t111 = getelementptr inbounds i64, ptr %t110, i64 %t106 %t112 = load i64, ptr %t111 call void @finch_str_from_int(ptr %a113, i64 %t112) %t114 = load { ptr, i64, i64 }, ptr %a113 %t115 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t114, 0 %t116 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t116, ptr %a117 call void @finch.copy.S_ast_Type(ptr %a118, ptr %a117) %t119 = load %S.ast.Type, ptr %a118 %t120 = insertvalue %S.gen.Val %t115, %S.ast.Type %t119, 1 call void @finch.drop.S_gen_EnumDef(ptr %a41) ret %S.gen.Val %t120 endif5797: %t121 = load ptr, ptr %a1 %t122 = load ptr, ptr %a1 %t123 = load %S.ast.Node, ptr %a2 %t124 = load %S.ast.Type, ptr %a3 %t125 = call %S.gen.Val @finch.gen.exprWant(ptr %t122, %S.ast.Node %t123, %S.ast.Type %t124) %t126 = load %S.ast.Type, ptr %a3 %t127 = load %S.ast.Node, ptr %a2 %t128 = call %S.gen.Val @finch.gen.coerce(ptr %t121, %S.gen.Val %t125, %S.ast.Type %t126, %S.ast.Node %t127, { ptr, i64, i64 } { ptr @.str.3750, i64 12, i64 0 }) store %S.gen.Val %t125, ptr %a129 call void @finch.drop.S_gen_Val(ptr %a129) ret %S.gen.Val %t128 } define internal void @finch.drop.S_gen_SumPat(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.SumPat, ptr %a, i32 0, i32 1 call void @finch.drop.arr_S_ast_Node(ptr %t1) ret void } define internal %S.gen.Val @finch.gen.matchGen(ptr %p0, %S.ast.Node %p1, i1 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i1, align 16 %a13 = alloca %S.gen.Val, align 16 %a16 = alloca %S.ast.Type, align 16 %a17 = alloca %S.ast.Type, align 16 %a19 = alloca %S.ast.Type, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca i64, align 16 %a49 = alloca i64, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca i1, align 16 %a128 = alloca i1, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca %S.ast.Type, align 16 %a138 = alloca i64, align 16 %a140 = alloca i64, align 16 %a152 = alloca %S.ast.Node, align 16 %a153 = alloca %S.ast.Node, align 16 %a155 = alloca %S.ast.Node, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca i64, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca i64, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca %S.gen.SumPat, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca i64, align 16 %a210 = alloca i64, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca %S.gen.Val, align 16 %a303 = alloca i64, align 16 %a306 = alloca i64, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a355 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca %S.gen.Val, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca i1, align 16 %a404 = alloca %S.gen.StructDef, align 16 %a405 = alloca %S.gen.StructDef, align 16 %a407 = alloca %S.gen.StructDef, align 16 %a410 = alloca i64, align 16 %a421 = alloca { ptr, i64, i64 }, align 16 %a422 = alloca { ptr, i64, i64 }, align 16 %a444 = alloca i64, align 16 %a453 = alloca %S.ast.Type, align 16 %a454 = alloca %S.ast.Type, align 16 %a456 = alloca %S.ast.Type, align 16 %a461 = alloca { ptr, i64, i64 }, align 16 %a462 = alloca { ptr, i64, i64 }, align 16 %a463 = alloca { ptr, i64, i64 }, align 16 %a464 = alloca { ptr, i64, i64 }, align 16 %a466 = alloca { ptr, i64, i64 }, align 16 %a467 = alloca { ptr, i64, i64 }, align 16 %a468 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a473 = alloca { ptr, i64, i64 }, align 16 %a474 = alloca { ptr, i64, i64 }, align 16 %a475 = alloca { ptr, i64, i64 }, align 16 %a476 = alloca { ptr, i64, i64 }, align 16 %a478 = alloca { ptr, i64, i64 }, align 16 %a479 = alloca { ptr, i64, i64 }, align 16 %a480 = alloca { ptr, i64, i64 }, align 16 %a481 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a494 = alloca { ptr, i64, i64 }, align 16 %a495 = alloca { ptr, i64, i64 }, align 16 %a496 = alloca { ptr, i64, i64 }, align 16 %a497 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a501 = alloca { ptr, i64, i64 }, align 16 %a524 = alloca { ptr, i64, i64 }, align 16 %a525 = alloca { ptr, i64, i64 }, align 16 %a535 = alloca %S.ast.Node, align 16 %a536 = alloca %S.ast.Node, align 16 %a538 = alloca %S.ast.Node, align 16 %a543 = alloca %S.gen.Val, align 16 %a548 = alloca { ptr, i64, i64 }, align 16 %a549 = alloca { ptr, i64, i64 }, align 16 %a556 = alloca { ptr, i64, i64 }, align 16 %a557 = alloca { ptr, i64, i64 }, align 16 %a563 = alloca { ptr, i64, i64 }, align 16 %a564 = alloca { ptr, i64, i64 }, align 16 %a572 = alloca %S.ast.Type, align 16 %a573 = alloca %S.ast.Type, align 16 %a576 = alloca %S.ast.Type, align 16 %a583 = alloca %S.gen.Val, align 16 %a587 = alloca { ptr, i64, i64 }, align 16 %a592 = alloca { ptr, i64, i64 }, align 16 %a599 = alloca { ptr, i64, i64 }, align 16 %a600 = alloca { ptr, i64, i64 }, align 16 %a608 = alloca { ptr, i64, i64 }, align 16 %a609 = alloca { ptr, i64, i64 }, align 16 %a619 = alloca { ptr, i64, i64 }, align 16 %a620 = alloca { ptr, i64, i64 }, align 16 %a647 = alloca { ptr, i64, i64 }, align 16 %a660 = alloca i64, align 16 %a665 = alloca { ptr, i64, i64 }, align 16 %a667 = alloca i64, align 16 %a670 = alloca i64, align 16 %a675 = alloca { ptr, i64, i64 }, align 16 %a676 = alloca { ptr, i64, i64 }, align 16 %a680 = alloca { ptr, i64, i64 }, align 16 %a702 = alloca { ptr, i64, i64 }, align 16 %a703 = alloca { ptr, i64, i64 }, align 16 %a717 = alloca { ptr, i64, i64 }, align 16 %a718 = alloca { ptr, i64, i64 }, align 16 %a720 = alloca { ptr, i64, i64 }, align 16 %a721 = alloca { ptr, i64, i64 }, align 16 %a722 = alloca { ptr, i64, i64 }, align 16 %a723 = alloca { ptr, i64, i64 }, align 16 %a725 = alloca { ptr, i64, i64 }, align 16 %a726 = alloca { ptr, i64, i64 }, align 16 %a727 = alloca { ptr, i64, i64 }, align 16 %a728 = alloca { ptr, i64, i64 }, align 16 %a730 = alloca { ptr, i64, i64 }, align 16 %a733 = alloca { ptr, i64, i64 }, align 16 %a734 = alloca { ptr, i64, i64 }, align 16 %a752 = alloca %S.gen.EnumDef, align 16 %a753 = alloca %S.gen.EnumDef, align 16 %a755 = alloca %S.gen.EnumDef, align 16 %a756 = alloca { ptr, i64, i64 }, align 16 %a760 = alloca i64, align 16 %a772 = alloca { ptr, i64, i64 }, align 16 %a774 = alloca i64, align 16 %a777 = alloca i64, align 16 %a782 = alloca { ptr, i64, i64 }, align 16 %a783 = alloca { ptr, i64, i64 }, align 16 %a787 = alloca { ptr, i64, i64 }, align 16 %a800 = alloca { ptr, i64, i64 }, align 16 %a801 = alloca { ptr, i64, i64 }, align 16 %a815 = alloca { ptr, i64, i64 }, align 16 %a816 = alloca { ptr, i64, i64 }, align 16 %a818 = alloca { ptr, i64, i64 }, align 16 %a819 = alloca { ptr, i64, i64 }, align 16 %a820 = alloca { ptr, i64, i64 }, align 16 %a821 = alloca { ptr, i64, i64 }, align 16 %a823 = alloca { ptr, i64, i64 }, align 16 %a824 = alloca { ptr, i64, i64 }, align 16 %a825 = alloca { ptr, i64, i64 }, align 16 %a826 = alloca { ptr, i64, i64 }, align 16 %a828 = alloca { ptr, i64, i64 }, align 16 %a833 = alloca { ptr, i64, i64 }, align 16 %a834 = alloca { ptr, i64, i64 }, align 16 %a835 = alloca { ptr, i64, i64 }, align 16 %a836 = alloca { ptr, i64, i64 }, align 16 %a838 = alloca { ptr, i64, i64 }, align 16 %a839 = alloca { ptr, i64, i64 }, align 16 %a840 = alloca { ptr, i64, i64 }, align 16 %a841 = alloca { ptr, i64, i64 }, align 16 %a843 = alloca { ptr, i64, i64 }, align 16 %a867 = alloca { ptr, i64, i64 }, align 16 %a868 = alloca { ptr, i64, i64 }, align 16 %a869 = alloca { ptr, i64, i64 }, align 16 %a870 = alloca { ptr, i64, i64 }, align 16 %a872 = alloca { ptr, i64, i64 }, align 16 %a873 = alloca { ptr, i64, i64 }, align 16 %a874 = alloca { ptr, i64, i64 }, align 16 %a875 = alloca { ptr, i64, i64 }, align 16 %a880 = alloca { ptr, i64, i64 }, align 16 %a881 = alloca { ptr, i64, i64 }, align 16 %a882 = alloca { ptr, i64, i64 }, align 16 %a883 = alloca { ptr, i64, i64 }, align 16 %a884 = alloca { ptr, i64, i64 }, align 16 %a887 = alloca { ptr, i64, i64 }, align 16 %a890 = alloca %S.ast.Type, align 16 %a891 = alloca %S.ast.Type, align 16 %a898 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i1 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 br i1 %t8, label %range5812, label %inrange5813 range5812: call void @finch_panic_index(ptr @.str.3751, i64 3042, i64 0, i64 %t7) unreachable inrange5813: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 %t12 = call %S.gen.Val @finch.gen.expr(ptr %t4, %S.ast.Node %t11) store %S.gen.Val %t12, ptr %a13 %t14 = getelementptr inbounds %S.gen.Val, ptr %a13, i32 0, i32 1 %t15 = load %S.ast.Type, ptr %t14 store %S.ast.Type %t15, ptr %a16 call void @finch.copy.S_ast_Type(ptr %a17, ptr %a16) %t18 = load %S.ast.Type, ptr %a17 store %S.ast.Type %t18, ptr %a19 %t20 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a22 store { ptr, i64, i64 } { ptr @.str.3752, i64 4, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) %t25 = icmp ne i32 %t24, 0 br label %logic.from5814 logic.from5814: br i1 %t25, label %logic.end5816, label %logic.rhs5815 logic.rhs5815: %t26 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.3753, i64 4, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 br label %logic.rend5817 logic.rend5817: br label %logic.end5816 logic.end5816: %t32 = phi i1 [ true, %logic.from5814 ], [ %t31, %logic.rend5817 ] br i1 %t32, label %then5818, label %endif5820 then5818: %t33 = load ptr, ptr %a1 %t34 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t35 = load { ptr, i64, i64 }, ptr %t34 %t36 = extractvalue { ptr, i64, i64 } %t35, 1 %t37 = icmp uge i64 0, %t36 br i1 %t37, label %range5821, label %inrange5822 range5821: call void @finch_panic_index(ptr @.str.3754, i64 3045, i64 0, i64 %t36) unreachable inrange5822: %t38 = extractvalue { ptr, i64, i64 } %t35, 0 %t39 = getelementptr inbounds %S.ast.Node, ptr %t38, i64 0 %t40 = load %S.ast.Node, ptr %t39 call void @finch.gen.fail(ptr %t33, %S.ast.Node %t40, { ptr, i64, i64 } { ptr @.str.3755, i64 30, i64 0 }) br label %endif5820 endif5820: %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null br i1 %t42, label %panic5823, label %ok5824 panic5823: call void @finch_panic(ptr @.str.3756, i64 3047, ptr @.str.3757) unreachable ok5824: %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 11 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i32 0, i32 1 %t45 = load i64, ptr %t44 store i64 %t45, ptr %a46 %t47 = load ptr, ptr %a1 %t48 = load %S.gen.Val, ptr %a13 call void @finch.gen.hold(ptr %t47, %S.gen.Val %t48) store i64 -1, ptr %a49 store { ptr, i64, i64 } { ptr @.str.3758, i64 0, i64 0 }, ptr %a50 %t51 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 %t52 = load { ptr, i64, i64 }, ptr %t51 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.3759, i64 6, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 br i1 %t56, label %then5825, label %endif5827 then5825: %t57 = load ptr, ptr %a1 %t58 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 %t59 = load { ptr, i64, i64 }, ptr %t58 %t60 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2 %t61 = load { ptr, i64, i64 }, ptr %t60 %t62 = call i64 @finch.gen.findSum(ptr %t57, { ptr, i64, i64 } %t59, { ptr, i64, i64 } %t61) store i64 %t62, ptr %a49 %t63 = load i64, ptr %a49 %t64 = icmp sge i64 %t63, 0 br i1 %t64, label %then5828, label %endif5830 then5828: %t65 = load ptr, ptr %a1 %t66 = load ptr, ptr %a1 %t67 = load %S.ast.Type, ptr %a19 %t68 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t66, %S.ast.Type %t67) store { ptr, i64, i64 } { ptr @.str.3760, i64 13, i64 0 }, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) store { ptr, i64, i64 } %t68, ptr %a72 call void @finch_str_drop(ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t73, ptr %a75 store { ptr, i64, i64 } { ptr @.str.3761, i64 1, i64 0 }, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) store { ptr, i64, i64 } %t73, ptr %a77 call void @finch_str_drop(ptr %a77) %t78 = load { ptr, i64, i64 }, ptr %a74 %t79 = getelementptr inbounds %S.gen.Val, ptr %a13, i32 0, i32 0 %t80 = load { ptr, i64, i64 }, ptr %t79 store { ptr, i64, i64 } %t78, ptr %a82 store { ptr, i64, i64 } %t80, ptr %a83 call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) store { ptr, i64, i64 } %t78, ptr %a84 call void @finch_str_drop(ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a81 store { ptr, i64, i64 } %t85, ptr %a87 store { ptr, i64, i64 } { ptr @.str.3762, i64 2, i64 0 }, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) store { ptr, i64, i64 } %t85, ptr %a89 call void @finch_str_drop(ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a86 %t91 = load ptr, ptr %a1 %t92 = icmp eq ptr %t91, null br i1 %t92, label %panic5831, label %ok5832 panic5831: call void @finch_panic(ptr @.str.3763, i64 3054, ptr @.str.3764) unreachable ok5832: %t93 = getelementptr inbounds %S.gen.Gen, ptr %t91, i32 0, i32 16 %t94 = load ptr, ptr %a1 %t95 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 %t96 = load { ptr, i64, i64 }, ptr %t95 %t97 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2 %t98 = load { ptr, i64, i64 }, ptr %t97 %t99 = call i64 @finch.gen.findStruct(ptr %t94, { ptr, i64, i64 } %t96, { ptr, i64, i64 } %t98) %t100 = load { ptr, i64, i64 }, ptr %t93 %t101 = extractvalue { ptr, i64, i64 } %t100, 1 %t102 = icmp uge i64 %t99, %t101 br i1 %t102, label %range5833, label %inrange5834 range5833: call void @finch_panic_index(ptr @.str.3765, i64 3054, i64 %t99, i64 %t101) unreachable inrange5834: %t103 = extractvalue { ptr, i64, i64 } %t100, 0 %t104 = getelementptr inbounds %S.gen.StructDef, ptr %t103, i64 %t99 %t105 = getelementptr inbounds %S.gen.StructDef, ptr %t104, i32 0, i32 3 %t106 = load { ptr, i64, i64 }, ptr %t105 %t107 = extractvalue { ptr, i64, i64 } %t106, 1 %t108 = icmp uge i64 0, %t107 br i1 %t108, label %range5835, label %inrange5836 range5835: call void @finch_panic_index(ptr @.str.3766, i64 3054, i64 0, i64 %t107) unreachable inrange5836: %t109 = extractvalue { ptr, i64, i64 } %t106, 0 %t110 = getelementptr inbounds i64, ptr %t109, i64 0 %t111 = load i64, ptr %t110 call void @finch_str_from_int(ptr %a112, i64 %t111) %t113 = load { ptr, i64, i64 }, ptr %a112 store { ptr, i64, i64 } %t90, ptr %a115 store { ptr, i64, i64 } %t113, ptr %a116 call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) store { ptr, i64, i64 } %t90, ptr %a117 call void @finch_str_drop(ptr %a117) store { ptr, i64, i64 } %t113, ptr %a118 call void @finch_str_drop(ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a114 %t120 = call { ptr, i64, i64 } @finch.gen.op(ptr %t65, { ptr, i64, i64 } %t119) store { ptr, i64, i64 } %t119, ptr %a121 call void @finch_str_drop(ptr %a121) %t122 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } %t120, ptr %a50 store { ptr, i64, i64 } %t122, ptr %a123 call void @finch_str_drop(ptr %a123) br label %endif5830 endif5830: br label %endif5827 endif5827: %t124 = load ptr, ptr %a1 %t125 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t124, { ptr, i64, i64 } { ptr @.str.3767, i64 9, i64 0 }) store { ptr, i64, i64 } %t125, ptr %a126 store i1 false, ptr %a127 store i1 false, ptr %a128 store { ptr, i64, i64 } zeroinitializer, ptr %a129 store { ptr, i64, i64 } zeroinitializer, ptr %a130 store { ptr, i64, i64 } zeroinitializer, ptr %a131 %t132 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3768, i64 4, i64 0 }) store %S.ast.Type %t132, ptr %a133 %t134 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1 %t136 = load i64, ptr %t135 %t137 = sub i64 %t136, 1 store i64 %t137, ptr %a138 %t139 = load i64, ptr %a138 store i64 0, ptr %a140 br label %for.cond5837 for.cond5837: %t141 = load i64, ptr %a140 %t142 = icmp slt i64 %t141, %t139 br i1 %t142, label %for.body5838, label %for.end5840 for.body5838: %t143 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t144 = load i64, ptr %a140 %t145 = add i64 1, %t144 %t146 = load { ptr, i64, i64 }, ptr %t143 %t147 = extractvalue { ptr, i64, i64 } %t146, 1 %t148 = icmp uge i64 %t145, %t147 br i1 %t148, label %range5841, label %inrange5842 range5841: call void @finch_panic_index(ptr @.str.3769, i64 3066, i64 %t145, i64 %t147) unreachable inrange5842: %t149 = extractvalue { ptr, i64, i64 } %t146, 0 %t150 = getelementptr inbounds %S.ast.Node, ptr %t149, i64 %t145 %t151 = load %S.ast.Node, ptr %t150 store %S.ast.Node %t151, ptr %a152 call void @finch.copy.S_ast_Node(ptr %a153, ptr %a152) %t154 = load %S.ast.Node, ptr %a153 store %S.ast.Node %t154, ptr %a155 %t156 = load i1, ptr %a127 br i1 %t156, label %then5843, label %endif5845 then5843: %t157 = load ptr, ptr %a1 %t158 = load %S.ast.Node, ptr %a155 call void @finch.gen.fail(ptr %t157, %S.ast.Node %t158, { ptr, i64, i64 } { ptr @.str.3770, i64 72, i64 0 }) br label %endif5845 endif5845: %t159 = load ptr, ptr %a1 %t160 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t159, { ptr, i64, i64 } { ptr @.str.3771, i64 9, i64 0 }) store { ptr, i64, i64 } %t160, ptr %a161 %t162 = load ptr, ptr %a1 %t163 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t162, { ptr, i64, i64 } { ptr @.str.3772, i64 10, i64 0 }) store { ptr, i64, i64 } %t163, ptr %a164 store { ptr, i64, i64 } zeroinitializer, ptr %a165 store i64 -1, ptr %a166 %t167 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 6 %t168 = load i1, ptr %t167 br i1 %t168, label %then5846, label %else5847 then5846: store i1 true, ptr %a127 %t169 = load ptr, ptr %a1 %t170 = load { ptr, i64, i64 }, ptr %a161 call void @finch.gen.br(ptr %t169, { ptr, i64, i64 } %t170) br label %endif5848 else5847: %t171 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 9 %t172 = load { ptr, i64, i64 }, ptr %t171 %t173 = extractvalue { ptr, i64, i64 } %t172, 1 %t174 = icmp uge i64 0, %t173 br i1 %t174, label %range5849, label %inrange5850 range5849: call void @finch_panic_index(ptr @.str.3773, i64 3078, i64 0, i64 %t173) unreachable inrange5850: %t175 = extractvalue { ptr, i64, i64 } %t172, 0 %t176 = getelementptr inbounds %S.ast.Node, ptr %t175, i64 0 %t177 = getelementptr inbounds %S.ast.Node, ptr %t176, i32 0, i32 9 %t178 = load { ptr, i64, i64 }, ptr %t177 store { ptr, i64, i64 } %t178, ptr %a179 call void @finch.copy.arr_S_ast_Node(ptr %a180, ptr %a179) %t181 = load { ptr, i64, i64 }, ptr %a180 store { ptr, i64, i64 } %t181, ptr %a182 %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 %t184 = load i64, ptr %t183 store i64 0, ptr %a185 br label %for.cond5851 for.cond5851: %t186 = load i64, ptr %a185 %t187 = icmp slt i64 %t186, %t184 br i1 %t187, label %for.body5852, label %for.end5854 for.body5852: store { ptr, i64, i64 } { ptr @.str.3774, i64 0, i64 0 }, ptr %a188 %t189 = load i64, ptr %a49 %t190 = icmp sge i64 %t189, 0 br i1 %t190, label %then5855, label %else5856 then5855: %t191 = load ptr, ptr %a1 %t192 = load i64, ptr %a185 %t193 = load { ptr, i64, i64 }, ptr %a182 %t194 = extractvalue { ptr, i64, i64 } %t193, 1 %t195 = icmp uge i64 %t192, %t194 br i1 %t195, label %range5858, label %inrange5859 range5858: call void @finch_panic_index(ptr @.str.3775, i64 3082, i64 %t192, i64 %t194) unreachable inrange5859: %t196 = extractvalue { ptr, i64, i64 } %t193, 0 %t197 = getelementptr inbounds %S.ast.Node, ptr %t196, i64 %t192 %t198 = load %S.ast.Node, ptr %t197 %t199 = load i64, ptr %a49 %t200 = call %S.gen.SumPat @finch.gen.sumPattern(ptr %t191, %S.ast.Node %t198, i64 %t199) store %S.gen.SumPat %t200, ptr %a201 %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t203 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 %t204 = load i64, ptr %t203 call void @finch_str_from_int(ptr %a205, i64 %t204) %t206 = load { ptr, i64, i64 }, ptr %a205 store i64 -1, ptr %a207 %t208 = load i64, ptr %t202 %t209 = load ptr, ptr %a129 store i64 0, ptr %a210 br label %find.cond5860 find.cond5860: %t211 = load i64, ptr %a210 %t212 = icmp slt i64 %t211, %t208 br i1 %t212, label %find.body5861, label %find.end5864 find.body5861: %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i64 %t211 %t214 = load { ptr, i64, i64 }, ptr %t213 store { ptr, i64, i64 } %t214, ptr %a215 store { ptr, i64, i64 } %t206, ptr %a216 %t217 = call i32 @finch_str_eq(ptr %a215, ptr %a216) %t218 = icmp ne i32 %t217, 0 br i1 %t218, label %find.hit5862, label %find.next5863 find.hit5862: store i64 %t211, ptr %a207 br label %find.end5864 find.next5863: %t219 = add i64 %t211, 1 store i64 %t219, ptr %a210 br label %find.cond5860 find.end5864: store { ptr, i64, i64 } %t206, ptr %a220 call void @finch_str_drop(ptr %a220) %t221 = load i64, ptr %a207 %t222 = icmp sge i64 %t221, 0 br i1 %t222, label %then5865, label %endif5867 then5865: %t223 = load ptr, ptr %a1 %t224 = load i64, ptr %a185 %t225 = load { ptr, i64, i64 }, ptr %a182 %t226 = extractvalue { ptr, i64, i64 } %t225, 1 %t227 = icmp uge i64 %t224, %t226 br i1 %t227, label %range5868, label %inrange5869 range5868: call void @finch_panic_index(ptr @.str.3776, i64 3084, i64 %t224, i64 %t226) unreachable inrange5869: %t228 = extractvalue { ptr, i64, i64 } %t225, 0 %t229 = getelementptr inbounds %S.ast.Node, ptr %t228, i64 %t224 %t230 = load %S.ast.Node, ptr %t229 call void @finch.gen.fail(ptr %t223, %S.ast.Node %t230, { ptr, i64, i64 } { ptr @.str.3777, i64 49, i64 0 }) br label %endif5867 endif5867: %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t232 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 %t233 = load i64, ptr %t232 call void @finch_str_from_int(ptr %a234, i64 %t233) %t235 = load { ptr, i64, i64 }, ptr %a234 %t236 = load i64, ptr %t231 %t237 = add i64 %t236, 1 call void @finch_arr_reserve(ptr %a129, i64 %t237, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t238 = load ptr, ptr %a129 %t239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t238, i64 %t236 store { ptr, i64, i64 } %t235, ptr %t239 store i64 %t237, ptr %t231 %t240 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 1 %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t240, i32 0, i32 1 %t242 = load i64, ptr %t241 %t243 = icmp sgt i64 %t242, 0 br i1 %t243, label %then5870, label %endif5872 then5870: %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 %t245 = load i64, ptr %t244 %t246 = icmp sgt i64 %t245, 1 br i1 %t246, label %then5873, label %endif5875 then5873: %t247 = load ptr, ptr %a1 %t248 = load i64, ptr %a185 %t249 = load { ptr, i64, i64 }, ptr %a182 %t250 = extractvalue { ptr, i64, i64 } %t249, 1 %t251 = icmp uge i64 %t248, %t250 br i1 %t251, label %range5876, label %inrange5877 range5876: call void @finch_panic_index(ptr @.str.3778, i64 3089, i64 %t248, i64 %t250) unreachable inrange5877: %t252 = extractvalue { ptr, i64, i64 } %t249, 0 %t253 = getelementptr inbounds %S.ast.Node, ptr %t252, i64 %t248 %t254 = load %S.ast.Node, ptr %t253 call void @finch.gen.fail(ptr %t247, %S.ast.Node %t254, { ptr, i64, i64 } { ptr @.str.3779, i64 52, i64 0 }) br label %endif5875 endif5875: %t255 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 1 %t256 = load { ptr, i64, i64 }, ptr %t255 store { ptr, i64, i64 } %t256, ptr %a257 call void @finch.copy.arr_S_ast_Node(ptr %a258, ptr %a257) %t259 = load { ptr, i64, i64 }, ptr %a258 %t260 = load { ptr, i64, i64 }, ptr %a165 store { ptr, i64, i64 } %t259, ptr %a165 store { ptr, i64, i64 } %t260, ptr %a261 call void @finch.drop.arr_S_ast_Node(ptr %a261) %t262 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 %t263 = load i64, ptr %t262 store i64 %t263, ptr %a166 br label %endif5872 endif5872: %t264 = load ptr, ptr %a1 %t265 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } { ptr @.str.3780, i64 12, i64 0 }, ptr %a267 store { ptr, i64, i64 } %t265, ptr %a268 call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) %t269 = load { ptr, i64, i64 }, ptr %a266 store { ptr, i64, i64 } %t269, ptr %a271 store { ptr, i64, i64 } { ptr @.str.3781, i64 2, i64 0 }, ptr %a272 call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) store { ptr, i64, i64 } %t269, ptr %a273 call void @finch_str_drop(ptr %a273) %t274 = load { ptr, i64, i64 }, ptr %a270 %t275 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 %t276 = load i64, ptr %t275 call void @finch_str_from_int(ptr %a277, i64 %t276) %t278 = load { ptr, i64, i64 }, ptr %a277 store { ptr, i64, i64 } %t274, ptr %a280 store { ptr, i64, i64 } %t278, ptr %a281 call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) store { ptr, i64, i64 } %t274, ptr %a282 call void @finch_str_drop(ptr %a282) store { ptr, i64, i64 } %t278, ptr %a283 call void @finch_str_drop(ptr %a283) %t284 = load { ptr, i64, i64 }, ptr %a279 %t285 = call { ptr, i64, i64 } @finch.gen.op(ptr %t264, { ptr, i64, i64 } %t284) store { ptr, i64, i64 } %t284, ptr %a286 call void @finch_str_drop(ptr %a286) %t287 = load { ptr, i64, i64 }, ptr %a188 store { ptr, i64, i64 } %t285, ptr %a188 store { ptr, i64, i64 } %t287, ptr %a288 call void @finch_str_drop(ptr %a288) call void @finch.drop.S_gen_SumPat(ptr %a201) br label %endif5857 else5856: %t289 = load ptr, ptr %a1 %t290 = load i64, ptr %a185 %t291 = load { ptr, i64, i64 }, ptr %a182 %t292 = extractvalue { ptr, i64, i64 } %t291, 1 %t293 = icmp uge i64 %t290, %t292 br i1 %t293, label %range5878, label %inrange5879 range5878: call void @finch_panic_index(ptr @.str.3782, i64 3096, i64 %t290, i64 %t292) unreachable inrange5879: %t294 = extractvalue { ptr, i64, i64 } %t291, 0 %t295 = getelementptr inbounds %S.ast.Node, ptr %t294, i64 %t290 %t296 = load %S.ast.Node, ptr %t295 %t297 = load %S.ast.Type, ptr %a19 %t298 = call %S.gen.Val @finch.gen.patternValue(ptr %t289, %S.ast.Node %t296, %S.ast.Type %t297) store %S.gen.Val %t298, ptr %a299 %t300 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t301 = getelementptr inbounds %S.gen.Val, ptr %a299, i32 0, i32 0 %t302 = load { ptr, i64, i64 }, ptr %t301 store i64 -1, ptr %a303 %t304 = load i64, ptr %t300 %t305 = load ptr, ptr %a129 store i64 0, ptr %a306 br label %find.cond5880 find.cond5880: %t307 = load i64, ptr %a306 %t308 = icmp slt i64 %t307, %t304 br i1 %t308, label %find.body5881, label %find.end5884 find.body5881: %t309 = getelementptr inbounds { ptr, i64, i64 }, ptr %t305, i64 %t307 %t310 = load { ptr, i64, i64 }, ptr %t309 store { ptr, i64, i64 } %t310, ptr %a311 store { ptr, i64, i64 } %t302, ptr %a312 %t313 = call i32 @finch_str_eq(ptr %a311, ptr %a312) %t314 = icmp ne i32 %t313, 0 br i1 %t314, label %find.hit5882, label %find.next5883 find.hit5882: store i64 %t307, ptr %a303 br label %find.end5884 find.next5883: %t315 = add i64 %t307, 1 store i64 %t315, ptr %a306 br label %find.cond5880 find.end5884: %t316 = load i64, ptr %a303 %t317 = icmp sge i64 %t316, 0 br label %logic.from5885 logic.from5885: br i1 %t317, label %logic.rhs5886, label %logic.end5887 logic.rhs5886: %t318 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 %t319 = load { ptr, i64, i64 }, ptr %t318 store { ptr, i64, i64 } %t319, ptr %a320 store { ptr, i64, i64 } { ptr @.str.3783, i64 4, i64 0 }, ptr %a321 %t322 = call i32 @finch_str_eq(ptr %a320, ptr %a321) %t323 = icmp ne i32 %t322, 0 br label %logic.rend5888 logic.rend5888: br label %logic.end5887 logic.end5887: %t324 = phi i1 [ false, %logic.from5885 ], [ %t323, %logic.rend5888 ] br i1 %t324, label %then5889, label %endif5891 then5889: %t325 = load ptr, ptr %a1 %t326 = load i64, ptr %a185 %t327 = load { ptr, i64, i64 }, ptr %a182 %t328 = extractvalue { ptr, i64, i64 } %t327, 1 %t329 = icmp uge i64 %t326, %t328 br i1 %t329, label %range5892, label %inrange5893 range5892: call void @finch_panic_index(ptr @.str.3784, i64 3098, i64 %t326, i64 %t328) unreachable inrange5893: %t330 = extractvalue { ptr, i64, i64 } %t327, 0 %t331 = getelementptr inbounds %S.ast.Node, ptr %t330, i64 %t326 %t332 = load %S.ast.Node, ptr %t331 call void @finch.gen.fail(ptr %t325, %S.ast.Node %t332, { ptr, i64, i64 } { ptr @.str.3785, i64 49, i64 0 }) br label %endif5891 endif5891: %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t334 = getelementptr inbounds %S.gen.Val, ptr %a299, i32 0, i32 0 %t335 = load { ptr, i64, i64 }, ptr %t334 store { ptr, i64, i64 } %t335, ptr %a336 call void @finch_str_copy(ptr %a337, ptr %a336) %t338 = load { ptr, i64, i64 }, ptr %a337 %t339 = load i64, ptr %t333 %t340 = add i64 %t339, 1 call void @finch_arr_reserve(ptr %a129, i64 %t340, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t341 = load ptr, ptr %a129 %t342 = getelementptr inbounds { ptr, i64, i64 }, ptr %t341, i64 %t339 store { ptr, i64, i64 } %t338, ptr %t342 store i64 %t340, ptr %t333 %t343 = load ptr, ptr %a1 %t344 = load %S.gen.Val, ptr %a13 %t345 = load %S.gen.Val, ptr %a299 %t346 = load i64, ptr %a185 %t347 = load { ptr, i64, i64 }, ptr %a182 %t348 = extractvalue { ptr, i64, i64 } %t347, 1 %t349 = icmp uge i64 %t346, %t348 br i1 %t349, label %range5894, label %inrange5895 range5894: call void @finch_panic_index(ptr @.str.3787, i64 3101, i64 %t346, i64 %t348) unreachable inrange5895: %t350 = extractvalue { ptr, i64, i64 } %t347, 0 %t351 = getelementptr inbounds %S.ast.Node, ptr %t350, i64 %t346 %t352 = load %S.ast.Node, ptr %t351 %t353 = call %S.gen.Val @finch.gen.compare(ptr %t343, { ptr, i64, i64 } { ptr @.str.3786, i64 2, i64 0 }, %S.gen.Val %t344, %S.gen.Val %t345, %S.ast.Node %t352) %t354 = extractvalue %S.gen.Val %t353, 0 store { ptr, i64, i64 } %t354, ptr %a355 call void @finch_str_copy(ptr %a356, ptr %a355) %t357 = load { ptr, i64, i64 }, ptr %a356 store %S.gen.Val %t353, ptr %a358 call void @finch.drop.S_gen_Val(ptr %a358) %t359 = load { ptr, i64, i64 }, ptr %a188 store { ptr, i64, i64 } %t357, ptr %a188 store { ptr, i64, i64 } %t359, ptr %a360 call void @finch_str_drop(ptr %a360) call void @finch.drop.S_gen_Val(ptr %a299) br label %endif5857 endif5857: %t361 = load i64, ptr %a185 %t362 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 %t363 = load i64, ptr %t362 %t364 = sub i64 %t363, 1 %t365 = icmp eq i64 %t361, %t364 br i1 %t365, label %then5896, label %else5897 then5896: %t366 = load ptr, ptr %a1 %t367 = load { ptr, i64, i64 }, ptr %a188 %t368 = load { ptr, i64, i64 }, ptr %a161 %t369 = load { ptr, i64, i64 }, ptr %a164 call void @finch.gen.condBr(ptr %t366, { ptr, i64, i64 } %t367, { ptr, i64, i64 } %t368, { ptr, i64, i64 } %t369) br label %endif5898 else5897: %t370 = load ptr, ptr %a1 %t371 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t370, { ptr, i64, i64 } { ptr @.str.3788, i64 8, i64 0 }) store { ptr, i64, i64 } %t371, ptr %a372 %t373 = load ptr, ptr %a1 %t374 = load { ptr, i64, i64 }, ptr %a188 %t375 = load { ptr, i64, i64 }, ptr %a161 %t376 = load { ptr, i64, i64 }, ptr %a372 call void @finch.gen.condBr(ptr %t373, { ptr, i64, i64 } %t374, { ptr, i64, i64 } %t375, { ptr, i64, i64 } %t376) %t377 = load ptr, ptr %a1 %t378 = load { ptr, i64, i64 }, ptr %a372 call void @finch.gen.label(ptr %t377, { ptr, i64, i64 } %t378) call void @finch_str_drop(ptr %a372) br label %endif5898 endif5898: call void @finch_str_drop(ptr %a188) br label %for.step5853 for.step5853: %t379 = load i64, ptr %a185 %t380 = add i64 %t379, 1 store i64 %t380, ptr %a185 br label %for.cond5851 for.end5854: call void @finch.drop.arr_S_ast_Node(ptr %a182) br label %endif5848 endif5848: %t381 = load ptr, ptr %a1 %t382 = load { ptr, i64, i64 }, ptr %a161 call void @finch.gen.label(ptr %t381, { ptr, i64, i64 } %t382) %t383 = getelementptr inbounds { ptr, i64, i64 }, ptr %a165, i32 0, i32 1 %t384 = load i64, ptr %t383 %t385 = icmp sgt i64 %t384, 0 store i1 %t385, ptr %a386 %t387 = load i1, ptr %a386 br i1 %t387, label %then5899, label %endif5901 then5899: %t388 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t388) %t389 = load ptr, ptr %a1 %t390 = icmp eq ptr %t389, null br i1 %t390, label %panic5902, label %ok5903 panic5902: call void @finch_panic(ptr @.str.3789, i64 3116, ptr @.str.3790) unreachable ok5903: %t391 = getelementptr inbounds %S.gen.Gen, ptr %t389, i32 0, i32 16 %t392 = load ptr, ptr %a1 %t393 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 %t394 = load { ptr, i64, i64 }, ptr %t393 %t395 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2 %t396 = load { ptr, i64, i64 }, ptr %t395 %t397 = call i64 @finch.gen.findStruct(ptr %t392, { ptr, i64, i64 } %t394, { ptr, i64, i64 } %t396) %t398 = load { ptr, i64, i64 }, ptr %t391 %t399 = extractvalue { ptr, i64, i64 } %t398, 1 %t400 = icmp uge i64 %t397, %t399 br i1 %t400, label %range5904, label %inrange5905 range5904: call void @finch_panic_index(ptr @.str.3791, i64 3116, i64 %t397, i64 %t399) unreachable inrange5905: %t401 = extractvalue { ptr, i64, i64 } %t398, 0 %t402 = getelementptr inbounds %S.gen.StructDef, ptr %t401, i64 %t397 %t403 = load %S.gen.StructDef, ptr %t402 store %S.gen.StructDef %t403, ptr %a404 call void @finch.copy.S_gen_StructDef(ptr %a405, ptr %a404) %t406 = load %S.gen.StructDef, ptr %a405 store %S.gen.StructDef %t406, ptr %a407 %t408 = getelementptr inbounds { ptr, i64, i64 }, ptr %a165, i32 0, i32 1 %t409 = load i64, ptr %t408 store i64 0, ptr %a410 br label %for.cond5906 for.cond5906: %t411 = load i64, ptr %a410 %t412 = icmp slt i64 %t411, %t409 br i1 %t412, label %for.body5907, label %for.end5909 for.body5907: %t413 = load i64, ptr %a410 %t414 = load { ptr, i64, i64 }, ptr %a165 %t415 = extractvalue { ptr, i64, i64 } %t414, 1 %t416 = icmp uge i64 %t413, %t415 br i1 %t416, label %range5910, label %inrange5911 range5910: call void @finch_panic_index(ptr @.str.3792, i64 3118, i64 %t413, i64 %t415) unreachable inrange5911: %t417 = extractvalue { ptr, i64, i64 } %t414, 0 %t418 = getelementptr inbounds %S.ast.Node, ptr %t417, i64 %t413 %t419 = getelementptr inbounds %S.ast.Node, ptr %t418, i32 0, i32 1 %t420 = load { ptr, i64, i64 }, ptr %t419 store { ptr, i64, i64 } %t420, ptr %a421 store { ptr, i64, i64 } { ptr @.str.3793, i64 1, i64 0 }, ptr %a422 %t423 = call i32 @finch_str_eq(ptr %a421, ptr %a422) %t424 = icmp ne i32 %t423, 0 br i1 %t424, label %then5912, label %endif5914 then5912: br label %for.step5908 endif5914: %t425 = load ptr, ptr %a1 %t426 = icmp eq ptr %t425, null br i1 %t426, label %panic5915, label %ok5916 panic5915: call void @finch_panic(ptr @.str.3794, i64 3121, ptr @.str.3795) unreachable ok5916: %t427 = getelementptr inbounds %S.gen.Gen, ptr %t425, i32 0, i32 22 %t428 = load i64, ptr %a49 %t429 = load { ptr, i64, i64 }, ptr %t427 %t430 = extractvalue { ptr, i64, i64 } %t429, 1 %t431 = icmp uge i64 %t428, %t430 br i1 %t431, label %range5917, label %inrange5918 range5917: call void @finch_panic_index(ptr @.str.3796, i64 3121, i64 %t428, i64 %t430) unreachable inrange5918: %t432 = extractvalue { ptr, i64, i64 } %t429, 0 %t433 = getelementptr inbounds %S.gen.SumDef, ptr %t432, i64 %t428 %t434 = getelementptr inbounds %S.gen.SumDef, ptr %t433, i32 0, i32 4 %t435 = load i64, ptr %a166 %t436 = load { ptr, i64, i64 }, ptr %t434 %t437 = extractvalue { ptr, i64, i64 } %t436, 1 %t438 = icmp uge i64 %t435, %t437 br i1 %t438, label %range5919, label %inrange5920 range5919: call void @finch_panic_index(ptr @.str.3797, i64 3121, i64 %t435, i64 %t437) unreachable inrange5920: %t439 = extractvalue { ptr, i64, i64 } %t436, 0 %t440 = getelementptr inbounds i64, ptr %t439, i64 %t435 %t441 = load i64, ptr %t440 %t442 = load i64, ptr %a410 %t443 = add i64 %t441, %t442 store i64 %t443, ptr %a444 %t445 = getelementptr inbounds %S.gen.StructDef, ptr %a407, i32 0, i32 12 %t446 = load i64, ptr %a444 %t447 = load { ptr, i64, i64 }, ptr %t445 %t448 = extractvalue { ptr, i64, i64 } %t447, 1 %t449 = icmp uge i64 %t446, %t448 br i1 %t449, label %range5921, label %inrange5922 range5921: call void @finch_panic_index(ptr @.str.3798, i64 3122, i64 %t446, i64 %t448) unreachable inrange5922: %t450 = extractvalue { ptr, i64, i64 } %t447, 0 %t451 = getelementptr inbounds %S.ast.Type, ptr %t450, i64 %t446 %t452 = load %S.ast.Type, ptr %t451 store %S.ast.Type %t452, ptr %a453 call void @finch.copy.S_ast_Type(ptr %a454, ptr %a453) %t455 = load %S.ast.Type, ptr %a454 store %S.ast.Type %t455, ptr %a456 %t457 = load ptr, ptr %a1 %t458 = load ptr, ptr %a1 %t459 = load %S.ast.Type, ptr %a19 %t460 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t458, %S.ast.Type %t459) store { ptr, i64, i64 } { ptr @.str.3799, i64 13, i64 0 }, ptr %a462 store { ptr, i64, i64 } %t460, ptr %a463 call void @finch_str_concat(ptr %a461, ptr %a462, ptr %a463) store { ptr, i64, i64 } %t460, ptr %a464 call void @finch_str_drop(ptr %a464) %t465 = load { ptr, i64, i64 }, ptr %a461 store { ptr, i64, i64 } %t465, ptr %a467 store { ptr, i64, i64 } { ptr @.str.3800, i64 1, i64 0 }, ptr %a468 call void @finch_str_concat(ptr %a466, ptr %a467, ptr %a468) store { ptr, i64, i64 } %t465, ptr %a469 call void @finch_str_drop(ptr %a469) %t470 = load { ptr, i64, i64 }, ptr %a466 %t471 = getelementptr inbounds %S.gen.Val, ptr %a13, i32 0, i32 0 %t472 = load { ptr, i64, i64 }, ptr %t471 store { ptr, i64, i64 } %t470, ptr %a474 store { ptr, i64, i64 } %t472, ptr %a475 call void @finch_str_concat(ptr %a473, ptr %a474, ptr %a475) store { ptr, i64, i64 } %t470, ptr %a476 call void @finch_str_drop(ptr %a476) %t477 = load { ptr, i64, i64 }, ptr %a473 store { ptr, i64, i64 } %t477, ptr %a479 store { ptr, i64, i64 } { ptr @.str.3801, i64 2, i64 0 }, ptr %a480 call void @finch_str_concat(ptr %a478, ptr %a479, ptr %a480) store { ptr, i64, i64 } %t477, ptr %a481 call void @finch_str_drop(ptr %a481) %t482 = load { ptr, i64, i64 }, ptr %a478 %t483 = getelementptr inbounds %S.gen.StructDef, ptr %a407, i32 0, i32 3 %t484 = load i64, ptr %a444 %t485 = load { ptr, i64, i64 }, ptr %t483 %t486 = extractvalue { ptr, i64, i64 } %t485, 1 %t487 = icmp uge i64 %t484, %t486 br i1 %t487, label %range5923, label %inrange5924 range5923: call void @finch_panic_index(ptr @.str.3802, i64 3123, i64 %t484, i64 %t486) unreachable inrange5924: %t488 = extractvalue { ptr, i64, i64 } %t485, 0 %t489 = getelementptr inbounds i64, ptr %t488, i64 %t484 %t490 = load i64, ptr %t489 call void @finch_str_from_int(ptr %a491, i64 %t490) %t492 = load { ptr, i64, i64 }, ptr %a491 store { ptr, i64, i64 } %t482, ptr %a494 store { ptr, i64, i64 } %t492, ptr %a495 call void @finch_str_concat(ptr %a493, ptr %a494, ptr %a495) store { ptr, i64, i64 } %t482, ptr %a496 call void @finch_str_drop(ptr %a496) store { ptr, i64, i64 } %t492, ptr %a497 call void @finch_str_drop(ptr %a497) %t498 = load { ptr, i64, i64 }, ptr %a493 %t499 = call { ptr, i64, i64 } @finch.gen.op(ptr %t457, { ptr, i64, i64 } %t498) store { ptr, i64, i64 } %t498, ptr %a500 call void @finch_str_drop(ptr %a500) store { ptr, i64, i64 } %t499, ptr %a501 %t502 = load ptr, ptr %a1 %t503 = load i64, ptr %a410 %t504 = load { ptr, i64, i64 }, ptr %a165 %t505 = extractvalue { ptr, i64, i64 } %t504, 1 %t506 = icmp uge i64 %t503, %t505 br i1 %t506, label %range5925, label %inrange5926 range5925: call void @finch_panic_index(ptr @.str.3803, i64 3124, i64 %t503, i64 %t505) unreachable inrange5926: %t507 = extractvalue { ptr, i64, i64 } %t504, 0 %t508 = getelementptr inbounds %S.ast.Node, ptr %t507, i64 %t503 %t509 = load %S.ast.Node, ptr %t508 %t510 = load i64, ptr %a410 %t511 = load { ptr, i64, i64 }, ptr %a165 %t512 = extractvalue { ptr, i64, i64 } %t511, 1 %t513 = icmp uge i64 %t510, %t512 br i1 %t513, label %range5927, label %inrange5928 range5927: call void @finch_panic_index(ptr @.str.3804, i64 3124, i64 %t510, i64 %t512) unreachable inrange5928: %t514 = extractvalue { ptr, i64, i64 } %t511, 0 %t515 = getelementptr inbounds %S.ast.Node, ptr %t514, i64 %t510 %t516 = getelementptr inbounds %S.ast.Node, ptr %t515, i32 0, i32 1 %t517 = load { ptr, i64, i64 }, ptr %t516 %t518 = load %S.ast.Type, ptr %a456 %t519 = load ptr, ptr %a1 %t520 = load { ptr, i64, i64 }, ptr %a501 %t521 = load %S.ast.Type, ptr %a456 %t522 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t519, { ptr, i64, i64 } %t520, %S.ast.Type %t521) %t523 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t502, %S.ast.Node %t509, { ptr, i64, i64 } %t517, %S.ast.Type %t518, { ptr, i64, i64 } %t522, i1 true, i1 true) store { ptr, i64, i64 } %t522, ptr %a524 call void @finch_str_drop(ptr %a524) store { ptr, i64, i64 } %t523, ptr %a525 call void @finch_str_drop(ptr %a525) call void @finch_str_drop(ptr %a501) call void @finch.drop.S_ast_Type(ptr %a456) br label %for.step5908 for.step5908: %t526 = load i64, ptr %a410 %t527 = add i64 %t526, 1 store i64 %t527, ptr %a410 br label %for.cond5906 for.end5909: call void @finch.drop.S_gen_StructDef(ptr %a407) br label %endif5901 endif5901: %t528 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 9 %t529 = load { ptr, i64, i64 }, ptr %t528 %t530 = extractvalue { ptr, i64, i64 } %t529, 1 %t531 = icmp uge i64 1, %t530 br i1 %t531, label %range5929, label %inrange5930 range5929: call void @finch_panic_index(ptr @.str.3805, i64 3127, i64 1, i64 %t530) unreachable inrange5930: %t532 = extractvalue { ptr, i64, i64 } %t529, 0 %t533 = getelementptr inbounds %S.ast.Node, ptr %t532, i64 1 %t534 = load %S.ast.Node, ptr %t533 store %S.ast.Node %t534, ptr %a535 call void @finch.copy.S_ast_Node(ptr %a536, ptr %a535) %t537 = load %S.ast.Node, ptr %a536 store %S.ast.Node %t537, ptr %a538 %t539 = load i1, ptr %a3 br i1 %t539, label %then5931, label %else5932 then5931: %t540 = load ptr, ptr %a1 %t541 = load %S.ast.Node, ptr %a538 %t542 = call %S.gen.Val @finch.gen.expr(ptr %t540, %S.ast.Node %t541) store %S.gen.Val %t542, ptr %a543 %t544 = load i64, ptr %a140 %t545 = icmp eq i64 %t544, 0 br label %logic.from5934 logic.from5934: br i1 %t545, label %logic.end5936, label %logic.rhs5935 logic.rhs5935: %t546 = getelementptr inbounds %S.ast.Type, ptr %a133, i32 0, i32 0 %t547 = load { ptr, i64, i64 }, ptr %t546 store { ptr, i64, i64 } %t547, ptr %a548 store { ptr, i64, i64 } { ptr @.str.3806, i64 4, i64 0 }, ptr %a549 %t550 = call i32 @finch_str_eq(ptr %a548, ptr %a549) %t551 = icmp ne i32 %t550, 0 br label %logic.rend5937 logic.rend5937: br label %logic.end5936 logic.end5936: %t552 = phi i1 [ true, %logic.from5934 ], [ %t551, %logic.rend5937 ] br i1 %t552, label %then5938, label %endif5940 then5938: %t553 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 %t554 = getelementptr inbounds %S.ast.Type, ptr %t553, i32 0, i32 0 %t555 = load { ptr, i64, i64 }, ptr %t554 store { ptr, i64, i64 } %t555, ptr %a556 store { ptr, i64, i64 } { ptr @.str.3807, i64 4, i64 0 }, ptr %a557 %t558 = call i32 @finch_str_eq(ptr %a556, ptr %a557) %t559 = icmp ne i32 %t558, 0 br label %logic.from5941 logic.from5941: br i1 %t559, label %logic.end5943, label %logic.rhs5942 logic.rhs5942: %t560 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 %t561 = getelementptr inbounds %S.ast.Type, ptr %t560, i32 0, i32 0 %t562 = load { ptr, i64, i64 }, ptr %t561 store { ptr, i64, i64 } %t562, ptr %a563 store { ptr, i64, i64 } { ptr @.str.3808, i64 4, i64 0 }, ptr %a564 %t565 = call i32 @finch_str_eq(ptr %a563, ptr %a564) %t566 = icmp ne i32 %t565, 0 br label %logic.rend5944 logic.rend5944: br label %logic.end5943 logic.end5943: %t567 = phi i1 [ true, %logic.from5941 ], [ %t566, %logic.rend5944 ] br i1 %t567, label %then5945, label %endif5947 then5945: %t568 = load ptr, ptr %a1 %t569 = load %S.ast.Node, ptr %a538 call void @finch.gen.fail(ptr %t568, %S.ast.Node %t569, { ptr, i64, i64 } { ptr @.str.3809, i64 52, i64 0 }) br label %endif5947 endif5947: %t570 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 %t571 = load %S.ast.Type, ptr %t570 store %S.ast.Type %t571, ptr %a572 call void @finch.copy.S_ast_Type(ptr %a573, ptr %a572) %t574 = load %S.ast.Type, ptr %a573 %t575 = load %S.ast.Type, ptr %a133 store %S.ast.Type %t574, ptr %a133 store %S.ast.Type %t575, ptr %a576 call void @finch.drop.S_ast_Type(ptr %a576) br label %endif5940 endif5940: %t577 = load ptr, ptr %a1 %t578 = load %S.gen.Val, ptr %a543 %t579 = load %S.ast.Type, ptr %a133 %t580 = load %S.ast.Node, ptr %a538 %t581 = call %S.gen.Val @finch.gen.coerce(ptr %t577, %S.gen.Val %t578, %S.ast.Type %t579, %S.ast.Node %t580, { ptr, i64, i64 } { ptr @.str.3810, i64 57, i64 0 }) %t582 = load %S.gen.Val, ptr %a543 store %S.gen.Val %t581, ptr %a543 store %S.gen.Val %t582, ptr %a583 call void @finch.drop.S_gen_Val(ptr %a583) %t584 = load ptr, ptr %a1 %t585 = load %S.gen.Val, ptr %a543 %t586 = call { ptr, i64, i64 } @finch.gen.own(ptr %t584, %S.gen.Val %t585) store { ptr, i64, i64 } %t586, ptr %a587 %t588 = load i1, ptr %a386 br i1 %t588, label %then5948, label %endif5950 then5948: %t589 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t589) br label %endif5950 endif5950: %t590 = load ptr, ptr %a1 %t591 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t590, { ptr, i64, i64 } { ptr @.str.3811, i64 10, i64 0 }) store { ptr, i64, i64 } %t591, ptr %a592 %t593 = load ptr, ptr %a1 %t594 = load { ptr, i64, i64 }, ptr %a592 call void @finch.gen.br(ptr %t593, { ptr, i64, i64 } %t594) %t595 = load ptr, ptr %a1 %t596 = load { ptr, i64, i64 }, ptr %a592 call void @finch.gen.label(ptr %t595, { ptr, i64, i64 } %t596) %t597 = getelementptr inbounds { ptr, i64, i64 }, ptr %a130, i32 0, i32 1 %t598 = load { ptr, i64, i64 }, ptr %a587 store { ptr, i64, i64 } %t598, ptr %a599 call void @finch_str_copy(ptr %a600, ptr %a599) %t601 = load { ptr, i64, i64 }, ptr %a600 %t602 = load i64, ptr %t597 %t603 = add i64 %t602, 1 call void @finch_arr_reserve(ptr %a130, i64 %t603, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t604 = load ptr, ptr %a130 %t605 = getelementptr inbounds { ptr, i64, i64 }, ptr %t604, i64 %t602 store { ptr, i64, i64 } %t601, ptr %t605 store i64 %t603, ptr %t597 %t606 = getelementptr inbounds { ptr, i64, i64 }, ptr %a131, i32 0, i32 1 %t607 = load { ptr, i64, i64 }, ptr %a592 store { ptr, i64, i64 } %t607, ptr %a608 call void @finch_str_copy(ptr %a609, ptr %a608) %t610 = load { ptr, i64, i64 }, ptr %a609 %t611 = load i64, ptr %t606 %t612 = add i64 %t611, 1 call void @finch_arr_reserve(ptr %a131, i64 %t612, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t613 = load ptr, ptr %a131 %t614 = getelementptr inbounds { ptr, i64, i64 }, ptr %t613, i64 %t611 store { ptr, i64, i64 } %t610, ptr %t614 store i64 %t612, ptr %t606 %t615 = load ptr, ptr %a1 %t616 = load { ptr, i64, i64 }, ptr %a126 call void @finch.gen.br(ptr %t615, { ptr, i64, i64 } %t616) store i1 true, ptr %a128 call void @finch_str_drop(ptr %a592) call void @finch_str_drop(ptr %a587) call void @finch.drop.S_gen_Val(ptr %a543) br label %endif5933 else5932: %t617 = getelementptr inbounds %S.ast.Node, ptr %a538, i32 0, i32 0 %t618 = load { ptr, i64, i64 }, ptr %t617 store { ptr, i64, i64 } %t618, ptr %a619 store { ptr, i64, i64 } { ptr @.str.3812, i64 5, i64 0 }, ptr %a620 %t621 = call i32 @finch_str_eq(ptr %a619, ptr %a620) %t622 = icmp ne i32 %t621, 0 br i1 %t622, label %then5951, label %else5952 then5951: %t623 = load ptr, ptr %a1 %t624 = load %S.ast.Node, ptr %a538 call void @finch.gen.block(ptr %t623, %S.ast.Node %t624, i1 true) br label %endif5953 else5952: %t625 = load ptr, ptr %a1 %t626 = load %S.ast.Node, ptr %a538 call void @finch.gen.stmt(ptr %t625, %S.ast.Node %t626) br label %endif5953 endif5953: %t627 = load ptr, ptr %a1 %t628 = icmp eq ptr %t627, null br i1 %t628, label %panic5954, label %ok5955 panic5954: call void @finch_panic(ptr @.str.3813, i64 3154, ptr @.str.3814) unreachable ok5955: %t629 = getelementptr inbounds %S.gen.Gen, ptr %t627, i32 0, i32 9 %t630 = load i1, ptr %t629 %t631 = xor i1 %t630, true br i1 %t631, label %then5956, label %endif5958 then5956: store i1 true, ptr %a128 br label %endif5958 endif5958: %t632 = load i1, ptr %a386 br i1 %t632, label %then5959, label %endif5961 then5959: %t633 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t633) br label %endif5961 endif5961: %t634 = load ptr, ptr %a1 %t635 = load { ptr, i64, i64 }, ptr %a126 call void @finch.gen.br(ptr %t634, { ptr, i64, i64 } %t635) br label %endif5933 endif5933: %t636 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 6 %t637 = load i1, ptr %t636 %t638 = xor i1 %t637, true br i1 %t638, label %then5962, label %endif5964 then5962: %t639 = load ptr, ptr %a1 %t640 = load { ptr, i64, i64 }, ptr %a164 call void @finch.gen.label(ptr %t639, { ptr, i64, i64 } %t640) br label %endif5964 endif5964: call void @finch.drop.S_ast_Node(ptr %a538) call void @finch.drop.arr_S_ast_Node(ptr %a165) call void @finch_str_drop(ptr %a164) call void @finch_str_drop(ptr %a161) call void @finch.drop.S_ast_Node(ptr %a155) br label %for.step5839 for.step5839: %t641 = load i64, ptr %a140 %t642 = add i64 %t641, 1 store i64 %t642, ptr %a140 br label %for.cond5837 for.end5840: %t643 = load i1, ptr %a127 %t644 = xor i1 %t643, true br i1 %t644, label %then5965, label %endif5967 then5965: %t645 = load i64, ptr %a49 %t646 = icmp sge i64 %t645, 0 br i1 %t646, label %then5968, label %else5969 then5968: store { ptr, i64, i64 } zeroinitializer, ptr %a647 %t648 = load ptr, ptr %a1 %t649 = icmp eq ptr %t648, null br i1 %t649, label %panic5971, label %ok5972 panic5971: call void @finch_panic(ptr @.str.3815, i64 3169, ptr @.str.3816) unreachable ok5972: %t650 = getelementptr inbounds %S.gen.Gen, ptr %t648, i32 0, i32 22 %t651 = load i64, ptr %a49 %t652 = load { ptr, i64, i64 }, ptr %t650 %t653 = extractvalue { ptr, i64, i64 } %t652, 1 %t654 = icmp uge i64 %t651, %t653 br i1 %t654, label %range5973, label %inrange5974 range5973: call void @finch_panic_index(ptr @.str.3817, i64 3169, i64 %t651, i64 %t653) unreachable inrange5974: %t655 = extractvalue { ptr, i64, i64 } %t652, 0 %t656 = getelementptr inbounds %S.gen.SumDef, ptr %t655, i64 %t651 %t657 = getelementptr inbounds %S.gen.SumDef, ptr %t656, i32 0, i32 2 %t658 = getelementptr inbounds { ptr, i64, i64 }, ptr %t657, i32 0, i32 1 %t659 = load i64, ptr %t658 store i64 0, ptr %a660 br label %for.cond5975 for.cond5975: %t661 = load i64, ptr %a660 %t662 = icmp slt i64 %t661, %t659 br i1 %t662, label %for.body5976, label %for.end5978 for.body5976: %t663 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t664 = load i64, ptr %a660 call void @finch_str_from_int(ptr %a665, i64 %t664) %t666 = load { ptr, i64, i64 }, ptr %a665 store i64 -1, ptr %a667 %t668 = load i64, ptr %t663 %t669 = load ptr, ptr %a129 store i64 0, ptr %a670 br label %find.cond5979 find.cond5979: %t671 = load i64, ptr %a670 %t672 = icmp slt i64 %t671, %t668 br i1 %t672, label %find.body5980, label %find.end5983 find.body5980: %t673 = getelementptr inbounds { ptr, i64, i64 }, ptr %t669, i64 %t671 %t674 = load { ptr, i64, i64 }, ptr %t673 store { ptr, i64, i64 } %t674, ptr %a675 store { ptr, i64, i64 } %t666, ptr %a676 %t677 = call i32 @finch_str_eq(ptr %a675, ptr %a676) %t678 = icmp ne i32 %t677, 0 br i1 %t678, label %find.hit5981, label %find.next5982 find.hit5981: store i64 %t671, ptr %a667 br label %find.end5983 find.next5982: %t679 = add i64 %t671, 1 store i64 %t679, ptr %a670 br label %find.cond5979 find.end5983: store { ptr, i64, i64 } %t666, ptr %a680 call void @finch_str_drop(ptr %a680) %t681 = load i64, ptr %a667 %t682 = icmp sge i64 %t681, 0 %t683 = xor i1 %t682, true br i1 %t683, label %then5984, label %endif5986 then5984: %t684 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 %t685 = load ptr, ptr %a1 %t686 = icmp eq ptr %t685, null br i1 %t686, label %panic5987, label %ok5988 panic5987: call void @finch_panic(ptr @.str.3818, i64 3171, ptr @.str.3819) unreachable ok5988: %t687 = getelementptr inbounds %S.gen.Gen, ptr %t685, i32 0, i32 22 %t688 = load i64, ptr %a49 %t689 = load { ptr, i64, i64 }, ptr %t687 %t690 = extractvalue { ptr, i64, i64 } %t689, 1 %t691 = icmp uge i64 %t688, %t690 br i1 %t691, label %range5989, label %inrange5990 range5989: call void @finch_panic_index(ptr @.str.3820, i64 3171, i64 %t688, i64 %t690) unreachable inrange5990: %t692 = extractvalue { ptr, i64, i64 } %t689, 0 %t693 = getelementptr inbounds %S.gen.SumDef, ptr %t692, i64 %t688 %t694 = getelementptr inbounds %S.gen.SumDef, ptr %t693, i32 0, i32 2 %t695 = load i64, ptr %a660 %t696 = load { ptr, i64, i64 }, ptr %t694 %t697 = extractvalue { ptr, i64, i64 } %t696, 1 %t698 = icmp uge i64 %t695, %t697 br i1 %t698, label %range5991, label %inrange5992 range5991: call void @finch_panic_index(ptr @.str.3821, i64 3171, i64 %t695, i64 %t697) unreachable inrange5992: %t699 = extractvalue { ptr, i64, i64 } %t696, 0 %t700 = getelementptr inbounds { ptr, i64, i64 }, ptr %t699, i64 %t695 %t701 = load { ptr, i64, i64 }, ptr %t700 store { ptr, i64, i64 } %t701, ptr %a702 call void @finch_str_copy(ptr %a703, ptr %a702) %t704 = load { ptr, i64, i64 }, ptr %a703 %t705 = load i64, ptr %t684 %t706 = add i64 %t705, 1 call void @finch_arr_reserve(ptr %a647, i64 %t706, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t707 = load ptr, ptr %a647 %t708 = getelementptr inbounds { ptr, i64, i64 }, ptr %t707, i64 %t705 store { ptr, i64, i64 } %t704, ptr %t708 store i64 %t706, ptr %t684 br label %endif5986 endif5986: br label %for.step5977 for.step5977: %t709 = load i64, ptr %a660 %t710 = add i64 %t709, 1 store i64 %t710, ptr %a660 br label %for.cond5975 for.end5978: %t711 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 %t712 = load i64, ptr %t711 %t713 = icmp sgt i64 %t712, 0 br i1 %t713, label %then5993, label %endif5995 then5993: %t714 = load ptr, ptr %a1 %t715 = load %S.ast.Node, ptr %a2 %t716 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.3823, i64 2, i64 0 }, ptr %a717 call void @finch_str_join(ptr %a718, ptr %a647, ptr %a717) %t719 = load { ptr, i64, i64 }, ptr %a718 store { ptr, i64, i64 } { ptr @.str.3822, i64 26, i64 0 }, ptr %a721 store { ptr, i64, i64 } %t719, ptr %a722 call void @finch_str_concat(ptr %a720, ptr %a721, ptr %a722) store { ptr, i64, i64 } %t719, ptr %a723 call void @finch_str_drop(ptr %a723) %t724 = load { ptr, i64, i64 }, ptr %a720 store { ptr, i64, i64 } %t724, ptr %a726 store { ptr, i64, i64 } { ptr @.str.3824, i64 29, i64 0 }, ptr %a727 call void @finch_str_concat(ptr %a725, ptr %a726, ptr %a727) store { ptr, i64, i64 } %t724, ptr %a728 call void @finch_str_drop(ptr %a728) %t729 = load { ptr, i64, i64 }, ptr %a725 call void @finch.gen.fail(ptr %t714, %S.ast.Node %t715, { ptr, i64, i64 } %t729) store { ptr, i64, i64 } %t729, ptr %a730 call void @finch_str_drop(ptr %a730) br label %endif5995 endif5995: call void @finch.drop.arr_str(ptr %a647) br label %endif5970 else5969: %t731 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 %t732 = load { ptr, i64, i64 }, ptr %t731 store { ptr, i64, i64 } %t732, ptr %a733 store { ptr, i64, i64 } { ptr @.str.3825, i64 4, i64 0 }, ptr %a734 %t735 = call i32 @finch_str_eq(ptr %a733, ptr %a734) %t736 = icmp ne i32 %t735, 0 br i1 %t736, label %then5996, label %else5997 then5996: %t737 = load ptr, ptr %a1 %t738 = icmp eq ptr %t737, null br i1 %t738, label %panic5999, label %ok6000 panic5999: call void @finch_panic(ptr @.str.3826, i64 3178, ptr @.str.3827) unreachable ok6000: %t739 = getelementptr inbounds %S.gen.Gen, ptr %t737, i32 0, i32 21 %t740 = load ptr, ptr %a1 %t741 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 %t742 = load { ptr, i64, i64 }, ptr %t741 %t743 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2 %t744 = load { ptr, i64, i64 }, ptr %t743 %t745 = call i64 @finch.gen.findEnum(ptr %t740, { ptr, i64, i64 } %t742, { ptr, i64, i64 } %t744) %t746 = load { ptr, i64, i64 }, ptr %t739 %t747 = extractvalue { ptr, i64, i64 } %t746, 1 %t748 = icmp uge i64 %t745, %t747 br i1 %t748, label %range6001, label %inrange6002 range6001: call void @finch_panic_index(ptr @.str.3828, i64 3178, i64 %t745, i64 %t747) unreachable inrange6002: %t749 = extractvalue { ptr, i64, i64 } %t746, 0 %t750 = getelementptr inbounds %S.gen.EnumDef, ptr %t749, i64 %t745 %t751 = load %S.gen.EnumDef, ptr %t750 store %S.gen.EnumDef %t751, ptr %a752 call void @finch.copy.S_gen_EnumDef(ptr %a753, ptr %a752) %t754 = load %S.gen.EnumDef, ptr %a753 store %S.gen.EnumDef %t754, ptr %a755 store { ptr, i64, i64 } zeroinitializer, ptr %a756 %t757 = getelementptr inbounds %S.gen.EnumDef, ptr %a755, i32 0, i32 2 %t758 = getelementptr inbounds { ptr, i64, i64 }, ptr %t757, i32 0, i32 1 %t759 = load i64, ptr %t758 store i64 0, ptr %a760 br label %for.cond6003 for.cond6003: %t761 = load i64, ptr %a760 %t762 = icmp slt i64 %t761, %t759 br i1 %t762, label %for.body6004, label %for.end6006 for.body6004: %t763 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t764 = getelementptr inbounds %S.gen.EnumDef, ptr %a755, i32 0, i32 3 %t765 = load i64, ptr %a760 %t766 = load { ptr, i64, i64 }, ptr %t764 %t767 = extractvalue { ptr, i64, i64 } %t766, 1 %t768 = icmp uge i64 %t765, %t767 br i1 %t768, label %range6007, label %inrange6008 range6007: call void @finch_panic_index(ptr @.str.3829, i64 3181, i64 %t765, i64 %t767) unreachable inrange6008: %t769 = extractvalue { ptr, i64, i64 } %t766, 0 %t770 = getelementptr inbounds i64, ptr %t769, i64 %t765 %t771 = load i64, ptr %t770 call void @finch_str_from_int(ptr %a772, i64 %t771) %t773 = load { ptr, i64, i64 }, ptr %a772 store i64 -1, ptr %a774 %t775 = load i64, ptr %t763 %t776 = load ptr, ptr %a129 store i64 0, ptr %a777 br label %find.cond6009 find.cond6009: %t778 = load i64, ptr %a777 %t779 = icmp slt i64 %t778, %t775 br i1 %t779, label %find.body6010, label %find.end6013 find.body6010: %t780 = getelementptr inbounds { ptr, i64, i64 }, ptr %t776, i64 %t778 %t781 = load { ptr, i64, i64 }, ptr %t780 store { ptr, i64, i64 } %t781, ptr %a782 store { ptr, i64, i64 } %t773, ptr %a783 %t784 = call i32 @finch_str_eq(ptr %a782, ptr %a783) %t785 = icmp ne i32 %t784, 0 br i1 %t785, label %find.hit6011, label %find.next6012 find.hit6011: store i64 %t778, ptr %a774 br label %find.end6013 find.next6012: %t786 = add i64 %t778, 1 store i64 %t786, ptr %a777 br label %find.cond6009 find.end6013: store { ptr, i64, i64 } %t773, ptr %a787 call void @finch_str_drop(ptr %a787) %t788 = load i64, ptr %a774 %t789 = icmp sge i64 %t788, 0 %t790 = xor i1 %t789, true br i1 %t790, label %then6014, label %endif6016 then6014: %t791 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 %t792 = getelementptr inbounds %S.gen.EnumDef, ptr %a755, i32 0, i32 2 %t793 = load i64, ptr %a760 %t794 = load { ptr, i64, i64 }, ptr %t792 %t795 = extractvalue { ptr, i64, i64 } %t794, 1 %t796 = icmp uge i64 %t793, %t795 br i1 %t796, label %range6017, label %inrange6018 range6017: call void @finch_panic_index(ptr @.str.3830, i64 3182, i64 %t793, i64 %t795) unreachable inrange6018: %t797 = extractvalue { ptr, i64, i64 } %t794, 0 %t798 = getelementptr inbounds { ptr, i64, i64 }, ptr %t797, i64 %t793 %t799 = load { ptr, i64, i64 }, ptr %t798 store { ptr, i64, i64 } %t799, ptr %a800 call void @finch_str_copy(ptr %a801, ptr %a800) %t802 = load { ptr, i64, i64 }, ptr %a801 %t803 = load i64, ptr %t791 %t804 = add i64 %t803, 1 call void @finch_arr_reserve(ptr %a756, i64 %t804, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t805 = load ptr, ptr %a756 %t806 = getelementptr inbounds { ptr, i64, i64 }, ptr %t805, i64 %t803 store { ptr, i64, i64 } %t802, ptr %t806 store i64 %t804, ptr %t791 br label %endif6016 endif6016: br label %for.step6005 for.step6005: %t807 = load i64, ptr %a760 %t808 = add i64 %t807, 1 store i64 %t808, ptr %a760 br label %for.cond6003 for.end6006: %t809 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 %t810 = load i64, ptr %t809 %t811 = icmp sgt i64 %t810, 0 br i1 %t811, label %then6019, label %endif6021 then6019: %t812 = load ptr, ptr %a1 %t813 = load %S.ast.Node, ptr %a2 %t814 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.3832, i64 2, i64 0 }, ptr %a815 call void @finch_str_join(ptr %a816, ptr %a756, ptr %a815) %t817 = load { ptr, i64, i64 }, ptr %a816 store { ptr, i64, i64 } { ptr @.str.3831, i64 26, i64 0 }, ptr %a819 store { ptr, i64, i64 } %t817, ptr %a820 call void @finch_str_concat(ptr %a818, ptr %a819, ptr %a820) store { ptr, i64, i64 } %t817, ptr %a821 call void @finch_str_drop(ptr %a821) %t822 = load { ptr, i64, i64 }, ptr %a818 store { ptr, i64, i64 } %t822, ptr %a824 store { ptr, i64, i64 } { ptr @.str.3833, i64 29, i64 0 }, ptr %a825 call void @finch_str_concat(ptr %a823, ptr %a824, ptr %a825) store { ptr, i64, i64 } %t822, ptr %a826 call void @finch_str_drop(ptr %a826) %t827 = load { ptr, i64, i64 }, ptr %a823 call void @finch.gen.fail(ptr %t812, %S.ast.Node %t813, { ptr, i64, i64 } %t827) store { ptr, i64, i64 } %t827, ptr %a828 call void @finch_str_drop(ptr %a828) br label %endif6021 endif6021: call void @finch.drop.arr_str(ptr %a756) call void @finch.drop.S_gen_EnumDef(ptr %a755) br label %endif5998 else5997: %t829 = load ptr, ptr %a1 %t830 = load %S.ast.Node, ptr %a2 %t831 = load %S.ast.Type, ptr %a19 %t832 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t831) store { ptr, i64, i64 } { ptr @.str.3834, i64 11, i64 0 }, ptr %a834 store { ptr, i64, i64 } %t832, ptr %a835 call void @finch_str_concat(ptr %a833, ptr %a834, ptr %a835) store { ptr, i64, i64 } %t832, ptr %a836 call void @finch_str_drop(ptr %a836) %t837 = load { ptr, i64, i64 }, ptr %a833 store { ptr, i64, i64 } %t837, ptr %a839 store { ptr, i64, i64 } { ptr @.str.3835, i64 54, i64 0 }, ptr %a840 call void @finch_str_concat(ptr %a838, ptr %a839, ptr %a840) store { ptr, i64, i64 } %t837, ptr %a841 call void @finch_str_drop(ptr %a841) %t842 = load { ptr, i64, i64 }, ptr %a838 call void @finch.gen.fail(ptr %t829, %S.ast.Node %t830, { ptr, i64, i64 } %t842) store { ptr, i64, i64 } %t842, ptr %a843 call void @finch_str_drop(ptr %a843) br label %endif5998 endif5998: br label %endif5970 endif5970: %t844 = load ptr, ptr %a1 %t845 = load %S.ast.Node, ptr %a2 call void @finch.gen.panicIf(ptr %t844, { ptr, i64, i64 } { ptr @.str.3836, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.3837, i64 35, i64 0 }, %S.ast.Node %t845) %t846 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t846, { ptr, i64, i64 } { ptr @.str.3838, i64 11, i64 0 }) %t847 = load ptr, ptr %a1 %t848 = icmp eq ptr %t847, null br i1 %t848, label %panic6022, label %ok6023 panic6022: call void @finch_panic(ptr @.str.3839, i64 3194, ptr @.str.3840) unreachable ok6023: %t849 = getelementptr inbounds %S.gen.Gen, ptr %t847, i32 0, i32 9 store i1 true, ptr %t849 br label %endif5967 endif5967: %t850 = load ptr, ptr %a1 %t851 = load i64, ptr %a46 call void @finch.gen.heldEnd(ptr %t850, i64 %t851) %t852 = load ptr, ptr %a1 %t853 = load { ptr, i64, i64 }, ptr %a126 call void @finch.gen.label(ptr %t852, { ptr, i64, i64 } %t853) %t854 = load i1, ptr %a128 %t855 = xor i1 %t854, true br i1 %t855, label %then6024, label %endif6026 then6024: %t856 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t856, { ptr, i64, i64 } { ptr @.str.3841, i64 11, i64 0 }) %t857 = load ptr, ptr %a1 %t858 = icmp eq ptr %t857, null br i1 %t858, label %panic6027, label %ok6028 panic6027: call void @finch_panic(ptr @.str.3842, i64 3200, ptr @.str.3843) unreachable ok6028: %t859 = getelementptr inbounds %S.gen.Gen, ptr %t857, i32 0, i32 9 store i1 true, ptr %t859 %t860 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3844, i64 4, i64 0 }) %t861 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t860, 1 call void @finch.drop.S_ast_Type(ptr %a133) call void @finch.drop.arr_str(ptr %a131) call void @finch.drop.arr_str(ptr %a130) call void @finch.drop.arr_str(ptr %a129) call void @finch_str_drop(ptr %a126) call void @finch_str_drop(ptr %a50) call void @finch.drop.S_ast_Type(ptr %a19) call void @finch.drop.S_gen_Val(ptr %a13) ret %S.gen.Val %t861 endif6026: %t862 = load i1, ptr %a3 br i1 %t862, label %then6029, label %endif6031 then6029: %t863 = load ptr, ptr %a1 %t864 = load ptr, ptr %a1 %t865 = load %S.ast.Type, ptr %a133 %t866 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t864, %S.ast.Type %t865) store { ptr, i64, i64 } { ptr @.str.3845, i64 4, i64 0 }, ptr %a868 store { ptr, i64, i64 } %t866, ptr %a869 call void @finch_str_concat(ptr %a867, ptr %a868, ptr %a869) store { ptr, i64, i64 } %t866, ptr %a870 call void @finch_str_drop(ptr %a870) %t871 = load { ptr, i64, i64 }, ptr %a867 store { ptr, i64, i64 } %t871, ptr %a873 store { ptr, i64, i64 } { ptr @.str.3846, i64 1, i64 0 }, ptr %a874 call void @finch_str_concat(ptr %a872, ptr %a873, ptr %a874) store { ptr, i64, i64 } %t871, ptr %a875 call void @finch_str_drop(ptr %a875) %t876 = load { ptr, i64, i64 }, ptr %a872 %t877 = load { ptr, i64, i64 }, ptr %a130 %t878 = load { ptr, i64, i64 }, ptr %a131 %t879 = call { ptr, i64, i64 } @finch.gen.phiList({ ptr, i64, i64 } %t877, { ptr, i64, i64 } %t878) store { ptr, i64, i64 } %t876, ptr %a881 store { ptr, i64, i64 } %t879, ptr %a882 call void @finch_str_concat(ptr %a880, ptr %a881, ptr %a882) store { ptr, i64, i64 } %t876, ptr %a883 call void @finch_str_drop(ptr %a883) store { ptr, i64, i64 } %t879, ptr %a884 call void @finch_str_drop(ptr %a884) %t885 = load { ptr, i64, i64 }, ptr %a880 %t886 = call { ptr, i64, i64 } @finch.gen.op(ptr %t863, { ptr, i64, i64 } %t885) store { ptr, i64, i64 } %t885, ptr %a887 call void @finch_str_drop(ptr %a887) %t888 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t886, 0 %t889 = load %S.ast.Type, ptr %a133 store %S.ast.Type %t889, ptr %a890 call void @finch.copy.S_ast_Type(ptr %a891, ptr %a890) %t892 = load %S.ast.Type, ptr %a891 %t893 = insertvalue %S.gen.Val %t888, %S.ast.Type %t892, 1 %t894 = load ptr, ptr %a1 %t895 = load %S.ast.Type, ptr %a133 %t896 = call i1 @finch.gen.owning(ptr %t894, %S.ast.Type %t895) %t897 = insertvalue %S.gen.Val %t893, i1 %t896, 2 store %S.gen.Val %t897, ptr %a898 %t899 = load ptr, ptr %a1 %t900 = load %S.gen.Val, ptr %a13 call void @finch.gen.release(ptr %t899, %S.gen.Val %t900) %t901 = load %S.gen.Val, ptr %a898 call void @finch.drop.S_ast_Type(ptr %a133) call void @finch.drop.arr_str(ptr %a131) call void @finch.drop.arr_str(ptr %a130) call void @finch.drop.arr_str(ptr %a129) call void @finch_str_drop(ptr %a126) call void @finch_str_drop(ptr %a50) call void @finch.drop.S_ast_Type(ptr %a19) call void @finch.drop.S_gen_Val(ptr %a13) ret %S.gen.Val %t901 endif6031: %t902 = load ptr, ptr %a1 %t903 = load %S.gen.Val, ptr %a13 call void @finch.gen.release(ptr %t902, %S.gen.Val %t903) %t904 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3847, i64 4, i64 0 }) %t905 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t904, 1 call void @finch.drop.S_ast_Type(ptr %a133) call void @finch.drop.arr_str(ptr %a131) call void @finch.drop.arr_str(ptr %a130) call void @finch.drop.arr_str(ptr %a129) call void @finch_str_drop(ptr %a126) call void @finch_str_drop(ptr %a50) call void @finch.drop.S_ast_Type(ptr %a19) call void @finch.drop.S_gen_Val(ptr %a13) ret %S.gen.Val %t905 } define internal { ptr, i64, i64 } @finch.gen.phiList({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca i64, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } zeroinitializer, ptr %a3 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t5 = load i64, ptr %t4 store i64 0, ptr %a6 br label %for.cond6032 for.cond6032: %t7 = load i64, ptr %a6 %t8 = icmp slt i64 %t7, %t5 br i1 %t8, label %for.body6033, label %for.end6035 for.body6033: %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t10 = load i64, ptr %a6 %t11 = load { ptr, i64, i64 }, ptr %a1 %t12 = extractvalue { ptr, i64, i64 } %t11, 1 %t13 = icmp uge i64 %t10, %t12 br i1 %t13, label %range6036, label %inrange6037 range6036: call void @finch_panic_index(ptr @.str.3849, i64 3215, i64 %t10, i64 %t12) unreachable inrange6037: %t14 = extractvalue { ptr, i64, i64 } %t11, 0 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i64 %t10 %t16 = load { ptr, i64, i64 }, ptr %t15 store { ptr, i64, i64 } { ptr @.str.3848, i64 2, i64 0 }, ptr %a18 store { ptr, i64, i64 } %t16, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a17 store { ptr, i64, i64 } %t20, ptr %a22 store { ptr, i64, i64 } { ptr @.str.3850, i64 3, i64 0 }, ptr %a23 call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) store { ptr, i64, i64 } %t20, ptr %a24 call void @finch_str_drop(ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a21 %t26 = load i64, ptr %a6 %t27 = load { ptr, i64, i64 }, ptr %a2 %t28 = extractvalue { ptr, i64, i64 } %t27, 1 %t29 = icmp uge i64 %t26, %t28 br i1 %t29, label %range6038, label %inrange6039 range6038: call void @finch_panic_index(ptr @.str.3851, i64 3215, i64 %t26, i64 %t28) unreachable inrange6039: %t30 = extractvalue { ptr, i64, i64 } %t27, 0 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t26 %t32 = load { ptr, i64, i64 }, ptr %t31 store { ptr, i64, i64 } %t25, ptr %a34 store { ptr, i64, i64 } %t32, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) store { ptr, i64, i64 } %t25, ptr %a36 call void @finch_str_drop(ptr %a36) %t37 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t37, ptr %a39 store { ptr, i64, i64 } { ptr @.str.3852, i64 2, i64 0 }, ptr %a40 call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) store { ptr, i64, i64 } %t37, ptr %a41 call void @finch_str_drop(ptr %a41) %t42 = load { ptr, i64, i64 }, ptr %a38 %t43 = load i64, ptr %t9 %t44 = add i64 %t43, 1 call void @finch_arr_reserve(ptr %a3, i64 %t44, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t45 = load ptr, ptr %a3 %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i64 %t43 store { ptr, i64, i64 } %t42, ptr %t46 store i64 %t44, ptr %t9 br label %for.step6034 for.step6034: %t47 = load i64, ptr %a6 %t48 = add i64 %t47, 1 store i64 %t48, ptr %a6 br label %for.cond6032 for.end6035: %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.3853, i64 2, i64 0 }, ptr %a50 call void @finch_str_join(ptr %a51, ptr %a3, ptr %a50) %t52 = load { ptr, i64, i64 }, ptr %a51 call void @finch.drop.arr_str(ptr %a3) ret { ptr, i64, i64 } %t52 } define internal %S.gen.Fallible @finch.gen.fallibleCall(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca %S.gen.Val, align 16 %a64 = alloca %S.gen.Val, align 16 %a65 = alloca %S.gen.Val, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca %S.gen.Fallible, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 store { ptr, i64, i64 } { ptr @.str.3854, i64 4, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp eq i32 %t7, 0 br label %logic.from6040 logic.from6040: br i1 %t8, label %logic.rhs6041, label %logic.end6042 logic.rhs6041: %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t10 = load { ptr, i64, i64 }, ptr %t9 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.3855, i64 6, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp eq i32 %t13, 0 br label %logic.rend6043 logic.rend6043: br label %logic.end6042 logic.end6042: %t15 = phi i1 [ false, %logic.from6040 ], [ %t14, %logic.rend6043 ] br i1 %t15, label %then6044, label %endif6046 then6044: %t16 = load ptr, ptr %a1 %t17 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t16, %S.ast.Node %t17, { ptr, i64, i64 } { ptr @.str.3856, i64 80, i64 0 }) br label %endif6046 endif6046: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic6047, label %ok6048 panic6047: call void @finch_panic(ptr @.str.3857, i64 3233, ptr @.str.3858) unreachable ok6048: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 41 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a22 call void @finch_str_copy(ptr %a23, ptr %a22) %t24 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t24, ptr %a25 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null br i1 %t27, label %panic6049, label %ok6050 panic6049: call void @finch_panic(ptr @.str.3859, i64 3234, ptr @.str.3860) unreachable ok6050: %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 42 %t29 = load { ptr, i64, i64 }, ptr %t28 store { ptr, i64, i64 } %t29, ptr %a30 call void @finch_str_copy(ptr %a31, ptr %a30) %t32 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t32, ptr %a33 %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null br i1 %t35, label %panic6051, label %ok6052 panic6051: call void @finch_panic(ptr @.str.3861, i64 3235, ptr @.str.3862) unreachable ok6052: %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 43 %t37 = load { ptr, i64, i64 }, ptr %t36 store { ptr, i64, i64 } %t37, ptr %a38 call void @finch_str_copy(ptr %a39, ptr %a38) %t40 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t40, ptr %a41 %t42 = load %S.ast.Node, ptr %a2 %t43 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t42) %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null br i1 %t45, label %panic6053, label %ok6054 panic6053: call void @finch_panic(ptr @.str.3863, i64 3236, ptr @.str.3864) unreachable ok6054: %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 41 %t47 = load { ptr, i64, i64 }, ptr %t46 store { ptr, i64, i64 } %t43, ptr %t46 store { ptr, i64, i64 } %t47, ptr %a48 call void @finch_str_drop(ptr %a48) %t49 = load ptr, ptr %a1 %t50 = icmp eq ptr %t49, null br i1 %t50, label %panic6055, label %ok6056 panic6055: call void @finch_panic(ptr @.str.3866, i64 3237, ptr @.str.3867) unreachable ok6056: %t51 = getelementptr inbounds %S.gen.Gen, ptr %t49, i32 0, i32 42 %t52 = load { ptr, i64, i64 }, ptr %t51 store { ptr, i64, i64 } { ptr @.str.3865, i64 0, i64 0 }, ptr %t51 store { ptr, i64, i64 } %t52, ptr %a53 call void @finch_str_drop(ptr %a53) %t54 = load ptr, ptr %a1 %t55 = icmp eq ptr %t54, null br i1 %t55, label %panic6057, label %ok6058 panic6057: call void @finch_panic(ptr @.str.3869, i64 3238, ptr @.str.3870) unreachable ok6058: %t56 = getelementptr inbounds %S.gen.Gen, ptr %t54, i32 0, i32 43 %t57 = load { ptr, i64, i64 }, ptr %t56 store { ptr, i64, i64 } { ptr @.str.3868, i64 0, i64 0 }, ptr %t56 store { ptr, i64, i64 } %t57, ptr %a58 call void @finch_str_drop(ptr %a58) %t59 = load ptr, ptr %a1 %t60 = load %S.ast.Node, ptr %a2 %t61 = call %S.gen.Val @finch.gen.expr(ptr %t59, %S.ast.Node %t60) store %S.gen.Val %t61, ptr %a62 %t63 = load %S.gen.Val, ptr %a62 store %S.gen.Val %t63, ptr %a64 call void @finch.copy.S_gen_Val(ptr %a65, ptr %a64) %t66 = load %S.gen.Val, ptr %a65 %t67 = insertvalue %S.gen.Fallible zeroinitializer, %S.gen.Val %t66, 0 %t68 = load ptr, ptr %a1 %t69 = icmp eq ptr %t68, null br i1 %t69, label %panic6059, label %ok6060 panic6059: call void @finch_panic(ptr @.str.3871, i64 3240, ptr @.str.3872) unreachable ok6060: %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 42 %t71 = load { ptr, i64, i64 }, ptr %t70 store { ptr, i64, i64 } %t71, ptr %a72 call void @finch_str_copy(ptr %a73, ptr %a72) %t74 = load { ptr, i64, i64 }, ptr %a73 %t75 = insertvalue %S.gen.Fallible %t67, { ptr, i64, i64 } %t74, 1 %t76 = load ptr, ptr %a1 %t77 = icmp eq ptr %t76, null br i1 %t77, label %panic6061, label %ok6062 panic6061: call void @finch_panic(ptr @.str.3873, i64 3240, ptr @.str.3874) unreachable ok6062: %t78 = getelementptr inbounds %S.gen.Gen, ptr %t76, i32 0, i32 43 %t79 = load { ptr, i64, i64 }, ptr %t78 store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_copy(ptr %a81, ptr %a80) %t82 = load { ptr, i64, i64 }, ptr %a81 %t83 = insertvalue %S.gen.Fallible %t75, { ptr, i64, i64 } %t82, 2 store %S.gen.Fallible %t83, ptr %a84 %t85 = load { ptr, i64, i64 }, ptr %a25 %t86 = load ptr, ptr %a1 %t87 = icmp eq ptr %t86, null br i1 %t87, label %panic6063, label %ok6064 panic6063: call void @finch_panic(ptr @.str.3875, i64 3241, ptr @.str.3876) unreachable ok6064: %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 41 store { ptr, i64, i64 } %t85, ptr %a89 call void @finch_str_copy(ptr %a90, ptr %a89) %t91 = load { ptr, i64, i64 }, ptr %a90 %t92 = load { ptr, i64, i64 }, ptr %t88 store { ptr, i64, i64 } %t91, ptr %t88 store { ptr, i64, i64 } %t92, ptr %a93 call void @finch_str_drop(ptr %a93) %t94 = load { ptr, i64, i64 }, ptr %a33 %t95 = load ptr, ptr %a1 %t96 = icmp eq ptr %t95, null br i1 %t96, label %panic6065, label %ok6066 panic6065: call void @finch_panic(ptr @.str.3877, i64 3242, ptr @.str.3878) unreachable ok6066: %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 42 store { ptr, i64, i64 } %t94, ptr %a98 call void @finch_str_copy(ptr %a99, ptr %a98) %t100 = load { ptr, i64, i64 }, ptr %a99 %t101 = load { ptr, i64, i64 }, ptr %t97 store { ptr, i64, i64 } %t100, ptr %t97 store { ptr, i64, i64 } %t101, ptr %a102 call void @finch_str_drop(ptr %a102) %t103 = load { ptr, i64, i64 }, ptr %a41 %t104 = load ptr, ptr %a1 %t105 = icmp eq ptr %t104, null br i1 %t105, label %panic6067, label %ok6068 panic6067: call void @finch_panic(ptr @.str.3879, i64 3243, ptr @.str.3880) unreachable ok6068: %t106 = getelementptr inbounds %S.gen.Gen, ptr %t104, i32 0, i32 43 store { ptr, i64, i64 } %t103, ptr %a107 call void @finch_str_copy(ptr %a108, ptr %a107) %t109 = load { ptr, i64, i64 }, ptr %a108 %t110 = load { ptr, i64, i64 }, ptr %t106 store { ptr, i64, i64 } %t109, ptr %t106 store { ptr, i64, i64 } %t110, ptr %a111 call void @finch_str_drop(ptr %a111) %t112 = getelementptr inbounds %S.gen.Fallible, ptr %a84, i32 0, i32 1 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 %t114 = load i64, ptr %t113 %t115 = icmp eq i64 %t114, 0 br i1 %t115, label %then6069, label %endif6071 then6069: %t116 = load ptr, ptr %a1 %t117 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t116, %S.ast.Node %t117, { ptr, i64, i64 } { ptr @.str.3881, i64 50, i64 0 }) br label %endif6071 endif6071: %t118 = load %S.gen.Fallible, ptr %a84 call void @finch.drop.S_gen_Val(ptr %a62) call void @finch_str_drop(ptr %a41) call void @finch_str_drop(ptr %a33) call void @finch_str_drop(ptr %a25) ret %S.gen.Fallible %t118 } define internal void @finch.drop.S_gen_Fallible(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.Fallible, ptr %a, i32 0, i32 0 call void @finch.drop.S_gen_Val(ptr %t1) %t2 = getelementptr inbounds %S.gen.Fallible, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.gen.Fallible, ptr %a, i32 0, i32 2 call void @finch_str_drop(ptr %t3) ret void } define internal %S.gen.Val @finch.gen.tryExpr(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca %S.gen.Fallible, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca %S.gen.Val, align 16 %a156 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic6072, label %ok6073 panic6072: call void @finch_panic(ptr @.str.3882, i64 3252, ptr @.str.3883) unreachable ok6073: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 46 %t6 = load i64, ptr %t5 %t7 = icmp sgt i64 %t6, 0 br i1 %t7, label %then6074, label %endif6076 then6074: %t8 = load ptr, ptr %a1 %t9 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.3884, i64 30, i64 0 }) br label %endif6076 endif6076: %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic6077, label %ok6078 panic6077: call void @finch_panic(ptr @.str.3885, i64 3255, ptr @.str.3886) unreachable ok6078: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 13 %t13 = getelementptr inbounds %S.gen.FnSig, ptr %t12, i32 0, i32 9 %t14 = load i1, ptr %t13 %t15 = xor i1 %t14, true br i1 %t15, label %then6079, label %endif6081 then6079: store { ptr, i64, i64 } { ptr @.str.3887, i64 1, i64 0 }, ptr %a16 %t17 = load ptr, ptr %a1 %t18 = icmp eq ptr %t17, null br i1 %t18, label %panic6082, label %ok6083 panic6082: call void @finch_panic(ptr @.str.3888, i64 3257, ptr @.str.3889) unreachable ok6083: %t19 = getelementptr inbounds %S.gen.Gen, ptr %t17, i32 0, i32 13 %t20 = getelementptr inbounds %S.gen.FnSig, ptr %t19, i32 0, i32 12 %t21 = getelementptr inbounds %S.ast.Type, ptr %t20, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.3890, i64 4, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp eq i32 %t25, 0 br i1 %t26, label %then6084, label %endif6086 then6084: %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null br i1 %t28, label %panic6087, label %ok6088 panic6087: call void @finch_panic(ptr @.str.3891, i64 3258, ptr @.str.3892) unreachable ok6088: %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 13 %t30 = getelementptr inbounds %S.gen.FnSig, ptr %t29, i32 0, i32 12 %t31 = load %S.ast.Type, ptr %t30 %t32 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t31) store { ptr, i64, i64 } %t32, ptr %a34 store { ptr, i64, i64 } { ptr @.str.3893, i64 1, i64 0 }, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) store { ptr, i64, i64 } %t32, ptr %a36 call void @finch_str_drop(ptr %a36) %t37 = load { ptr, i64, i64 }, ptr %a33 %t38 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t37, ptr %a16 store { ptr, i64, i64 } %t38, ptr %a39 call void @finch_str_drop(ptr %a39) br label %endif6086 endif6086: %t40 = load ptr, ptr %a1 %t41 = load %S.ast.Node, ptr %a2 %t42 = load ptr, ptr %a1 %t43 = icmp eq ptr %t42, null br i1 %t43, label %panic6089, label %ok6090 panic6089: call void @finch_panic(ptr @.str.3895, i64 3260, ptr @.str.3896) unreachable ok6090: %t44 = getelementptr inbounds %S.gen.Gen, ptr %t42, i32 0, i32 13 %t45 = getelementptr inbounds %S.gen.FnSig, ptr %t44, i32 0, i32 1 %t46 = load { ptr, i64, i64 }, ptr %t45 store { ptr, i64, i64 } { ptr @.str.3894, i64 29, i64 0 }, ptr %a48 store { ptr, i64, i64 } %t46, ptr %a49 call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) %t50 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t50, ptr %a52 store { ptr, i64, i64 } { ptr @.str.3897, i64 31, i64 0 }, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) store { ptr, i64, i64 } %t50, ptr %a54 call void @finch_str_drop(ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a51 %t56 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t55, ptr %a58 store { ptr, i64, i64 } %t56, ptr %a59 call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) store { ptr, i64, i64 } %t55, ptr %a60 call void @finch_str_drop(ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a57 store { ptr, i64, i64 } %t61, ptr %a63 store { ptr, i64, i64 } { ptr @.str.3898, i64 55, i64 0 }, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) store { ptr, i64, i64 } %t61, ptr %a65 call void @finch_str_drop(ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a62 call void @finch.gen.fail(ptr %t40, %S.ast.Node %t41, { ptr, i64, i64 } %t66) store { ptr, i64, i64 } %t66, ptr %a67 call void @finch_str_drop(ptr %a67) call void @finch_str_drop(ptr %a16) br label %endif6081 endif6081: %t68 = load ptr, ptr %a1 %t69 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t70 = load { ptr, i64, i64 }, ptr %t69 %t71 = extractvalue { ptr, i64, i64 } %t70, 1 %t72 = icmp uge i64 0, %t71 br i1 %t72, label %range6091, label %inrange6092 range6091: call void @finch_panic_index(ptr @.str.3899, i64 3262, i64 0, i64 %t71) unreachable inrange6092: %t73 = extractvalue { ptr, i64, i64 } %t70, 0 %t74 = getelementptr inbounds %S.ast.Node, ptr %t73, i64 0 %t75 = load %S.ast.Node, ptr %t74 %t76 = call %S.gen.Fallible @finch.gen.fallibleCall(ptr %t68, %S.ast.Node %t75) store %S.gen.Fallible %t76, ptr %a77 %t78 = load ptr, ptr %a1 %t79 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t78, { ptr, i64, i64 } { ptr @.str.3900, i64 10, i64 0 }) store { ptr, i64, i64 } %t79, ptr %a80 %t81 = load ptr, ptr %a1 %t82 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t81, { ptr, i64, i64 } { ptr @.str.3901, i64 6, i64 0 }) store { ptr, i64, i64 } %t82, ptr %a83 %t84 = load ptr, ptr %a1 %t85 = getelementptr inbounds %S.gen.Fallible, ptr %a77, i32 0, i32 1 %t86 = load { ptr, i64, i64 }, ptr %t85 %t87 = load { ptr, i64, i64 }, ptr %a80 %t88 = load { ptr, i64, i64 }, ptr %a83 call void @finch.gen.condBr(ptr %t84, { ptr, i64, i64 } %t86, { ptr, i64, i64 } %t87, { ptr, i64, i64 } %t88) %t89 = load ptr, ptr %a1 %t90 = load { ptr, i64, i64 }, ptr %a80 call void @finch.gen.label(ptr %t89, { ptr, i64, i64 } %t90) %t91 = load ptr, ptr %a1 call void @finch.gen.dropPending(ptr %t91, i64 0) %t92 = load ptr, ptr %a1 call void @finch.gen.unwind(ptr %t92, i64 0) %t93 = load ptr, ptr %a1 %t94 = load ptr, ptr %a1 %t95 = load ptr, ptr %a1 %t96 = icmp eq ptr %t95, null br i1 %t96, label %panic6093, label %ok6094 panic6093: call void @finch_panic(ptr @.str.3903, i64 3269, ptr @.str.3904) unreachable ok6094: %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 13 %t98 = load %S.gen.FnSig, ptr %t97 %t99 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t94, %S.gen.FnSig %t98) store { ptr, i64, i64 } { ptr @.str.3902, i64 4, i64 0 }, ptr %a101 store { ptr, i64, i64 } %t99, ptr %a102 call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) store { ptr, i64, i64 } %t99, ptr %a103 call void @finch_str_drop(ptr %a103) %t104 = load { ptr, i64, i64 }, ptr %a100 store { ptr, i64, i64 } %t104, ptr %a106 store { ptr, i64, i64 } { ptr @.str.3905, i64 1, i64 0 }, ptr %a107 call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) store { ptr, i64, i64 } %t104, ptr %a108 call void @finch_str_drop(ptr %a108) %t109 = load { ptr, i64, i64 }, ptr %a105 %t110 = load ptr, ptr %a1 %t111 = load ptr, ptr %a1 %t112 = load ptr, ptr %a1 %t113 = icmp eq ptr %t112, null br i1 %t113, label %panic6095, label %ok6096 panic6095: call void @finch_panic(ptr @.str.3907, i64 3269, ptr @.str.3908) unreachable ok6096: %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 13 %t115 = load %S.gen.FnSig, ptr %t114 %t116 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t111, %S.gen.FnSig %t115) store { ptr, i64, i64 } { ptr @.str.3906, i64 12, i64 0 }, ptr %a118 store { ptr, i64, i64 } %t116, ptr %a119 call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119) store { ptr, i64, i64 } %t116, ptr %a120 call void @finch_str_drop(ptr %a120) %t121 = load { ptr, i64, i64 }, ptr %a117 store { ptr, i64, i64 } %t121, ptr %a123 store { ptr, i64, i64 } { ptr @.str.3909, i64 36, i64 0 }, ptr %a124 call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) store { ptr, i64, i64 } %t121, ptr %a125 call void @finch_str_drop(ptr %a125) %t126 = load { ptr, i64, i64 }, ptr %a122 %t127 = getelementptr inbounds %S.gen.Fallible, ptr %a77, i32 0, i32 2 %t128 = load { ptr, i64, i64 }, ptr %t127 store { ptr, i64, i64 } %t126, ptr %a130 store { ptr, i64, i64 } %t128, ptr %a131 call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) store { ptr, i64, i64 } %t126, ptr %a132 call void @finch_str_drop(ptr %a132) %t133 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t133, ptr %a135 store { ptr, i64, i64 } { ptr @.str.3910, i64 3, i64 0 }, ptr %a136 call void @finch_str_concat(ptr %a134, ptr %a135, ptr %a136) store { ptr, i64, i64 } %t133, ptr %a137 call void @finch_str_drop(ptr %a137) %t138 = load { ptr, i64, i64 }, ptr %a134 %t139 = call { ptr, i64, i64 } @finch.gen.op(ptr %t110, { ptr, i64, i64 } %t138) store { ptr, i64, i64 } %t138, ptr %a140 call void @finch_str_drop(ptr %a140) store { ptr, i64, i64 } %t109, ptr %a142 store { ptr, i64, i64 } %t139, ptr %a143 call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143) store { ptr, i64, i64 } %t109, ptr %a144 call void @finch_str_drop(ptr %a144) store { ptr, i64, i64 } %t139, ptr %a145 call void @finch_str_drop(ptr %a145) %t146 = load { ptr, i64, i64 }, ptr %a141 call void @finch.gen.emit(ptr %t93, { ptr, i64, i64 } %t146) store { ptr, i64, i64 } %t146, ptr %a147 call void @finch_str_drop(ptr %a147) %t148 = load ptr, ptr %a1 %t149 = icmp eq ptr %t148, null br i1 %t149, label %panic6097, label %ok6098 panic6097: call void @finch_panic(ptr @.str.3911, i64 3270, ptr @.str.3912) unreachable ok6098: %t150 = getelementptr inbounds %S.gen.Gen, ptr %t148, i32 0, i32 9 store i1 true, ptr %t150 %t151 = load ptr, ptr %a1 %t152 = load { ptr, i64, i64 }, ptr %a83 call void @finch.gen.label(ptr %t151, { ptr, i64, i64 } %t152) %t153 = getelementptr inbounds %S.gen.Fallible, ptr %a77, i32 0, i32 0 %t154 = load %S.gen.Val, ptr %t153 store %S.gen.Val %t154, ptr %a155 call void @finch.copy.S_gen_Val(ptr %a156, ptr %a155) %t157 = load %S.gen.Val, ptr %a156 call void @finch_str_drop(ptr %a83) call void @finch_str_drop(ptr %a80) call void @finch.drop.S_gen_Fallible(ptr %a77) ret %S.gen.Val %t157 } define internal %S.gen.Val @finch.gen.orElse(ptr %p0, %S.ast.Node %p1, i1 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i1, align 16 %a13 = alloca %S.gen.Fallible, align 16 %a16 = alloca %S.gen.Val, align 16 %a17 = alloca %S.gen.Val, align 16 %a19 = alloca %S.gen.Val, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca %S.ast.Type, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca i1, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca %S.ast.Type, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca %S.gen.Val, align 16 %a155 = alloca %S.gen.Val, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca %S.ast.Type, align 16 %a245 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i1 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 br i1 %t8, label %range6099, label %inrange6100 range6099: call void @finch_panic_index(ptr @.str.3913, i64 3277, i64 0, i64 %t7) unreachable inrange6100: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 %t12 = call %S.gen.Fallible @finch.gen.fallibleCall(ptr %t4, %S.ast.Node %t11) store %S.gen.Fallible %t12, ptr %a13 %t14 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 0 %t15 = load %S.gen.Val, ptr %t14 store %S.gen.Val %t15, ptr %a16 call void @finch.copy.S_gen_Val(ptr %a17, ptr %a16) %t18 = load %S.gen.Val, ptr %a17 store %S.gen.Val %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t20, { ptr, i64, i64 } { ptr @.str.3914, i64 9, i64 0 }) store { ptr, i64, i64 } %t21, ptr %a22 %t23 = load ptr, ptr %a1 %t24 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t23, { ptr, i64, i64 } { ptr @.str.3915, i64 5, i64 0 }) store { ptr, i64, i64 } %t24, ptr %a25 %t26 = load ptr, ptr %a1 %t27 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 1 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = load { ptr, i64, i64 }, ptr %a22 %t30 = load { ptr, i64, i64 }, ptr %a25 call void @finch.gen.condBr(ptr %t26, { ptr, i64, i64 } %t28, { ptr, i64, i64 } %t29, { ptr, i64, i64 } %t30) %t31 = load ptr, ptr %a1 %t32 = load { ptr, i64, i64 }, ptr %a22 call void @finch.gen.label(ptr %t31, { ptr, i64, i64 } %t32) %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 6 %t34 = load i1, ptr %t33 br i1 %t34, label %then6101, label %endif6103 then6101: %t35 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t35) %t36 = load ptr, ptr %a1 %t37 = load %S.ast.Node, ptr %a2 %t38 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3917, i64 3, i64 0 }) %t39 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 2 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t36, %S.ast.Node %t37, { ptr, i64, i64 } { ptr @.str.3916, i64 3, i64 0 }, %S.ast.Type %t38, { ptr, i64, i64 } %t40, i1 true, i1 true) store %S.ast.Type %t38, ptr %a42 call void @finch.drop.S_ast_Type(ptr %a42) store { ptr, i64, i64 } %t41, ptr %a43 call void @finch_str_drop(ptr %a43) %t44 = load ptr, ptr %a1 %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 1, %t47 br i1 %t48, label %range6104, label %inrange6105 range6104: call void @finch_panic_index(ptr @.str.3918, i64 3286, i64 1, i64 %t47) unreachable inrange6105: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 %t51 = load %S.ast.Node, ptr %t50 call void @finch.gen.block(ptr %t44, %S.ast.Node %t51, i1 true) %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null br i1 %t53, label %panic6106, label %ok6107 panic6106: call void @finch_panic(ptr @.str.3919, i64 3287, ptr @.str.3920) unreachable ok6107: %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 9 %t55 = load i1, ptr %t54 store i1 %t55, ptr %a56 %t57 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t57) %t58 = load i1, ptr %a56 %t59 = xor i1 %t58, true br label %logic.from6108 logic.from6108: br i1 %t59, label %logic.rhs6109, label %logic.end6110 logic.rhs6109: %t60 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i32 0, i32 0 %t62 = load { ptr, i64, i64 }, ptr %t61 store { ptr, i64, i64 } %t62, ptr %a63 store { ptr, i64, i64 } { ptr @.str.3921, i64 4, i64 0 }, ptr %a64 %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) %t66 = icmp eq i32 %t65, 0 br label %logic.rend6111 logic.rend6111: br label %logic.end6110 logic.end6110: %t67 = phi i1 [ false, %logic.from6108 ], [ %t66, %logic.rend6111 ] br label %logic.from6112 logic.from6112: br i1 %t67, label %logic.rhs6113, label %logic.end6114 logic.rhs6113: %t68 = load i1, ptr %a3 %t69 = xor i1 %t68, true br label %logic.rend6115 logic.rend6115: br label %logic.end6114 logic.end6114: %t70 = phi i1 [ false, %logic.from6112 ], [ %t69, %logic.rend6115 ] br i1 %t70, label %then6116, label %endif6118 then6116: %t71 = load ptr, ptr %a1 %t72 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t73 = load { ptr, i64, i64 }, ptr %t72 %t74 = extractvalue { ptr, i64, i64 } %t73, 1 %t75 = icmp uge i64 1, %t74 br i1 %t75, label %range6119, label %inrange6120 range6119: call void @finch_panic_index(ptr @.str.3922, i64 3290, i64 1, i64 %t74) unreachable inrange6120: %t76 = extractvalue { ptr, i64, i64 } %t73, 0 %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 1 %t78 = load %S.ast.Node, ptr %t77 call void @finch.gen.fail(ptr %t71, %S.ast.Node %t78, { ptr, i64, i64 } { ptr @.str.3923, i64 142, i64 0 }) br label %endif6118 endif6118: %t79 = load i1, ptr %a3 br label %logic.from6121 logic.from6121: br i1 %t79, label %logic.rhs6122, label %logic.end6123 logic.rhs6122: %t80 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t81 = getelementptr inbounds %S.ast.Type, ptr %t80, i32 0, i32 0 %t82 = load { ptr, i64, i64 }, ptr %t81 store { ptr, i64, i64 } %t82, ptr %a83 store { ptr, i64, i64 } { ptr @.str.3924, i64 4, i64 0 }, ptr %a84 %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) %t86 = icmp eq i32 %t85, 0 br label %logic.rend6124 logic.rend6124: br label %logic.end6123 logic.end6123: %t87 = phi i1 [ false, %logic.from6121 ], [ %t86, %logic.rend6124 ] br i1 %t87, label %then6125, label %endif6127 then6125: %t88 = load ptr, ptr %a1 %t89 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t88, { ptr, i64, i64 } { ptr @.str.3925, i64 6, i64 0 }) store { ptr, i64, i64 } %t89, ptr %a90 %t91 = load ptr, ptr %a1 %t92 = load { ptr, i64, i64 }, ptr %a90 call void @finch.gen.br(ptr %t91, { ptr, i64, i64 } %t92) %t93 = load ptr, ptr %a1 %t94 = load { ptr, i64, i64 }, ptr %a25 call void @finch.gen.label(ptr %t93, { ptr, i64, i64 } %t94) %t95 = load ptr, ptr %a1 %t96 = load %S.gen.Val, ptr %a19 call void @finch.gen.release(ptr %t95, %S.gen.Val %t96) %t97 = load ptr, ptr %a1 %t98 = load { ptr, i64, i64 }, ptr %a90 call void @finch.gen.br(ptr %t97, { ptr, i64, i64 } %t98) %t99 = load ptr, ptr %a1 %t100 = load { ptr, i64, i64 }, ptr %a90 call void @finch.gen.label(ptr %t99, { ptr, i64, i64 } %t100) %t101 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3926, i64 4, i64 0 }) %t102 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t101, 1 call void @finch_str_drop(ptr %a90) call void @finch_str_drop(ptr %a25) call void @finch_str_drop(ptr %a22) call void @finch.drop.S_gen_Val(ptr %a19) call void @finch.drop.S_gen_Fallible(ptr %a13) ret %S.gen.Val %t102 endif6127: %t103 = load ptr, ptr %a1 %t104 = load { ptr, i64, i64 }, ptr %a25 call void @finch.gen.br(ptr %t103, { ptr, i64, i64 } %t104) %t105 = load ptr, ptr %a1 %t106 = load { ptr, i64, i64 }, ptr %a25 call void @finch.gen.label(ptr %t105, { ptr, i64, i64 } %t106) %t107 = load %S.gen.Val, ptr %a19 call void @finch_str_drop(ptr %a25) call void @finch_str_drop(ptr %a22) call void @finch.drop.S_gen_Fallible(ptr %a13) ret %S.gen.Val %t107 endif6103: %t108 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t109 = getelementptr inbounds %S.ast.Type, ptr %t108, i32 0, i32 0 %t110 = load { ptr, i64, i64 }, ptr %t109 store { ptr, i64, i64 } %t110, ptr %a111 store { ptr, i64, i64 } { ptr @.str.3927, i64 4, i64 0 }, ptr %a112 %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) %t114 = icmp ne i32 %t113, 0 br i1 %t114, label %then6128, label %endif6130 then6128: %t115 = load ptr, ptr %a1 %t116 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t117 = load { ptr, i64, i64 }, ptr %t116 %t118 = extractvalue { ptr, i64, i64 } %t117, 1 %t119 = icmp uge i64 1, %t118 br i1 %t119, label %range6131, label %inrange6132 range6131: call void @finch_panic_index(ptr @.str.3928, i64 3306, i64 1, i64 %t118) unreachable inrange6132: %t120 = extractvalue { ptr, i64, i64 } %t117, 0 %t121 = getelementptr inbounds %S.ast.Node, ptr %t120, i64 1 %t122 = load %S.ast.Node, ptr %t121 call void @finch.gen.fail(ptr %t115, %S.ast.Node %t122, { ptr, i64, i64 } { ptr @.str.3929, i64 98, i64 0 }) br label %endif6130 endif6130: %t123 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t123) %t124 = load ptr, ptr %a1 %t125 = load %S.ast.Node, ptr %a2 %t126 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3931, i64 3, i64 0 }) %t127 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 2 %t128 = load { ptr, i64, i64 }, ptr %t127 %t129 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t124, %S.ast.Node %t125, { ptr, i64, i64 } { ptr @.str.3930, i64 3, i64 0 }, %S.ast.Type %t126, { ptr, i64, i64 } %t128, i1 true, i1 true) store %S.ast.Type %t126, ptr %a130 call void @finch.drop.S_ast_Type(ptr %a130) store { ptr, i64, i64 } %t129, ptr %a131 call void @finch_str_drop(ptr %a131) %t132 = load ptr, ptr %a1 %t133 = load ptr, ptr %a1 %t134 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t135 = load { ptr, i64, i64 }, ptr %t134 %t136 = extractvalue { ptr, i64, i64 } %t135, 1 %t137 = icmp uge i64 1, %t136 br i1 %t137, label %range6133, label %inrange6134 range6133: call void @finch_panic_index(ptr @.str.3932, i64 3310, i64 1, i64 %t136) unreachable inrange6134: %t138 = extractvalue { ptr, i64, i64 } %t135, 0 %t139 = getelementptr inbounds %S.ast.Node, ptr %t138, i64 1 %t140 = load %S.ast.Node, ptr %t139 %t141 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t142 = load %S.ast.Type, ptr %t141 %t143 = call %S.gen.Val @finch.gen.exprWant(ptr %t133, %S.ast.Node %t140, %S.ast.Type %t142) %t144 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t145 = load %S.ast.Type, ptr %t144 %t146 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t147 = load { ptr, i64, i64 }, ptr %t146 %t148 = extractvalue { ptr, i64, i64 } %t147, 1 %t149 = icmp uge i64 1, %t148 br i1 %t149, label %range6135, label %inrange6136 range6135: call void @finch_panic_index(ptr @.str.3933, i64 3310, i64 1, i64 %t148) unreachable inrange6136: %t150 = extractvalue { ptr, i64, i64 } %t147, 0 %t151 = getelementptr inbounds %S.ast.Node, ptr %t150, i64 1 %t152 = load %S.ast.Node, ptr %t151 %t153 = call %S.gen.Val @finch.gen.coerce(ptr %t132, %S.gen.Val %t143, %S.ast.Type %t145, %S.ast.Node %t152, { ptr, i64, i64 } { ptr @.str.3934, i64 20, i64 0 }) store %S.gen.Val %t143, ptr %a154 call void @finch.drop.S_gen_Val(ptr %a154) store %S.gen.Val %t153, ptr %a155 %t156 = load ptr, ptr %a1 %t157 = load %S.gen.Val, ptr %a155 %t158 = call { ptr, i64, i64 } @finch.gen.own(ptr %t156, %S.gen.Val %t157) store { ptr, i64, i64 } %t158, ptr %a159 %t160 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t160) %t161 = load ptr, ptr %a1 %t162 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t161, { ptr, i64, i64 } { ptr @.str.3935, i64 7, i64 0 }) store { ptr, i64, i64 } %t162, ptr %a163 %t164 = load ptr, ptr %a1 %t165 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t164, { ptr, i64, i64 } { ptr @.str.3936, i64 6, i64 0 }) store { ptr, i64, i64 } %t165, ptr %a166 %t167 = load ptr, ptr %a1 %t168 = load { ptr, i64, i64 }, ptr %a163 call void @finch.gen.br(ptr %t167, { ptr, i64, i64 } %t168) %t169 = load ptr, ptr %a1 %t170 = load { ptr, i64, i64 }, ptr %a163 call void @finch.gen.label(ptr %t169, { ptr, i64, i64 } %t170) %t171 = load ptr, ptr %a1 %t172 = load { ptr, i64, i64 }, ptr %a166 call void @finch.gen.br(ptr %t171, { ptr, i64, i64 } %t172) %t173 = load ptr, ptr %a1 %t174 = load { ptr, i64, i64 }, ptr %a25 call void @finch.gen.label(ptr %t173, { ptr, i64, i64 } %t174) %t175 = load ptr, ptr %a1 %t176 = load { ptr, i64, i64 }, ptr %a166 call void @finch.gen.br(ptr %t175, { ptr, i64, i64 } %t176) %t177 = load ptr, ptr %a1 %t178 = load { ptr, i64, i64 }, ptr %a166 call void @finch.gen.label(ptr %t177, { ptr, i64, i64 } %t178) %t179 = load ptr, ptr %a1 %t180 = load ptr, ptr %a1 %t181 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t182 = load %S.ast.Type, ptr %t181 %t183 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t180, %S.ast.Type %t182) store { ptr, i64, i64 } { ptr @.str.3937, i64 4, i64 0 }, ptr %a185 store { ptr, i64, i64 } %t183, ptr %a186 call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186) store { ptr, i64, i64 } %t183, ptr %a187 call void @finch_str_drop(ptr %a187) %t188 = load { ptr, i64, i64 }, ptr %a184 store { ptr, i64, i64 } %t188, ptr %a190 store { ptr, i64, i64 } { ptr @.str.3938, i64 3, i64 0 }, ptr %a191 call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) store { ptr, i64, i64 } %t188, ptr %a192 call void @finch_str_drop(ptr %a192) %t193 = load { ptr, i64, i64 }, ptr %a189 %t194 = load { ptr, i64, i64 }, ptr %a159 store { ptr, i64, i64 } %t193, ptr %a196 store { ptr, i64, i64 } %t194, ptr %a197 call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) store { ptr, i64, i64 } %t193, ptr %a198 call void @finch_str_drop(ptr %a198) %t199 = load { ptr, i64, i64 }, ptr %a195 store { ptr, i64, i64 } %t199, ptr %a201 store { ptr, i64, i64 } { ptr @.str.3939, i64 3, i64 0 }, ptr %a202 call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) store { ptr, i64, i64 } %t199, ptr %a203 call void @finch_str_drop(ptr %a203) %t204 = load { ptr, i64, i64 }, ptr %a200 %t205 = load { ptr, i64, i64 }, ptr %a163 store { ptr, i64, i64 } %t204, ptr %a207 store { ptr, i64, i64 } %t205, ptr %a208 call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) store { ptr, i64, i64 } %t204, ptr %a209 call void @finch_str_drop(ptr %a209) %t210 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t210, ptr %a212 store { ptr, i64, i64 } { ptr @.str.3940, i64 6, i64 0 }, ptr %a213 call void @finch_str_concat(ptr %a211, ptr %a212, ptr %a213) store { ptr, i64, i64 } %t210, ptr %a214 call void @finch_str_drop(ptr %a214) %t215 = load { ptr, i64, i64 }, ptr %a211 %t216 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 0 %t217 = load { ptr, i64, i64 }, ptr %t216 store { ptr, i64, i64 } %t215, ptr %a219 store { ptr, i64, i64 } %t217, ptr %a220 call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) store { ptr, i64, i64 } %t215, ptr %a221 call void @finch_str_drop(ptr %a221) %t222 = load { ptr, i64, i64 }, ptr %a218 store { ptr, i64, i64 } %t222, ptr %a224 store { ptr, i64, i64 } { ptr @.str.3941, i64 3, i64 0 }, ptr %a225 call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) store { ptr, i64, i64 } %t222, ptr %a226 call void @finch_str_drop(ptr %a226) %t227 = load { ptr, i64, i64 }, ptr %a223 %t228 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t227, ptr %a230 store { ptr, i64, i64 } %t228, ptr %a231 call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) store { ptr, i64, i64 } %t227, ptr %a232 call void @finch_str_drop(ptr %a232) %t233 = load { ptr, i64, i64 }, ptr %a229 store { ptr, i64, i64 } %t233, ptr %a235 store { ptr, i64, i64 } { ptr @.str.3942, i64 2, i64 0 }, ptr %a236 call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) store { ptr, i64, i64 } %t233, ptr %a237 call void @finch_str_drop(ptr %a237) %t238 = load { ptr, i64, i64 }, ptr %a234 %t239 = call { ptr, i64, i64 } @finch.gen.op(ptr %t179, { ptr, i64, i64 } %t238) store { ptr, i64, i64 } %t238, ptr %a240 call void @finch_str_drop(ptr %a240) %t241 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t239, 0 %t242 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t243 = load %S.ast.Type, ptr %t242 store %S.ast.Type %t243, ptr %a244 call void @finch.copy.S_ast_Type(ptr %a245, ptr %a244) %t246 = load %S.ast.Type, ptr %a245 %t247 = insertvalue %S.gen.Val %t241, %S.ast.Type %t246, 1 %t248 = load ptr, ptr %a1 %t249 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t250 = load %S.ast.Type, ptr %t249 %t251 = call i1 @finch.gen.owning(ptr %t248, %S.ast.Type %t250) %t252 = insertvalue %S.gen.Val %t247, i1 %t251, 2 call void @finch_str_drop(ptr %a166) call void @finch_str_drop(ptr %a163) call void @finch_str_drop(ptr %a159) call void @finch.drop.S_gen_Val(ptr %a155) call void @finch_str_drop(ptr %a25) call void @finch_str_drop(ptr %a22) call void @finch.drop.S_gen_Val(ptr %a19) call void @finch.drop.S_gen_Fallible(ptr %a13) ret %S.gen.Val %t252 } define internal %S.gen.Val @finch.gen.exprWant(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.ast.Type, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.3943, i64 5, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then6137, label %endif6139 then6137: %t10 = load ptr, ptr %a1 %t11 = load %S.ast.Node, ptr %a2 %t12 = load %S.ast.Type, ptr %a3 %t13 = call %S.gen.Val @finch.gen.arrayLit(ptr %t10, %S.ast.Node %t11, %S.ast.Type %t12) ret %S.gen.Val %t13 endif6139: %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3944, i64 3, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %then6140, label %endif6142 then6140: %t20 = load ptr, ptr %a1 %t21 = load %S.ast.Node, ptr %a2 %t22 = load %S.ast.Type, ptr %a3 %t23 = call %S.gen.Val @finch.gen.mapLit(ptr %t20, %S.ast.Node %t21, %S.ast.Type %t22) ret %S.gen.Val %t23 endif6142: %t24 = load ptr, ptr %a1 %t25 = load %S.ast.Node, ptr %a2 %t26 = call %S.gen.Val @finch.gen.expr(ptr %t24, %S.ast.Node %t25) ret %S.gen.Val %t26 } define internal %S.gen.Val @finch.gen.expr(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca i64, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca i64, align 16 %a47 = alloca i8, align 16 %a52 = alloca i64, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca i64, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca %S.gen.Ref, align 16 %a186 = alloca %S.gen.Val, align 16 %a187 = alloca %S.gen.Val, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca %S.ast.Type, align 16 %a205 = alloca %S.ast.Type, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca %S.ast.Type, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca %S.ast.Type, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch_str_copy(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.3945, i64 3, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 br i1 %t13, label %then6143, label %endif6145 then6143: %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3947, i64 2, i64 0 }, ptr %a18 %t19 = call i32 @finch_str_starts(ptr %a16, ptr %a18) %t20 = icmp ne i32 %t19, 0 br label %logic.from6146 logic.from6146: br i1 %t20, label %logic.end6148, label %logic.rhs6147 logic.rhs6147: %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.3949, i64 2, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_starts(ptr %a23, ptr %a25) %t27 = icmp ne i32 %t26, 0 br label %logic.rend6149 logic.rend6149: br label %logic.end6148 logic.end6148: %t28 = phi i1 [ true, %logic.from6146 ], [ %t27, %logic.rend6149 ] br i1 %t28, label %then6150, label %endif6152 then6150: store i64 0, ptr %a29 %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t31 = load { ptr, i64, i64 }, ptr %t30 store { ptr, i64, i64 } %t31, ptr %a32 %t34 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i32 0, i32 1 %t36 = load i64, ptr %t35 call void @finch_str_sub(ptr %a33, ptr %a32, i64 2, i64 %t36, ptr @.str.3950, i64 3339) %t37 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t37, ptr %a38 store i64 0, ptr %a39 br label %each.cond6153 each.cond6153: %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %a38, i32 0, i32 1 %t41 = load i64, ptr %t40 %t42 = load i64, ptr %a39 %t43 = icmp slt i64 %t42, %t41 br i1 %t43, label %each.body6154, label %each.end6156 each.body6154: %t44 = load ptr, ptr %a38 %t45 = getelementptr inbounds i8, ptr %t44, i64 %t42 %t46 = load i8, ptr %t45 store i8 %t46, ptr %a47 %t48 = load i8, ptr %a47 %t49 = zext i8 %t48 to i64 %t50 = zext i8 48 to i64 %t51 = sub i64 %t49, %t50 store i64 %t51, ptr %a52 %t53 = load i8, ptr %a47 %t54 = icmp uge i8 %t53, 97 br label %logic.from6157 logic.from6157: br i1 %t54, label %logic.rhs6158, label %logic.end6159 logic.rhs6158: %t55 = load i8, ptr %a47 %t56 = icmp ule i8 %t55, 102 br label %logic.rend6160 logic.rend6160: br label %logic.end6159 logic.end6159: %t57 = phi i1 [ false, %logic.from6157 ], [ %t56, %logic.rend6160 ] br i1 %t57, label %then6161, label %endif6163 then6161: %t58 = load i8, ptr %a47 %t59 = zext i8 %t58 to i64 %t60 = zext i8 97 to i64 %t61 = sub i64 %t59, %t60 %t62 = add i64 %t61, 10 store i64 %t62, ptr %a52 br label %endif6163 endif6163: %t63 = load i8, ptr %a47 %t64 = icmp uge i8 %t63, 65 br label %logic.from6164 logic.from6164: br i1 %t64, label %logic.rhs6165, label %logic.end6166 logic.rhs6165: %t65 = load i8, ptr %a47 %t66 = icmp ule i8 %t65, 70 br label %logic.rend6167 logic.rend6167: br label %logic.end6166 logic.end6166: %t67 = phi i1 [ false, %logic.from6164 ], [ %t66, %logic.rend6167 ] br i1 %t67, label %then6168, label %endif6170 then6168: %t68 = load i8, ptr %a47 %t69 = zext i8 %t68 to i64 %t70 = zext i8 65 to i64 %t71 = sub i64 %t69, %t70 %t72 = add i64 %t71, 10 store i64 %t72, ptr %a52 br label %endif6170 endif6170: %t73 = load i64, ptr %a29 %t74 = mul i64 %t73, 16 %t75 = load i64, ptr %a52 %t76 = add i64 %t74, %t75 store i64 %t76, ptr %a29 br label %each.step6155 each.step6155: %t77 = load i64, ptr %a39 %t78 = add i64 %t77, 1 store i64 %t78, ptr %a39 br label %each.cond6153 each.end6156: call void @finch_str_drop(ptr %a38) %t79 = load i64, ptr %a29 call void @finch_str_from_int(ptr %a80, i64 %t79) %t81 = load { ptr, i64, i64 }, ptr %a80 %t82 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t81, 0 %t83 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3951, i64 3, i64 0 }) %t84 = insertvalue %S.gen.Val %t82, %S.ast.Type %t83, 1 %t85 = insertvalue %S.gen.Val %t84, i1 true, 3 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t85 endif6152: %t86 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t87 = load { ptr, i64, i64 }, ptr %t86 store { ptr, i64, i64 } %t87, ptr %a88 %t89 = call i64 @finch_str_to_int(ptr %a88, ptr @.str.3952, i64 3351) call void @finch_str_from_int(ptr %a90, i64 %t89) %t91 = load { ptr, i64, i64 }, ptr %a90 %t92 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t91, 0 %t93 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3953, i64 3, i64 0 }) %t94 = insertvalue %S.gen.Val %t92, %S.ast.Type %t93, 1 %t95 = insertvalue %S.gen.Val %t94, i1 true, 3 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t95 endif6145: %t96 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t96, ptr %a97 store { ptr, i64, i64 } { ptr @.str.3954, i64 5, i64 0 }, ptr %a98 %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) %t100 = icmp ne i32 %t99, 0 br i1 %t100, label %then6171, label %endif6173 then6171: %t101 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t102 = load { ptr, i64, i64 }, ptr %t101 store { ptr, i64, i64 } %t102, ptr %a103 call void @finch_str_copy(ptr %a104, ptr %a103) %t105 = load { ptr, i64, i64 }, ptr %a104 %t106 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t105, 0 %t107 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3955, i64 5, i64 0 }) %t108 = insertvalue %S.gen.Val %t106, %S.ast.Type %t107, 1 %t109 = insertvalue %S.gen.Val %t108, i1 true, 3 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t109 endif6173: %t110 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t110, ptr %a111 store { ptr, i64, i64 } { ptr @.str.3956, i64 4, i64 0 }, ptr %a112 %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) %t114 = icmp ne i32 %t113, 0 br i1 %t114, label %then6174, label %endif6176 then6174: %t115 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t116 = load { ptr, i64, i64 }, ptr %t115 store { ptr, i64, i64 } %t116, ptr %a117 call void @finch_str_copy(ptr %a118, ptr %a117) %t119 = load { ptr, i64, i64 }, ptr %a118 %t120 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t119, 0 %t121 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3957, i64 4, i64 0 }) %t122 = insertvalue %S.gen.Val %t120, %S.ast.Type %t121, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t122 endif6176: %t123 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t123, ptr %a124 store { ptr, i64, i64 } { ptr @.str.3958, i64 4, i64 0 }, ptr %a125 %t126 = call i32 @finch_str_eq(ptr %a124, ptr %a125) %t127 = icmp ne i32 %t126, 0 br i1 %t127, label %then6177, label %endif6179 then6177: %t128 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t129 = load { ptr, i64, i64 }, ptr %t128 %t130 = extractvalue { ptr, i64, i64 } %t129, 1 %t131 = icmp uge i64 0, %t130 br i1 %t131, label %range6180, label %inrange6181 range6180: call void @finch_panic_index(ptr @.str.3959, i64 3360, i64 0, i64 %t130) unreachable inrange6181: %t132 = extractvalue { ptr, i64, i64 } %t129, 0 %t133 = getelementptr inbounds i8, ptr %t132, i64 0 %t134 = load i8, ptr %t133 %t135 = zext i8 %t134 to i64 store i64 %t135, ptr %a136 %t137 = load i64, ptr %a136 call void @finch_str_from_int(ptr %a138, i64 %t137) %t139 = load { ptr, i64, i64 }, ptr %a138 %t140 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t139, 0 %t141 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3960, i64 4, i64 0 }) %t142 = insertvalue %S.gen.Val %t140, %S.ast.Type %t141, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t142 endif6179: %t143 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t143, ptr %a144 store { ptr, i64, i64 } { ptr @.str.3961, i64 3, i64 0 }, ptr %a145 %t146 = call i32 @finch_str_eq(ptr %a144, ptr %a145) %t147 = icmp ne i32 %t146, 0 br i1 %t147, label %then6182, label %endif6184 then6182: %t148 = load ptr, ptr %a1 %t149 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t150 = load { ptr, i64, i64 }, ptr %t149 %t151 = call %S.gen.Val @finch.gen.strConst(ptr %t148, { ptr, i64, i64 } %t150) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t151 endif6184: %t152 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t152, ptr %a153 store { ptr, i64, i64 } { ptr @.str.3962, i64 4, i64 0 }, ptr %a154 %t155 = call i32 @finch_str_eq(ptr %a153, ptr %a154) %t156 = icmp ne i32 %t155, 0 br i1 %t156, label %then6185, label %endif6187 then6185: %t157 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } { ptr @.str.3963, i64 4, i64 0 }, 0 %t158 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3964, i64 4, i64 0 }) %t159 = insertvalue %S.gen.Val %t157, %S.ast.Type %t158, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t159 endif6187: %t160 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t160, ptr %a161 store { ptr, i64, i64 } { ptr @.str.3965, i64 3, i64 0 }, ptr %a162 %t163 = call i32 @finch_str_eq(ptr %a161, ptr %a162) %t164 = icmp ne i32 %t163, 0 br label %logic.from6188 logic.from6188: br i1 %t164, label %logic.end6190, label %logic.rhs6189 logic.rhs6189: %t165 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t165, ptr %a166 store { ptr, i64, i64 } { ptr @.str.3966, i64 6, i64 0 }, ptr %a167 %t168 = call i32 @finch_str_eq(ptr %a166, ptr %a167) %t169 = icmp ne i32 %t168, 0 br label %logic.rend6191 logic.rend6191: br label %logic.end6190 logic.end6190: %t170 = phi i1 [ true, %logic.from6188 ], [ %t169, %logic.rend6191 ] br label %logic.from6192 logic.from6192: br i1 %t170, label %logic.end6194, label %logic.rhs6193 logic.rhs6193: %t171 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t171, ptr %a172 store { ptr, i64, i64 } { ptr @.str.3967, i64 5, i64 0 }, ptr %a173 %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) %t175 = icmp ne i32 %t174, 0 br label %logic.rend6195 logic.rend6195: br label %logic.end6194 logic.end6194: %t176 = phi i1 [ true, %logic.from6192 ], [ %t175, %logic.rend6195 ] br i1 %t176, label %then6196, label %endif6198 then6196: %t177 = load ptr, ptr %a1 %t178 = load %S.ast.Node, ptr %a2 %t179 = call %S.gen.Ref @finch.gen.ref(ptr %t177, %S.ast.Node %t178, i1 false) store %S.gen.Ref %t179, ptr %a180 %t181 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 0 %t182 = load i1, ptr %t181 %t183 = xor i1 %t182, true br i1 %t183, label %then6199, label %endif6201 then6199: %t184 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 2 %t185 = load %S.gen.Val, ptr %t184 store %S.gen.Val %t185, ptr %a186 call void @finch.copy.S_gen_Val(ptr %a187, ptr %a186) %t188 = load %S.gen.Val, ptr %a187 call void @finch.drop.S_gen_Ref(ptr %a180) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t188 endif6201: %t189 = load ptr, ptr %a1 %t190 = load ptr, ptr %a1 %t191 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1 %t192 = getelementptr inbounds %S.gen.Place, ptr %t191, i32 0, i32 1 %t193 = load %S.ast.Type, ptr %t192 %t194 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t190, %S.ast.Type %t193) %t195 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1 %t196 = getelementptr inbounds %S.gen.Place, ptr %t195, i32 0, i32 0 %t197 = load { ptr, i64, i64 }, ptr %t196 %t198 = call { ptr, i64, i64 } @finch.gen.load(ptr %t189, { ptr, i64, i64 } %t194, { ptr, i64, i64 } %t197) store { ptr, i64, i64 } %t194, ptr %a199 call void @finch_str_drop(ptr %a199) %t200 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t198, 0 %t201 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1 %t202 = getelementptr inbounds %S.gen.Place, ptr %t201, i32 0, i32 1 %t203 = load %S.ast.Type, ptr %t202 store %S.ast.Type %t203, ptr %a204 call void @finch.copy.S_ast_Type(ptr %a205, ptr %a204) %t206 = load %S.ast.Type, ptr %a205 %t207 = insertvalue %S.gen.Val %t200, %S.ast.Type %t206, 1 call void @finch.drop.S_gen_Ref(ptr %a180) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t207 endif6198: %t208 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t208, ptr %a209 store { ptr, i64, i64 } { ptr @.str.3968, i64 5, i64 0 }, ptr %a210 %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) %t212 = icmp ne i32 %t211, 0 br i1 %t212, label %then6202, label %endif6204 then6202: %t213 = load ptr, ptr %a1 %t214 = load %S.ast.Node, ptr %a2 %t215 = call %S.gen.Val @finch.gen.matchGen(ptr %t213, %S.ast.Node %t214, i1 true) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t215 endif6204: %t216 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t216, ptr %a217 store { ptr, i64, i64 } { ptr @.str.3969, i64 3, i64 0 }, ptr %a218 %t219 = call i32 @finch_str_eq(ptr %a217, ptr %a218) %t220 = icmp ne i32 %t219, 0 br i1 %t220, label %then6205, label %endif6207 then6205: %t221 = load ptr, ptr %a1 %t222 = load %S.ast.Node, ptr %a2 %t223 = call %S.gen.Val @finch.gen.tryExpr(ptr %t221, %S.ast.Node %t222) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t223 endif6207: %t224 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t224, ptr %a225 store { ptr, i64, i64 } { ptr @.str.3970, i64 2, i64 0 }, ptr %a226 %t227 = call i32 @finch_str_eq(ptr %a225, ptr %a226) %t228 = icmp ne i32 %t227, 0 br i1 %t228, label %then6208, label %endif6210 then6208: %t229 = load ptr, ptr %a1 %t230 = load %S.ast.Node, ptr %a2 %t231 = call %S.gen.Val @finch.gen.orElse(ptr %t229, %S.ast.Node %t230, i1 false) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t231 endif6210: %t232 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t232, ptr %a233 store { ptr, i64, i64 } { ptr @.str.3971, i64 5, i64 0 }, ptr %a234 %t235 = call i32 @finch_str_eq(ptr %a233, ptr %a234) %t236 = icmp ne i32 %t235, 0 br i1 %t236, label %then6211, label %endif6213 then6211: %t237 = load ptr, ptr %a1 %t238 = load %S.ast.Node, ptr %a2 %t239 = call %S.gen.Val @finch.gen.unary(ptr %t237, %S.ast.Node %t238) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t239 endif6213: %t240 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t240, ptr %a241 store { ptr, i64, i64 } { ptr @.str.3972, i64 6, i64 0 }, ptr %a242 %t243 = call i32 @finch_str_eq(ptr %a241, ptr %a242) %t244 = icmp ne i32 %t243, 0 br i1 %t244, label %then6214, label %endif6216 then6214: %t245 = load ptr, ptr %a1 %t246 = load %S.ast.Node, ptr %a2 %t247 = call %S.gen.Val @finch.gen.binary(ptr %t245, %S.ast.Node %t246) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t247 endif6216: %t248 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t248, ptr %a249 store { ptr, i64, i64 } { ptr @.str.3973, i64 4, i64 0 }, ptr %a250 %t251 = call i32 @finch_str_eq(ptr %a249, ptr %a250) %t252 = icmp ne i32 %t251, 0 br i1 %t252, label %then6217, label %endif6219 then6217: %t253 = load ptr, ptr %a1 %t254 = load %S.ast.Node, ptr %a2 %t255 = call %S.gen.Val @finch.gen.call(ptr %t253, %S.ast.Node %t254) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t255 endif6219: %t256 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t256, ptr %a257 store { ptr, i64, i64 } { ptr @.str.3974, i64 6, i64 0 }, ptr %a258 %t259 = call i32 @finch_str_eq(ptr %a257, ptr %a258) %t260 = icmp ne i32 %t259, 0 br i1 %t260, label %then6220, label %endif6222 then6220: %t261 = load ptr, ptr %a1 %t262 = load %S.ast.Node, ptr %a2 %t263 = call %S.gen.Val @finch.gen.method(ptr %t261, %S.ast.Node %t262) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t263 endif6222: %t264 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t264, ptr %a265 store { ptr, i64, i64 } { ptr @.str.3975, i64 5, i64 0 }, ptr %a266 %t267 = call i32 @finch_str_eq(ptr %a265, ptr %a266) %t268 = icmp ne i32 %t267, 0 br i1 %t268, label %then6223, label %endif6225 then6223: %t269 = load ptr, ptr %a1 %t270 = load %S.ast.Node, ptr %a2 %t271 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3976, i64 4, i64 0 }) %t272 = call %S.gen.Val @finch.gen.arrayLit(ptr %t269, %S.ast.Node %t270, %S.ast.Type %t271) store %S.ast.Type %t271, ptr %a273 call void @finch.drop.S_ast_Type(ptr %a273) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t272 endif6225: %t274 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t274, ptr %a275 store { ptr, i64, i64 } { ptr @.str.3977, i64 3, i64 0 }, ptr %a276 %t277 = call i32 @finch_str_eq(ptr %a275, ptr %a276) %t278 = icmp ne i32 %t277, 0 br i1 %t278, label %then6226, label %endif6228 then6226: %t279 = load ptr, ptr %a1 %t280 = load %S.ast.Node, ptr %a2 %t281 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3978, i64 4, i64 0 }) %t282 = call %S.gen.Val @finch.gen.mapLit(ptr %t279, %S.ast.Node %t280, %S.ast.Type %t281) store %S.ast.Type %t281, ptr %a283 call void @finch.drop.S_ast_Type(ptr %a283) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t282 endif6228: %t284 = load ptr, ptr %a1 %t285 = load %S.ast.Node, ptr %a2 %t286 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.3979, i64 19, i64 0 }, ptr %a288 store { ptr, i64, i64 } %t286, ptr %a289 call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) %t290 = load { ptr, i64, i64 }, ptr %a287 call void @finch.gen.fail(ptr %t284, %S.ast.Node %t285, { ptr, i64, i64 } %t290) store { ptr, i64, i64 } %t290, ptr %a291 call void @finch_str_drop(ptr %a291) call void @finch_str_drop(ptr %a8) ret %S.gen.Val zeroinitializer } define internal %S.gen.Val @finch.gen.unary(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a12 = alloca %S.gen.Val, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca %S.ast.Type, align 16 %a31 = alloca %S.gen.Val, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca %S.ast.Type, align 16 %a103 = alloca %S.ast.Type, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca %S.ast.Type, align 16 %a144 = alloca %S.ast.Type, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca %S.ast.Type, align 16 %a158 = alloca %S.ast.Type, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca %S.ast.Type, align 16 %a190 = alloca %S.ast.Type, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca %S.ast.Type, align 16 %a224 = alloca %S.ast.Type, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t5 = load { ptr, i64, i64 }, ptr %t4 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 0, %t6 br i1 %t7, label %range6229, label %inrange6230 range6229: call void @finch_panic_index(ptr @.str.3980, i64 3408, i64 0, i64 %t6) unreachable inrange6230: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds %S.ast.Node, ptr %t8, i64 0 %t10 = load %S.ast.Node, ptr %t9 %t11 = call %S.gen.Val @finch.gen.expr(ptr %t3, %S.ast.Node %t10) store %S.gen.Val %t11, ptr %a12 %t13 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t14 = load { ptr, i64, i64 }, ptr %t13 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.3981, i64 1, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 br i1 %t18, label %then6231, label %endif6233 then6231: %t19 = load ptr, ptr %a1 %t20 = load %S.gen.Val, ptr %a12 %t21 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3982, i64 4, i64 0 }) %t22 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t23 = load { ptr, i64, i64 }, ptr %t22 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 0, %t24 br i1 %t25, label %range6234, label %inrange6235 range6234: call void @finch_panic_index(ptr @.str.3983, i64 3410, i64 0, i64 %t24) unreachable inrange6235: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds %S.ast.Node, ptr %t26, i64 0 %t28 = load %S.ast.Node, ptr %t27 %t29 = call %S.gen.Val @finch.gen.coerce(ptr %t19, %S.gen.Val %t20, %S.ast.Type %t21, %S.ast.Node %t28, { ptr, i64, i64 } { ptr @.str.3984, i64 19, i64 0 }) store %S.ast.Type %t21, ptr %a30 call void @finch.drop.S_ast_Type(ptr %a30) store %S.gen.Val %t29, ptr %a31 %t32 = load ptr, ptr %a1 %t33 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 %t34 = load { ptr, i64, i64 }, ptr %t33 store { ptr, i64, i64 } { ptr @.str.3985, i64 7, i64 0 }, ptr %a36 store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t38, ptr %a40 store { ptr, i64, i64 } { ptr @.str.3986, i64 6, i64 0 }, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) store { ptr, i64, i64 } %t38, ptr %a42 call void @finch_str_drop(ptr %a42) %t43 = load { ptr, i64, i64 }, ptr %a39 %t44 = call { ptr, i64, i64 } @finch.gen.op(ptr %t32, { ptr, i64, i64 } %t43) store { ptr, i64, i64 } %t43, ptr %a45 call void @finch_str_drop(ptr %a45) %t46 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t44, 0 %t47 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3987, i64 4, i64 0 }) %t48 = insertvalue %S.gen.Val %t46, %S.ast.Type %t47, 1 call void @finch.drop.S_gen_Val(ptr %a31) call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t48 endif6233: %t49 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t50 = load { ptr, i64, i64 }, ptr %t49 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.3988, i64 1, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 br i1 %t54, label %then6236, label %endif6238 then6236: %t55 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t56 = load %S.ast.Type, ptr %t55 %t57 = call i1 @finch.gen.isInt(%S.ast.Type %t56) %t58 = xor i1 %t57, true br i1 %t58, label %then6239, label %endif6241 then6239: %t59 = load ptr, ptr %a1 %t60 = load %S.ast.Node, ptr %a2 %t61 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t62 = load %S.ast.Type, ptr %t61 %t63 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t62) store { ptr, i64, i64 } { ptr @.str.3989, i64 45, i64 0 }, ptr %a65 store { ptr, i64, i64 } %t63, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) store { ptr, i64, i64 } %t63, ptr %a67 call void @finch_str_drop(ptr %a67) %t68 = load { ptr, i64, i64 }, ptr %a64 call void @finch.gen.fail(ptr %t59, %S.ast.Node %t60, { ptr, i64, i64 } %t68) store { ptr, i64, i64 } %t68, ptr %a69 call void @finch_str_drop(ptr %a69) br label %endif6241 endif6241: %t70 = load ptr, ptr %a1 %t71 = load ptr, ptr %a1 %t72 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t73 = load %S.ast.Type, ptr %t72 %t74 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t71, %S.ast.Type %t73) store { ptr, i64, i64 } { ptr @.str.3990, i64 4, i64 0 }, ptr %a76 store { ptr, i64, i64 } %t74, ptr %a77 call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) store { ptr, i64, i64 } %t74, ptr %a78 call void @finch_str_drop(ptr %a78) %t79 = load { ptr, i64, i64 }, ptr %a75 store { ptr, i64, i64 } %t79, ptr %a81 store { ptr, i64, i64 } { ptr @.str.3991, i64 1, i64 0 }, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) store { ptr, i64, i64 } %t79, ptr %a83 call void @finch_str_drop(ptr %a83) %t84 = load { ptr, i64, i64 }, ptr %a80 %t85 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t86 = load { ptr, i64, i64 }, ptr %t85 store { ptr, i64, i64 } %t84, ptr %a88 store { ptr, i64, i64 } %t86, ptr %a89 call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) store { ptr, i64, i64 } %t84, ptr %a90 call void @finch_str_drop(ptr %a90) %t91 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t91, ptr %a93 store { ptr, i64, i64 } { ptr @.str.3992, i64 4, i64 0 }, ptr %a94 call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) store { ptr, i64, i64 } %t91, ptr %a95 call void @finch_str_drop(ptr %a95) %t96 = load { ptr, i64, i64 }, ptr %a92 %t97 = call { ptr, i64, i64 } @finch.gen.op(ptr %t70, { ptr, i64, i64 } %t96) store { ptr, i64, i64 } %t96, ptr %a98 call void @finch_str_drop(ptr %a98) %t99 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t97, 0 %t100 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t101 = load %S.ast.Type, ptr %t100 store %S.ast.Type %t101, ptr %a102 call void @finch.copy.S_ast_Type(ptr %a103, ptr %a102) %t104 = load %S.ast.Type, ptr %a103 %t105 = insertvalue %S.gen.Val %t99, %S.ast.Type %t104, 1 call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t105 endif6238: %t106 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t107 = load %S.ast.Type, ptr %t106 %t108 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t107) br i1 %t108, label %then6242, label %endif6244 then6242: %t109 = load ptr, ptr %a1 %t110 = load %S.ast.Node, ptr %a2 %t111 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t112 = load %S.ast.Type, ptr %t111 %t113 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t112) store { ptr, i64, i64 } %t113, ptr %a115 store { ptr, i64, i64 } { ptr @.str.3993, i64 34, i64 0 }, ptr %a116 call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) store { ptr, i64, i64 } %t113, ptr %a117 call void @finch_str_drop(ptr %a117) %t118 = load { ptr, i64, i64 }, ptr %a114 call void @finch.gen.fail(ptr %t109, %S.ast.Node %t110, { ptr, i64, i64 } %t118) store { ptr, i64, i64 } %t118, ptr %a119 call void @finch_str_drop(ptr %a119) br label %endif6244 endif6244: %t120 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t121 = load %S.ast.Type, ptr %t120 %t122 = call i1 @finch.gen.isSigned(%S.ast.Type %t121) br i1 %t122, label %then6245, label %endif6247 then6245: %t123 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 3 %t124 = load i1, ptr %t123 br i1 %t124, label %then6248, label %endif6250 then6248: %t125 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t126 = load { ptr, i64, i64 }, ptr %t125 store { ptr, i64, i64 } %t126, ptr %a127 store { ptr, i64, i64 } { ptr @.str.3995, i64 1, i64 0 }, ptr %a129 %t130 = call i32 @finch_str_starts(ptr %a127, ptr %a129) %t131 = icmp ne i32 %t130, 0 br i1 %t131, label %then6251, label %endif6253 then6251: %t132 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t133 = load { ptr, i64, i64 }, ptr %t132 store { ptr, i64, i64 } %t133, ptr %a134 %t136 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %t136, i32 0, i32 1 %t138 = load i64, ptr %t137 call void @finch_str_sub(ptr %a135, ptr %a134, i64 1, i64 %t138, ptr @.str.3996, i64 3425) %t139 = load { ptr, i64, i64 }, ptr %a135 %t140 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t139, 0 %t141 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t142 = load %S.ast.Type, ptr %t141 store %S.ast.Type %t142, ptr %a143 call void @finch.copy.S_ast_Type(ptr %a144, ptr %a143) %t145 = load %S.ast.Type, ptr %a144 %t146 = insertvalue %S.gen.Val %t140, %S.ast.Type %t145, 1 %t147 = insertvalue %S.gen.Val %t146, i1 true, 3 call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t147 endif6253: %t148 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t149 = load { ptr, i64, i64 }, ptr %t148 store { ptr, i64, i64 } { ptr @.str.3997, i64 1, i64 0 }, ptr %a151 store { ptr, i64, i64 } %t149, ptr %a152 call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) %t153 = load { ptr, i64, i64 }, ptr %a150 %t154 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t153, 0 %t155 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t156 = load %S.ast.Type, ptr %t155 store %S.ast.Type %t156, ptr %a157 call void @finch.copy.S_ast_Type(ptr %a158, ptr %a157) %t159 = load %S.ast.Type, ptr %a158 %t160 = insertvalue %S.gen.Val %t154, %S.ast.Type %t159, 1 %t161 = insertvalue %S.gen.Val %t160, i1 true, 3 call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t161 endif6250: %t162 = load ptr, ptr %a1 %t163 = load ptr, ptr %a1 %t164 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t165 = load %S.ast.Type, ptr %t164 %t166 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t163, %S.ast.Type %t165) store { ptr, i64, i64 } { ptr @.str.3998, i64 4, i64 0 }, ptr %a168 store { ptr, i64, i64 } %t166, ptr %a169 call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) store { ptr, i64, i64 } %t166, ptr %a170 call void @finch_str_drop(ptr %a170) %t171 = load { ptr, i64, i64 }, ptr %a167 store { ptr, i64, i64 } %t171, ptr %a173 store { ptr, i64, i64 } { ptr @.str.3999, i64 4, i64 0 }, ptr %a174 call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174) store { ptr, i64, i64 } %t171, ptr %a175 call void @finch_str_drop(ptr %a175) %t176 = load { ptr, i64, i64 }, ptr %a172 %t177 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t178 = load { ptr, i64, i64 }, ptr %t177 store { ptr, i64, i64 } %t176, ptr %a180 store { ptr, i64, i64 } %t178, ptr %a181 call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) store { ptr, i64, i64 } %t176, ptr %a182 call void @finch_str_drop(ptr %a182) %t183 = load { ptr, i64, i64 }, ptr %a179 %t184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t162, { ptr, i64, i64 } %t183) store { ptr, i64, i64 } %t183, ptr %a185 call void @finch_str_drop(ptr %a185) %t186 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t184, 0 %t187 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t188 = load %S.ast.Type, ptr %t187 store %S.ast.Type %t188, ptr %a189 call void @finch.copy.S_ast_Type(ptr %a190, ptr %a189) %t191 = load %S.ast.Type, ptr %a190 %t192 = insertvalue %S.gen.Val %t186, %S.ast.Type %t191, 1 call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t192 endif6247: %t193 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t194 = load %S.ast.Type, ptr %t193 %t195 = call i1 @finch.gen.isFloat(%S.ast.Type %t194) br i1 %t195, label %then6254, label %endif6256 then6254: %t196 = load ptr, ptr %a1 %t197 = load ptr, ptr %a1 %t198 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t199 = load %S.ast.Type, ptr %t198 %t200 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t197, %S.ast.Type %t199) store { ptr, i64, i64 } { ptr @.str.4000, i64 5, i64 0 }, ptr %a202 store { ptr, i64, i64 } %t200, ptr %a203 call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203) store { ptr, i64, i64 } %t200, ptr %a204 call void @finch_str_drop(ptr %a204) %t205 = load { ptr, i64, i64 }, ptr %a201 store { ptr, i64, i64 } %t205, ptr %a207 store { ptr, i64, i64 } { ptr @.str.4001, i64 1, i64 0 }, ptr %a208 call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) store { ptr, i64, i64 } %t205, ptr %a209 call void @finch_str_drop(ptr %a209) %t210 = load { ptr, i64, i64 }, ptr %a206 %t211 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t212 = load { ptr, i64, i64 }, ptr %t211 store { ptr, i64, i64 } %t210, ptr %a214 store { ptr, i64, i64 } %t212, ptr %a215 call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) store { ptr, i64, i64 } %t210, ptr %a216 call void @finch_str_drop(ptr %a216) %t217 = load { ptr, i64, i64 }, ptr %a213 %t218 = call { ptr, i64, i64 } @finch.gen.op(ptr %t196, { ptr, i64, i64 } %t217) store { ptr, i64, i64 } %t217, ptr %a219 call void @finch_str_drop(ptr %a219) %t220 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t218, 0 %t221 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t222 = load %S.ast.Type, ptr %t221 store %S.ast.Type %t222, ptr %a223 call void @finch.copy.S_ast_Type(ptr %a224, ptr %a223) %t225 = load %S.ast.Type, ptr %a224 %t226 = insertvalue %S.gen.Val %t220, %S.ast.Type %t225, 1 call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t226 endif6256: %t227 = load ptr, ptr %a1 %t228 = load %S.ast.Node, ptr %a2 %t229 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t230 = load %S.ast.Type, ptr %t229 %t231 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t230) store { ptr, i64, i64 } { ptr @.str.4002, i64 26, i64 0 }, ptr %a233 store { ptr, i64, i64 } %t231, ptr %a234 call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) store { ptr, i64, i64 } %t231, ptr %a235 call void @finch_str_drop(ptr %a235) %t236 = load { ptr, i64, i64 }, ptr %a232 call void @finch.gen.fail(ptr %t227, %S.ast.Node %t228, { ptr, i64, i64 } %t236) store { ptr, i64, i64 } %t236, ptr %a237 call void @finch_str_drop(ptr %a237) %t238 = load %S.gen.Val, ptr %a12 ret %S.gen.Val %t238 } define internal void @finch.gen.badOperands(ptr %p0, { ptr, i64, i64 } %p1, %S.gen.Val %p2, %S.gen.Val %p3, %S.ast.Node %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.gen.Val, align 16 %a4 = alloca %S.gen.Val, align 16 %a5 = alloca %S.ast.Node, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.gen.Val %p2, ptr %a3 store %S.gen.Val %p3, ptr %a4 store %S.ast.Node %p4, ptr %a5 %t6 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.4003, i64 11, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t6, ptr %a9 call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) %t10 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t10, ptr %a12 store { ptr, i64, i64 } { ptr @.str.4004, i64 5, i64 0 }, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) store { ptr, i64, i64 } %t10, ptr %a14 call void @finch_str_drop(ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a11 %t16 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t17 = load %S.ast.Type, ptr %t16 %t18 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t17) store { ptr, i64, i64 } %t15, ptr %a20 store { ptr, i64, i64 } %t18, ptr %a21 call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) store { ptr, i64, i64 } %t15, ptr %a22 call void @finch_str_drop(ptr %a22) store { ptr, i64, i64 } %t18, ptr %a23 call void @finch_str_drop(ptr %a23) %t24 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t24, ptr %a25 %t26 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t27 = load %S.ast.Type, ptr %t26 %t28 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1 %t29 = load %S.ast.Type, ptr %t28 %t30 = call i1 @finch.ast.same(%S.ast.Type %t27, %S.ast.Type %t29) %t31 = xor i1 %t30, true br i1 %t31, label %then6257, label %endif6259 then6257: %t32 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t32, ptr %a34 store { ptr, i64, i64 } { ptr @.str.4005, i64 5, i64 0 }, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) %t36 = load { ptr, i64, i64 }, ptr %a33 %t37 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1 %t38 = load %S.ast.Type, ptr %t37 %t39 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t38) store { ptr, i64, i64 } %t36, ptr %a41 store { ptr, i64, i64 } %t39, ptr %a42 call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) store { ptr, i64, i64 } %t36, ptr %a43 call void @finch_str_drop(ptr %a43) store { ptr, i64, i64 } %t39, ptr %a44 call void @finch_str_drop(ptr %a44) %t45 = load { ptr, i64, i64 }, ptr %a40 %t46 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t45, ptr %a25 store { ptr, i64, i64 } %t46, ptr %a47 call void @finch_str_drop(ptr %a47) br label %endif6259 endif6259: %t48 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t48, ptr %a49 store { ptr, i64, i64 } { ptr @.str.4006, i64 1, i64 0 }, ptr %a50 %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) %t52 = icmp ne i32 %t51, 0 br label %logic.from6260 logic.from6260: br i1 %t52, label %logic.rhs6261, label %logic.end6262 logic.rhs6261: %t53 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t54 = getelementptr inbounds %S.ast.Type, ptr %t53, i32 0, i32 0 %t55 = load { ptr, i64, i64 }, ptr %t54 store { ptr, i64, i64 } %t55, ptr %a56 store { ptr, i64, i64 } { ptr @.str.4007, i64 3, i64 0 }, ptr %a57 %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) %t59 = icmp ne i32 %t58, 0 br label %logic.from6263 logic.from6263: br i1 %t59, label %logic.end6265, label %logic.rhs6264 logic.rhs6264: %t60 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1 %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i32 0, i32 0 %t62 = load { ptr, i64, i64 }, ptr %t61 store { ptr, i64, i64 } %t62, ptr %a63 store { ptr, i64, i64 } { ptr @.str.4008, i64 3, i64 0 }, ptr %a64 %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) %t66 = icmp ne i32 %t65, 0 br label %logic.rend6266 logic.rend6266: br label %logic.end6265 logic.end6265: %t67 = phi i1 [ true, %logic.from6263 ], [ %t66, %logic.rend6266 ] br label %logic.rend6267 logic.rend6267: br label %logic.end6262 logic.end6262: %t68 = phi i1 [ false, %logic.from6260 ], [ %t67, %logic.rend6267 ] br i1 %t68, label %then6268, label %endif6270 then6268: %t69 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t69, ptr %a71 store { ptr, i64, i64 } { ptr @.str.4009, i64 48, i64 0 }, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a70 %t74 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t73, ptr %a25 store { ptr, i64, i64 } %t74, ptr %a75 call void @finch_str_drop(ptr %a75) br label %endif6270 endif6270: %t76 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t76, ptr %a77 store { ptr, i64, i64 } { ptr @.str.4010, i64 1, i64 0 }, ptr %a78 %t79 = call i32 @finch_str_eq(ptr %a77, ptr %a78) %t80 = icmp ne i32 %t79, 0 br label %logic.from6271 logic.from6271: br i1 %t80, label %logic.end6273, label %logic.rhs6272 logic.rhs6272: %t81 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.4011, i64 1, i64 0 }, ptr %a83 %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) %t85 = icmp ne i32 %t84, 0 br label %logic.rend6274 logic.rend6274: br label %logic.end6273 logic.end6273: %t86 = phi i1 [ true, %logic.from6271 ], [ %t85, %logic.rend6274 ] br label %logic.from6275 logic.from6275: br i1 %t86, label %logic.rhs6276, label %logic.end6277 logic.rhs6276: %t87 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t88 = getelementptr inbounds %S.ast.Type, ptr %t87, i32 0, i32 0 %t89 = load { ptr, i64, i64 }, ptr %t88 store { ptr, i64, i64 } %t89, ptr %a90 store { ptr, i64, i64 } { ptr @.str.4012, i64 4, i64 0 }, ptr %a91 %t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91) %t93 = icmp ne i32 %t92, 0 br label %logic.rend6278 logic.rend6278: br label %logic.end6277 logic.end6277: %t94 = phi i1 [ false, %logic.from6275 ], [ %t93, %logic.rend6278 ] br i1 %t94, label %then6279, label %else6280 then6279: %t95 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t95, ptr %a96 store { ptr, i64, i64 } { ptr @.str.4013, i64 1, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) %t99 = icmp ne i32 %t98, 0 br i1 %t99, label %then6282, label %else6283 then6282: %t100 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t100, ptr %a102 store { ptr, i64, i64 } { ptr @.str.4014, i64 26, i64 0 }, ptr %a103 call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) %t104 = load { ptr, i64, i64 }, ptr %a101 %t105 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t104, ptr %a25 store { ptr, i64, i64 } %t105, ptr %a106 call void @finch_str_drop(ptr %a106) br label %endif6284 else6283: %t107 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t107, ptr %a109 store { ptr, i64, i64 } { ptr @.str.4015, i64 26, i64 0 }, ptr %a110 call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) %t111 = load { ptr, i64, i64 }, ptr %a108 %t112 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t111, ptr %a25 store { ptr, i64, i64 } %t112, ptr %a113 call void @finch_str_drop(ptr %a113) br label %endif6284 endif6284: br label %endif6281 else6280: %t114 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t114, ptr %a115 store { ptr, i64, i64 } { ptr @.str.4016, i64 1, i64 0 }, ptr %a116 %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) %t118 = icmp ne i32 %t117, 0 br label %logic.from6285 logic.from6285: br i1 %t118, label %logic.end6287, label %logic.rhs6286 logic.rhs6286: %t119 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t119, ptr %a120 store { ptr, i64, i64 } { ptr @.str.4017, i64 1, i64 0 }, ptr %a121 %t122 = call i32 @finch_str_eq(ptr %a120, ptr %a121) %t123 = icmp ne i32 %t122, 0 br label %logic.rend6288 logic.rend6288: br label %logic.end6287 logic.end6287: %t124 = phi i1 [ true, %logic.from6285 ], [ %t123, %logic.rend6288 ] br label %logic.from6289 logic.from6289: br i1 %t124, label %logic.end6291, label %logic.rhs6290 logic.rhs6290: %t125 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t125, ptr %a126 store { ptr, i64, i64 } { ptr @.str.4018, i64 1, i64 0 }, ptr %a127 %t128 = call i32 @finch_str_eq(ptr %a126, ptr %a127) %t129 = icmp ne i32 %t128, 0 br label %logic.rend6292 logic.rend6292: br label %logic.end6291 logic.end6291: %t130 = phi i1 [ true, %logic.from6289 ], [ %t129, %logic.rend6292 ] br label %logic.from6293 logic.from6293: br i1 %t130, label %logic.end6295, label %logic.rhs6294 logic.rhs6294: %t131 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t131, ptr %a132 store { ptr, i64, i64 } { ptr @.str.4019, i64 2, i64 0 }, ptr %a133 %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) %t135 = icmp ne i32 %t134, 0 br label %logic.rend6296 logic.rend6296: br label %logic.end6295 logic.end6295: %t136 = phi i1 [ true, %logic.from6293 ], [ %t135, %logic.rend6296 ] br label %logic.from6297 logic.from6297: br i1 %t136, label %logic.end6299, label %logic.rhs6298 logic.rhs6298: %t137 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t137, ptr %a138 store { ptr, i64, i64 } { ptr @.str.4020, i64 2, i64 0 }, ptr %a139 %t140 = call i32 @finch_str_eq(ptr %a138, ptr %a139) %t141 = icmp ne i32 %t140, 0 br label %logic.rend6300 logic.rend6300: br label %logic.end6299 logic.end6299: %t142 = phi i1 [ true, %logic.from6297 ], [ %t141, %logic.rend6300 ] br i1 %t142, label %then6301, label %endif6303 then6301: %t143 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t143, ptr %a145 store { ptr, i64, i64 } { ptr @.str.4021, i64 43, i64 0 }, ptr %a146 call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) %t147 = load { ptr, i64, i64 }, ptr %a144 %t148 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t147, ptr %a25 store { ptr, i64, i64 } %t148, ptr %a149 call void @finch_str_drop(ptr %a149) br label %endif6303 endif6303: br label %endif6281 endif6281: %t150 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t151 = getelementptr inbounds %S.ast.Type, ptr %t150, i32 0, i32 0 %t152 = load { ptr, i64, i64 }, ptr %t151 store { ptr, i64, i64 } %t152, ptr %a153 store { ptr, i64, i64 } { ptr @.str.4022, i64 6, i64 0 }, ptr %a154 %t155 = call i32 @finch_str_eq(ptr %a153, ptr %a154) %t156 = icmp ne i32 %t155, 0 br label %logic.from6304 logic.from6304: br i1 %t156, label %logic.end6306, label %logic.rhs6305 logic.rhs6305: %t157 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t158 = getelementptr inbounds %S.ast.Type, ptr %t157, i32 0, i32 0 %t159 = load { ptr, i64, i64 }, ptr %t158 store { ptr, i64, i64 } %t159, ptr %a160 store { ptr, i64, i64 } { ptr @.str.4023, i64 5, i64 0 }, ptr %a161 %t162 = call i32 @finch_str_eq(ptr %a160, ptr %a161) %t163 = icmp ne i32 %t162, 0 br label %logic.rend6307 logic.rend6307: br label %logic.end6306 logic.end6306: %t164 = phi i1 [ true, %logic.from6304 ], [ %t163, %logic.rend6307 ] br label %logic.from6308 logic.from6308: br i1 %t164, label %logic.rhs6309, label %logic.end6310 logic.rhs6309: %t165 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t165, ptr %a166 store { ptr, i64, i64 } { ptr @.str.4024, i64 2, i64 0 }, ptr %a167 %t168 = call i32 @finch_str_eq(ptr %a166, ptr %a167) %t169 = icmp ne i32 %t168, 0 br label %logic.from6311 logic.from6311: br i1 %t169, label %logic.end6313, label %logic.rhs6312 logic.rhs6312: %t170 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t170, ptr %a171 store { ptr, i64, i64 } { ptr @.str.4025, i64 2, i64 0 }, ptr %a172 %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) %t174 = icmp ne i32 %t173, 0 br label %logic.rend6314 logic.rend6314: br label %logic.end6313 logic.end6313: %t175 = phi i1 [ true, %logic.from6311 ], [ %t174, %logic.rend6314 ] br label %logic.rend6315 logic.rend6315: br label %logic.end6310 logic.end6310: %t176 = phi i1 [ false, %logic.from6308 ], [ %t175, %logic.rend6315 ] br i1 %t176, label %then6316, label %endif6318 then6316: %t177 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t177, ptr %a179 store { ptr, i64, i64 } { ptr @.str.4026, i64 31, i64 0 }, ptr %a180 call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) %t181 = load { ptr, i64, i64 }, ptr %a178 %t182 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t181, ptr %a25 store { ptr, i64, i64 } %t182, ptr %a183 call void @finch_str_drop(ptr %a183) br label %endif6318 endif6318: %t184 = load ptr, ptr %a1 %t185 = load %S.ast.Node, ptr %a5 %t186 = load { ptr, i64, i64 }, ptr %a25 call void @finch.gen.fail(ptr %t184, %S.ast.Node %t185, { ptr, i64, i64 } %t186) call void @finch_str_drop(ptr %a25) ret void } define internal i1 @finch.gen.unify(ptr %p0, ptr %p1, ptr %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca ptr, align 16 %a3 = alloca ptr, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca %S.ast.Type, align 16 %a61 = alloca %S.ast.Type, align 16 %a68 = alloca %S.gen.Val, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca %S.ast.Type, align 16 %a106 = alloca %S.ast.Type, align 16 %a113 = alloca %S.gen.Val, align 16 %a142 = alloca %S.ast.Type, align 16 %a143 = alloca %S.ast.Type, align 16 %a149 = alloca %S.gen.Val, align 16 %a178 = alloca %S.ast.Type, align 16 %a179 = alloca %S.ast.Type, align 16 %a185 = alloca %S.gen.Val, align 16 %a207 = alloca %S.ast.Node, align 16 %a211 = alloca %S.gen.Val, align 16 %a233 = alloca %S.ast.Node, align 16 %a237 = alloca %S.gen.Val, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca %S.ast.Type, align 16 %a276 = alloca %S.gen.Val, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca %S.ast.Type, align 16 %a304 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store ptr %p1, ptr %a2 store ptr %p2, ptr %a3 %t4 = load ptr, ptr %a2 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic6319, label %ok6320 panic6319: call void @finch_panic(ptr @.str.4027, i64 3462, ptr @.str.4028) unreachable ok6320: %t6 = getelementptr inbounds %S.gen.Val, ptr %t4, i32 0, i32 1 %t7 = load %S.ast.Type, ptr %t6 %t8 = load ptr, ptr %a3 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic6321, label %ok6322 panic6321: call void @finch_panic(ptr @.str.4029, i64 3462, ptr @.str.4030) unreachable ok6322: %t10 = getelementptr inbounds %S.gen.Val, ptr %t8, i32 0, i32 1 %t11 = load %S.ast.Type, ptr %t10 %t12 = call i1 @finch.ast.same(%S.ast.Type %t7, %S.ast.Type %t11) br i1 %t12, label %then6323, label %endif6325 then6323: ret i1 true endif6325: %t13 = load ptr, ptr %a2 %t14 = icmp eq ptr %t13, null br i1 %t14, label %panic6326, label %ok6327 panic6326: call void @finch_panic(ptr @.str.4031, i64 3465, ptr @.str.4032) unreachable ok6327: %t15 = getelementptr inbounds %S.gen.Val, ptr %t13, i32 0, i32 1 %t16 = load %S.ast.Type, ptr %t15 %t17 = call i1 @finch.gen.isInt(%S.ast.Type %t16) br label %logic.from6328 logic.from6328: br i1 %t17, label %logic.rhs6329, label %logic.end6330 logic.rhs6329: %t18 = load ptr, ptr %a3 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic6331, label %ok6332 panic6331: call void @finch_panic(ptr @.str.4033, i64 3465, ptr @.str.4034) unreachable ok6332: %t20 = getelementptr inbounds %S.gen.Val, ptr %t18, i32 0, i32 1 %t21 = load %S.ast.Type, ptr %t20 %t22 = call i1 @finch.gen.isInt(%S.ast.Type %t21) br label %logic.rend6333 logic.rend6333: br label %logic.end6330 logic.end6330: %t23 = phi i1 [ false, %logic.from6328 ], [ %t22, %logic.rend6333 ] br i1 %t23, label %then6334, label %endif6336 then6334: %t24 = load ptr, ptr %a2 %t25 = icmp eq ptr %t24, null br i1 %t25, label %panic6337, label %ok6338 panic6337: call void @finch_panic(ptr @.str.4035, i64 3468, ptr @.str.4036) unreachable ok6338: %t26 = getelementptr inbounds %S.gen.Val, ptr %t24, i32 0, i32 3 %t27 = load i1, ptr %t26 br label %logic.from6339 logic.from6339: br i1 %t27, label %logic.rhs6340, label %logic.end6341 logic.rhs6340: %t28 = load ptr, ptr %a3 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic6342, label %ok6343 panic6342: call void @finch_panic(ptr @.str.4037, i64 3468, ptr @.str.4038) unreachable ok6343: %t30 = getelementptr inbounds %S.gen.Val, ptr %t28, i32 0, i32 3 %t31 = load i1, ptr %t30 %t32 = xor i1 %t31, true br label %logic.rend6344 logic.rend6344: br label %logic.end6341 logic.end6341: %t33 = phi i1 [ false, %logic.from6339 ], [ %t32, %logic.rend6344 ] br label %logic.from6345 logic.from6345: br i1 %t33, label %logic.rhs6346, label %logic.end6347 logic.rhs6346: %t34 = load ptr, ptr %a2 %t35 = icmp eq ptr %t34, null br i1 %t35, label %panic6348, label %ok6349 panic6348: call void @finch_panic(ptr @.str.4039, i64 3468, ptr @.str.4040) unreachable ok6349: %t36 = getelementptr inbounds %S.gen.Val, ptr %t34, i32 0, i32 0 %t37 = load { ptr, i64, i64 }, ptr %t36 %t38 = load ptr, ptr %a2 %t39 = icmp eq ptr %t38, null br i1 %t39, label %panic6350, label %ok6351 panic6350: call void @finch_panic(ptr @.str.4041, i64 3468, ptr @.str.4042) unreachable ok6351: %t40 = getelementptr inbounds %S.gen.Val, ptr %t38, i32 0, i32 1 %t41 = load %S.ast.Type, ptr %t40 %t42 = load ptr, ptr %a3 %t43 = icmp eq ptr %t42, null br i1 %t43, label %panic6352, label %ok6353 panic6352: call void @finch_panic(ptr @.str.4043, i64 3468, ptr @.str.4044) unreachable ok6353: %t44 = getelementptr inbounds %S.gen.Val, ptr %t42, i32 0, i32 1 %t45 = load %S.ast.Type, ptr %t44 %t46 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t37, %S.ast.Type %t41, %S.ast.Type %t45) br label %logic.rend6354 logic.rend6354: br label %logic.end6347 logic.end6347: %t47 = phi i1 [ false, %logic.from6345 ], [ %t46, %logic.rend6354 ] br i1 %t47, label %then6355, label %endif6357 then6355: %t48 = load ptr, ptr %a2 %t49 = icmp eq ptr %t48, null br i1 %t49, label %panic6358, label %ok6359 panic6358: call void @finch_panic(ptr @.str.4045, i64 3469, ptr @.str.4046) unreachable ok6359: %t50 = getelementptr inbounds %S.gen.Val, ptr %t48, i32 0, i32 0 %t51 = load { ptr, i64, i64 }, ptr %t50 store { ptr, i64, i64 } %t51, ptr %a52 call void @finch_str_copy(ptr %a53, ptr %a52) %t54 = load { ptr, i64, i64 }, ptr %a53 %t55 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t54, 0 %t56 = load ptr, ptr %a3 %t57 = icmp eq ptr %t56, null br i1 %t57, label %panic6360, label %ok6361 panic6360: call void @finch_panic(ptr @.str.4047, i64 3469, ptr @.str.4048) unreachable ok6361: %t58 = getelementptr inbounds %S.gen.Val, ptr %t56, i32 0, i32 1 %t59 = load %S.ast.Type, ptr %t58 store %S.ast.Type %t59, ptr %a60 call void @finch.copy.S_ast_Type(ptr %a61, ptr %a60) %t62 = load %S.ast.Type, ptr %a61 %t63 = insertvalue %S.gen.Val %t55, %S.ast.Type %t62, 1 %t64 = insertvalue %S.gen.Val %t63, i1 true, 3 %t65 = load ptr, ptr %a2 %t66 = icmp eq ptr %t65, null br i1 %t66, label %panic6362, label %ok6363 panic6362: call void @finch_panic(ptr @.str.4049, i64 3469, ptr @.str.4050) unreachable ok6363: %t67 = load %S.gen.Val, ptr %t65 store %S.gen.Val %t64, ptr %t65 store %S.gen.Val %t67, ptr %a68 call void @finch.drop.S_gen_Val(ptr %a68) ret i1 true endif6357: %t69 = load ptr, ptr %a3 %t70 = icmp eq ptr %t69, null br i1 %t70, label %panic6364, label %ok6365 panic6364: call void @finch_panic(ptr @.str.4051, i64 3472, ptr @.str.4052) unreachable ok6365: %t71 = getelementptr inbounds %S.gen.Val, ptr %t69, i32 0, i32 3 %t72 = load i1, ptr %t71 br label %logic.from6366 logic.from6366: br i1 %t72, label %logic.rhs6367, label %logic.end6368 logic.rhs6367: %t73 = load ptr, ptr %a2 %t74 = icmp eq ptr %t73, null br i1 %t74, label %panic6369, label %ok6370 panic6369: call void @finch_panic(ptr @.str.4053, i64 3472, ptr @.str.4054) unreachable ok6370: %t75 = getelementptr inbounds %S.gen.Val, ptr %t73, i32 0, i32 3 %t76 = load i1, ptr %t75 %t77 = xor i1 %t76, true br label %logic.rend6371 logic.rend6371: br label %logic.end6368 logic.end6368: %t78 = phi i1 [ false, %logic.from6366 ], [ %t77, %logic.rend6371 ] br label %logic.from6372 logic.from6372: br i1 %t78, label %logic.rhs6373, label %logic.end6374 logic.rhs6373: %t79 = load ptr, ptr %a3 %t80 = icmp eq ptr %t79, null br i1 %t80, label %panic6375, label %ok6376 panic6375: call void @finch_panic(ptr @.str.4055, i64 3472, ptr @.str.4056) unreachable ok6376: %t81 = getelementptr inbounds %S.gen.Val, ptr %t79, i32 0, i32 0 %t82 = load { ptr, i64, i64 }, ptr %t81 %t83 = load ptr, ptr %a3 %t84 = icmp eq ptr %t83, null br i1 %t84, label %panic6377, label %ok6378 panic6377: call void @finch_panic(ptr @.str.4057, i64 3472, ptr @.str.4058) unreachable ok6378: %t85 = getelementptr inbounds %S.gen.Val, ptr %t83, i32 0, i32 1 %t86 = load %S.ast.Type, ptr %t85 %t87 = load ptr, ptr %a2 %t88 = icmp eq ptr %t87, null br i1 %t88, label %panic6379, label %ok6380 panic6379: call void @finch_panic(ptr @.str.4059, i64 3472, ptr @.str.4060) unreachable ok6380: %t89 = getelementptr inbounds %S.gen.Val, ptr %t87, i32 0, i32 1 %t90 = load %S.ast.Type, ptr %t89 %t91 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t82, %S.ast.Type %t86, %S.ast.Type %t90) br label %logic.rend6381 logic.rend6381: br label %logic.end6374 logic.end6374: %t92 = phi i1 [ false, %logic.from6372 ], [ %t91, %logic.rend6381 ] br i1 %t92, label %then6382, label %endif6384 then6382: %t93 = load ptr, ptr %a3 %t94 = icmp eq ptr %t93, null br i1 %t94, label %panic6385, label %ok6386 panic6385: call void @finch_panic(ptr @.str.4061, i64 3473, ptr @.str.4062) unreachable ok6386: %t95 = getelementptr inbounds %S.gen.Val, ptr %t93, i32 0, i32 0 %t96 = load { ptr, i64, i64 }, ptr %t95 store { ptr, i64, i64 } %t96, ptr %a97 call void @finch_str_copy(ptr %a98, ptr %a97) %t99 = load { ptr, i64, i64 }, ptr %a98 %t100 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t99, 0 %t101 = load ptr, ptr %a2 %t102 = icmp eq ptr %t101, null br i1 %t102, label %panic6387, label %ok6388 panic6387: call void @finch_panic(ptr @.str.4063, i64 3473, ptr @.str.4064) unreachable ok6388: %t103 = getelementptr inbounds %S.gen.Val, ptr %t101, i32 0, i32 1 %t104 = load %S.ast.Type, ptr %t103 store %S.ast.Type %t104, ptr %a105 call void @finch.copy.S_ast_Type(ptr %a106, ptr %a105) %t107 = load %S.ast.Type, ptr %a106 %t108 = insertvalue %S.gen.Val %t100, %S.ast.Type %t107, 1 %t109 = insertvalue %S.gen.Val %t108, i1 true, 3 %t110 = load ptr, ptr %a3 %t111 = icmp eq ptr %t110, null br i1 %t111, label %panic6389, label %ok6390 panic6389: call void @finch_panic(ptr @.str.4065, i64 3473, ptr @.str.4066) unreachable ok6390: %t112 = load %S.gen.Val, ptr %t110 store %S.gen.Val %t109, ptr %t110 store %S.gen.Val %t112, ptr %a113 call void @finch.drop.S_gen_Val(ptr %a113) ret i1 true endif6384: %t114 = load ptr, ptr %a2 %t115 = icmp eq ptr %t114, null br i1 %t115, label %panic6391, label %ok6392 panic6391: call void @finch_panic(ptr @.str.4067, i64 3476, ptr @.str.4068) unreachable ok6392: %t116 = getelementptr inbounds %S.gen.Val, ptr %t114, i32 0, i32 1 %t117 = load %S.ast.Type, ptr %t116 %t118 = load ptr, ptr %a3 %t119 = icmp eq ptr %t118, null br i1 %t119, label %panic6393, label %ok6394 panic6393: call void @finch_panic(ptr @.str.4069, i64 3476, ptr @.str.4070) unreachable ok6394: %t120 = getelementptr inbounds %S.gen.Val, ptr %t118, i32 0, i32 1 %t121 = load %S.ast.Type, ptr %t120 %t122 = call i1 @finch.gen.widens(%S.ast.Type %t117, %S.ast.Type %t121) br i1 %t122, label %then6395, label %endif6397 then6395: %t123 = load ptr, ptr %a1 %t124 = load ptr, ptr %a2 %t125 = icmp eq ptr %t124, null br i1 %t125, label %panic6398, label %ok6399 panic6398: call void @finch_panic(ptr @.str.4071, i64 3477, ptr @.str.4072) unreachable ok6399: %t126 = getelementptr inbounds %S.gen.Val, ptr %t124, i32 0, i32 0 %t127 = load { ptr, i64, i64 }, ptr %t126 %t128 = load ptr, ptr %a2 %t129 = icmp eq ptr %t128, null br i1 %t129, label %panic6400, label %ok6401 panic6400: call void @finch_panic(ptr @.str.4073, i64 3477, ptr @.str.4074) unreachable ok6401: %t130 = getelementptr inbounds %S.gen.Val, ptr %t128, i32 0, i32 1 %t131 = load %S.ast.Type, ptr %t130 %t132 = load ptr, ptr %a3 %t133 = icmp eq ptr %t132, null br i1 %t133, label %panic6402, label %ok6403 panic6402: call void @finch_panic(ptr @.str.4075, i64 3477, ptr @.str.4076) unreachable ok6403: %t134 = getelementptr inbounds %S.gen.Val, ptr %t132, i32 0, i32 1 %t135 = load %S.ast.Type, ptr %t134 %t136 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t123, { ptr, i64, i64 } %t127, %S.ast.Type %t131, %S.ast.Type %t135) %t137 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t136, 0 %t138 = load ptr, ptr %a3 %t139 = icmp eq ptr %t138, null br i1 %t139, label %panic6404, label %ok6405 panic6404: call void @finch_panic(ptr @.str.4077, i64 3477, ptr @.str.4078) unreachable ok6405: %t140 = getelementptr inbounds %S.gen.Val, ptr %t138, i32 0, i32 1 %t141 = load %S.ast.Type, ptr %t140 store %S.ast.Type %t141, ptr %a142 call void @finch.copy.S_ast_Type(ptr %a143, ptr %a142) %t144 = load %S.ast.Type, ptr %a143 %t145 = insertvalue %S.gen.Val %t137, %S.ast.Type %t144, 1 %t146 = load ptr, ptr %a2 %t147 = icmp eq ptr %t146, null br i1 %t147, label %panic6406, label %ok6407 panic6406: call void @finch_panic(ptr @.str.4079, i64 3477, ptr @.str.4080) unreachable ok6407: %t148 = load %S.gen.Val, ptr %t146 store %S.gen.Val %t145, ptr %t146 store %S.gen.Val %t148, ptr %a149 call void @finch.drop.S_gen_Val(ptr %a149) ret i1 true endif6397: %t150 = load ptr, ptr %a3 %t151 = icmp eq ptr %t150, null br i1 %t151, label %panic6408, label %ok6409 panic6408: call void @finch_panic(ptr @.str.4081, i64 3480, ptr @.str.4082) unreachable ok6409: %t152 = getelementptr inbounds %S.gen.Val, ptr %t150, i32 0, i32 1 %t153 = load %S.ast.Type, ptr %t152 %t154 = load ptr, ptr %a2 %t155 = icmp eq ptr %t154, null br i1 %t155, label %panic6410, label %ok6411 panic6410: call void @finch_panic(ptr @.str.4083, i64 3480, ptr @.str.4084) unreachable ok6411: %t156 = getelementptr inbounds %S.gen.Val, ptr %t154, i32 0, i32 1 %t157 = load %S.ast.Type, ptr %t156 %t158 = call i1 @finch.gen.widens(%S.ast.Type %t153, %S.ast.Type %t157) br i1 %t158, label %then6412, label %endif6414 then6412: %t159 = load ptr, ptr %a1 %t160 = load ptr, ptr %a3 %t161 = icmp eq ptr %t160, null br i1 %t161, label %panic6415, label %ok6416 panic6415: call void @finch_panic(ptr @.str.4085, i64 3481, ptr @.str.4086) unreachable ok6416: %t162 = getelementptr inbounds %S.gen.Val, ptr %t160, i32 0, i32 0 %t163 = load { ptr, i64, i64 }, ptr %t162 %t164 = load ptr, ptr %a3 %t165 = icmp eq ptr %t164, null br i1 %t165, label %panic6417, label %ok6418 panic6417: call void @finch_panic(ptr @.str.4087, i64 3481, ptr @.str.4088) unreachable ok6418: %t166 = getelementptr inbounds %S.gen.Val, ptr %t164, i32 0, i32 1 %t167 = load %S.ast.Type, ptr %t166 %t168 = load ptr, ptr %a2 %t169 = icmp eq ptr %t168, null br i1 %t169, label %panic6419, label %ok6420 panic6419: call void @finch_panic(ptr @.str.4089, i64 3481, ptr @.str.4090) unreachable ok6420: %t170 = getelementptr inbounds %S.gen.Val, ptr %t168, i32 0, i32 1 %t171 = load %S.ast.Type, ptr %t170 %t172 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t159, { ptr, i64, i64 } %t163, %S.ast.Type %t167, %S.ast.Type %t171) %t173 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t172, 0 %t174 = load ptr, ptr %a2 %t175 = icmp eq ptr %t174, null br i1 %t175, label %panic6421, label %ok6422 panic6421: call void @finch_panic(ptr @.str.4091, i64 3481, ptr @.str.4092) unreachable ok6422: %t176 = getelementptr inbounds %S.gen.Val, ptr %t174, i32 0, i32 1 %t177 = load %S.ast.Type, ptr %t176 store %S.ast.Type %t177, ptr %a178 call void @finch.copy.S_ast_Type(ptr %a179, ptr %a178) %t180 = load %S.ast.Type, ptr %a179 %t181 = insertvalue %S.gen.Val %t173, %S.ast.Type %t180, 1 %t182 = load ptr, ptr %a3 %t183 = icmp eq ptr %t182, null br i1 %t183, label %panic6423, label %ok6424 panic6423: call void @finch_panic(ptr @.str.4093, i64 3481, ptr @.str.4094) unreachable ok6424: %t184 = load %S.gen.Val, ptr %t182 store %S.gen.Val %t181, ptr %t182 store %S.gen.Val %t184, ptr %a185 call void @finch.drop.S_gen_Val(ptr %a185) ret i1 true endif6414: ret i1 false endif6336: %t186 = load ptr, ptr %a2 %t187 = icmp eq ptr %t186, null br i1 %t187, label %panic6425, label %ok6426 panic6425: call void @finch_panic(ptr @.str.4095, i64 3486, ptr @.str.4096) unreachable ok6426: %t188 = getelementptr inbounds %S.gen.Val, ptr %t186, i32 0, i32 1 %t189 = load %S.ast.Type, ptr %t188 %t190 = call i1 @finch.gen.isInt(%S.ast.Type %t189) br label %logic.from6427 logic.from6427: br i1 %t190, label %logic.rhs6428, label %logic.end6429 logic.rhs6428: %t191 = load ptr, ptr %a3 %t192 = icmp eq ptr %t191, null br i1 %t192, label %panic6430, label %ok6431 panic6430: call void @finch_panic(ptr @.str.4097, i64 3486, ptr @.str.4098) unreachable ok6431: %t193 = getelementptr inbounds %S.gen.Val, ptr %t191, i32 0, i32 1 %t194 = load %S.ast.Type, ptr %t193 %t195 = call i1 @finch.gen.isFloat(%S.ast.Type %t194) br label %logic.rend6432 logic.rend6432: br label %logic.end6429 logic.end6429: %t196 = phi i1 [ false, %logic.from6427 ], [ %t195, %logic.rend6432 ] br i1 %t196, label %then6433, label %endif6435 then6433: %t197 = load ptr, ptr %a1 %t198 = load ptr, ptr %a2 %t199 = icmp eq ptr %t198, null br i1 %t199, label %panic6436, label %ok6437 panic6436: call void @finch_panic(ptr @.str.4099, i64 3487, ptr @.str.4100) unreachable ok6437: %t200 = load %S.gen.Val, ptr %t198 %t201 = load ptr, ptr %a3 %t202 = icmp eq ptr %t201, null br i1 %t202, label %panic6438, label %ok6439 panic6438: call void @finch_panic(ptr @.str.4101, i64 3487, ptr @.str.4102) unreachable ok6439: %t203 = getelementptr inbounds %S.gen.Val, ptr %t201, i32 0, i32 1 %t204 = load %S.ast.Type, ptr %t203 %t205 = call %S.ast.Node @finch.gen.Node0() %t206 = call %S.gen.Val @finch.gen.coerce(ptr %t197, %S.gen.Val %t200, %S.ast.Type %t204, %S.ast.Node %t205, { ptr, i64, i64 } { ptr @.str.4103, i64 0, i64 0 }) store %S.ast.Node %t205, ptr %a207 call void @finch.drop.S_ast_Node(ptr %a207) %t208 = load ptr, ptr %a2 %t209 = icmp eq ptr %t208, null br i1 %t209, label %panic6440, label %ok6441 panic6440: call void @finch_panic(ptr @.str.4104, i64 3487, ptr @.str.4105) unreachable ok6441: %t210 = load %S.gen.Val, ptr %t208 store %S.gen.Val %t206, ptr %t208 store %S.gen.Val %t210, ptr %a211 call void @finch.drop.S_gen_Val(ptr %a211) ret i1 true endif6435: %t212 = load ptr, ptr %a2 %t213 = icmp eq ptr %t212, null br i1 %t213, label %panic6442, label %ok6443 panic6442: call void @finch_panic(ptr @.str.4106, i64 3490, ptr @.str.4107) unreachable ok6443: %t214 = getelementptr inbounds %S.gen.Val, ptr %t212, i32 0, i32 1 %t215 = load %S.ast.Type, ptr %t214 %t216 = call i1 @finch.gen.isFloat(%S.ast.Type %t215) br label %logic.from6444 logic.from6444: br i1 %t216, label %logic.rhs6445, label %logic.end6446 logic.rhs6445: %t217 = load ptr, ptr %a3 %t218 = icmp eq ptr %t217, null br i1 %t218, label %panic6447, label %ok6448 panic6447: call void @finch_panic(ptr @.str.4108, i64 3490, ptr @.str.4109) unreachable ok6448: %t219 = getelementptr inbounds %S.gen.Val, ptr %t217, i32 0, i32 1 %t220 = load %S.ast.Type, ptr %t219 %t221 = call i1 @finch.gen.isInt(%S.ast.Type %t220) br label %logic.rend6449 logic.rend6449: br label %logic.end6446 logic.end6446: %t222 = phi i1 [ false, %logic.from6444 ], [ %t221, %logic.rend6449 ] br i1 %t222, label %then6450, label %endif6452 then6450: %t223 = load ptr, ptr %a1 %t224 = load ptr, ptr %a3 %t225 = icmp eq ptr %t224, null br i1 %t225, label %panic6453, label %ok6454 panic6453: call void @finch_panic(ptr @.str.4110, i64 3491, ptr @.str.4111) unreachable ok6454: %t226 = load %S.gen.Val, ptr %t224 %t227 = load ptr, ptr %a2 %t228 = icmp eq ptr %t227, null br i1 %t228, label %panic6455, label %ok6456 panic6455: call void @finch_panic(ptr @.str.4112, i64 3491, ptr @.str.4113) unreachable ok6456: %t229 = getelementptr inbounds %S.gen.Val, ptr %t227, i32 0, i32 1 %t230 = load %S.ast.Type, ptr %t229 %t231 = call %S.ast.Node @finch.gen.Node0() %t232 = call %S.gen.Val @finch.gen.coerce(ptr %t223, %S.gen.Val %t226, %S.ast.Type %t230, %S.ast.Node %t231, { ptr, i64, i64 } { ptr @.str.4114, i64 0, i64 0 }) store %S.ast.Node %t231, ptr %a233 call void @finch.drop.S_ast_Node(ptr %a233) %t234 = load ptr, ptr %a3 %t235 = icmp eq ptr %t234, null br i1 %t235, label %panic6457, label %ok6458 panic6457: call void @finch_panic(ptr @.str.4115, i64 3491, ptr @.str.4116) unreachable ok6458: %t236 = load %S.gen.Val, ptr %t234 store %S.gen.Val %t232, ptr %t234 store %S.gen.Val %t236, ptr %a237 call void @finch.drop.S_gen_Val(ptr %a237) ret i1 true endif6452: %t238 = load ptr, ptr %a2 %t239 = icmp eq ptr %t238, null br i1 %t239, label %panic6459, label %ok6460 panic6459: call void @finch_panic(ptr @.str.4117, i64 3494, ptr @.str.4118) unreachable ok6460: %t240 = getelementptr inbounds %S.gen.Val, ptr %t238, i32 0, i32 1 %t241 = load %S.ast.Type, ptr %t240 %t242 = call i1 @finch.gen.isFloat(%S.ast.Type %t241) br label %logic.from6461 logic.from6461: br i1 %t242, label %logic.rhs6462, label %logic.end6463 logic.rhs6462: %t243 = load ptr, ptr %a3 %t244 = icmp eq ptr %t243, null br i1 %t244, label %panic6464, label %ok6465 panic6464: call void @finch_panic(ptr @.str.4119, i64 3494, ptr @.str.4120) unreachable ok6465: %t245 = getelementptr inbounds %S.gen.Val, ptr %t243, i32 0, i32 1 %t246 = load %S.ast.Type, ptr %t245 %t247 = call i1 @finch.gen.isFloat(%S.ast.Type %t246) br label %logic.rend6466 logic.rend6466: br label %logic.end6463 logic.end6463: %t248 = phi i1 [ false, %logic.from6461 ], [ %t247, %logic.rend6466 ] br i1 %t248, label %then6467, label %endif6469 then6467: %t249 = load ptr, ptr %a2 %t250 = icmp eq ptr %t249, null br i1 %t250, label %panic6470, label %ok6471 panic6470: call void @finch_panic(ptr @.str.4121, i64 3495, ptr @.str.4122) unreachable ok6471: %t251 = getelementptr inbounds %S.gen.Val, ptr %t249, i32 0, i32 1 %t252 = getelementptr inbounds %S.ast.Type, ptr %t251, i32 0, i32 0 %t253 = load { ptr, i64, i64 }, ptr %t252 store { ptr, i64, i64 } %t253, ptr %a254 store { ptr, i64, i64 } { ptr @.str.4123, i64 3, i64 0 }, ptr %a255 %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) %t257 = icmp ne i32 %t256, 0 br i1 %t257, label %then6472, label %endif6474 then6472: %t258 = load ptr, ptr %a1 %t259 = load ptr, ptr %a2 %t260 = icmp eq ptr %t259, null br i1 %t260, label %panic6475, label %ok6476 panic6475: call void @finch_panic(ptr @.str.4124, i64 3496, ptr @.str.4125) unreachable ok6476: %t261 = getelementptr inbounds %S.gen.Val, ptr %t259, i32 0, i32 0 %t262 = load { ptr, i64, i64 }, ptr %t261 %t263 = load ptr, ptr %a2 %t264 = icmp eq ptr %t263, null br i1 %t264, label %panic6477, label %ok6478 panic6477: call void @finch_panic(ptr @.str.4126, i64 3496, ptr @.str.4127) unreachable ok6478: %t265 = getelementptr inbounds %S.gen.Val, ptr %t263, i32 0, i32 1 %t266 = load %S.ast.Type, ptr %t265 %t267 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4128, i64 5, i64 0 }) %t268 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t258, { ptr, i64, i64 } %t262, %S.ast.Type %t266, %S.ast.Type %t267) store %S.ast.Type %t267, ptr %a269 call void @finch.drop.S_ast_Type(ptr %a269) %t270 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t268, 0 %t271 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4129, i64 5, i64 0 }) %t272 = insertvalue %S.gen.Val %t270, %S.ast.Type %t271, 1 %t273 = load ptr, ptr %a2 %t274 = icmp eq ptr %t273, null br i1 %t274, label %panic6479, label %ok6480 panic6479: call void @finch_panic(ptr @.str.4130, i64 3496, ptr @.str.4131) unreachable ok6480: %t275 = load %S.gen.Val, ptr %t273 store %S.gen.Val %t272, ptr %t273 store %S.gen.Val %t275, ptr %a276 call void @finch.drop.S_gen_Val(ptr %a276) br label %endif6474 endif6474: %t277 = load ptr, ptr %a3 %t278 = icmp eq ptr %t277, null br i1 %t278, label %panic6481, label %ok6482 panic6481: call void @finch_panic(ptr @.str.4132, i64 3498, ptr @.str.4133) unreachable ok6482: %t279 = getelementptr inbounds %S.gen.Val, ptr %t277, i32 0, i32 1 %t280 = getelementptr inbounds %S.ast.Type, ptr %t279, i32 0, i32 0 %t281 = load { ptr, i64, i64 }, ptr %t280 store { ptr, i64, i64 } %t281, ptr %a282 store { ptr, i64, i64 } { ptr @.str.4134, i64 3, i64 0 }, ptr %a283 %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) %t285 = icmp ne i32 %t284, 0 br i1 %t285, label %then6483, label %endif6485 then6483: %t286 = load ptr, ptr %a1 %t287 = load ptr, ptr %a3 %t288 = icmp eq ptr %t287, null br i1 %t288, label %panic6486, label %ok6487 panic6486: call void @finch_panic(ptr @.str.4135, i64 3499, ptr @.str.4136) unreachable ok6487: %t289 = getelementptr inbounds %S.gen.Val, ptr %t287, i32 0, i32 0 %t290 = load { ptr, i64, i64 }, ptr %t289 %t291 = load ptr, ptr %a3 %t292 = icmp eq ptr %t291, null br i1 %t292, label %panic6488, label %ok6489 panic6488: call void @finch_panic(ptr @.str.4137, i64 3499, ptr @.str.4138) unreachable ok6489: %t293 = getelementptr inbounds %S.gen.Val, ptr %t291, i32 0, i32 1 %t294 = load %S.ast.Type, ptr %t293 %t295 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4139, i64 5, i64 0 }) %t296 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t286, { ptr, i64, i64 } %t290, %S.ast.Type %t294, %S.ast.Type %t295) store %S.ast.Type %t295, ptr %a297 call void @finch.drop.S_ast_Type(ptr %a297) %t298 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t296, 0 %t299 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4140, i64 5, i64 0 }) %t300 = insertvalue %S.gen.Val %t298, %S.ast.Type %t299, 1 %t301 = load ptr, ptr %a3 %t302 = icmp eq ptr %t301, null br i1 %t302, label %panic6490, label %ok6491 panic6490: call void @finch_panic(ptr @.str.4141, i64 3499, ptr @.str.4142) unreachable ok6491: %t303 = load %S.gen.Val, ptr %t301 store %S.gen.Val %t300, ptr %t301 store %S.gen.Val %t303, ptr %a304 call void @finch.drop.S_gen_Val(ptr %a304) br label %endif6485 endif6485: ret i1 true endif6469: ret i1 false } define internal %S.ast.Node @finch.gen.Node0() { entry: ret %S.ast.Node zeroinitializer } define internal %S.gen.Val @finch.gen.arith(ptr %p0, { ptr, i64, i64 } %p1, %S.gen.Val %p2, %S.gen.Val %p3, %S.ast.Node %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.gen.Val, align 16 %a4 = alloca %S.gen.Val, align 16 %a6 = alloca %S.gen.Val, align 16 %a7 = alloca %S.gen.Val, align 16 %a8 = alloca %S.gen.Val, align 16 %a10 = alloca %S.gen.Val, align 16 %a11 = alloca %S.ast.Node, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca i64, align 16 %a155 = alloca i64, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca i64, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca %S.ast.Type, align 16 %a280 = alloca %S.ast.Type, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca i64, align 16 %a313 = alloca i64, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca i64, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a355 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a369 = alloca { ptr, i64, i64 }, align 16 %a373 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca %S.ast.Type, align 16 %a384 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.gen.Val %p2, ptr %a3 call void @finch.copy.S_gen_Val(ptr %a4, ptr %a3) %t5 = load %S.gen.Val, ptr %a4 store %S.gen.Val %t5, ptr %a6 store %S.gen.Val %p3, ptr %a7 call void @finch.copy.S_gen_Val(ptr %a8, ptr %a7) %t9 = load %S.gen.Val, ptr %a8 store %S.gen.Val %t9, ptr %a10 store %S.ast.Node %p4, ptr %a11 %t12 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.4143, i64 1, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 br label %logic.from6492 logic.from6492: br i1 %t16, label %logic.rhs6493, label %logic.end6494 logic.rhs6493: %t17 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t18 = getelementptr inbounds %S.ast.Type, ptr %t17, i32 0, i32 0 %t19 = load { ptr, i64, i64 }, ptr %t18 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.4144, i64 3, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 br label %logic.rend6495 logic.rend6495: br label %logic.end6494 logic.end6494: %t24 = phi i1 [ false, %logic.from6492 ], [ %t23, %logic.rend6495 ] br label %logic.from6496 logic.from6496: br i1 %t24, label %logic.rhs6497, label %logic.end6498 logic.rhs6497: %t25 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t26 = getelementptr inbounds %S.ast.Type, ptr %t25, i32 0, i32 0 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.4145, i64 3, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 br label %logic.rend6499 logic.rend6499: br label %logic.end6498 logic.end6498: %t32 = phi i1 [ false, %logic.from6496 ], [ %t31, %logic.rend6499 ] br i1 %t32, label %then6500, label %endif6502 then6500: %t33 = load ptr, ptr %a1 %t34 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t33, { ptr, i64, i64 } { ptr @.str.4146, i64 17, i64 0 }) store { ptr, i64, i64 } %t34, ptr %a35 %t36 = load ptr, ptr %a1 %t37 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } { ptr @.str.4147, i64 32, i64 0 }, ptr %a39 store { ptr, i64, i64 } %t37, ptr %a40 call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) %t41 = load { ptr, i64, i64 }, ptr %a38 store { ptr, i64, i64 } %t41, ptr %a43 store { ptr, i64, i64 } { ptr @.str.4148, i64 6, i64 0 }, ptr %a44 call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) store { ptr, i64, i64 } %t41, ptr %a45 call void @finch_str_drop(ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a42 %t47 = load ptr, ptr %a1 %t48 = load %S.gen.Val, ptr %a6 %t49 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t47, %S.gen.Val %t48) store { ptr, i64, i64 } %t46, ptr %a51 store { ptr, i64, i64 } %t49, ptr %a52 call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) store { ptr, i64, i64 } %t46, ptr %a53 call void @finch_str_drop(ptr %a53) store { ptr, i64, i64 } %t49, ptr %a54 call void @finch_str_drop(ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } %t55, ptr %a57 store { ptr, i64, i64 } { ptr @.str.4149, i64 6, i64 0 }, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) store { ptr, i64, i64 } %t55, ptr %a59 call void @finch_str_drop(ptr %a59) %t60 = load { ptr, i64, i64 }, ptr %a56 %t61 = load ptr, ptr %a1 %t62 = load %S.gen.Val, ptr %a10 %t63 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t61, %S.gen.Val %t62) store { ptr, i64, i64 } %t60, ptr %a65 store { ptr, i64, i64 } %t63, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) store { ptr, i64, i64 } %t60, ptr %a67 call void @finch_str_drop(ptr %a67) store { ptr, i64, i64 } %t63, ptr %a68 call void @finch_str_drop(ptr %a68) %t69 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } %t69, ptr %a71 store { ptr, i64, i64 } { ptr @.str.4150, i64 1, i64 0 }, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) store { ptr, i64, i64 } %t69, ptr %a73 call void @finch_str_drop(ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a70 call void @finch.gen.emit(ptr %t36, { ptr, i64, i64 } %t74) store { ptr, i64, i64 } %t74, ptr %a75 call void @finch_str_drop(ptr %a75) %t76 = load ptr, ptr %a1 %t77 = load %S.gen.Val, ptr %a6 call void @finch.gen.release(ptr %t76, %S.gen.Val %t77) %t78 = load ptr, ptr %a1 %t79 = load %S.gen.Val, ptr %a10 call void @finch.gen.release(ptr %t78, %S.gen.Val %t79) %t80 = load ptr, ptr %a1 %t81 = load { ptr, i64, i64 }, ptr %a35 %t82 = call { ptr, i64, i64 } @finch.gen.load(ptr %t80, { ptr, i64, i64 } { ptr @.str.4151, i64 17, i64 0 }, { ptr, i64, i64 } %t81) %t83 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t82, 0 %t84 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4152, i64 3, i64 0 }) %t85 = insertvalue %S.gen.Val %t83, %S.ast.Type %t84, 1 %t86 = insertvalue %S.gen.Val %t85, i1 true, 2 call void @finch_str_drop(ptr %a35) call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t86 endif6502: %t87 = load ptr, ptr %a1 %t88 = call i1 @finch.gen.unify(ptr %t87, ptr %a6, ptr %a10) %t89 = xor i1 %t88, true br i1 %t89, label %then6503, label %endif6505 then6503: %t90 = load ptr, ptr %a1 %t91 = load { ptr, i64, i64 }, ptr %a2 %t92 = load %S.gen.Val, ptr %a6 %t93 = load %S.gen.Val, ptr %a10 %t94 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t90, { ptr, i64, i64 } %t91, %S.gen.Val %t92, %S.gen.Val %t93, %S.ast.Node %t94) br label %endif6505 endif6505: %t95 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t96 = load %S.ast.Type, ptr %t95 %t97 = call i1 @finch.gen.isInt(%S.ast.Type %t96) br i1 %t97, label %then6506, label %endif6508 then6506: %t98 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t99 = call ptr @finch_alloc(i64 %t98) %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 0 store { ptr, i64, i64 } { ptr @.str.4153, i64 1, i64 0 }, ptr %t100 %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 1 store { ptr, i64, i64 } { ptr @.str.4154, i64 1, i64 0 }, ptr %t101 %t102 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 2 store { ptr, i64, i64 } { ptr @.str.4155, i64 1, i64 0 }, ptr %t102 %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 3 store { ptr, i64, i64 } { ptr @.str.4156, i64 1, i64 0 }, ptr %t103 %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 4 store { ptr, i64, i64 } { ptr @.str.4157, i64 1, i64 0 }, ptr %t104 %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 5 store { ptr, i64, i64 } { ptr @.str.4158, i64 1, i64 0 }, ptr %t105 %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 6 store { ptr, i64, i64 } { ptr @.str.4159, i64 1, i64 0 }, ptr %t106 %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 7 store { ptr, i64, i64 } { ptr @.str.4160, i64 1, i64 0 }, ptr %t107 %t108 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 8 store { ptr, i64, i64 } { ptr @.str.4161, i64 2, i64 0 }, ptr %t108 %t109 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 9 store { ptr, i64, i64 } { ptr @.str.4162, i64 2, i64 0 }, ptr %t109 %t110 = insertvalue { ptr, i64, i64 } undef, ptr %t99, 0 %t111 = insertvalue { ptr, i64, i64 } %t110, i64 10, 1 %t112 = insertvalue { ptr, i64, i64 } %t111, i64 10, 2 store { ptr, i64, i64 } %t112, ptr %a113 %t114 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t115 = call ptr @finch_alloc(i64 %t114) %t116 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 0 store { ptr, i64, i64 } { ptr @.str.4163, i64 3, i64 0 }, ptr %t116 %t117 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 1 store { ptr, i64, i64 } { ptr @.str.4164, i64 3, i64 0 }, ptr %t117 %t118 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 2 store { ptr, i64, i64 } { ptr @.str.4165, i64 3, i64 0 }, ptr %t118 %t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 3 store { ptr, i64, i64 } { ptr @.str.4166, i64 4, i64 0 }, ptr %t119 %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 4 store { ptr, i64, i64 } { ptr @.str.4167, i64 4, i64 0 }, ptr %t120 %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 5 store { ptr, i64, i64 } { ptr @.str.4168, i64 3, i64 0 }, ptr %t121 %t122 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 6 store { ptr, i64, i64 } { ptr @.str.4169, i64 2, i64 0 }, ptr %t122 %t123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 7 store { ptr, i64, i64 } { ptr @.str.4170, i64 3, i64 0 }, ptr %t123 %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 8 store { ptr, i64, i64 } { ptr @.str.4171, i64 3, i64 0 }, ptr %t124 %t125 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 9 store { ptr, i64, i64 } { ptr @.str.4172, i64 4, i64 0 }, ptr %t125 %t126 = insertvalue { ptr, i64, i64 } undef, ptr %t115, 0 %t127 = insertvalue { ptr, i64, i64 } %t126, i64 10, 1 %t128 = insertvalue { ptr, i64, i64 } %t127, i64 10, 2 store { ptr, i64, i64 } %t128, ptr %a129 %t130 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t131 = load %S.ast.Type, ptr %t130 %t132 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t131) br i1 %t132, label %then6509, label %endif6511 then6509: %t133 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t134 = call ptr @finch_alloc(i64 %t133) %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 0 store { ptr, i64, i64 } { ptr @.str.4173, i64 3, i64 0 }, ptr %t135 %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 1 store { ptr, i64, i64 } { ptr @.str.4174, i64 3, i64 0 }, ptr %t136 %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 2 store { ptr, i64, i64 } { ptr @.str.4175, i64 3, i64 0 }, ptr %t137 %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 3 store { ptr, i64, i64 } { ptr @.str.4176, i64 4, i64 0 }, ptr %t138 %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 4 store { ptr, i64, i64 } { ptr @.str.4177, i64 4, i64 0 }, ptr %t139 %t140 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 5 store { ptr, i64, i64 } { ptr @.str.4178, i64 3, i64 0 }, ptr %t140 %t141 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 6 store { ptr, i64, i64 } { ptr @.str.4179, i64 2, i64 0 }, ptr %t141 %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 7 store { ptr, i64, i64 } { ptr @.str.4180, i64 3, i64 0 }, ptr %t142 %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 8 store { ptr, i64, i64 } { ptr @.str.4181, i64 3, i64 0 }, ptr %t143 %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 9 store { ptr, i64, i64 } { ptr @.str.4182, i64 4, i64 0 }, ptr %t144 %t145 = insertvalue { ptr, i64, i64 } undef, ptr %t134, 0 %t146 = insertvalue { ptr, i64, i64 } %t145, i64 10, 1 %t147 = insertvalue { ptr, i64, i64 } %t146, i64 10, 2 %t148 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t147, ptr %a129 store { ptr, i64, i64 } %t148, ptr %a149 call void @finch.drop.arr_str(ptr %a149) br label %endif6511 endif6511: %t150 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 %t151 = load { ptr, i64, i64 }, ptr %a2 store i64 -1, ptr %a152 %t153 = load i64, ptr %t150 %t154 = load ptr, ptr %a113 store i64 0, ptr %a155 br label %find.cond6512 find.cond6512: %t156 = load i64, ptr %a155 %t157 = icmp slt i64 %t156, %t153 br i1 %t157, label %find.body6513, label %find.end6516 find.body6513: %t158 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i64 %t156 %t159 = load { ptr, i64, i64 }, ptr %t158 store { ptr, i64, i64 } %t159, ptr %a160 store { ptr, i64, i64 } %t151, ptr %a161 %t162 = call i32 @finch_str_eq(ptr %a160, ptr %a161) %t163 = icmp ne i32 %t162, 0 br i1 %t163, label %find.hit6514, label %find.next6515 find.hit6514: store i64 %t156, ptr %a152 br label %find.end6516 find.next6515: %t164 = add i64 %t156, 1 store i64 %t164, ptr %a155 br label %find.cond6512 find.end6516: %t165 = load i64, ptr %a152 store i64 %t165, ptr %a166 %t167 = load i64, ptr %a166 %t168 = icmp slt i64 %t167, 0 br i1 %t168, label %then6517, label %endif6519 then6517: %t169 = load ptr, ptr %a1 %t170 = load { ptr, i64, i64 }, ptr %a2 %t171 = load %S.gen.Val, ptr %a6 %t172 = load %S.gen.Val, ptr %a10 %t173 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t169, { ptr, i64, i64 } %t170, %S.gen.Val %t171, %S.gen.Val %t172, %S.ast.Node %t173) br label %endif6519 endif6519: %t174 = load ptr, ptr %a1 %t175 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t176 = load %S.ast.Type, ptr %t175 %t177 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t174, %S.ast.Type %t176) store { ptr, i64, i64 } %t177, ptr %a178 %t179 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t179, ptr %a180 store { ptr, i64, i64 } { ptr @.str.4183, i64 1, i64 0 }, ptr %a181 %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) %t183 = icmp ne i32 %t182, 0 br label %logic.from6520 logic.from6520: br i1 %t183, label %logic.end6522, label %logic.rhs6521 logic.rhs6521: %t184 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t184, ptr %a185 store { ptr, i64, i64 } { ptr @.str.4184, i64 1, i64 0 }, ptr %a186 %t187 = call i32 @finch_str_eq(ptr %a185, ptr %a186) %t188 = icmp ne i32 %t187, 0 br label %logic.rend6523 logic.rend6523: br label %logic.end6522 logic.end6522: %t189 = phi i1 [ true, %logic.from6520 ], [ %t188, %logic.rend6523 ] br i1 %t189, label %then6524, label %endif6526 then6524: %t190 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 3 %t191 = load i1, ptr %t190 br label %logic.from6527 logic.from6527: br i1 %t191, label %logic.rhs6528, label %logic.end6529 logic.rhs6528: %t192 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t193 = load { ptr, i64, i64 }, ptr %t192 store { ptr, i64, i64 } %t193, ptr %a194 store { ptr, i64, i64 } { ptr @.str.4185, i64 1, i64 0 }, ptr %a195 %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) %t197 = icmp ne i32 %t196, 0 br label %logic.rend6530 logic.rend6530: br label %logic.end6529 logic.end6529: %t198 = phi i1 [ false, %logic.from6527 ], [ %t197, %logic.rend6530 ] br i1 %t198, label %then6531, label %endif6533 then6531: %t199 = load ptr, ptr %a1 %t200 = load %S.ast.Node, ptr %a11 call void @finch.gen.fail(ptr %t199, %S.ast.Node %t200, { ptr, i64, i64 } { ptr @.str.4186, i64 16, i64 0 }) br label %endif6533 endif6533: %t201 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 3 %t202 = load i1, ptr %t201 %t203 = xor i1 %t202, true br i1 %t203, label %then6534, label %endif6536 then6534: %t204 = load ptr, ptr %a1 %t205 = load ptr, ptr %a1 %t206 = load { ptr, i64, i64 }, ptr %a178 store { ptr, i64, i64 } { ptr @.str.4187, i64 8, i64 0 }, ptr %a208 store { ptr, i64, i64 } %t206, ptr %a209 call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) %t210 = load { ptr, i64, i64 }, ptr %a207 store { ptr, i64, i64 } %t210, ptr %a212 store { ptr, i64, i64 } { ptr @.str.4188, i64 1, i64 0 }, ptr %a213 call void @finch_str_concat(ptr %a211, ptr %a212, ptr %a213) store { ptr, i64, i64 } %t210, ptr %a214 call void @finch_str_drop(ptr %a214) %t215 = load { ptr, i64, i64 }, ptr %a211 %t216 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t217 = load { ptr, i64, i64 }, ptr %t216 store { ptr, i64, i64 } %t215, ptr %a219 store { ptr, i64, i64 } %t217, ptr %a220 call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) store { ptr, i64, i64 } %t215, ptr %a221 call void @finch_str_drop(ptr %a221) %t222 = load { ptr, i64, i64 }, ptr %a218 store { ptr, i64, i64 } %t222, ptr %a224 store { ptr, i64, i64 } { ptr @.str.4189, i64 3, i64 0 }, ptr %a225 call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) store { ptr, i64, i64 } %t222, ptr %a226 call void @finch_str_drop(ptr %a226) %t227 = load { ptr, i64, i64 }, ptr %a223 %t228 = call { ptr, i64, i64 } @finch.gen.op(ptr %t205, { ptr, i64, i64 } %t227) store { ptr, i64, i64 } %t227, ptr %a229 call void @finch_str_drop(ptr %a229) %t230 = load %S.ast.Node, ptr %a11 call void @finch.gen.panicIf(ptr %t204, { ptr, i64, i64 } %t228, { ptr, i64, i64 } { ptr @.str.4190, i64 16, i64 0 }, %S.ast.Node %t230) store { ptr, i64, i64 } %t228, ptr %a231 call void @finch_str_drop(ptr %a231) br label %endif6536 endif6536: br label %endif6526 endif6526: %t232 = load ptr, ptr %a1 %t233 = load i64, ptr %a166 %t234 = load { ptr, i64, i64 }, ptr %a129 %t235 = extractvalue { ptr, i64, i64 } %t234, 1 %t236 = icmp uge i64 %t233, %t235 br i1 %t236, label %range6537, label %inrange6538 range6537: call void @finch_panic_index(ptr @.str.4191, i64 3540, i64 %t233, i64 %t235) unreachable inrange6538: %t237 = extractvalue { ptr, i64, i64 } %t234, 0 %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 %t233 %t239 = load { ptr, i64, i64 }, ptr %t238 store { ptr, i64, i64 } %t239, ptr %a241 store { ptr, i64, i64 } { ptr @.str.4192, i64 1, i64 0 }, ptr %a242 call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) %t243 = load { ptr, i64, i64 }, ptr %a240 %t244 = load { ptr, i64, i64 }, ptr %a178 store { ptr, i64, i64 } %t243, ptr %a246 store { ptr, i64, i64 } %t244, ptr %a247 call void @finch_str_concat(ptr %a245, ptr %a246, ptr %a247) store { ptr, i64, i64 } %t243, ptr %a248 call void @finch_str_drop(ptr %a248) %t249 = load { ptr, i64, i64 }, ptr %a245 store { ptr, i64, i64 } %t249, ptr %a251 store { ptr, i64, i64 } { ptr @.str.4193, i64 1, i64 0 }, ptr %a252 call void @finch_str_concat(ptr %a250, ptr %a251, ptr %a252) store { ptr, i64, i64 } %t249, ptr %a253 call void @finch_str_drop(ptr %a253) %t254 = load { ptr, i64, i64 }, ptr %a250 %t255 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 %t256 = load { ptr, i64, i64 }, ptr %t255 store { ptr, i64, i64 } %t254, ptr %a258 store { ptr, i64, i64 } %t256, ptr %a259 call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) store { ptr, i64, i64 } %t254, ptr %a260 call void @finch_str_drop(ptr %a260) %t261 = load { ptr, i64, i64 }, ptr %a257 store { ptr, i64, i64 } %t261, ptr %a263 store { ptr, i64, i64 } { ptr @.str.4194, i64 2, i64 0 }, ptr %a264 call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) store { ptr, i64, i64 } %t261, ptr %a265 call void @finch_str_drop(ptr %a265) %t266 = load { ptr, i64, i64 }, ptr %a262 %t267 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t268 = load { ptr, i64, i64 }, ptr %t267 store { ptr, i64, i64 } %t266, ptr %a270 store { ptr, i64, i64 } %t268, ptr %a271 call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) store { ptr, i64, i64 } %t266, ptr %a272 call void @finch_str_drop(ptr %a272) %t273 = load { ptr, i64, i64 }, ptr %a269 %t274 = call { ptr, i64, i64 } @finch.gen.op(ptr %t232, { ptr, i64, i64 } %t273) store { ptr, i64, i64 } %t273, ptr %a275 call void @finch_str_drop(ptr %a275) %t276 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t274, 0 %t277 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t278 = load %S.ast.Type, ptr %t277 store %S.ast.Type %t278, ptr %a279 call void @finch.copy.S_ast_Type(ptr %a280, ptr %a279) %t281 = load %S.ast.Type, ptr %a280 %t282 = insertvalue %S.gen.Val %t276, %S.ast.Type %t281, 1 call void @finch_str_drop(ptr %a178) call void @finch.drop.arr_str(ptr %a129) call void @finch.drop.arr_str(ptr %a113) call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t282 endif6508: %t283 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t284 = load %S.ast.Type, ptr %t283 %t285 = call i1 @finch.gen.isFloat(%S.ast.Type %t284) br i1 %t285, label %then6539, label %endif6541 then6539: %t286 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t287 = call ptr @finch_alloc(i64 %t286) %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 0 store { ptr, i64, i64 } { ptr @.str.4195, i64 1, i64 0 }, ptr %t288 %t289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 1 store { ptr, i64, i64 } { ptr @.str.4196, i64 1, i64 0 }, ptr %t289 %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 2 store { ptr, i64, i64 } { ptr @.str.4197, i64 1, i64 0 }, ptr %t290 %t291 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 3 store { ptr, i64, i64 } { ptr @.str.4198, i64 1, i64 0 }, ptr %t291 %t292 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 4 store { ptr, i64, i64 } { ptr @.str.4199, i64 1, i64 0 }, ptr %t292 %t293 = insertvalue { ptr, i64, i64 } undef, ptr %t287, 0 %t294 = insertvalue { ptr, i64, i64 } %t293, i64 5, 1 %t295 = insertvalue { ptr, i64, i64 } %t294, i64 5, 2 store { ptr, i64, i64 } %t295, ptr %a296 %t297 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t298 = call ptr @finch_alloc(i64 %t297) %t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 0 store { ptr, i64, i64 } { ptr @.str.4200, i64 4, i64 0 }, ptr %t299 %t300 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 1 store { ptr, i64, i64 } { ptr @.str.4201, i64 4, i64 0 }, ptr %t300 %t301 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 2 store { ptr, i64, i64 } { ptr @.str.4202, i64 4, i64 0 }, ptr %t301 %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 3 store { ptr, i64, i64 } { ptr @.str.4203, i64 4, i64 0 }, ptr %t302 %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 4 store { ptr, i64, i64 } { ptr @.str.4204, i64 4, i64 0 }, ptr %t303 %t304 = insertvalue { ptr, i64, i64 } undef, ptr %t298, 0 %t305 = insertvalue { ptr, i64, i64 } %t304, i64 5, 1 %t306 = insertvalue { ptr, i64, i64 } %t305, i64 5, 2 store { ptr, i64, i64 } %t306, ptr %a307 %t308 = getelementptr inbounds { ptr, i64, i64 }, ptr %a296, i32 0, i32 1 %t309 = load { ptr, i64, i64 }, ptr %a2 store i64 -1, ptr %a310 %t311 = load i64, ptr %t308 %t312 = load ptr, ptr %a296 store i64 0, ptr %a313 br label %find.cond6542 find.cond6542: %t314 = load i64, ptr %a313 %t315 = icmp slt i64 %t314, %t311 br i1 %t315, label %find.body6543, label %find.end6546 find.body6543: %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t312, i64 %t314 %t317 = load { ptr, i64, i64 }, ptr %t316 store { ptr, i64, i64 } %t317, ptr %a318 store { ptr, i64, i64 } %t309, ptr %a319 %t320 = call i32 @finch_str_eq(ptr %a318, ptr %a319) %t321 = icmp ne i32 %t320, 0 br i1 %t321, label %find.hit6544, label %find.next6545 find.hit6544: store i64 %t314, ptr %a310 br label %find.end6546 find.next6545: %t322 = add i64 %t314, 1 store i64 %t322, ptr %a313 br label %find.cond6542 find.end6546: %t323 = load i64, ptr %a310 store i64 %t323, ptr %a324 %t325 = load i64, ptr %a324 %t326 = icmp slt i64 %t325, 0 br i1 %t326, label %then6547, label %endif6549 then6547: %t327 = load ptr, ptr %a1 %t328 = load { ptr, i64, i64 }, ptr %a2 %t329 = load %S.gen.Val, ptr %a6 %t330 = load %S.gen.Val, ptr %a10 %t331 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t327, { ptr, i64, i64 } %t328, %S.gen.Val %t329, %S.gen.Val %t330, %S.ast.Node %t331) br label %endif6549 endif6549: %t332 = load ptr, ptr %a1 %t333 = load i64, ptr %a324 %t334 = load { ptr, i64, i64 }, ptr %a307 %t335 = extractvalue { ptr, i64, i64 } %t334, 1 %t336 = icmp uge i64 %t333, %t335 br i1 %t336, label %range6550, label %inrange6551 range6550: call void @finch_panic_index(ptr @.str.4205, i64 3549, i64 %t333, i64 %t335) unreachable inrange6551: %t337 = extractvalue { ptr, i64, i64 } %t334, 0 %t338 = getelementptr inbounds { ptr, i64, i64 }, ptr %t337, i64 %t333 %t339 = load { ptr, i64, i64 }, ptr %t338 store { ptr, i64, i64 } %t339, ptr %a341 store { ptr, i64, i64 } { ptr @.str.4206, i64 1, i64 0 }, ptr %a342 call void @finch_str_concat(ptr %a340, ptr %a341, ptr %a342) %t343 = load { ptr, i64, i64 }, ptr %a340 %t344 = load ptr, ptr %a1 %t345 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t346 = load %S.ast.Type, ptr %t345 %t347 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t344, %S.ast.Type %t346) store { ptr, i64, i64 } %t343, ptr %a349 store { ptr, i64, i64 } %t347, ptr %a350 call void @finch_str_concat(ptr %a348, ptr %a349, ptr %a350) store { ptr, i64, i64 } %t343, ptr %a351 call void @finch_str_drop(ptr %a351) store { ptr, i64, i64 } %t347, ptr %a352 call void @finch_str_drop(ptr %a352) %t353 = load { ptr, i64, i64 }, ptr %a348 store { ptr, i64, i64 } %t353, ptr %a355 store { ptr, i64, i64 } { ptr @.str.4207, i64 1, i64 0 }, ptr %a356 call void @finch_str_concat(ptr %a354, ptr %a355, ptr %a356) store { ptr, i64, i64 } %t353, ptr %a357 call void @finch_str_drop(ptr %a357) %t358 = load { ptr, i64, i64 }, ptr %a354 %t359 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 %t360 = load { ptr, i64, i64 }, ptr %t359 store { ptr, i64, i64 } %t358, ptr %a362 store { ptr, i64, i64 } %t360, ptr %a363 call void @finch_str_concat(ptr %a361, ptr %a362, ptr %a363) store { ptr, i64, i64 } %t358, ptr %a364 call void @finch_str_drop(ptr %a364) %t365 = load { ptr, i64, i64 }, ptr %a361 store { ptr, i64, i64 } %t365, ptr %a367 store { ptr, i64, i64 } { ptr @.str.4208, i64 2, i64 0 }, ptr %a368 call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) store { ptr, i64, i64 } %t365, ptr %a369 call void @finch_str_drop(ptr %a369) %t370 = load { ptr, i64, i64 }, ptr %a366 %t371 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t372 = load { ptr, i64, i64 }, ptr %t371 store { ptr, i64, i64 } %t370, ptr %a374 store { ptr, i64, i64 } %t372, ptr %a375 call void @finch_str_concat(ptr %a373, ptr %a374, ptr %a375) store { ptr, i64, i64 } %t370, ptr %a376 call void @finch_str_drop(ptr %a376) %t377 = load { ptr, i64, i64 }, ptr %a373 %t378 = call { ptr, i64, i64 } @finch.gen.op(ptr %t332, { ptr, i64, i64 } %t377) store { ptr, i64, i64 } %t377, ptr %a379 call void @finch_str_drop(ptr %a379) %t380 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t378, 0 %t381 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t382 = load %S.ast.Type, ptr %t381 store %S.ast.Type %t382, ptr %a383 call void @finch.copy.S_ast_Type(ptr %a384, ptr %a383) %t385 = load %S.ast.Type, ptr %a384 %t386 = insertvalue %S.gen.Val %t380, %S.ast.Type %t385, 1 call void @finch.drop.arr_str(ptr %a307) call void @finch.drop.arr_str(ptr %a296) call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t386 endif6541: %t387 = load ptr, ptr %a1 %t388 = load { ptr, i64, i64 }, ptr %a2 %t389 = load %S.gen.Val, ptr %a6 %t390 = load %S.gen.Val, ptr %a10 %t391 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t387, { ptr, i64, i64 } %t388, %S.gen.Val %t389, %S.gen.Val %t390, %S.ast.Node %t391) %t392 = load %S.gen.Val, ptr %a6 call void @finch.drop.S_gen_Val(ptr %a10) ret %S.gen.Val %t392 } define internal %S.gen.Val @finch.gen.compare(ptr %p0, { ptr, i64, i64 } %p1, %S.gen.Val %p2, %S.gen.Val %p3, %S.ast.Node %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.gen.Val, align 16 %a4 = alloca %S.gen.Val, align 16 %a6 = alloca %S.gen.Val, align 16 %a7 = alloca %S.gen.Val, align 16 %a8 = alloca %S.gen.Val, align 16 %a10 = alloca %S.gen.Val, align 16 %a11 = alloca %S.ast.Node, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca i1, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca i64, align 16 %a330 = alloca i64, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a369 = alloca { ptr, i64, i64 }, align 16 %a373 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a406 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a411 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a415 = alloca { ptr, i64, i64 }, align 16 %a416 = alloca { ptr, i64, i64 }, align 16 %a418 = alloca { ptr, i64, i64 }, align 16 %a419 = alloca { ptr, i64, i64 }, align 16 %a420 = alloca { ptr, i64, i64 }, align 16 %a421 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a432 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 %a438 = alloca { ptr, i64, i64 }, align 16 %a439 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca { ptr, i64, i64 }, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 %a465 = alloca { ptr, i64, i64 }, align 16 %a466 = alloca { ptr, i64, i64 }, align 16 %a471 = alloca { ptr, i64, i64 }, align 16 %a472 = alloca { ptr, i64, i64 }, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a488 = alloca { ptr, i64, i64 }, align 16 %a489 = alloca { ptr, i64, i64 }, align 16 %a490 = alloca { ptr, i64, i64 }, align 16 %a492 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a494 = alloca { ptr, i64, i64 }, align 16 %a495 = alloca { ptr, i64, i64 }, align 16 %a501 = alloca { ptr, i64, i64 }, align 16 %a502 = alloca { ptr, i64, i64 }, align 16 %a503 = alloca { ptr, i64, i64 }, align 16 %a504 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a508 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca { ptr, i64, i64 }, align 16 %a514 = alloca { ptr, i64, i64 }, align 16 %a515 = alloca { ptr, i64, i64 }, align 16 %a516 = alloca { ptr, i64, i64 }, align 16 %a517 = alloca { ptr, i64, i64 }, align 16 %a519 = alloca { ptr, i64, i64 }, align 16 %a520 = alloca { ptr, i64, i64 }, align 16 %a521 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca { ptr, i64, i64 }, align 16 %a526 = alloca { ptr, i64, i64 }, align 16 %a527 = alloca { ptr, i64, i64 }, align 16 %a528 = alloca { ptr, i64, i64 }, align 16 %a529 = alloca { ptr, i64, i64 }, align 16 %a532 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.gen.Val %p2, ptr %a3 call void @finch.copy.S_gen_Val(ptr %a4, ptr %a3) %t5 = load %S.gen.Val, ptr %a4 store %S.gen.Val %t5, ptr %a6 store %S.gen.Val %p3, ptr %a7 call void @finch.copy.S_gen_Val(ptr %a8, ptr %a7) %t9 = load %S.gen.Val, ptr %a8 store %S.gen.Val %t9, ptr %a10 store %S.ast.Node %p4, ptr %a11 %t12 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.4209, i64 2, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 br label %logic.from6552 logic.from6552: br i1 %t16, label %logic.end6554, label %logic.rhs6553 logic.rhs6553: %t17 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t17, ptr %a18 store { ptr, i64, i64 } { ptr @.str.4210, i64 2, i64 0 }, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp ne i32 %t20, 0 br label %logic.rend6555 logic.rend6555: br label %logic.end6554 logic.end6554: %t22 = phi i1 [ true, %logic.from6552 ], [ %t21, %logic.rend6555 ] store i1 %t22, ptr %a23 %t24 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t25 = getelementptr inbounds %S.ast.Type, ptr %t24, i32 0, i32 0 %t26 = load { ptr, i64, i64 }, ptr %t25 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.4211, i64 3, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 br label %logic.from6556 logic.from6556: br i1 %t30, label %logic.end6558, label %logic.rhs6557 logic.rhs6557: %t31 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i32 0, i32 0 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } { ptr @.str.4212, i64 3, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 br label %logic.rend6559 logic.rend6559: br label %logic.end6558 logic.end6558: %t38 = phi i1 [ true, %logic.from6556 ], [ %t37, %logic.rend6559 ] br label %logic.from6560 logic.from6560: br i1 %t38, label %logic.end6562, label %logic.rhs6561 logic.rhs6561: %t39 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t40 = getelementptr inbounds %S.ast.Type, ptr %t39, i32 0, i32 0 %t41 = load { ptr, i64, i64 }, ptr %t40 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.4213, i64 4, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 br label %logic.rend6563 logic.rend6563: br label %logic.end6562 logic.end6562: %t46 = phi i1 [ true, %logic.from6560 ], [ %t45, %logic.rend6563 ] br label %logic.from6564 logic.from6564: br i1 %t46, label %logic.end6566, label %logic.rhs6565 logic.rhs6565: %t47 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t48 = getelementptr inbounds %S.ast.Type, ptr %t47, i32 0, i32 0 %t49 = load { ptr, i64, i64 }, ptr %t48 store { ptr, i64, i64 } %t49, ptr %a50 store { ptr, i64, i64 } { ptr @.str.4214, i64 4, i64 0 }, ptr %a51 %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) %t53 = icmp ne i32 %t52, 0 br label %logic.rend6567 logic.rend6567: br label %logic.end6566 logic.end6566: %t54 = phi i1 [ true, %logic.from6564 ], [ %t53, %logic.rend6567 ] br i1 %t54, label %then6568, label %endif6570 then6568: %t55 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t56 = getelementptr inbounds %S.ast.Type, ptr %t55, i32 0, i32 0 %t57 = load { ptr, i64, i64 }, ptr %t56 store { ptr, i64, i64 } %t57, ptr %a58 store { ptr, i64, i64 } { ptr @.str.4215, i64 3, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 br label %logic.from6571 logic.from6571: br i1 %t61, label %logic.end6573, label %logic.rhs6572 logic.rhs6572: %t62 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t63 = getelementptr inbounds %S.ast.Type, ptr %t62, i32 0, i32 0 %t64 = load { ptr, i64, i64 }, ptr %t63 store { ptr, i64, i64 } %t64, ptr %a65 store { ptr, i64, i64 } { ptr @.str.4216, i64 3, i64 0 }, ptr %a66 %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) %t68 = icmp ne i32 %t67, 0 br label %logic.rend6574 logic.rend6574: br label %logic.end6573 logic.end6573: %t69 = phi i1 [ true, %logic.from6571 ], [ %t68, %logic.rend6574 ] br i1 %t69, label %then6575, label %endif6577 then6575: %t70 = load ptr, ptr %a1 %t71 = load %S.ast.Node, ptr %a11 call void @finch.gen.fail(ptr %t70, %S.ast.Node %t71, { ptr, i64, i64 } { ptr @.str.4217, i64 59, i64 0 }) br label %endif6577 endif6577: %t72 = load i1, ptr %a23 %t73 = xor i1 %t72, true br i1 %t73, label %then6578, label %endif6580 then6578: %t74 = load ptr, ptr %a1 %t75 = load { ptr, i64, i64 }, ptr %a2 %t76 = load %S.gen.Val, ptr %a6 %t77 = load %S.gen.Val, ptr %a10 %t78 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t74, { ptr, i64, i64 } %t75, %S.gen.Val %t76, %S.gen.Val %t77, %S.ast.Node %t78) br label %endif6580 endif6580: store { ptr, i64, i64 } { ptr @.str.4218, i64 2, i64 0 }, ptr %a79 %t80 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t80, ptr %a81 store { ptr, i64, i64 } { ptr @.str.4219, i64 2, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp ne i32 %t83, 0 br i1 %t84, label %then6581, label %endif6583 then6581: %t85 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } { ptr @.str.4220, i64 2, i64 0 }, ptr %a79 store { ptr, i64, i64 } %t85, ptr %a86 call void @finch_str_drop(ptr %a86) br label %endif6583 endif6583: %t87 = load ptr, ptr %a1 %t88 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } { ptr @.str.4221, i64 5, i64 0 }, ptr %a90 store { ptr, i64, i64 } %t88, ptr %a91 call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) %t92 = load { ptr, i64, i64 }, ptr %a89 store { ptr, i64, i64 } %t92, ptr %a94 store { ptr, i64, i64 } { ptr @.str.4222, i64 5, i64 0 }, ptr %a95 call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) store { ptr, i64, i64 } %t92, ptr %a96 call void @finch_str_drop(ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a93 %t98 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 %t99 = load { ptr, i64, i64 }, ptr %t98 store { ptr, i64, i64 } %t97, ptr %a101 store { ptr, i64, i64 } %t99, ptr %a102 call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) store { ptr, i64, i64 } %t97, ptr %a103 call void @finch_str_drop(ptr %a103) %t104 = load { ptr, i64, i64 }, ptr %a100 store { ptr, i64, i64 } %t104, ptr %a106 store { ptr, i64, i64 } { ptr @.str.4223, i64 2, i64 0 }, ptr %a107 call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) store { ptr, i64, i64 } %t104, ptr %a108 call void @finch_str_drop(ptr %a108) %t109 = load { ptr, i64, i64 }, ptr %a105 %t110 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t111 = load { ptr, i64, i64 }, ptr %t110 store { ptr, i64, i64 } %t109, ptr %a113 store { ptr, i64, i64 } %t111, ptr %a114 call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) store { ptr, i64, i64 } %t109, ptr %a115 call void @finch_str_drop(ptr %a115) %t116 = load { ptr, i64, i64 }, ptr %a112 %t117 = call { ptr, i64, i64 } @finch.gen.op(ptr %t87, { ptr, i64, i64 } %t116) store { ptr, i64, i64 } %t116, ptr %a118 call void @finch_str_drop(ptr %a118) %t119 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t117, 0 %t120 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4224, i64 4, i64 0 }) %t121 = insertvalue %S.gen.Val %t119, %S.ast.Type %t120, 1 call void @finch_str_drop(ptr %a79) call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t121 endif6570: %t122 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t123 = getelementptr inbounds %S.ast.Type, ptr %t122, i32 0, i32 0 %t124 = load { ptr, i64, i64 }, ptr %t123 store { ptr, i64, i64 } %t124, ptr %a125 store { ptr, i64, i64 } { ptr @.str.4225, i64 3, i64 0 }, ptr %a126 %t127 = call i32 @finch_str_eq(ptr %a125, ptr %a126) %t128 = icmp ne i32 %t127, 0 br label %logic.from6584 logic.from6584: br i1 %t128, label %logic.rhs6585, label %logic.end6586 logic.rhs6585: %t129 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t130 = getelementptr inbounds %S.ast.Type, ptr %t129, i32 0, i32 0 %t131 = load { ptr, i64, i64 }, ptr %t130 store { ptr, i64, i64 } %t131, ptr %a132 store { ptr, i64, i64 } { ptr @.str.4226, i64 3, i64 0 }, ptr %a133 %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) %t135 = icmp ne i32 %t134, 0 br label %logic.rend6587 logic.rend6587: br label %logic.end6586 logic.end6586: %t136 = phi i1 [ false, %logic.from6584 ], [ %t135, %logic.rend6587 ] br i1 %t136, label %then6588, label %endif6590 then6588: %t137 = load i1, ptr %a23 br i1 %t137, label %then6591, label %endif6593 then6591: %t138 = load ptr, ptr %a1 %t139 = load ptr, ptr %a1 %t140 = load %S.gen.Val, ptr %a6 %t141 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t139, %S.gen.Val %t140) store { ptr, i64, i64 } { ptr @.str.4227, i64 27, i64 0 }, ptr %a143 store { ptr, i64, i64 } %t141, ptr %a144 call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) store { ptr, i64, i64 } %t141, ptr %a145 call void @finch_str_drop(ptr %a145) %t146 = load { ptr, i64, i64 }, ptr %a142 store { ptr, i64, i64 } %t146, ptr %a148 store { ptr, i64, i64 } { ptr @.str.4228, i64 6, i64 0 }, ptr %a149 call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) store { ptr, i64, i64 } %t146, ptr %a150 call void @finch_str_drop(ptr %a150) %t151 = load { ptr, i64, i64 }, ptr %a147 %t152 = load ptr, ptr %a1 %t153 = load %S.gen.Val, ptr %a10 %t154 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t152, %S.gen.Val %t153) store { ptr, i64, i64 } %t151, ptr %a156 store { ptr, i64, i64 } %t154, ptr %a157 call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) store { ptr, i64, i64 } %t151, ptr %a158 call void @finch_str_drop(ptr %a158) store { ptr, i64, i64 } %t154, ptr %a159 call void @finch_str_drop(ptr %a159) %t160 = load { ptr, i64, i64 }, ptr %a155 store { ptr, i64, i64 } %t160, ptr %a162 store { ptr, i64, i64 } { ptr @.str.4229, i64 1, i64 0 }, ptr %a163 call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) store { ptr, i64, i64 } %t160, ptr %a164 call void @finch_str_drop(ptr %a164) %t165 = load { ptr, i64, i64 }, ptr %a161 %t166 = call { ptr, i64, i64 } @finch.gen.op(ptr %t138, { ptr, i64, i64 } %t165) store { ptr, i64, i64 } %t165, ptr %a167 call void @finch_str_drop(ptr %a167) store { ptr, i64, i64 } %t166, ptr %a168 store { ptr, i64, i64 } { ptr @.str.4230, i64 2, i64 0 }, ptr %a169 %t170 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t170, ptr %a171 store { ptr, i64, i64 } { ptr @.str.4231, i64 2, i64 0 }, ptr %a172 %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) %t174 = icmp ne i32 %t173, 0 br i1 %t174, label %then6594, label %endif6596 then6594: %t175 = load { ptr, i64, i64 }, ptr %a169 store { ptr, i64, i64 } { ptr @.str.4232, i64 2, i64 0 }, ptr %a169 store { ptr, i64, i64 } %t175, ptr %a176 call void @finch_str_drop(ptr %a176) br label %endif6596 endif6596: %t177 = load ptr, ptr %a1 %t178 = load { ptr, i64, i64 }, ptr %a169 store { ptr, i64, i64 } { ptr @.str.4233, i64 5, i64 0 }, ptr %a180 store { ptr, i64, i64 } %t178, ptr %a181 call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) %t182 = load { ptr, i64, i64 }, ptr %a179 store { ptr, i64, i64 } %t182, ptr %a184 store { ptr, i64, i64 } { ptr @.str.4234, i64 5, i64 0 }, ptr %a185 call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) store { ptr, i64, i64 } %t182, ptr %a186 call void @finch_str_drop(ptr %a186) %t187 = load { ptr, i64, i64 }, ptr %a183 %t188 = load { ptr, i64, i64 }, ptr %a168 store { ptr, i64, i64 } %t187, ptr %a190 store { ptr, i64, i64 } %t188, ptr %a191 call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) store { ptr, i64, i64 } %t187, ptr %a192 call void @finch_str_drop(ptr %a192) %t193 = load { ptr, i64, i64 }, ptr %a189 store { ptr, i64, i64 } %t193, ptr %a195 store { ptr, i64, i64 } { ptr @.str.4235, i64 3, i64 0 }, ptr %a196 call void @finch_str_concat(ptr %a194, ptr %a195, ptr %a196) store { ptr, i64, i64 } %t193, ptr %a197 call void @finch_str_drop(ptr %a197) %t198 = load { ptr, i64, i64 }, ptr %a194 %t199 = call { ptr, i64, i64 } @finch.gen.op(ptr %t177, { ptr, i64, i64 } %t198) store { ptr, i64, i64 } %t198, ptr %a200 call void @finch_str_drop(ptr %a200) store { ptr, i64, i64 } %t199, ptr %a201 %t202 = load ptr, ptr %a1 %t203 = load %S.gen.Val, ptr %a6 call void @finch.gen.release(ptr %t202, %S.gen.Val %t203) %t204 = load ptr, ptr %a1 %t205 = load %S.gen.Val, ptr %a10 call void @finch.gen.release(ptr %t204, %S.gen.Val %t205) %t206 = load { ptr, i64, i64 }, ptr %a201 store { ptr, i64, i64 } %t206, ptr %a207 call void @finch_str_copy(ptr %a208, ptr %a207) %t209 = load { ptr, i64, i64 }, ptr %a208 %t210 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t209, 0 %t211 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4236, i64 4, i64 0 }) %t212 = insertvalue %S.gen.Val %t210, %S.ast.Type %t211, 1 call void @finch_str_drop(ptr %a201) call void @finch_str_drop(ptr %a169) call void @finch_str_drop(ptr %a168) call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t212 endif6593: %t213 = load ptr, ptr %a1 %t214 = load ptr, ptr %a1 %t215 = load %S.gen.Val, ptr %a6 %t216 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t214, %S.gen.Val %t215) store { ptr, i64, i64 } { ptr @.str.4237, i64 28, i64 0 }, ptr %a218 store { ptr, i64, i64 } %t216, ptr %a219 call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) store { ptr, i64, i64 } %t216, ptr %a220 call void @finch_str_drop(ptr %a220) %t221 = load { ptr, i64, i64 }, ptr %a217 store { ptr, i64, i64 } %t221, ptr %a223 store { ptr, i64, i64 } { ptr @.str.4238, i64 6, i64 0 }, ptr %a224 call void @finch_str_concat(ptr %a222, ptr %a223, ptr %a224) store { ptr, i64, i64 } %t221, ptr %a225 call void @finch_str_drop(ptr %a225) %t226 = load { ptr, i64, i64 }, ptr %a222 %t227 = load ptr, ptr %a1 %t228 = load %S.gen.Val, ptr %a10 %t229 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t227, %S.gen.Val %t228) store { ptr, i64, i64 } %t226, ptr %a231 store { ptr, i64, i64 } %t229, ptr %a232 call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) store { ptr, i64, i64 } %t226, ptr %a233 call void @finch_str_drop(ptr %a233) store { ptr, i64, i64 } %t229, ptr %a234 call void @finch_str_drop(ptr %a234) %t235 = load { ptr, i64, i64 }, ptr %a230 store { ptr, i64, i64 } %t235, ptr %a237 store { ptr, i64, i64 } { ptr @.str.4239, i64 1, i64 0 }, ptr %a238 call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238) store { ptr, i64, i64 } %t235, ptr %a239 call void @finch_str_drop(ptr %a239) %t240 = load { ptr, i64, i64 }, ptr %a236 %t241 = call { ptr, i64, i64 } @finch.gen.op(ptr %t213, { ptr, i64, i64 } %t240) store { ptr, i64, i64 } %t240, ptr %a242 call void @finch_str_drop(ptr %a242) store { ptr, i64, i64 } %t241, ptr %a243 %t244 = load ptr, ptr %a1 %t245 = load { ptr, i64, i64 }, ptr %a2 %t246 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } %t245, i1 true) store { ptr, i64, i64 } { ptr @.str.4240, i64 5, i64 0 }, ptr %a248 store { ptr, i64, i64 } %t246, ptr %a249 call void @finch_str_concat(ptr %a247, ptr %a248, ptr %a249) store { ptr, i64, i64 } %t246, ptr %a250 call void @finch_str_drop(ptr %a250) %t251 = load { ptr, i64, i64 }, ptr %a247 store { ptr, i64, i64 } %t251, ptr %a253 store { ptr, i64, i64 } { ptr @.str.4241, i64 5, i64 0 }, ptr %a254 call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) store { ptr, i64, i64 } %t251, ptr %a255 call void @finch_str_drop(ptr %a255) %t256 = load { ptr, i64, i64 }, ptr %a252 %t257 = load { ptr, i64, i64 }, ptr %a243 store { ptr, i64, i64 } %t256, ptr %a259 store { ptr, i64, i64 } %t257, ptr %a260 call void @finch_str_concat(ptr %a258, ptr %a259, ptr %a260) store { ptr, i64, i64 } %t256, ptr %a261 call void @finch_str_drop(ptr %a261) %t262 = load { ptr, i64, i64 }, ptr %a258 store { ptr, i64, i64 } %t262, ptr %a264 store { ptr, i64, i64 } { ptr @.str.4242, i64 3, i64 0 }, ptr %a265 call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) store { ptr, i64, i64 } %t262, ptr %a266 call void @finch_str_drop(ptr %a266) %t267 = load { ptr, i64, i64 }, ptr %a263 %t268 = call { ptr, i64, i64 } @finch.gen.op(ptr %t244, { ptr, i64, i64 } %t267) store { ptr, i64, i64 } %t267, ptr %a269 call void @finch_str_drop(ptr %a269) store { ptr, i64, i64 } %t268, ptr %a270 %t271 = load ptr, ptr %a1 %t272 = load %S.gen.Val, ptr %a6 call void @finch.gen.release(ptr %t271, %S.gen.Val %t272) %t273 = load ptr, ptr %a1 %t274 = load %S.gen.Val, ptr %a10 call void @finch.gen.release(ptr %t273, %S.gen.Val %t274) %t275 = load { ptr, i64, i64 }, ptr %a270 store { ptr, i64, i64 } %t275, ptr %a276 call void @finch_str_copy(ptr %a277, ptr %a276) %t278 = load { ptr, i64, i64 }, ptr %a277 %t279 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t278, 0 %t280 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4243, i64 4, i64 0 }) %t281 = insertvalue %S.gen.Val %t279, %S.ast.Type %t280, 1 call void @finch_str_drop(ptr %a270) call void @finch_str_drop(ptr %a243) call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t281 endif6590: %t282 = load ptr, ptr %a1 %t283 = call i1 @finch.gen.unify(ptr %t282, ptr %a6, ptr %a10) %t284 = xor i1 %t283, true br i1 %t284, label %then6597, label %endif6599 then6597: %t285 = load ptr, ptr %a1 %t286 = load { ptr, i64, i64 }, ptr %a2 %t287 = load %S.gen.Val, ptr %a6 %t288 = load %S.gen.Val, ptr %a10 %t289 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t285, { ptr, i64, i64 } %t286, %S.gen.Val %t287, %S.gen.Val %t288, %S.ast.Node %t289) br label %endif6599 endif6599: %t290 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t291 = getelementptr inbounds %S.ast.Type, ptr %t290, i32 0, i32 0 %t292 = load { ptr, i64, i64 }, ptr %t291 store { ptr, i64, i64 } %t292, ptr %a293 call void @finch_str_copy(ptr %a294, ptr %a293) %t295 = load { ptr, i64, i64 }, ptr %a294 store { ptr, i64, i64 } %t295, ptr %a296 %t297 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t298 = load %S.ast.Type, ptr %t297 %t299 = call i1 @finch.gen.isFloat(%S.ast.Type %t298) br i1 %t299, label %then6600, label %endif6602 then6600: %t300 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t301 = call ptr @finch_alloc(i64 %t300) %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 0 store { ptr, i64, i64 } { ptr @.str.4244, i64 2, i64 0 }, ptr %t302 %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 1 store { ptr, i64, i64 } { ptr @.str.4245, i64 2, i64 0 }, ptr %t303 %t304 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 2 store { ptr, i64, i64 } { ptr @.str.4246, i64 1, i64 0 }, ptr %t304 %t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 3 store { ptr, i64, i64 } { ptr @.str.4247, i64 2, i64 0 }, ptr %t305 %t306 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 4 store { ptr, i64, i64 } { ptr @.str.4248, i64 1, i64 0 }, ptr %t306 %t307 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 5 store { ptr, i64, i64 } { ptr @.str.4249, i64 2, i64 0 }, ptr %t307 %t308 = insertvalue { ptr, i64, i64 } undef, ptr %t301, 0 %t309 = insertvalue { ptr, i64, i64 } %t308, i64 6, 1 %t310 = insertvalue { ptr, i64, i64 } %t309, i64 6, 2 store { ptr, i64, i64 } %t310, ptr %a311 %t312 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t313 = call ptr @finch_alloc(i64 %t312) %t314 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 0 store { ptr, i64, i64 } { ptr @.str.4250, i64 3, i64 0 }, ptr %t314 %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 1 store { ptr, i64, i64 } { ptr @.str.4251, i64 3, i64 0 }, ptr %t315 %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 2 store { ptr, i64, i64 } { ptr @.str.4252, i64 3, i64 0 }, ptr %t316 %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 3 store { ptr, i64, i64 } { ptr @.str.4253, i64 3, i64 0 }, ptr %t317 %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 4 store { ptr, i64, i64 } { ptr @.str.4254, i64 3, i64 0 }, ptr %t318 %t319 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 5 store { ptr, i64, i64 } { ptr @.str.4255, i64 3, i64 0 }, ptr %t319 %t320 = insertvalue { ptr, i64, i64 } undef, ptr %t313, 0 %t321 = insertvalue { ptr, i64, i64 } %t320, i64 6, 1 %t322 = insertvalue { ptr, i64, i64 } %t321, i64 6, 2 store { ptr, i64, i64 } %t322, ptr %a323 %t324 = load ptr, ptr %a1 %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %a311, i32 0, i32 1 %t326 = load { ptr, i64, i64 }, ptr %a2 store i64 -1, ptr %a327 %t328 = load i64, ptr %t325 %t329 = load ptr, ptr %a311 store i64 0, ptr %a330 br label %find.cond6603 find.cond6603: %t331 = load i64, ptr %a330 %t332 = icmp slt i64 %t331, %t328 br i1 %t332, label %find.body6604, label %find.end6607 find.body6604: %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %t329, i64 %t331 %t334 = load { ptr, i64, i64 }, ptr %t333 store { ptr, i64, i64 } %t334, ptr %a335 store { ptr, i64, i64 } %t326, ptr %a336 %t337 = call i32 @finch_str_eq(ptr %a335, ptr %a336) %t338 = icmp ne i32 %t337, 0 br i1 %t338, label %find.hit6605, label %find.next6606 find.hit6605: store i64 %t331, ptr %a327 br label %find.end6607 find.next6606: %t339 = add i64 %t331, 1 store i64 %t339, ptr %a330 br label %find.cond6603 find.end6607: %t340 = load i64, ptr %a327 %t341 = load { ptr, i64, i64 }, ptr %a323 %t342 = extractvalue { ptr, i64, i64 } %t341, 1 %t343 = icmp uge i64 %t340, %t342 br i1 %t343, label %range6608, label %inrange6609 range6608: call void @finch_panic_index(ptr @.str.4257, i64 3595, i64 %t340, i64 %t342) unreachable inrange6609: %t344 = extractvalue { ptr, i64, i64 } %t341, 0 %t345 = getelementptr inbounds { ptr, i64, i64 }, ptr %t344, i64 %t340 %t346 = load { ptr, i64, i64 }, ptr %t345 store { ptr, i64, i64 } { ptr @.str.4256, i64 5, i64 0 }, ptr %a348 store { ptr, i64, i64 } %t346, ptr %a349 call void @finch_str_concat(ptr %a347, ptr %a348, ptr %a349) %t350 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t350, ptr %a352 store { ptr, i64, i64 } { ptr @.str.4258, i64 1, i64 0 }, ptr %a353 call void @finch_str_concat(ptr %a351, ptr %a352, ptr %a353) store { ptr, i64, i64 } %t350, ptr %a354 call void @finch_str_drop(ptr %a354) %t355 = load { ptr, i64, i64 }, ptr %a351 %t356 = load ptr, ptr %a1 %t357 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t358 = load %S.ast.Type, ptr %t357 %t359 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t356, %S.ast.Type %t358) store { ptr, i64, i64 } %t355, ptr %a361 store { ptr, i64, i64 } %t359, ptr %a362 call void @finch_str_concat(ptr %a360, ptr %a361, ptr %a362) store { ptr, i64, i64 } %t355, ptr %a363 call void @finch_str_drop(ptr %a363) store { ptr, i64, i64 } %t359, ptr %a364 call void @finch_str_drop(ptr %a364) %t365 = load { ptr, i64, i64 }, ptr %a360 store { ptr, i64, i64 } %t365, ptr %a367 store { ptr, i64, i64 } { ptr @.str.4259, i64 1, i64 0 }, ptr %a368 call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) store { ptr, i64, i64 } %t365, ptr %a369 call void @finch_str_drop(ptr %a369) %t370 = load { ptr, i64, i64 }, ptr %a366 %t371 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 %t372 = load { ptr, i64, i64 }, ptr %t371 store { ptr, i64, i64 } %t370, ptr %a374 store { ptr, i64, i64 } %t372, ptr %a375 call void @finch_str_concat(ptr %a373, ptr %a374, ptr %a375) store { ptr, i64, i64 } %t370, ptr %a376 call void @finch_str_drop(ptr %a376) %t377 = load { ptr, i64, i64 }, ptr %a373 store { ptr, i64, i64 } %t377, ptr %a379 store { ptr, i64, i64 } { ptr @.str.4260, i64 2, i64 0 }, ptr %a380 call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380) store { ptr, i64, i64 } %t377, ptr %a381 call void @finch_str_drop(ptr %a381) %t382 = load { ptr, i64, i64 }, ptr %a378 %t383 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t384 = load { ptr, i64, i64 }, ptr %t383 store { ptr, i64, i64 } %t382, ptr %a386 store { ptr, i64, i64 } %t384, ptr %a387 call void @finch_str_concat(ptr %a385, ptr %a386, ptr %a387) store { ptr, i64, i64 } %t382, ptr %a388 call void @finch_str_drop(ptr %a388) %t389 = load { ptr, i64, i64 }, ptr %a385 %t390 = call { ptr, i64, i64 } @finch.gen.op(ptr %t324, { ptr, i64, i64 } %t389) store { ptr, i64, i64 } %t389, ptr %a391 call void @finch_str_drop(ptr %a391) %t392 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t390, 0 %t393 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4261, i64 4, i64 0 }) %t394 = insertvalue %S.gen.Val %t392, %S.ast.Type %t393, 1 call void @finch.drop.arr_str(ptr %a323) call void @finch.drop.arr_str(ptr %a311) call void @finch_str_drop(ptr %a296) call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t394 endif6602: %t395 = load { ptr, i64, i64 }, ptr %a296 store { ptr, i64, i64 } %t395, ptr %a396 store { ptr, i64, i64 } { ptr @.str.4262, i64 4, i64 0 }, ptr %a397 %t398 = call i32 @finch_str_eq(ptr %a396, ptr %a397) %t399 = icmp ne i32 %t398, 0 br i1 %t399, label %then6610, label %endif6612 then6610: %t400 = load i1, ptr %a23 %t401 = xor i1 %t400, true br i1 %t401, label %then6613, label %endif6615 then6613: %t402 = load ptr, ptr %a1 %t403 = load %S.ast.Node, ptr %a11 call void @finch.gen.fail(ptr %t402, %S.ast.Node %t403, { ptr, i64, i64 } { ptr @.str.4263, i64 115, i64 0 }) br label %endif6615 endif6615: store { ptr, i64, i64 } { ptr @.str.4264, i64 2, i64 0 }, ptr %a404 %t405 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t405, ptr %a406 store { ptr, i64, i64 } { ptr @.str.4265, i64 2, i64 0 }, ptr %a407 %t408 = call i32 @finch_str_eq(ptr %a406, ptr %a407) %t409 = icmp ne i32 %t408, 0 br i1 %t409, label %then6616, label %endif6618 then6616: %t410 = load { ptr, i64, i64 }, ptr %a404 store { ptr, i64, i64 } { ptr @.str.4266, i64 2, i64 0 }, ptr %a404 store { ptr, i64, i64 } %t410, ptr %a411 call void @finch_str_drop(ptr %a411) br label %endif6618 endif6618: %t412 = load ptr, ptr %a1 %t413 = load { ptr, i64, i64 }, ptr %a404 store { ptr, i64, i64 } { ptr @.str.4267, i64 5, i64 0 }, ptr %a415 store { ptr, i64, i64 } %t413, ptr %a416 call void @finch_str_concat(ptr %a414, ptr %a415, ptr %a416) %t417 = load { ptr, i64, i64 }, ptr %a414 store { ptr, i64, i64 } %t417, ptr %a419 store { ptr, i64, i64 } { ptr @.str.4268, i64 5, i64 0 }, ptr %a420 call void @finch_str_concat(ptr %a418, ptr %a419, ptr %a420) store { ptr, i64, i64 } %t417, ptr %a421 call void @finch_str_drop(ptr %a421) %t422 = load { ptr, i64, i64 }, ptr %a418 %t423 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 %t424 = load { ptr, i64, i64 }, ptr %t423 store { ptr, i64, i64 } %t422, ptr %a426 store { ptr, i64, i64 } %t424, ptr %a427 call void @finch_str_concat(ptr %a425, ptr %a426, ptr %a427) store { ptr, i64, i64 } %t422, ptr %a428 call void @finch_str_drop(ptr %a428) %t429 = load { ptr, i64, i64 }, ptr %a425 store { ptr, i64, i64 } %t429, ptr %a431 store { ptr, i64, i64 } { ptr @.str.4269, i64 2, i64 0 }, ptr %a432 call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) store { ptr, i64, i64 } %t429, ptr %a433 call void @finch_str_drop(ptr %a433) %t434 = load { ptr, i64, i64 }, ptr %a430 %t435 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t436 = load { ptr, i64, i64 }, ptr %t435 store { ptr, i64, i64 } %t434, ptr %a438 store { ptr, i64, i64 } %t436, ptr %a439 call void @finch_str_concat(ptr %a437, ptr %a438, ptr %a439) store { ptr, i64, i64 } %t434, ptr %a440 call void @finch_str_drop(ptr %a440) %t441 = load { ptr, i64, i64 }, ptr %a437 %t442 = call { ptr, i64, i64 } @finch.gen.op(ptr %t412, { ptr, i64, i64 } %t441) store { ptr, i64, i64 } %t441, ptr %a443 call void @finch_str_drop(ptr %a443) %t444 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t442, 0 %t445 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4270, i64 4, i64 0 }) %t446 = insertvalue %S.gen.Val %t444, %S.ast.Type %t445, 1 call void @finch_str_drop(ptr %a404) call void @finch_str_drop(ptr %a296) call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t446 endif6612: %t447 = load { ptr, i64, i64 }, ptr %a296 store { ptr, i64, i64 } %t447, ptr %a448 store { ptr, i64, i64 } { ptr @.str.4271, i64 4, i64 0 }, ptr %a449 %t450 = call i32 @finch_str_eq(ptr %a448, ptr %a449) %t451 = icmp ne i32 %t450, 0 br label %logic.from6619 logic.from6619: br i1 %t451, label %logic.rhs6620, label %logic.end6621 logic.rhs6620: %t452 = load i1, ptr %a23 %t453 = xor i1 %t452, true br label %logic.rend6622 logic.rend6622: br label %logic.end6621 logic.end6621: %t454 = phi i1 [ false, %logic.from6619 ], [ %t453, %logic.rend6622 ] br i1 %t454, label %then6623, label %endif6625 then6623: %t455 = load ptr, ptr %a1 %t456 = load { ptr, i64, i64 }, ptr %a2 %t457 = load %S.gen.Val, ptr %a6 %t458 = load %S.gen.Val, ptr %a10 %t459 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t455, { ptr, i64, i64 } %t456, %S.gen.Val %t457, %S.gen.Val %t458, %S.ast.Node %t459) br label %endif6625 endif6625: %t460 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t461 = load %S.ast.Type, ptr %t460 %t462 = call i1 @finch.gen.isInt(%S.ast.Type %t461) %t463 = xor i1 %t462, true br label %logic.from6626 logic.from6626: br i1 %t463, label %logic.rhs6627, label %logic.end6628 logic.rhs6627: %t464 = load { ptr, i64, i64 }, ptr %a296 store { ptr, i64, i64 } %t464, ptr %a465 store { ptr, i64, i64 } { ptr @.str.4272, i64 4, i64 0 }, ptr %a466 %t467 = call i32 @finch_str_eq(ptr %a465, ptr %a466) %t468 = icmp eq i32 %t467, 0 br label %logic.rend6629 logic.rend6629: br label %logic.end6628 logic.end6628: %t469 = phi i1 [ false, %logic.from6626 ], [ %t468, %logic.rend6629 ] br label %logic.from6630 logic.from6630: br i1 %t469, label %logic.rhs6631, label %logic.end6632 logic.rhs6631: %t470 = load { ptr, i64, i64 }, ptr %a296 store { ptr, i64, i64 } %t470, ptr %a471 store { ptr, i64, i64 } { ptr @.str.4273, i64 4, i64 0 }, ptr %a472 %t473 = call i32 @finch_str_eq(ptr %a471, ptr %a472) %t474 = icmp eq i32 %t473, 0 br label %logic.rend6633 logic.rend6633: br label %logic.end6632 logic.end6632: %t475 = phi i1 [ false, %logic.from6630 ], [ %t474, %logic.rend6633 ] br i1 %t475, label %then6634, label %endif6636 then6634: %t476 = load ptr, ptr %a1 %t477 = load { ptr, i64, i64 }, ptr %a2 %t478 = load %S.gen.Val, ptr %a6 %t479 = load %S.gen.Val, ptr %a10 %t480 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t476, { ptr, i64, i64 } %t477, %S.gen.Val %t478, %S.gen.Val %t479, %S.ast.Node %t480) br label %endif6636 endif6636: %t481 = load ptr, ptr %a1 %t482 = load { ptr, i64, i64 }, ptr %a2 %t483 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t484 = load %S.ast.Type, ptr %t483 %t485 = call i1 @finch.gen.isSigned(%S.ast.Type %t484) %t486 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } %t482, i1 %t485) store { ptr, i64, i64 } { ptr @.str.4274, i64 5, i64 0 }, ptr %a488 store { ptr, i64, i64 } %t486, ptr %a489 call void @finch_str_concat(ptr %a487, ptr %a488, ptr %a489) store { ptr, i64, i64 } %t486, ptr %a490 call void @finch_str_drop(ptr %a490) %t491 = load { ptr, i64, i64 }, ptr %a487 store { ptr, i64, i64 } %t491, ptr %a493 store { ptr, i64, i64 } { ptr @.str.4275, i64 1, i64 0 }, ptr %a494 call void @finch_str_concat(ptr %a492, ptr %a493, ptr %a494) store { ptr, i64, i64 } %t491, ptr %a495 call void @finch_str_drop(ptr %a495) %t496 = load { ptr, i64, i64 }, ptr %a492 %t497 = load ptr, ptr %a1 %t498 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t499 = load %S.ast.Type, ptr %t498 %t500 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t497, %S.ast.Type %t499) store { ptr, i64, i64 } %t496, ptr %a502 store { ptr, i64, i64 } %t500, ptr %a503 call void @finch_str_concat(ptr %a501, ptr %a502, ptr %a503) store { ptr, i64, i64 } %t496, ptr %a504 call void @finch_str_drop(ptr %a504) store { ptr, i64, i64 } %t500, ptr %a505 call void @finch_str_drop(ptr %a505) %t506 = load { ptr, i64, i64 }, ptr %a501 store { ptr, i64, i64 } %t506, ptr %a508 store { ptr, i64, i64 } { ptr @.str.4276, i64 1, i64 0 }, ptr %a509 call void @finch_str_concat(ptr %a507, ptr %a508, ptr %a509) store { ptr, i64, i64 } %t506, ptr %a510 call void @finch_str_drop(ptr %a510) %t511 = load { ptr, i64, i64 }, ptr %a507 %t512 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 %t513 = load { ptr, i64, i64 }, ptr %t512 store { ptr, i64, i64 } %t511, ptr %a515 store { ptr, i64, i64 } %t513, ptr %a516 call void @finch_str_concat(ptr %a514, ptr %a515, ptr %a516) store { ptr, i64, i64 } %t511, ptr %a517 call void @finch_str_drop(ptr %a517) %t518 = load { ptr, i64, i64 }, ptr %a514 store { ptr, i64, i64 } %t518, ptr %a520 store { ptr, i64, i64 } { ptr @.str.4277, i64 2, i64 0 }, ptr %a521 call void @finch_str_concat(ptr %a519, ptr %a520, ptr %a521) store { ptr, i64, i64 } %t518, ptr %a522 call void @finch_str_drop(ptr %a522) %t523 = load { ptr, i64, i64 }, ptr %a519 %t524 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t525 = load { ptr, i64, i64 }, ptr %t524 store { ptr, i64, i64 } %t523, ptr %a527 store { ptr, i64, i64 } %t525, ptr %a528 call void @finch_str_concat(ptr %a526, ptr %a527, ptr %a528) store { ptr, i64, i64 } %t523, ptr %a529 call void @finch_str_drop(ptr %a529) %t530 = load { ptr, i64, i64 }, ptr %a526 %t531 = call { ptr, i64, i64 } @finch.gen.op(ptr %t481, { ptr, i64, i64 } %t530) store { ptr, i64, i64 } %t530, ptr %a532 call void @finch_str_drop(ptr %a532) %t533 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t531, 0 %t534 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4278, i64 4, i64 0 }) %t535 = insertvalue %S.gen.Val %t533, %S.ast.Type %t534, 1 call void @finch_str_drop(ptr %a296) call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t535 } define internal { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } %p0, i1 %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca i1, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca i64, align 16 %a46 = alloca i64, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store i1 %p1, ptr %a2 %t3 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t4 = call ptr @finch_alloc(i64 %t3) %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 0 store { ptr, i64, i64 } { ptr @.str.4279, i64 2, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 1 store { ptr, i64, i64 } { ptr @.str.4280, i64 2, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 2 store { ptr, i64, i64 } { ptr @.str.4281, i64 1, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 3 store { ptr, i64, i64 } { ptr @.str.4282, i64 2, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 4 store { ptr, i64, i64 } { ptr @.str.4283, i64 1, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 5 store { ptr, i64, i64 } { ptr @.str.4284, i64 2, i64 0 }, ptr %t10 %t11 = insertvalue { ptr, i64, i64 } undef, ptr %t4, 0 %t12 = insertvalue { ptr, i64, i64 } %t11, i64 6, 1 %t13 = insertvalue { ptr, i64, i64 } %t12, i64 6, 2 store { ptr, i64, i64 } %t13, ptr %a14 %t15 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t16 = call ptr @finch_alloc(i64 %t15) %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 0 store { ptr, i64, i64 } { ptr @.str.4285, i64 2, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 1 store { ptr, i64, i64 } { ptr @.str.4286, i64 2, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 2 store { ptr, i64, i64 } { ptr @.str.4287, i64 3, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 3 store { ptr, i64, i64 } { ptr @.str.4288, i64 3, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 4 store { ptr, i64, i64 } { ptr @.str.4289, i64 3, i64 0 }, ptr %t21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 5 store { ptr, i64, i64 } { ptr @.str.4290, i64 3, i64 0 }, ptr %t22 %t23 = insertvalue { ptr, i64, i64 } undef, ptr %t16, 0 %t24 = insertvalue { ptr, i64, i64 } %t23, i64 6, 1 %t25 = insertvalue { ptr, i64, i64 } %t24, i64 6, 2 store { ptr, i64, i64 } %t25, ptr %a26 %t27 = load i1, ptr %a2 br i1 %t27, label %then6637, label %endif6639 then6637: %t28 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t29 = call ptr @finch_alloc(i64 %t28) %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 0 store { ptr, i64, i64 } { ptr @.str.4291, i64 2, i64 0 }, ptr %t30 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 1 store { ptr, i64, i64 } { ptr @.str.4292, i64 2, i64 0 }, ptr %t31 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 2 store { ptr, i64, i64 } { ptr @.str.4293, i64 3, i64 0 }, ptr %t32 %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 3 store { ptr, i64, i64 } { ptr @.str.4294, i64 3, i64 0 }, ptr %t33 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 4 store { ptr, i64, i64 } { ptr @.str.4295, i64 3, i64 0 }, ptr %t34 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 5 store { ptr, i64, i64 } { ptr @.str.4296, i64 3, i64 0 }, ptr %t35 %t36 = insertvalue { ptr, i64, i64 } undef, ptr %t29, 0 %t37 = insertvalue { ptr, i64, i64 } %t36, i64 6, 1 %t38 = insertvalue { ptr, i64, i64 } %t37, i64 6, 2 %t39 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t38, ptr %a26 store { ptr, i64, i64 } %t39, ptr %a40 call void @finch.drop.arr_str(ptr %a40) br label %endif6639 endif6639: %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t42 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a43 %t44 = load i64, ptr %t41 %t45 = load ptr, ptr %a14 store i64 0, ptr %a46 br label %find.cond6640 find.cond6640: %t47 = load i64, ptr %a46 %t48 = icmp slt i64 %t47, %t44 br i1 %t48, label %find.body6641, label %find.end6644 find.body6641: %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i64 %t47 %t50 = load { ptr, i64, i64 }, ptr %t49 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } %t42, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 br i1 %t54, label %find.hit6642, label %find.next6643 find.hit6642: store i64 %t47, ptr %a43 br label %find.end6644 find.next6643: %t55 = add i64 %t47, 1 store i64 %t55, ptr %a46 br label %find.cond6640 find.end6644: %t56 = load i64, ptr %a43 %t57 = load { ptr, i64, i64 }, ptr %a26 %t58 = extractvalue { ptr, i64, i64 } %t57, 1 %t59 = icmp uge i64 %t56, %t58 br i1 %t59, label %range6645, label %inrange6646 range6645: call void @finch_panic_index(ptr @.str.4297, i64 3622, i64 %t56, i64 %t58) unreachable inrange6646: %t60 = extractvalue { ptr, i64, i64 } %t57, 0 %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i64 %t56 %t62 = load { ptr, i64, i64 }, ptr %t61 store { ptr, i64, i64 } %t62, ptr %a63 call void @finch_str_copy(ptr %a64, ptr %a63) %t65 = load { ptr, i64, i64 }, ptr %a64 call void @finch.drop.arr_str(ptr %a26) call void @finch.drop.arr_str(ptr %a14) ret { ptr, i64, i64 } %t65 } define internal %S.gen.Val @finch.gen.binary(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca %S.gen.Val, align 16 %a151 = alloca i64, align 16 %a163 = alloca %S.gen.Val, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch_str_copy(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.4298, i64 2, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 br label %logic.from6647 logic.from6647: br i1 %t13, label %logic.end6649, label %logic.rhs6648 logic.rhs6648: %t14 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.4299, i64 2, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 br label %logic.rend6650 logic.rend6650: br label %logic.end6649 logic.end6649: %t19 = phi i1 [ true, %logic.from6647 ], [ %t18, %logic.rend6650 ] br i1 %t19, label %then6651, label %endif6653 then6651: %t20 = load ptr, ptr %a1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = extractvalue { ptr, i64, i64 } %t22, 1 %t24 = icmp uge i64 0, %t23 br i1 %t24, label %range6654, label %inrange6655 range6654: call void @finch_panic_index(ptr @.str.4300, i64 3628, i64 0, i64 %t23) unreachable inrange6655: %t25 = extractvalue { ptr, i64, i64 } %t22, 0 %t26 = getelementptr inbounds %S.ast.Node, ptr %t25, i64 0 %t27 = load %S.ast.Node, ptr %t26 %t28 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t20, %S.ast.Node %t27) store { ptr, i64, i64 } %t28, ptr %a29 %t30 = load ptr, ptr %a1 %t31 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t30, { ptr, i64, i64 } { ptr @.str.4301, i64 10, i64 0 }) store { ptr, i64, i64 } %t31, ptr %a32 %t33 = load ptr, ptr %a1 %t34 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t33, { ptr, i64, i64 } { ptr @.str.4302, i64 9, i64 0 }) store { ptr, i64, i64 } %t34, ptr %a35 %t36 = load ptr, ptr %a1 %t37 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t36, { ptr, i64, i64 } { ptr @.str.4303, i64 9, i64 0 }) store { ptr, i64, i64 } %t37, ptr %a38 %t39 = load ptr, ptr %a1 %t40 = load { ptr, i64, i64 }, ptr %a32 call void @finch.gen.br(ptr %t39, { ptr, i64, i64 } %t40) %t41 = load ptr, ptr %a1 %t42 = load { ptr, i64, i64 }, ptr %a32 call void @finch.gen.label(ptr %t41, { ptr, i64, i64 } %t42) %t43 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t43, ptr %a44 store { ptr, i64, i64 } { ptr @.str.4304, i64 2, i64 0 }, ptr %a45 %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) %t47 = icmp ne i32 %t46, 0 br i1 %t47, label %then6656, label %else6657 then6656: %t48 = load ptr, ptr %a1 %t49 = load { ptr, i64, i64 }, ptr %a29 %t50 = load { ptr, i64, i64 }, ptr %a35 %t51 = load { ptr, i64, i64 }, ptr %a38 call void @finch.gen.condBr(ptr %t48, { ptr, i64, i64 } %t49, { ptr, i64, i64 } %t50, { ptr, i64, i64 } %t51) br label %endif6658 else6657: %t52 = load ptr, ptr %a1 %t53 = load { ptr, i64, i64 }, ptr %a29 %t54 = load { ptr, i64, i64 }, ptr %a38 %t55 = load { ptr, i64, i64 }, ptr %a35 call void @finch.gen.condBr(ptr %t52, { ptr, i64, i64 } %t53, { ptr, i64, i64 } %t54, { ptr, i64, i64 } %t55) br label %endif6658 endif6658: %t56 = load ptr, ptr %a1 %t57 = load { ptr, i64, i64 }, ptr %a35 call void @finch.gen.label(ptr %t56, { ptr, i64, i64 } %t57) %t58 = load ptr, ptr %a1 %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t60 = load { ptr, i64, i64 }, ptr %t59 %t61 = extractvalue { ptr, i64, i64 } %t60, 1 %t62 = icmp uge i64 1, %t61 br i1 %t62, label %range6659, label %inrange6660 range6659: call void @finch_panic_index(ptr @.str.4305, i64 3640, i64 1, i64 %t61) unreachable inrange6660: %t63 = extractvalue { ptr, i64, i64 } %t60, 0 %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 1 %t65 = load %S.ast.Node, ptr %t64 %t66 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t58, %S.ast.Node %t65) store { ptr, i64, i64 } %t66, ptr %a67 %t68 = load ptr, ptr %a1 %t69 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t68, { ptr, i64, i64 } { ptr @.str.4306, i64 10, i64 0 }) store { ptr, i64, i64 } %t69, ptr %a70 %t71 = load ptr, ptr %a1 %t72 = load { ptr, i64, i64 }, ptr %a70 call void @finch.gen.br(ptr %t71, { ptr, i64, i64 } %t72) %t73 = load ptr, ptr %a1 %t74 = load { ptr, i64, i64 }, ptr %a70 call void @finch.gen.label(ptr %t73, { ptr, i64, i64 } %t74) %t75 = load ptr, ptr %a1 %t76 = load { ptr, i64, i64 }, ptr %a38 call void @finch.gen.br(ptr %t75, { ptr, i64, i64 } %t76) %t77 = load ptr, ptr %a1 %t78 = load { ptr, i64, i64 }, ptr %a38 call void @finch.gen.label(ptr %t77, { ptr, i64, i64 } %t78) store { ptr, i64, i64 } { ptr @.str.4307, i64 4, i64 0 }, ptr %a79 %t80 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t80, ptr %a81 store { ptr, i64, i64 } { ptr @.str.4308, i64 2, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp ne i32 %t83, 0 br i1 %t84, label %then6661, label %endif6663 then6661: %t85 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } { ptr @.str.4309, i64 5, i64 0 }, ptr %a79 store { ptr, i64, i64 } %t85, ptr %a86 call void @finch_str_drop(ptr %a86) br label %endif6663 endif6663: %t87 = load ptr, ptr %a1 %t88 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } { ptr @.str.4310, i64 9, i64 0 }, ptr %a90 store { ptr, i64, i64 } %t88, ptr %a91 call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) %t92 = load { ptr, i64, i64 }, ptr %a89 store { ptr, i64, i64 } %t92, ptr %a94 store { ptr, i64, i64 } { ptr @.str.4311, i64 3, i64 0 }, ptr %a95 call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) store { ptr, i64, i64 } %t92, ptr %a96 call void @finch_str_drop(ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a93 %t98 = load { ptr, i64, i64 }, ptr %a32 store { ptr, i64, i64 } %t97, ptr %a100 store { ptr, i64, i64 } %t98, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) store { ptr, i64, i64 } %t97, ptr %a102 call void @finch_str_drop(ptr %a102) %t103 = load { ptr, i64, i64 }, ptr %a99 store { ptr, i64, i64 } %t103, ptr %a105 store { ptr, i64, i64 } { ptr @.str.4312, i64 6, i64 0 }, ptr %a106 call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) store { ptr, i64, i64 } %t103, ptr %a107 call void @finch_str_drop(ptr %a107) %t108 = load { ptr, i64, i64 }, ptr %a104 %t109 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t108, ptr %a111 store { ptr, i64, i64 } %t109, ptr %a112 call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) store { ptr, i64, i64 } %t108, ptr %a113 call void @finch_str_drop(ptr %a113) %t114 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } %t114, ptr %a116 store { ptr, i64, i64 } { ptr @.str.4313, i64 3, i64 0 }, ptr %a117 call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) store { ptr, i64, i64 } %t114, ptr %a118 call void @finch_str_drop(ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a115 %t120 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } %t119, ptr %a122 store { ptr, i64, i64 } %t120, ptr %a123 call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) store { ptr, i64, i64 } %t119, ptr %a124 call void @finch_str_drop(ptr %a124) %t125 = load { ptr, i64, i64 }, ptr %a121 store { ptr, i64, i64 } %t125, ptr %a127 store { ptr, i64, i64 } { ptr @.str.4314, i64 2, i64 0 }, ptr %a128 call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) store { ptr, i64, i64 } %t125, ptr %a129 call void @finch_str_drop(ptr %a129) %t130 = load { ptr, i64, i64 }, ptr %a126 %t131 = call { ptr, i64, i64 } @finch.gen.op(ptr %t87, { ptr, i64, i64 } %t130) store { ptr, i64, i64 } %t130, ptr %a132 call void @finch_str_drop(ptr %a132) %t133 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t131, 0 %t134 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4315, i64 4, i64 0 }) %t135 = insertvalue %S.gen.Val %t133, %S.ast.Type %t134, 1 call void @finch_str_drop(ptr %a79) call void @finch_str_drop(ptr %a70) call void @finch_str_drop(ptr %a67) call void @finch_str_drop(ptr %a38) call void @finch_str_drop(ptr %a35) call void @finch_str_drop(ptr %a32) call void @finch_str_drop(ptr %a29) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t135 endif6653: %t136 = load ptr, ptr %a1 %t137 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t138 = load { ptr, i64, i64 }, ptr %t137 %t139 = extractvalue { ptr, i64, i64 } %t138, 1 %t140 = icmp uge i64 0, %t139 br i1 %t140, label %range6664, label %inrange6665 range6664: call void @finch_panic_index(ptr @.str.4316, i64 3652, i64 0, i64 %t139) unreachable inrange6665: %t141 = extractvalue { ptr, i64, i64 } %t138, 0 %t142 = getelementptr inbounds %S.ast.Node, ptr %t141, i64 0 %t143 = load %S.ast.Node, ptr %t142 %t144 = call %S.gen.Val @finch.gen.expr(ptr %t136, %S.ast.Node %t143) store %S.gen.Val %t144, ptr %a145 %t146 = load ptr, ptr %a1 %t147 = icmp eq ptr %t146, null br i1 %t147, label %panic6666, label %ok6667 panic6666: call void @finch_panic(ptr @.str.4317, i64 3653, ptr @.str.4318) unreachable ok6667: %t148 = getelementptr inbounds %S.gen.Gen, ptr %t146, i32 0, i32 11 %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %t148, i32 0, i32 1 %t150 = load i64, ptr %t149 store i64 %t150, ptr %a151 %t152 = load ptr, ptr %a1 %t153 = load %S.gen.Val, ptr %a145 call void @finch.gen.hold(ptr %t152, %S.gen.Val %t153) %t154 = load ptr, ptr %a1 %t155 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t156 = load { ptr, i64, i64 }, ptr %t155 %t157 = extractvalue { ptr, i64, i64 } %t156, 1 %t158 = icmp uge i64 1, %t157 br i1 %t158, label %range6668, label %inrange6669 range6668: call void @finch_panic_index(ptr @.str.4319, i64 3655, i64 1, i64 %t157) unreachable inrange6669: %t159 = extractvalue { ptr, i64, i64 } %t156, 0 %t160 = getelementptr inbounds %S.ast.Node, ptr %t159, i64 1 %t161 = load %S.ast.Node, ptr %t160 %t162 = call %S.gen.Val @finch.gen.expr(ptr %t154, %S.ast.Node %t161) store %S.gen.Val %t162, ptr %a163 %t164 = load ptr, ptr %a1 %t165 = load i64, ptr %a151 call void @finch.gen.heldEnd(ptr %t164, i64 %t165) %t166 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t166, ptr %a167 store { ptr, i64, i64 } { ptr @.str.4320, i64 2, i64 0 }, ptr %a168 %t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168) %t170 = icmp ne i32 %t169, 0 br label %logic.from6670 logic.from6670: br i1 %t170, label %logic.end6672, label %logic.rhs6671 logic.rhs6671: %t171 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t171, ptr %a172 store { ptr, i64, i64 } { ptr @.str.4321, i64 2, i64 0 }, ptr %a173 %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) %t175 = icmp ne i32 %t174, 0 br label %logic.rend6673 logic.rend6673: br label %logic.end6672 logic.end6672: %t176 = phi i1 [ true, %logic.from6670 ], [ %t175, %logic.rend6673 ] br label %logic.from6674 logic.from6674: br i1 %t176, label %logic.end6676, label %logic.rhs6675 logic.rhs6675: %t177 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t177, ptr %a178 store { ptr, i64, i64 } { ptr @.str.4322, i64 1, i64 0 }, ptr %a179 %t180 = call i32 @finch_str_eq(ptr %a178, ptr %a179) %t181 = icmp ne i32 %t180, 0 br label %logic.rend6677 logic.rend6677: br label %logic.end6676 logic.end6676: %t182 = phi i1 [ true, %logic.from6674 ], [ %t181, %logic.rend6677 ] br label %logic.from6678 logic.from6678: br i1 %t182, label %logic.end6680, label %logic.rhs6679 logic.rhs6679: %t183 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t183, ptr %a184 store { ptr, i64, i64 } { ptr @.str.4323, i64 2, i64 0 }, ptr %a185 %t186 = call i32 @finch_str_eq(ptr %a184, ptr %a185) %t187 = icmp ne i32 %t186, 0 br label %logic.rend6681 logic.rend6681: br label %logic.end6680 logic.end6680: %t188 = phi i1 [ true, %logic.from6678 ], [ %t187, %logic.rend6681 ] br label %logic.from6682 logic.from6682: br i1 %t188, label %logic.end6684, label %logic.rhs6683 logic.rhs6683: %t189 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t189, ptr %a190 store { ptr, i64, i64 } { ptr @.str.4324, i64 1, i64 0 }, ptr %a191 %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) %t193 = icmp ne i32 %t192, 0 br label %logic.rend6685 logic.rend6685: br label %logic.end6684 logic.end6684: %t194 = phi i1 [ true, %logic.from6682 ], [ %t193, %logic.rend6685 ] br label %logic.from6686 logic.from6686: br i1 %t194, label %logic.end6688, label %logic.rhs6687 logic.rhs6687: %t195 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t195, ptr %a196 store { ptr, i64, i64 } { ptr @.str.4325, i64 2, i64 0 }, ptr %a197 %t198 = call i32 @finch_str_eq(ptr %a196, ptr %a197) %t199 = icmp ne i32 %t198, 0 br label %logic.rend6689 logic.rend6689: br label %logic.end6688 logic.end6688: %t200 = phi i1 [ true, %logic.from6686 ], [ %t199, %logic.rend6689 ] br i1 %t200, label %then6690, label %endif6692 then6690: %t201 = load ptr, ptr %a1 %t202 = load { ptr, i64, i64 }, ptr %a8 %t203 = load %S.gen.Val, ptr %a145 %t204 = load %S.gen.Val, ptr %a163 %t205 = load %S.ast.Node, ptr %a2 %t206 = call %S.gen.Val @finch.gen.compare(ptr %t201, { ptr, i64, i64 } %t202, %S.gen.Val %t203, %S.gen.Val %t204, %S.ast.Node %t205) call void @finch.drop.S_gen_Val(ptr %a163) call void @finch.drop.S_gen_Val(ptr %a145) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t206 endif6692: %t207 = load ptr, ptr %a1 %t208 = load { ptr, i64, i64 }, ptr %a8 %t209 = load %S.gen.Val, ptr %a145 %t210 = load %S.gen.Val, ptr %a163 %t211 = load %S.ast.Node, ptr %a2 %t212 = call %S.gen.Val @finch.gen.arith(ptr %t207, { ptr, i64, i64 } %t208, %S.gen.Val %t209, %S.gen.Val %t210, %S.ast.Node %t211) call void @finch.drop.S_gen_Val(ptr %a163) call void @finch.drop.S_gen_Val(ptr %a145) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t212 } define internal %S.gen.Val @finch.gen.arrayLit(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.ast.Type, align 16 %a5 = alloca %S.ast.Type, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca %S.ast.Type, align 16 %a20 = alloca %S.ast.Type, align 16 %a23 = alloca %S.ast.Type, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca i64, align 16 %a38 = alloca i64, align 16 %a46 = alloca %S.ast.Node, align 16 %a47 = alloca %S.gen.Val, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca %S.gen.Val, align 16 %a61 = alloca %S.ast.Type, align 16 %a62 = alloca %S.ast.Type, align 16 %a65 = alloca %S.ast.Type, align 16 %a71 = alloca %S.gen.Val, align 16 %a78 = alloca %S.gen.Val, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca %S.ast.Type, align 16 %a103 = alloca %S.ast.Type, align 16 %a107 = alloca %S.gen.Val, align 16 %a114 = alloca %S.ast.Type, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca i64, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca %S.ast.Type, align 16 %a290 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 %t4 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4326, i64 4, i64 0 }) store %S.ast.Type %t4, ptr %a5 %t6 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t7 = load { ptr, i64, i64 }, ptr %t6 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.4327, i64 5, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 br i1 %t11, label %then6693, label %else6694 then6693: %t12 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t13 = load { ptr, i64, i64 }, ptr %t12 %t14 = extractvalue { ptr, i64, i64 } %t13, 1 %t15 = icmp uge i64 0, %t14 br i1 %t15, label %range6696, label %inrange6697 range6696: call void @finch_panic_index(ptr @.str.4328, i64 3666, i64 0, i64 %t14) unreachable inrange6697: %t16 = extractvalue { ptr, i64, i64 } %t13, 0 %t17 = getelementptr inbounds %S.ast.Type, ptr %t16, i64 0 %t18 = load %S.ast.Type, ptr %t17 store %S.ast.Type %t18, ptr %a19 call void @finch.copy.S_ast_Type(ptr %a20, ptr %a19) %t21 = load %S.ast.Type, ptr %a20 %t22 = load %S.ast.Type, ptr %a5 store %S.ast.Type %t21, ptr %a5 store %S.ast.Type %t22, ptr %a23 call void @finch.drop.S_ast_Type(ptr %a23) br label %endif6695 else6694: %t24 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i32 0, i32 1 %t26 = load i64, ptr %t25 %t27 = icmp eq i64 %t26, 0 br i1 %t27, label %then6698, label %endif6700 then6698: %t28 = load ptr, ptr %a1 %t29 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t28, %S.ast.Node %t29, { ptr, i64, i64 } { ptr @.str.4329, i64 47, i64 0 }) br label %endif6700 endif6700: br label %endif6695 endif6695: store { ptr, i64, i64 } zeroinitializer, ptr %a30 %t31 = load ptr, ptr %a1 %t32 = icmp eq ptr %t31, null br i1 %t32, label %panic6701, label %ok6702 panic6701: call void @finch_panic(ptr @.str.4330, i64 3671, ptr @.str.4331) unreachable ok6702: %t33 = getelementptr inbounds %S.gen.Gen, ptr %t31, i32 0, i32 11 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i32 0, i32 1 %t35 = load i64, ptr %t34 store i64 %t35, ptr %a36 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 store i64 0, ptr %a38 br label %each.cond6703 each.cond6703: %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i32 0, i32 1 %t40 = load i64, ptr %t39 %t41 = load i64, ptr %a38 %t42 = icmp slt i64 %t41, %t40 br i1 %t42, label %each.body6704, label %each.end6706 each.body6704: %t43 = load ptr, ptr %t37 %t44 = getelementptr inbounds %S.ast.Node, ptr %t43, i64 %t41 %t45 = load %S.ast.Node, ptr %t44 store %S.ast.Node %t45, ptr %a46 store %S.gen.Val zeroinitializer, ptr %a47 %t48 = getelementptr inbounds %S.ast.Type, ptr %a5, i32 0, i32 0 %t49 = load { ptr, i64, i64 }, ptr %t48 store { ptr, i64, i64 } %t49, ptr %a50 store { ptr, i64, i64 } { ptr @.str.4332, i64 4, i64 0 }, ptr %a51 %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) %t53 = icmp ne i32 %t52, 0 br i1 %t53, label %then6707, label %else6708 then6707: %t54 = load ptr, ptr %a1 %t55 = load %S.ast.Node, ptr %a46 %t56 = call %S.gen.Val @finch.gen.expr(ptr %t54, %S.ast.Node %t55) %t57 = load %S.gen.Val, ptr %a47 store %S.gen.Val %t56, ptr %a47 store %S.gen.Val %t57, ptr %a58 call void @finch.drop.S_gen_Val(ptr %a58) %t59 = getelementptr inbounds %S.gen.Val, ptr %a47, i32 0, i32 1 %t60 = load %S.ast.Type, ptr %t59 store %S.ast.Type %t60, ptr %a61 call void @finch.copy.S_ast_Type(ptr %a62, ptr %a61) %t63 = load %S.ast.Type, ptr %a62 %t64 = load %S.ast.Type, ptr %a5 store %S.ast.Type %t63, ptr %a5 store %S.ast.Type %t64, ptr %a65 call void @finch.drop.S_ast_Type(ptr %a65) br label %endif6709 else6708: %t66 = load ptr, ptr %a1 %t67 = load %S.ast.Node, ptr %a46 %t68 = load %S.ast.Type, ptr %a5 %t69 = call %S.gen.Val @finch.gen.exprWant(ptr %t66, %S.ast.Node %t67, %S.ast.Type %t68) %t70 = load %S.gen.Val, ptr %a47 store %S.gen.Val %t69, ptr %a47 store %S.gen.Val %t70, ptr %a71 call void @finch.drop.S_gen_Val(ptr %a71) br label %endif6709 endif6709: %t72 = load ptr, ptr %a1 %t73 = load %S.gen.Val, ptr %a47 %t74 = load %S.ast.Type, ptr %a5 %t75 = load %S.ast.Node, ptr %a46 %t76 = call %S.gen.Val @finch.gen.coerce(ptr %t72, %S.gen.Val %t73, %S.ast.Type %t74, %S.ast.Node %t75, { ptr, i64, i64 } { ptr @.str.4333, i64 27, i64 0 }) %t77 = load %S.gen.Val, ptr %a47 store %S.gen.Val %t76, ptr %a47 store %S.gen.Val %t77, ptr %a78 call void @finch.drop.S_gen_Val(ptr %a78) %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 %t80 = load ptr, ptr %a1 %t81 = load %S.gen.Val, ptr %a47 %t82 = call { ptr, i64, i64 } @finch.gen.own(ptr %t80, %S.gen.Val %t81) %t83 = load i64, ptr %t79 %t84 = add i64 %t83, 1 call void @finch_arr_reserve(ptr %a30, i64 %t84, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t85 = load ptr, ptr %a30 %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i64 %t83 store { ptr, i64, i64 } %t82, ptr %t86 store i64 %t84, ptr %t79 %t87 = load ptr, ptr %a1 %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 %t89 = load i64, ptr %t88 %t90 = sub i64 %t89, 1 %t91 = load { ptr, i64, i64 }, ptr %a30 %t92 = extractvalue { ptr, i64, i64 } %t91, 1 %t93 = icmp uge i64 %t90, %t92 br i1 %t93, label %range6710, label %inrange6711 range6710: call void @finch_panic_index(ptr @.str.4334, i64 3682, i64 %t90, i64 %t92) unreachable inrange6711: %t94 = extractvalue { ptr, i64, i64 } %t91, 0 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i64 %t90 %t96 = load { ptr, i64, i64 }, ptr %t95 store { ptr, i64, i64 } %t96, ptr %a97 call void @finch_str_copy(ptr %a98, ptr %a97) %t99 = load { ptr, i64, i64 }, ptr %a98 %t100 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t99, 0 %t101 = load %S.ast.Type, ptr %a5 store %S.ast.Type %t101, ptr %a102 call void @finch.copy.S_ast_Type(ptr %a103, ptr %a102) %t104 = load %S.ast.Type, ptr %a103 %t105 = insertvalue %S.gen.Val %t100, %S.ast.Type %t104, 1 %t106 = insertvalue %S.gen.Val %t105, i1 true, 2 call void @finch.gen.hold(ptr %t87, %S.gen.Val %t106) store %S.gen.Val %t106, ptr %a107 call void @finch.drop.S_gen_Val(ptr %a107) call void @finch.drop.S_gen_Val(ptr %a47) br label %each.step6705 each.step6705: %t108 = load i64, ptr %a38 %t109 = add i64 %t108, 1 store i64 %t109, ptr %a38 br label %each.cond6703 each.end6706: %t110 = load ptr, ptr %a1 %t111 = load i64, ptr %a36 call void @finch.gen.heldEnd(ptr %t110, i64 %t111) %t112 = load %S.ast.Type, ptr %a5 %t113 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t112) store %S.ast.Type %t113, ptr %a114 %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 %t116 = load i64, ptr %t115 call void @finch_str_from_int(ptr %a117, i64 %t116) %t118 = load { ptr, i64, i64 }, ptr %a117 store { ptr, i64, i64 } %t118, ptr %a119 store { ptr, i64, i64 } { ptr @.str.4335, i64 4, i64 0 }, ptr %a120 %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 %t122 = load i64, ptr %t121 %t123 = icmp sgt i64 %t122, 0 br i1 %t123, label %then6712, label %endif6714 then6712: %t124 = load ptr, ptr %a1 %t125 = load { ptr, i64, i64 }, ptr %a119 store { ptr, i64, i64 } { ptr @.str.4336, i64 8, i64 0 }, ptr %a127 store { ptr, i64, i64 } %t125, ptr %a128 call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) %t129 = load { ptr, i64, i64 }, ptr %a126 store { ptr, i64, i64 } %t129, ptr %a131 store { ptr, i64, i64 } { ptr @.str.4337, i64 2, i64 0 }, ptr %a132 call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) store { ptr, i64, i64 } %t129, ptr %a133 call void @finch_str_drop(ptr %a133) %t134 = load { ptr, i64, i64 }, ptr %a130 %t135 = load ptr, ptr %a1 %t136 = load %S.ast.Type, ptr %a5 %t137 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t135, %S.ast.Type %t136) store { ptr, i64, i64 } %t134, ptr %a139 store { ptr, i64, i64 } %t137, ptr %a140 call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) store { ptr, i64, i64 } %t134, ptr %a141 call void @finch_str_drop(ptr %a141) store { ptr, i64, i64 } %t137, ptr %a142 call void @finch_str_drop(ptr %a142) %t143 = load { ptr, i64, i64 }, ptr %a138 %t144 = call { ptr, i64, i64 } @finch.gen.op(ptr %t124, { ptr, i64, i64 } %t143) store { ptr, i64, i64 } %t143, ptr %a145 call void @finch_str_drop(ptr %a145) store { ptr, i64, i64 } %t144, ptr %a146 %t147 = load ptr, ptr %a1 %t148 = load { ptr, i64, i64 }, ptr %a146 store { ptr, i64, i64 } { ptr @.str.4338, i64 26, i64 0 }, ptr %a150 store { ptr, i64, i64 } %t148, ptr %a151 call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) %t152 = load { ptr, i64, i64 }, ptr %a149 store { ptr, i64, i64 } %t152, ptr %a154 store { ptr, i64, i64 } { ptr @.str.4339, i64 1, i64 0 }, ptr %a155 call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) store { ptr, i64, i64 } %t152, ptr %a156 call void @finch_str_drop(ptr %a156) %t157 = load { ptr, i64, i64 }, ptr %a153 %t158 = call { ptr, i64, i64 } @finch.gen.op(ptr %t147, { ptr, i64, i64 } %t157) store { ptr, i64, i64 } %t157, ptr %a159 call void @finch_str_drop(ptr %a159) %t160 = load { ptr, i64, i64 }, ptr %a120 store { ptr, i64, i64 } %t158, ptr %a120 store { ptr, i64, i64 } %t160, ptr %a161 call void @finch_str_drop(ptr %a161) call void @finch_str_drop(ptr %a146) br label %endif6714 endif6714: %t162 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 %t163 = load i64, ptr %t162 store i64 0, ptr %a164 br label %for.cond6715 for.cond6715: %t165 = load i64, ptr %a164 %t166 = icmp slt i64 %t165, %t163 br i1 %t166, label %for.body6716, label %for.end6718 for.body6716: %t167 = load ptr, ptr %a1 %t168 = load ptr, ptr %a1 %t169 = load %S.ast.Type, ptr %a5 %t170 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t168, %S.ast.Type %t169) store { ptr, i64, i64 } { ptr @.str.4340, i64 23, i64 0 }, ptr %a172 store { ptr, i64, i64 } %t170, ptr %a173 call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) store { ptr, i64, i64 } %t170, ptr %a174 call void @finch_str_drop(ptr %a174) %t175 = load { ptr, i64, i64 }, ptr %a171 store { ptr, i64, i64 } %t175, ptr %a177 store { ptr, i64, i64 } { ptr @.str.4341, i64 6, i64 0 }, ptr %a178 call void @finch_str_concat(ptr %a176, ptr %a177, ptr %a178) store { ptr, i64, i64 } %t175, ptr %a179 call void @finch_str_drop(ptr %a179) %t180 = load { ptr, i64, i64 }, ptr %a176 %t181 = load { ptr, i64, i64 }, ptr %a120 store { ptr, i64, i64 } %t180, ptr %a183 store { ptr, i64, i64 } %t181, ptr %a184 call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184) store { ptr, i64, i64 } %t180, ptr %a185 call void @finch_str_drop(ptr %a185) %t186 = load { ptr, i64, i64 }, ptr %a182 store { ptr, i64, i64 } %t186, ptr %a188 store { ptr, i64, i64 } { ptr @.str.4342, i64 6, i64 0 }, ptr %a189 call void @finch_str_concat(ptr %a187, ptr %a188, ptr %a189) store { ptr, i64, i64 } %t186, ptr %a190 call void @finch_str_drop(ptr %a190) %t191 = load { ptr, i64, i64 }, ptr %a187 %t192 = load i64, ptr %a164 call void @finch_str_from_int(ptr %a193, i64 %t192) %t194 = load { ptr, i64, i64 }, ptr %a193 store { ptr, i64, i64 } %t191, ptr %a196 store { ptr, i64, i64 } %t194, ptr %a197 call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) store { ptr, i64, i64 } %t191, ptr %a198 call void @finch_str_drop(ptr %a198) store { ptr, i64, i64 } %t194, ptr %a199 call void @finch_str_drop(ptr %a199) %t200 = load { ptr, i64, i64 }, ptr %a195 %t201 = call { ptr, i64, i64 } @finch.gen.op(ptr %t167, { ptr, i64, i64 } %t200) store { ptr, i64, i64 } %t200, ptr %a202 call void @finch_str_drop(ptr %a202) store { ptr, i64, i64 } %t201, ptr %a203 %t204 = load ptr, ptr %a1 %t205 = load ptr, ptr %a1 %t206 = load %S.ast.Type, ptr %a5 %t207 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t205, %S.ast.Type %t206) %t208 = load i64, ptr %a164 %t209 = load { ptr, i64, i64 }, ptr %a30 %t210 = extractvalue { ptr, i64, i64 } %t209, 1 %t211 = icmp uge i64 %t208, %t210 br i1 %t211, label %range6719, label %inrange6720 range6719: call void @finch_panic_index(ptr @.str.4343, i64 3694, i64 %t208, i64 %t210) unreachable inrange6720: %t212 = extractvalue { ptr, i64, i64 } %t209, 0 %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i64 %t208 %t214 = load { ptr, i64, i64 }, ptr %t213 %t215 = load { ptr, i64, i64 }, ptr %a203 call void @finch.gen.store(ptr %t204, { ptr, i64, i64 } %t207, { ptr, i64, i64 } %t214, { ptr, i64, i64 } %t215) store { ptr, i64, i64 } %t207, ptr %a216 call void @finch_str_drop(ptr %a216) call void @finch_str_drop(ptr %a203) br label %for.step6717 for.step6717: %t217 = load i64, ptr %a164 %t218 = add i64 %t217, 1 store i64 %t218, ptr %a164 br label %for.cond6715 for.end6718: %t219 = load ptr, ptr %a1 %t220 = load { ptr, i64, i64 }, ptr %a120 store { ptr, i64, i64 } { ptr @.str.4344, i64 41, i64 0 }, ptr %a222 store { ptr, i64, i64 } %t220, ptr %a223 call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223) %t224 = load { ptr, i64, i64 }, ptr %a221 store { ptr, i64, i64 } %t224, ptr %a226 store { ptr, i64, i64 } { ptr @.str.4345, i64 3, i64 0 }, ptr %a227 call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227) store { ptr, i64, i64 } %t224, ptr %a228 call void @finch_str_drop(ptr %a228) %t229 = load { ptr, i64, i64 }, ptr %a225 %t230 = call { ptr, i64, i64 } @finch.gen.op(ptr %t219, { ptr, i64, i64 } %t229) store { ptr, i64, i64 } %t229, ptr %a231 call void @finch_str_drop(ptr %a231) store { ptr, i64, i64 } %t230, ptr %a232 %t233 = load ptr, ptr %a1 %t234 = load { ptr, i64, i64 }, ptr %a232 store { ptr, i64, i64 } { ptr @.str.4346, i64 30, i64 0 }, ptr %a236 store { ptr, i64, i64 } %t234, ptr %a237 call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) %t238 = load { ptr, i64, i64 }, ptr %a235 store { ptr, i64, i64 } %t238, ptr %a240 store { ptr, i64, i64 } { ptr @.str.4347, i64 6, i64 0 }, ptr %a241 call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) store { ptr, i64, i64 } %t238, ptr %a242 call void @finch_str_drop(ptr %a242) %t243 = load { ptr, i64, i64 }, ptr %a239 %t244 = load { ptr, i64, i64 }, ptr %a119 store { ptr, i64, i64 } %t243, ptr %a246 store { ptr, i64, i64 } %t244, ptr %a247 call void @finch_str_concat(ptr %a245, ptr %a246, ptr %a247) store { ptr, i64, i64 } %t243, ptr %a248 call void @finch_str_drop(ptr %a248) %t249 = load { ptr, i64, i64 }, ptr %a245 store { ptr, i64, i64 } %t249, ptr %a251 store { ptr, i64, i64 } { ptr @.str.4348, i64 3, i64 0 }, ptr %a252 call void @finch_str_concat(ptr %a250, ptr %a251, ptr %a252) store { ptr, i64, i64 } %t249, ptr %a253 call void @finch_str_drop(ptr %a253) %t254 = load { ptr, i64, i64 }, ptr %a250 %t255 = call { ptr, i64, i64 } @finch.gen.op(ptr %t233, { ptr, i64, i64 } %t254) store { ptr, i64, i64 } %t254, ptr %a256 call void @finch_str_drop(ptr %a256) store { ptr, i64, i64 } %t255, ptr %a257 %t258 = load ptr, ptr %a1 %t259 = load { ptr, i64, i64 }, ptr %a257 store { ptr, i64, i64 } { ptr @.str.4349, i64 30, i64 0 }, ptr %a261 store { ptr, i64, i64 } %t259, ptr %a262 call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) %t263 = load { ptr, i64, i64 }, ptr %a260 store { ptr, i64, i64 } %t263, ptr %a265 store { ptr, i64, i64 } { ptr @.str.4350, i64 6, i64 0 }, ptr %a266 call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266) store { ptr, i64, i64 } %t263, ptr %a267 call void @finch_str_drop(ptr %a267) %t268 = load { ptr, i64, i64 }, ptr %a264 %t269 = load { ptr, i64, i64 }, ptr %a119 store { ptr, i64, i64 } %t268, ptr %a271 store { ptr, i64, i64 } %t269, ptr %a272 call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) store { ptr, i64, i64 } %t268, ptr %a273 call void @finch_str_drop(ptr %a273) %t274 = load { ptr, i64, i64 }, ptr %a270 store { ptr, i64, i64 } %t274, ptr %a276 store { ptr, i64, i64 } { ptr @.str.4351, i64 3, i64 0 }, ptr %a277 call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) store { ptr, i64, i64 } %t274, ptr %a278 call void @finch_str_drop(ptr %a278) %t279 = load { ptr, i64, i64 }, ptr %a275 %t280 = call { ptr, i64, i64 } @finch.gen.op(ptr %t258, { ptr, i64, i64 } %t279) store { ptr, i64, i64 } %t279, ptr %a281 call void @finch_str_drop(ptr %a281) store { ptr, i64, i64 } %t280, ptr %a282 %t283 = load { ptr, i64, i64 }, ptr %a282 store { ptr, i64, i64 } %t283, ptr %a284 call void @finch_str_copy(ptr %a285, ptr %a284) %t286 = load { ptr, i64, i64 }, ptr %a285 %t287 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t286, 0 %t288 = load %S.ast.Type, ptr %a114 store %S.ast.Type %t288, ptr %a289 call void @finch.copy.S_ast_Type(ptr %a290, ptr %a289) %t291 = load %S.ast.Type, ptr %a290 %t292 = insertvalue %S.gen.Val %t287, %S.ast.Type %t291, 1 %t293 = insertvalue %S.gen.Val %t292, i1 true, 2 call void @finch_str_drop(ptr %a282) call void @finch_str_drop(ptr %a257) call void @finch_str_drop(ptr %a232) call void @finch_str_drop(ptr %a120) call void @finch_str_drop(ptr %a119) call void @finch.drop.S_ast_Type(ptr %a114) call void @finch.drop.arr_str(ptr %a30) call void @finch.drop.S_ast_Type(ptr %a5) ret %S.gen.Val %t293 } define internal void @finch.copy.S_gen_Place(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Place, ptr %src store %S.gen.Place %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Place, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Place, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Place, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Place, ptr %src, i32 0, i32 1 call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) ret void } define internal %S.gen.Place @finch.gen.place(ptr %p0, %S.ast.Node %p1, i1 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i1, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca %S.gen.Ref, align 16 %a42 = alloca %S.gen.Place, align 16 %a43 = alloca %S.gen.Place, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i1 %p2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.4352, i64 3, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 br label %logic.from6721 logic.from6721: br i1 %t9, label %logic.rhs6722, label %logic.end6723 logic.rhs6722: %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t12 = load { ptr, i64, i64 }, ptr %t11 %t13 = call i64 @finch.gen.lookup(ptr %t10, { ptr, i64, i64 } %t12) %t14 = icmp slt i64 %t13, 0 br label %logic.rend6724 logic.rend6724: br label %logic.end6723 logic.end6723: %t15 = phi i1 [ false, %logic.from6721 ], [ %t14, %logic.rend6724 ] br i1 %t15, label %then6725, label %endif6727 then6725: %t16 = load ptr, ptr %a1 %t17 = load %S.ast.Node, ptr %a2 %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t19 = load { ptr, i64, i64 }, ptr %t18 store { ptr, i64, i64 } { ptr @.str.4353, i64 28, i64 0 }, ptr %a21 store { ptr, i64, i64 } %t19, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a20 store { ptr, i64, i64 } %t23, ptr %a25 store { ptr, i64, i64 } { ptr @.str.4354, i64 1, i64 0 }, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) store { ptr, i64, i64 } %t23, ptr %a27 call void @finch_str_drop(ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a24 call void @finch.gen.fail(ptr %t16, %S.ast.Node %t17, { ptr, i64, i64 } %t28) store { ptr, i64, i64 } %t28, ptr %a29 call void @finch_str_drop(ptr %a29) br label %endif6727 endif6727: %t30 = load ptr, ptr %a1 %t31 = load %S.ast.Node, ptr %a2 %t32 = load i1, ptr %a3 %t33 = call %S.gen.Ref @finch.gen.ref(ptr %t30, %S.ast.Node %t31, i1 %t32) store %S.gen.Ref %t33, ptr %a34 %t35 = getelementptr inbounds %S.gen.Ref, ptr %a34, i32 0, i32 0 %t36 = load i1, ptr %t35 %t37 = xor i1 %t36, true br i1 %t37, label %then6728, label %endif6730 then6728: %t38 = load ptr, ptr %a1 %t39 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t38, %S.ast.Node %t39, { ptr, i64, i64 } { ptr @.str.4355, i64 60, i64 0 }) br label %endif6730 endif6730: %t40 = getelementptr inbounds %S.gen.Ref, ptr %a34, i32 0, i32 1 %t41 = load %S.gen.Place, ptr %t40 store %S.gen.Place %t41, ptr %a42 call void @finch.copy.S_gen_Place(ptr %a43, ptr %a42) %t44 = load %S.gen.Place, ptr %a43 call void @finch.drop.S_gen_Ref(ptr %a34) ret %S.gen.Place %t44 } define internal void @finch.copy.S_cimport_CConst(ptr %dst, ptr %src) { entry: %t1 = load %S.cimport.CConst, ptr %src store %S.cimport.CConst %t1, ptr %dst %t2 = getelementptr inbounds %S.cimport.CConst, ptr %dst, i32 0, i32 3 %t3 = getelementptr inbounds %S.cimport.CConst, ptr %src, i32 0, i32 3 call void @finch_str_copy(ptr %t2, ptr %t3) ret void } define internal %S.gen.Ref @finch.gen.ref(ptr %p0, %S.ast.Node %p1, i1 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i1, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca i64, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca %S.cimport.CConst, align 16 %a44 = alloca %S.cimport.CConst, align 16 %a46 = alloca %S.cimport.CConst, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca %S.ast.Type, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca i64, align 16 %a190 = alloca i64, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca %S.ast.Type, align 16 %a256 = alloca %S.ast.Type, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca %S.gen.Var, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca %S.ast.Type, align 16 %a359 = alloca %S.ast.Type, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i1 %p2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.4356, i64 3, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then6731, label %endif6733 then6731: %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t12 = load { ptr, i64, i64 }, ptr %t11 %t13 = call i64 @finch.gen.lookup(ptr %t10, { ptr, i64, i64 } %t12) store i64 %t13, ptr %a14 %t15 = load i64, ptr %a14 %t16 = icmp slt i64 %t15, 0 br label %logic.from6734 logic.from6734: br i1 %t16, label %logic.rhs6735, label %logic.end6736 logic.rhs6735: %t17 = load ptr, ptr %a1 %t18 = icmp eq ptr %t17, null br i1 %t18, label %panic6737, label %ok6738 panic6737: call void @finch_panic(ptr @.str.4357, i64 3718, ptr @.str.4358) unreachable ok6738: %t19 = getelementptr inbounds %S.gen.Gen, ptr %t17, i32 0, i32 26 %t20 = getelementptr inbounds %S.cimport.CImports, ptr %t19, i32 0, i32 1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 %t24 = call i64 @finch_map_find(ptr %t20, ptr %a23, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t25 = icmp sge i64 %t24, 0 br label %logic.rend6739 logic.rend6739: br label %logic.end6736 logic.end6736: %t26 = phi i1 [ false, %logic.from6734 ], [ %t25, %logic.rend6739 ] br i1 %t26, label %then6740, label %endif6742 then6740: %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null br i1 %t28, label %panic6743, label %ok6744 panic6743: call void @finch_panic(ptr @.str.4359, i64 3719, ptr @.str.4360) unreachable ok6744: %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 26 %t30 = getelementptr inbounds %S.cimport.CImports, ptr %t29, i32 0, i32 1 %t31 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t32 = load { ptr, i64, i64 }, ptr %t31 store { ptr, i64, i64 } %t32, ptr %a33 %t34 = call i64 @finch_map_find(ptr %t30, ptr %a33, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t35 = icmp slt i64 %t34, 0 br i1 %t35, label %map.missing6745, label %map.found6746 map.missing6745: store { ptr, i64, i64 } zeroinitializer, ptr %a36 store { ptr, i64, i64 } %t32, ptr %a37 call void @finch_buf_str(ptr %a36, ptr %a37, i32 1) call void @finch_map_missing(ptr @.str.4361, i64 3719, ptr %a36) unreachable map.found6746: %t38 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t30, i32 0, i32 0 %t39 = load ptr, ptr %t38 %t40 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t39, i64 %t34 %t41 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t40, i32 0, i32 2 %t42 = load %S.cimport.CConst, ptr %t41 store %S.cimport.CConst %t42, ptr %a43 call void @finch.copy.S_cimport_CConst(ptr %a44, ptr %a43) %t45 = load %S.cimport.CConst, ptr %a44 store %S.cimport.CConst %t45, ptr %a46 %t47 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 0 %t48 = load i1, ptr %t47 br i1 %t48, label %then6747, label %endif6749 then6747: %t49 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t50 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 3 %t51 = load { ptr, i64, i64 }, ptr %t50 %t52 = call { ptr, i64, i64 } @finch.gen.llFloat({ ptr, i64, i64 } %t51) %t53 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t52, 0 %t54 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4362, i64 5, i64 0 }) %t55 = insertvalue %S.gen.Val %t53, %S.ast.Type %t54, 1 %t56 = insertvalue %S.gen.Val %t55, i1 true, 3 %t57 = insertvalue %S.gen.Ref %t49, %S.gen.Val %t56, 2 call void @finch.drop.S_cimport_CConst(ptr %a46) ret %S.gen.Ref %t57 endif6749: %t58 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t59 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 1 %t60 = load i64, ptr %t59 call void @finch_str_from_int(ptr %a61, i64 %t60) %t62 = load { ptr, i64, i64 }, ptr %a61 %t63 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t62, 0 %t64 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4363, i64 3, i64 0 }) %t65 = insertvalue %S.gen.Val %t63, %S.ast.Type %t64, 1 %t66 = insertvalue %S.gen.Val %t65, i1 true, 3 %t67 = insertvalue %S.gen.Ref %t58, %S.gen.Val %t66, 2 call void @finch.drop.S_cimport_CConst(ptr %a46) ret %S.gen.Ref %t67 endif6742: %t68 = load i64, ptr %a14 %t69 = icmp slt i64 %t68, 0 br label %logic.from6750 logic.from6750: br i1 %t69, label %logic.rhs6751, label %logic.end6752 logic.rhs6751: %t70 = load ptr, ptr %a1 %t71 = icmp eq ptr %t70, null br i1 %t71, label %panic6753, label %ok6754 panic6753: call void @finch_panic(ptr @.str.4364, i64 3726, ptr @.str.4365) unreachable ok6754: %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 26 %t73 = getelementptr inbounds %S.cimport.CImports, ptr %t72, i32 0, i32 2 %t74 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t75 = load { ptr, i64, i64 }, ptr %t74 store { ptr, i64, i64 } %t75, ptr %a76 %t77 = call i64 @finch_map_find(ptr %t73, ptr %a76, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t78 = icmp sge i64 %t77, 0 %t79 = xor i1 %t78, true br label %logic.rend6755 logic.rend6755: br label %logic.end6752 logic.end6752: %t80 = phi i1 [ false, %logic.from6750 ], [ %t79, %logic.rend6755 ] br label %logic.from6756 logic.from6756: br i1 %t80, label %logic.rhs6757, label %logic.end6758 logic.rhs6757: %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null br i1 %t82, label %panic6759, label %ok6760 panic6759: call void @finch_panic(ptr @.str.4366, i64 3726, ptr @.str.4367) unreachable ok6760: %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 26 %t84 = getelementptr inbounds %S.cimport.CImports, ptr %t83, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.4368, i64 7, i64 0 }, ptr %a85 %t86 = call i64 @finch_map_find(ptr %t84, ptr %a85, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t87 = icmp sge i64 %t86, 0 br label %logic.rend6761 logic.rend6761: br label %logic.end6758 logic.end6758: %t88 = phi i1 [ false, %logic.from6756 ], [ %t87, %logic.rend6761 ] br label %logic.from6762 logic.from6762: br i1 %t88, label %logic.rhs6763, label %logic.end6764 logic.rhs6763: %t89 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t90 = load { ptr, i64, i64 }, ptr %t89 store { ptr, i64, i64 } %t90, ptr %a91 store { ptr, i64, i64 } { ptr @.str.4369, i64 5, i64 0 }, ptr %a92 %t93 = call i32 @finch_str_eq(ptr %a91, ptr %a92) %t94 = icmp ne i32 %t93, 0 br label %logic.from6765 logic.from6765: br i1 %t94, label %logic.end6767, label %logic.rhs6766 logic.rhs6766: %t95 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t96 = load { ptr, i64, i64 }, ptr %t95 store { ptr, i64, i64 } %t96, ptr %a97 store { ptr, i64, i64 } { ptr @.str.4370, i64 6, i64 0 }, ptr %a98 %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) %t100 = icmp ne i32 %t99, 0 br label %logic.rend6768 logic.rend6768: br label %logic.end6767 logic.end6767: %t101 = phi i1 [ true, %logic.from6765 ], [ %t100, %logic.rend6768 ] br label %logic.from6769 logic.from6769: br i1 %t101, label %logic.end6771, label %logic.rhs6770 logic.rhs6770: %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t103 = load { ptr, i64, i64 }, ptr %t102 store { ptr, i64, i64 } %t103, ptr %a104 store { ptr, i64, i64 } { ptr @.str.4371, i64 6, i64 0 }, ptr %a105 %t106 = call i32 @finch_str_eq(ptr %a104, ptr %a105) %t107 = icmp ne i32 %t106, 0 br label %logic.rend6772 logic.rend6772: br label %logic.end6771 logic.end6771: %t108 = phi i1 [ true, %logic.from6769 ], [ %t107, %logic.rend6772 ] br label %logic.rend6773 logic.rend6773: br label %logic.end6764 logic.end6764: %t109 = phi i1 [ false, %logic.from6762 ], [ %t108, %logic.rend6773 ] br i1 %t109, label %then6774, label %endif6776 then6774: store { ptr, i64, i64 } { ptr @.str.4372, i64 1, i64 0 }, ptr %a110 %t111 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t112 = load { ptr, i64, i64 }, ptr %t111 store { ptr, i64, i64 } %t112, ptr %a113 store { ptr, i64, i64 } { ptr @.str.4373, i64 5, i64 0 }, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 br i1 %t116, label %then6777, label %else6778 then6777: %t117 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } { ptr @.str.4374, i64 1, i64 0 }, ptr %a110 store { ptr, i64, i64 } %t117, ptr %a118 call void @finch_str_drop(ptr %a118) br label %endif6779 else6778: %t119 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t120 = load { ptr, i64, i64 }, ptr %t119 store { ptr, i64, i64 } %t120, ptr %a121 store { ptr, i64, i64 } { ptr @.str.4375, i64 6, i64 0 }, ptr %a122 %t123 = call i32 @finch_str_eq(ptr %a121, ptr %a122) %t124 = icmp ne i32 %t123, 0 br i1 %t124, label %then6780, label %endif6782 then6780: %t125 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } { ptr @.str.4376, i64 1, i64 0 }, ptr %a110 store { ptr, i64, i64 } %t125, ptr %a126 call void @finch_str_drop(ptr %a126) br label %endif6782 endif6782: br label %endif6779 endif6779: %t127 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t128 = load ptr, ptr %a1 %t129 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } { ptr @.str.4377, i64 31, i64 0 }, ptr %a131 store { ptr, i64, i64 } %t129, ptr %a132 call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) %t133 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t133, ptr %a135 store { ptr, i64, i64 } { ptr @.str.4378, i64 1, i64 0 }, ptr %a136 call void @finch_str_concat(ptr %a134, ptr %a135, ptr %a136) store { ptr, i64, i64 } %t133, ptr %a137 call void @finch_str_drop(ptr %a137) %t138 = load { ptr, i64, i64 }, ptr %a134 %t139 = call { ptr, i64, i64 } @finch.gen.op(ptr %t128, { ptr, i64, i64 } %t138) store { ptr, i64, i64 } %t138, ptr %a140 call void @finch_str_drop(ptr %a140) %t141 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t139, 0 %t142 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4379, i64 3, i64 0 }) %t143 = insertvalue %S.gen.Val %t141, %S.ast.Type %t142, 1 %t144 = insertvalue %S.gen.Ref %t127, %S.gen.Val %t143, 2 call void @finch_str_drop(ptr %a110) ret %S.gen.Ref %t144 endif6776: %t145 = load i64, ptr %a14 %t146 = icmp slt i64 %t145, 0 br label %logic.from6783 logic.from6783: br i1 %t146, label %logic.rhs6784, label %logic.end6785 logic.rhs6784: %t147 = load ptr, ptr %a1 %t148 = icmp eq ptr %t147, null br i1 %t148, label %panic6786, label %ok6787 panic6786: call void @finch_panic(ptr @.str.4380, i64 3735, ptr @.str.4381) unreachable ok6787: %t149 = getelementptr inbounds %S.gen.Gen, ptr %t147, i32 0, i32 26 %t150 = getelementptr inbounds %S.cimport.CImports, ptr %t149, i32 0, i32 2 %t151 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t152 = load { ptr, i64, i64 }, ptr %t151 store { ptr, i64, i64 } %t152, ptr %a153 %t154 = call i64 @finch_map_find(ptr %t150, ptr %a153, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t155 = icmp sge i64 %t154, 0 br label %logic.rend6788 logic.rend6788: br label %logic.end6785 logic.end6785: %t156 = phi i1 [ false, %logic.from6783 ], [ %t155, %logic.rend6788 ] br i1 %t156, label %then6789, label %endif6791 then6789: %t157 = load ptr, ptr %a1 %t158 = load ptr, ptr %a1 %t159 = icmp eq ptr %t158, null br i1 %t159, label %panic6792, label %ok6793 panic6792: call void @finch_panic(ptr @.str.4382, i64 3736, ptr @.str.4383) unreachable ok6793: %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 26 %t161 = getelementptr inbounds %S.cimport.CImports, ptr %t160, i32 0, i32 2 %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t163 = load { ptr, i64, i64 }, ptr %t162 store { ptr, i64, i64 } %t163, ptr %a164 %t165 = call i64 @finch_map_find(ptr %t161, ptr %a164, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t166 = icmp slt i64 %t165, 0 br i1 %t166, label %map.missing6794, label %map.found6795 map.missing6794: store { ptr, i64, i64 } zeroinitializer, ptr %a167 store { ptr, i64, i64 } %t163, ptr %a168 call void @finch_buf_str(ptr %a167, ptr %a168, i32 1) call void @finch_map_missing(ptr @.str.4384, i64 3736, ptr %a167) unreachable map.found6795: %t169 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t161, i32 0, i32 0 %t170 = load ptr, ptr %t169 %t171 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t170, i64 %t165 %t172 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t171, i32 0, i32 2 %t173 = load %S.ast.Type, ptr %t172 %t174 = load %S.ast.Node, ptr %a2 %t175 = call %S.ast.Type @finch.gen.resolve(ptr %t157, %S.ast.Type %t173, %S.ast.Node %t174) store %S.ast.Type %t175, ptr %a176 %t177 = load ptr, ptr %a1 %t178 = icmp eq ptr %t177, null br i1 %t178, label %panic6796, label %ok6797 panic6796: call void @finch_panic(ptr @.str.4385, i64 3737, ptr @.str.4386) unreachable ok6797: %t179 = getelementptr inbounds %S.gen.Gen, ptr %t177, i32 0, i32 40 %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 %t181 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t182 = load { ptr, i64, i64 }, ptr %t181 store { ptr, i64, i64 } { ptr @.str.4387, i64 2, i64 0 }, ptr %a184 store { ptr, i64, i64 } %t182, ptr %a185 call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) %t186 = load { ptr, i64, i64 }, ptr %a183 store i64 -1, ptr %a187 %t188 = load i64, ptr %t180 %t189 = load ptr, ptr %t179 store i64 0, ptr %a190 br label %find.cond6798 find.cond6798: %t191 = load i64, ptr %a190 %t192 = icmp slt i64 %t191, %t188 br i1 %t192, label %find.body6799, label %find.end6802 find.body6799: %t193 = getelementptr inbounds { ptr, i64, i64 }, ptr %t189, i64 %t191 %t194 = load { ptr, i64, i64 }, ptr %t193 store { ptr, i64, i64 } %t194, ptr %a195 store { ptr, i64, i64 } %t186, ptr %a196 %t197 = call i32 @finch_str_eq(ptr %a195, ptr %a196) %t198 = icmp ne i32 %t197, 0 br i1 %t198, label %find.hit6800, label %find.next6801 find.hit6800: store i64 %t191, ptr %a187 br label %find.end6802 find.next6801: %t199 = add i64 %t191, 1 store i64 %t199, ptr %a190 br label %find.cond6798 find.end6802: store { ptr, i64, i64 } %t186, ptr %a200 call void @finch_str_drop(ptr %a200) %t201 = load i64, ptr %a187 %t202 = icmp sge i64 %t201, 0 %t203 = xor i1 %t202, true br i1 %t203, label %then6803, label %endif6805 then6803: %t204 = load ptr, ptr %a1 %t205 = icmp eq ptr %t204, null br i1 %t205, label %panic6806, label %ok6807 panic6806: call void @finch_panic(ptr @.str.4388, i64 3738, ptr @.str.4389) unreachable ok6807: %t206 = getelementptr inbounds %S.gen.Gen, ptr %t204, i32 0, i32 40 %t207 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i32 0, i32 1 %t208 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t209 = load { ptr, i64, i64 }, ptr %t208 store { ptr, i64, i64 } { ptr @.str.4390, i64 2, i64 0 }, ptr %a211 store { ptr, i64, i64 } %t209, ptr %a212 call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) %t213 = load { ptr, i64, i64 }, ptr %a210 %t214 = load i64, ptr %t207 %t215 = add i64 %t214, 1 call void @finch_arr_reserve(ptr %t206, i64 %t215, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t216 = load ptr, ptr %t206 %t217 = getelementptr inbounds { ptr, i64, i64 }, ptr %t216, i64 %t214 store { ptr, i64, i64 } %t213, ptr %t217 store i64 %t215, ptr %t207 %t218 = load ptr, ptr %a1 %t219 = icmp eq ptr %t218, null br i1 %t219, label %panic6808, label %ok6809 panic6808: call void @finch_panic(ptr @.str.4391, i64 3739, ptr @.str.4392) unreachable ok6809: %t220 = getelementptr inbounds %S.gen.Gen, ptr %t218, i32 0, i32 2 %t221 = getelementptr inbounds { ptr, i64, i64 }, ptr %t220, i32 0, i32 1 %t222 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t223 = load { ptr, i64, i64 }, ptr %t222 store { ptr, i64, i64 } { ptr @.str.4393, i64 1, i64 0 }, ptr %a225 store { ptr, i64, i64 } %t223, ptr %a226 call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) %t227 = load { ptr, i64, i64 }, ptr %a224 store { ptr, i64, i64 } %t227, ptr %a229 store { ptr, i64, i64 } { ptr @.str.4394, i64 19, i64 0 }, ptr %a230 call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) store { ptr, i64, i64 } %t227, ptr %a231 call void @finch_str_drop(ptr %a231) %t232 = load { ptr, i64, i64 }, ptr %a228 %t233 = load ptr, ptr %a1 %t234 = load %S.ast.Type, ptr %a176 %t235 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t233, %S.ast.Type %t234) store { ptr, i64, i64 } %t232, ptr %a237 store { ptr, i64, i64 } %t235, ptr %a238 call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238) store { ptr, i64, i64 } %t232, ptr %a239 call void @finch_str_drop(ptr %a239) store { ptr, i64, i64 } %t235, ptr %a240 call void @finch_str_drop(ptr %a240) %t241 = load { ptr, i64, i64 }, ptr %a236 %t242 = load i64, ptr %t221 %t243 = add i64 %t242, 1 call void @finch_arr_reserve(ptr %t220, i64 %t243, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t244 = load ptr, ptr %t220 %t245 = getelementptr inbounds { ptr, i64, i64 }, ptr %t244, i64 %t242 store { ptr, i64, i64 } %t241, ptr %t245 store i64 %t243, ptr %t221 br label %endif6805 endif6805: %t246 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t247 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t248 = load { ptr, i64, i64 }, ptr %t247 store { ptr, i64, i64 } { ptr @.str.4395, i64 1, i64 0 }, ptr %a250 store { ptr, i64, i64 } %t248, ptr %a251 call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) %t252 = load { ptr, i64, i64 }, ptr %a249 %t253 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t252, 0 %t254 = load %S.ast.Type, ptr %a176 store %S.ast.Type %t254, ptr %a255 call void @finch.copy.S_ast_Type(ptr %a256, ptr %a255) %t257 = load %S.ast.Type, ptr %a256 %t258 = insertvalue %S.gen.Place %t253, %S.ast.Type %t257, 1 %t259 = insertvalue %S.gen.Ref %t246, %S.gen.Place %t258, 1 call void @finch.drop.S_ast_Type(ptr %a176) ret %S.gen.Ref %t259 endif6791: %t260 = load i64, ptr %a14 %t261 = icmp slt i64 %t260, 0 br i1 %t261, label %then6810, label %endif6812 then6810: %t262 = load ptr, ptr %a1 %t263 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t264 = load { ptr, i64, i64 }, ptr %t263 %t265 = call i1 @finch.gen.imports(ptr %t262, { ptr, i64, i64 } %t264) br i1 %t265, label %then6813, label %endif6815 then6813: %t266 = load ptr, ptr %a1 %t267 = load %S.ast.Node, ptr %a2 %t268 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t269 = load { ptr, i64, i64 }, ptr %t268 store { ptr, i64, i64 } { ptr @.str.4396, i64 1, i64 0 }, ptr %a271 store { ptr, i64, i64 } %t269, ptr %a272 call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) %t273 = load { ptr, i64, i64 }, ptr %a270 store { ptr, i64, i64 } %t273, ptr %a275 store { ptr, i64, i64 } { ptr @.str.4397, i64 43, i64 0 }, ptr %a276 call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276) store { ptr, i64, i64 } %t273, ptr %a277 call void @finch_str_drop(ptr %a277) %t278 = load { ptr, i64, i64 }, ptr %a274 %t279 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t280 = load { ptr, i64, i64 }, ptr %t279 store { ptr, i64, i64 } %t278, ptr %a282 store { ptr, i64, i64 } %t280, ptr %a283 call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) store { ptr, i64, i64 } %t278, ptr %a284 call void @finch_str_drop(ptr %a284) %t285 = load { ptr, i64, i64 }, ptr %a281 store { ptr, i64, i64 } %t285, ptr %a287 store { ptr, i64, i64 } { ptr @.str.4398, i64 10, i64 0 }, ptr %a288 call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288) store { ptr, i64, i64 } %t285, ptr %a289 call void @finch_str_drop(ptr %a289) %t290 = load { ptr, i64, i64 }, ptr %a286 call void @finch.gen.fail(ptr %t266, %S.ast.Node %t267, { ptr, i64, i64 } %t290) store { ptr, i64, i64 } %t290, ptr %a291 call void @finch_str_drop(ptr %a291) br label %endif6815 endif6815: %t292 = load ptr, ptr %a1 %t293 = load %S.ast.Node, ptr %a2 %t294 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t295 = load { ptr, i64, i64 }, ptr %t294 store { ptr, i64, i64 } { ptr @.str.4399, i64 28, i64 0 }, ptr %a297 store { ptr, i64, i64 } %t295, ptr %a298 call void @finch_str_concat(ptr %a296, ptr %a297, ptr %a298) %t299 = load { ptr, i64, i64 }, ptr %a296 store { ptr, i64, i64 } %t299, ptr %a301 store { ptr, i64, i64 } { ptr @.str.4400, i64 1, i64 0 }, ptr %a302 call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) store { ptr, i64, i64 } %t299, ptr %a303 call void @finch_str_drop(ptr %a303) %t304 = load { ptr, i64, i64 }, ptr %a300 call void @finch.gen.fail(ptr %t292, %S.ast.Node %t293, { ptr, i64, i64 } %t304) store { ptr, i64, i64 } %t304, ptr %a305 call void @finch_str_drop(ptr %a305) br label %endif6812 endif6812: %t306 = load ptr, ptr %a1 %t307 = load i64, ptr %a14 %t308 = call %S.gen.Var @finch.gen.varAt(ptr %t306, i64 %t307) store %S.gen.Var %t308, ptr %a309 %t310 = load ptr, ptr %a1 %t311 = load %S.ast.Node, ptr %a2 %t312 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t313 = load i64, ptr %t312 %t314 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i32 0, i32 1 %t316 = load i64, ptr %t315 %t317 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 1 %t318 = load %S.ast.Type, ptr %t317 %t319 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t318) store { ptr, i64, i64 } { ptr @.str.4401, i64 9, i64 0 }, ptr %a321 store { ptr, i64, i64 } %t319, ptr %a322 call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322) store { ptr, i64, i64 } %t319, ptr %a323 call void @finch_str_drop(ptr %a323) %t324 = load { ptr, i64, i64 }, ptr %a320 store { ptr, i64, i64 } %t324, ptr %a326 store { ptr, i64, i64 } { ptr @.str.4402, i64 1, i64 0 }, ptr %a327 call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327) store { ptr, i64, i64 } %t324, ptr %a328 call void @finch_str_drop(ptr %a328) %t329 = load { ptr, i64, i64 }, ptr %a325 %t330 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t331 = load { ptr, i64, i64 }, ptr %t330 store { ptr, i64, i64 } %t329, ptr %a333 store { ptr, i64, i64 } %t331, ptr %a334 call void @finch_str_concat(ptr %a332, ptr %a333, ptr %a334) store { ptr, i64, i64 } %t329, ptr %a335 call void @finch_str_drop(ptr %a335) %t336 = load { ptr, i64, i64 }, ptr %a332 store { ptr, i64, i64 } %t336, ptr %a338 store { ptr, i64, i64 } { ptr @.str.4403, i64 4, i64 0 }, ptr %a339 call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) store { ptr, i64, i64 } %t336, ptr %a340 call void @finch_str_drop(ptr %a340) %t341 = load { ptr, i64, i64 }, ptr %a337 %t342 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 7 %t343 = load { ptr, i64, i64 }, ptr %t342 %t344 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 8 %t345 = load i64, ptr %t344 %t346 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 9 %t347 = load i64, ptr %t346 call void @finch.gen.noteRef(ptr %t310, %S.ast.Node %t311, i64 %t313, i64 %t316, { ptr, i64, i64 } %t341, { ptr, i64, i64 } %t343, i64 %t345, i64 %t347) store { ptr, i64, i64 } %t341, ptr %a348 call void @finch_str_drop(ptr %a348) %t349 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t350 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 2 %t351 = load { ptr, i64, i64 }, ptr %t350 store { ptr, i64, i64 } %t351, ptr %a352 call void @finch_str_copy(ptr %a353, ptr %a352) %t354 = load { ptr, i64, i64 }, ptr %a353 %t355 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t354, 0 %t356 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 1 %t357 = load %S.ast.Type, ptr %t356 store %S.ast.Type %t357, ptr %a358 call void @finch.copy.S_ast_Type(ptr %a359, ptr %a358) %t360 = load %S.ast.Type, ptr %a359 %t361 = insertvalue %S.gen.Place %t355, %S.ast.Type %t360, 1 %t362 = insertvalue %S.gen.Ref %t349, %S.gen.Place %t361, 1 call void @finch.drop.S_gen_Var(ptr %a309) ret %S.gen.Ref %t362 endif6733: %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t364 = load { ptr, i64, i64 }, ptr %t363 store { ptr, i64, i64 } %t364, ptr %a365 store { ptr, i64, i64 } { ptr @.str.4404, i64 6, i64 0 }, ptr %a366 %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) %t368 = icmp ne i32 %t367, 0 br i1 %t368, label %then6816, label %endif6818 then6816: %t369 = load ptr, ptr %a1 %t370 = load %S.ast.Node, ptr %a2 %t371 = load i1, ptr %a3 %t372 = call %S.gen.Ref @finch.gen.member(ptr %t369, %S.ast.Node %t370, i1 %t371) ret %S.gen.Ref %t372 endif6818: %t373 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t374 = load { ptr, i64, i64 }, ptr %t373 store { ptr, i64, i64 } %t374, ptr %a375 store { ptr, i64, i64 } { ptr @.str.4405, i64 5, i64 0 }, ptr %a376 %t377 = call i32 @finch_str_eq(ptr %a375, ptr %a376) %t378 = icmp ne i32 %t377, 0 br i1 %t378, label %then6819, label %endif6821 then6819: %t379 = load ptr, ptr %a1 %t380 = load %S.ast.Node, ptr %a2 %t381 = load i1, ptr %a3 %t382 = call %S.gen.Ref @finch.gen.index(ptr %t379, %S.ast.Node %t380, i1 %t381) ret %S.gen.Ref %t382 endif6821: %t383 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t384 = load ptr, ptr %a1 %t385 = load %S.ast.Node, ptr %a2 %t386 = call %S.gen.Val @finch.gen.expr(ptr %t384, %S.ast.Node %t385) %t387 = insertvalue %S.gen.Ref %t383, %S.gen.Val %t386, 2 ret %S.gen.Ref %t387 } define internal { ptr, i64, i64 } @finch.gen.llFloat({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca i64, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_copy(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t5, ptr %a6 %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.4407, i64 1, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_starts(ptr %a8, ptr %a10) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then6822, label %endif6824 then6822: %t13 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } { ptr @.str.4408, i64 1, i64 0 }, ptr %a15 store { ptr, i64, i64 } %t13, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a14 %t18 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t17, ptr %a6 store { ptr, i64, i64 } %t18, ptr %a19 call void @finch_str_drop(ptr %a19) br label %endif6824 endif6824: %t20 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.4410, i64 1, i64 0 }, ptr %a23 %t24 = call i64 @finch_str_find(ptr %a21, ptr %a23) %t25 = icmp sge i64 %t24, 0 %t26 = xor i1 %t25, true br i1 %t26, label %then6825, label %endif6827 then6825: %t27 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.4412, i64 1, i64 0 }, ptr %a30 %t31 = call i64 @finch_str_find(ptr %a28, ptr %a30) store i64 %t31, ptr %a32 %t33 = load i64, ptr %a32 %t34 = icmp slt i64 %t33, 0 br i1 %t34, label %then6828, label %endif6830 then6828: %t35 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.4414, i64 1, i64 0 }, ptr %a38 %t39 = call i64 @finch_str_find(ptr %a36, ptr %a38) store i64 %t39, ptr %a32 br label %endif6830 endif6830: %t40 = load i64, ptr %a32 %t41 = icmp slt i64 %t40, 0 br i1 %t41, label %then6831, label %endif6833 then6831: %t42 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t42, ptr %a44 store { ptr, i64, i64 } { ptr @.str.4415, i64 2, i64 0 }, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a43 call void @finch_str_drop(ptr %a6) ret { ptr, i64, i64 } %t46 endif6833: %t47 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t47, ptr %a48 %t50 = load i64, ptr %a32 call void @finch_str_sub(ptr %a49, ptr %a48, i64 0, i64 %t50, ptr @.str.4416, i64 3776) %t51 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t51, ptr %a53 store { ptr, i64, i64 } { ptr @.str.4417, i64 2, i64 0 }, ptr %a54 call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) store { ptr, i64, i64 } %t51, ptr %a55 call void @finch_str_drop(ptr %a55) %t56 = load { ptr, i64, i64 }, ptr %a52 %t57 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t57, ptr %a58 %t60 = load i64, ptr %a32 %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t62 = load i64, ptr %t61 call void @finch_str_sub(ptr %a59, ptr %a58, i64 %t60, i64 %t62, ptr @.str.4418, i64 3776) %t63 = load { ptr, i64, i64 }, ptr %a59 store { ptr, i64, i64 } %t56, ptr %a65 store { ptr, i64, i64 } %t63, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) store { ptr, i64, i64 } %t56, ptr %a67 call void @finch_str_drop(ptr %a67) store { ptr, i64, i64 } %t63, ptr %a68 call void @finch_str_drop(ptr %a68) %t69 = load { ptr, i64, i64 }, ptr %a64 call void @finch_str_drop(ptr %a6) ret { ptr, i64, i64 } %t69 endif6827: %t70 = load { ptr, i64, i64 }, ptr %a6 ret { ptr, i64, i64 } %t70 } define internal i64 @finch.gen.enumNamed(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 store { ptr, i64, i64 } { ptr @.str.4419, i64 3, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 br label %logic.from6834 logic.from6834: br i1 %t8, label %logic.rhs6835, label %logic.end6836 logic.rhs6835: %t9 = load ptr, ptr %a1 %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t11 = load { ptr, i64, i64 }, ptr %t10 %t12 = call i64 @finch.gen.lookup(ptr %t9, { ptr, i64, i64 } %t11) %t13 = icmp slt i64 %t12, 0 br label %logic.rend6837 logic.rend6837: br label %logic.end6836 logic.end6836: %t14 = phi i1 [ false, %logic.from6834 ], [ %t13, %logic.rend6837 ] br i1 %t14, label %then6838, label %endif6840 then6838: %t15 = load ptr, ptr %a1 %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null br i1 %t17, label %panic6841, label %ok6842 panic6841: call void @finch_panic(ptr @.str.4420, i64 3784, ptr @.str.4421) unreachable ok6842: %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 14 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t21 = load { ptr, i64, i64 }, ptr %t20 %t22 = call i64 @finch.gen.findEnum(ptr %t15, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) ret i64 %t22 endif6840: %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t24 = load { ptr, i64, i64 }, ptr %t23 store { ptr, i64, i64 } %t24, ptr %a25 store { ptr, i64, i64 } { ptr @.str.4422, i64 6, i64 0 }, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 br label %logic.from6843 logic.from6843: br i1 %t28, label %logic.rhs6844, label %logic.end6845 logic.rhs6844: %t29 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t30 = load { ptr, i64, i64 }, ptr %t29 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 0, %t31 br i1 %t32, label %range6846, label %inrange6847 range6846: call void @finch_panic_index(ptr @.str.4423, i64 3786, i64 0, i64 %t31) unreachable inrange6847: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 0 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i32 0, i32 0 %t36 = load { ptr, i64, i64 }, ptr %t35 store { ptr, i64, i64 } %t36, ptr %a37 store { ptr, i64, i64 } { ptr @.str.4424, i64 3, i64 0 }, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 br label %logic.rend6848 logic.rend6848: br label %logic.end6845 logic.end6845: %t41 = phi i1 [ false, %logic.from6843 ], [ %t40, %logic.rend6848 ] br label %logic.from6849 logic.from6849: br i1 %t41, label %logic.rhs6850, label %logic.end6851 logic.rhs6850: %t42 = load ptr, ptr %a1 %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t44 = load { ptr, i64, i64 }, ptr %t43 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 0, %t45 br i1 %t46, label %range6852, label %inrange6853 range6852: call void @finch_panic_index(ptr @.str.4425, i64 3786, i64 0, i64 %t45) unreachable inrange6853: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i32 0, i32 1 %t50 = load { ptr, i64, i64 }, ptr %t49 %t51 = call i64 @finch.gen.lookup(ptr %t42, { ptr, i64, i64 } %t50) %t52 = icmp slt i64 %t51, 0 br label %logic.rend6854 logic.rend6854: br label %logic.end6851 logic.end6851: %t53 = phi i1 [ false, %logic.from6849 ], [ %t52, %logic.rend6854 ] br label %logic.from6855 logic.from6855: br i1 %t53, label %logic.rhs6856, label %logic.end6857 logic.rhs6856: %t54 = load ptr, ptr %a1 %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t56 = load { ptr, i64, i64 }, ptr %t55 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = icmp uge i64 0, %t57 br i1 %t58, label %range6858, label %inrange6859 range6858: call void @finch_panic_index(ptr @.str.4426, i64 3786, i64 0, i64 %t57) unreachable inrange6859: %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = getelementptr inbounds %S.ast.Node, ptr %t59, i64 0 %t61 = getelementptr inbounds %S.ast.Node, ptr %t60, i32 0, i32 1 %t62 = load { ptr, i64, i64 }, ptr %t61 %t63 = call i1 @finch.gen.imports(ptr %t54, { ptr, i64, i64 } %t62) br label %logic.rend6860 logic.rend6860: br label %logic.end6857 logic.end6857: %t64 = phi i1 [ false, %logic.from6855 ], [ %t63, %logic.rend6860 ] br i1 %t64, label %then6861, label %endif6863 then6861: %t65 = load ptr, ptr %a1 %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t67 = load { ptr, i64, i64 }, ptr %t66 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 0, %t68 br i1 %t69, label %range6864, label %inrange6865 range6864: call void @finch_panic_index(ptr @.str.4427, i64 3787, i64 0, i64 %t68) unreachable inrange6865: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 %t72 = getelementptr inbounds %S.ast.Node, ptr %t71, i32 0, i32 1 %t73 = load { ptr, i64, i64 }, ptr %t72 %t74 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t75 = load { ptr, i64, i64 }, ptr %t74 %t76 = call i64 @finch.gen.findEnum(ptr %t65, { ptr, i64, i64 } %t73, { ptr, i64, i64 } %t75) ret i64 %t76 endif6863: ret i64 -1 } define internal i64 @finch.gen.sumNamed(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 store { ptr, i64, i64 } { ptr @.str.4428, i64 3, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 br label %logic.from6866 logic.from6866: br i1 %t8, label %logic.rhs6867, label %logic.end6868 logic.rhs6867: %t9 = load ptr, ptr %a1 %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t11 = load { ptr, i64, i64 }, ptr %t10 %t12 = call i64 @finch.gen.lookup(ptr %t9, { ptr, i64, i64 } %t11) %t13 = icmp slt i64 %t12, 0 br label %logic.rend6869 logic.rend6869: br label %logic.end6868 logic.end6868: %t14 = phi i1 [ false, %logic.from6866 ], [ %t13, %logic.rend6869 ] br i1 %t14, label %then6870, label %endif6872 then6870: %t15 = load ptr, ptr %a1 %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null br i1 %t17, label %panic6873, label %ok6874 panic6873: call void @finch_panic(ptr @.str.4429, i64 3795, ptr @.str.4430) unreachable ok6874: %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 14 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t21 = load { ptr, i64, i64 }, ptr %t20 %t22 = call i64 @finch.gen.findSum(ptr %t15, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) ret i64 %t22 endif6872: %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t24 = load { ptr, i64, i64 }, ptr %t23 store { ptr, i64, i64 } %t24, ptr %a25 store { ptr, i64, i64 } { ptr @.str.4431, i64 6, i64 0 }, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 br label %logic.from6875 logic.from6875: br i1 %t28, label %logic.rhs6876, label %logic.end6877 logic.rhs6876: %t29 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t30 = load { ptr, i64, i64 }, ptr %t29 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 0, %t31 br i1 %t32, label %range6878, label %inrange6879 range6878: call void @finch_panic_index(ptr @.str.4432, i64 3797, i64 0, i64 %t31) unreachable inrange6879: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 0 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i32 0, i32 0 %t36 = load { ptr, i64, i64 }, ptr %t35 store { ptr, i64, i64 } %t36, ptr %a37 store { ptr, i64, i64 } { ptr @.str.4433, i64 3, i64 0 }, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 br label %logic.rend6880 logic.rend6880: br label %logic.end6877 logic.end6877: %t41 = phi i1 [ false, %logic.from6875 ], [ %t40, %logic.rend6880 ] br label %logic.from6881 logic.from6881: br i1 %t41, label %logic.rhs6882, label %logic.end6883 logic.rhs6882: %t42 = load ptr, ptr %a1 %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t44 = load { ptr, i64, i64 }, ptr %t43 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 0, %t45 br i1 %t46, label %range6884, label %inrange6885 range6884: call void @finch_panic_index(ptr @.str.4434, i64 3797, i64 0, i64 %t45) unreachable inrange6885: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i32 0, i32 1 %t50 = load { ptr, i64, i64 }, ptr %t49 %t51 = call i64 @finch.gen.lookup(ptr %t42, { ptr, i64, i64 } %t50) %t52 = icmp slt i64 %t51, 0 br label %logic.rend6886 logic.rend6886: br label %logic.end6883 logic.end6883: %t53 = phi i1 [ false, %logic.from6881 ], [ %t52, %logic.rend6886 ] br label %logic.from6887 logic.from6887: br i1 %t53, label %logic.rhs6888, label %logic.end6889 logic.rhs6888: %t54 = load ptr, ptr %a1 %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t56 = load { ptr, i64, i64 }, ptr %t55 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = icmp uge i64 0, %t57 br i1 %t58, label %range6890, label %inrange6891 range6890: call void @finch_panic_index(ptr @.str.4435, i64 3797, i64 0, i64 %t57) unreachable inrange6891: %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = getelementptr inbounds %S.ast.Node, ptr %t59, i64 0 %t61 = getelementptr inbounds %S.ast.Node, ptr %t60, i32 0, i32 1 %t62 = load { ptr, i64, i64 }, ptr %t61 %t63 = call i1 @finch.gen.imports(ptr %t54, { ptr, i64, i64 } %t62) br label %logic.rend6892 logic.rend6892: br label %logic.end6889 logic.end6889: %t64 = phi i1 [ false, %logic.from6887 ], [ %t63, %logic.rend6892 ] br i1 %t64, label %then6893, label %endif6895 then6893: %t65 = load ptr, ptr %a1 %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t67 = load { ptr, i64, i64 }, ptr %t66 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 0, %t68 br i1 %t69, label %range6896, label %inrange6897 range6896: call void @finch_panic_index(ptr @.str.4436, i64 3798, i64 0, i64 %t68) unreachable inrange6897: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 %t72 = getelementptr inbounds %S.ast.Node, ptr %t71, i32 0, i32 1 %t73 = load { ptr, i64, i64 }, ptr %t72 %t74 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t75 = load { ptr, i64, i64 }, ptr %t74 %t76 = call i64 @finch.gen.findSum(ptr %t65, { ptr, i64, i64 } %t73, { ptr, i64, i64 } %t75) ret i64 %t76 endif6895: ret i64 -1 } define internal i64 @finch.gen.sumVariant(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, %S.ast.Node %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Node, align 16 %a15 = alloca %S.gen.SumDef, align 16 %a16 = alloca %S.gen.SumDef, align 16 %a18 = alloca %S.gen.SumDef, align 16 %a22 = alloca i64, align 16 %a25 = alloca i64, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca i64, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Node %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic6898, label %ok6899 panic6898: call void @finch_panic(ptr @.str.4437, i64 3804, ptr @.str.4438) unreachable ok6899: %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 22 %t8 = load i64, ptr %a2 %t9 = load { ptr, i64, i64 }, ptr %t7 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 br i1 %t11, label %range6900, label %inrange6901 range6900: call void @finch_panic_index(ptr @.str.4439, i64 3804, i64 %t8, i64 %t10) unreachable inrange6901: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.gen.SumDef, ptr %t12, i64 %t8 %t14 = load %S.gen.SumDef, ptr %t13 store %S.gen.SumDef %t14, ptr %a15 call void @finch.copy.S_gen_SumDef(ptr %a16, ptr %a15) %t17 = load %S.gen.SumDef, ptr %a16 store %S.gen.SumDef %t17, ptr %a18 %t19 = getelementptr inbounds %S.gen.SumDef, ptr %a18, i32 0, i32 2 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 %t21 = load { ptr, i64, i64 }, ptr %a3 store i64 -1, ptr %a22 %t23 = load i64, ptr %t20 %t24 = load ptr, ptr %t19 store i64 0, ptr %a25 br label %find.cond6902 find.cond6902: %t26 = load i64, ptr %a25 %t27 = icmp slt i64 %t26, %t23 br i1 %t27, label %find.body6903, label %find.end6906 find.body6903: %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t26 %t29 = load { ptr, i64, i64 }, ptr %t28 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } %t21, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 br i1 %t33, label %find.hit6904, label %find.next6905 find.hit6904: store i64 %t26, ptr %a22 br label %find.end6906 find.next6905: %t34 = add i64 %t26, 1 store i64 %t34, ptr %a25 br label %find.cond6902 find.end6906: %t35 = load i64, ptr %a22 store i64 %t35, ptr %a36 %t37 = load i64, ptr %a36 %t38 = icmp slt i64 %t37, 0 br i1 %t38, label %then6907, label %endif6909 then6907: %t39 = load ptr, ptr %a1 %t40 = load %S.ast.Node, ptr %a4 %t41 = getelementptr inbounds %S.gen.SumDef, ptr %a18, i32 0, i32 1 %t42 = load { ptr, i64, i64 }, ptr %t41 store { ptr, i64, i64 } { ptr @.str.4440, i64 9, i64 0 }, ptr %a44 store { ptr, i64, i64 } %t42, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a43 store { ptr, i64, i64 } %t46, ptr %a48 store { ptr, i64, i64 } { ptr @.str.4441, i64 17, i64 0 }, ptr %a49 call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) store { ptr, i64, i64 } %t46, ptr %a50 call void @finch_str_drop(ptr %a50) %t51 = load { ptr, i64, i64 }, ptr %a47 %t52 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t51, ptr %a54 store { ptr, i64, i64 } %t52, ptr %a55 call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) store { ptr, i64, i64 } %t51, ptr %a56 call void @finch_str_drop(ptr %a56) %t57 = load { ptr, i64, i64 }, ptr %a53 store { ptr, i64, i64 } %t57, ptr %a59 store { ptr, i64, i64 } { ptr @.str.4442, i64 11, i64 0 }, ptr %a60 call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) store { ptr, i64, i64 } %t57, ptr %a61 call void @finch_str_drop(ptr %a61) %t62 = load { ptr, i64, i64 }, ptr %a58 %t63 = getelementptr inbounds %S.gen.SumDef, ptr %a18, i32 0, i32 2 %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4443, i64 2, i64 0 }, ptr %a65 call void @finch_str_join(ptr %a66, ptr %t63, ptr %a65) %t67 = load { ptr, i64, i64 }, ptr %a66 store { ptr, i64, i64 } %t62, ptr %a69 store { ptr, i64, i64 } %t67, ptr %a70 call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) store { ptr, i64, i64 } %t62, ptr %a71 call void @finch_str_drop(ptr %a71) store { ptr, i64, i64 } %t67, ptr %a72 call void @finch_str_drop(ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a68 store { ptr, i64, i64 } %t73, ptr %a75 store { ptr, i64, i64 } { ptr @.str.4444, i64 1, i64 0 }, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) store { ptr, i64, i64 } %t73, ptr %a77 call void @finch_str_drop(ptr %a77) %t78 = load { ptr, i64, i64 }, ptr %a74 call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t78) store { ptr, i64, i64 } %t78, ptr %a79 call void @finch_str_drop(ptr %a79) br label %endif6909 endif6909: %t80 = load i64, ptr %a36 call void @finch.drop.S_gen_SumDef(ptr %a18) ret i64 %t80 } define internal %S.gen.Val @finch.gen.sumMake(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, %S.ast.Node %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca %S.ast.Node, align 16 %a16 = alloca %S.gen.SumDef, align 16 %a17 = alloca %S.gen.SumDef, align 16 %a19 = alloca %S.gen.SumDef, align 16 %a25 = alloca i64, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca i64, align 16 %a178 = alloca %S.ast.Node, align 16 %a179 = alloca %S.ast.Node, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 store %S.ast.Node %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic6910, label %ok6911 panic6910: call void @finch_panic(ptr @.str.4445, i64 3814, ptr @.str.4446) unreachable ok6911: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 22 %t9 = load i64, ptr %a2 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 br i1 %t12, label %range6912, label %inrange6913 range6912: call void @finch_panic_index(ptr @.str.4447, i64 3814, i64 %t9, i64 %t11) unreachable inrange6913: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.SumDef, ptr %t13, i64 %t9 %t15 = load %S.gen.SumDef, ptr %t14 store %S.gen.SumDef %t15, ptr %a16 call void @finch.copy.S_gen_SumDef(ptr %a17, ptr %a16) %t18 = load %S.gen.SumDef, ptr %a17 store %S.gen.SumDef %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = load i64, ptr %a2 %t22 = load { ptr, i64, i64 }, ptr %a3 %t23 = load %S.ast.Node, ptr %a5 %t24 = call i64 @finch.gen.sumVariant(ptr %t20, i64 %t21, { ptr, i64, i64 } %t22, %S.ast.Node %t23) store i64 %t24, ptr %a25 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t27 = load i64, ptr %t26 %t28 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 3 %t29 = load i64, ptr %a25 %t30 = load { ptr, i64, i64 }, ptr %t28 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 %t29, %t31 br i1 %t32, label %range6914, label %inrange6915 range6914: call void @finch_panic_index(ptr @.str.4448, i64 3816, i64 %t29, i64 %t31) unreachable inrange6915: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds i64, ptr %t33, i64 %t29 %t35 = load i64, ptr %t34 %t36 = icmp ne i64 %t27, %t35 br i1 %t36, label %then6916, label %endif6918 then6916: %t37 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 3 %t38 = load i64, ptr %a25 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 br i1 %t41, label %range6919, label %inrange6920 range6919: call void @finch_panic_index(ptr @.str.4449, i64 3817, i64 %t38, i64 %t40) unreachable inrange6920: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds i64, ptr %t42, i64 %t38 %t44 = load i64, ptr %t43 %t45 = icmp eq i64 %t44, 0 br i1 %t45, label %then6921, label %endif6923 then6921: %t46 = load ptr, ptr %a1 %t47 = load %S.ast.Node, ptr %a5 %t48 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t48, ptr %a50 store { ptr, i64, i64 } { ptr @.str.4450, i64 22, i64 0 }, ptr %a51 call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) %t52 = load { ptr, i64, i64 }, ptr %a49 %t53 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 1 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t52, ptr %a56 store { ptr, i64, i64 } %t54, ptr %a57 call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) store { ptr, i64, i64 } %t52, ptr %a58 call void @finch_str_drop(ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a55 store { ptr, i64, i64 } %t59, ptr %a61 store { ptr, i64, i64 } { ptr @.str.4451, i64 1, i64 0 }, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) store { ptr, i64, i64 } %t59, ptr %a63 call void @finch_str_drop(ptr %a63) %t64 = load { ptr, i64, i64 }, ptr %a60 %t65 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t64, ptr %a67 store { ptr, i64, i64 } %t65, ptr %a68 call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) store { ptr, i64, i64 } %t64, ptr %a69 call void @finch_str_drop(ptr %a69) %t70 = load { ptr, i64, i64 }, ptr %a66 call void @finch.gen.fail(ptr %t46, %S.ast.Node %t47, { ptr, i64, i64 } %t70) store { ptr, i64, i64 } %t70, ptr %a71 call void @finch_str_drop(ptr %a71) br label %endif6923 endif6923: %t72 = load ptr, ptr %a1 %t73 = load %S.ast.Node, ptr %a5 %t74 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t74, ptr %a76 store { ptr, i64, i64 } { ptr @.str.4452, i64 7, i64 0 }, ptr %a77 call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) %t78 = load { ptr, i64, i64 }, ptr %a75 %t79 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 3 %t80 = load i64, ptr %a25 %t81 = load { ptr, i64, i64 }, ptr %t79 %t82 = extractvalue { ptr, i64, i64 } %t81, 1 %t83 = icmp uge i64 %t80, %t82 br i1 %t83, label %range6924, label %inrange6925 range6924: call void @finch_panic_index(ptr @.str.4453, i64 3820, i64 %t80, i64 %t82) unreachable inrange6925: %t84 = extractvalue { ptr, i64, i64 } %t81, 0 %t85 = getelementptr inbounds i64, ptr %t84, i64 %t80 %t86 = load i64, ptr %t85 call void @finch_str_from_int(ptr %a87, i64 %t86) %t88 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t78, ptr %a90 store { ptr, i64, i64 } %t88, ptr %a91 call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) store { ptr, i64, i64 } %t78, ptr %a92 call void @finch_str_drop(ptr %a92) store { ptr, i64, i64 } %t88, ptr %a93 call void @finch_str_drop(ptr %a93) %t94 = load { ptr, i64, i64 }, ptr %a89 store { ptr, i64, i64 } %t94, ptr %a96 store { ptr, i64, i64 } { ptr @.str.4454, i64 19, i64 0 }, ptr %a97 call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) store { ptr, i64, i64 } %t94, ptr %a98 call void @finch_str_drop(ptr %a98) %t99 = load { ptr, i64, i64 }, ptr %a95 %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t101 = load i64, ptr %t100 call void @finch_str_from_int(ptr %a102, i64 %t101) %t103 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t99, ptr %a105 store { ptr, i64, i64 } %t103, ptr %a106 call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) store { ptr, i64, i64 } %t99, ptr %a107 call void @finch_str_drop(ptr %a107) store { ptr, i64, i64 } %t103, ptr %a108 call void @finch_str_drop(ptr %a108) %t109 = load { ptr, i64, i64 }, ptr %a104 store { ptr, i64, i64 } %t109, ptr %a111 store { ptr, i64, i64 } { ptr @.str.4455, i64 2, i64 0 }, ptr %a112 call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) store { ptr, i64, i64 } %t109, ptr %a113 call void @finch_str_drop(ptr %a113) %t114 = load { ptr, i64, i64 }, ptr %a110 %t115 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 1 %t116 = load { ptr, i64, i64 }, ptr %t115 store { ptr, i64, i64 } %t114, ptr %a118 store { ptr, i64, i64 } %t116, ptr %a119 call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119) store { ptr, i64, i64 } %t114, ptr %a120 call void @finch_str_drop(ptr %a120) %t121 = load { ptr, i64, i64 }, ptr %a117 store { ptr, i64, i64 } %t121, ptr %a123 store { ptr, i64, i64 } { ptr @.str.4456, i64 1, i64 0 }, ptr %a124 call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) store { ptr, i64, i64 } %t121, ptr %a125 call void @finch_str_drop(ptr %a125) %t126 = load { ptr, i64, i64 }, ptr %a122 %t127 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t126, ptr %a129 store { ptr, i64, i64 } %t127, ptr %a130 call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) store { ptr, i64, i64 } %t126, ptr %a131 call void @finch_str_drop(ptr %a131) %t132 = load { ptr, i64, i64 }, ptr %a128 store { ptr, i64, i64 } %t132, ptr %a134 store { ptr, i64, i64 } { ptr @.str.4457, i64 5, i64 0 }, ptr %a135 call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) store { ptr, i64, i64 } %t132, ptr %a136 call void @finch_str_drop(ptr %a136) %t137 = load { ptr, i64, i64 }, ptr %a133 call void @finch.gen.fail(ptr %t72, %S.ast.Node %t73, { ptr, i64, i64 } %t137) store { ptr, i64, i64 } %t137, ptr %a138 call void @finch_str_drop(ptr %a138) br label %endif6918 endif6918: store { ptr, i64, i64 } zeroinitializer, ptr %a139 store { ptr, i64, i64 } zeroinitializer, ptr %a140 %t141 = getelementptr inbounds { ptr, i64, i64 }, ptr %a139, i32 0, i32 1 %t142 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.4458, i64 3, i64 0 }, 0 %t143 = load i64, ptr %a25 call void @finch_str_from_int(ptr %a144, i64 %t143) %t145 = load { ptr, i64, i64 }, ptr %a144 %t146 = insertvalue %S.ast.Node %t142, { ptr, i64, i64 } %t145, 4 %t147 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 11 %t148 = load i64, ptr %t147 %t149 = insertvalue %S.ast.Node %t146, i64 %t148, 11 %t150 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 12 %t151 = load i64, ptr %t150 %t152 = insertvalue %S.ast.Node %t149, i64 %t151, 12 %t153 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 13 %t154 = load i64, ptr %t153 %t155 = insertvalue %S.ast.Node %t152, i64 %t154, 13 %t156 = load i64, ptr %t141 %t157 = add i64 %t156, 1 call void @finch_arr_reserve(ptr %a139, i64 %t157, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t158 = load ptr, ptr %a139 %t159 = getelementptr inbounds %S.ast.Node, ptr %t158, i64 %t156 store %S.ast.Node %t155, ptr %t159 store i64 %t157, ptr %t141 %t160 = getelementptr inbounds { ptr, i64, i64 }, ptr %a140, i32 0, i32 1 %t161 = load i64, ptr %t160 %t162 = add i64 %t161, 1 call void @finch_arr_reserve(ptr %a140, i64 %t162, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t163 = load ptr, ptr %a140 %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %t163, i64 %t161 store { ptr, i64, i64 } { ptr @.str.4459, i64 3, i64 0 }, ptr %t164 store i64 %t162, ptr %t160 %t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t166 = load i64, ptr %t165 store i64 0, ptr %a167 br label %for.cond6926 for.cond6926: %t168 = load i64, ptr %a167 %t169 = icmp slt i64 %t168, %t166 br i1 %t169, label %for.body6927, label %for.end6929 for.body6927: %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %a139, i32 0, i32 1 %t171 = load i64, ptr %a167 %t172 = load { ptr, i64, i64 }, ptr %a4 %t173 = extractvalue { ptr, i64, i64 } %t172, 1 %t174 = icmp uge i64 %t171, %t173 br i1 %t174, label %range6930, label %inrange6931 range6930: call void @finch_panic_index(ptr @.str.4460, i64 3827, i64 %t171, i64 %t173) unreachable inrange6931: %t175 = extractvalue { ptr, i64, i64 } %t172, 0 %t176 = getelementptr inbounds %S.ast.Node, ptr %t175, i64 %t171 %t177 = load %S.ast.Node, ptr %t176 store %S.ast.Node %t177, ptr %a178 call void @finch.copy.S_ast_Node(ptr %a179, ptr %a178) %t180 = load %S.ast.Node, ptr %a179 %t181 = load i64, ptr %t170 %t182 = add i64 %t181, 1 call void @finch_arr_reserve(ptr %a139, i64 %t182, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t183 = load ptr, ptr %a139 %t184 = getelementptr inbounds %S.ast.Node, ptr %t183, i64 %t181 store %S.ast.Node %t180, ptr %t184 store i64 %t182, ptr %t170 %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %a140, i32 0, i32 1 %t186 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t186, ptr %a188 store { ptr, i64, i64 } { ptr @.str.4461, i64 1, i64 0 }, ptr %a189 call void @finch_str_concat(ptr %a187, ptr %a188, ptr %a189) %t190 = load { ptr, i64, i64 }, ptr %a187 %t191 = load i64, ptr %a167 call void @finch_str_from_int(ptr %a192, i64 %t191) %t193 = load { ptr, i64, i64 }, ptr %a192 store { ptr, i64, i64 } %t190, ptr %a195 store { ptr, i64, i64 } %t193, ptr %a196 call void @finch_str_concat(ptr %a194, ptr %a195, ptr %a196) store { ptr, i64, i64 } %t190, ptr %a197 call void @finch_str_drop(ptr %a197) store { ptr, i64, i64 } %t193, ptr %a198 call void @finch_str_drop(ptr %a198) %t199 = load { ptr, i64, i64 }, ptr %a194 %t200 = load i64, ptr %t185 %t201 = add i64 %t200, 1 call void @finch_arr_reserve(ptr %a140, i64 %t201, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t202 = load ptr, ptr %a140 %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i64 %t200 store { ptr, i64, i64 } %t199, ptr %t203 store i64 %t201, ptr %t185 br label %for.step6928 for.step6928: %t204 = load i64, ptr %a167 %t205 = add i64 %t204, 1 store i64 %t205, ptr %a167 br label %for.cond6926 for.end6929: %t206 = load ptr, ptr %a1 %t207 = load %S.ast.Node, ptr %a5 %t208 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 12 %t209 = load i64, ptr %t208 %t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t211 = load i64, ptr %t210 %t212 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 1 %t213 = load { ptr, i64, i64 }, ptr %t212 store { ptr, i64, i64 } { ptr @.str.4462, i64 9, i64 0 }, ptr %a215 store { ptr, i64, i64 } %t213, ptr %a216 call void @finch_str_concat(ptr %a214, ptr %a215, ptr %a216) %t217 = load { ptr, i64, i64 }, ptr %a214 store { ptr, i64, i64 } %t217, ptr %a219 store { ptr, i64, i64 } { ptr @.str.4463, i64 1, i64 0 }, ptr %a220 call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) store { ptr, i64, i64 } %t217, ptr %a221 call void @finch_str_drop(ptr %a221) %t222 = load { ptr, i64, i64 }, ptr %a218 %t223 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t222, ptr %a225 store { ptr, i64, i64 } %t223, ptr %a226 call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) store { ptr, i64, i64 } %t222, ptr %a227 call void @finch_str_drop(ptr %a227) %t228 = load { ptr, i64, i64 }, ptr %a224 store { ptr, i64, i64 } %t228, ptr %a230 store { ptr, i64, i64 } { ptr @.str.4464, i64 4, i64 0 }, ptr %a231 call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) store { ptr, i64, i64 } %t228, ptr %a232 call void @finch_str_drop(ptr %a232) %t233 = load { ptr, i64, i64 }, ptr %a229 call void @finch.gen.noteRef(ptr %t206, %S.ast.Node %t207, i64 %t209, i64 %t211, { ptr, i64, i64 } %t233, { ptr, i64, i64 } { ptr @.str.4465, i64 0, i64 0 }, i64 0, i64 0) store { ptr, i64, i64 } %t233, ptr %a234 call void @finch_str_drop(ptr %a234) %t235 = load ptr, ptr %a1 %t236 = load ptr, ptr %a1 %t237 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 0 %t238 = load { ptr, i64, i64 }, ptr %t237 %t239 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 1 %t240 = load { ptr, i64, i64 }, ptr %t239 %t241 = call i64 @finch.gen.findStruct(ptr %t236, { ptr, i64, i64 } %t238, { ptr, i64, i64 } %t240) %t242 = load { ptr, i64, i64 }, ptr %a139 %t243 = load { ptr, i64, i64 }, ptr %a140 %t244 = load %S.ast.Node, ptr %a5 %t245 = call %S.gen.Val @finch.gen.construct(ptr %t235, i64 %t241, { ptr, i64, i64 } %t242, { ptr, i64, i64 } %t243, %S.ast.Node %t244) call void @finch.drop.arr_str(ptr %a140) call void @finch.drop.arr_S_ast_Node(ptr %a139) call void @finch.drop.S_gen_SumDef(ptr %a19) ret %S.gen.Val %t245 } define internal %S.gen.SumPat @finch.gen.sumPattern(ptr %p0, %S.ast.Node %p1, i64 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i64, align 16 %a14 = alloca %S.gen.SumDef, align 16 %a15 = alloca %S.gen.SumDef, align 16 %a17 = alloca %S.gen.SumDef, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca i64, align 16 %a124 = alloca %S.ast.Node, align 16 %a125 = alloca %S.ast.Node, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca i64, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca i64, align 16 %a251 = alloca %S.ast.Node, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i64 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic6932, label %ok6933 panic6932: call void @finch_panic(ptr @.str.4466, i64 3836, ptr @.str.4467) unreachable ok6933: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 22 %t7 = load i64, ptr %a3 %t8 = load { ptr, i64, i64 }, ptr %t6 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 br i1 %t10, label %range6934, label %inrange6935 range6934: call void @finch_panic_index(ptr @.str.4468, i64 3836, i64 %t7, i64 %t9) unreachable inrange6935: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.SumDef, ptr %t11, i64 %t7 %t13 = load %S.gen.SumDef, ptr %t12 store %S.gen.SumDef %t13, ptr %a14 call void @finch.copy.S_gen_SumDef(ptr %a15, ptr %a14) %t16 = load %S.gen.SumDef, ptr %a15 store %S.gen.SumDef %t16, ptr %a17 store { ptr, i64, i64 } { ptr @.str.4469, i64 0, i64 0 }, ptr %a18 store { ptr, i64, i64 } zeroinitializer, ptr %a19 %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a22 store { ptr, i64, i64 } { ptr @.str.4470, i64 3, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) %t25 = icmp ne i32 %t24, 0 br label %logic.from6936 logic.from6936: br i1 %t25, label %logic.rhs6937, label %logic.end6938 logic.rhs6937: %t26 = load ptr, ptr %a1 %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = call i64 @finch.gen.lookup(ptr %t26, { ptr, i64, i64 } %t28) %t30 = icmp slt i64 %t29, 0 br label %logic.rend6939 logic.rend6939: br label %logic.end6938 logic.end6938: %t31 = phi i1 [ false, %logic.from6936 ], [ %t30, %logic.rend6939 ] br i1 %t31, label %then6940, label %else6941 then6940: %t32 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 call void @finch_str_copy(ptr %a35, ptr %a34) %t36 = load { ptr, i64, i64 }, ptr %a35 %t37 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t36, ptr %a18 store { ptr, i64, i64 } %t37, ptr %a38 call void @finch_str_drop(ptr %a38) br label %endif6942 else6941: %t39 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t40 = load { ptr, i64, i64 }, ptr %t39 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } { ptr @.str.4471, i64 4, i64 0 }, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 br i1 %t44, label %then6943, label %else6944 then6943: %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t46 = load { ptr, i64, i64 }, ptr %t45 store { ptr, i64, i64 } %t46, ptr %a47 call void @finch_str_copy(ptr %a48, ptr %a47) %t49 = load { ptr, i64, i64 }, ptr %a48 %t50 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t49, ptr %a18 store { ptr, i64, i64 } %t50, ptr %a51 call void @finch_str_drop(ptr %a51) %t52 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t53 = load { ptr, i64, i64 }, ptr %t52 store { ptr, i64, i64 } %t53, ptr %a54 call void @finch.copy.arr_S_ast_Node(ptr %a55, ptr %a54) %t56 = load { ptr, i64, i64 }, ptr %a55 %t57 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t56, ptr %a19 store { ptr, i64, i64 } %t57, ptr %a58 call void @finch.drop.arr_S_ast_Node(ptr %a58) br label %endif6945 else6944: %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } %t60, ptr %a61 store { ptr, i64, i64 } { ptr @.str.4472, i64 6, i64 0 }, ptr %a62 %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) %t64 = icmp ne i32 %t63, 0 br label %logic.from6946 logic.from6946: br i1 %t64, label %logic.rhs6947, label %logic.end6948 logic.rhs6947: %t65 = load ptr, ptr %a1 %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t67 = load { ptr, i64, i64 }, ptr %t66 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 0, %t68 br i1 %t69, label %range6949, label %inrange6950 range6949: call void @finch_panic_index(ptr @.str.4473, i64 3844, i64 0, i64 %t68) unreachable inrange6950: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 %t72 = load %S.ast.Node, ptr %t71 %t73 = call i64 @finch.gen.sumNamed(ptr %t65, %S.ast.Node %t72) %t74 = load i64, ptr %a3 %t75 = icmp eq i64 %t73, %t74 br label %logic.rend6951 logic.rend6951: br label %logic.end6948 logic.end6948: %t76 = phi i1 [ false, %logic.from6946 ], [ %t75, %logic.rend6951 ] br i1 %t76, label %then6952, label %else6953 then6952: %t77 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t78 = load { ptr, i64, i64 }, ptr %t77 store { ptr, i64, i64 } %t78, ptr %a79 call void @finch_str_copy(ptr %a80, ptr %a79) %t81 = load { ptr, i64, i64 }, ptr %a80 %t82 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t81, ptr %a18 store { ptr, i64, i64 } %t82, ptr %a83 call void @finch_str_drop(ptr %a83) br label %endif6954 else6953: %t84 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t85 = load { ptr, i64, i64 }, ptr %t84 store { ptr, i64, i64 } %t85, ptr %a86 store { ptr, i64, i64 } { ptr @.str.4474, i64 6, i64 0 }, ptr %a87 %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) %t89 = icmp ne i32 %t88, 0 br label %logic.from6955 logic.from6955: br i1 %t89, label %logic.rhs6956, label %logic.end6957 logic.rhs6956: %t90 = load ptr, ptr %a1 %t91 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t92 = load { ptr, i64, i64 }, ptr %t91 %t93 = extractvalue { ptr, i64, i64 } %t92, 1 %t94 = icmp uge i64 0, %t93 br i1 %t94, label %range6958, label %inrange6959 range6958: call void @finch_panic_index(ptr @.str.4475, i64 3846, i64 0, i64 %t93) unreachable inrange6959: %t95 = extractvalue { ptr, i64, i64 } %t92, 0 %t96 = getelementptr inbounds %S.ast.Node, ptr %t95, i64 0 %t97 = load %S.ast.Node, ptr %t96 %t98 = call i64 @finch.gen.sumNamed(ptr %t90, %S.ast.Node %t97) %t99 = load i64, ptr %a3 %t100 = icmp eq i64 %t98, %t99 br label %logic.rend6960 logic.rend6960: br label %logic.end6957 logic.end6957: %t101 = phi i1 [ false, %logic.from6955 ], [ %t100, %logic.rend6960 ] br i1 %t101, label %then6961, label %else6962 then6961: %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t103 = load { ptr, i64, i64 }, ptr %t102 store { ptr, i64, i64 } %t103, ptr %a104 call void @finch_str_copy(ptr %a105, ptr %a104) %t106 = load { ptr, i64, i64 }, ptr %a105 %t107 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t106, ptr %a18 store { ptr, i64, i64 } %t107, ptr %a108 call void @finch_str_drop(ptr %a108) %t109 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t110 = getelementptr inbounds { ptr, i64, i64 }, ptr %t109, i32 0, i32 1 %t111 = load i64, ptr %t110 store i64 1, ptr %a112 br label %for.cond6964 for.cond6964: %t113 = load i64, ptr %a112 %t114 = icmp slt i64 %t113, %t111 br i1 %t114, label %for.body6965, label %for.end6967 for.body6965: %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t116 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t117 = load i64, ptr %a112 %t118 = load { ptr, i64, i64 }, ptr %t116 %t119 = extractvalue { ptr, i64, i64 } %t118, 1 %t120 = icmp uge i64 %t117, %t119 br i1 %t120, label %range6968, label %inrange6969 range6968: call void @finch_panic_index(ptr @.str.4476, i64 3849, i64 %t117, i64 %t119) unreachable inrange6969: %t121 = extractvalue { ptr, i64, i64 } %t118, 0 %t122 = getelementptr inbounds %S.ast.Node, ptr %t121, i64 %t117 %t123 = load %S.ast.Node, ptr %t122 store %S.ast.Node %t123, ptr %a124 call void @finch.copy.S_ast_Node(ptr %a125, ptr %a124) %t126 = load %S.ast.Node, ptr %a125 %t127 = load i64, ptr %t115 %t128 = add i64 %t127, 1 call void @finch_arr_reserve(ptr %a19, i64 %t128, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t129 = load ptr, ptr %a19 %t130 = getelementptr inbounds %S.ast.Node, ptr %t129, i64 %t127 store %S.ast.Node %t126, ptr %t130 store i64 %t128, ptr %t115 br label %for.step6966 for.step6966: %t131 = load i64, ptr %a112 %t132 = add i64 %t131, 1 store i64 %t132, ptr %a112 br label %for.cond6964 for.end6967: br label %endif6963 else6962: %t133 = load ptr, ptr %a1 %t134 = load %S.ast.Node, ptr %a2 %t135 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 1 %t136 = load { ptr, i64, i64 }, ptr %t135 store { ptr, i64, i64 } { ptr @.str.4477, i64 33, i64 0 }, ptr %a138 store { ptr, i64, i64 } %t136, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) %t140 = load { ptr, i64, i64 }, ptr %a137 store { ptr, i64, i64 } %t140, ptr %a142 store { ptr, i64, i64 } { ptr @.str.4478, i64 10, i64 0 }, ptr %a143 call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143) store { ptr, i64, i64 } %t140, ptr %a144 call void @finch_str_drop(ptr %a144) %t145 = load { ptr, i64, i64 }, ptr %a141 %t146 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 2 %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4479, i64 2, i64 0 }, ptr %a148 call void @finch_str_join(ptr %a149, ptr %t146, ptr %a148) %t150 = load { ptr, i64, i64 }, ptr %a149 store { ptr, i64, i64 } %t145, ptr %a152 store { ptr, i64, i64 } %t150, ptr %a153 call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) store { ptr, i64, i64 } %t145, ptr %a154 call void @finch_str_drop(ptr %a154) store { ptr, i64, i64 } %t150, ptr %a155 call void @finch_str_drop(ptr %a155) %t156 = load { ptr, i64, i64 }, ptr %a151 store { ptr, i64, i64 } %t156, ptr %a158 store { ptr, i64, i64 } { ptr @.str.4480, i64 1, i64 0 }, ptr %a159 call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159) store { ptr, i64, i64 } %t156, ptr %a160 call void @finch_str_drop(ptr %a160) %t161 = load { ptr, i64, i64 }, ptr %a157 call void @finch.gen.fail(ptr %t133, %S.ast.Node %t134, { ptr, i64, i64 } %t161) store { ptr, i64, i64 } %t161, ptr %a162 call void @finch_str_drop(ptr %a162) br label %endif6963 endif6963: br label %endif6954 endif6954: br label %endif6945 endif6945: br label %endif6942 endif6942: %t163 = load ptr, ptr %a1 %t164 = load i64, ptr %a3 %t165 = load { ptr, i64, i64 }, ptr %a18 %t166 = load %S.ast.Node, ptr %a2 %t167 = call i64 @finch.gen.sumVariant(ptr %t163, i64 %t164, { ptr, i64, i64 } %t165, %S.ast.Node %t166) store i64 %t167, ptr %a168 %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t170 = load i64, ptr %t169 %t171 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 3 %t172 = load i64, ptr %a168 %t173 = load { ptr, i64, i64 }, ptr %t171 %t174 = extractvalue { ptr, i64, i64 } %t173, 1 %t175 = icmp uge i64 %t172, %t174 br i1 %t175, label %range6970, label %inrange6971 range6970: call void @finch_panic_index(ptr @.str.4481, i64 3855, i64 %t172, i64 %t174) unreachable inrange6971: %t176 = extractvalue { ptr, i64, i64 } %t173, 0 %t177 = getelementptr inbounds i64, ptr %t176, i64 %t172 %t178 = load i64, ptr %t177 %t179 = icmp ne i64 %t170, %t178 br i1 %t179, label %then6972, label %endif6974 then6972: %t180 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 3 %t181 = load i64, ptr %a168 %t182 = load { ptr, i64, i64 }, ptr %t180 %t183 = extractvalue { ptr, i64, i64 } %t182, 1 %t184 = icmp uge i64 %t181, %t183 br i1 %t184, label %range6975, label %inrange6976 range6975: call void @finch_panic_index(ptr @.str.4482, i64 3856, i64 %t181, i64 %t183) unreachable inrange6976: %t185 = extractvalue { ptr, i64, i64 } %t182, 0 %t186 = getelementptr inbounds i64, ptr %t185, i64 %t181 %t187 = load i64, ptr %t186 %t188 = icmp eq i64 %t187, 0 br i1 %t188, label %then6977, label %endif6979 then6977: %t189 = load ptr, ptr %a1 %t190 = load %S.ast.Node, ptr %a2 %t191 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t191, ptr %a193 store { ptr, i64, i64 } { ptr @.str.4483, i64 27, i64 0 }, ptr %a194 call void @finch_str_concat(ptr %a192, ptr %a193, ptr %a194) %t195 = load { ptr, i64, i64 }, ptr %a192 %t196 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t195, ptr %a198 store { ptr, i64, i64 } %t196, ptr %a199 call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199) store { ptr, i64, i64 } %t195, ptr %a200 call void @finch_str_drop(ptr %a200) %t201 = load { ptr, i64, i64 }, ptr %a197 call void @finch.gen.fail(ptr %t189, %S.ast.Node %t190, { ptr, i64, i64 } %t201) store { ptr, i64, i64 } %t201, ptr %a202 call void @finch_str_drop(ptr %a202) br label %endif6979 endif6979: %t203 = load ptr, ptr %a1 %t204 = load %S.ast.Node, ptr %a2 %t205 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t205, ptr %a207 store { ptr, i64, i64 } { ptr @.str.4484, i64 7, i64 0 }, ptr %a208 call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) %t209 = load { ptr, i64, i64 }, ptr %a206 %t210 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 3 %t211 = load i64, ptr %a168 %t212 = load { ptr, i64, i64 }, ptr %t210 %t213 = extractvalue { ptr, i64, i64 } %t212, 1 %t214 = icmp uge i64 %t211, %t213 br i1 %t214, label %range6980, label %inrange6981 range6980: call void @finch_panic_index(ptr @.str.4485, i64 3859, i64 %t211, i64 %t213) unreachable inrange6981: %t215 = extractvalue { ptr, i64, i64 } %t212, 0 %t216 = getelementptr inbounds i64, ptr %t215, i64 %t211 %t217 = load i64, ptr %t216 call void @finch_str_from_int(ptr %a218, i64 %t217) %t219 = load { ptr, i64, i64 }, ptr %a218 store { ptr, i64, i64 } %t209, ptr %a221 store { ptr, i64, i64 } %t219, ptr %a222 call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) store { ptr, i64, i64 } %t209, ptr %a223 call void @finch_str_drop(ptr %a223) store { ptr, i64, i64 } %t219, ptr %a224 call void @finch_str_drop(ptr %a224) %t225 = load { ptr, i64, i64 }, ptr %a220 store { ptr, i64, i64 } %t225, ptr %a227 store { ptr, i64, i64 } { ptr @.str.4486, i64 27, i64 0 }, ptr %a228 call void @finch_str_concat(ptr %a226, ptr %a227, ptr %a228) store { ptr, i64, i64 } %t225, ptr %a229 call void @finch_str_drop(ptr %a229) %t230 = load { ptr, i64, i64 }, ptr %a226 %t231 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t230, ptr %a233 store { ptr, i64, i64 } %t231, ptr %a234 call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) store { ptr, i64, i64 } %t230, ptr %a235 call void @finch_str_drop(ptr %a235) %t236 = load { ptr, i64, i64 }, ptr %a232 store { ptr, i64, i64 } %t236, ptr %a238 store { ptr, i64, i64 } { ptr @.str.4487, i64 27, i64 0 }, ptr %a239 call void @finch_str_concat(ptr %a237, ptr %a238, ptr %a239) store { ptr, i64, i64 } %t236, ptr %a240 call void @finch_str_drop(ptr %a240) %t241 = load { ptr, i64, i64 }, ptr %a237 call void @finch.gen.fail(ptr %t203, %S.ast.Node %t204, { ptr, i64, i64 } %t241) store { ptr, i64, i64 } %t241, ptr %a242 call void @finch_str_drop(ptr %a242) br label %endif6974 endif6974: store i64 0, ptr %a243 br label %each.cond6982 each.cond6982: %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t245 = load i64, ptr %t244 %t246 = load i64, ptr %a243 %t247 = icmp slt i64 %t246, %t245 br i1 %t247, label %each.body6983, label %each.end6985 each.body6983: %t248 = load ptr, ptr %a19 %t249 = getelementptr inbounds %S.ast.Node, ptr %t248, i64 %t246 %t250 = load %S.ast.Node, ptr %t249 store %S.ast.Node %t250, ptr %a251 %t252 = getelementptr inbounds %S.ast.Node, ptr %a251, i32 0, i32 0 %t253 = load { ptr, i64, i64 }, ptr %t252 store { ptr, i64, i64 } %t253, ptr %a254 store { ptr, i64, i64 } { ptr @.str.4488, i64 3, i64 0 }, ptr %a255 %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) %t257 = icmp eq i32 %t256, 0 br i1 %t257, label %then6986, label %endif6988 then6986: %t258 = load ptr, ptr %a1 %t259 = load %S.ast.Node, ptr %a251 call void @finch.gen.fail(ptr %t258, %S.ast.Node %t259, { ptr, i64, i64 } { ptr @.str.4489, i64 50, i64 0 }) br label %endif6988 endif6988: br label %each.step6984 each.step6984: %t260 = load i64, ptr %a243 %t261 = add i64 %t260, 1 store i64 %t261, ptr %a243 br label %each.cond6982 each.end6985: %t262 = load i64, ptr %a168 %t263 = insertvalue %S.gen.SumPat zeroinitializer, i64 %t262, 0 %t264 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t264, ptr %a265 call void @finch.copy.arr_S_ast_Node(ptr %a266, ptr %a265) %t267 = load { ptr, i64, i64 }, ptr %a266 %t268 = insertvalue %S.gen.SumPat %t263, { ptr, i64, i64 } %t267, 1 call void @finch.drop.arr_S_ast_Node(ptr %a19) call void @finch_str_drop(ptr %a18) call void @finch.drop.S_gen_SumDef(ptr %a17) ret %S.gen.SumPat %t268 } define internal %S.gen.Val @finch.gen.enumValue(ptr %p0, %S.ast.Node %p1, i64 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i64, align 16 %a14 = alloca %S.gen.EnumDef, align 16 %a15 = alloca %S.gen.EnumDef, align 16 %a17 = alloca %S.gen.EnumDef, align 16 %a22 = alloca i64, align 16 %a25 = alloca i64, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca i64, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i64 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic6989, label %ok6990 panic6989: call void @finch_panic(ptr @.str.4490, i64 3871, ptr @.str.4491) unreachable ok6990: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 %t7 = load i64, ptr %a3 %t8 = load { ptr, i64, i64 }, ptr %t6 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 br i1 %t10, label %range6991, label %inrange6992 range6991: call void @finch_panic_index(ptr @.str.4492, i64 3871, i64 %t7, i64 %t9) unreachable inrange6992: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.EnumDef, ptr %t11, i64 %t7 %t13 = load %S.gen.EnumDef, ptr %t12 store %S.gen.EnumDef %t13, ptr %a14 call void @finch.copy.S_gen_EnumDef(ptr %a15, ptr %a14) %t16 = load %S.gen.EnumDef, ptr %a15 store %S.gen.EnumDef %t16, ptr %a17 %t18 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 2 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i32 0, i32 1 %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t21 = load { ptr, i64, i64 }, ptr %t20 store i64 -1, ptr %a22 %t23 = load i64, ptr %t19 %t24 = load ptr, ptr %t18 store i64 0, ptr %a25 br label %find.cond6993 find.cond6993: %t26 = load i64, ptr %a25 %t27 = icmp slt i64 %t26, %t23 br i1 %t27, label %find.body6994, label %find.end6997 find.body6994: %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t26 %t29 = load { ptr, i64, i64 }, ptr %t28 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } %t21, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 br i1 %t33, label %find.hit6995, label %find.next6996 find.hit6995: store i64 %t26, ptr %a22 br label %find.end6997 find.next6996: %t34 = add i64 %t26, 1 store i64 %t34, ptr %a25 br label %find.cond6993 find.end6997: %t35 = load i64, ptr %a22 store i64 %t35, ptr %a36 %t37 = load i64, ptr %a36 %t38 = icmp slt i64 %t37, 0 br i1 %t38, label %then6998, label %endif7000 then6998: %t39 = load ptr, ptr %a1 %t40 = load %S.ast.Node, ptr %a2 %t41 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t42 = load { ptr, i64, i64 }, ptr %t41 store { ptr, i64, i64 } { ptr @.str.4493, i64 9, i64 0 }, ptr %a44 store { ptr, i64, i64 } %t42, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a43 store { ptr, i64, i64 } %t46, ptr %a48 store { ptr, i64, i64 } { ptr @.str.4494, i64 17, i64 0 }, ptr %a49 call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) store { ptr, i64, i64 } %t46, ptr %a50 call void @finch_str_drop(ptr %a50) %t51 = load { ptr, i64, i64 }, ptr %a47 %t52 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t53 = load { ptr, i64, i64 }, ptr %t52 store { ptr, i64, i64 } %t51, ptr %a55 store { ptr, i64, i64 } %t53, ptr %a56 call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) store { ptr, i64, i64 } %t51, ptr %a57 call void @finch_str_drop(ptr %a57) %t58 = load { ptr, i64, i64 }, ptr %a54 store { ptr, i64, i64 } %t58, ptr %a60 store { ptr, i64, i64 } { ptr @.str.4495, i64 11, i64 0 }, ptr %a61 call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) store { ptr, i64, i64 } %t58, ptr %a62 call void @finch_str_drop(ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a59 %t64 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 2 %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4496, i64 2, i64 0 }, ptr %a66 call void @finch_str_join(ptr %a67, ptr %t64, ptr %a66) %t68 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t63, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) store { ptr, i64, i64 } %t63, ptr %a72 call void @finch_str_drop(ptr %a72) store { ptr, i64, i64 } %t68, ptr %a73 call void @finch_str_drop(ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t74, ptr %a76 store { ptr, i64, i64 } { ptr @.str.4497, i64 1, i64 0 }, ptr %a77 call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) store { ptr, i64, i64 } %t74, ptr %a78 call void @finch_str_drop(ptr %a78) %t79 = load { ptr, i64, i64 }, ptr %a75 call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t79) store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_drop(ptr %a80) br label %endif7000 endif7000: %t81 = load ptr, ptr %a1 %t82 = load %S.ast.Node, ptr %a2 %t83 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t84 = load i64, ptr %t83 %t85 = add i64 %t84, 1 %t86 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 %t88 = load i64, ptr %t87 %t89 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t90 = load { ptr, i64, i64 }, ptr %t89 store { ptr, i64, i64 } { ptr @.str.4498, i64 9, i64 0 }, ptr %a92 store { ptr, i64, i64 } %t90, ptr %a93 call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) %t94 = load { ptr, i64, i64 }, ptr %a91 store { ptr, i64, i64 } %t94, ptr %a96 store { ptr, i64, i64 } { ptr @.str.4499, i64 1, i64 0 }, ptr %a97 call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) store { ptr, i64, i64 } %t94, ptr %a98 call void @finch_str_drop(ptr %a98) %t99 = load { ptr, i64, i64 }, ptr %a95 %t100 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t101 = load { ptr, i64, i64 }, ptr %t100 store { ptr, i64, i64 } %t99, ptr %a103 store { ptr, i64, i64 } %t101, ptr %a104 call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) store { ptr, i64, i64 } %t99, ptr %a105 call void @finch_str_drop(ptr %a105) %t106 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t106, ptr %a108 store { ptr, i64, i64 } { ptr @.str.4500, i64 3, i64 0 }, ptr %a109 call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) store { ptr, i64, i64 } %t106, ptr %a110 call void @finch_str_drop(ptr %a110) %t111 = load { ptr, i64, i64 }, ptr %a107 %t112 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 %t113 = load i64, ptr %a36 %t114 = load { ptr, i64, i64 }, ptr %t112 %t115 = extractvalue { ptr, i64, i64 } %t114, 1 %t116 = icmp uge i64 %t113, %t115 br i1 %t116, label %range7001, label %inrange7002 range7001: call void @finch_panic_index(ptr @.str.4501, i64 3876, i64 %t113, i64 %t115) unreachable inrange7002: %t117 = extractvalue { ptr, i64, i64 } %t114, 0 %t118 = getelementptr inbounds i64, ptr %t117, i64 %t113 %t119 = load i64, ptr %t118 call void @finch_str_from_int(ptr %a120, i64 %t119) %t121 = load { ptr, i64, i64 }, ptr %a120 store { ptr, i64, i64 } %t111, ptr %a123 store { ptr, i64, i64 } %t121, ptr %a124 call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) store { ptr, i64, i64 } %t111, ptr %a125 call void @finch_str_drop(ptr %a125) store { ptr, i64, i64 } %t121, ptr %a126 call void @finch_str_drop(ptr %a126) %t127 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t127, ptr %a129 store { ptr, i64, i64 } { ptr @.str.4502, i64 4, i64 0 }, ptr %a130 call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) store { ptr, i64, i64 } %t127, ptr %a131 call void @finch_str_drop(ptr %a131) %t132 = load { ptr, i64, i64 }, ptr %a128 call void @finch.gen.noteRef(ptr %t81, %S.ast.Node %t82, i64 %t85, i64 %t88, { ptr, i64, i64 } %t132, { ptr, i64, i64 } { ptr @.str.4503, i64 0, i64 0 }, i64 0, i64 0) store { ptr, i64, i64 } %t132, ptr %a133 call void @finch_str_drop(ptr %a133) %t134 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 %t135 = load i64, ptr %a36 %t136 = load { ptr, i64, i64 }, ptr %t134 %t137 = extractvalue { ptr, i64, i64 } %t136, 1 %t138 = icmp uge i64 %t135, %t137 br i1 %t138, label %range7003, label %inrange7004 range7003: call void @finch_panic_index(ptr @.str.4504, i64 3877, i64 %t135, i64 %t137) unreachable inrange7004: %t139 = extractvalue { ptr, i64, i64 } %t136, 0 %t140 = getelementptr inbounds i64, ptr %t139, i64 %t135 %t141 = load i64, ptr %t140 call void @finch_str_from_int(ptr %a142, i64 %t141) %t143 = load { ptr, i64, i64 }, ptr %a142 %t144 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t143, 0 %t145 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.4505, i64 4, i64 0 }, 0 %t146 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t147 = load { ptr, i64, i64 }, ptr %t146 store { ptr, i64, i64 } %t147, ptr %a148 call void @finch_str_copy(ptr %a149, ptr %a148) %t150 = load { ptr, i64, i64 }, ptr %a149 %t151 = insertvalue %S.ast.Type %t145, { ptr, i64, i64 } %t150, 2 %t152 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 0 %t153 = load { ptr, i64, i64 }, ptr %t152 store { ptr, i64, i64 } %t153, ptr %a154 call void @finch_str_copy(ptr %a155, ptr %a154) %t156 = load { ptr, i64, i64 }, ptr %a155 %t157 = insertvalue %S.ast.Type %t151, { ptr, i64, i64 } %t156, 3 %t158 = insertvalue %S.gen.Val %t144, %S.ast.Type %t157, 1 call void @finch.drop.S_gen_EnumDef(ptr %a17) ret %S.gen.Val %t158 } define internal %S.gen.Ref @finch.gen.member(ptr %p0, %S.ast.Node %p1, i1 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i1, align 16 %a13 = alloca i64, align 16 %a25 = alloca i64, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca i64, align 16 %a157 = alloca %S.gen.Ref, align 16 %a161 = alloca %S.ast.Type, align 16 %a162 = alloca %S.ast.Type, align 16 %a164 = alloca %S.ast.Type, align 16 %a170 = alloca %S.ast.Type, align 16 %a171 = alloca %S.ast.Type, align 16 %a174 = alloca %S.ast.Type, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca %S.ast.Type, align 16 %a239 = alloca %S.ast.Type, align 16 %a241 = alloca %S.ast.Type, align 16 %a242 = alloca i1, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca i64, align 16 %a268 = alloca i64, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca %S.ast.Type, align 16 %a297 = alloca %S.ast.Type, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca %S.ast.Type, align 16 %a330 = alloca %S.ast.Type, align 16 %a335 = alloca %S.gen.Ref, align 16 %a337 = alloca %S.ast.Type, align 16 %a338 = alloca %S.ast.Type, align 16 %a341 = alloca %S.ast.Type, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a355 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca { ptr, i64, i64 }, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a382 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 %a438 = alloca { ptr, i64, i64 }, align 16 %a455 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a466 = alloca { ptr, i64, i64 }, align 16 %a467 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a480 = alloca { ptr, i64, i64 }, align 16 %a482 = alloca { ptr, i64, i64 }, align 16 %a485 = alloca { ptr, i64, i64 }, align 16 %a486 = alloca { ptr, i64, i64 }, align 16 %a496 = alloca %S.ast.Type, align 16 %a502 = alloca { ptr, i64, i64 }, align 16 %a503 = alloca { ptr, i64, i64 }, align 16 %a504 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a508 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca { ptr, i64, i64 }, align 16 %a512 = alloca { ptr, i64, i64 }, align 16 %a526 = alloca { ptr, i64, i64 }, align 16 %a527 = alloca { ptr, i64, i64 }, align 16 %a532 = alloca { ptr, i64, i64 }, align 16 %a533 = alloca { ptr, i64, i64 }, align 16 %a539 = alloca { ptr, i64, i64 }, align 16 %a540 = alloca { ptr, i64, i64 }, align 16 %a546 = alloca { ptr, i64, i64 }, align 16 %a547 = alloca { ptr, i64, i64 }, align 16 %a554 = alloca { ptr, i64, i64 }, align 16 %a555 = alloca { ptr, i64, i64 }, align 16 %a556 = alloca { ptr, i64, i64 }, align 16 %a558 = alloca { ptr, i64, i64 }, align 16 %a559 = alloca { ptr, i64, i64 }, align 16 %a560 = alloca { ptr, i64, i64 }, align 16 %a561 = alloca { ptr, i64, i64 }, align 16 %a563 = alloca { ptr, i64, i64 }, align 16 %a573 = alloca { ptr, i64, i64 }, align 16 %a574 = alloca { ptr, i64, i64 }, align 16 %a575 = alloca { ptr, i64, i64 }, align 16 %a576 = alloca { ptr, i64, i64 }, align 16 %a578 = alloca { ptr, i64, i64 }, align 16 %a579 = alloca { ptr, i64, i64 }, align 16 %a580 = alloca { ptr, i64, i64 }, align 16 %a581 = alloca { ptr, i64, i64 }, align 16 %a586 = alloca { ptr, i64, i64 }, align 16 %a587 = alloca { ptr, i64, i64 }, align 16 %a588 = alloca { ptr, i64, i64 }, align 16 %a589 = alloca { ptr, i64, i64 }, align 16 %a591 = alloca { ptr, i64, i64 }, align 16 %a592 = alloca { ptr, i64, i64 }, align 16 %a593 = alloca { ptr, i64, i64 }, align 16 %a594 = alloca { ptr, i64, i64 }, align 16 %a597 = alloca { ptr, i64, i64 }, align 16 %a598 = alloca { ptr, i64, i64 }, align 16 %a611 = alloca { ptr, i64, i64 }, align 16 %a612 = alloca { ptr, i64, i64 }, align 16 %a613 = alloca { ptr, i64, i64 }, align 16 %a614 = alloca { ptr, i64, i64 }, align 16 %a616 = alloca { ptr, i64, i64 }, align 16 %a617 = alloca { ptr, i64, i64 }, align 16 %a618 = alloca { ptr, i64, i64 }, align 16 %a619 = alloca { ptr, i64, i64 }, align 16 %a624 = alloca { ptr, i64, i64 }, align 16 %a625 = alloca { ptr, i64, i64 }, align 16 %a626 = alloca { ptr, i64, i64 }, align 16 %a627 = alloca { ptr, i64, i64 }, align 16 %a629 = alloca { ptr, i64, i64 }, align 16 %a630 = alloca { ptr, i64, i64 }, align 16 %a631 = alloca { ptr, i64, i64 }, align 16 %a632 = alloca { ptr, i64, i64 }, align 16 %a635 = alloca { ptr, i64, i64 }, align 16 %a636 = alloca { ptr, i64, i64 }, align 16 %a642 = alloca { ptr, i64, i64 }, align 16 %a643 = alloca { ptr, i64, i64 }, align 16 %a651 = alloca { ptr, i64, i64 }, align 16 %a652 = alloca { ptr, i64, i64 }, align 16 %a659 = alloca { ptr, i64, i64 }, align 16 %a660 = alloca { ptr, i64, i64 }, align 16 %a661 = alloca { ptr, i64, i64 }, align 16 %a662 = alloca { ptr, i64, i64 }, align 16 %a666 = alloca { ptr, i64, i64 }, align 16 %a667 = alloca { ptr, i64, i64 }, align 16 %a668 = alloca { ptr, i64, i64 }, align 16 %a669 = alloca { ptr, i64, i64 }, align 16 %a671 = alloca { ptr, i64, i64 }, align 16 %a672 = alloca { ptr, i64, i64 }, align 16 %a673 = alloca { ptr, i64, i64 }, align 16 %a674 = alloca { ptr, i64, i64 }, align 16 %a676 = alloca { ptr, i64, i64 }, align 16 %a692 = alloca %S.gen.StructDef, align 16 %a693 = alloca %S.gen.StructDef, align 16 %a695 = alloca %S.gen.StructDef, align 16 %a700 = alloca i64, align 16 %a703 = alloca i64, align 16 %a708 = alloca { ptr, i64, i64 }, align 16 %a709 = alloca { ptr, i64, i64 }, align 16 %a714 = alloca i64, align 16 %a721 = alloca { ptr, i64, i64 }, align 16 %a722 = alloca { ptr, i64, i64 }, align 16 %a723 = alloca { ptr, i64, i64 }, align 16 %a724 = alloca { ptr, i64, i64 }, align 16 %a726 = alloca { ptr, i64, i64 }, align 16 %a727 = alloca { ptr, i64, i64 }, align 16 %a728 = alloca { ptr, i64, i64 }, align 16 %a729 = alloca { ptr, i64, i64 }, align 16 %a733 = alloca { ptr, i64, i64 }, align 16 %a734 = alloca { ptr, i64, i64 }, align 16 %a735 = alloca { ptr, i64, i64 }, align 16 %a736 = alloca { ptr, i64, i64 }, align 16 %a738 = alloca { ptr, i64, i64 }, align 16 %a739 = alloca { ptr, i64, i64 }, align 16 %a740 = alloca { ptr, i64, i64 }, align 16 %a741 = alloca { ptr, i64, i64 }, align 16 %a745 = alloca { ptr, i64, i64 }, align 16 %a746 = alloca { ptr, i64, i64 }, align 16 %a748 = alloca { ptr, i64, i64 }, align 16 %a749 = alloca { ptr, i64, i64 }, align 16 %a750 = alloca { ptr, i64, i64 }, align 16 %a751 = alloca { ptr, i64, i64 }, align 16 %a752 = alloca { ptr, i64, i64 }, align 16 %a754 = alloca { ptr, i64, i64 }, align 16 %a755 = alloca { ptr, i64, i64 }, align 16 %a756 = alloca { ptr, i64, i64 }, align 16 %a757 = alloca { ptr, i64, i64 }, align 16 %a759 = alloca { ptr, i64, i64 }, align 16 %a768 = alloca %S.ast.Type, align 16 %a769 = alloca %S.ast.Type, align 16 %a771 = alloca %S.ast.Type, align 16 %a782 = alloca { ptr, i64, i64 }, align 16 %a783 = alloca { ptr, i64, i64 }, align 16 %a784 = alloca { ptr, i64, i64 }, align 16 %a785 = alloca { ptr, i64, i64 }, align 16 %a787 = alloca { ptr, i64, i64 }, align 16 %a788 = alloca { ptr, i64, i64 }, align 16 %a789 = alloca { ptr, i64, i64 }, align 16 %a790 = alloca { ptr, i64, i64 }, align 16 %a794 = alloca { ptr, i64, i64 }, align 16 %a795 = alloca { ptr, i64, i64 }, align 16 %a796 = alloca { ptr, i64, i64 }, align 16 %a797 = alloca { ptr, i64, i64 }, align 16 %a799 = alloca { ptr, i64, i64 }, align 16 %a800 = alloca { ptr, i64, i64 }, align 16 %a801 = alloca { ptr, i64, i64 }, align 16 %a802 = alloca { ptr, i64, i64 }, align 16 %a804 = alloca { ptr, i64, i64 }, align 16 %a811 = alloca { ptr, i64, i64 }, align 16 %a812 = alloca { ptr, i64, i64 }, align 16 %a813 = alloca { ptr, i64, i64 }, align 16 %a814 = alloca { ptr, i64, i64 }, align 16 %a816 = alloca { ptr, i64, i64 }, align 16 %a817 = alloca { ptr, i64, i64 }, align 16 %a818 = alloca { ptr, i64, i64 }, align 16 %a819 = alloca { ptr, i64, i64 }, align 16 %a824 = alloca { ptr, i64, i64 }, align 16 %a825 = alloca { ptr, i64, i64 }, align 16 %a826 = alloca { ptr, i64, i64 }, align 16 %a827 = alloca { ptr, i64, i64 }, align 16 %a829 = alloca { ptr, i64, i64 }, align 16 %a830 = alloca { ptr, i64, i64 }, align 16 %a831 = alloca { ptr, i64, i64 }, align 16 %a832 = alloca { ptr, i64, i64 }, align 16 %a842 = alloca { ptr, i64, i64 }, align 16 %a844 = alloca { ptr, i64, i64 }, align 16 %a845 = alloca { ptr, i64, i64 }, align 16 %a846 = alloca { ptr, i64, i64 }, align 16 %a847 = alloca { ptr, i64, i64 }, align 16 %a848 = alloca { ptr, i64, i64 }, align 16 %a851 = alloca { ptr, i64, i64 }, align 16 %a852 = alloca { ptr, i64, i64 }, align 16 %a855 = alloca { ptr, i64, i64 }, align 16 %a856 = alloca { ptr, i64, i64 }, align 16 %a860 = alloca %S.ast.Type, align 16 %a861 = alloca %S.ast.Type, align 16 %a869 = alloca { ptr, i64, i64 }, align 16 %a870 = alloca { ptr, i64, i64 }, align 16 %a871 = alloca { ptr, i64, i64 }, align 16 %a872 = alloca { ptr, i64, i64 }, align 16 %a874 = alloca { ptr, i64, i64 }, align 16 %a875 = alloca { ptr, i64, i64 }, align 16 %a876 = alloca { ptr, i64, i64 }, align 16 %a877 = alloca { ptr, i64, i64 }, align 16 %a882 = alloca { ptr, i64, i64 }, align 16 %a883 = alloca { ptr, i64, i64 }, align 16 %a884 = alloca { ptr, i64, i64 }, align 16 %a885 = alloca { ptr, i64, i64 }, align 16 %a887 = alloca { ptr, i64, i64 }, align 16 %a888 = alloca { ptr, i64, i64 }, align 16 %a889 = alloca { ptr, i64, i64 }, align 16 %a890 = alloca { ptr, i64, i64 }, align 16 %a900 = alloca { ptr, i64, i64 }, align 16 %a902 = alloca { ptr, i64, i64 }, align 16 %a903 = alloca { ptr, i64, i64 }, align 16 %a904 = alloca { ptr, i64, i64 }, align 16 %a905 = alloca { ptr, i64, i64 }, align 16 %a906 = alloca { ptr, i64, i64 }, align 16 %a909 = alloca { ptr, i64, i64 }, align 16 %a910 = alloca { ptr, i64, i64 }, align 16 %a912 = alloca { ptr, i64, i64 }, align 16 %a913 = alloca { ptr, i64, i64 }, align 16 %a917 = alloca %S.ast.Type, align 16 %a918 = alloca %S.ast.Type, align 16 %a921 = alloca %S.gen.Val, align 16 %a935 = alloca %S.ast.Type, align 16 %a936 = alloca %S.ast.Type, align 16 %a941 = alloca %S.gen.Val, align 16 %a947 = alloca %S.gen.Val, align 16 %a948 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i1 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 br i1 %t8, label %range7005, label %inrange7006 range7005: call void @finch_panic_index(ptr @.str.4506, i64 3881, i64 0, i64 %t7) unreachable inrange7006: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 %t12 = call i64 @finch.gen.sumNamed(ptr %t4, %S.ast.Node %t11) store i64 %t12, ptr %a13 %t14 = load i64, ptr %a13 %t15 = icmp sge i64 %t14, 0 br i1 %t15, label %then7007, label %endif7009 then7007: %t16 = load i1, ptr %a3 br i1 %t16, label %then7010, label %endif7012 then7010: %t17 = load ptr, ptr %a1 %t18 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t17, %S.ast.Node %t18, { ptr, i64, i64 } { ptr @.str.4507, i64 37, i64 0 }) br label %endif7012 endif7012: %t19 = load ptr, ptr %a1 %t20 = load i64, ptr %a13 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = load %S.ast.Node, ptr %a2 %t24 = call i64 @finch.gen.sumVariant(ptr %t19, i64 %t20, { ptr, i64, i64 } %t22, %S.ast.Node %t23) store i64 %t24, ptr %a25 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null br i1 %t27, label %panic7013, label %ok7014 panic7013: call void @finch_panic(ptr @.str.4508, i64 3887, ptr @.str.4509) unreachable ok7014: %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 22 %t29 = load i64, ptr %a13 %t30 = load { ptr, i64, i64 }, ptr %t28 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 %t29, %t31 br i1 %t32, label %range7015, label %inrange7016 range7015: call void @finch_panic_index(ptr @.str.4510, i64 3887, i64 %t29, i64 %t31) unreachable inrange7016: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds %S.gen.SumDef, ptr %t33, i64 %t29 %t35 = getelementptr inbounds %S.gen.SumDef, ptr %t34, i32 0, i32 3 %t36 = load i64, ptr %a25 %t37 = load { ptr, i64, i64 }, ptr %t35 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 br i1 %t39, label %range7017, label %inrange7018 range7017: call void @finch_panic_index(ptr @.str.4511, i64 3887, i64 %t36, i64 %t38) unreachable inrange7018: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds i64, ptr %t40, i64 %t36 %t42 = load i64, ptr %t41 %t43 = icmp sgt i64 %t42, 0 br i1 %t43, label %then7019, label %endif7021 then7019: %t44 = load ptr, ptr %a1 %t45 = load %S.ast.Node, ptr %a2 %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t47 = load { ptr, i64, i64 }, ptr %t46 store { ptr, i64, i64 } %t47, ptr %a49 store { ptr, i64, i64 } { ptr @.str.4512, i64 7, i64 0 }, ptr %a50 call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) %t51 = load { ptr, i64, i64 }, ptr %a48 %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null br i1 %t53, label %panic7022, label %ok7023 panic7022: call void @finch_panic(ptr @.str.4513, i64 3888, ptr @.str.4514) unreachable ok7023: %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 22 %t55 = load i64, ptr %a13 %t56 = load { ptr, i64, i64 }, ptr %t54 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = icmp uge i64 %t55, %t57 br i1 %t58, label %range7024, label %inrange7025 range7024: call void @finch_panic_index(ptr @.str.4515, i64 3888, i64 %t55, i64 %t57) unreachable inrange7025: %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = getelementptr inbounds %S.gen.SumDef, ptr %t59, i64 %t55 %t61 = getelementptr inbounds %S.gen.SumDef, ptr %t60, i32 0, i32 3 %t62 = load i64, ptr %a25 %t63 = load { ptr, i64, i64 }, ptr %t61 %t64 = extractvalue { ptr, i64, i64 } %t63, 1 %t65 = icmp uge i64 %t62, %t64 br i1 %t65, label %range7026, label %inrange7027 range7026: call void @finch_panic_index(ptr @.str.4516, i64 3888, i64 %t62, i64 %t64) unreachable inrange7027: %t66 = extractvalue { ptr, i64, i64 } %t63, 0 %t67 = getelementptr inbounds i64, ptr %t66, i64 %t62 %t68 = load i64, ptr %t67 call void @finch_str_from_int(ptr %a69, i64 %t68) %t70 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t51, ptr %a72 store { ptr, i64, i64 } %t70, ptr %a73 call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) store { ptr, i64, i64 } %t51, ptr %a74 call void @finch_str_drop(ptr %a74) store { ptr, i64, i64 } %t70, ptr %a75 call void @finch_str_drop(ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a71 store { ptr, i64, i64 } %t76, ptr %a78 store { ptr, i64, i64 } { ptr @.str.4517, i64 11, i64 0 }, ptr %a79 call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) store { ptr, i64, i64 } %t76, ptr %a80 call void @finch_str_drop(ptr %a80) %t81 = load { ptr, i64, i64 }, ptr %a77 %t82 = load ptr, ptr %a1 %t83 = icmp eq ptr %t82, null br i1 %t83, label %panic7028, label %ok7029 panic7028: call void @finch_panic(ptr @.str.4518, i64 3888, ptr @.str.4519) unreachable ok7029: %t84 = getelementptr inbounds %S.gen.Gen, ptr %t82, i32 0, i32 22 %t85 = load i64, ptr %a13 %t86 = load { ptr, i64, i64 }, ptr %t84 %t87 = extractvalue { ptr, i64, i64 } %t86, 1 %t88 = icmp uge i64 %t85, %t87 br i1 %t88, label %range7030, label %inrange7031 range7030: call void @finch_panic_index(ptr @.str.4520, i64 3888, i64 %t85, i64 %t87) unreachable inrange7031: %t89 = extractvalue { ptr, i64, i64 } %t86, 0 %t90 = getelementptr inbounds %S.gen.SumDef, ptr %t89, i64 %t85 %t91 = getelementptr inbounds %S.gen.SumDef, ptr %t90, i32 0, i32 1 %t92 = load { ptr, i64, i64 }, ptr %t91 store { ptr, i64, i64 } %t81, ptr %a94 store { ptr, i64, i64 } %t92, ptr %a95 call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) store { ptr, i64, i64 } %t81, ptr %a96 call void @finch_str_drop(ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t97, ptr %a99 store { ptr, i64, i64 } { ptr @.str.4521, i64 1, i64 0 }, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) store { ptr, i64, i64 } %t97, ptr %a101 call void @finch_str_drop(ptr %a101) %t102 = load { ptr, i64, i64 }, ptr %a98 %t103 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t104 = load { ptr, i64, i64 }, ptr %t103 store { ptr, i64, i64 } %t102, ptr %a106 store { ptr, i64, i64 } %t104, ptr %a107 call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) store { ptr, i64, i64 } %t102, ptr %a108 call void @finch_str_drop(ptr %a108) %t109 = load { ptr, i64, i64 }, ptr %a105 store { ptr, i64, i64 } %t109, ptr %a111 store { ptr, i64, i64 } { ptr @.str.4522, i64 5, i64 0 }, ptr %a112 call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) store { ptr, i64, i64 } %t109, ptr %a113 call void @finch_str_drop(ptr %a113) %t114 = load { ptr, i64, i64 }, ptr %a110 call void @finch.gen.fail(ptr %t44, %S.ast.Node %t45, { ptr, i64, i64 } %t114) store { ptr, i64, i64 } %t114, ptr %a115 call void @finch_str_drop(ptr %a115) br label %endif7021 endif7021: store { ptr, i64, i64 } zeroinitializer, ptr %a116 %t117 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t118 = load ptr, ptr %a1 %t119 = load i64, ptr %a13 %t120 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t121 = load { ptr, i64, i64 }, ptr %t120 %t122 = load { ptr, i64, i64 }, ptr %a116 %t123 = load %S.ast.Node, ptr %a2 %t124 = call %S.gen.Val @finch.gen.sumMake(ptr %t118, i64 %t119, { ptr, i64, i64 } %t121, { ptr, i64, i64 } %t122, %S.ast.Node %t123) %t125 = insertvalue %S.gen.Ref %t117, %S.gen.Val %t124, 2 call void @finch.drop.arr_S_ast_Node(ptr %a116) ret %S.gen.Ref %t125 endif7009: %t126 = load ptr, ptr %a1 %t127 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t128 = load { ptr, i64, i64 }, ptr %t127 %t129 = extractvalue { ptr, i64, i64 } %t128, 1 %t130 = icmp uge i64 0, %t129 br i1 %t130, label %range7032, label %inrange7033 range7032: call void @finch_panic_index(ptr @.str.4523, i64 3893, i64 0, i64 %t129) unreachable inrange7033: %t131 = extractvalue { ptr, i64, i64 } %t128, 0 %t132 = getelementptr inbounds %S.ast.Node, ptr %t131, i64 0 %t133 = load %S.ast.Node, ptr %t132 %t134 = call i64 @finch.gen.enumNamed(ptr %t126, %S.ast.Node %t133) store i64 %t134, ptr %a135 %t136 = load i64, ptr %a135 %t137 = icmp sge i64 %t136, 0 br i1 %t137, label %then7034, label %endif7036 then7034: %t138 = load i1, ptr %a3 br i1 %t138, label %then7037, label %endif7039 then7037: %t139 = load ptr, ptr %a1 %t140 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t139, %S.ast.Node %t140, { ptr, i64, i64 } { ptr @.str.4524, i64 37, i64 0 }) br label %endif7039 endif7039: %t141 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t142 = load ptr, ptr %a1 %t143 = load %S.ast.Node, ptr %a2 %t144 = load i64, ptr %a135 %t145 = call %S.gen.Val @finch.gen.enumValue(ptr %t142, %S.ast.Node %t143, i64 %t144) %t146 = insertvalue %S.gen.Ref %t141, %S.gen.Val %t145, 2 ret %S.gen.Ref %t146 endif7036: %t147 = load ptr, ptr %a1 %t148 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t149 = load { ptr, i64, i64 }, ptr %t148 %t150 = extractvalue { ptr, i64, i64 } %t149, 1 %t151 = icmp uge i64 0, %t150 br i1 %t151, label %range7040, label %inrange7041 range7040: call void @finch_panic_index(ptr @.str.4525, i64 3900, i64 0, i64 %t150) unreachable inrange7041: %t152 = extractvalue { ptr, i64, i64 } %t149, 0 %t153 = getelementptr inbounds %S.ast.Node, ptr %t152, i64 0 %t154 = load %S.ast.Node, ptr %t153 %t155 = load i1, ptr %a3 %t156 = call %S.gen.Ref @finch.gen.ref(ptr %t147, %S.ast.Node %t154, i1 %t155) store %S.gen.Ref %t156, ptr %a157 %t158 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t159 = getelementptr inbounds %S.gen.Val, ptr %t158, i32 0, i32 1 %t160 = load %S.ast.Type, ptr %t159 store %S.ast.Type %t160, ptr %a161 call void @finch.copy.S_ast_Type(ptr %a162, ptr %a161) %t163 = load %S.ast.Type, ptr %a162 store %S.ast.Type %t163, ptr %a164 %t165 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t166 = load i1, ptr %t165 br i1 %t166, label %then7042, label %endif7044 then7042: %t167 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 %t168 = getelementptr inbounds %S.gen.Place, ptr %t167, i32 0, i32 1 %t169 = load %S.ast.Type, ptr %t168 store %S.ast.Type %t169, ptr %a170 call void @finch.copy.S_ast_Type(ptr %a171, ptr %a170) %t172 = load %S.ast.Type, ptr %a171 %t173 = load %S.ast.Type, ptr %a164 store %S.ast.Type %t172, ptr %a164 store %S.ast.Type %t173, ptr %a174 call void @finch.drop.S_ast_Type(ptr %a174) br label %endif7044 endif7044: %t175 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t176 = load { ptr, i64, i64 }, ptr %t175 store { ptr, i64, i64 } %t176, ptr %a177 store { ptr, i64, i64 } { ptr @.str.4526, i64 3, i64 0 }, ptr %a178 %t179 = call i32 @finch_str_eq(ptr %a177, ptr %a178) %t180 = icmp ne i32 %t179, 0 br i1 %t180, label %then7045, label %endif7047 then7045: %t181 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t182 = getelementptr inbounds %S.gen.Val, ptr %t181, i32 0, i32 0 %t183 = load { ptr, i64, i64 }, ptr %t182 store { ptr, i64, i64 } %t183, ptr %a184 call void @finch_str_copy(ptr %a185, ptr %a184) %t186 = load { ptr, i64, i64 }, ptr %a185 store { ptr, i64, i64 } %t186, ptr %a187 %t188 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t189 = load i1, ptr %t188 br i1 %t189, label %then7048, label %endif7050 then7048: %t190 = load ptr, ptr %a1 %t191 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 %t192 = getelementptr inbounds %S.gen.Place, ptr %t191, i32 0, i32 0 %t193 = load { ptr, i64, i64 }, ptr %t192 %t194 = call { ptr, i64, i64 } @finch.gen.load(ptr %t190, { ptr, i64, i64 } { ptr @.str.4527, i64 3, i64 0 }, { ptr, i64, i64 } %t193) %t195 = load { ptr, i64, i64 }, ptr %a187 store { ptr, i64, i64 } %t194, ptr %a187 store { ptr, i64, i64 } %t195, ptr %a196 call void @finch_str_drop(ptr %a196) br label %endif7050 endif7050: %t197 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 %t198 = getelementptr inbounds { ptr, i64, i64 }, ptr %t197, i32 0, i32 1 %t199 = load i64, ptr %t198 %t200 = icmp eq i64 %t199, 0 br i1 %t200, label %then7051, label %endif7053 then7051: %t201 = load ptr, ptr %a1 %t202 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t201, %S.ast.Node %t202, { ptr, i64, i64 } { ptr @.str.4528, i64 57, i64 0 }) br label %endif7053 endif7053: %t203 = load ptr, ptr %a1 %t204 = load ptr, ptr %a1 %t205 = load { ptr, i64, i64 }, ptr %a187 store { ptr, i64, i64 } { ptr @.str.4529, i64 12, i64 0 }, ptr %a207 store { ptr, i64, i64 } %t205, ptr %a208 call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) %t209 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t209, ptr %a211 store { ptr, i64, i64 } { ptr @.str.4530, i64 6, i64 0 }, ptr %a212 call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) store { ptr, i64, i64 } %t209, ptr %a213 call void @finch_str_drop(ptr %a213) %t214 = load { ptr, i64, i64 }, ptr %a210 %t215 = call { ptr, i64, i64 } @finch.gen.op(ptr %t204, { ptr, i64, i64 } %t214) store { ptr, i64, i64 } %t214, ptr %a216 call void @finch_str_drop(ptr %a216) %t217 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t218 = load { ptr, i64, i64 }, ptr %t217 store { ptr, i64, i64 } { ptr @.str.4531, i64 6, i64 0 }, ptr %a220 store { ptr, i64, i64 } %t218, ptr %a221 call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) %t222 = load { ptr, i64, i64 }, ptr %a219 store { ptr, i64, i64 } %t222, ptr %a224 store { ptr, i64, i64 } { ptr @.str.4532, i64 18, i64 0 }, ptr %a225 call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) store { ptr, i64, i64 } %t222, ptr %a226 call void @finch_str_drop(ptr %a226) %t227 = load { ptr, i64, i64 }, ptr %a223 %t228 = load %S.ast.Node, ptr %a2 call void @finch.gen.panicIf(ptr %t203, { ptr, i64, i64 } %t215, { ptr, i64, i64 } %t227, %S.ast.Node %t228) store { ptr, i64, i64 } %t215, ptr %a229 call void @finch_str_drop(ptr %a229) store { ptr, i64, i64 } %t227, ptr %a230 call void @finch_str_drop(ptr %a230) %t231 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 %t232 = load { ptr, i64, i64 }, ptr %t231 %t233 = extractvalue { ptr, i64, i64 } %t232, 1 %t234 = icmp uge i64 0, %t233 br i1 %t234, label %range7054, label %inrange7055 range7054: call void @finch_panic_index(ptr @.str.4533, i64 3914, i64 0, i64 %t233) unreachable inrange7055: %t235 = extractvalue { ptr, i64, i64 } %t232, 0 %t236 = getelementptr inbounds %S.ast.Type, ptr %t235, i64 0 %t237 = load %S.ast.Type, ptr %t236 store %S.ast.Type %t237, ptr %a238 call void @finch.copy.S_ast_Type(ptr %a239, ptr %a238) %t240 = load %S.ast.Type, ptr %a239 store %S.ast.Type %t240, ptr %a241 store i1 false, ptr %a242 %t243 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 0 %t244 = load { ptr, i64, i64 }, ptr %t243 store { ptr, i64, i64 } %t244, ptr %a245 store { ptr, i64, i64 } { ptr @.str.4534, i64 6, i64 0 }, ptr %a246 %t247 = call i32 @finch_str_eq(ptr %a245, ptr %a246) %t248 = icmp ne i32 %t247, 0 br i1 %t248, label %then7056, label %endif7058 then7056: %t249 = load ptr, ptr %a1 %t250 = icmp eq ptr %t249, null br i1 %t250, label %panic7059, label %ok7060 panic7059: call void @finch_panic(ptr @.str.4535, i64 3917, ptr @.str.4536) unreachable ok7060: %t251 = getelementptr inbounds %S.gen.Gen, ptr %t249, i32 0, i32 16 %t252 = load ptr, ptr %a1 %t253 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 3 %t254 = load { ptr, i64, i64 }, ptr %t253 %t255 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 2 %t256 = load { ptr, i64, i64 }, ptr %t255 %t257 = call i64 @finch.gen.findStruct(ptr %t252, { ptr, i64, i64 } %t254, { ptr, i64, i64 } %t256) %t258 = load { ptr, i64, i64 }, ptr %t251 %t259 = extractvalue { ptr, i64, i64 } %t258, 1 %t260 = icmp uge i64 %t257, %t259 br i1 %t260, label %range7061, label %inrange7062 range7061: call void @finch_panic_index(ptr @.str.4537, i64 3917, i64 %t257, i64 %t259) unreachable inrange7062: %t261 = extractvalue { ptr, i64, i64 } %t258, 0 %t262 = getelementptr inbounds %S.gen.StructDef, ptr %t261, i64 %t257 %t263 = getelementptr inbounds %S.gen.StructDef, ptr %t262, i32 0, i32 11 %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 store i64 -1, ptr %a265 %t266 = load i64, ptr %t264 %t267 = load ptr, ptr %t263 store i64 0, ptr %a268 br label %find.cond7063 find.cond7063: %t269 = load i64, ptr %a268 %t270 = icmp slt i64 %t269, %t266 br i1 %t270, label %find.body7064, label %find.end7067 find.body7064: %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t267, i64 %t269 %t272 = load { ptr, i64, i64 }, ptr %t271 store { ptr, i64, i64 } %t272, ptr %a273 store { ptr, i64, i64 } { ptr @.str.4538, i64 5, i64 0 }, ptr %a274 %t275 = call i32 @finch_str_eq(ptr %a273, ptr %a274) %t276 = icmp ne i32 %t275, 0 br i1 %t276, label %find.hit7065, label %find.next7066 find.hit7065: store i64 %t269, ptr %a265 br label %find.end7067 find.next7066: %t277 = add i64 %t269, 1 store i64 %t277, ptr %a268 br label %find.cond7063 find.end7067: %t278 = load i64, ptr %a265 %t279 = icmp sge i64 %t278, 0 store i1 %t279, ptr %a242 br label %endif7058 endif7058: %t280 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t281 = load { ptr, i64, i64 }, ptr %t280 store { ptr, i64, i64 } %t281, ptr %a282 store { ptr, i64, i64 } { ptr @.str.4539, i64 5, i64 0 }, ptr %a283 %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) %t285 = icmp ne i32 %t284, 0 br label %logic.from7068 logic.from7068: br i1 %t285, label %logic.rhs7069, label %logic.end7070 logic.rhs7069: %t286 = load i1, ptr %a242 %t287 = xor i1 %t286, true br label %logic.rend7071 logic.rend7071: br label %logic.end7070 logic.end7070: %t288 = phi i1 [ false, %logic.from7068 ], [ %t287, %logic.rend7071 ] br i1 %t288, label %then7072, label %endif7074 then7072: %t289 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t290 = load { ptr, i64, i64 }, ptr %a187 store { ptr, i64, i64 } %t290, ptr %a291 call void @finch_str_copy(ptr %a292, ptr %a291) %t293 = load { ptr, i64, i64 }, ptr %a292 %t294 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t293, 0 %t295 = load %S.ast.Type, ptr %a241 store %S.ast.Type %t295, ptr %a296 call void @finch.copy.S_ast_Type(ptr %a297, ptr %a296) %t298 = load %S.ast.Type, ptr %a297 %t299 = insertvalue %S.gen.Place %t294, %S.ast.Type %t298, 1 %t300 = insertvalue %S.gen.Ref %t289, %S.gen.Place %t299, 1 call void @finch.drop.S_ast_Type(ptr %a241) call void @finch_str_drop(ptr %a187) call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t300 endif7074: %t301 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 0 %t302 = load { ptr, i64, i64 }, ptr %t301 store { ptr, i64, i64 } %t302, ptr %a303 store { ptr, i64, i64 } { ptr @.str.4540, i64 6, i64 0 }, ptr %a304 %t305 = call i32 @finch_str_eq(ptr %a303, ptr %a304) %t306 = icmp eq i32 %t305, 0 br i1 %t306, label %then7075, label %endif7077 then7075: %t307 = load ptr, ptr %a1 %t308 = load %S.ast.Node, ptr %a2 %t309 = load %S.ast.Type, ptr %a164 %t310 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t309) store { ptr, i64, i64 } { ptr @.str.4541, i64 2, i64 0 }, ptr %a312 store { ptr, i64, i64 } %t310, ptr %a313 call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313) store { ptr, i64, i64 } %t310, ptr %a314 call void @finch_str_drop(ptr %a314) %t315 = load { ptr, i64, i64 }, ptr %a311 store { ptr, i64, i64 } %t315, ptr %a317 store { ptr, i64, i64 } { ptr @.str.4542, i64 43, i64 0 }, ptr %a318 call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) store { ptr, i64, i64 } %t315, ptr %a319 call void @finch_str_drop(ptr %a319) %t320 = load { ptr, i64, i64 }, ptr %a316 call void @finch.gen.fail(ptr %t307, %S.ast.Node %t308, { ptr, i64, i64 } %t320) store { ptr, i64, i64 } %t320, ptr %a321 call void @finch_str_drop(ptr %a321) br label %endif7077 endif7077: %t322 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t323 = load { ptr, i64, i64 }, ptr %a187 store { ptr, i64, i64 } %t323, ptr %a324 call void @finch_str_copy(ptr %a325, ptr %a324) %t326 = load { ptr, i64, i64 }, ptr %a325 %t327 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t326, 0 %t328 = load %S.ast.Type, ptr %a241 store %S.ast.Type %t328, ptr %a329 call void @finch.copy.S_ast_Type(ptr %a330, ptr %a329) %t331 = load %S.ast.Type, ptr %a330 %t332 = insertvalue %S.gen.Place %t327, %S.ast.Type %t331, 1 %t333 = insertvalue %S.gen.Ref %t322, %S.gen.Place %t332, 1 %t334 = load %S.gen.Ref, ptr %a157 store %S.gen.Ref %t333, ptr %a157 store %S.gen.Ref %t334, ptr %a335 call void @finch.drop.S_gen_Ref(ptr %a335) %t336 = load %S.ast.Type, ptr %a241 store %S.ast.Type %t336, ptr %a337 call void @finch.copy.S_ast_Type(ptr %a338, ptr %a337) %t339 = load %S.ast.Type, ptr %a338 %t340 = load %S.ast.Type, ptr %a164 store %S.ast.Type %t339, ptr %a164 store %S.ast.Type %t340, ptr %a341 call void @finch.drop.S_ast_Type(ptr %a341) call void @finch.drop.S_ast_Type(ptr %a241) call void @finch_str_drop(ptr %a187) br label %endif7047 endif7047: %t342 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t343 = load { ptr, i64, i64 }, ptr %t342 store { ptr, i64, i64 } %t343, ptr %a344 store { ptr, i64, i64 } { ptr @.str.4543, i64 5, i64 0 }, ptr %a345 %t346 = call i32 @finch_str_eq(ptr %a344, ptr %a345) %t347 = icmp ne i32 %t346, 0 br i1 %t347, label %then7078, label %endif7080 then7078: %t348 = load i1, ptr %a3 br i1 %t348, label %then7081, label %endif7083 then7081: %t349 = load ptr, ptr %a1 %t350 = load %S.ast.Node, ptr %a2 %t351 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t352 = load { ptr, i64, i64 }, ptr %t351 store { ptr, i64, i64 } { ptr @.str.4544, i64 1, i64 0 }, ptr %a354 store { ptr, i64, i64 } %t352, ptr %a355 call void @finch_str_concat(ptr %a353, ptr %a354, ptr %a355) %t356 = load { ptr, i64, i64 }, ptr %a353 store { ptr, i64, i64 } %t356, ptr %a358 store { ptr, i64, i64 } { ptr @.str.4545, i64 26, i64 0 }, ptr %a359 call void @finch_str_concat(ptr %a357, ptr %a358, ptr %a359) store { ptr, i64, i64 } %t356, ptr %a360 call void @finch_str_drop(ptr %a360) %t361 = load { ptr, i64, i64 }, ptr %a357 call void @finch.gen.fail(ptr %t349, %S.ast.Node %t350, { ptr, i64, i64 } %t361) store { ptr, i64, i64 } %t361, ptr %a362 call void @finch_str_drop(ptr %a362) br label %endif7083 endif7083: %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t364 = load { ptr, i64, i64 }, ptr %t363 store { ptr, i64, i64 } %t364, ptr %a365 store { ptr, i64, i64 } { ptr @.str.4546, i64 3, i64 0 }, ptr %a366 %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) %t368 = icmp ne i32 %t367, 0 br i1 %t368, label %then7084, label %endif7086 then7084: %t369 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t370 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 4 %t371 = load i64, ptr %t370 call void @finch_str_from_int(ptr %a372, i64 %t371) %t373 = load { ptr, i64, i64 }, ptr %a372 %t374 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t373, 0 %t375 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4547, i64 3, i64 0 }) %t376 = insertvalue %S.gen.Val %t374, %S.ast.Type %t375, 1 %t377 = insertvalue %S.gen.Val %t376, i1 true, 3 %t378 = insertvalue %S.gen.Ref %t369, %S.gen.Val %t377, 2 call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t378 endif7086: %t379 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t380 = load { ptr, i64, i64 }, ptr %t379 store { ptr, i64, i64 } %t380, ptr %a381 store { ptr, i64, i64 } { ptr @.str.4548, i64 3, i64 0 }, ptr %a382 %t383 = call i32 @finch_str_eq(ptr %a381, ptr %a382) %t384 = icmp eq i32 %t383, 0 br i1 %t384, label %then7087, label %endif7089 then7087: %t385 = load ptr, ptr %a1 %t386 = load %S.ast.Node, ptr %a2 %t387 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t388 = load { ptr, i64, i64 }, ptr %t387 store { ptr, i64, i64 } { ptr @.str.4549, i64 34, i64 0 }, ptr %a390 store { ptr, i64, i64 } %t388, ptr %a391 call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) %t392 = load { ptr, i64, i64 }, ptr %a389 store { ptr, i64, i64 } %t392, ptr %a394 store { ptr, i64, i64 } { ptr @.str.4550, i64 1, i64 0 }, ptr %a395 call void @finch_str_concat(ptr %a393, ptr %a394, ptr %a395) store { ptr, i64, i64 } %t392, ptr %a396 call void @finch_str_drop(ptr %a396) %t397 = load { ptr, i64, i64 }, ptr %a393 call void @finch.gen.fail(ptr %t385, %S.ast.Node %t386, { ptr, i64, i64 } %t397) store { ptr, i64, i64 } %t397, ptr %a398 call void @finch_str_drop(ptr %a398) br label %endif7089 endif7089: %t399 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t400 = load i1, ptr %t399 %t401 = xor i1 %t400, true br i1 %t401, label %then7090, label %endif7092 then7090: %t402 = load ptr, ptr %a1 %t403 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t402, %S.ast.Node %t403, { ptr, i64, i64 } { ptr @.str.4551, i64 48, i64 0 }) br label %endif7092 endif7092: %t404 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t405 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 %t406 = getelementptr inbounds %S.gen.Place, ptr %t405, i32 0, i32 0 %t407 = load { ptr, i64, i64 }, ptr %t406 store { ptr, i64, i64 } %t407, ptr %a408 call void @finch_str_copy(ptr %a409, ptr %a408) %t410 = load { ptr, i64, i64 }, ptr %a409 %t411 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t410, 0 %t412 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 %t413 = load { ptr, i64, i64 }, ptr %t412 %t414 = extractvalue { ptr, i64, i64 } %t413, 1 %t415 = icmp uge i64 0, %t414 br i1 %t415, label %range7093, label %inrange7094 range7093: call void @finch_panic_index(ptr @.str.4552, i64 3941, i64 0, i64 %t414) unreachable inrange7094: %t416 = extractvalue { ptr, i64, i64 } %t413, 0 %t417 = getelementptr inbounds %S.ast.Type, ptr %t416, i64 0 %t418 = load %S.ast.Type, ptr %t417 %t419 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t418) %t420 = insertvalue %S.gen.Val %t411, %S.ast.Type %t419, 1 %t421 = insertvalue %S.gen.Ref %t404, %S.gen.Val %t420, 2 call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t421 endif7080: %t422 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t423 = load { ptr, i64, i64 }, ptr %t422 store { ptr, i64, i64 } %t423, ptr %a424 store { ptr, i64, i64 } { ptr @.str.4553, i64 5, i64 0 }, ptr %a425 %t426 = call i32 @finch_str_eq(ptr %a424, ptr %a425) %t427 = icmp ne i32 %t426, 0 br label %logic.from7095 logic.from7095: br i1 %t427, label %logic.end7097, label %logic.rhs7096 logic.rhs7096: %t428 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t429 = load { ptr, i64, i64 }, ptr %t428 store { ptr, i64, i64 } %t429, ptr %a430 store { ptr, i64, i64 } { ptr @.str.4554, i64 3, i64 0 }, ptr %a431 %t432 = call i32 @finch_str_eq(ptr %a430, ptr %a431) %t433 = icmp ne i32 %t432, 0 br label %logic.rend7098 logic.rend7098: br label %logic.end7097 logic.end7097: %t434 = phi i1 [ true, %logic.from7095 ], [ %t433, %logic.rend7098 ] br label %logic.from7099 logic.from7099: br i1 %t434, label %logic.rhs7100, label %logic.end7101 logic.rhs7100: %t435 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t436 = load { ptr, i64, i64 }, ptr %t435 store { ptr, i64, i64 } %t436, ptr %a437 store { ptr, i64, i64 } { ptr @.str.4555, i64 3, i64 0 }, ptr %a438 %t439 = call i32 @finch_str_eq(ptr %a437, ptr %a438) %t440 = icmp ne i32 %t439, 0 br label %logic.rend7102 logic.rend7102: br label %logic.end7101 logic.end7101: %t441 = phi i1 [ false, %logic.from7099 ], [ %t440, %logic.rend7102 ] br i1 %t441, label %then7103, label %endif7105 then7103: %t442 = load i1, ptr %a3 br i1 %t442, label %then7106, label %endif7108 then7106: %t443 = load ptr, ptr %a1 %t444 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t443, %S.ast.Node %t444, { ptr, i64, i64 } { ptr @.str.4556, i64 30, i64 0 }) br label %endif7108 endif7108: %t445 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t446 = load i1, ptr %t445 %t447 = xor i1 %t446, true br label %logic.from7109 logic.from7109: br i1 %t447, label %logic.rhs7110, label %logic.end7111 logic.rhs7110: %t448 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t449 = getelementptr inbounds %S.gen.Val, ptr %t448, i32 0, i32 2 %t450 = load i1, ptr %t449 br label %logic.rend7112 logic.rend7112: br label %logic.end7111 logic.end7111: %t451 = phi i1 [ false, %logic.from7109 ], [ %t450, %logic.rend7112 ] br label %logic.from7113 logic.from7113: br i1 %t451, label %logic.rhs7114, label %logic.end7115 logic.rhs7114: %t452 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t453 = getelementptr inbounds %S.gen.Val, ptr %t452, i32 0, i32 0 %t454 = load { ptr, i64, i64 }, ptr %t453 store { ptr, i64, i64 } %t454, ptr %a455 store { ptr, i64, i64 } { ptr @.str.4558, i64 1, i64 0 }, ptr %a457 %t458 = call i32 @finch_str_starts(ptr %a455, ptr %a457) %t459 = icmp ne i32 %t458, 0 br label %logic.rend7116 logic.rend7116: br label %logic.end7115 logic.end7115: %t460 = phi i1 [ false, %logic.from7113 ], [ %t459, %logic.rend7116 ] br i1 %t460, label %then7117, label %endif7119 then7117: %t461 = load ptr, ptr %a1 %t462 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t461, %S.ast.Node %t462, { ptr, i64, i64 } { ptr @.str.4559, i64 53, i64 0 }) br label %endif7119 endif7119: %t463 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t464 = getelementptr inbounds %S.gen.Val, ptr %t463, i32 0, i32 0 %t465 = load { ptr, i64, i64 }, ptr %t464 store { ptr, i64, i64 } %t465, ptr %a466 call void @finch_str_copy(ptr %a467, ptr %a466) %t468 = load { ptr, i64, i64 }, ptr %a467 store { ptr, i64, i64 } %t468, ptr %a469 %t470 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t471 = load i1, ptr %t470 br i1 %t471, label %then7120, label %endif7122 then7120: %t472 = load ptr, ptr %a1 %t473 = load ptr, ptr %a1 %t474 = load %S.ast.Type, ptr %a164 %t475 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t473, %S.ast.Type %t474) %t476 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 %t477 = getelementptr inbounds %S.gen.Place, ptr %t476, i32 0, i32 0 %t478 = load { ptr, i64, i64 }, ptr %t477 %t479 = call { ptr, i64, i64 } @finch.gen.load(ptr %t472, { ptr, i64, i64 } %t475, { ptr, i64, i64 } %t478) store { ptr, i64, i64 } %t475, ptr %a480 call void @finch_str_drop(ptr %a480) %t481 = load { ptr, i64, i64 }, ptr %a469 store { ptr, i64, i64 } %t479, ptr %a469 store { ptr, i64, i64 } %t481, ptr %a482 call void @finch_str_drop(ptr %a482) br label %endif7122 endif7122: %t483 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t484 = load { ptr, i64, i64 }, ptr %t483 store { ptr, i64, i64 } %t484, ptr %a485 store { ptr, i64, i64 } { ptr @.str.4560, i64 3, i64 0 }, ptr %a486 %t487 = call i32 @finch_str_eq(ptr %a485, ptr %a486) %t488 = icmp ne i32 %t487, 0 br i1 %t488, label %then7123, label %endif7125 then7123: %t489 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t490 = load ptr, ptr %a1 %t491 = load { ptr, i64, i64 }, ptr %a469 %t492 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t490, { ptr, i64, i64 } %t491) %t493 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t492, 0 %t494 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4561, i64 4, i64 0 }) %t495 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t494) store %S.ast.Type %t494, ptr %a496 call void @finch.drop.S_ast_Type(ptr %a496) %t497 = insertvalue %S.gen.Val %t493, %S.ast.Type %t495, 1 %t498 = insertvalue %S.gen.Ref %t489, %S.gen.Val %t497, 2 call void @finch_str_drop(ptr %a469) call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t498 endif7125: %t499 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t500 = load ptr, ptr %a1 %t501 = load { ptr, i64, i64 }, ptr %a469 store { ptr, i64, i64 } { ptr @.str.4562, i64 31, i64 0 }, ptr %a503 store { ptr, i64, i64 } %t501, ptr %a504 call void @finch_str_concat(ptr %a502, ptr %a503, ptr %a504) %t505 = load { ptr, i64, i64 }, ptr %a502 store { ptr, i64, i64 } %t505, ptr %a507 store { ptr, i64, i64 } { ptr @.str.4563, i64 3, i64 0 }, ptr %a508 call void @finch_str_concat(ptr %a506, ptr %a507, ptr %a508) store { ptr, i64, i64 } %t505, ptr %a509 call void @finch_str_drop(ptr %a509) %t510 = load { ptr, i64, i64 }, ptr %a506 %t511 = call { ptr, i64, i64 } @finch.gen.op(ptr %t500, { ptr, i64, i64 } %t510) store { ptr, i64, i64 } %t510, ptr %a512 call void @finch_str_drop(ptr %a512) %t513 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t511, 0 %t514 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 %t515 = load { ptr, i64, i64 }, ptr %t514 %t516 = extractvalue { ptr, i64, i64 } %t515, 1 %t517 = icmp uge i64 0, %t516 br i1 %t517, label %range7126, label %inrange7127 range7126: call void @finch_panic_index(ptr @.str.4564, i64 3959, i64 0, i64 %t516) unreachable inrange7127: %t518 = extractvalue { ptr, i64, i64 } %t515, 0 %t519 = getelementptr inbounds %S.ast.Type, ptr %t518, i64 0 %t520 = load %S.ast.Type, ptr %t519 %t521 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t520) %t522 = insertvalue %S.gen.Val %t513, %S.ast.Type %t521, 1 %t523 = insertvalue %S.gen.Ref %t499, %S.gen.Val %t522, 2 call void @finch_str_drop(ptr %a469) call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t523 endif7105: %t524 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t525 = load { ptr, i64, i64 }, ptr %t524 store { ptr, i64, i64 } %t525, ptr %a526 store { ptr, i64, i64 } { ptr @.str.4565, i64 5, i64 0 }, ptr %a527 %t528 = call i32 @finch_str_eq(ptr %a526, ptr %a527) %t529 = icmp ne i32 %t528, 0 br label %logic.from7128 logic.from7128: br i1 %t529, label %logic.end7130, label %logic.rhs7129 logic.rhs7129: %t530 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t531 = load { ptr, i64, i64 }, ptr %t530 store { ptr, i64, i64 } %t531, ptr %a532 store { ptr, i64, i64 } { ptr @.str.4566, i64 3, i64 0 }, ptr %a533 %t534 = call i32 @finch_str_eq(ptr %a532, ptr %a533) %t535 = icmp ne i32 %t534, 0 br label %logic.rend7131 logic.rend7131: br label %logic.end7130 logic.end7130: %t536 = phi i1 [ true, %logic.from7128 ], [ %t535, %logic.rend7131 ] br label %logic.from7132 logic.from7132: br i1 %t536, label %logic.end7134, label %logic.rhs7133 logic.rhs7133: %t537 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t538 = load { ptr, i64, i64 }, ptr %t537 store { ptr, i64, i64 } %t538, ptr %a539 store { ptr, i64, i64 } { ptr @.str.4567, i64 3, i64 0 }, ptr %a540 %t541 = call i32 @finch_str_eq(ptr %a539, ptr %a540) %t542 = icmp ne i32 %t541, 0 br label %logic.rend7135 logic.rend7135: br label %logic.end7134 logic.end7134: %t543 = phi i1 [ true, %logic.from7132 ], [ %t542, %logic.rend7135 ] br i1 %t543, label %then7136, label %endif7138 then7136: %t544 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t545 = load { ptr, i64, i64 }, ptr %t544 store { ptr, i64, i64 } %t545, ptr %a546 store { ptr, i64, i64 } { ptr @.str.4568, i64 3, i64 0 }, ptr %a547 %t548 = call i32 @finch_str_eq(ptr %a546, ptr %a547) %t549 = icmp eq i32 %t548, 0 br i1 %t549, label %then7139, label %endif7141 then7139: %t550 = load ptr, ptr %a1 %t551 = load %S.ast.Node, ptr %a2 %t552 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t553 = load { ptr, i64, i64 }, ptr %t552 store { ptr, i64, i64 } { ptr @.str.4569, i64 37, i64 0 }, ptr %a555 store { ptr, i64, i64 } %t553, ptr %a556 call void @finch_str_concat(ptr %a554, ptr %a555, ptr %a556) %t557 = load { ptr, i64, i64 }, ptr %a554 store { ptr, i64, i64 } %t557, ptr %a559 store { ptr, i64, i64 } { ptr @.str.4570, i64 1, i64 0 }, ptr %a560 call void @finch_str_concat(ptr %a558, ptr %a559, ptr %a560) store { ptr, i64, i64 } %t557, ptr %a561 call void @finch_str_drop(ptr %a561) %t562 = load { ptr, i64, i64 }, ptr %a558 call void @finch.gen.fail(ptr %t550, %S.ast.Node %t551, { ptr, i64, i64 } %t562) store { ptr, i64, i64 } %t562, ptr %a563 call void @finch_str_drop(ptr %a563) br label %endif7141 endif7141: %t564 = load i1, ptr %a3 br i1 %t564, label %then7142, label %endif7144 then7142: %t565 = load ptr, ptr %a1 %t566 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t565, %S.ast.Node %t566, { ptr, i64, i64 } { ptr @.str.4571, i64 48, i64 0 }) br label %endif7144 endif7144: %t567 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t568 = load i1, ptr %t567 br i1 %t568, label %then7145, label %endif7147 then7145: %t569 = load ptr, ptr %a1 %t570 = load ptr, ptr %a1 %t571 = load %S.ast.Type, ptr %a164 %t572 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t570, %S.ast.Type %t571) store { ptr, i64, i64 } { ptr @.str.4572, i64 23, i64 0 }, ptr %a574 store { ptr, i64, i64 } %t572, ptr %a575 call void @finch_str_concat(ptr %a573, ptr %a574, ptr %a575) store { ptr, i64, i64 } %t572, ptr %a576 call void @finch_str_drop(ptr %a576) %t577 = load { ptr, i64, i64 }, ptr %a573 store { ptr, i64, i64 } %t577, ptr %a579 store { ptr, i64, i64 } { ptr @.str.4573, i64 6, i64 0 }, ptr %a580 call void @finch_str_concat(ptr %a578, ptr %a579, ptr %a580) store { ptr, i64, i64 } %t577, ptr %a581 call void @finch_str_drop(ptr %a581) %t582 = load { ptr, i64, i64 }, ptr %a578 %t583 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 %t584 = getelementptr inbounds %S.gen.Place, ptr %t583, i32 0, i32 0 %t585 = load { ptr, i64, i64 }, ptr %t584 store { ptr, i64, i64 } %t582, ptr %a587 store { ptr, i64, i64 } %t585, ptr %a588 call void @finch_str_concat(ptr %a586, ptr %a587, ptr %a588) store { ptr, i64, i64 } %t582, ptr %a589 call void @finch_str_drop(ptr %a589) %t590 = load { ptr, i64, i64 }, ptr %a586 store { ptr, i64, i64 } %t590, ptr %a592 store { ptr, i64, i64 } { ptr @.str.4574, i64 14, i64 0 }, ptr %a593 call void @finch_str_concat(ptr %a591, ptr %a592, ptr %a593) store { ptr, i64, i64 } %t590, ptr %a594 call void @finch_str_drop(ptr %a594) %t595 = load { ptr, i64, i64 }, ptr %a591 %t596 = call { ptr, i64, i64 } @finch.gen.op(ptr %t569, { ptr, i64, i64 } %t595) store { ptr, i64, i64 } %t595, ptr %a597 call void @finch_str_drop(ptr %a597) store { ptr, i64, i64 } %t596, ptr %a598 %t599 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t600 = load ptr, ptr %a1 %t601 = load { ptr, i64, i64 }, ptr %a598 %t602 = call { ptr, i64, i64 } @finch.gen.load(ptr %t600, { ptr, i64, i64 } { ptr @.str.4575, i64 3, i64 0 }, { ptr, i64, i64 } %t601) %t603 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t602, 0 %t604 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4576, i64 3, i64 0 }) %t605 = insertvalue %S.gen.Val %t603, %S.ast.Type %t604, 1 %t606 = insertvalue %S.gen.Ref %t599, %S.gen.Val %t605, 2 call void @finch_str_drop(ptr %a598) call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t606 endif7147: %t607 = load ptr, ptr %a1 %t608 = load ptr, ptr %a1 %t609 = load %S.ast.Type, ptr %a164 %t610 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t608, %S.ast.Type %t609) store { ptr, i64, i64 } { ptr @.str.4577, i64 13, i64 0 }, ptr %a612 store { ptr, i64, i64 } %t610, ptr %a613 call void @finch_str_concat(ptr %a611, ptr %a612, ptr %a613) store { ptr, i64, i64 } %t610, ptr %a614 call void @finch_str_drop(ptr %a614) %t615 = load { ptr, i64, i64 }, ptr %a611 store { ptr, i64, i64 } %t615, ptr %a617 store { ptr, i64, i64 } { ptr @.str.4578, i64 1, i64 0 }, ptr %a618 call void @finch_str_concat(ptr %a616, ptr %a617, ptr %a618) store { ptr, i64, i64 } %t615, ptr %a619 call void @finch_str_drop(ptr %a619) %t620 = load { ptr, i64, i64 }, ptr %a616 %t621 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t622 = getelementptr inbounds %S.gen.Val, ptr %t621, i32 0, i32 0 %t623 = load { ptr, i64, i64 }, ptr %t622 store { ptr, i64, i64 } %t620, ptr %a625 store { ptr, i64, i64 } %t623, ptr %a626 call void @finch_str_concat(ptr %a624, ptr %a625, ptr %a626) store { ptr, i64, i64 } %t620, ptr %a627 call void @finch_str_drop(ptr %a627) %t628 = load { ptr, i64, i64 }, ptr %a624 store { ptr, i64, i64 } %t628, ptr %a630 store { ptr, i64, i64 } { ptr @.str.4579, i64 3, i64 0 }, ptr %a631 call void @finch_str_concat(ptr %a629, ptr %a630, ptr %a631) store { ptr, i64, i64 } %t628, ptr %a632 call void @finch_str_drop(ptr %a632) %t633 = load { ptr, i64, i64 }, ptr %a629 %t634 = call { ptr, i64, i64 } @finch.gen.op(ptr %t607, { ptr, i64, i64 } %t633) store { ptr, i64, i64 } %t633, ptr %a635 call void @finch_str_drop(ptr %a635) store { ptr, i64, i64 } %t634, ptr %a636 %t637 = load ptr, ptr %a1 %t638 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t639 = load %S.gen.Val, ptr %t638 call void @finch.gen.release(ptr %t637, %S.gen.Val %t639) %t640 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t641 = load { ptr, i64, i64 }, ptr %a636 store { ptr, i64, i64 } %t641, ptr %a642 call void @finch_str_copy(ptr %a643, ptr %a642) %t644 = load { ptr, i64, i64 }, ptr %a643 %t645 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t644, 0 %t646 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4580, i64 3, i64 0 }) %t647 = insertvalue %S.gen.Val %t645, %S.ast.Type %t646, 1 %t648 = insertvalue %S.gen.Ref %t640, %S.gen.Val %t647, 2 call void @finch_str_drop(ptr %a636) call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t648 endif7138: %t649 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t650 = load { ptr, i64, i64 }, ptr %t649 store { ptr, i64, i64 } %t650, ptr %a651 store { ptr, i64, i64 } { ptr @.str.4581, i64 6, i64 0 }, ptr %a652 %t653 = call i32 @finch_str_eq(ptr %a651, ptr %a652) %t654 = icmp eq i32 %t653, 0 br i1 %t654, label %then7148, label %endif7150 then7148: %t655 = load ptr, ptr %a1 %t656 = load %S.ast.Node, ptr %a2 %t657 = load %S.ast.Type, ptr %a164 %t658 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t657) store { ptr, i64, i64 } %t658, ptr %a660 store { ptr, i64, i64 } { ptr @.str.4582, i64 21, i64 0 }, ptr %a661 call void @finch_str_concat(ptr %a659, ptr %a660, ptr %a661) store { ptr, i64, i64 } %t658, ptr %a662 call void @finch_str_drop(ptr %a662) %t663 = load { ptr, i64, i64 }, ptr %a659 %t664 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t665 = load { ptr, i64, i64 }, ptr %t664 store { ptr, i64, i64 } %t663, ptr %a667 store { ptr, i64, i64 } %t665, ptr %a668 call void @finch_str_concat(ptr %a666, ptr %a667, ptr %a668) store { ptr, i64, i64 } %t663, ptr %a669 call void @finch_str_drop(ptr %a669) %t670 = load { ptr, i64, i64 }, ptr %a666 store { ptr, i64, i64 } %t670, ptr %a672 store { ptr, i64, i64 } { ptr @.str.4583, i64 2, i64 0 }, ptr %a673 call void @finch_str_concat(ptr %a671, ptr %a672, ptr %a673) store { ptr, i64, i64 } %t670, ptr %a674 call void @finch_str_drop(ptr %a674) %t675 = load { ptr, i64, i64 }, ptr %a671 call void @finch.gen.fail(ptr %t655, %S.ast.Node %t656, { ptr, i64, i64 } %t675) store { ptr, i64, i64 } %t675, ptr %a676 call void @finch_str_drop(ptr %a676) br label %endif7150 endif7150: %t677 = load ptr, ptr %a1 %t678 = icmp eq ptr %t677, null br i1 %t678, label %panic7151, label %ok7152 panic7151: call void @finch_panic(ptr @.str.4584, i64 3979, ptr @.str.4585) unreachable ok7152: %t679 = getelementptr inbounds %S.gen.Gen, ptr %t677, i32 0, i32 16 %t680 = load ptr, ptr %a1 %t681 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 3 %t682 = load { ptr, i64, i64 }, ptr %t681 %t683 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 2 %t684 = load { ptr, i64, i64 }, ptr %t683 %t685 = call i64 @finch.gen.findStruct(ptr %t680, { ptr, i64, i64 } %t682, { ptr, i64, i64 } %t684) %t686 = load { ptr, i64, i64 }, ptr %t679 %t687 = extractvalue { ptr, i64, i64 } %t686, 1 %t688 = icmp uge i64 %t685, %t687 br i1 %t688, label %range7153, label %inrange7154 range7153: call void @finch_panic_index(ptr @.str.4586, i64 3979, i64 %t685, i64 %t687) unreachable inrange7154: %t689 = extractvalue { ptr, i64, i64 } %t686, 0 %t690 = getelementptr inbounds %S.gen.StructDef, ptr %t689, i64 %t685 %t691 = load %S.gen.StructDef, ptr %t690 store %S.gen.StructDef %t691, ptr %a692 call void @finch.copy.S_gen_StructDef(ptr %a693, ptr %a692) %t694 = load %S.gen.StructDef, ptr %a693 store %S.gen.StructDef %t694, ptr %a695 %t696 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 11 %t697 = getelementptr inbounds { ptr, i64, i64 }, ptr %t696, i32 0, i32 1 %t698 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t699 = load { ptr, i64, i64 }, ptr %t698 store i64 -1, ptr %a700 %t701 = load i64, ptr %t697 %t702 = load ptr, ptr %t696 store i64 0, ptr %a703 br label %find.cond7155 find.cond7155: %t704 = load i64, ptr %a703 %t705 = icmp slt i64 %t704, %t701 br i1 %t705, label %find.body7156, label %find.end7159 find.body7156: %t706 = getelementptr inbounds { ptr, i64, i64 }, ptr %t702, i64 %t704 %t707 = load { ptr, i64, i64 }, ptr %t706 store { ptr, i64, i64 } %t707, ptr %a708 store { ptr, i64, i64 } %t699, ptr %a709 %t710 = call i32 @finch_str_eq(ptr %a708, ptr %a709) %t711 = icmp ne i32 %t710, 0 br i1 %t711, label %find.hit7157, label %find.next7158 find.hit7157: store i64 %t704, ptr %a700 br label %find.end7159 find.next7158: %t712 = add i64 %t704, 1 store i64 %t712, ptr %a703 br label %find.cond7155 find.end7159: %t713 = load i64, ptr %a700 store i64 %t713, ptr %a714 %t715 = load i64, ptr %a714 %t716 = icmp slt i64 %t715, 0 br i1 %t716, label %then7160, label %endif7162 then7160: %t717 = load ptr, ptr %a1 %t718 = load %S.ast.Node, ptr %a2 %t719 = load %S.ast.Type, ptr %a164 %t720 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t719) store { ptr, i64, i64 } { ptr @.str.4587, i64 11, i64 0 }, ptr %a722 store { ptr, i64, i64 } %t720, ptr %a723 call void @finch_str_concat(ptr %a721, ptr %a722, ptr %a723) store { ptr, i64, i64 } %t720, ptr %a724 call void @finch_str_drop(ptr %a724) %t725 = load { ptr, i64, i64 }, ptr %a721 store { ptr, i64, i64 } %t725, ptr %a727 store { ptr, i64, i64 } { ptr @.str.4588, i64 15, i64 0 }, ptr %a728 call void @finch_str_concat(ptr %a726, ptr %a727, ptr %a728) store { ptr, i64, i64 } %t725, ptr %a729 call void @finch_str_drop(ptr %a729) %t730 = load { ptr, i64, i64 }, ptr %a726 %t731 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t732 = load { ptr, i64, i64 }, ptr %t731 store { ptr, i64, i64 } %t730, ptr %a734 store { ptr, i64, i64 } %t732, ptr %a735 call void @finch_str_concat(ptr %a733, ptr %a734, ptr %a735) store { ptr, i64, i64 } %t730, ptr %a736 call void @finch_str_drop(ptr %a736) %t737 = load { ptr, i64, i64 }, ptr %a733 store { ptr, i64, i64 } %t737, ptr %a739 store { ptr, i64, i64 } { ptr @.str.4589, i64 11, i64 0 }, ptr %a740 call void @finch_str_concat(ptr %a738, ptr %a739, ptr %a740) store { ptr, i64, i64 } %t737, ptr %a741 call void @finch_str_drop(ptr %a741) %t742 = load { ptr, i64, i64 }, ptr %a738 %t743 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 11 %t744 = getelementptr inbounds { ptr, i64, i64 }, ptr %t743, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4590, i64 2, i64 0 }, ptr %a745 call void @finch_str_join(ptr %a746, ptr %t743, ptr %a745) %t747 = load { ptr, i64, i64 }, ptr %a746 store { ptr, i64, i64 } %t742, ptr %a749 store { ptr, i64, i64 } %t747, ptr %a750 call void @finch_str_concat(ptr %a748, ptr %a749, ptr %a750) store { ptr, i64, i64 } %t742, ptr %a751 call void @finch_str_drop(ptr %a751) store { ptr, i64, i64 } %t747, ptr %a752 call void @finch_str_drop(ptr %a752) %t753 = load { ptr, i64, i64 }, ptr %a748 store { ptr, i64, i64 } %t753, ptr %a755 store { ptr, i64, i64 } { ptr @.str.4591, i64 1, i64 0 }, ptr %a756 call void @finch_str_concat(ptr %a754, ptr %a755, ptr %a756) store { ptr, i64, i64 } %t753, ptr %a757 call void @finch_str_drop(ptr %a757) %t758 = load { ptr, i64, i64 }, ptr %a754 call void @finch.gen.fail(ptr %t717, %S.ast.Node %t718, { ptr, i64, i64 } %t758) store { ptr, i64, i64 } %t758, ptr %a759 call void @finch_str_drop(ptr %a759) br label %endif7162 endif7162: %t760 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 12 %t761 = load i64, ptr %a714 %t762 = load { ptr, i64, i64 }, ptr %t760 %t763 = extractvalue { ptr, i64, i64 } %t762, 1 %t764 = icmp uge i64 %t761, %t763 br i1 %t764, label %range7163, label %inrange7164 range7163: call void @finch_panic_index(ptr @.str.4592, i64 3984, i64 %t761, i64 %t763) unreachable inrange7164: %t765 = extractvalue { ptr, i64, i64 } %t762, 0 %t766 = getelementptr inbounds %S.ast.Type, ptr %t765, i64 %t761 %t767 = load %S.ast.Type, ptr %t766 store %S.ast.Type %t767, ptr %a768 call void @finch.copy.S_ast_Type(ptr %a769, ptr %a768) %t770 = load %S.ast.Type, ptr %a769 store %S.ast.Type %t770, ptr %a771 %t772 = load ptr, ptr %a1 %t773 = load %S.ast.Node, ptr %a2 %t774 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t775 = load i64, ptr %t774 %t776 = add i64 %t775, 1 %t777 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t778 = getelementptr inbounds { ptr, i64, i64 }, ptr %t777, i32 0, i32 1 %t779 = load i64, ptr %t778 %t780 = load %S.ast.Type, ptr %a771 %t781 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t780) store { ptr, i64, i64 } { ptr @.str.4593, i64 9, i64 0 }, ptr %a783 store { ptr, i64, i64 } %t781, ptr %a784 call void @finch_str_concat(ptr %a782, ptr %a783, ptr %a784) store { ptr, i64, i64 } %t781, ptr %a785 call void @finch_str_drop(ptr %a785) %t786 = load { ptr, i64, i64 }, ptr %a782 store { ptr, i64, i64 } %t786, ptr %a788 store { ptr, i64, i64 } { ptr @.str.4594, i64 1, i64 0 }, ptr %a789 call void @finch_str_concat(ptr %a787, ptr %a788, ptr %a789) store { ptr, i64, i64 } %t786, ptr %a790 call void @finch_str_drop(ptr %a790) %t791 = load { ptr, i64, i64 }, ptr %a787 %t792 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t793 = load { ptr, i64, i64 }, ptr %t792 store { ptr, i64, i64 } %t791, ptr %a795 store { ptr, i64, i64 } %t793, ptr %a796 call void @finch_str_concat(ptr %a794, ptr %a795, ptr %a796) store { ptr, i64, i64 } %t791, ptr %a797 call void @finch_str_drop(ptr %a797) %t798 = load { ptr, i64, i64 }, ptr %a794 store { ptr, i64, i64 } %t798, ptr %a800 store { ptr, i64, i64 } { ptr @.str.4595, i64 4, i64 0 }, ptr %a801 call void @finch_str_concat(ptr %a799, ptr %a800, ptr %a801) store { ptr, i64, i64 } %t798, ptr %a802 call void @finch_str_drop(ptr %a802) %t803 = load { ptr, i64, i64 }, ptr %a799 call void @finch.gen.noteRef(ptr %t772, %S.ast.Node %t773, i64 %t776, i64 %t779, { ptr, i64, i64 } %t803, { ptr, i64, i64 } { ptr @.str.4596, i64 0, i64 0 }, i64 0, i64 0) store { ptr, i64, i64 } %t803, ptr %a804 call void @finch_str_drop(ptr %a804) %t805 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t806 = load i1, ptr %t805 br i1 %t806, label %then7165, label %endif7167 then7165: %t807 = load ptr, ptr %a1 %t808 = load ptr, ptr %a1 %t809 = load %S.ast.Type, ptr %a164 %t810 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t808, %S.ast.Type %t809) store { ptr, i64, i64 } { ptr @.str.4597, i64 23, i64 0 }, ptr %a812 store { ptr, i64, i64 } %t810, ptr %a813 call void @finch_str_concat(ptr %a811, ptr %a812, ptr %a813) store { ptr, i64, i64 } %t810, ptr %a814 call void @finch_str_drop(ptr %a814) %t815 = load { ptr, i64, i64 }, ptr %a811 store { ptr, i64, i64 } %t815, ptr %a817 store { ptr, i64, i64 } { ptr @.str.4598, i64 6, i64 0 }, ptr %a818 call void @finch_str_concat(ptr %a816, ptr %a817, ptr %a818) store { ptr, i64, i64 } %t815, ptr %a819 call void @finch_str_drop(ptr %a819) %t820 = load { ptr, i64, i64 }, ptr %a816 %t821 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 %t822 = getelementptr inbounds %S.gen.Place, ptr %t821, i32 0, i32 0 %t823 = load { ptr, i64, i64 }, ptr %t822 store { ptr, i64, i64 } %t820, ptr %a825 store { ptr, i64, i64 } %t823, ptr %a826 call void @finch_str_concat(ptr %a824, ptr %a825, ptr %a826) store { ptr, i64, i64 } %t820, ptr %a827 call void @finch_str_drop(ptr %a827) %t828 = load { ptr, i64, i64 }, ptr %a824 store { ptr, i64, i64 } %t828, ptr %a830 store { ptr, i64, i64 } { ptr @.str.4599, i64 13, i64 0 }, ptr %a831 call void @finch_str_concat(ptr %a829, ptr %a830, ptr %a831) store { ptr, i64, i64 } %t828, ptr %a832 call void @finch_str_drop(ptr %a832) %t833 = load { ptr, i64, i64 }, ptr %a829 %t834 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 3 %t835 = load i64, ptr %a714 %t836 = load { ptr, i64, i64 }, ptr %t834 %t837 = extractvalue { ptr, i64, i64 } %t836, 1 %t838 = icmp uge i64 %t835, %t837 br i1 %t838, label %range7168, label %inrange7169 range7168: call void @finch_panic_index(ptr @.str.4600, i64 3987, i64 %t835, i64 %t837) unreachable inrange7169: %t839 = extractvalue { ptr, i64, i64 } %t836, 0 %t840 = getelementptr inbounds i64, ptr %t839, i64 %t835 %t841 = load i64, ptr %t840 call void @finch_str_from_int(ptr %a842, i64 %t841) %t843 = load { ptr, i64, i64 }, ptr %a842 store { ptr, i64, i64 } %t833, ptr %a845 store { ptr, i64, i64 } %t843, ptr %a846 call void @finch_str_concat(ptr %a844, ptr %a845, ptr %a846) store { ptr, i64, i64 } %t833, ptr %a847 call void @finch_str_drop(ptr %a847) store { ptr, i64, i64 } %t843, ptr %a848 call void @finch_str_drop(ptr %a848) %t849 = load { ptr, i64, i64 }, ptr %a844 %t850 = call { ptr, i64, i64 } @finch.gen.op(ptr %t807, { ptr, i64, i64 } %t849) store { ptr, i64, i64 } %t849, ptr %a851 call void @finch_str_drop(ptr %a851) store { ptr, i64, i64 } %t850, ptr %a852 %t853 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t854 = load { ptr, i64, i64 }, ptr %a852 store { ptr, i64, i64 } %t854, ptr %a855 call void @finch_str_copy(ptr %a856, ptr %a855) %t857 = load { ptr, i64, i64 }, ptr %a856 %t858 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t857, 0 %t859 = load %S.ast.Type, ptr %a771 store %S.ast.Type %t859, ptr %a860 call void @finch.copy.S_ast_Type(ptr %a861, ptr %a860) %t862 = load %S.ast.Type, ptr %a861 %t863 = insertvalue %S.gen.Place %t858, %S.ast.Type %t862, 1 %t864 = insertvalue %S.gen.Ref %t853, %S.gen.Place %t863, 1 call void @finch_str_drop(ptr %a852) call void @finch.drop.S_ast_Type(ptr %a771) call void @finch.drop.S_gen_StructDef(ptr %a695) call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t864 endif7167: %t865 = load ptr, ptr %a1 %t866 = load ptr, ptr %a1 %t867 = load %S.ast.Type, ptr %a164 %t868 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t866, %S.ast.Type %t867) store { ptr, i64, i64 } { ptr @.str.4601, i64 13, i64 0 }, ptr %a870 store { ptr, i64, i64 } %t868, ptr %a871 call void @finch_str_concat(ptr %a869, ptr %a870, ptr %a871) store { ptr, i64, i64 } %t868, ptr %a872 call void @finch_str_drop(ptr %a872) %t873 = load { ptr, i64, i64 }, ptr %a869 store { ptr, i64, i64 } %t873, ptr %a875 store { ptr, i64, i64 } { ptr @.str.4602, i64 1, i64 0 }, ptr %a876 call void @finch_str_concat(ptr %a874, ptr %a875, ptr %a876) store { ptr, i64, i64 } %t873, ptr %a877 call void @finch_str_drop(ptr %a877) %t878 = load { ptr, i64, i64 }, ptr %a874 %t879 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t880 = getelementptr inbounds %S.gen.Val, ptr %t879, i32 0, i32 0 %t881 = load { ptr, i64, i64 }, ptr %t880 store { ptr, i64, i64 } %t878, ptr %a883 store { ptr, i64, i64 } %t881, ptr %a884 call void @finch_str_concat(ptr %a882, ptr %a883, ptr %a884) store { ptr, i64, i64 } %t878, ptr %a885 call void @finch_str_drop(ptr %a885) %t886 = load { ptr, i64, i64 }, ptr %a882 store { ptr, i64, i64 } %t886, ptr %a888 store { ptr, i64, i64 } { ptr @.str.4603, i64 2, i64 0 }, ptr %a889 call void @finch_str_concat(ptr %a887, ptr %a888, ptr %a889) store { ptr, i64, i64 } %t886, ptr %a890 call void @finch_str_drop(ptr %a890) %t891 = load { ptr, i64, i64 }, ptr %a887 %t892 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 3 %t893 = load i64, ptr %a714 %t894 = load { ptr, i64, i64 }, ptr %t892 %t895 = extractvalue { ptr, i64, i64 } %t894, 1 %t896 = icmp uge i64 %t893, %t895 br i1 %t896, label %range7170, label %inrange7171 range7170: call void @finch_panic_index(ptr @.str.4604, i64 3990, i64 %t893, i64 %t895) unreachable inrange7171: %t897 = extractvalue { ptr, i64, i64 } %t894, 0 %t898 = getelementptr inbounds i64, ptr %t897, i64 %t893 %t899 = load i64, ptr %t898 call void @finch_str_from_int(ptr %a900, i64 %t899) %t901 = load { ptr, i64, i64 }, ptr %a900 store { ptr, i64, i64 } %t891, ptr %a903 store { ptr, i64, i64 } %t901, ptr %a904 call void @finch_str_concat(ptr %a902, ptr %a903, ptr %a904) store { ptr, i64, i64 } %t891, ptr %a905 call void @finch_str_drop(ptr %a905) store { ptr, i64, i64 } %t901, ptr %a906 call void @finch_str_drop(ptr %a906) %t907 = load { ptr, i64, i64 }, ptr %a902 %t908 = call { ptr, i64, i64 } @finch.gen.op(ptr %t865, { ptr, i64, i64 } %t907) store { ptr, i64, i64 } %t907, ptr %a909 call void @finch_str_drop(ptr %a909) store { ptr, i64, i64 } %t908, ptr %a910 %t911 = load { ptr, i64, i64 }, ptr %a910 store { ptr, i64, i64 } %t911, ptr %a912 call void @finch_str_copy(ptr %a913, ptr %a912) %t914 = load { ptr, i64, i64 }, ptr %a913 %t915 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t914, 0 %t916 = load %S.ast.Type, ptr %a771 store %S.ast.Type %t916, ptr %a917 call void @finch.copy.S_ast_Type(ptr %a918, ptr %a917) %t919 = load %S.ast.Type, ptr %a918 %t920 = insertvalue %S.gen.Val %t915, %S.ast.Type %t919, 1 store %S.gen.Val %t920, ptr %a921 %t922 = load ptr, ptr %a1 %t923 = load %S.ast.Type, ptr %a771 %t924 = call i1 @finch.gen.owning(ptr %t922, %S.ast.Type %t923) br label %logic.from7172 logic.from7172: br i1 %t924, label %logic.rhs7173, label %logic.end7174 logic.rhs7173: %t925 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t926 = getelementptr inbounds %S.gen.Val, ptr %t925, i32 0, i32 2 %t927 = load i1, ptr %t926 br label %logic.rend7175 logic.rend7175: br label %logic.end7174 logic.end7174: %t928 = phi i1 [ false, %logic.from7172 ], [ %t927, %logic.rend7175 ] br i1 %t928, label %then7176, label %endif7178 then7176: %t929 = load ptr, ptr %a1 %t930 = load { ptr, i64, i64 }, ptr %a910 %t931 = load %S.ast.Type, ptr %a771 %t932 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t929, { ptr, i64, i64 } %t930, %S.ast.Type %t931) %t933 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t932, 0 %t934 = load %S.ast.Type, ptr %a771 store %S.ast.Type %t934, ptr %a935 call void @finch.copy.S_ast_Type(ptr %a936, ptr %a935) %t937 = load %S.ast.Type, ptr %a936 %t938 = insertvalue %S.gen.Val %t933, %S.ast.Type %t937, 1 %t939 = insertvalue %S.gen.Val %t938, i1 true, 2 %t940 = load %S.gen.Val, ptr %a921 store %S.gen.Val %t939, ptr %a921 store %S.gen.Val %t940, ptr %a941 call void @finch.drop.S_gen_Val(ptr %a941) br label %endif7178 endif7178: %t942 = load ptr, ptr %a1 %t943 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t944 = load %S.gen.Val, ptr %t943 call void @finch.gen.release(ptr %t942, %S.gen.Val %t944) %t945 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t946 = load %S.gen.Val, ptr %a921 store %S.gen.Val %t946, ptr %a947 call void @finch.copy.S_gen_Val(ptr %a948, ptr %a947) %t949 = load %S.gen.Val, ptr %a948 %t950 = insertvalue %S.gen.Ref %t945, %S.gen.Val %t949, 2 call void @finch.drop.S_gen_Val(ptr %a921) call void @finch_str_drop(ptr %a910) call void @finch.drop.S_ast_Type(ptr %a771) call void @finch.drop.S_gen_StructDef(ptr %a695) call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t950 } define internal %S.gen.Ref @finch.gen.index(ptr %p0, %S.ast.Node %p1, i1 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i1, align 16 %a14 = alloca %S.gen.Ref, align 16 %a20 = alloca i64, align 16 %a32 = alloca %S.gen.Ref, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i1 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 br i1 %t8, label %range7179, label %inrange7180 range7179: call void @finch_panic_index(ptr @.str.4605, i64 4000, i64 0, i64 %t7) unreachable inrange7180: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 %t12 = load i1, ptr %a3 %t13 = call %S.gen.Ref @finch.gen.ref(ptr %t4, %S.ast.Node %t11, i1 %t12) store %S.gen.Ref %t13, ptr %a14 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic7181, label %ok7182 panic7181: call void @finch_panic(ptr @.str.4606, i64 4001, ptr @.str.4607) unreachable ok7182: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 11 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load i64, ptr %t18 store i64 %t19, ptr %a20 %t21 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 0 %t22 = load i1, ptr %t21 %t23 = xor i1 %t22, true br i1 %t23, label %then7183, label %endif7185 then7183: %t24 = load ptr, ptr %a1 %t25 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 2 %t26 = load %S.gen.Val, ptr %t25 call void @finch.gen.hold(ptr %t24, %S.gen.Val %t26) br label %endif7185 endif7185: %t27 = load ptr, ptr %a1 %t28 = load %S.ast.Node, ptr %a2 %t29 = load %S.gen.Ref, ptr %a14 %t30 = load i1, ptr %a3 %t31 = call %S.gen.Ref @finch.gen.indexOf(ptr %t27, %S.ast.Node %t28, %S.gen.Ref %t29, i1 %t30) store %S.gen.Ref %t31, ptr %a32 %t33 = load ptr, ptr %a1 %t34 = load i64, ptr %a20 call void @finch.gen.heldEnd(ptr %t33, i64 %t34) %t35 = load %S.gen.Ref, ptr %a32 call void @finch.drop.S_gen_Ref(ptr %a14) ret %S.gen.Ref %t35 } define internal %S.gen.Ref @finch.gen.indexOf(ptr %p0, %S.ast.Node %p1, %S.gen.Ref %p2, i1 %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.gen.Ref, align 16 %a4 = alloca i1, align 16 %a8 = alloca %S.ast.Type, align 16 %a9 = alloca %S.ast.Type, align 16 %a11 = alloca %S.ast.Type, align 16 %a17 = alloca %S.ast.Type, align 16 %a18 = alloca %S.ast.Type, align 16 %a21 = alloca %S.ast.Type, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca %S.gen.Val, align 16 %a54 = alloca %S.ast.Type, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca %S.gen.Val, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca %S.ast.Type, align 16 %a140 = alloca %S.ast.Type, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca %S.ast.Type, align 16 %a180 = alloca %S.ast.Type, align 16 %a182 = alloca %S.ast.Type, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca %S.ast.Type, align 16 %a220 = alloca %S.ast.Type, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca %S.ast.Type, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca %S.ast.Type, align 16 %a263 = alloca %S.ast.Type, align 16 %a266 = alloca %S.ast.Type, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a346 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca { ptr, i64, i64 }, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a369 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca %S.ast.Type, align 16 %a386 = alloca %S.ast.Type, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a399 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca %S.ast.Type, align 16 %a405 = alloca %S.ast.Type, align 16 %a408 = alloca %S.gen.Val, align 16 %a422 = alloca %S.ast.Type, align 16 %a423 = alloca %S.ast.Type, align 16 %a428 = alloca %S.gen.Val, align 16 %a434 = alloca %S.gen.Val, align 16 %a435 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.gen.Ref %p2, ptr %a3 store i1 %p3, ptr %a4 %t5 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t6 = getelementptr inbounds %S.gen.Val, ptr %t5, i32 0, i32 1 %t7 = load %S.ast.Type, ptr %t6 store %S.ast.Type %t7, ptr %a8 call void @finch.copy.S_ast_Type(ptr %a9, ptr %a8) %t10 = load %S.ast.Type, ptr %a9 store %S.ast.Type %t10, ptr %a11 %t12 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t13 = load i1, ptr %t12 br i1 %t13, label %then7186, label %endif7188 then7186: %t14 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t15 = getelementptr inbounds %S.gen.Place, ptr %t14, i32 0, i32 1 %t16 = load %S.ast.Type, ptr %t15 store %S.ast.Type %t16, ptr %a17 call void @finch.copy.S_ast_Type(ptr %a18, ptr %a17) %t19 = load %S.ast.Type, ptr %a18 %t20 = load %S.ast.Type, ptr %a11 store %S.ast.Type %t19, ptr %a11 store %S.ast.Type %t20, ptr %a21 call void @finch.drop.S_ast_Type(ptr %a21) br label %endif7188 endif7188: %t22 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 %t23 = load { ptr, i64, i64 }, ptr %t22 store { ptr, i64, i64 } %t23, ptr %a24 store { ptr, i64, i64 } { ptr @.str.4608, i64 3, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 br i1 %t27, label %then7189, label %endif7191 then7189: %t28 = load ptr, ptr %a1 %t29 = load %S.ast.Node, ptr %a2 %t30 = load %S.gen.Ref, ptr %a3 %t31 = load %S.ast.Type, ptr %a11 %t32 = load i1, ptr %a4 %t33 = call %S.gen.Ref @finch.gen.mapIndex(ptr %t28, %S.ast.Node %t29, %S.gen.Ref %t30, %S.ast.Type %t31, i1 %t32) call void @finch.drop.S_ast_Type(ptr %a11) ret %S.gen.Ref %t33 endif7191: %t34 = load ptr, ptr %a1 %t35 = load ptr, ptr %a1 %t36 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t37 = load { ptr, i64, i64 }, ptr %t36 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 1, %t38 br i1 %t39, label %range7192, label %inrange7193 range7192: call void @finch_panic_index(ptr @.str.4609, i64 4018, i64 1, i64 %t38) unreachable inrange7193: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 1 %t42 = load %S.ast.Node, ptr %t41 %t43 = call %S.gen.Val @finch.gen.expr(ptr %t35, %S.ast.Node %t42) %t44 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4610, i64 3, i64 0 }) %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 1, %t47 br i1 %t48, label %range7194, label %inrange7195 range7194: call void @finch_panic_index(ptr @.str.4611, i64 4018, i64 1, i64 %t47) unreachable inrange7195: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 %t51 = load %S.ast.Node, ptr %t50 %t52 = call %S.gen.Val @finch.gen.coerce(ptr %t34, %S.gen.Val %t43, %S.ast.Type %t44, %S.ast.Node %t51, { ptr, i64, i64 } { ptr @.str.4612, i64 8, i64 0 }) store %S.gen.Val %t43, ptr %a53 call void @finch.drop.S_gen_Val(ptr %a53) store %S.ast.Type %t44, ptr %a54 call void @finch.drop.S_ast_Type(ptr %a54) %t55 = extractvalue %S.gen.Val %t52, 0 store { ptr, i64, i64 } %t55, ptr %a56 call void @finch_str_copy(ptr %a57, ptr %a56) %t58 = load { ptr, i64, i64 }, ptr %a57 store %S.gen.Val %t52, ptr %a59 call void @finch.drop.S_gen_Val(ptr %a59) store { ptr, i64, i64 } %t58, ptr %a60 %t61 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 %t62 = load { ptr, i64, i64 }, ptr %t61 store { ptr, i64, i64 } %t62, ptr %a63 store { ptr, i64, i64 } { ptr @.str.4613, i64 5, i64 0 }, ptr %a64 %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) %t66 = icmp ne i32 %t65, 0 br i1 %t66, label %then7196, label %endif7198 then7196: store { ptr, i64, i64 } { ptr @.str.4614, i64 0, i64 0 }, ptr %a67 %t68 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t69 = load i1, ptr %t68 br i1 %t69, label %then7199, label %else7200 then7199: %t70 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t71 = getelementptr inbounds %S.gen.Place, ptr %t70, i32 0, i32 0 %t72 = load { ptr, i64, i64 }, ptr %t71 store { ptr, i64, i64 } %t72, ptr %a73 call void @finch_str_copy(ptr %a74, ptr %a73) %t75 = load { ptr, i64, i64 }, ptr %a74 %t76 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t75, ptr %a67 store { ptr, i64, i64 } %t76, ptr %a77 call void @finch_str_drop(ptr %a77) br label %endif7201 else7200: %t78 = load ptr, ptr %a1 %t79 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t80 = load %S.gen.Val, ptr %t79 %t81 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t78, %S.gen.Val %t80) %t82 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t81, ptr %a67 store { ptr, i64, i64 } %t82, ptr %a83 call void @finch_str_drop(ptr %a83) br label %endif7201 endif7201: %t84 = load ptr, ptr %a1 %t85 = load { ptr, i64, i64 }, ptr %a60 %t86 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 4 %t87 = load i64, ptr %t86 call void @finch_str_from_int(ptr %a88, i64 %t87) %t89 = load { ptr, i64, i64 }, ptr %a88 %t90 = load %S.ast.Node, ptr %a2 call void @finch.gen.boundsCheck(ptr %t84, { ptr, i64, i64 } %t85, { ptr, i64, i64 } %t89, %S.ast.Node %t90) store { ptr, i64, i64 } %t89, ptr %a91 call void @finch_str_drop(ptr %a91) %t92 = load ptr, ptr %a1 %t93 = load ptr, ptr %a1 %t94 = load %S.ast.Type, ptr %a11 %t95 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t93, %S.ast.Type %t94) store { ptr, i64, i64 } { ptr @.str.4615, i64 23, i64 0 }, ptr %a97 store { ptr, i64, i64 } %t95, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) store { ptr, i64, i64 } %t95, ptr %a99 call void @finch_str_drop(ptr %a99) %t100 = load { ptr, i64, i64 }, ptr %a96 store { ptr, i64, i64 } %t100, ptr %a102 store { ptr, i64, i64 } { ptr @.str.4616, i64 6, i64 0 }, ptr %a103 call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) store { ptr, i64, i64 } %t100, ptr %a104 call void @finch_str_drop(ptr %a104) %t105 = load { ptr, i64, i64 }, ptr %a101 %t106 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t105, ptr %a108 store { ptr, i64, i64 } %t106, ptr %a109 call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) store { ptr, i64, i64 } %t105, ptr %a110 call void @finch_str_drop(ptr %a110) %t111 = load { ptr, i64, i64 }, ptr %a107 store { ptr, i64, i64 } %t111, ptr %a113 store { ptr, i64, i64 } { ptr @.str.4617, i64 13, i64 0 }, ptr %a114 call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) store { ptr, i64, i64 } %t111, ptr %a115 call void @finch_str_drop(ptr %a115) %t116 = load { ptr, i64, i64 }, ptr %a112 %t117 = load { ptr, i64, i64 }, ptr %a60 store { ptr, i64, i64 } %t116, ptr %a119 store { ptr, i64, i64 } %t117, ptr %a120 call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) store { ptr, i64, i64 } %t116, ptr %a121 call void @finch_str_drop(ptr %a121) %t122 = load { ptr, i64, i64 }, ptr %a118 %t123 = call { ptr, i64, i64 } @finch.gen.op(ptr %t92, { ptr, i64, i64 } %t122) store { ptr, i64, i64 } %t122, ptr %a124 call void @finch_str_drop(ptr %a124) store { ptr, i64, i64 } %t123, ptr %a125 %t126 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t127 = load { ptr, i64, i64 }, ptr %a125 store { ptr, i64, i64 } %t127, ptr %a128 call void @finch_str_copy(ptr %a129, ptr %a128) %t130 = load { ptr, i64, i64 }, ptr %a129 %t131 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t130, 0 %t132 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 %t133 = load { ptr, i64, i64 }, ptr %t132 %t134 = extractvalue { ptr, i64, i64 } %t133, 1 %t135 = icmp uge i64 0, %t134 br i1 %t135, label %range7202, label %inrange7203 range7202: call void @finch_panic_index(ptr @.str.4618, i64 4028, i64 0, i64 %t134) unreachable inrange7203: %t136 = extractvalue { ptr, i64, i64 } %t133, 0 %t137 = getelementptr inbounds %S.ast.Type, ptr %t136, i64 0 %t138 = load %S.ast.Type, ptr %t137 store %S.ast.Type %t138, ptr %a139 call void @finch.copy.S_ast_Type(ptr %a140, ptr %a139) %t141 = load %S.ast.Type, ptr %a140 %t142 = insertvalue %S.gen.Place %t131, %S.ast.Type %t141, 1 %t143 = insertvalue %S.gen.Ref %t126, %S.gen.Place %t142, 1 call void @finch_str_drop(ptr %a125) call void @finch_str_drop(ptr %a67) call void @finch_str_drop(ptr %a60) call void @finch.drop.S_ast_Type(ptr %a11) ret %S.gen.Ref %t143 endif7198: %t144 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 %t145 = load { ptr, i64, i64 }, ptr %t144 store { ptr, i64, i64 } %t145, ptr %a146 store { ptr, i64, i64 } { ptr @.str.4619, i64 3, i64 0 }, ptr %a147 %t148 = call i32 @finch_str_eq(ptr %a146, ptr %a147) %t149 = icmp ne i32 %t148, 0 br i1 %t149, label %then7204, label %endif7206 then7204: %t150 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i32 0, i32 1 %t152 = load i64, ptr %t151 %t153 = icmp eq i64 %t152, 0 br i1 %t153, label %then7207, label %endif7209 then7207: %t154 = load ptr, ptr %a1 %t155 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t154, %S.ast.Node %t155, { ptr, i64, i64 } { ptr @.str.4620, i64 57, i64 0 }) br label %endif7209 endif7209: %t156 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t157 = getelementptr inbounds %S.gen.Val, ptr %t156, i32 0, i32 0 %t158 = load { ptr, i64, i64 }, ptr %t157 store { ptr, i64, i64 } %t158, ptr %a159 call void @finch_str_copy(ptr %a160, ptr %a159) %t161 = load { ptr, i64, i64 }, ptr %a160 store { ptr, i64, i64 } %t161, ptr %a162 %t163 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t164 = load i1, ptr %t163 br i1 %t164, label %then7210, label %endif7212 then7210: %t165 = load ptr, ptr %a1 %t166 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t167 = getelementptr inbounds %S.gen.Place, ptr %t166, i32 0, i32 0 %t168 = load { ptr, i64, i64 }, ptr %t167 %t169 = call { ptr, i64, i64 } @finch.gen.load(ptr %t165, { ptr, i64, i64 } { ptr @.str.4621, i64 3, i64 0 }, { ptr, i64, i64 } %t168) %t170 = load { ptr, i64, i64 }, ptr %a162 store { ptr, i64, i64 } %t169, ptr %a162 store { ptr, i64, i64 } %t170, ptr %a171 call void @finch_str_drop(ptr %a171) br label %endif7212 endif7212: %t172 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 %t173 = load { ptr, i64, i64 }, ptr %t172 %t174 = extractvalue { ptr, i64, i64 } %t173, 1 %t175 = icmp uge i64 0, %t174 br i1 %t175, label %range7213, label %inrange7214 range7213: call void @finch_panic_index(ptr @.str.4622, i64 4038, i64 0, i64 %t174) unreachable inrange7214: %t176 = extractvalue { ptr, i64, i64 } %t173, 0 %t177 = getelementptr inbounds %S.ast.Type, ptr %t176, i64 0 %t178 = load %S.ast.Type, ptr %t177 store %S.ast.Type %t178, ptr %a179 call void @finch.copy.S_ast_Type(ptr %a180, ptr %a179) %t181 = load %S.ast.Type, ptr %a180 store %S.ast.Type %t181, ptr %a182 %t183 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t184 = load ptr, ptr %a1 %t185 = load ptr, ptr %a1 %t186 = load %S.ast.Type, ptr %a182 %t187 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t185, %S.ast.Type %t186) store { ptr, i64, i64 } { ptr @.str.4623, i64 23, i64 0 }, ptr %a189 store { ptr, i64, i64 } %t187, ptr %a190 call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) store { ptr, i64, i64 } %t187, ptr %a191 call void @finch_str_drop(ptr %a191) %t192 = load { ptr, i64, i64 }, ptr %a188 store { ptr, i64, i64 } %t192, ptr %a194 store { ptr, i64, i64 } { ptr @.str.4624, i64 6, i64 0 }, ptr %a195 call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) store { ptr, i64, i64 } %t192, ptr %a196 call void @finch_str_drop(ptr %a196) %t197 = load { ptr, i64, i64 }, ptr %a193 %t198 = load { ptr, i64, i64 }, ptr %a162 store { ptr, i64, i64 } %t197, ptr %a200 store { ptr, i64, i64 } %t198, ptr %a201 call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) store { ptr, i64, i64 } %t197, ptr %a202 call void @finch_str_drop(ptr %a202) %t203 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } %t203, ptr %a205 store { ptr, i64, i64 } { ptr @.str.4625, i64 6, i64 0 }, ptr %a206 call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206) store { ptr, i64, i64 } %t203, ptr %a207 call void @finch_str_drop(ptr %a207) %t208 = load { ptr, i64, i64 }, ptr %a204 %t209 = load { ptr, i64, i64 }, ptr %a60 store { ptr, i64, i64 } %t208, ptr %a211 store { ptr, i64, i64 } %t209, ptr %a212 call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) store { ptr, i64, i64 } %t208, ptr %a213 call void @finch_str_drop(ptr %a213) %t214 = load { ptr, i64, i64 }, ptr %a210 %t215 = call { ptr, i64, i64 } @finch.gen.op(ptr %t184, { ptr, i64, i64 } %t214) store { ptr, i64, i64 } %t214, ptr %a216 call void @finch_str_drop(ptr %a216) %t217 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t215, 0 %t218 = load %S.ast.Type, ptr %a182 store %S.ast.Type %t218, ptr %a219 call void @finch.copy.S_ast_Type(ptr %a220, ptr %a219) %t221 = load %S.ast.Type, ptr %a220 %t222 = insertvalue %S.gen.Place %t217, %S.ast.Type %t221, 1 %t223 = insertvalue %S.gen.Ref %t183, %S.gen.Place %t222, 1 call void @finch.drop.S_ast_Type(ptr %a182) call void @finch_str_drop(ptr %a162) call void @finch_str_drop(ptr %a60) call void @finch.drop.S_ast_Type(ptr %a11) ret %S.gen.Ref %t223 endif7206: %t224 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 %t225 = load { ptr, i64, i64 }, ptr %t224 store { ptr, i64, i64 } %t225, ptr %a226 store { ptr, i64, i64 } { ptr @.str.4626, i64 5, i64 0 }, ptr %a227 %t228 = call i32 @finch_str_eq(ptr %a226, ptr %a227) %t229 = icmp eq i32 %t228, 0 br label %logic.from7215 logic.from7215: br i1 %t229, label %logic.rhs7216, label %logic.end7217 logic.rhs7216: %t230 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 %t231 = load { ptr, i64, i64 }, ptr %t230 store { ptr, i64, i64 } %t231, ptr %a232 store { ptr, i64, i64 } { ptr @.str.4627, i64 3, i64 0 }, ptr %a233 %t234 = call i32 @finch_str_eq(ptr %a232, ptr %a233) %t235 = icmp eq i32 %t234, 0 br label %logic.rend7218 logic.rend7218: br label %logic.end7217 logic.end7217: %t236 = phi i1 [ false, %logic.from7215 ], [ %t235, %logic.rend7218 ] br i1 %t236, label %then7219, label %endif7221 then7219: %t237 = load ptr, ptr %a1 %t238 = load %S.ast.Node, ptr %a2 %t239 = load %S.ast.Type, ptr %a11 %t240 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t239) store { ptr, i64, i64 } { ptr @.str.4628, i64 46, i64 0 }, ptr %a242 store { ptr, i64, i64 } %t240, ptr %a243 call void @finch_str_concat(ptr %a241, ptr %a242, ptr %a243) store { ptr, i64, i64 } %t240, ptr %a244 call void @finch_str_drop(ptr %a244) %t245 = load { ptr, i64, i64 }, ptr %a241 call void @finch.gen.fail(ptr %t237, %S.ast.Node %t238, { ptr, i64, i64 } %t245) store { ptr, i64, i64 } %t245, ptr %a246 call void @finch_str_drop(ptr %a246) br label %endif7221 endif7221: %t247 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4629, i64 4, i64 0 }) store %S.ast.Type %t247, ptr %a248 %t249 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 %t250 = load { ptr, i64, i64 }, ptr %t249 store { ptr, i64, i64 } %t250, ptr %a251 store { ptr, i64, i64 } { ptr @.str.4630, i64 5, i64 0 }, ptr %a252 %t253 = call i32 @finch_str_eq(ptr %a251, ptr %a252) %t254 = icmp ne i32 %t253, 0 br i1 %t254, label %then7222, label %endif7224 then7222: %t255 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 %t256 = load { ptr, i64, i64 }, ptr %t255 %t257 = extractvalue { ptr, i64, i64 } %t256, 1 %t258 = icmp uge i64 0, %t257 br i1 %t258, label %range7225, label %inrange7226 range7225: call void @finch_panic_index(ptr @.str.4631, i64 4046, i64 0, i64 %t257) unreachable inrange7226: %t259 = extractvalue { ptr, i64, i64 } %t256, 0 %t260 = getelementptr inbounds %S.ast.Type, ptr %t259, i64 0 %t261 = load %S.ast.Type, ptr %t260 store %S.ast.Type %t261, ptr %a262 call void @finch.copy.S_ast_Type(ptr %a263, ptr %a262) %t264 = load %S.ast.Type, ptr %a263 %t265 = load %S.ast.Type, ptr %a248 store %S.ast.Type %t264, ptr %a248 store %S.ast.Type %t265, ptr %a266 call void @finch.drop.S_ast_Type(ptr %a266) br label %endif7224 endif7224: %t267 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 %t268 = load { ptr, i64, i64 }, ptr %t267 store { ptr, i64, i64 } %t268, ptr %a269 store { ptr, i64, i64 } { ptr @.str.4632, i64 3, i64 0 }, ptr %a270 %t271 = call i32 @finch_str_eq(ptr %a269, ptr %a270) %t272 = icmp ne i32 %t271, 0 br label %logic.from7227 logic.from7227: br i1 %t272, label %logic.rhs7228, label %logic.end7229 logic.rhs7228: %t273 = load i1, ptr %a4 br label %logic.rend7230 logic.rend7230: br label %logic.end7229 logic.end7229: %t274 = phi i1 [ false, %logic.from7227 ], [ %t273, %logic.rend7230 ] br i1 %t274, label %then7231, label %endif7233 then7231: %t275 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t276 = load i1, ptr %t275 %t277 = xor i1 %t276, true br i1 %t277, label %then7234, label %endif7236 then7234: %t278 = load ptr, ptr %a1 %t279 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t278, %S.ast.Node %t279, { ptr, i64, i64 } { ptr @.str.4633, i64 44, i64 0 }) br label %endif7236 endif7236: %t280 = load ptr, ptr %a1 %t281 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t282 = getelementptr inbounds %S.gen.Place, ptr %t281, i32 0, i32 0 %t283 = load { ptr, i64, i64 }, ptr %t282 store { ptr, i64, i64 } { ptr @.str.4634, i64 29, i64 0 }, ptr %a285 store { ptr, i64, i64 } %t283, ptr %a286 call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) %t287 = load { ptr, i64, i64 }, ptr %a284 store { ptr, i64, i64 } %t287, ptr %a289 store { ptr, i64, i64 } { ptr @.str.4635, i64 1, i64 0 }, ptr %a290 call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) store { ptr, i64, i64 } %t287, ptr %a291 call void @finch_str_drop(ptr %a291) %t292 = load { ptr, i64, i64 }, ptr %a288 call void @finch.gen.emit(ptr %t280, { ptr, i64, i64 } %t292) store { ptr, i64, i64 } %t292, ptr %a293 call void @finch_str_drop(ptr %a293) br label %endif7233 endif7233: %t294 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t295 = getelementptr inbounds %S.gen.Val, ptr %t294, i32 0, i32 0 %t296 = load { ptr, i64, i64 }, ptr %t295 store { ptr, i64, i64 } %t296, ptr %a297 call void @finch_str_copy(ptr %a298, ptr %a297) %t299 = load { ptr, i64, i64 }, ptr %a298 store { ptr, i64, i64 } %t299, ptr %a300 %t301 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t302 = load i1, ptr %t301 br i1 %t302, label %then7237, label %endif7239 then7237: %t303 = load ptr, ptr %a1 %t304 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t305 = getelementptr inbounds %S.gen.Place, ptr %t304, i32 0, i32 0 %t306 = load { ptr, i64, i64 }, ptr %t305 %t307 = call { ptr, i64, i64 } @finch.gen.load(ptr %t303, { ptr, i64, i64 } { ptr @.str.4636, i64 17, i64 0 }, { ptr, i64, i64 } %t306) %t308 = load { ptr, i64, i64 }, ptr %a300 store { ptr, i64, i64 } %t307, ptr %a300 store { ptr, i64, i64 } %t308, ptr %a309 call void @finch_str_drop(ptr %a309) br label %endif7239 endif7239: %t310 = load ptr, ptr %a1 %t311 = load { ptr, i64, i64 }, ptr %a300 store { ptr, i64, i64 } { ptr @.str.4637, i64 31, i64 0 }, ptr %a313 store { ptr, i64, i64 } %t311, ptr %a314 call void @finch_str_concat(ptr %a312, ptr %a313, ptr %a314) %t315 = load { ptr, i64, i64 }, ptr %a312 store { ptr, i64, i64 } %t315, ptr %a317 store { ptr, i64, i64 } { ptr @.str.4638, i64 3, i64 0 }, ptr %a318 call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) store { ptr, i64, i64 } %t315, ptr %a319 call void @finch_str_drop(ptr %a319) %t320 = load { ptr, i64, i64 }, ptr %a316 %t321 = call { ptr, i64, i64 } @finch.gen.op(ptr %t310, { ptr, i64, i64 } %t320) store { ptr, i64, i64 } %t320, ptr %a322 call void @finch_str_drop(ptr %a322) store { ptr, i64, i64 } %t321, ptr %a323 %t324 = load ptr, ptr %a1 %t325 = load { ptr, i64, i64 }, ptr %a60 %t326 = load { ptr, i64, i64 }, ptr %a323 %t327 = load %S.ast.Node, ptr %a2 call void @finch.gen.boundsCheck(ptr %t324, { ptr, i64, i64 } %t325, { ptr, i64, i64 } %t326, %S.ast.Node %t327) %t328 = load ptr, ptr %a1 %t329 = load { ptr, i64, i64 }, ptr %a300 store { ptr, i64, i64 } { ptr @.str.4639, i64 31, i64 0 }, ptr %a331 store { ptr, i64, i64 } %t329, ptr %a332 call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332) %t333 = load { ptr, i64, i64 }, ptr %a330 store { ptr, i64, i64 } %t333, ptr %a335 store { ptr, i64, i64 } { ptr @.str.4640, i64 3, i64 0 }, ptr %a336 call void @finch_str_concat(ptr %a334, ptr %a335, ptr %a336) store { ptr, i64, i64 } %t333, ptr %a337 call void @finch_str_drop(ptr %a337) %t338 = load { ptr, i64, i64 }, ptr %a334 %t339 = call { ptr, i64, i64 } @finch.gen.op(ptr %t328, { ptr, i64, i64 } %t338) store { ptr, i64, i64 } %t338, ptr %a340 call void @finch_str_drop(ptr %a340) store { ptr, i64, i64 } %t339, ptr %a341 %t342 = load ptr, ptr %a1 %t343 = load ptr, ptr %a1 %t344 = load %S.ast.Type, ptr %a248 %t345 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t343, %S.ast.Type %t344) store { ptr, i64, i64 } { ptr @.str.4641, i64 23, i64 0 }, ptr %a347 store { ptr, i64, i64 } %t345, ptr %a348 call void @finch_str_concat(ptr %a346, ptr %a347, ptr %a348) store { ptr, i64, i64 } %t345, ptr %a349 call void @finch_str_drop(ptr %a349) %t350 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t350, ptr %a352 store { ptr, i64, i64 } { ptr @.str.4642, i64 6, i64 0 }, ptr %a353 call void @finch_str_concat(ptr %a351, ptr %a352, ptr %a353) store { ptr, i64, i64 } %t350, ptr %a354 call void @finch_str_drop(ptr %a354) %t355 = load { ptr, i64, i64 }, ptr %a351 %t356 = load { ptr, i64, i64 }, ptr %a341 store { ptr, i64, i64 } %t355, ptr %a358 store { ptr, i64, i64 } %t356, ptr %a359 call void @finch_str_concat(ptr %a357, ptr %a358, ptr %a359) store { ptr, i64, i64 } %t355, ptr %a360 call void @finch_str_drop(ptr %a360) %t361 = load { ptr, i64, i64 }, ptr %a357 store { ptr, i64, i64 } %t361, ptr %a363 store { ptr, i64, i64 } { ptr @.str.4643, i64 6, i64 0 }, ptr %a364 call void @finch_str_concat(ptr %a362, ptr %a363, ptr %a364) store { ptr, i64, i64 } %t361, ptr %a365 call void @finch_str_drop(ptr %a365) %t366 = load { ptr, i64, i64 }, ptr %a362 %t367 = load { ptr, i64, i64 }, ptr %a60 store { ptr, i64, i64 } %t366, ptr %a369 store { ptr, i64, i64 } %t367, ptr %a370 call void @finch_str_concat(ptr %a368, ptr %a369, ptr %a370) store { ptr, i64, i64 } %t366, ptr %a371 call void @finch_str_drop(ptr %a371) %t372 = load { ptr, i64, i64 }, ptr %a368 %t373 = call { ptr, i64, i64 } @finch.gen.op(ptr %t342, { ptr, i64, i64 } %t372) store { ptr, i64, i64 } %t372, ptr %a374 call void @finch_str_drop(ptr %a374) store { ptr, i64, i64 } %t373, ptr %a375 %t376 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t377 = load i1, ptr %t376 br i1 %t377, label %then7240, label %endif7242 then7240: %t378 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t379 = load { ptr, i64, i64 }, ptr %a375 store { ptr, i64, i64 } %t379, ptr %a380 call void @finch_str_copy(ptr %a381, ptr %a380) %t382 = load { ptr, i64, i64 }, ptr %a381 %t383 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t382, 0 %t384 = load %S.ast.Type, ptr %a248 store %S.ast.Type %t384, ptr %a385 call void @finch.copy.S_ast_Type(ptr %a386, ptr %a385) %t387 = load %S.ast.Type, ptr %a386 %t388 = insertvalue %S.gen.Place %t383, %S.ast.Type %t387, 1 %t389 = insertvalue %S.gen.Ref %t378, %S.gen.Place %t388, 1 call void @finch_str_drop(ptr %a375) call void @finch_str_drop(ptr %a341) call void @finch_str_drop(ptr %a323) call void @finch_str_drop(ptr %a300) call void @finch.drop.S_ast_Type(ptr %a248) call void @finch_str_drop(ptr %a60) call void @finch.drop.S_ast_Type(ptr %a11) ret %S.gen.Ref %t389 endif7242: %t390 = load ptr, ptr %a1 %t391 = load ptr, ptr %a1 %t392 = load %S.ast.Type, ptr %a248 %t393 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t391, %S.ast.Type %t392) %t394 = load { ptr, i64, i64 }, ptr %a375 %t395 = call { ptr, i64, i64 } @finch.gen.load(ptr %t390, { ptr, i64, i64 } %t393, { ptr, i64, i64 } %t394) store { ptr, i64, i64 } %t393, ptr %a396 call void @finch_str_drop(ptr %a396) store { ptr, i64, i64 } %t395, ptr %a397 %t398 = load { ptr, i64, i64 }, ptr %a397 store { ptr, i64, i64 } %t398, ptr %a399 call void @finch_str_copy(ptr %a400, ptr %a399) %t401 = load { ptr, i64, i64 }, ptr %a400 %t402 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t401, 0 %t403 = load %S.ast.Type, ptr %a248 store %S.ast.Type %t403, ptr %a404 call void @finch.copy.S_ast_Type(ptr %a405, ptr %a404) %t406 = load %S.ast.Type, ptr %a405 %t407 = insertvalue %S.gen.Val %t402, %S.ast.Type %t406, 1 store %S.gen.Val %t407, ptr %a408 %t409 = load ptr, ptr %a1 %t410 = load %S.ast.Type, ptr %a248 %t411 = call i1 @finch.gen.owning(ptr %t409, %S.ast.Type %t410) br label %logic.from7243 logic.from7243: br i1 %t411, label %logic.rhs7244, label %logic.end7245 logic.rhs7244: %t412 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t413 = getelementptr inbounds %S.gen.Val, ptr %t412, i32 0, i32 2 %t414 = load i1, ptr %t413 br label %logic.rend7246 logic.rend7246: br label %logic.end7245 logic.end7245: %t415 = phi i1 [ false, %logic.from7243 ], [ %t414, %logic.rend7246 ] br i1 %t415, label %then7247, label %endif7249 then7247: %t416 = load ptr, ptr %a1 %t417 = load { ptr, i64, i64 }, ptr %a397 %t418 = load %S.ast.Type, ptr %a248 %t419 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t416, { ptr, i64, i64 } %t417, %S.ast.Type %t418) %t420 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t419, 0 %t421 = load %S.ast.Type, ptr %a248 store %S.ast.Type %t421, ptr %a422 call void @finch.copy.S_ast_Type(ptr %a423, ptr %a422) %t424 = load %S.ast.Type, ptr %a423 %t425 = insertvalue %S.gen.Val %t420, %S.ast.Type %t424, 1 %t426 = insertvalue %S.gen.Val %t425, i1 true, 2 %t427 = load %S.gen.Val, ptr %a408 store %S.gen.Val %t426, ptr %a408 store %S.gen.Val %t427, ptr %a428 call void @finch.drop.S_gen_Val(ptr %a428) br label %endif7249 endif7249: %t429 = load ptr, ptr %a1 %t430 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t431 = load %S.gen.Val, ptr %t430 call void @finch.gen.release(ptr %t429, %S.gen.Val %t431) %t432 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t433 = load %S.gen.Val, ptr %a408 store %S.gen.Val %t433, ptr %a434 call void @finch.copy.S_gen_Val(ptr %a435, ptr %a434) %t436 = load %S.gen.Val, ptr %a435 %t437 = insertvalue %S.gen.Ref %t432, %S.gen.Val %t436, 2 call void @finch.drop.S_gen_Val(ptr %a408) call void @finch_str_drop(ptr %a397) call void @finch_str_drop(ptr %a375) call void @finch_str_drop(ptr %a341) call void @finch_str_drop(ptr %a323) call void @finch_str_drop(ptr %a300) call void @finch.drop.S_ast_Type(ptr %a248) call void @finch_str_drop(ptr %a60) call void @finch.drop.S_ast_Type(ptr %a11) ret %S.gen.Ref %t437 } define internal void @finch.gen.checkArgs(ptr %p0, %S.ast.Node %p1, i64 %p2, i64 %p3, { ptr, i64, i64 } %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i64, align 16 %a4 = alloca i64, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca i64, align 16 %a13 = alloca i64, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 %t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load i64, ptr %a3 %t10 = sub i64 %t8, %t9 store i64 %t10, ptr %a11 %t12 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 store i64 0, ptr %a13 br label %each.cond7250 each.cond7250: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = load i64, ptr %a13 %t17 = icmp slt i64 %t16, %t15 br i1 %t17, label %each.body7251, label %each.end7253 each.body7251: %t18 = load ptr, ptr %t12 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 %t16 %t20 = load { ptr, i64, i64 }, ptr %t19 store { ptr, i64, i64 } %t20, ptr %a21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = icmp sgt i64 %t23, 0 br i1 %t24, label %then7254, label %endif7256 then7254: %t25 = load ptr, ptr %a1 %t26 = load %S.ast.Node, ptr %a2 %t27 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } { ptr @.str.4644, i64 17, i64 0 }, ptr %a29 store { ptr, i64, i64 } %t27, ptr %a30 call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) %t31 = load { ptr, i64, i64 }, ptr %a28 store { ptr, i64, i64 } %t31, ptr %a33 store { ptr, i64, i64 } { ptr @.str.4645, i64 36, i64 0 }, ptr %a34 call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) store { ptr, i64, i64 } %t31, ptr %a35 call void @finch_str_drop(ptr %a35) %t36 = load { ptr, i64, i64 }, ptr %a32 call void @finch.gen.fail(ptr %t25, %S.ast.Node %t26, { ptr, i64, i64 } %t36) store { ptr, i64, i64 } %t36, ptr %a37 call void @finch_str_drop(ptr %a37) br label %endif7256 endif7256: br label %each.step7252 each.step7252: %t38 = load i64, ptr %a13 %t39 = add i64 %t38, 1 store i64 %t39, ptr %a13 br label %each.cond7250 each.end7253: %t40 = load i64, ptr %a11 %t41 = load i64, ptr %a4 %t42 = icmp ne i64 %t40, %t41 br i1 %t42, label %then7257, label %endif7259 then7257: %t43 = load ptr, ptr %a1 %t44 = load %S.ast.Node, ptr %a2 %t45 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.4646, i64 1, i64 0 }, ptr %a47 store { ptr, i64, i64 } %t45, ptr %a48 call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) %t49 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t49, ptr %a51 store { ptr, i64, i64 } { ptr @.str.4647, i64 8, i64 0 }, ptr %a52 call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) store { ptr, i64, i64 } %t49, ptr %a53 call void @finch_str_drop(ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a50 %t55 = load i64, ptr %a4 call void @finch_str_from_int(ptr %a56, i64 %t55) %t57 = load { ptr, i64, i64 }, ptr %a56 store { ptr, i64, i64 } %t54, ptr %a59 store { ptr, i64, i64 } %t57, ptr %a60 call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) store { ptr, i64, i64 } %t54, ptr %a61 call void @finch_str_drop(ptr %a61) store { ptr, i64, i64 } %t57, ptr %a62 call void @finch_str_drop(ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a58 store { ptr, i64, i64 } %t63, ptr %a65 store { ptr, i64, i64 } { ptr @.str.4648, i64 22, i64 0 }, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) store { ptr, i64, i64 } %t63, ptr %a67 call void @finch_str_drop(ptr %a67) %t68 = load { ptr, i64, i64 }, ptr %a64 %t69 = load i64, ptr %a11 call void @finch_str_from_int(ptr %a70, i64 %t69) %t71 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a73 store { ptr, i64, i64 } %t71, ptr %a74 call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) store { ptr, i64, i64 } %t68, ptr %a75 call void @finch_str_drop(ptr %a75) store { ptr, i64, i64 } %t71, ptr %a76 call void @finch_str_drop(ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a72 call void @finch.gen.fail(ptr %t43, %S.ast.Node %t44, { ptr, i64, i64 } %t77) store { ptr, i64, i64 } %t77, ptr %a78 call void @finch_str_drop(ptr %a78) br label %endif7259 endif7259: ret void } define internal %S.gen.Val @finch.gen.strArg(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca %S.gen.Val, align 16 %a13 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = load ptr, ptr %a1 %t6 = load %S.ast.Node, ptr %a2 %t7 = call %S.gen.Val @finch.gen.expr(ptr %t5, %S.ast.Node %t6) %t8 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4649, i64 3, i64 0 }) %t9 = load %S.ast.Node, ptr %a2 %t10 = load { ptr, i64, i64 }, ptr %a3 %t11 = call %S.gen.Val @finch.gen.coerce(ptr %t4, %S.gen.Val %t7, %S.ast.Type %t8, %S.ast.Node %t9, { ptr, i64, i64 } %t10) store %S.gen.Val %t7, ptr %a12 call void @finch.drop.S_gen_Val(ptr %a12) store %S.ast.Type %t8, ptr %a13 call void @finch.drop.S_ast_Type(ptr %a13) ret %S.gen.Val %t11 } define internal { ptr, i64, i64 } @finch.gen.strOut(ptr %p0) { entry: %a1 = alloca ptr, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t2, { ptr, i64, i64 } { ptr @.str.4650, i64 17, i64 0 }) ret { ptr, i64, i64 } %t3 } define internal { ptr, i64, i64 } @finch.gen.numType({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca i64, align 16 %a36 = alloca i64, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 store { ptr, i64, i64 } { ptr @.str.4651, i64 3, i64 0 }, ptr %a4 %t5 = call i32 @finch_str_eq(ptr %a3, ptr %a4) %t6 = icmp ne i32 %t5, 0 br i1 %t6, label %then7260, label %endif7262 then7260: ret { ptr, i64, i64 } { ptr @.str.4652, i64 3, i64 0 } endif7262: %t7 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.4653, i64 3, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 br i1 %t11, label %then7263, label %endif7265 then7263: ret { ptr, i64, i64 } { ptr @.str.4654, i64 5, i64 0 } endif7265: %t12 = mul i64 13, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t13 = call ptr @finch_alloc(i64 %t12) %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 0 store { ptr, i64, i64 } { ptr @.str.4655, i64 3, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 1 store { ptr, i64, i64 } { ptr @.str.4656, i64 5, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 2 store { ptr, i64, i64 } { ptr @.str.4657, i64 4, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 3 store { ptr, i64, i64 } { ptr @.str.4658, i64 4, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 4 store { ptr, i64, i64 } { ptr @.str.4659, i64 2, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 5 store { ptr, i64, i64 } { ptr @.str.4660, i64 3, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 6 store { ptr, i64, i64 } { ptr @.str.4661, i64 3, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 7 store { ptr, i64, i64 } { ptr @.str.4662, i64 2, i64 0 }, ptr %t21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 8 store { ptr, i64, i64 } { ptr @.str.4663, i64 3, i64 0 }, ptr %t22 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 9 store { ptr, i64, i64 } { ptr @.str.4664, i64 3, i64 0 }, ptr %t23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 10 store { ptr, i64, i64 } { ptr @.str.4665, i64 3, i64 0 }, ptr %t24 %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 11 store { ptr, i64, i64 } { ptr @.str.4666, i64 3, i64 0 }, ptr %t25 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 12 store { ptr, i64, i64 } { ptr @.str.4667, i64 3, i64 0 }, ptr %t26 %t27 = insertvalue { ptr, i64, i64 } undef, ptr %t13, 0 %t28 = insertvalue { ptr, i64, i64 } %t27, i64 13, 1 %t29 = insertvalue { ptr, i64, i64 } %t28, i64 13, 2 store { ptr, i64, i64 } %t29, ptr %a30 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 %t32 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a33 %t34 = load i64, ptr %t31 %t35 = load ptr, ptr %a30 store i64 0, ptr %a36 br label %find.cond7266 find.cond7266: %t37 = load i64, ptr %a36 %t38 = icmp slt i64 %t37, %t34 br i1 %t38, label %find.body7267, label %find.end7270 find.body7267: %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t37 %t40 = load { ptr, i64, i64 }, ptr %t39 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } %t32, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 br i1 %t44, label %find.hit7268, label %find.next7269 find.hit7268: store i64 %t37, ptr %a33 br label %find.end7270 find.next7269: %t45 = add i64 %t37, 1 store i64 %t45, ptr %a36 br label %find.cond7266 find.end7270: %t46 = load i64, ptr %a33 %t47 = icmp sge i64 %t46, 0 br i1 %t47, label %then7271, label %endif7273 then7271: %t48 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t48, ptr %a49 call void @finch_str_copy(ptr %a50, ptr %a49) %t51 = load { ptr, i64, i64 }, ptr %a50 call void @finch.drop.arr_str(ptr %a30) ret { ptr, i64, i64 } %t51 endif7273: call void @finch.drop.arr_str(ptr %a30) ret { ptr, i64, i64 } { ptr @.str.4668, i64 0, i64 0 } } define internal %S.gen.Val @finch.gen.convert(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.ast.Type, align 16 %a17 = alloca %S.gen.Val, align 16 %a20 = alloca %S.ast.Type, align 16 %a21 = alloca %S.ast.Type, align 16 %a23 = alloca %S.ast.Type, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca %S.ast.Type, align 16 %a139 = alloca %S.ast.Type, align 16 %a140 = alloca %S.ast.Type, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca %S.ast.Type, align 16 %a226 = alloca %S.ast.Type, align 16 %a227 = alloca %S.ast.Type, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca %S.ast.Type, align 16 %a308 = alloca %S.ast.Type, align 16 %a309 = alloca %S.ast.Type, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca %S.ast.Type, align 16 %a365 = alloca %S.ast.Type, align 16 %a366 = alloca %S.ast.Type, align 16 %a373 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a384 = alloca %S.ast.Type, align 16 %a387 = alloca %S.ast.Type, align 16 %a388 = alloca %S.ast.Type, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca { ptr, i64, i64 }, align 16 %a417 = alloca %S.ast.Type, align 16 %a418 = alloca %S.ast.Type, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a432 = alloca { ptr, i64, i64 }, align 16 %a434 = alloca { ptr, i64, i64 }, align 16 %a435 = alloca { ptr, i64, i64 }, align 16 %a436 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 %a442 = alloca { ptr, i64, i64 }, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a444 = alloca { ptr, i64, i64 }, align 16 %a445 = alloca { ptr, i64, i64 }, align 16 %a446 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 %a452 = alloca %S.ast.Type, align 16 %a453 = alloca %S.ast.Type, align 16 %a461 = alloca { ptr, i64, i64 }, align 16 %a465 = alloca { ptr, i64, i64 }, align 16 %a468 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a470 = alloca { ptr, i64, i64 }, align 16 %a475 = alloca { ptr, i64, i64 }, align 16 %a476 = alloca { ptr, i64, i64 }, align 16 %a477 = alloca { ptr, i64, i64 }, align 16 %a478 = alloca { ptr, i64, i64 }, align 16 %a479 = alloca { ptr, i64, i64 }, align 16 %a481 = alloca { ptr, i64, i64 }, align 16 %a482 = alloca { ptr, i64, i64 }, align 16 %a483 = alloca { ptr, i64, i64 }, align 16 %a484 = alloca { ptr, i64, i64 }, align 16 %a488 = alloca { ptr, i64, i64 }, align 16 %a489 = alloca { ptr, i64, i64 }, align 16 %a490 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a494 = alloca { ptr, i64, i64 }, align 16 %a495 = alloca { ptr, i64, i64 }, align 16 %a496 = alloca { ptr, i64, i64 }, align 16 %a501 = alloca { ptr, i64, i64 }, align 16 %a502 = alloca { ptr, i64, i64 }, align 16 %a503 = alloca { ptr, i64, i64 }, align 16 %a504 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a508 = alloca { ptr, i64, i64 }, align 16 %a511 = alloca %S.ast.Type, align 16 %a512 = alloca %S.ast.Type, align 16 %a527 = alloca %S.ast.Type, align 16 %a528 = alloca %S.ast.Type, align 16 %a541 = alloca %S.ast.Type, align 16 %a542 = alloca %S.ast.Type, align 16 %a547 = alloca { ptr, i64, i64 }, align 16 %a548 = alloca { ptr, i64, i64 }, align 16 %a558 = alloca { ptr, i64, i64 }, align 16 %a559 = alloca { ptr, i64, i64 }, align 16 %a560 = alloca { ptr, i64, i64 }, align 16 %a561 = alloca { ptr, i64, i64 }, align 16 %a563 = alloca { ptr, i64, i64 }, align 16 %a564 = alloca { ptr, i64, i64 }, align 16 %a565 = alloca { ptr, i64, i64 }, align 16 %a566 = alloca { ptr, i64, i64 }, align 16 %a570 = alloca { ptr, i64, i64 }, align 16 %a571 = alloca { ptr, i64, i64 }, align 16 %a572 = alloca { ptr, i64, i64 }, align 16 %a573 = alloca { ptr, i64, i64 }, align 16 %a575 = alloca { ptr, i64, i64 }, align 16 %a576 = alloca { ptr, i64, i64 }, align 16 %a577 = alloca { ptr, i64, i64 }, align 16 %a578 = alloca { ptr, i64, i64 }, align 16 %a581 = alloca { ptr, i64, i64 }, align 16 %a584 = alloca %S.ast.Type, align 16 %a585 = alloca %S.ast.Type, align 16 %a590 = alloca { ptr, i64, i64 }, align 16 %a591 = alloca { ptr, i64, i64 }, align 16 %a596 = alloca { ptr, i64, i64 }, align 16 %a597 = alloca { ptr, i64, i64 }, align 16 %a602 = alloca { ptr, i64, i64 }, align 16 %a603 = alloca { ptr, i64, i64 }, align 16 %a610 = alloca { ptr, i64, i64 }, align 16 %a611 = alloca { ptr, i64, i64 }, align 16 %a615 = alloca %S.ast.Type, align 16 %a616 = alloca %S.ast.Type, align 16 %a621 = alloca { ptr, i64, i64 }, align 16 %a622 = alloca { ptr, i64, i64 }, align 16 %a635 = alloca %S.ast.Type, align 16 %a636 = alloca { ptr, i64, i64 }, align 16 %a637 = alloca { ptr, i64, i64 }, align 16 %a638 = alloca { ptr, i64, i64 }, align 16 %a639 = alloca { ptr, i64, i64 }, align 16 %a641 = alloca { ptr, i64, i64 }, align 16 %a642 = alloca { ptr, i64, i64 }, align 16 %a643 = alloca { ptr, i64, i64 }, align 16 %a644 = alloca { ptr, i64, i64 }, align 16 %a647 = alloca { ptr, i64, i64 }, align 16 %a650 = alloca %S.ast.Type, align 16 %a651 = alloca %S.ast.Type, align 16 %a658 = alloca { ptr, i64, i64 }, align 16 %a659 = alloca { ptr, i64, i64 }, align 16 %a666 = alloca { ptr, i64, i64 }, align 16 %a667 = alloca { ptr, i64, i64 }, align 16 %a668 = alloca { ptr, i64, i64 }, align 16 %a670 = alloca { ptr, i64, i64 }, align 16 %a671 = alloca { ptr, i64, i64 }, align 16 %a672 = alloca { ptr, i64, i64 }, align 16 %a673 = alloca { ptr, i64, i64 }, align 16 %a678 = alloca { ptr, i64, i64 }, align 16 %a679 = alloca { ptr, i64, i64 }, align 16 %a680 = alloca { ptr, i64, i64 }, align 16 %a681 = alloca { ptr, i64, i64 }, align 16 %a682 = alloca { ptr, i64, i64 }, align 16 %a685 = alloca { ptr, i64, i64 }, align 16 %a688 = alloca %S.ast.Type, align 16 %a689 = alloca %S.ast.Type, align 16 %a694 = alloca { ptr, i64, i64 }, align 16 %a695 = alloca { ptr, i64, i64 }, align 16 %a700 = alloca { ptr, i64, i64 }, align 16 %a701 = alloca { ptr, i64, i64 }, align 16 %a723 = alloca { ptr, i64, i64 }, align 16 %a724 = alloca { ptr, i64, i64 }, align 16 %a725 = alloca { ptr, i64, i64 }, align 16 %a726 = alloca { ptr, i64, i64 }, align 16 %a728 = alloca { ptr, i64, i64 }, align 16 %a729 = alloca { ptr, i64, i64 }, align 16 %a730 = alloca { ptr, i64, i64 }, align 16 %a731 = alloca { ptr, i64, i64 }, align 16 %a735 = alloca { ptr, i64, i64 }, align 16 %a736 = alloca { ptr, i64, i64 }, align 16 %a737 = alloca { ptr, i64, i64 }, align 16 %a738 = alloca { ptr, i64, i64 }, align 16 %a740 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = load %S.ast.Node, ptr %a2 %t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %t6 call void @finch.gen.checkArgs(ptr %t4, %S.ast.Node %t5, i64 0, i64 1, { ptr, i64, i64 } %t7) %t8 = load ptr, ptr %a1 %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t10 = load { ptr, i64, i64 }, ptr %t9 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 0, %t11 br i1 %t12, label %range7274, label %inrange7275 range7274: call void @finch_panic_index(ptr @.str.4669, i64 4116, i64 0, i64 %t11) unreachable inrange7275: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.ast.Node, ptr %t13, i64 0 %t15 = load %S.ast.Node, ptr %t14 %t16 = call %S.gen.Val @finch.gen.expr(ptr %t8, %S.ast.Node %t15) store %S.gen.Val %t16, ptr %a17 %t18 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 1 %t19 = load %S.ast.Type, ptr %t18 store %S.ast.Type %t19, ptr %a20 call void @finch.copy.S_ast_Type(ptr %a21, ptr %a20) %t22 = load %S.ast.Type, ptr %a21 store %S.ast.Type %t22, ptr %a23 %t24 = load %S.ast.Type, ptr %a23 %t25 = load %S.ast.Type, ptr %a3 %t26 = call i1 @finch.ast.same(%S.ast.Type %t24, %S.ast.Type %t25) br i1 %t26, label %then7276, label %endif7278 then7276: %t27 = load %S.gen.Val, ptr %a17 call void @finch.drop.S_ast_Type(ptr %a23) ret %S.gen.Val %t27 endif7278: %t28 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t29 = load { ptr, i64, i64 }, ptr %t28 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } { ptr @.str.4670, i64 3, i64 0 }, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 br label %logic.from7279 logic.from7279: br i1 %t33, label %logic.rhs7280, label %logic.end7281 logic.rhs7280: %t34 = load %S.ast.Type, ptr %a3 %t35 = call i1 @finch.gen.isNumber(%S.ast.Type %t34) br label %logic.rend7282 logic.rend7282: br label %logic.end7281 logic.end7281: %t36 = phi i1 [ false, %logic.from7279 ], [ %t35, %logic.rend7282 ] br label %logic.from7283 logic.from7283: br i1 %t36, label %logic.rhs7284, label %logic.end7285 logic.rhs7284: %t37 = load ptr, ptr %a1 %t38 = icmp eq ptr %t37, null br i1 %t38, label %panic7286, label %ok7287 panic7286: call void @finch_panic(ptr @.str.4671, i64 4121, ptr @.str.4672) unreachable ok7287: %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 41 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = load %S.ast.Node, ptr %a2 %t42 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t41) store { ptr, i64, i64 } %t40, ptr %a43 store { ptr, i64, i64 } %t42, ptr %a44 %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) %t46 = icmp ne i32 %t45, 0 store { ptr, i64, i64 } %t42, ptr %a47 call void @finch_str_drop(ptr %a47) br label %logic.rend7288 logic.rend7288: br label %logic.end7285 logic.end7285: %t48 = phi i1 [ false, %logic.from7283 ], [ %t46, %logic.rend7288 ] br i1 %t48, label %then7289, label %endif7291 then7289: %t49 = load ptr, ptr %a1 %t50 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t49, { ptr, i64, i64 } { ptr @.str.4673, i64 17, i64 0 }) store { ptr, i64, i64 } %t50, ptr %a51 %t52 = load ptr, ptr %a1 %t53 = load { ptr, i64, i64 }, ptr %a51 call void @finch.gen.store(ptr %t52, { ptr, i64, i64 } { ptr @.str.4674, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4675, i64 15, i64 0 }, { ptr, i64, i64 } %t53) %t54 = load %S.ast.Type, ptr %a3 %t55 = call i1 @finch.gen.isInt(%S.ast.Type %t54) br i1 %t55, label %then7292, label %endif7294 then7292: %t56 = load ptr, ptr %a1 %t57 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t56, { ptr, i64, i64 } { ptr @.str.4676, i64 3, i64 0 }) store { ptr, i64, i64 } %t57, ptr %a58 %t59 = load ptr, ptr %a1 %t60 = load { ptr, i64, i64 }, ptr %a58 call void @finch.gen.store(ptr %t59, { ptr, i64, i64 } { ptr @.str.4677, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.4678, i64 1, i64 0 }, { ptr, i64, i64 } %t60) %t61 = load ptr, ptr %a1 %t62 = load ptr, ptr %a1 %t63 = load %S.gen.Val, ptr %a17 %t64 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t62, %S.gen.Val %t63) store { ptr, i64, i64 } { ptr @.str.4679, i64 32, i64 0 }, ptr %a66 store { ptr, i64, i64 } %t64, ptr %a67 call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) store { ptr, i64, i64 } %t64, ptr %a68 call void @finch_str_drop(ptr %a68) %t69 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } %t69, ptr %a71 store { ptr, i64, i64 } { ptr @.str.4680, i64 6, i64 0 }, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) store { ptr, i64, i64 } %t69, ptr %a73 call void @finch_str_drop(ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a70 %t75 = load { ptr, i64, i64 }, ptr %a58 store { ptr, i64, i64 } %t74, ptr %a77 store { ptr, i64, i64 } %t75, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) store { ptr, i64, i64 } %t74, ptr %a79 call void @finch_str_drop(ptr %a79) %t80 = load { ptr, i64, i64 }, ptr %a76 store { ptr, i64, i64 } %t80, ptr %a82 store { ptr, i64, i64 } { ptr @.str.4681, i64 6, i64 0 }, ptr %a83 call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) store { ptr, i64, i64 } %t80, ptr %a84 call void @finch_str_drop(ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a81 %t86 = load { ptr, i64, i64 }, ptr %a51 store { ptr, i64, i64 } %t85, ptr %a88 store { ptr, i64, i64 } %t86, ptr %a89 call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) store { ptr, i64, i64 } %t85, ptr %a90 call void @finch_str_drop(ptr %a90) %t91 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t91, ptr %a93 store { ptr, i64, i64 } { ptr @.str.4682, i64 1, i64 0 }, ptr %a94 call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) store { ptr, i64, i64 } %t91, ptr %a95 call void @finch_str_drop(ptr %a95) %t96 = load { ptr, i64, i64 }, ptr %a92 %t97 = call { ptr, i64, i64 } @finch.gen.op(ptr %t61, { ptr, i64, i64 } %t96) store { ptr, i64, i64 } %t96, ptr %a98 call void @finch_str_drop(ptr %a98) store { ptr, i64, i64 } %t97, ptr %a99 %t100 = load ptr, ptr %a1 %t101 = load { ptr, i64, i64 }, ptr %a99 store { ptr, i64, i64 } { ptr @.str.4683, i64 12, i64 0 }, ptr %a103 store { ptr, i64, i64 } %t101, ptr %a104 call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) %t105 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t105, ptr %a107 store { ptr, i64, i64 } { ptr @.str.4684, i64 3, i64 0 }, ptr %a108 call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) store { ptr, i64, i64 } %t105, ptr %a109 call void @finch_str_drop(ptr %a109) %t110 = load { ptr, i64, i64 }, ptr %a106 %t111 = call { ptr, i64, i64 } @finch.gen.op(ptr %t100, { ptr, i64, i64 } %t110) store { ptr, i64, i64 } %t110, ptr %a112 call void @finch_str_drop(ptr %a112) %t113 = load ptr, ptr %a1 %t114 = icmp eq ptr %t113, null br i1 %t114, label %panic7295, label %ok7296 panic7295: call void @finch_panic(ptr @.str.4685, i64 4129, ptr @.str.4686) unreachable ok7296: %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 42 %t116 = load { ptr, i64, i64 }, ptr %t115 store { ptr, i64, i64 } %t111, ptr %t115 store { ptr, i64, i64 } %t116, ptr %a117 call void @finch_str_drop(ptr %a117) %t118 = load ptr, ptr %a1 %t119 = load { ptr, i64, i64 }, ptr %a51 %t120 = call { ptr, i64, i64 } @finch.gen.load(ptr %t118, { ptr, i64, i64 } { ptr @.str.4687, i64 17, i64 0 }, { ptr, i64, i64 } %t119) %t121 = load ptr, ptr %a1 %t122 = icmp eq ptr %t121, null br i1 %t122, label %panic7297, label %ok7298 panic7297: call void @finch_panic(ptr @.str.4688, i64 4130, ptr @.str.4689) unreachable ok7298: %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 43 %t124 = load { ptr, i64, i64 }, ptr %t123 store { ptr, i64, i64 } %t120, ptr %t123 store { ptr, i64, i64 } %t124, ptr %a125 call void @finch_str_drop(ptr %a125) %t126 = load ptr, ptr %a1 %t127 = load %S.gen.Val, ptr %a17 call void @finch.gen.release(ptr %t126, %S.gen.Val %t127) %t128 = load ptr, ptr %a1 %t129 = load ptr, ptr %a1 %t130 = load { ptr, i64, i64 }, ptr %a58 %t131 = call { ptr, i64, i64 } @finch.gen.load(ptr %t129, { ptr, i64, i64 } { ptr @.str.4690, i64 3, i64 0 }, { ptr, i64, i64 } %t130) %t132 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4691, i64 3, i64 0 }) %t133 = load %S.ast.Type, ptr %a3 %t134 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t128, { ptr, i64, i64 } %t131, %S.ast.Type %t132, %S.ast.Type %t133) store { ptr, i64, i64 } %t131, ptr %a135 call void @finch_str_drop(ptr %a135) store %S.ast.Type %t132, ptr %a136 call void @finch.drop.S_ast_Type(ptr %a136) %t137 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t134, 0 %t138 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t138, ptr %a139 call void @finch.copy.S_ast_Type(ptr %a140, ptr %a139) %t141 = load %S.ast.Type, ptr %a140 %t142 = insertvalue %S.gen.Val %t137, %S.ast.Type %t141, 1 call void @finch_str_drop(ptr %a99) call void @finch_str_drop(ptr %a58) call void @finch_str_drop(ptr %a51) call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t142 endif7294: %t143 = load ptr, ptr %a1 %t144 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t143, { ptr, i64, i64 } { ptr @.str.4692, i64 6, i64 0 }) store { ptr, i64, i64 } %t144, ptr %a145 %t146 = load ptr, ptr %a1 %t147 = load { ptr, i64, i64 }, ptr %a145 call void @finch.gen.store(ptr %t146, { ptr, i64, i64 } { ptr @.str.4693, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.4694, i64 3, i64 0 }, { ptr, i64, i64 } %t147) %t148 = load ptr, ptr %a1 %t149 = load ptr, ptr %a1 %t150 = load %S.gen.Val, ptr %a17 %t151 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t149, %S.gen.Val %t150) store { ptr, i64, i64 } { ptr @.str.4695, i64 34, i64 0 }, ptr %a153 store { ptr, i64, i64 } %t151, ptr %a154 call void @finch_str_concat(ptr %a152, ptr %a153, ptr %a154) store { ptr, i64, i64 } %t151, ptr %a155 call void @finch_str_drop(ptr %a155) %t156 = load { ptr, i64, i64 }, ptr %a152 store { ptr, i64, i64 } %t156, ptr %a158 store { ptr, i64, i64 } { ptr @.str.4696, i64 6, i64 0 }, ptr %a159 call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159) store { ptr, i64, i64 } %t156, ptr %a160 call void @finch_str_drop(ptr %a160) %t161 = load { ptr, i64, i64 }, ptr %a157 %t162 = load { ptr, i64, i64 }, ptr %a145 store { ptr, i64, i64 } %t161, ptr %a164 store { ptr, i64, i64 } %t162, ptr %a165 call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) store { ptr, i64, i64 } %t161, ptr %a166 call void @finch_str_drop(ptr %a166) %t167 = load { ptr, i64, i64 }, ptr %a163 store { ptr, i64, i64 } %t167, ptr %a169 store { ptr, i64, i64 } { ptr @.str.4697, i64 6, i64 0 }, ptr %a170 call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) store { ptr, i64, i64 } %t167, ptr %a171 call void @finch_str_drop(ptr %a171) %t172 = load { ptr, i64, i64 }, ptr %a168 %t173 = load { ptr, i64, i64 }, ptr %a51 store { ptr, i64, i64 } %t172, ptr %a175 store { ptr, i64, i64 } %t173, ptr %a176 call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) store { ptr, i64, i64 } %t172, ptr %a177 call void @finch_str_drop(ptr %a177) %t178 = load { ptr, i64, i64 }, ptr %a174 store { ptr, i64, i64 } %t178, ptr %a180 store { ptr, i64, i64 } { ptr @.str.4698, i64 1, i64 0 }, ptr %a181 call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) store { ptr, i64, i64 } %t178, ptr %a182 call void @finch_str_drop(ptr %a182) %t183 = load { ptr, i64, i64 }, ptr %a179 %t184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t148, { ptr, i64, i64 } %t183) store { ptr, i64, i64 } %t183, ptr %a185 call void @finch_str_drop(ptr %a185) store { ptr, i64, i64 } %t184, ptr %a186 %t187 = load ptr, ptr %a1 %t188 = load { ptr, i64, i64 }, ptr %a186 store { ptr, i64, i64 } { ptr @.str.4699, i64 12, i64 0 }, ptr %a190 store { ptr, i64, i64 } %t188, ptr %a191 call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) %t192 = load { ptr, i64, i64 }, ptr %a189 store { ptr, i64, i64 } %t192, ptr %a194 store { ptr, i64, i64 } { ptr @.str.4700, i64 3, i64 0 }, ptr %a195 call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) store { ptr, i64, i64 } %t192, ptr %a196 call void @finch_str_drop(ptr %a196) %t197 = load { ptr, i64, i64 }, ptr %a193 %t198 = call { ptr, i64, i64 } @finch.gen.op(ptr %t187, { ptr, i64, i64 } %t197) store { ptr, i64, i64 } %t197, ptr %a199 call void @finch_str_drop(ptr %a199) %t200 = load ptr, ptr %a1 %t201 = icmp eq ptr %t200, null br i1 %t201, label %panic7299, label %ok7300 panic7299: call void @finch_panic(ptr @.str.4701, i64 4137, ptr @.str.4702) unreachable ok7300: %t202 = getelementptr inbounds %S.gen.Gen, ptr %t200, i32 0, i32 42 %t203 = load { ptr, i64, i64 }, ptr %t202 store { ptr, i64, i64 } %t198, ptr %t202 store { ptr, i64, i64 } %t203, ptr %a204 call void @finch_str_drop(ptr %a204) %t205 = load ptr, ptr %a1 %t206 = load { ptr, i64, i64 }, ptr %a51 %t207 = call { ptr, i64, i64 } @finch.gen.load(ptr %t205, { ptr, i64, i64 } { ptr @.str.4703, i64 17, i64 0 }, { ptr, i64, i64 } %t206) %t208 = load ptr, ptr %a1 %t209 = icmp eq ptr %t208, null br i1 %t209, label %panic7301, label %ok7302 panic7301: call void @finch_panic(ptr @.str.4704, i64 4138, ptr @.str.4705) unreachable ok7302: %t210 = getelementptr inbounds %S.gen.Gen, ptr %t208, i32 0, i32 43 %t211 = load { ptr, i64, i64 }, ptr %t210 store { ptr, i64, i64 } %t207, ptr %t210 store { ptr, i64, i64 } %t211, ptr %a212 call void @finch_str_drop(ptr %a212) %t213 = load ptr, ptr %a1 %t214 = load %S.gen.Val, ptr %a17 call void @finch.gen.release(ptr %t213, %S.gen.Val %t214) %t215 = load ptr, ptr %a1 %t216 = load ptr, ptr %a1 %t217 = load { ptr, i64, i64 }, ptr %a145 %t218 = call { ptr, i64, i64 } @finch.gen.load(ptr %t216, { ptr, i64, i64 } { ptr @.str.4706, i64 6, i64 0 }, { ptr, i64, i64 } %t217) %t219 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4707, i64 5, i64 0 }) %t220 = load %S.ast.Type, ptr %a3 %t221 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t215, { ptr, i64, i64 } %t218, %S.ast.Type %t219, %S.ast.Type %t220) store { ptr, i64, i64 } %t218, ptr %a222 call void @finch_str_drop(ptr %a222) store %S.ast.Type %t219, ptr %a223 call void @finch.drop.S_ast_Type(ptr %a223) %t224 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t221, 0 %t225 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t225, ptr %a226 call void @finch.copy.S_ast_Type(ptr %a227, ptr %a226) %t228 = load %S.ast.Type, ptr %a227 %t229 = insertvalue %S.gen.Val %t224, %S.ast.Type %t228, 1 call void @finch_str_drop(ptr %a186) call void @finch_str_drop(ptr %a145) call void @finch_str_drop(ptr %a51) call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t229 endif7291: %t230 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t231 = load { ptr, i64, i64 }, ptr %t230 store { ptr, i64, i64 } %t231, ptr %a232 store { ptr, i64, i64 } { ptr @.str.4708, i64 3, i64 0 }, ptr %a233 %t234 = call i32 @finch_str_eq(ptr %a232, ptr %a233) %t235 = icmp ne i32 %t234, 0 br label %logic.from7303 logic.from7303: br i1 %t235, label %logic.rhs7304, label %logic.end7305 logic.rhs7304: %t236 = load %S.ast.Type, ptr %a3 %t237 = call i1 @finch.gen.isNumber(%S.ast.Type %t236) br label %logic.rend7306 logic.rend7306: br label %logic.end7305 logic.end7305: %t238 = phi i1 [ false, %logic.from7303 ], [ %t237, %logic.rend7306 ] br i1 %t238, label %then7307, label %endif7309 then7307: %t239 = load ptr, ptr %a1 %t240 = load ptr, ptr %a1 %t241 = icmp eq ptr %t240, null br i1 %t241, label %panic7310, label %ok7311 panic7310: call void @finch_panic(ptr @.str.4709, i64 4143, ptr @.str.4710) unreachable ok7311: %t242 = getelementptr inbounds %S.gen.Gen, ptr %t240, i32 0, i32 1 %t243 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t244 = load i64, ptr %t243 %t245 = load { ptr, i64, i64 }, ptr %t242 %t246 = extractvalue { ptr, i64, i64 } %t245, 1 %t247 = icmp uge i64 %t244, %t246 br i1 %t247, label %range7312, label %inrange7313 range7312: call void @finch_panic_index(ptr @.str.4711, i64 4143, i64 %t244, i64 %t246) unreachable inrange7313: %t248 = extractvalue { ptr, i64, i64 } %t245, 0 %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i64 %t244 %t250 = load { ptr, i64, i64 }, ptr %t249 %t251 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t239, { ptr, i64, i64 } %t250) store { ptr, i64, i64 } %t251, ptr %a252 %t253 = load %S.ast.Type, ptr %a3 %t254 = call i1 @finch.gen.isInt(%S.ast.Type %t253) br i1 %t254, label %then7314, label %endif7316 then7314: %t255 = load ptr, ptr %a1 %t256 = load ptr, ptr %a1 %t257 = load %S.gen.Val, ptr %a17 %t258 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t256, %S.gen.Val %t257) store { ptr, i64, i64 } { ptr @.str.4712, i64 31, i64 0 }, ptr %a260 store { ptr, i64, i64 } %t258, ptr %a261 call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261) store { ptr, i64, i64 } %t258, ptr %a262 call void @finch_str_drop(ptr %a262) %t263 = load { ptr, i64, i64 }, ptr %a259 store { ptr, i64, i64 } %t263, ptr %a265 store { ptr, i64, i64 } { ptr @.str.4713, i64 6, i64 0 }, ptr %a266 call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266) store { ptr, i64, i64 } %t263, ptr %a267 call void @finch_str_drop(ptr %a267) %t268 = load { ptr, i64, i64 }, ptr %a264 %t269 = load { ptr, i64, i64 }, ptr %a252 store { ptr, i64, i64 } %t268, ptr %a271 store { ptr, i64, i64 } %t269, ptr %a272 call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) store { ptr, i64, i64 } %t268, ptr %a273 call void @finch_str_drop(ptr %a273) %t274 = load { ptr, i64, i64 }, ptr %a270 store { ptr, i64, i64 } %t274, ptr %a276 store { ptr, i64, i64 } { ptr @.str.4714, i64 6, i64 0 }, ptr %a277 call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) store { ptr, i64, i64 } %t274, ptr %a278 call void @finch_str_drop(ptr %a278) %t279 = load { ptr, i64, i64 }, ptr %a275 %t280 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t281 = load i64, ptr %t280 call void @finch_str_from_int(ptr %a282, i64 %t281) %t283 = load { ptr, i64, i64 }, ptr %a282 store { ptr, i64, i64 } %t279, ptr %a285 store { ptr, i64, i64 } %t283, ptr %a286 call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) store { ptr, i64, i64 } %t279, ptr %a287 call void @finch_str_drop(ptr %a287) store { ptr, i64, i64 } %t283, ptr %a288 call void @finch_str_drop(ptr %a288) %t289 = load { ptr, i64, i64 }, ptr %a284 store { ptr, i64, i64 } %t289, ptr %a291 store { ptr, i64, i64 } { ptr @.str.4715, i64 1, i64 0 }, ptr %a292 call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) store { ptr, i64, i64 } %t289, ptr %a293 call void @finch_str_drop(ptr %a293) %t294 = load { ptr, i64, i64 }, ptr %a290 %t295 = call { ptr, i64, i64 } @finch.gen.op(ptr %t255, { ptr, i64, i64 } %t294) store { ptr, i64, i64 } %t294, ptr %a296 call void @finch_str_drop(ptr %a296) store { ptr, i64, i64 } %t295, ptr %a297 %t298 = load ptr, ptr %a1 %t299 = load %S.gen.Val, ptr %a17 call void @finch.gen.release(ptr %t298, %S.gen.Val %t299) %t300 = load ptr, ptr %a1 %t301 = load { ptr, i64, i64 }, ptr %a297 %t302 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4716, i64 3, i64 0 }) %t303 = load %S.ast.Type, ptr %a3 %t304 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t300, { ptr, i64, i64 } %t301, %S.ast.Type %t302, %S.ast.Type %t303) store %S.ast.Type %t302, ptr %a305 call void @finch.drop.S_ast_Type(ptr %a305) %t306 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t304, 0 %t307 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t307, ptr %a308 call void @finch.copy.S_ast_Type(ptr %a309, ptr %a308) %t310 = load %S.ast.Type, ptr %a309 %t311 = insertvalue %S.gen.Val %t306, %S.ast.Type %t310, 1 call void @finch_str_drop(ptr %a297) call void @finch_str_drop(ptr %a252) call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t311 endif7316: %t312 = load ptr, ptr %a1 %t313 = load ptr, ptr %a1 %t314 = load %S.gen.Val, ptr %a17 %t315 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t313, %S.gen.Val %t314) store { ptr, i64, i64 } { ptr @.str.4717, i64 36, i64 0 }, ptr %a317 store { ptr, i64, i64 } %t315, ptr %a318 call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) store { ptr, i64, i64 } %t315, ptr %a319 call void @finch_str_drop(ptr %a319) %t320 = load { ptr, i64, i64 }, ptr %a316 store { ptr, i64, i64 } %t320, ptr %a322 store { ptr, i64, i64 } { ptr @.str.4718, i64 6, i64 0 }, ptr %a323 call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323) store { ptr, i64, i64 } %t320, ptr %a324 call void @finch_str_drop(ptr %a324) %t325 = load { ptr, i64, i64 }, ptr %a321 %t326 = load { ptr, i64, i64 }, ptr %a252 store { ptr, i64, i64 } %t325, ptr %a328 store { ptr, i64, i64 } %t326, ptr %a329 call void @finch_str_concat(ptr %a327, ptr %a328, ptr %a329) store { ptr, i64, i64 } %t325, ptr %a330 call void @finch_str_drop(ptr %a330) %t331 = load { ptr, i64, i64 }, ptr %a327 store { ptr, i64, i64 } %t331, ptr %a333 store { ptr, i64, i64 } { ptr @.str.4719, i64 6, i64 0 }, ptr %a334 call void @finch_str_concat(ptr %a332, ptr %a333, ptr %a334) store { ptr, i64, i64 } %t331, ptr %a335 call void @finch_str_drop(ptr %a335) %t336 = load { ptr, i64, i64 }, ptr %a332 %t337 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t338 = load i64, ptr %t337 call void @finch_str_from_int(ptr %a339, i64 %t338) %t340 = load { ptr, i64, i64 }, ptr %a339 store { ptr, i64, i64 } %t336, ptr %a342 store { ptr, i64, i64 } %t340, ptr %a343 call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) store { ptr, i64, i64 } %t336, ptr %a344 call void @finch_str_drop(ptr %a344) store { ptr, i64, i64 } %t340, ptr %a345 call void @finch_str_drop(ptr %a345) %t346 = load { ptr, i64, i64 }, ptr %a341 store { ptr, i64, i64 } %t346, ptr %a348 store { ptr, i64, i64 } { ptr @.str.4720, i64 1, i64 0 }, ptr %a349 call void @finch_str_concat(ptr %a347, ptr %a348, ptr %a349) store { ptr, i64, i64 } %t346, ptr %a350 call void @finch_str_drop(ptr %a350) %t351 = load { ptr, i64, i64 }, ptr %a347 %t352 = call { ptr, i64, i64 } @finch.gen.op(ptr %t312, { ptr, i64, i64 } %t351) store { ptr, i64, i64 } %t351, ptr %a353 call void @finch_str_drop(ptr %a353) store { ptr, i64, i64 } %t352, ptr %a354 %t355 = load ptr, ptr %a1 %t356 = load %S.gen.Val, ptr %a17 call void @finch.gen.release(ptr %t355, %S.gen.Val %t356) %t357 = load ptr, ptr %a1 %t358 = load { ptr, i64, i64 }, ptr %a354 %t359 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4721, i64 5, i64 0 }) %t360 = load %S.ast.Type, ptr %a3 %t361 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t357, { ptr, i64, i64 } %t358, %S.ast.Type %t359, %S.ast.Type %t360) store %S.ast.Type %t359, ptr %a362 call void @finch.drop.S_ast_Type(ptr %a362) %t363 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t361, 0 %t364 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t364, ptr %a365 call void @finch.copy.S_ast_Type(ptr %a366, ptr %a365) %t367 = load %S.ast.Type, ptr %a366 %t368 = insertvalue %S.gen.Val %t363, %S.ast.Type %t367, 1 call void @finch_str_drop(ptr %a354) call void @finch_str_drop(ptr %a252) call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t368 endif7309: %t369 = load %S.ast.Type, ptr %a3 %t370 = call i1 @finch.gen.isInt(%S.ast.Type %t369) br label %logic.from7317 logic.from7317: br i1 %t370, label %logic.rhs7318, label %logic.end7319 logic.rhs7318: %t371 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t372 = load { ptr, i64, i64 }, ptr %t371 store { ptr, i64, i64 } %t372, ptr %a373 store { ptr, i64, i64 } { ptr @.str.4722, i64 4, i64 0 }, ptr %a374 %t375 = call i32 @finch_str_eq(ptr %a373, ptr %a374) %t376 = icmp ne i32 %t375, 0 br label %logic.rend7320 logic.rend7320: br label %logic.end7319 logic.end7319: %t377 = phi i1 [ false, %logic.from7317 ], [ %t376, %logic.rend7320 ] br i1 %t377, label %then7321, label %endif7323 then7321: %t378 = load ptr, ptr %a1 %t379 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t380 = load { ptr, i64, i64 }, ptr %t379 %t381 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4723, i64 3, i64 0 }) %t382 = load %S.ast.Type, ptr %a3 %t383 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t378, { ptr, i64, i64 } %t380, %S.ast.Type %t381, %S.ast.Type %t382) store %S.ast.Type %t381, ptr %a384 call void @finch.drop.S_ast_Type(ptr %a384) %t385 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t383, 0 %t386 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t386, ptr %a387 call void @finch.copy.S_ast_Type(ptr %a388, ptr %a387) %t389 = load %S.ast.Type, ptr %a388 %t390 = insertvalue %S.gen.Val %t385, %S.ast.Type %t389, 1 call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t390 endif7323: %t391 = load %S.ast.Type, ptr %a3 %t392 = call i1 @finch.gen.isInt(%S.ast.Type %t391) br label %logic.from7324 logic.from7324: br i1 %t392, label %logic.end7326, label %logic.rhs7325 logic.rhs7325: %t393 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t394 = load { ptr, i64, i64 }, ptr %t393 store { ptr, i64, i64 } %t394, ptr %a395 store { ptr, i64, i64 } { ptr @.str.4724, i64 4, i64 0 }, ptr %a396 %t397 = call i32 @finch_str_eq(ptr %a395, ptr %a396) %t398 = icmp ne i32 %t397, 0 br label %logic.rend7327 logic.rend7327: br label %logic.end7326 logic.end7326: %t399 = phi i1 [ true, %logic.from7324 ], [ %t398, %logic.rend7327 ] br i1 %t399, label %then7328, label %endif7330 then7328: %t400 = load %S.ast.Type, ptr %a23 %t401 = call i1 @finch.gen.isInt(%S.ast.Type %t400) br label %logic.from7331 logic.from7331: br i1 %t401, label %logic.end7333, label %logic.rhs7332 logic.rhs7332: %t402 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t403 = load { ptr, i64, i64 }, ptr %t402 store { ptr, i64, i64 } %t403, ptr %a404 store { ptr, i64, i64 } { ptr @.str.4725, i64 4, i64 0 }, ptr %a405 %t406 = call i32 @finch_str_eq(ptr %a404, ptr %a405) %t407 = icmp ne i32 %t406, 0 br label %logic.rend7334 logic.rend7334: br label %logic.end7333 logic.end7333: %t408 = phi i1 [ true, %logic.from7331 ], [ %t407, %logic.rend7334 ] br i1 %t408, label %then7335, label %endif7337 then7335: %t409 = load ptr, ptr %a1 %t410 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t411 = load { ptr, i64, i64 }, ptr %t410 %t412 = load %S.ast.Type, ptr %a23 %t413 = load %S.ast.Type, ptr %a3 %t414 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t409, { ptr, i64, i64 } %t411, %S.ast.Type %t412, %S.ast.Type %t413) %t415 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t414, 0 %t416 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t416, ptr %a417 call void @finch.copy.S_ast_Type(ptr %a418, ptr %a417) %t419 = load %S.ast.Type, ptr %a418 %t420 = insertvalue %S.gen.Val %t415, %S.ast.Type %t419, 1 call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t420 endif7337: %t421 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t422 = load { ptr, i64, i64 }, ptr %t421 store { ptr, i64, i64 } %t422, ptr %a423 store { ptr, i64, i64 } { ptr @.str.4726, i64 4, i64 0 }, ptr %a424 %t425 = call i32 @finch_str_eq(ptr %a423, ptr %a424) %t426 = icmp ne i32 %t425, 0 br i1 %t426, label %then7338, label %endif7340 then7338: %t427 = load ptr, ptr %a1 %t428 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t429 = load { ptr, i64, i64 }, ptr %t428 store { ptr, i64, i64 } { ptr @.str.4727, i64 8, i64 0 }, ptr %a431 store { ptr, i64, i64 } %t429, ptr %a432 call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) %t433 = load { ptr, i64, i64 }, ptr %a430 store { ptr, i64, i64 } %t433, ptr %a435 store { ptr, i64, i64 } { ptr @.str.4728, i64 4, i64 0 }, ptr %a436 call void @finch_str_concat(ptr %a434, ptr %a435, ptr %a436) store { ptr, i64, i64 } %t433, ptr %a437 call void @finch_str_drop(ptr %a437) %t438 = load { ptr, i64, i64 }, ptr %a434 %t439 = load ptr, ptr %a1 %t440 = load %S.ast.Type, ptr %a3 %t441 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t439, %S.ast.Type %t440) store { ptr, i64, i64 } %t438, ptr %a443 store { ptr, i64, i64 } %t441, ptr %a444 call void @finch_str_concat(ptr %a442, ptr %a443, ptr %a444) store { ptr, i64, i64 } %t438, ptr %a445 call void @finch_str_drop(ptr %a445) store { ptr, i64, i64 } %t441, ptr %a446 call void @finch_str_drop(ptr %a446) %t447 = load { ptr, i64, i64 }, ptr %a442 %t448 = call { ptr, i64, i64 } @finch.gen.op(ptr %t427, { ptr, i64, i64 } %t447) store { ptr, i64, i64 } %t447, ptr %a449 call void @finch_str_drop(ptr %a449) %t450 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t448, 0 %t451 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t451, ptr %a452 call void @finch.copy.S_ast_Type(ptr %a453, ptr %a452) %t454 = load %S.ast.Type, ptr %a453 %t455 = insertvalue %S.gen.Val %t450, %S.ast.Type %t454, 1 call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t455 endif7340: %t456 = load %S.ast.Type, ptr %a23 %t457 = call i1 @finch.gen.isFloat(%S.ast.Type %t456) br label %logic.from7341 logic.from7341: br i1 %t457, label %logic.rhs7342, label %logic.end7343 logic.rhs7342: %t458 = load %S.ast.Type, ptr %a3 %t459 = call i1 @finch.gen.isInt(%S.ast.Type %t458) br label %logic.rend7344 logic.rend7344: br label %logic.end7343 logic.end7343: %t460 = phi i1 [ false, %logic.from7341 ], [ %t459, %logic.rend7344 ] br i1 %t460, label %then7345, label %endif7347 then7345: store { ptr, i64, i64 } { ptr @.str.4729, i64 6, i64 0 }, ptr %a461 %t462 = load %S.ast.Type, ptr %a3 %t463 = call i1 @finch.gen.isSigned(%S.ast.Type %t462) br i1 %t463, label %then7348, label %endif7350 then7348: %t464 = load { ptr, i64, i64 }, ptr %a461 store { ptr, i64, i64 } { ptr @.str.4730, i64 6, i64 0 }, ptr %a461 store { ptr, i64, i64 } %t464, ptr %a465 call void @finch_str_drop(ptr %a465) br label %endif7350 endif7350: %t466 = load ptr, ptr %a1 %t467 = load { ptr, i64, i64 }, ptr %a461 store { ptr, i64, i64 } %t467, ptr %a469 store { ptr, i64, i64 } { ptr @.str.4731, i64 1, i64 0 }, ptr %a470 call void @finch_str_concat(ptr %a468, ptr %a469, ptr %a470) %t471 = load { ptr, i64, i64 }, ptr %a468 %t472 = load ptr, ptr %a1 %t473 = load %S.ast.Type, ptr %a23 %t474 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t472, %S.ast.Type %t473) store { ptr, i64, i64 } %t471, ptr %a476 store { ptr, i64, i64 } %t474, ptr %a477 call void @finch_str_concat(ptr %a475, ptr %a476, ptr %a477) store { ptr, i64, i64 } %t471, ptr %a478 call void @finch_str_drop(ptr %a478) store { ptr, i64, i64 } %t474, ptr %a479 call void @finch_str_drop(ptr %a479) %t480 = load { ptr, i64, i64 }, ptr %a475 store { ptr, i64, i64 } %t480, ptr %a482 store { ptr, i64, i64 } { ptr @.str.4732, i64 1, i64 0 }, ptr %a483 call void @finch_str_concat(ptr %a481, ptr %a482, ptr %a483) store { ptr, i64, i64 } %t480, ptr %a484 call void @finch_str_drop(ptr %a484) %t485 = load { ptr, i64, i64 }, ptr %a481 %t486 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t487 = load { ptr, i64, i64 }, ptr %t486 store { ptr, i64, i64 } %t485, ptr %a489 store { ptr, i64, i64 } %t487, ptr %a490 call void @finch_str_concat(ptr %a488, ptr %a489, ptr %a490) store { ptr, i64, i64 } %t485, ptr %a491 call void @finch_str_drop(ptr %a491) %t492 = load { ptr, i64, i64 }, ptr %a488 store { ptr, i64, i64 } %t492, ptr %a494 store { ptr, i64, i64 } { ptr @.str.4733, i64 4, i64 0 }, ptr %a495 call void @finch_str_concat(ptr %a493, ptr %a494, ptr %a495) store { ptr, i64, i64 } %t492, ptr %a496 call void @finch_str_drop(ptr %a496) %t497 = load { ptr, i64, i64 }, ptr %a493 %t498 = load ptr, ptr %a1 %t499 = load %S.ast.Type, ptr %a3 %t500 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t498, %S.ast.Type %t499) store { ptr, i64, i64 } %t497, ptr %a502 store { ptr, i64, i64 } %t500, ptr %a503 call void @finch_str_concat(ptr %a501, ptr %a502, ptr %a503) store { ptr, i64, i64 } %t497, ptr %a504 call void @finch_str_drop(ptr %a504) store { ptr, i64, i64 } %t500, ptr %a505 call void @finch_str_drop(ptr %a505) %t506 = load { ptr, i64, i64 }, ptr %a501 %t507 = call { ptr, i64, i64 } @finch.gen.op(ptr %t466, { ptr, i64, i64 } %t506) store { ptr, i64, i64 } %t506, ptr %a508 call void @finch_str_drop(ptr %a508) %t509 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t507, 0 %t510 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t510, ptr %a511 call void @finch.copy.S_ast_Type(ptr %a512, ptr %a511) %t513 = load %S.ast.Type, ptr %a512 %t514 = insertvalue %S.gen.Val %t509, %S.ast.Type %t513, 1 call void @finch_str_drop(ptr %a461) call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t514 endif7347: br label %endif7330 endif7330: %t515 = load %S.ast.Type, ptr %a3 %t516 = call i1 @finch.gen.isFloat(%S.ast.Type %t515) br i1 %t516, label %then7351, label %endif7353 then7351: %t517 = load %S.ast.Type, ptr %a23 %t518 = call i1 @finch.gen.isInt(%S.ast.Type %t517) br i1 %t518, label %then7354, label %endif7356 then7354: %t519 = load ptr, ptr %a1 %t520 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t521 = load { ptr, i64, i64 }, ptr %t520 %t522 = load %S.ast.Type, ptr %a23 %t523 = load %S.ast.Type, ptr %a3 %t524 = call { ptr, i64, i64 } @finch.gen.intToFloat(ptr %t519, { ptr, i64, i64 } %t521, %S.ast.Type %t522, %S.ast.Type %t523) %t525 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t524, 0 %t526 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t526, ptr %a527 call void @finch.copy.S_ast_Type(ptr %a528, ptr %a527) %t529 = load %S.ast.Type, ptr %a528 %t530 = insertvalue %S.gen.Val %t525, %S.ast.Type %t529, 1 call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t530 endif7356: %t531 = load %S.ast.Type, ptr %a23 %t532 = call i1 @finch.gen.isFloat(%S.ast.Type %t531) br i1 %t532, label %then7357, label %endif7359 then7357: %t533 = load ptr, ptr %a1 %t534 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t535 = load { ptr, i64, i64 }, ptr %t534 %t536 = load %S.ast.Type, ptr %a23 %t537 = load %S.ast.Type, ptr %a3 %t538 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t533, { ptr, i64, i64 } %t535, %S.ast.Type %t536, %S.ast.Type %t537) %t539 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t538, 0 %t540 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t540, ptr %a541 call void @finch.copy.S_ast_Type(ptr %a542, ptr %a541) %t543 = load %S.ast.Type, ptr %a542 %t544 = insertvalue %S.gen.Val %t539, %S.ast.Type %t543, 1 call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t544 endif7359: br label %endif7353 endif7353: %t545 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t546 = load { ptr, i64, i64 }, ptr %t545 store { ptr, i64, i64 } %t546, ptr %a547 store { ptr, i64, i64 } { ptr @.str.4734, i64 4, i64 0 }, ptr %a548 %t549 = call i32 @finch_str_eq(ptr %a547, ptr %a548) %t550 = icmp ne i32 %t549, 0 br label %logic.from7360 logic.from7360: br i1 %t550, label %logic.rhs7361, label %logic.end7362 logic.rhs7361: %t551 = load %S.ast.Type, ptr %a23 %t552 = call i1 @finch.gen.isInt(%S.ast.Type %t551) br label %logic.rend7363 logic.rend7363: br label %logic.end7362 logic.end7362: %t553 = phi i1 [ false, %logic.from7360 ], [ %t552, %logic.rend7363 ] br i1 %t553, label %then7364, label %endif7366 then7364: %t554 = load ptr, ptr %a1 %t555 = load ptr, ptr %a1 %t556 = load %S.ast.Type, ptr %a23 %t557 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t555, %S.ast.Type %t556) store { ptr, i64, i64 } { ptr @.str.4735, i64 8, i64 0 }, ptr %a559 store { ptr, i64, i64 } %t557, ptr %a560 call void @finch_str_concat(ptr %a558, ptr %a559, ptr %a560) store { ptr, i64, i64 } %t557, ptr %a561 call void @finch_str_drop(ptr %a561) %t562 = load { ptr, i64, i64 }, ptr %a558 store { ptr, i64, i64 } %t562, ptr %a564 store { ptr, i64, i64 } { ptr @.str.4736, i64 1, i64 0 }, ptr %a565 call void @finch_str_concat(ptr %a563, ptr %a564, ptr %a565) store { ptr, i64, i64 } %t562, ptr %a566 call void @finch_str_drop(ptr %a566) %t567 = load { ptr, i64, i64 }, ptr %a563 %t568 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t569 = load { ptr, i64, i64 }, ptr %t568 store { ptr, i64, i64 } %t567, ptr %a571 store { ptr, i64, i64 } %t569, ptr %a572 call void @finch_str_concat(ptr %a570, ptr %a571, ptr %a572) store { ptr, i64, i64 } %t567, ptr %a573 call void @finch_str_drop(ptr %a573) %t574 = load { ptr, i64, i64 }, ptr %a570 store { ptr, i64, i64 } %t574, ptr %a576 store { ptr, i64, i64 } { ptr @.str.4737, i64 3, i64 0 }, ptr %a577 call void @finch_str_concat(ptr %a575, ptr %a576, ptr %a577) store { ptr, i64, i64 } %t574, ptr %a578 call void @finch_str_drop(ptr %a578) %t579 = load { ptr, i64, i64 }, ptr %a575 %t580 = call { ptr, i64, i64 } @finch.gen.op(ptr %t554, { ptr, i64, i64 } %t579) store { ptr, i64, i64 } %t579, ptr %a581 call void @finch_str_drop(ptr %a581) %t582 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t580, 0 %t583 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t583, ptr %a584 call void @finch.copy.S_ast_Type(ptr %a585, ptr %a584) %t586 = load %S.ast.Type, ptr %a585 %t587 = insertvalue %S.gen.Val %t582, %S.ast.Type %t586, 1 call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t587 endif7366: %t588 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t589 = load { ptr, i64, i64 }, ptr %t588 store { ptr, i64, i64 } %t589, ptr %a590 store { ptr, i64, i64 } { ptr @.str.4738, i64 3, i64 0 }, ptr %a591 %t592 = call i32 @finch_str_eq(ptr %a590, ptr %a591) %t593 = icmp ne i32 %t592, 0 br label %logic.from7367 logic.from7367: br i1 %t593, label %logic.rhs7368, label %logic.end7369 logic.rhs7368: %t594 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t595 = load { ptr, i64, i64 }, ptr %t594 store { ptr, i64, i64 } %t595, ptr %a596 store { ptr, i64, i64 } { ptr @.str.4739, i64 3, i64 0 }, ptr %a597 %t598 = call i32 @finch_str_eq(ptr %a596, ptr %a597) %t599 = icmp ne i32 %t598, 0 br label %logic.from7370 logic.from7370: br i1 %t599, label %logic.end7372, label %logic.rhs7371 logic.rhs7371: %t600 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t601 = load { ptr, i64, i64 }, ptr %t600 store { ptr, i64, i64 } %t601, ptr %a602 store { ptr, i64, i64 } { ptr @.str.4740, i64 4, i64 0 }, ptr %a603 %t604 = call i32 @finch_str_eq(ptr %a602, ptr %a603) %t605 = icmp ne i32 %t604, 0 br label %logic.rend7373 logic.rend7373: br label %logic.end7372 logic.end7372: %t606 = phi i1 [ true, %logic.from7370 ], [ %t605, %logic.rend7373 ] br label %logic.rend7374 logic.rend7374: br label %logic.end7369 logic.end7369: %t607 = phi i1 [ false, %logic.from7367 ], [ %t606, %logic.rend7374 ] br i1 %t607, label %then7375, label %endif7377 then7375: %t608 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t609 = load { ptr, i64, i64 }, ptr %t608 store { ptr, i64, i64 } %t609, ptr %a610 call void @finch_str_copy(ptr %a611, ptr %a610) %t612 = load { ptr, i64, i64 }, ptr %a611 %t613 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t612, 0 %t614 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t614, ptr %a615 call void @finch.copy.S_ast_Type(ptr %a616, ptr %a615) %t617 = load %S.ast.Type, ptr %a616 %t618 = insertvalue %S.gen.Val %t613, %S.ast.Type %t617, 1 call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t618 endif7377: %t619 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t620 = load { ptr, i64, i64 }, ptr %t619 store { ptr, i64, i64 } %t620, ptr %a621 store { ptr, i64, i64 } { ptr @.str.4741, i64 3, i64 0 }, ptr %a622 %t623 = call i32 @finch_str_eq(ptr %a621, ptr %a622) %t624 = icmp ne i32 %t623, 0 br label %logic.from7378 logic.from7378: br i1 %t624, label %logic.rhs7379, label %logic.end7380 logic.rhs7379: %t625 = load %S.ast.Type, ptr %a23 %t626 = call i1 @finch.gen.isInt(%S.ast.Type %t625) br label %logic.rend7381 logic.rend7381: br label %logic.end7380 logic.end7380: %t627 = phi i1 [ false, %logic.from7378 ], [ %t626, %logic.rend7381 ] br i1 %t627, label %then7382, label %endif7384 then7382: %t628 = load ptr, ptr %a1 %t629 = load ptr, ptr %a1 %t630 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t631 = load { ptr, i64, i64 }, ptr %t630 %t632 = load %S.ast.Type, ptr %a23 %t633 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4743, i64 3, i64 0 }) %t634 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t629, { ptr, i64, i64 } %t631, %S.ast.Type %t632, %S.ast.Type %t633) store %S.ast.Type %t633, ptr %a635 call void @finch.drop.S_ast_Type(ptr %a635) store { ptr, i64, i64 } { ptr @.str.4742, i64 13, i64 0 }, ptr %a637 store { ptr, i64, i64 } %t634, ptr %a638 call void @finch_str_concat(ptr %a636, ptr %a637, ptr %a638) store { ptr, i64, i64 } %t634, ptr %a639 call void @finch_str_drop(ptr %a639) %t640 = load { ptr, i64, i64 }, ptr %a636 store { ptr, i64, i64 } %t640, ptr %a642 store { ptr, i64, i64 } { ptr @.str.4744, i64 7, i64 0 }, ptr %a643 call void @finch_str_concat(ptr %a641, ptr %a642, ptr %a643) store { ptr, i64, i64 } %t640, ptr %a644 call void @finch_str_drop(ptr %a644) %t645 = load { ptr, i64, i64 }, ptr %a641 %t646 = call { ptr, i64, i64 } @finch.gen.op(ptr %t628, { ptr, i64, i64 } %t645) store { ptr, i64, i64 } %t645, ptr %a647 call void @finch_str_drop(ptr %a647) %t648 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t646, 0 %t649 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t649, ptr %a650 call void @finch.copy.S_ast_Type(ptr %a651, ptr %a650) %t652 = load %S.ast.Type, ptr %a651 %t653 = insertvalue %S.gen.Val %t648, %S.ast.Type %t652, 1 call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t653 endif7384: %t654 = load %S.ast.Type, ptr %a3 %t655 = call i1 @finch.gen.isInt(%S.ast.Type %t654) br label %logic.from7385 logic.from7385: br i1 %t655, label %logic.rhs7386, label %logic.end7387 logic.rhs7386: %t656 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t657 = load { ptr, i64, i64 }, ptr %t656 store { ptr, i64, i64 } %t657, ptr %a658 store { ptr, i64, i64 } { ptr @.str.4745, i64 3, i64 0 }, ptr %a659 %t660 = call i32 @finch_str_eq(ptr %a658, ptr %a659) %t661 = icmp ne i32 %t660, 0 br label %logic.rend7388 logic.rend7388: br label %logic.end7387 logic.end7387: %t662 = phi i1 [ false, %logic.from7385 ], [ %t661, %logic.rend7388 ] br i1 %t662, label %then7389, label %endif7391 then7389: %t663 = load ptr, ptr %a1 %t664 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t665 = load { ptr, i64, i64 }, ptr %t664 store { ptr, i64, i64 } { ptr @.str.4746, i64 13, i64 0 }, ptr %a667 store { ptr, i64, i64 } %t665, ptr %a668 call void @finch_str_concat(ptr %a666, ptr %a667, ptr %a668) %t669 = load { ptr, i64, i64 }, ptr %a666 store { ptr, i64, i64 } %t669, ptr %a671 store { ptr, i64, i64 } { ptr @.str.4747, i64 4, i64 0 }, ptr %a672 call void @finch_str_concat(ptr %a670, ptr %a671, ptr %a672) store { ptr, i64, i64 } %t669, ptr %a673 call void @finch_str_drop(ptr %a673) %t674 = load { ptr, i64, i64 }, ptr %a670 %t675 = load ptr, ptr %a1 %t676 = load %S.ast.Type, ptr %a3 %t677 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t675, %S.ast.Type %t676) store { ptr, i64, i64 } %t674, ptr %a679 store { ptr, i64, i64 } %t677, ptr %a680 call void @finch_str_concat(ptr %a678, ptr %a679, ptr %a680) store { ptr, i64, i64 } %t674, ptr %a681 call void @finch_str_drop(ptr %a681) store { ptr, i64, i64 } %t677, ptr %a682 call void @finch_str_drop(ptr %a682) %t683 = load { ptr, i64, i64 }, ptr %a678 %t684 = call { ptr, i64, i64 } @finch.gen.op(ptr %t663, { ptr, i64, i64 } %t683) store { ptr, i64, i64 } %t683, ptr %a685 call void @finch_str_drop(ptr %a685) %t686 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t684, 0 %t687 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t687, ptr %a688 call void @finch.copy.S_ast_Type(ptr %a689, ptr %a688) %t690 = load %S.ast.Type, ptr %a689 %t691 = insertvalue %S.gen.Val %t686, %S.ast.Type %t690, 1 call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t691 endif7391: %t692 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t693 = load { ptr, i64, i64 }, ptr %t692 store { ptr, i64, i64 } %t693, ptr %a694 store { ptr, i64, i64 } { ptr @.str.4748, i64 3, i64 0 }, ptr %a695 %t696 = call i32 @finch_str_eq(ptr %a694, ptr %a695) %t697 = icmp ne i32 %t696, 0 br label %logic.from7392 logic.from7392: br i1 %t697, label %logic.rhs7393, label %logic.end7394 logic.rhs7393: %t698 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t699 = load { ptr, i64, i64 }, ptr %t698 store { ptr, i64, i64 } %t699, ptr %a700 store { ptr, i64, i64 } { ptr @.str.4749, i64 3, i64 0 }, ptr %a701 %t702 = call i32 @finch_str_eq(ptr %a700, ptr %a701) %t703 = icmp ne i32 %t702, 0 br label %logic.rend7395 logic.rend7395: br label %logic.end7394 logic.end7394: %t704 = phi i1 [ false, %logic.from7392 ], [ %t703, %logic.rend7395 ] br i1 %t704, label %then7396, label %endif7398 then7396: %t705 = load ptr, ptr %a1 %t706 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t707 = load { ptr, i64, i64 }, ptr %t706 %t708 = extractvalue { ptr, i64, i64 } %t707, 1 %t709 = icmp uge i64 0, %t708 br i1 %t709, label %range7399, label %inrange7400 range7399: call void @finch_panic_index(ptr @.str.4750, i64 4192, i64 0, i64 %t708) unreachable inrange7400: %t710 = extractvalue { ptr, i64, i64 } %t707, 0 %t711 = getelementptr inbounds %S.ast.Node, ptr %t710, i64 0 %t712 = load %S.ast.Node, ptr %t711 call void @finch.gen.fail(ptr %t705, %S.ast.Node %t712, { ptr, i64, i64 } { ptr @.str.4751, i64 70, i64 0 }) br label %endif7398 endif7398: %t713 = load ptr, ptr %a1 %t714 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t715 = load { ptr, i64, i64 }, ptr %t714 %t716 = extractvalue { ptr, i64, i64 } %t715, 1 %t717 = icmp uge i64 0, %t716 br i1 %t717, label %range7401, label %inrange7402 range7401: call void @finch_panic_index(ptr @.str.4752, i64 4194, i64 0, i64 %t716) unreachable inrange7402: %t718 = extractvalue { ptr, i64, i64 } %t715, 0 %t719 = getelementptr inbounds %S.ast.Node, ptr %t718, i64 0 %t720 = load %S.ast.Node, ptr %t719 %t721 = load %S.ast.Type, ptr %a23 %t722 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t721) store { ptr, i64, i64 } { ptr @.str.4753, i64 11, i64 0 }, ptr %a724 store { ptr, i64, i64 } %t722, ptr %a725 call void @finch_str_concat(ptr %a723, ptr %a724, ptr %a725) store { ptr, i64, i64 } %t722, ptr %a726 call void @finch_str_drop(ptr %a726) %t727 = load { ptr, i64, i64 }, ptr %a723 store { ptr, i64, i64 } %t727, ptr %a729 store { ptr, i64, i64 } { ptr @.str.4754, i64 6, i64 0 }, ptr %a730 call void @finch_str_concat(ptr %a728, ptr %a729, ptr %a730) store { ptr, i64, i64 } %t727, ptr %a731 call void @finch_str_drop(ptr %a731) %t732 = load { ptr, i64, i64 }, ptr %a728 %t733 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t734 = load { ptr, i64, i64 }, ptr %t733 store { ptr, i64, i64 } %t732, ptr %a736 store { ptr, i64, i64 } %t734, ptr %a737 call void @finch_str_concat(ptr %a735, ptr %a736, ptr %a737) store { ptr, i64, i64 } %t732, ptr %a738 call void @finch_str_drop(ptr %a738) %t739 = load { ptr, i64, i64 }, ptr %a735 call void @finch.gen.fail(ptr %t713, %S.ast.Node %t720, { ptr, i64, i64 } %t739) store { ptr, i64, i64 } %t739, ptr %a740 call void @finch_str_drop(ptr %a740) %t741 = load %S.gen.Val, ptr %a17 call void @finch.drop.S_ast_Type(ptr %a23) ret %S.gen.Val %t741 } define internal i64 @finch.gen.sizeBytes(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 store { ptr, i64, i64 } { ptr @.str.4755, i64 6, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 br i1 %t8, label %then7403, label %endif7405 then7403: %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null br i1 %t10, label %panic7406, label %ok7407 panic7406: call void @finch_panic(ptr @.str.4756, i64 4227, ptr @.str.4757) unreachable ok7407: %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 16 %t12 = load ptr, ptr %a1 %t13 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t14 = load { ptr, i64, i64 }, ptr %t13 %t15 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t16 = load { ptr, i64, i64 }, ptr %t15 %t17 = call i64 @finch.gen.findStruct(ptr %t12, { ptr, i64, i64 } %t14, { ptr, i64, i64 } %t16) %t18 = load { ptr, i64, i64 }, ptr %t11 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 %t17, %t19 br i1 %t20, label %range7408, label %inrange7409 range7408: call void @finch_panic_index(ptr @.str.4758, i64 4227, i64 %t17, i64 %t19) unreachable inrange7409: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.gen.StructDef, ptr %t21, i64 %t17 %t23 = getelementptr inbounds %S.gen.StructDef, ptr %t22, i32 0, i32 9 %t24 = load i64, ptr %t23 ret i64 %t24 endif7405: %t25 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t26 = load { ptr, i64, i64 }, ptr %t25 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.4759, i64 5, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 br i1 %t30, label %then7410, label %endif7412 then7410: %t31 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t32 = load i64, ptr %t31 %t33 = load ptr, ptr %a1 %t34 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t35 = load { ptr, i64, i64 }, ptr %t34 %t36 = extractvalue { ptr, i64, i64 } %t35, 1 %t37 = icmp uge i64 0, %t36 br i1 %t37, label %range7413, label %inrange7414 range7413: call void @finch_panic_index(ptr @.str.4760, i64 4230, i64 0, i64 %t36) unreachable inrange7414: %t38 = extractvalue { ptr, i64, i64 } %t35, 0 %t39 = getelementptr inbounds %S.ast.Type, ptr %t38, i64 0 %t40 = load %S.ast.Type, ptr %t39 %t41 = call i64 @finch.gen.sizeBytes(ptr %t33, %S.ast.Type %t40) %t42 = mul i64 %t32, %t41 ret i64 %t42 endif7412: %t43 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t44 = load { ptr, i64, i64 }, ptr %t43 store { ptr, i64, i64 } %t44, ptr %a45 store { ptr, i64, i64 } { ptr @.str.4761, i64 3, i64 0 }, ptr %a46 %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) %t48 = icmp ne i32 %t47, 0 br label %logic.from7415 logic.from7415: br i1 %t48, label %logic.end7417, label %logic.rhs7416 logic.rhs7416: %t49 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t50 = load { ptr, i64, i64 }, ptr %t49 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.4762, i64 3, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 br label %logic.rend7418 logic.rend7418: br label %logic.end7417 logic.end7417: %t55 = phi i1 [ true, %logic.from7415 ], [ %t54, %logic.rend7418 ] br i1 %t55, label %then7419, label %endif7421 then7419: ret i64 8 endif7421: %t56 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t57 = load { ptr, i64, i64 }, ptr %t56 store { ptr, i64, i64 } %t57, ptr %a58 store { ptr, i64, i64 } { ptr @.str.4763, i64 5, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 br i1 %t61, label %then7422, label %endif7424 then7422: ret i64 8 endif7424: %t62 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t63 = load { ptr, i64, i64 }, ptr %t62 store { ptr, i64, i64 } %t63, ptr %a64 store { ptr, i64, i64 } { ptr @.str.4764, i64 3, i64 0 }, ptr %a65 %t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65) %t67 = icmp ne i32 %t66, 0 br i1 %t67, label %then7425, label %endif7427 then7425: ret i64 4 endif7427: %t68 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t69 = load { ptr, i64, i64 }, ptr %t68 store { ptr, i64, i64 } %t69, ptr %a70 store { ptr, i64, i64 } { ptr @.str.4765, i64 4, i64 0 }, ptr %a71 %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) %t73 = icmp ne i32 %t72, 0 br i1 %t73, label %then7428, label %endif7430 then7428: ret i64 1 endif7430: %t74 = load %S.ast.Type, ptr %a2 %t75 = call i64 @finch.gen.bitsOf(%S.ast.Type %t74) %t76 = sdiv i64 %t75, 8 ret i64 %t76 } define internal void @finch.drop.arr_S_gen_Leaf(ptr %a) { entry: call void @finch_arr_free(ptr %a) ret void } define internal { ptr, i64, i64 } @finch.gen.leavesOf(ptr %p0, %S.ast.Type %p1, i64 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a3 = alloca i64, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca %S.gen.StructDef, align 16 %a27 = alloca %S.gen.StructDef, align 16 %a29 = alloca %S.gen.StructDef, align 16 %a33 = alloca i64, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca i64, align 16 %a65 = alloca %S.gen.Leaf, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca i64, align 16 %a94 = alloca i64, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca i64, align 16 %a120 = alloca %S.gen.Leaf, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 store i64 %p2, ptr %a3 store { ptr, i64, i64 } zeroinitializer, ptr %a4 %t5 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 store { ptr, i64, i64 } { ptr @.str.4766, i64 6, i64 0 }, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp ne i32 %t9, 0 br i1 %t10, label %then7431, label %else7432 then7431: %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null br i1 %t12, label %panic7434, label %ok7435 panic7434: call void @finch_panic(ptr @.str.4767, i64 4251, ptr @.str.4768) unreachable ok7435: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 16 %t14 = load ptr, ptr %a1 %t15 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t16 = load { ptr, i64, i64 }, ptr %t15 %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t18 = load { ptr, i64, i64 }, ptr %t17 %t19 = call i64 @finch.gen.findStruct(ptr %t14, { ptr, i64, i64 } %t16, { ptr, i64, i64 } %t18) %t20 = load { ptr, i64, i64 }, ptr %t13 %t21 = extractvalue { ptr, i64, i64 } %t20, 1 %t22 = icmp uge i64 %t19, %t21 br i1 %t22, label %range7436, label %inrange7437 range7436: call void @finch_panic_index(ptr @.str.4769, i64 4251, i64 %t19, i64 %t21) unreachable inrange7437: %t23 = extractvalue { ptr, i64, i64 } %t20, 0 %t24 = getelementptr inbounds %S.gen.StructDef, ptr %t23, i64 %t19 %t25 = load %S.gen.StructDef, ptr %t24 store %S.gen.StructDef %t25, ptr %a26 call void @finch.copy.S_gen_StructDef(ptr %a27, ptr %a26) %t28 = load %S.gen.StructDef, ptr %a27 store %S.gen.StructDef %t28, ptr %a29 %t30 = getelementptr inbounds %S.gen.StructDef, ptr %a29, i32 0, i32 12 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i32 0, i32 1 %t32 = load i64, ptr %t31 store i64 0, ptr %a33 br label %for.cond7438 for.cond7438: %t34 = load i64, ptr %a33 %t35 = icmp slt i64 %t34, %t32 br i1 %t35, label %for.body7439, label %for.end7441 for.body7439: %t36 = load ptr, ptr %a1 %t37 = getelementptr inbounds %S.gen.StructDef, ptr %a29, i32 0, i32 12 %t38 = load i64, ptr %a33 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 br i1 %t41, label %range7442, label %inrange7443 range7442: call void @finch_panic_index(ptr @.str.4770, i64 4253, i64 %t38, i64 %t40) unreachable inrange7443: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.ast.Type, ptr %t42, i64 %t38 %t44 = load %S.ast.Type, ptr %t43 %t45 = load i64, ptr %a3 %t46 = getelementptr inbounds %S.gen.StructDef, ptr %a29, i32 0, i32 4 %t47 = load i64, ptr %a33 %t48 = load { ptr, i64, i64 }, ptr %t46 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 br i1 %t50, label %range7444, label %inrange7445 range7444: call void @finch_panic_index(ptr @.str.4771, i64 4253, i64 %t47, i64 %t49) unreachable inrange7445: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds i64, ptr %t51, i64 %t47 %t53 = load i64, ptr %t52 %t54 = add i64 %t45, %t53 %t55 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t36, %S.ast.Type %t44, i64 %t54) store { ptr, i64, i64 } %t55, ptr %a56 store i64 0, ptr %a57 br label %each.cond7446 each.cond7446: %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a56, i32 0, i32 1 %t59 = load i64, ptr %t58 %t60 = load i64, ptr %a57 %t61 = icmp slt i64 %t60, %t59 br i1 %t61, label %each.body7447, label %each.end7449 each.body7447: %t62 = load ptr, ptr %a56 %t63 = getelementptr inbounds %S.gen.Leaf, ptr %t62, i64 %t60 %t64 = load %S.gen.Leaf, ptr %t63 store %S.gen.Leaf %t64, ptr %a65 %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t67 = load %S.gen.Leaf, ptr %a65 %t68 = load i64, ptr %t66 %t69 = add i64 %t68, 1 call void @finch_arr_reserve(ptr %a4, i64 %t69, i64 ptrtoint (ptr getelementptr (%S.gen.Leaf, ptr null, i32 1) to i64)) %t70 = load ptr, ptr %a4 %t71 = getelementptr inbounds %S.gen.Leaf, ptr %t70, i64 %t68 store %S.gen.Leaf %t67, ptr %t71 store i64 %t69, ptr %t66 br label %each.step7448 each.step7448: %t72 = load i64, ptr %a57 %t73 = add i64 %t72, 1 store i64 %t73, ptr %a57 br label %each.cond7446 each.end7449: call void @finch.drop.arr_S_gen_Leaf(ptr %a56) br label %for.step7440 for.step7440: %t74 = load i64, ptr %a33 %t75 = add i64 %t74, 1 store i64 %t75, ptr %a33 br label %for.cond7438 for.end7441: call void @finch.drop.S_gen_StructDef(ptr %a29) br label %endif7433 else7432: %t76 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t77 = load { ptr, i64, i64 }, ptr %t76 store { ptr, i64, i64 } %t77, ptr %a78 store { ptr, i64, i64 } { ptr @.str.4772, i64 5, i64 0 }, ptr %a79 %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) %t81 = icmp ne i32 %t80, 0 br i1 %t81, label %then7450, label %else7451 then7450: %t82 = load ptr, ptr %a1 %t83 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t84 = load { ptr, i64, i64 }, ptr %t83 %t85 = extractvalue { ptr, i64, i64 } %t84, 1 %t86 = icmp uge i64 0, %t85 br i1 %t86, label %range7453, label %inrange7454 range7453: call void @finch_panic_index(ptr @.str.4773, i64 4258, i64 0, i64 %t85) unreachable inrange7454: %t87 = extractvalue { ptr, i64, i64 } %t84, 0 %t88 = getelementptr inbounds %S.ast.Type, ptr %t87, i64 0 %t89 = load %S.ast.Type, ptr %t88 %t90 = call i64 @finch.gen.sizeBytes(ptr %t82, %S.ast.Type %t89) store i64 %t90, ptr %a91 %t92 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t93 = load i64, ptr %t92 store i64 0, ptr %a94 br label %for.cond7455 for.cond7455: %t95 = load i64, ptr %a94 %t96 = icmp slt i64 %t95, %t93 br i1 %t96, label %for.body7456, label %for.end7458 for.body7456: %t97 = load ptr, ptr %a1 %t98 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t99 = load { ptr, i64, i64 }, ptr %t98 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 0, %t100 br i1 %t101, label %range7459, label %inrange7460 range7459: call void @finch_panic_index(ptr @.str.4774, i64 4260, i64 0, i64 %t100) unreachable inrange7460: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i64 0 %t104 = load %S.ast.Type, ptr %t103 %t105 = load i64, ptr %a3 %t106 = load i64, ptr %a94 %t107 = load i64, ptr %a91 %t108 = mul i64 %t106, %t107 %t109 = add i64 %t105, %t108 %t110 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t97, %S.ast.Type %t104, i64 %t109) store { ptr, i64, i64 } %t110, ptr %a111 store i64 0, ptr %a112 br label %each.cond7461 each.cond7461: %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %a111, i32 0, i32 1 %t114 = load i64, ptr %t113 %t115 = load i64, ptr %a112 %t116 = icmp slt i64 %t115, %t114 br i1 %t116, label %each.body7462, label %each.end7464 each.body7462: %t117 = load ptr, ptr %a111 %t118 = getelementptr inbounds %S.gen.Leaf, ptr %t117, i64 %t115 %t119 = load %S.gen.Leaf, ptr %t118 store %S.gen.Leaf %t119, ptr %a120 %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t122 = load %S.gen.Leaf, ptr %a120 %t123 = load i64, ptr %t121 %t124 = add i64 %t123, 1 call void @finch_arr_reserve(ptr %a4, i64 %t124, i64 ptrtoint (ptr getelementptr (%S.gen.Leaf, ptr null, i32 1) to i64)) %t125 = load ptr, ptr %a4 %t126 = getelementptr inbounds %S.gen.Leaf, ptr %t125, i64 %t123 store %S.gen.Leaf %t122, ptr %t126 store i64 %t124, ptr %t121 br label %each.step7463 each.step7463: %t127 = load i64, ptr %a112 %t128 = add i64 %t127, 1 store i64 %t128, ptr %a112 br label %each.cond7461 each.end7464: call void @finch.drop.arr_S_gen_Leaf(ptr %a111) br label %for.step7457 for.step7457: %t129 = load i64, ptr %a94 %t130 = add i64 %t129, 1 store i64 %t130, ptr %a94 br label %for.cond7455 for.end7458: br label %endif7452 else7451: %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t132 = load i64, ptr %a3 %t133 = insertvalue %S.gen.Leaf zeroinitializer, i64 %t132, 0 %t134 = load ptr, ptr %a1 %t135 = load %S.ast.Type, ptr %a2 %t136 = call i64 @finch.gen.sizeBytes(ptr %t134, %S.ast.Type %t135) %t137 = insertvalue %S.gen.Leaf %t133, i64 %t136, 1 %t138 = load %S.ast.Type, ptr %a2 %t139 = call i1 @finch.gen.isFloat(%S.ast.Type %t138) %t140 = insertvalue %S.gen.Leaf %t137, i1 %t139, 2 %t141 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t142 = load { ptr, i64, i64 }, ptr %t141 store { ptr, i64, i64 } %t142, ptr %a143 store { ptr, i64, i64 } { ptr @.str.4775, i64 5, i64 0 }, ptr %a144 %t145 = call i32 @finch_str_eq(ptr %a143, ptr %a144) %t146 = icmp ne i32 %t145, 0 %t147 = insertvalue %S.gen.Leaf %t140, i1 %t146, 3 %t148 = load i64, ptr %t131 %t149 = add i64 %t148, 1 call void @finch_arr_reserve(ptr %a4, i64 %t149, i64 ptrtoint (ptr getelementptr (%S.gen.Leaf, ptr null, i32 1) to i64)) %t150 = load ptr, ptr %a4 %t151 = getelementptr inbounds %S.gen.Leaf, ptr %t150, i64 %t148 store %S.gen.Leaf %t147, ptr %t151 store i64 %t149, ptr %t131 br label %endif7452 endif7452: br label %endif7433 endif7433: %t152 = load { ptr, i64, i64 }, ptr %a4 ret { ptr, i64, i64 } %t152 } define internal void @finch.copy.S_gen_Abi(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Abi, ptr %src store %S.gen.Abi %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Abi, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Abi, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Abi, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Abi, ptr %src, i32 0, i32 1 call void @finch.copy.arr_str(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.gen.Abi, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.gen.Abi, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) ret void } define internal %S.gen.Abi @finch.gen.classifyArm64(ptr %p0, %S.ast.Type %p1, %S.gen.Abi %p2, i64 %p3, i64 %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a3 = alloca %S.gen.Abi, align 16 %a4 = alloca i64, align 16 %a5 = alloca i64, align 16 %a7 = alloca %S.gen.Abi, align 16 %a8 = alloca %S.gen.Abi, align 16 %a10 = alloca %S.gen.Abi, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca i1, align 16 %a23 = alloca i64, align 16 %a31 = alloca %S.gen.Leaf, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca i64, align 16 %a102 = alloca %S.gen.Leaf, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 store %S.gen.Abi %p2, ptr %a3 store i64 %p3, ptr %a4 store i64 %p4, ptr %a5 %t6 = load %S.gen.Abi, ptr %a3 store %S.gen.Abi %t6, ptr %a7 call void @finch.copy.S_gen_Abi(ptr %a8, ptr %a7) %t9 = load %S.gen.Abi, ptr %a8 store %S.gen.Abi %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = load %S.ast.Type, ptr %a2 %t13 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t11, %S.ast.Type %t12, i64 0) store { ptr, i64, i64 } %t13, ptr %a14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = icmp sgt i64 %t16, 0 br label %logic.from7465 logic.from7465: br i1 %t17, label %logic.rhs7466, label %logic.end7467 logic.rhs7466: %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t19 = load i64, ptr %t18 %t20 = icmp sle i64 %t19, 4 br label %logic.rend7468 logic.rend7468: br label %logic.end7467 logic.end7467: %t21 = phi i1 [ false, %logic.from7465 ], [ %t20, %logic.rend7468 ] store i1 %t21, ptr %a22 store i64 0, ptr %a23 br label %each.cond7469 each.cond7469: %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t25 = load i64, ptr %t24 %t26 = load i64, ptr %a23 %t27 = icmp slt i64 %t26, %t25 br i1 %t27, label %each.body7470, label %each.end7472 each.body7470: %t28 = load ptr, ptr %a14 %t29 = getelementptr inbounds %S.gen.Leaf, ptr %t28, i64 %t26 %t30 = load %S.gen.Leaf, ptr %t29 store %S.gen.Leaf %t30, ptr %a31 %t32 = getelementptr inbounds %S.gen.Leaf, ptr %a31, i32 0, i32 2 %t33 = load i1, ptr %t32 %t34 = xor i1 %t33, true br label %logic.from7473 logic.from7473: br i1 %t34, label %logic.end7475, label %logic.rhs7474 logic.rhs7474: %t35 = getelementptr inbounds %S.gen.Leaf, ptr %a31, i32 0, i32 3 %t36 = load i1, ptr %t35 %t37 = load { ptr, i64, i64 }, ptr %a14 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 0, %t38 br i1 %t39, label %range7476, label %inrange7477 range7476: call void @finch_panic_index(ptr @.str.4776, i64 4277, i64 0, i64 %t38) unreachable inrange7477: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.gen.Leaf, ptr %t40, i64 0 %t42 = getelementptr inbounds %S.gen.Leaf, ptr %t41, i32 0, i32 3 %t43 = load i1, ptr %t42 %t44 = icmp ne i1 %t36, %t43 br label %logic.rend7478 logic.rend7478: br label %logic.end7475 logic.end7475: %t45 = phi i1 [ true, %logic.from7473 ], [ %t44, %logic.rend7478 ] br i1 %t45, label %then7479, label %endif7481 then7479: store i1 false, ptr %a22 br label %endif7481 endif7481: br label %each.step7471 each.step7471: %t46 = load i64, ptr %a23 %t47 = add i64 %t46, 1 store i64 %t47, ptr %a23 br label %each.cond7469 each.end7472: %t48 = load i1, ptr %a22 br i1 %t48, label %then7482, label %endif7484 then7482: store { ptr, i64, i64 } { ptr @.str.4777, i64 5, i64 0 }, ptr %a49 %t50 = load { ptr, i64, i64 }, ptr %a14 %t51 = extractvalue { ptr, i64, i64 } %t50, 1 %t52 = icmp uge i64 0, %t51 br i1 %t52, label %range7485, label %inrange7486 range7485: call void @finch_panic_index(ptr @.str.4778, i64 4283, i64 0, i64 %t51) unreachable inrange7486: %t53 = extractvalue { ptr, i64, i64 } %t50, 0 %t54 = getelementptr inbounds %S.gen.Leaf, ptr %t53, i64 0 %t55 = getelementptr inbounds %S.gen.Leaf, ptr %t54, i32 0, i32 3 %t56 = load i1, ptr %t55 br i1 %t56, label %then7487, label %endif7489 then7487: %t57 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } { ptr @.str.4779, i64 6, i64 0 }, ptr %a49 store { ptr, i64, i64 } %t57, ptr %a58 call void @finch_str_drop(ptr %a58) br label %endif7489 endif7489: %t59 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } { ptr @.str.4780, i64 6, i64 0 }, ptr %t59 store { ptr, i64, i64 } %t60, ptr %a61 call void @finch_str_drop(ptr %a61) %t62 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i32 0, i32 1 %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t65 = load i64, ptr %t64 call void @finch_str_from_int(ptr %a66, i64 %t65) %t67 = load { ptr, i64, i64 }, ptr %a66 store { ptr, i64, i64 } { ptr @.str.4781, i64 1, i64 0 }, ptr %a69 store { ptr, i64, i64 } %t67, ptr %a70 call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) store { ptr, i64, i64 } %t67, ptr %a71 call void @finch_str_drop(ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a68 store { ptr, i64, i64 } %t72, ptr %a74 store { ptr, i64, i64 } { ptr @.str.4782, i64 3, i64 0 }, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) store { ptr, i64, i64 } %t72, ptr %a76 call void @finch_str_drop(ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a73 %t78 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t77, ptr %a80 store { ptr, i64, i64 } %t78, ptr %a81 call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) store { ptr, i64, i64 } %t77, ptr %a82 call void @finch_str_drop(ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } %t83, ptr %a85 store { ptr, i64, i64 } { ptr @.str.4783, i64 1, i64 0 }, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) store { ptr, i64, i64 } %t83, ptr %a87 call void @finch_str_drop(ptr %a87) %t88 = load { ptr, i64, i64 }, ptr %a84 %t89 = load i64, ptr %t63 %t90 = add i64 %t89, 1 call void @finch_arr_reserve(ptr %t62, i64 %t90, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t91 = load ptr, ptr %t62 %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 %t89 store { ptr, i64, i64 } %t88, ptr %t92 store i64 %t90, ptr %t63 store { ptr, i64, i64 } zeroinitializer, ptr %a93 store i64 0, ptr %a94 br label %each.cond7490 each.cond7490: %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t96 = load i64, ptr %t95 %t97 = load i64, ptr %a94 %t98 = icmp slt i64 %t97, %t96 br i1 %t98, label %each.body7491, label %each.end7493 each.body7491: %t99 = load ptr, ptr %a14 %t100 = getelementptr inbounds %S.gen.Leaf, ptr %t99, i64 %t97 %t101 = load %S.gen.Leaf, ptr %t100 store %S.gen.Leaf %t101, ptr %a102 %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %a93, i32 0, i32 1 %t104 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t104, ptr %a105 call void @finch_str_copy(ptr %a106, ptr %a105) %t107 = load { ptr, i64, i64 }, ptr %a106 %t108 = load i64, ptr %t103 %t109 = add i64 %t108, 1 call void @finch_arr_reserve(ptr %a93, i64 %t109, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t110 = load ptr, ptr %a93 %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i64 %t108 store { ptr, i64, i64 } %t107, ptr %t111 store i64 %t109, ptr %t103 br label %each.step7492 each.step7492: %t112 = load i64, ptr %a94 %t113 = add i64 %t112, 1 store i64 %t113, ptr %a94 br label %each.cond7490 each.end7493: %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %a93, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4785, i64 2, i64 0 }, ptr %a115 call void @finch_str_join(ptr %a116, ptr %a93, ptr %a115) %t117 = load { ptr, i64, i64 }, ptr %a116 store { ptr, i64, i64 } { ptr @.str.4784, i64 2, i64 0 }, ptr %a119 store { ptr, i64, i64 } %t117, ptr %a120 call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) store { ptr, i64, i64 } %t117, ptr %a121 call void @finch_str_drop(ptr %a121) %t122 = load { ptr, i64, i64 }, ptr %a118 store { ptr, i64, i64 } %t122, ptr %a124 store { ptr, i64, i64 } { ptr @.str.4786, i64 2, i64 0 }, ptr %a125 call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) store { ptr, i64, i64 } %t122, ptr %a126 call void @finch_str_drop(ptr %a126) %t127 = load { ptr, i64, i64 }, ptr %a123 %t128 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 %t129 = load { ptr, i64, i64 }, ptr %t128 store { ptr, i64, i64 } %t127, ptr %t128 store { ptr, i64, i64 } %t129, ptr %a130 call void @finch_str_drop(ptr %a130) %t131 = load %S.gen.Abi, ptr %a10 call void @finch.drop.arr_str(ptr %a93) call void @finch_str_drop(ptr %a49) call void @finch.drop.arr_S_gen_Leaf(ptr %a14) ret %S.gen.Abi %t131 endif7484: %t132 = load i64, ptr %a4 %t133 = icmp sgt i64 %t132, 16 br i1 %t133, label %then7494, label %endif7496 then7494: %t134 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 %t135 = load { ptr, i64, i64 }, ptr %t134 store { ptr, i64, i64 } { ptr @.str.4787, i64 8, i64 0 }, ptr %t134 store { ptr, i64, i64 } %t135, ptr %a136 call void @finch_str_drop(ptr %a136) %t137 = load %S.gen.Abi, ptr %a10 call void @finch.drop.arr_S_gen_Leaf(ptr %a14) ret %S.gen.Abi %t137 endif7496: %t138 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 %t139 = load { ptr, i64, i64 }, ptr %t138 store { ptr, i64, i64 } { ptr @.str.4788, i64 6, i64 0 }, ptr %t138 store { ptr, i64, i64 } %t139, ptr %a140 call void @finch_str_drop(ptr %a140) %t141 = load i64, ptr %a5 %t142 = icmp sge i64 %t141, 16 br i1 %t142, label %then7497, label %else7498 then7497: %t143 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t143, i32 0, i32 1 %t145 = load i64, ptr %t144 %t146 = add i64 %t145, 1 call void @finch_arr_reserve(ptr %t143, i64 %t146, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t147 = load ptr, ptr %t143 %t148 = getelementptr inbounds { ptr, i64, i64 }, ptr %t147, i64 %t145 store { ptr, i64, i64 } { ptr @.str.4789, i64 4, i64 0 }, ptr %t148 store i64 %t146, ptr %t144 %t149 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 %t150 = load { ptr, i64, i64 }, ptr %t149 store { ptr, i64, i64 } { ptr @.str.4790, i64 4, i64 0 }, ptr %t149 store { ptr, i64, i64 } %t150, ptr %a151 call void @finch_str_drop(ptr %a151) br label %endif7499 else7498: %t152 = load i64, ptr %a4 %t153 = icmp sle i64 %t152, 8 br i1 %t153, label %then7500, label %else7501 then7500: %t154 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 %t156 = load i64, ptr %t155 %t157 = add i64 %t156, 1 call void @finch_arr_reserve(ptr %t154, i64 %t157, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t158 = load ptr, ptr %t154 %t159 = getelementptr inbounds { ptr, i64, i64 }, ptr %t158, i64 %t156 store { ptr, i64, i64 } { ptr @.str.4791, i64 3, i64 0 }, ptr %t159 store i64 %t157, ptr %t155 %t160 = load i64, ptr %a4 %t161 = mul i64 %t160, 8 call void @finch_str_from_int(ptr %a162, i64 %t161) %t163 = load { ptr, i64, i64 }, ptr %a162 store { ptr, i64, i64 } { ptr @.str.4792, i64 1, i64 0 }, ptr %a165 store { ptr, i64, i64 } %t163, ptr %a166 call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) store { ptr, i64, i64 } %t163, ptr %a167 call void @finch_str_drop(ptr %a167) %t168 = load { ptr, i64, i64 }, ptr %a164 %t169 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 %t170 = load { ptr, i64, i64 }, ptr %t169 store { ptr, i64, i64 } %t168, ptr %t169 store { ptr, i64, i64 } %t170, ptr %a171 call void @finch_str_drop(ptr %a171) br label %endif7502 else7501: %t172 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 %t173 = getelementptr inbounds { ptr, i64, i64 }, ptr %t172, i32 0, i32 1 %t174 = load i64, ptr %t173 %t175 = add i64 %t174, 1 call void @finch_arr_reserve(ptr %t172, i64 %t175, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t176 = load ptr, ptr %t172 %t177 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 %t174 store { ptr, i64, i64 } { ptr @.str.4793, i64 9, i64 0 }, ptr %t177 store i64 %t175, ptr %t173 %t178 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 %t179 = load { ptr, i64, i64 }, ptr %t178 store { ptr, i64, i64 } { ptr @.str.4794, i64 9, i64 0 }, ptr %t178 store { ptr, i64, i64 } %t179, ptr %a180 call void @finch_str_drop(ptr %a180) br label %endif7502 endif7502: br label %endif7499 endif7499: %t181 = load %S.gen.Abi, ptr %a10 call void @finch.drop.arr_S_gen_Leaf(ptr %a14) ret %S.gen.Abi %t181 } define internal void @finch.drop.S_gen_Abi(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.Abi, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.gen.Abi, ptr %a, i32 0, i32 1 call void @finch.drop.arr_str(ptr %t2) %t3 = getelementptr inbounds %S.gen.Abi, ptr %a, i32 0, i32 2 call void @finch_str_drop(ptr %t3) ret void } define internal %S.gen.Abi @finch.gen.classify(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a4 = alloca %S.gen.Abi, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca %S.gen.StructDef, align 16 %a28 = alloca %S.gen.StructDef, align 16 %a30 = alloca %S.gen.StructDef, align 16 %a33 = alloca i64, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca i64, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca i64, align 16 %a145 = alloca %S.gen.Leaf, align 16 %a148 = alloca i64, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca i64, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca i64, align 16 %a210 = alloca i64, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = insertvalue %S.gen.Abi zeroinitializer, { ptr, i64, i64 } { ptr @.str.4795, i64 6, i64 0 }, 0 store %S.gen.Abi %t3, ptr %a4 %t5 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 store { ptr, i64, i64 } { ptr @.str.4796, i64 6, i64 0 }, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp eq i32 %t9, 0 br i1 %t10, label %then7503, label %endif7505 then7503: %t11 = load %S.gen.Abi, ptr %a4 ret %S.gen.Abi %t11 endif7505: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic7506, label %ok7507 panic7506: call void @finch_panic(ptr @.str.4797, i64 4318, ptr @.str.4798) unreachable ok7507: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t17 = load { ptr, i64, i64 }, ptr %t16 %t18 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = call i64 @finch.gen.findStruct(ptr %t15, { ptr, i64, i64 } %t17, { ptr, i64, i64 } %t19) %t21 = load { ptr, i64, i64 }, ptr %t14 %t22 = extractvalue { ptr, i64, i64 } %t21, 1 %t23 = icmp uge i64 %t20, %t22 br i1 %t23, label %range7508, label %inrange7509 range7508: call void @finch_panic_index(ptr @.str.4799, i64 4318, i64 %t20, i64 %t22) unreachable inrange7509: %t24 = extractvalue { ptr, i64, i64 } %t21, 0 %t25 = getelementptr inbounds %S.gen.StructDef, ptr %t24, i64 %t20 %t26 = load %S.gen.StructDef, ptr %t25 store %S.gen.StructDef %t26, ptr %a27 call void @finch.copy.S_gen_StructDef(ptr %a28, ptr %a27) %t29 = load %S.gen.StructDef, ptr %a28 store %S.gen.StructDef %t29, ptr %a30 %t31 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 9 %t32 = load i64, ptr %t31 store i64 %t32, ptr %a33 %t34 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 3 store i64 8, ptr %t34 %t35 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 10 %t36 = load i64, ptr %t35 %t37 = icmp sgt i64 %t36, 8 br i1 %t37, label %then7510, label %endif7512 then7510: %t38 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 10 %t39 = load i64, ptr %t38 %t40 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 3 store i64 %t39, ptr %t40 br label %endif7512 endif7512: %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null br i1 %t42, label %panic7513, label %ok7514 panic7513: call void @finch_panic(ptr @.str.4800, i64 4324, ptr @.str.4801) unreachable ok7514: %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 31 %t44 = getelementptr inbounds %S.platform.Target, ptr %t43, i32 0, i32 4 %t45 = load i1, ptr %t44 br i1 %t45, label %then7515, label %endif7517 then7515: %t46 = load ptr, ptr %a1 %t47 = load %S.ast.Type, ptr %a2 %t48 = load %S.gen.Abi, ptr %a4 %t49 = load i64, ptr %a33 %t50 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 10 %t51 = load i64, ptr %t50 %t52 = call %S.gen.Abi @finch.gen.classifyArm64(ptr %t46, %S.ast.Type %t47, %S.gen.Abi %t48, i64 %t49, i64 %t51) call void @finch.drop.S_gen_StructDef(ptr %a30) call void @finch.drop.S_gen_Abi(ptr %a4) ret %S.gen.Abi %t52 endif7517: %t53 = load ptr, ptr %a1 %t54 = icmp eq ptr %t53, null br i1 %t54, label %panic7518, label %ok7519 panic7518: call void @finch_panic(ptr @.str.4802, i64 4327, ptr @.str.4803) unreachable ok7519: %t55 = getelementptr inbounds %S.gen.Gen, ptr %t53, i32 0, i32 31 %t56 = getelementptr inbounds %S.platform.Target, ptr %t55, i32 0, i32 1 %t57 = load i1, ptr %t56 br i1 %t57, label %then7520, label %endif7522 then7520: %t58 = load i64, ptr %a33 %t59 = icmp eq i64 %t58, 1 br label %logic.from7523 logic.from7523: br i1 %t59, label %logic.end7525, label %logic.rhs7524 logic.rhs7524: %t60 = load i64, ptr %a33 %t61 = icmp eq i64 %t60, 2 br label %logic.rend7526 logic.rend7526: br label %logic.end7525 logic.end7525: %t62 = phi i1 [ true, %logic.from7523 ], [ %t61, %logic.rend7526 ] br label %logic.from7527 logic.from7527: br i1 %t62, label %logic.end7529, label %logic.rhs7528 logic.rhs7528: %t63 = load i64, ptr %a33 %t64 = icmp eq i64 %t63, 4 br label %logic.rend7530 logic.rend7530: br label %logic.end7529 logic.end7529: %t65 = phi i1 [ true, %logic.from7527 ], [ %t64, %logic.rend7530 ] br label %logic.from7531 logic.from7531: br i1 %t65, label %logic.end7533, label %logic.rhs7532 logic.rhs7532: %t66 = load i64, ptr %a33 %t67 = icmp eq i64 %t66, 8 br label %logic.rend7534 logic.rend7534: br label %logic.end7533 logic.end7533: %t68 = phi i1 [ true, %logic.from7531 ], [ %t67, %logic.rend7534 ] br i1 %t68, label %then7535, label %else7536 then7535: %t69 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 %t70 = load { ptr, i64, i64 }, ptr %t69 store { ptr, i64, i64 } { ptr @.str.4804, i64 6, i64 0 }, ptr %t69 store { ptr, i64, i64 } %t70, ptr %a71 call void @finch_str_drop(ptr %a71) %t72 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i32 0, i32 1 %t74 = load i64, ptr %a33 %t75 = mul i64 %t74, 8 call void @finch_str_from_int(ptr %a76, i64 %t75) %t77 = load { ptr, i64, i64 }, ptr %a76 store { ptr, i64, i64 } { ptr @.str.4805, i64 1, i64 0 }, ptr %a79 store { ptr, i64, i64 } %t77, ptr %a80 call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) store { ptr, i64, i64 } %t77, ptr %a81 call void @finch_str_drop(ptr %a81) %t82 = load { ptr, i64, i64 }, ptr %a78 %t83 = load i64, ptr %t73 %t84 = add i64 %t83, 1 call void @finch_arr_reserve(ptr %t72, i64 %t84, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t85 = load ptr, ptr %t72 %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i64 %t83 store { ptr, i64, i64 } %t82, ptr %t86 store i64 %t84, ptr %t73 %t87 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t88 = load { ptr, i64, i64 }, ptr %t87 %t89 = extractvalue { ptr, i64, i64 } %t88, 1 %t90 = icmp uge i64 0, %t89 br i1 %t90, label %range7538, label %inrange7539 range7538: call void @finch_panic_index(ptr @.str.4806, i64 4333, i64 0, i64 %t89) unreachable inrange7539: %t91 = extractvalue { ptr, i64, i64 } %t88, 0 %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 0 %t93 = load { ptr, i64, i64 }, ptr %t92 %t94 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 2 store { ptr, i64, i64 } %t93, ptr %a95 call void @finch_str_copy(ptr %a96, ptr %a95) %t97 = load { ptr, i64, i64 }, ptr %a96 %t98 = load { ptr, i64, i64 }, ptr %t94 store { ptr, i64, i64 } %t97, ptr %t94 store { ptr, i64, i64 } %t98, ptr %a99 call void @finch_str_drop(ptr %a99) br label %endif7537 else7536: %t100 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 %t101 = load { ptr, i64, i64 }, ptr %t100 store { ptr, i64, i64 } { ptr @.str.4807, i64 8, i64 0 }, ptr %t100 store { ptr, i64, i64 } %t101, ptr %a102 call void @finch_str_drop(ptr %a102) br label %endif7537 endif7537: %t103 = load %S.gen.Abi, ptr %a4 call void @finch.drop.S_gen_StructDef(ptr %a30) ret %S.gen.Abi %t103 endif7522: %t104 = load i64, ptr %a33 %t105 = icmp sgt i64 %t104, 16 br label %logic.from7540 logic.from7540: br i1 %t105, label %logic.end7542, label %logic.rhs7541 logic.rhs7541: %t106 = load i64, ptr %a33 %t107 = icmp eq i64 %t106, 0 br label %logic.rend7543 logic.rend7543: br label %logic.end7542 logic.end7542: %t108 = phi i1 [ true, %logic.from7540 ], [ %t107, %logic.rend7543 ] br i1 %t108, label %then7544, label %endif7546 then7544: %t109 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 %t110 = load { ptr, i64, i64 }, ptr %t109 store { ptr, i64, i64 } { ptr @.str.4808, i64 6, i64 0 }, ptr %t109 store { ptr, i64, i64 } %t110, ptr %a111 call void @finch_str_drop(ptr %a111) %t112 = load %S.gen.Abi, ptr %a4 call void @finch.drop.S_gen_StructDef(ptr %a30) ret %S.gen.Abi %t112 endif7546: %t113 = load ptr, ptr %a1 %t114 = load %S.ast.Type, ptr %a2 %t115 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t113, %S.ast.Type %t114, i64 0) store { ptr, i64, i64 } %t115, ptr %a116 %t117 = load i64, ptr %a33 %t118 = add i64 %t117, 7 %t119 = sdiv i64 %t118, 8 store i64 %t119, ptr %a120 %t121 = mul i64 2, ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64) %t122 = call ptr @finch_alloc(i64 %t121) %t123 = getelementptr inbounds i64, ptr %t122, i64 0 store i64 0, ptr %t123 %t124 = getelementptr inbounds i64, ptr %t122, i64 1 store i64 0, ptr %t124 %t125 = insertvalue { ptr, i64, i64 } undef, ptr %t122, 0 %t126 = insertvalue { ptr, i64, i64 } %t125, i64 2, 1 %t127 = insertvalue { ptr, i64, i64 } %t126, i64 2, 2 store { ptr, i64, i64 } %t127, ptr %a128 %t129 = mul i64 2, ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64) %t130 = call ptr @finch_alloc(i64 %t129) %t131 = getelementptr inbounds i1, ptr %t130, i64 0 store i1 false, ptr %t131 %t132 = getelementptr inbounds i1, ptr %t130, i64 1 store i1 false, ptr %t132 %t133 = insertvalue { ptr, i64, i64 } undef, ptr %t130, 0 %t134 = insertvalue { ptr, i64, i64 } %t133, i64 2, 1 %t135 = insertvalue { ptr, i64, i64 } %t134, i64 2, 2 store { ptr, i64, i64 } %t135, ptr %a136 store i64 0, ptr %a137 br label %each.cond7547 each.cond7547: %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %a116, i32 0, i32 1 %t139 = load i64, ptr %t138 %t140 = load i64, ptr %a137 %t141 = icmp slt i64 %t140, %t139 br i1 %t141, label %each.body7548, label %each.end7550 each.body7548: %t142 = load ptr, ptr %a116 %t143 = getelementptr inbounds %S.gen.Leaf, ptr %t142, i64 %t140 %t144 = load %S.gen.Leaf, ptr %t143 store %S.gen.Leaf %t144, ptr %a145 %t146 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 1 %t147 = load i64, ptr %t146 store i64 %t147, ptr %a148 %t149 = load i64, ptr %a148 %t150 = icmp sgt i64 %t149, 8 br i1 %t150, label %then7551, label %endif7553 then7551: store i64 8, ptr %a148 br label %endif7553 endif7553: %t151 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 0 %t152 = load i64, ptr %t151 %t153 = load i64, ptr %a148 %t154 = icmp eq i64 %t153, 0 br i1 %t154, label %panic7554, label %ok7555 panic7554: call void @finch_panic(ptr @.str.4809, i64 4352, ptr @.str.4810) unreachable ok7555: %t155 = srem i64 %t152, %t153 %t156 = icmp ne i64 %t155, 0 br i1 %t156, label %then7556, label %endif7558 then7556: %t157 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 %t158 = load { ptr, i64, i64 }, ptr %t157 store { ptr, i64, i64 } { ptr @.str.4811, i64 6, i64 0 }, ptr %t157 store { ptr, i64, i64 } %t158, ptr %a159 call void @finch_str_drop(ptr %a159) %t160 = load %S.gen.Abi, ptr %a4 call void @finch.drop.arr_bool(ptr %a136) call void @finch.drop.arr_int(ptr %a128) call void @finch.drop.arr_S_gen_Leaf(ptr %a116) call void @finch.drop.S_gen_StructDef(ptr %a30) ret %S.gen.Abi %t160 endif7558: %t161 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 0 %t162 = load i64, ptr %t161 %t163 = sdiv i64 %t162, 8 store i64 %t163, ptr %a164 %t165 = load i64, ptr %a164 %t166 = load { ptr, i64, i64 }, ptr %a128 %t167 = extractvalue { ptr, i64, i64 } %t166, 1 %t168 = icmp uge i64 %t165, %t167 br i1 %t168, label %range7559, label %inrange7560 range7559: call void @finch_panic_index(ptr @.str.4812, i64 4357, i64 %t165, i64 %t167) unreachable inrange7560: %t169 = extractvalue { ptr, i64, i64 } %t166, 0 %t170 = getelementptr inbounds i64, ptr %t169, i64 %t165 %t171 = load i64, ptr %t170 %t172 = icmp eq i64 %t171, 1 br label %logic.from7561 logic.from7561: br i1 %t172, label %logic.end7563, label %logic.rhs7562 logic.rhs7562: %t173 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 2 %t174 = load i1, ptr %t173 %t175 = xor i1 %t174, true br label %logic.rend7564 logic.rend7564: br label %logic.end7563 logic.end7563: %t176 = phi i1 [ true, %logic.from7561 ], [ %t175, %logic.rend7564 ] br i1 %t176, label %then7565, label %else7566 then7565: %t177 = load i64, ptr %a164 %t178 = load { ptr, i64, i64 }, ptr %a128 %t179 = extractvalue { ptr, i64, i64 } %t178, 1 %t180 = icmp uge i64 %t177, %t179 br i1 %t180, label %range7568, label %inrange7569 range7568: call void @finch_panic_index(ptr @.str.4813, i64 4358, i64 %t177, i64 %t179) unreachable inrange7569: %t181 = extractvalue { ptr, i64, i64 } %t178, 0 %t182 = getelementptr inbounds i64, ptr %t181, i64 %t177 store i64 1, ptr %t182 br label %endif7567 else7566: %t183 = load i64, ptr %a164 %t184 = load { ptr, i64, i64 }, ptr %a128 %t185 = extractvalue { ptr, i64, i64 } %t184, 1 %t186 = icmp uge i64 %t183, %t185 br i1 %t186, label %range7570, label %inrange7571 range7570: call void @finch_panic_index(ptr @.str.4814, i64 4360, i64 %t183, i64 %t185) unreachable inrange7571: %t187 = extractvalue { ptr, i64, i64 } %t184, 0 %t188 = getelementptr inbounds i64, ptr %t187, i64 %t183 store i64 2, ptr %t188 br label %endif7567 endif7567: %t189 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 3 %t190 = load i1, ptr %t189 br i1 %t190, label %then7572, label %endif7574 then7572: %t191 = load i64, ptr %a164 %t192 = load { ptr, i64, i64 }, ptr %a136 %t193 = extractvalue { ptr, i64, i64 } %t192, 1 %t194 = icmp uge i64 %t191, %t193 br i1 %t194, label %range7575, label %inrange7576 range7575: call void @finch_panic_index(ptr @.str.4815, i64 4363, i64 %t191, i64 %t193) unreachable inrange7576: %t195 = extractvalue { ptr, i64, i64 } %t192, 0 %t196 = getelementptr inbounds i1, ptr %t195, i64 %t191 store i1 true, ptr %t196 br label %endif7574 endif7574: br label %each.step7549 each.step7549: %t197 = load i64, ptr %a137 %t198 = add i64 %t197, 1 store i64 %t198, ptr %a137 br label %each.cond7547 each.end7550: %t199 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 %t200 = load { ptr, i64, i64 }, ptr %t199 store { ptr, i64, i64 } { ptr @.str.4816, i64 6, i64 0 }, ptr %t199 store { ptr, i64, i64 } %t200, ptr %a201 call void @finch_str_drop(ptr %a201) %t202 = load i64, ptr %a120 store i64 0, ptr %a203 br label %for.cond7577 for.cond7577: %t204 = load i64, ptr %a203 %t205 = icmp slt i64 %t204, %t202 br i1 %t205, label %for.body7578, label %for.end7580 for.body7578: %t206 = load i64, ptr %a33 %t207 = load i64, ptr %a203 %t208 = mul i64 8, %t207 %t209 = sub i64 %t206, %t208 store i64 %t209, ptr %a210 %t211 = load i64, ptr %a210 %t212 = icmp sgt i64 %t211, 8 br i1 %t212, label %then7581, label %endif7583 then7581: store i64 8, ptr %a210 br label %endif7583 endif7583: %t213 = load i64, ptr %a203 %t214 = load { ptr, i64, i64 }, ptr %a128 %t215 = extractvalue { ptr, i64, i64 } %t214, 1 %t216 = icmp uge i64 %t213, %t215 br i1 %t216, label %range7584, label %inrange7585 range7584: call void @finch_panic_index(ptr @.str.4817, i64 4372, i64 %t213, i64 %t215) unreachable inrange7585: %t217 = extractvalue { ptr, i64, i64 } %t214, 0 %t218 = getelementptr inbounds i64, ptr %t217, i64 %t213 %t219 = load i64, ptr %t218 %t220 = icmp eq i64 %t219, 2 br i1 %t220, label %then7586, label %else7587 then7586: %t221 = load i64, ptr %a203 %t222 = load { ptr, i64, i64 }, ptr %a136 %t223 = extractvalue { ptr, i64, i64 } %t222, 1 %t224 = icmp uge i64 %t221, %t223 br i1 %t224, label %range7589, label %inrange7590 range7589: call void @finch_panic_index(ptr @.str.4818, i64 4373, i64 %t221, i64 %t223) unreachable inrange7590: %t225 = extractvalue { ptr, i64, i64 } %t222, 0 %t226 = getelementptr inbounds i1, ptr %t225, i64 %t221 %t227 = load i1, ptr %t226 br i1 %t227, label %then7591, label %else7592 then7591: %t228 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %t228, i32 0, i32 1 %t230 = load i64, ptr %t229 %t231 = add i64 %t230, 1 call void @finch_arr_reserve(ptr %t228, i64 %t231, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t232 = load ptr, ptr %t228 %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %t232, i64 %t230 store { ptr, i64, i64 } { ptr @.str.4819, i64 6, i64 0 }, ptr %t233 store i64 %t231, ptr %t229 br label %endif7593 else7592: %t234 = load i64, ptr %a210 %t235 = icmp sgt i64 %t234, 4 br i1 %t235, label %then7594, label %else7595 then7594: %t236 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %t236, i32 0, i32 1 %t238 = load i64, ptr %t237 %t239 = add i64 %t238, 1 call void @finch_arr_reserve(ptr %t236, i64 %t239, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t240 = load ptr, ptr %t236 %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t240, i64 %t238 store { ptr, i64, i64 } { ptr @.str.4820, i64 11, i64 0 }, ptr %t241 store i64 %t239, ptr %t237 br label %endif7596 else7595: %t242 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i32 0, i32 1 %t244 = load i64, ptr %t243 %t245 = add i64 %t244, 1 call void @finch_arr_reserve(ptr %t242, i64 %t245, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t246 = load ptr, ptr %t242 %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i64 %t244 store { ptr, i64, i64 } { ptr @.str.4821, i64 5, i64 0 }, ptr %t247 store i64 %t245, ptr %t243 br label %endif7596 endif7596: br label %endif7593 endif7593: br label %endif7588 else7587: %t248 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i32 0, i32 1 %t250 = load i64, ptr %a210 %t251 = mul i64 %t250, 8 call void @finch_str_from_int(ptr %a252, i64 %t251) %t253 = load { ptr, i64, i64 }, ptr %a252 store { ptr, i64, i64 } { ptr @.str.4822, i64 1, i64 0 }, ptr %a255 store { ptr, i64, i64 } %t253, ptr %a256 call void @finch_str_concat(ptr %a254, ptr %a255, ptr %a256) store { ptr, i64, i64 } %t253, ptr %a257 call void @finch_str_drop(ptr %a257) %t258 = load { ptr, i64, i64 }, ptr %a254 %t259 = load i64, ptr %t249 %t260 = add i64 %t259, 1 call void @finch_arr_reserve(ptr %t248, i64 %t260, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t261 = load ptr, ptr %t248 %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t261, i64 %t259 store { ptr, i64, i64 } %t258, ptr %t262 store i64 %t260, ptr %t249 br label %endif7588 endif7588: br label %for.step7579 for.step7579: %t263 = load i64, ptr %a203 %t264 = add i64 %t263, 1 store i64 %t264, ptr %a203 br label %for.cond7577 for.end7580: %t265 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i32 0, i32 1 %t267 = load i64, ptr %t266 %t268 = icmp eq i64 %t267, 1 br i1 %t268, label %then7597, label %else7598 then7597: %t269 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t270 = load { ptr, i64, i64 }, ptr %t269 %t271 = extractvalue { ptr, i64, i64 } %t270, 1 %t272 = icmp uge i64 0, %t271 br i1 %t272, label %range7600, label %inrange7601 range7600: call void @finch_panic_index(ptr @.str.4823, i64 4385, i64 0, i64 %t271) unreachable inrange7601: %t273 = extractvalue { ptr, i64, i64 } %t270, 0 %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 0 %t275 = load { ptr, i64, i64 }, ptr %t274 %t276 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 2 store { ptr, i64, i64 } %t275, ptr %a277 call void @finch_str_copy(ptr %a278, ptr %a277) %t279 = load { ptr, i64, i64 }, ptr %a278 %t280 = load { ptr, i64, i64 }, ptr %t276 store { ptr, i64, i64 } %t279, ptr %t276 store { ptr, i64, i64 } %t280, ptr %a281 call void @finch_str_drop(ptr %a281) br label %endif7599 else7598: %t282 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4825, i64 2, i64 0 }, ptr %a284 call void @finch_str_join(ptr %a285, ptr %t282, ptr %a284) %t286 = load { ptr, i64, i64 }, ptr %a285 store { ptr, i64, i64 } { ptr @.str.4824, i64 2, i64 0 }, ptr %a288 store { ptr, i64, i64 } %t286, ptr %a289 call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) store { ptr, i64, i64 } %t286, ptr %a290 call void @finch_str_drop(ptr %a290) %t291 = load { ptr, i64, i64 }, ptr %a287 store { ptr, i64, i64 } %t291, ptr %a293 store { ptr, i64, i64 } { ptr @.str.4826, i64 2, i64 0 }, ptr %a294 call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) store { ptr, i64, i64 } %t291, ptr %a295 call void @finch_str_drop(ptr %a295) %t296 = load { ptr, i64, i64 }, ptr %a292 %t297 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 2 %t298 = load { ptr, i64, i64 }, ptr %t297 store { ptr, i64, i64 } %t296, ptr %t297 store { ptr, i64, i64 } %t298, ptr %a299 call void @finch_str_drop(ptr %a299) br label %endif7599 endif7599: %t300 = load %S.gen.Abi, ptr %a4 call void @finch.drop.arr_bool(ptr %a136) call void @finch.drop.arr_int(ptr %a128) call void @finch.drop.arr_S_gen_Leaf(ptr %a116) call void @finch.drop.S_gen_StructDef(ptr %a30) ret %S.gen.Abi %t300 } define internal %S.gen.Plan @finch.gen.makePlan(ptr %p0, %S.ast.Type %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.gen.Plan, align 16 %a5 = alloca i64, align 16 %a6 = alloca i64, align 16 %a12 = alloca %S.gen.Abi, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca i64, align 16 %a76 = alloca %S.ast.Type, align 16 %a80 = alloca %S.gen.Abi, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca i64, align 16 %a88 = alloca i64, align 16 %a90 = alloca i64, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca %S.gen.Abi, align 16 %a155 = alloca %S.gen.Abi, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.gen.Plan zeroinitializer, ptr %a4 store i64 6, ptr %a5 store i64 8, ptr %a6 %t7 = load ptr, ptr %a1 %t8 = load %S.ast.Type, ptr %a2 %t9 = call %S.gen.Abi @finch.gen.classify(ptr %t7, %S.ast.Type %t8) %t10 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t11 = load %S.gen.Abi, ptr %t10 store %S.gen.Abi %t9, ptr %t10 store %S.gen.Abi %t11, ptr %a12 call void @finch.drop.S_gen_Abi(ptr %a12) %t13 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 %t14 = load { ptr, i64, i64 }, ptr %t13 store { ptr, i64, i64 } { ptr @.str.4827, i64 4, i64 0 }, ptr %t13 store { ptr, i64, i64 } %t14, ptr %a15 call void @finch_str_drop(ptr %a15) %t16 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t17 = load { ptr, i64, i64 }, ptr %t16 store { ptr, i64, i64 } %t17, ptr %a18 store { ptr, i64, i64 } { ptr @.str.4828, i64 4, i64 0 }, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp eq i32 %t20, 0 br i1 %t21, label %then7602, label %endif7604 then7602: %t22 = load ptr, ptr %a1 %t23 = load %S.ast.Type, ptr %a2 %t24 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t22, %S.ast.Type %t23) %t25 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 %t26 = load { ptr, i64, i64 }, ptr %t25 store { ptr, i64, i64 } %t24, ptr %t25 store { ptr, i64, i64 } %t26, ptr %a27 call void @finch_str_drop(ptr %a27) br label %endif7604 endif7604: %t28 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t29 = getelementptr inbounds %S.gen.Abi, ptr %t28, i32 0, i32 0 %t30 = load { ptr, i64, i64 }, ptr %t29 store { ptr, i64, i64 } %t30, ptr %a31 store { ptr, i64, i64 } { ptr @.str.4829, i64 8, i64 0 }, ptr %a32 %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) %t34 = icmp ne i32 %t33, 0 br i1 %t34, label %then7605, label %endif7607 then7605: %t35 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t36 = getelementptr inbounds %S.gen.Abi, ptr %t35, i32 0, i32 0 %t37 = load { ptr, i64, i64 }, ptr %t36 store { ptr, i64, i64 } { ptr @.str.4830, i64 6, i64 0 }, ptr %t36 store { ptr, i64, i64 } %t37, ptr %a38 call void @finch_str_drop(ptr %a38) br label %endif7607 endif7607: %t39 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t40 = getelementptr inbounds %S.gen.Abi, ptr %t39, i32 0, i32 0 %t41 = load { ptr, i64, i64 }, ptr %t40 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.4831, i64 6, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 br i1 %t45, label %then7608, label %else7609 then7608: %t46 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 3 store i1 true, ptr %t46 %t47 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 %t48 = load { ptr, i64, i64 }, ptr %t47 store { ptr, i64, i64 } { ptr @.str.4832, i64 4, i64 0 }, ptr %t47 store { ptr, i64, i64 } %t48, ptr %a49 call void @finch_str_drop(ptr %a49) %t50 = load i64, ptr %a5 %t51 = sub i64 %t50, 1 store i64 %t51, ptr %a5 br label %endif7610 else7609: %t52 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t53 = getelementptr inbounds %S.gen.Abi, ptr %t52, i32 0, i32 0 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t54, ptr %a55 store { ptr, i64, i64 } { ptr @.str.4833, i64 6, i64 0 }, ptr %a56 %t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56) %t58 = icmp ne i32 %t57, 0 br i1 %t58, label %then7611, label %endif7613 then7611: %t59 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t60 = getelementptr inbounds %S.gen.Abi, ptr %t59, i32 0, i32 2 %t61 = load { ptr, i64, i64 }, ptr %t60 %t62 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 store { ptr, i64, i64 } %t61, ptr %a63 call void @finch_str_copy(ptr %a64, ptr %a63) %t65 = load { ptr, i64, i64 }, ptr %a64 %t66 = load { ptr, i64, i64 }, ptr %t62 store { ptr, i64, i64 } %t65, ptr %t62 store { ptr, i64, i64 } %t66, ptr %a67 call void @finch_str_drop(ptr %a67) br label %endif7613 endif7613: br label %endif7610 endif7610: store i64 0, ptr %a68 br label %each.cond7614 each.cond7614: %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t70 = load i64, ptr %t69 %t71 = load i64, ptr %a68 %t72 = icmp slt i64 %t71, %t70 br i1 %t72, label %each.body7615, label %each.end7617 each.body7615: %t73 = load ptr, ptr %a3 %t74 = getelementptr inbounds %S.ast.Type, ptr %t73, i64 %t71 %t75 = load %S.ast.Type, ptr %t74 store %S.ast.Type %t75, ptr %a76 %t77 = load ptr, ptr %a1 %t78 = load %S.ast.Type, ptr %a76 %t79 = call %S.gen.Abi @finch.gen.classify(ptr %t77, %S.ast.Type %t78) store %S.gen.Abi %t79, ptr %a80 %t81 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 0 %t82 = load { ptr, i64, i64 }, ptr %t81 store { ptr, i64, i64 } %t82, ptr %a83 store { ptr, i64, i64 } { ptr @.str.4834, i64 6, i64 0 }, ptr %a84 %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) %t86 = icmp ne i32 %t85, 0 br i1 %t86, label %then7618, label %else7619 then7618: store i64 0, ptr %a87 store i64 0, ptr %a88 %t89 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 1 store i64 0, ptr %a90 br label %each.cond7621 each.cond7621: %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i32 0, i32 1 %t92 = load i64, ptr %t91 %t93 = load i64, ptr %a90 %t94 = icmp slt i64 %t93, %t92 br i1 %t94, label %each.body7622, label %each.end7624 each.body7622: %t95 = load ptr, ptr %t89 %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i64 %t93 %t97 = load { ptr, i64, i64 }, ptr %t96 store { ptr, i64, i64 } %t97, ptr %a98 %t99 = load { ptr, i64, i64 }, ptr %a98 store { ptr, i64, i64 } %t99, ptr %a100 store { ptr, i64, i64 } { ptr @.str.4836, i64 1, i64 0 }, ptr %a102 %t103 = call i32 @finch_str_starts(ptr %a100, ptr %a102) %t104 = icmp ne i32 %t103, 0 br i1 %t104, label %then7625, label %else7626 then7625: %t105 = load i64, ptr %a87 %t106 = add i64 %t105, 1 store i64 %t106, ptr %a87 br label %endif7627 else7626: %t107 = load i64, ptr %a88 %t108 = add i64 %t107, 1 store i64 %t108, ptr %a88 br label %endif7627 endif7627: br label %each.step7623 each.step7623: %t109 = load i64, ptr %a90 %t110 = add i64 %t109, 1 store i64 %t110, ptr %a90 br label %each.cond7621 each.end7624: %t111 = load ptr, ptr %a1 %t112 = icmp eq ptr %t111, null br i1 %t112, label %panic7628, label %ok7629 panic7628: call void @finch_panic(ptr @.str.4837, i64 4425, ptr @.str.4838) unreachable ok7629: %t113 = getelementptr inbounds %S.gen.Gen, ptr %t111, i32 0, i32 31 %t114 = getelementptr inbounds %S.platform.Target, ptr %t113, i32 0, i32 1 %t115 = load i1, ptr %t114 br label %logic.from7630 logic.from7630: br i1 %t115, label %logic.end7632, label %logic.rhs7631 logic.rhs7631: %t116 = load ptr, ptr %a1 %t117 = icmp eq ptr %t116, null br i1 %t117, label %panic7633, label %ok7634 panic7633: call void @finch_panic(ptr @.str.4839, i64 4425, ptr @.str.4840) unreachable ok7634: %t118 = getelementptr inbounds %S.gen.Gen, ptr %t116, i32 0, i32 31 %t119 = getelementptr inbounds %S.platform.Target, ptr %t118, i32 0, i32 4 %t120 = load i1, ptr %t119 br label %logic.rend7635 logic.rend7635: br label %logic.end7632 logic.end7632: %t121 = phi i1 [ true, %logic.from7630 ], [ %t120, %logic.rend7635 ] br label %logic.from7636 logic.from7636: br i1 %t121, label %logic.end7638, label %logic.rhs7637 logic.rhs7637: %t122 = load i64, ptr %a87 %t123 = load i64, ptr %a5 %t124 = icmp sle i64 %t122, %t123 br label %logic.from7639 logic.from7639: br i1 %t124, label %logic.rhs7640, label %logic.end7641 logic.rhs7640: %t125 = load i64, ptr %a88 %t126 = load i64, ptr %a6 %t127 = icmp sle i64 %t125, %t126 br label %logic.rend7642 logic.rend7642: br label %logic.end7641 logic.end7641: %t128 = phi i1 [ false, %logic.from7639 ], [ %t127, %logic.rend7642 ] br label %logic.rend7643 logic.rend7643: br label %logic.end7638 logic.end7638: %t129 = phi i1 [ true, %logic.from7636 ], [ %t128, %logic.rend7643 ] br i1 %t129, label %then7644, label %else7645 then7644: %t130 = load i64, ptr %a87 %t131 = load i64, ptr %a5 %t132 = sub i64 %t131, %t130 store i64 %t132, ptr %a5 %t133 = load i64, ptr %a88 %t134 = load i64, ptr %a6 %t135 = sub i64 %t134, %t133 store i64 %t135, ptr %a6 br label %endif7646 else7645: %t136 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 0 %t137 = load { ptr, i64, i64 }, ptr %t136 store { ptr, i64, i64 } { ptr @.str.4841, i64 6, i64 0 }, ptr %t136 store { ptr, i64, i64 } %t137, ptr %a138 call void @finch_str_drop(ptr %a138) br label %endif7646 endif7646: br label %endif7620 else7619: %t139 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 0 %t140 = load { ptr, i64, i64 }, ptr %t139 store { ptr, i64, i64 } %t140, ptr %a141 store { ptr, i64, i64 } { ptr @.str.4842, i64 6, i64 0 }, ptr %a142 %t143 = call i32 @finch_str_eq(ptr %a141, ptr %a142) %t144 = icmp ne i32 %t143, 0 br i1 %t144, label %then7647, label %endif7649 then7647: %t145 = load %S.ast.Type, ptr %a76 %t146 = call i1 @finch.gen.isFloat(%S.ast.Type %t145) br i1 %t146, label %then7650, label %else7651 then7650: %t147 = load i64, ptr %a6 %t148 = sub i64 %t147, 1 store i64 %t148, ptr %a6 br label %endif7652 else7651: %t149 = load i64, ptr %a5 %t150 = sub i64 %t149, 1 store i64 %t150, ptr %a5 br label %endif7652 endif7652: br label %endif7649 endif7649: br label %endif7620 endif7620: %t151 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 1 %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 %t153 = load %S.gen.Abi, ptr %a80 store %S.gen.Abi %t153, ptr %a154 call void @finch.copy.S_gen_Abi(ptr %a155, ptr %a154) %t156 = load %S.gen.Abi, ptr %a155 %t157 = load i64, ptr %t152 %t158 = add i64 %t157, 1 call void @finch_arr_reserve(ptr %t151, i64 %t158, i64 ptrtoint (ptr getelementptr (%S.gen.Abi, ptr null, i32 1) to i64)) %t159 = load ptr, ptr %t151 %t160 = getelementptr inbounds %S.gen.Abi, ptr %t159, i64 %t157 store %S.gen.Abi %t156, ptr %t160 store i64 %t158, ptr %t152 call void @finch.drop.S_gen_Abi(ptr %a80) br label %each.step7616 each.step7616: %t161 = load i64, ptr %a68 %t162 = add i64 %t161, 1 store i64 %t162, ptr %a68 br label %each.cond7614 each.end7617: %t163 = load %S.gen.Plan, ptr %a4 ret %S.gen.Plan %t163 } define internal void @finch.gen.checkByValue(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, { ptr, i64, i64 } %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca %S.gen.StructDef, align 16 %a28 = alloca %S.gen.StructDef, align 16 %a30 = alloca %S.gen.StructDef, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t7 = load { ptr, i64, i64 }, ptr %t6 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.4843, i64 6, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp eq i32 %t10, 0 br i1 %t11, label %then7653, label %endif7655 then7653: ret void endif7655: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic7656, label %ok7657 panic7656: call void @finch_panic(ptr @.str.4844, i64 4447, ptr @.str.4845) unreachable ok7657: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 3 %t17 = load { ptr, i64, i64 }, ptr %t16 %t18 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = call i64 @finch.gen.findStruct(ptr %t15, { ptr, i64, i64 } %t17, { ptr, i64, i64 } %t19) %t21 = load { ptr, i64, i64 }, ptr %t14 %t22 = extractvalue { ptr, i64, i64 } %t21, 1 %t23 = icmp uge i64 %t20, %t22 br i1 %t23, label %range7658, label %inrange7659 range7658: call void @finch_panic_index(ptr @.str.4846, i64 4447, i64 %t20, i64 %t22) unreachable inrange7659: %t24 = extractvalue { ptr, i64, i64 } %t21, 0 %t25 = getelementptr inbounds %S.gen.StructDef, ptr %t24, i64 %t20 %t26 = load %S.gen.StructDef, ptr %t25 store %S.gen.StructDef %t26, ptr %a27 call void @finch.copy.S_gen_StructDef(ptr %a28, ptr %a27) %t29 = load %S.gen.StructDef, ptr %a28 store %S.gen.StructDef %t29, ptr %a30 %t31 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 2 %t32 = load i1, ptr %t31 %t33 = xor i1 %t32, true br i1 %t33, label %then7660, label %endif7662 then7660: %t34 = load ptr, ptr %a1 %t35 = load %S.ast.Node, ptr %a2 %t36 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.4847, i64 16, i64 0 }, ptr %a38 store { ptr, i64, i64 } %t36, ptr %a39 call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t40, ptr %a42 store { ptr, i64, i64 } { ptr @.str.4848, i64 2, i64 0 }, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) store { ptr, i64, i64 } %t40, ptr %a44 call void @finch_str_drop(ptr %a44) %t45 = load { ptr, i64, i64 }, ptr %a41 %t46 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t45, ptr %a48 store { ptr, i64, i64 } %t46, ptr %a49 call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) store { ptr, i64, i64 } %t45, ptr %a50 call void @finch_str_drop(ptr %a50) %t51 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t51, ptr %a53 store { ptr, i64, i64 } { ptr @.str.4849, i64 18, i64 0 }, ptr %a54 call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) store { ptr, i64, i64 } %t51, ptr %a55 call void @finch_str_drop(ptr %a55) %t56 = load { ptr, i64, i64 }, ptr %a52 %t57 = load %S.ast.Type, ptr %a4 %t58 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t57) store { ptr, i64, i64 } %t56, ptr %a60 store { ptr, i64, i64 } %t58, ptr %a61 call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) store { ptr, i64, i64 } %t56, ptr %a62 call void @finch_str_drop(ptr %a62) store { ptr, i64, i64 } %t58, ptr %a63 call void @finch_str_drop(ptr %a63) %t64 = load { ptr, i64, i64 }, ptr %a59 store { ptr, i64, i64 } %t64, ptr %a66 store { ptr, i64, i64 } { ptr @.str.4850, i64 20, i64 0 }, ptr %a67 call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) store { ptr, i64, i64 } %t64, ptr %a68 call void @finch_str_drop(ptr %a68) %t69 = load { ptr, i64, i64 }, ptr %a65 call void @finch.gen.fail(ptr %t34, %S.ast.Node %t35, { ptr, i64, i64 } %t69) store { ptr, i64, i64 } %t69, ptr %a70 call void @finch_str_drop(ptr %a70) br label %endif7662 endif7662: %t71 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 8 %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i32 0, i32 1 %t73 = load i64, ptr %t72 %t74 = icmp sgt i64 %t73, 0 br i1 %t74, label %then7663, label %endif7665 then7663: %t75 = load ptr, ptr %a1 %t76 = load %S.ast.Node, ptr %a2 %t77 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.4851, i64 16, i64 0 }, ptr %a79 store { ptr, i64, i64 } %t77, ptr %a80 call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) %t81 = load { ptr, i64, i64 }, ptr %a78 store { ptr, i64, i64 } %t81, ptr %a83 store { ptr, i64, i64 } { ptr @.str.4852, i64 2, i64 0 }, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) store { ptr, i64, i64 } %t81, ptr %a85 call void @finch_str_drop(ptr %a85) %t86 = load { ptr, i64, i64 }, ptr %a82 %t87 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t86, ptr %a89 store { ptr, i64, i64 } %t87, ptr %a90 call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) store { ptr, i64, i64 } %t86, ptr %a91 call void @finch_str_drop(ptr %a91) %t92 = load { ptr, i64, i64 }, ptr %a88 store { ptr, i64, i64 } %t92, ptr %a94 store { ptr, i64, i64 } { ptr @.str.4853, i64 12, i64 0 }, ptr %a95 call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) store { ptr, i64, i64 } %t92, ptr %a96 call void @finch_str_drop(ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a93 %t98 = load %S.ast.Type, ptr %a4 %t99 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t98) store { ptr, i64, i64 } %t97, ptr %a101 store { ptr, i64, i64 } %t99, ptr %a102 call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) store { ptr, i64, i64 } %t97, ptr %a103 call void @finch_str_drop(ptr %a103) store { ptr, i64, i64 } %t99, ptr %a104 call void @finch_str_drop(ptr %a104) %t105 = load { ptr, i64, i64 }, ptr %a100 store { ptr, i64, i64 } %t105, ptr %a107 store { ptr, i64, i64 } { ptr @.str.4854, i64 40, i64 0 }, ptr %a108 call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) store { ptr, i64, i64 } %t105, ptr %a109 call void @finch_str_drop(ptr %a109) %t110 = load { ptr, i64, i64 }, ptr %a106 %t111 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 8 %t112 = load { ptr, i64, i64 }, ptr %t111 store { ptr, i64, i64 } %t110, ptr %a114 store { ptr, i64, i64 } %t112, ptr %a115 call void @finch_str_concat(ptr %a113, ptr %a114, ptr %a115) store { ptr, i64, i64 } %t110, ptr %a116 call void @finch_str_drop(ptr %a116) %t117 = load { ptr, i64, i64 }, ptr %a113 call void @finch.gen.fail(ptr %t75, %S.ast.Node %t76, { ptr, i64, i64 } %t117) store { ptr, i64, i64 } %t117, ptr %a118 call void @finch_str_drop(ptr %a118) br label %endif7665 endif7665: call void @finch.drop.S_gen_StructDef(ptr %a30) ret void } define internal i1 @finch.gen.cPlain(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = load %S.ast.Type, ptr %a1 %t3 = call i1 @finch.gen.isNumber(%S.ast.Type %t2) br label %logic.from7666 logic.from7666: br i1 %t3, label %logic.end7668, label %logic.rhs7667 logic.rhs7667: %t4 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.4855, i64 4, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 br label %logic.rend7669 logic.rend7669: br label %logic.end7668 logic.end7668: %t10 = phi i1 [ true, %logic.from7666 ], [ %t9, %logic.rend7669 ] br label %logic.from7670 logic.from7670: br i1 %t10, label %logic.end7672, label %logic.rhs7671 logic.rhs7671: %t11 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.4856, i64 4, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 br label %logic.rend7673 logic.rend7673: br label %logic.end7672 logic.end7672: %t17 = phi i1 [ true, %logic.from7670 ], [ %t16, %logic.rend7673 ] br label %logic.from7674 logic.from7674: br i1 %t17, label %logic.end7676, label %logic.rhs7675 logic.rhs7675: %t18 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t19 = load { ptr, i64, i64 }, ptr %t18 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.4857, i64 3, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 br label %logic.rend7677 logic.rend7677: br label %logic.end7676 logic.end7676: %t24 = phi i1 [ true, %logic.from7674 ], [ %t23, %logic.rend7677 ] ret i1 %t24 } define internal void @finch.gen.checkExport(ptr %p0, %S.ast.Node %p1, %S.gen.FnSig %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.gen.FnSig, align 16 %a23 = alloca i64, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca i64, align 16 %a106 = alloca %S.gen.FnSig, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.gen.FnSig %p2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 2 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = icmp sgt i64 %t6, 0 br i1 %t7, label %then7678, label %endif7680 then7678: %t8 = load ptr, ptr %a1 %t9 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.4858, i64 59, i64 0 }) br label %endif7680 endif7680: %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 7 %t11 = load i1, ptr %t10 br i1 %t11, label %then7681, label %endif7683 then7681: %t12 = load ptr, ptr %a1 %t13 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t12, %S.ast.Node %t13, { ptr, i64, i64 } { ptr @.str.4859, i64 74, i64 0 }) br label %endif7683 endif7683: %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 3 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = icmp sgt i64 %t16, 0 br i1 %t17, label %then7684, label %endif7686 then7684: %t18 = load ptr, ptr %a1 %t19 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t18, %S.ast.Node %t19, { ptr, i64, i64 } { ptr @.str.4860, i64 29, i64 0 }) br label %endif7686 endif7686: %t20 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load i64, ptr %t21 store i64 0, ptr %a23 br label %for.cond7687 for.cond7687: %t24 = load i64, ptr %a23 %t25 = icmp slt i64 %t24, %t22 br i1 %t25, label %for.body7688, label %for.end7690 for.body7688: %t26 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 %t27 = load i64, ptr %a23 %t28 = load { ptr, i64, i64 }, ptr %t26 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 %t27, %t29 br i1 %t30, label %range7691, label %inrange7692 range7691: call void @finch_panic_index(ptr @.str.4861, i64 4472, i64 %t27, i64 %t29) unreachable inrange7692: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i64 %t27 %t33 = load %S.ast.Type, ptr %t32 %t34 = call i1 @finch.gen.cPlain(%S.ast.Type %t33) %t35 = xor i1 %t34, true br i1 %t35, label %then7693, label %endif7695 then7693: %t36 = load ptr, ptr %a1 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t38 = load i64, ptr %a23 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 br i1 %t41, label %range7696, label %inrange7697 range7696: call void @finch_panic_index(ptr @.str.4862, i64 4473, i64 %t38, i64 %t40) unreachable inrange7697: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t38 %t44 = load %S.ast.Node, ptr %t43 %t45 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 %t46 = load i64, ptr %a23 %t47 = load { ptr, i64, i64 }, ptr %t45 %t48 = extractvalue { ptr, i64, i64 } %t47, 1 %t49 = icmp uge i64 %t46, %t48 br i1 %t49, label %range7698, label %inrange7699 range7698: call void @finch_panic_index(ptr @.str.4864, i64 4473, i64 %t46, i64 %t48) unreachable inrange7699: %t50 = extractvalue { ptr, i64, i64 } %t47, 0 %t51 = getelementptr inbounds %S.ast.Type, ptr %t50, i64 %t46 %t52 = load %S.ast.Type, ptr %t51 %t53 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t52) store { ptr, i64, i64 } { ptr @.str.4863, i64 66, i64 0 }, ptr %a55 store { ptr, i64, i64 } %t53, ptr %a56 call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) store { ptr, i64, i64 } %t53, ptr %a57 call void @finch_str_drop(ptr %a57) %t58 = load { ptr, i64, i64 }, ptr %a54 store { ptr, i64, i64 } %t58, ptr %a60 store { ptr, i64, i64 } { ptr @.str.4865, i64 50, i64 0 }, ptr %a61 call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) store { ptr, i64, i64 } %t58, ptr %a62 call void @finch_str_drop(ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a59 call void @finch.gen.fail(ptr %t36, %S.ast.Node %t44, { ptr, i64, i64 } %t63) store { ptr, i64, i64 } %t63, ptr %a64 call void @finch_str_drop(ptr %a64) br label %endif7695 endif7695: br label %for.step7689 for.step7689: %t65 = load i64, ptr %a23 %t66 = add i64 %t65, 1 store i64 %t66, ptr %a23 br label %for.cond7687 for.end7690: %t67 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 %t68 = getelementptr inbounds %S.ast.Type, ptr %t67, i32 0, i32 0 %t69 = load { ptr, i64, i64 }, ptr %t68 store { ptr, i64, i64 } %t69, ptr %a70 store { ptr, i64, i64 } { ptr @.str.4866, i64 4, i64 0 }, ptr %a71 %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) %t73 = icmp eq i32 %t72, 0 br label %logic.from7700 logic.from7700: br i1 %t73, label %logic.rhs7701, label %logic.end7702 logic.rhs7701: %t74 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 %t75 = load %S.ast.Type, ptr %t74 %t76 = call i1 @finch.gen.cPlain(%S.ast.Type %t75) %t77 = xor i1 %t76, true br label %logic.rend7703 logic.rend7703: br label %logic.end7702 logic.end7702: %t78 = phi i1 [ false, %logic.from7700 ], [ %t77, %logic.rend7703 ] br i1 %t78, label %then7704, label %endif7706 then7704: %t79 = load ptr, ptr %a1 %t80 = load %S.ast.Node, ptr %a2 %t81 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 %t82 = load %S.ast.Type, ptr %t81 %t83 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t82) store { ptr, i64, i64 } { ptr @.str.4867, i64 69, i64 0 }, ptr %a85 store { ptr, i64, i64 } %t83, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) store { ptr, i64, i64 } %t83, ptr %a87 call void @finch_str_drop(ptr %a87) %t88 = load { ptr, i64, i64 }, ptr %a84 store { ptr, i64, i64 } %t88, ptr %a90 store { ptr, i64, i64 } { ptr @.str.4868, i64 1, i64 0 }, ptr %a91 call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) store { ptr, i64, i64 } %t88, ptr %a92 call void @finch_str_drop(ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a89 call void @finch.gen.fail(ptr %t79, %S.ast.Node %t80, { ptr, i64, i64 } %t93) store { ptr, i64, i64 } %t93, ptr %a94 call void @finch_str_drop(ptr %a94) br label %endif7706 endif7706: %t95 = load ptr, ptr %a1 %t96 = icmp eq ptr %t95, null br i1 %t96, label %panic7707, label %ok7708 panic7707: call void @finch_panic(ptr @.str.4869, i64 4479, ptr @.str.4870) unreachable ok7708: %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 15 store i64 0, ptr %a98 br label %each.cond7709 each.cond7709: %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t97, i32 0, i32 1 %t100 = load i64, ptr %t99 %t101 = load i64, ptr %a98 %t102 = icmp slt i64 %t101, %t100 br i1 %t102, label %each.body7710, label %each.end7712 each.body7710: %t103 = load ptr, ptr %t97 %t104 = getelementptr inbounds %S.gen.FnSig, ptr %t103, i64 %t101 %t105 = load %S.gen.FnSig, ptr %t104 store %S.gen.FnSig %t105, ptr %a106 %t107 = getelementptr inbounds %S.gen.FnSig, ptr %a106, i32 0, i32 5 %t108 = load i1, ptr %t107 br label %logic.from7713 logic.from7713: br i1 %t108, label %logic.rhs7714, label %logic.end7715 logic.rhs7714: %t109 = getelementptr inbounds %S.gen.FnSig, ptr %a106, i32 0, i32 1 %t110 = load { ptr, i64, i64 }, ptr %t109 %t111 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 %t112 = load { ptr, i64, i64 }, ptr %t111 store { ptr, i64, i64 } %t110, ptr %a113 store { ptr, i64, i64 } %t112, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 br label %logic.rend7716 logic.rend7716: br label %logic.end7715 logic.end7715: %t117 = phi i1 [ false, %logic.from7713 ], [ %t116, %logic.rend7716 ] br i1 %t117, label %then7717, label %endif7719 then7717: %t118 = load ptr, ptr %a1 %t119 = load %S.ast.Node, ptr %a2 %t120 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 %t121 = load { ptr, i64, i64 }, ptr %t120 store { ptr, i64, i64 } { ptr @.str.4871, i64 1, i64 0 }, ptr %a123 store { ptr, i64, i64 } %t121, ptr %a124 call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) %t125 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t125, ptr %a127 store { ptr, i64, i64 } { ptr @.str.4872, i64 38, i64 0 }, ptr %a128 call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) store { ptr, i64, i64 } %t125, ptr %a129 call void @finch_str_drop(ptr %a129) %t130 = load { ptr, i64, i64 }, ptr %a126 call void @finch.gen.fail(ptr %t118, %S.ast.Node %t119, { ptr, i64, i64 } %t130) store { ptr, i64, i64 } %t130, ptr %a131 call void @finch_str_drop(ptr %a131) br label %endif7719 endif7719: br label %each.step7711 each.step7711: %t132 = load i64, ptr %a98 %t133 = add i64 %t132, 1 store i64 %t133, ptr %a98 br label %each.cond7709 each.end7712: ret void } define internal { ptr, i64, i64 } @finch.gen.exportWrapper(ptr %p0, %S.gen.FnSig %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.FnSig, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca %S.gen.Saved, align 16 %a11 = alloca i64, align 16 %a22 = alloca %S.ast.Type, align 16 %a23 = alloca %S.ast.Type, align 16 %a25 = alloca %S.ast.Type, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca { ptr, i64, i64 }, align 16 %a308 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.gen.FnSig %p1, ptr %a2 store { ptr, i64, i64 } zeroinitializer, ptr %a3 store { ptr, i64, i64 } zeroinitializer, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t5) store %S.gen.Saved %t6, ptr %a7 %t8 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 13 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 %t10 = load i64, ptr %t9 store i64 0, ptr %a11 br label %for.cond7720 for.cond7720: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t10 br i1 %t13, label %for.body7721, label %for.end7723 for.body7721: %t14 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 13 %t15 = load i64, ptr %a11 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 br i1 %t18, label %range7724, label %inrange7725 range7724: call void @finch_panic_index(ptr @.str.4873, i64 4492, i64 %t15, i64 %t17) unreachable inrange7725: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.ast.Type, ptr %t19, i64 %t15 %t21 = load %S.ast.Type, ptr %t20 store %S.ast.Type %t21, ptr %a22 call void @finch.copy.S_ast_Type(ptr %a23, ptr %a22) %t24 = load %S.ast.Type, ptr %a23 store %S.ast.Type %t24, ptr %a25 %t26 = getelementptr inbounds %S.ast.Type, ptr %a25, i32 0, i32 0 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.4874, i64 4, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 br i1 %t31, label %then7726, label %else7727 then7726: %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t33 = load i64, ptr %a11 call void @finch_str_from_int(ptr %a34, i64 %t33) %t35 = load { ptr, i64, i64 }, ptr %a34 store { ptr, i64, i64 } { ptr @.str.4875, i64 13, i64 0 }, ptr %a37 store { ptr, i64, i64 } %t35, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) store { ptr, i64, i64 } %t35, ptr %a39 call void @finch_str_drop(ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a36 %t41 = load i64, ptr %t32 %t42 = add i64 %t41, 1 call void @finch_arr_reserve(ptr %a3, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t43 = load ptr, ptr %a3 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 store { ptr, i64, i64 } %t40, ptr %t44 store i64 %t42, ptr %t32 %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t46 = load ptr, ptr %a1 %t47 = load i64, ptr %a11 call void @finch_str_from_int(ptr %a48, i64 %t47) %t49 = load { ptr, i64, i64 }, ptr %a48 store { ptr, i64, i64 } { ptr @.str.4877, i64 13, i64 0 }, ptr %a51 store { ptr, i64, i64 } %t49, ptr %a52 call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) store { ptr, i64, i64 } %t49, ptr %a53 call void @finch_str_drop(ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } %t54, ptr %a56 store { ptr, i64, i64 } { ptr @.str.4878, i64 3, i64 0 }, ptr %a57 call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) store { ptr, i64, i64 } %t54, ptr %a58 call void @finch_str_drop(ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a55 %t60 = call { ptr, i64, i64 } @finch.gen.op(ptr %t46, { ptr, i64, i64 } %t59) store { ptr, i64, i64 } %t59, ptr %a61 call void @finch_str_drop(ptr %a61) store { ptr, i64, i64 } { ptr @.str.4876, i64 3, i64 0 }, ptr %a63 store { ptr, i64, i64 } %t60, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) store { ptr, i64, i64 } %t60, ptr %a65 call void @finch_str_drop(ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a62 %t67 = load i64, ptr %t45 %t68 = add i64 %t67, 1 call void @finch_arr_reserve(ptr %a4, i64 %t68, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t69 = load ptr, ptr %a4 %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i64 %t67 store { ptr, i64, i64 } %t66, ptr %t70 store i64 %t68, ptr %t45 br label %endif7728 else7727: %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t72 = load ptr, ptr %a1 %t73 = load %S.ast.Type, ptr %a25 %t74 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t72, %S.ast.Type %t73) %t75 = load ptr, ptr %a1 %t76 = load %S.ast.Type, ptr %a25 %t77 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t75, %S.ast.Type %t76) store { ptr, i64, i64 } %t74, ptr %a79 store { ptr, i64, i64 } %t77, ptr %a80 call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) store { ptr, i64, i64 } %t74, ptr %a81 call void @finch_str_drop(ptr %a81) store { ptr, i64, i64 } %t77, ptr %a82 call void @finch_str_drop(ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a78 store { ptr, i64, i64 } %t83, ptr %a85 store { ptr, i64, i64 } { ptr @.str.4879, i64 3, i64 0 }, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) store { ptr, i64, i64 } %t83, ptr %a87 call void @finch_str_drop(ptr %a87) %t88 = load { ptr, i64, i64 }, ptr %a84 %t89 = load i64, ptr %a11 call void @finch_str_from_int(ptr %a90, i64 %t89) %t91 = load { ptr, i64, i64 }, ptr %a90 store { ptr, i64, i64 } %t88, ptr %a93 store { ptr, i64, i64 } %t91, ptr %a94 call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) store { ptr, i64, i64 } %t88, ptr %a95 call void @finch_str_drop(ptr %a95) store { ptr, i64, i64 } %t91, ptr %a96 call void @finch_str_drop(ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a92 %t98 = load i64, ptr %t71 %t99 = add i64 %t98, 1 call void @finch_arr_reserve(ptr %a3, i64 %t99, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t100 = load ptr, ptr %a3 %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t100, i64 %t98 store { ptr, i64, i64 } %t97, ptr %t101 store i64 %t99, ptr %t71 %t102 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t103 = load ptr, ptr %a1 %t104 = load %S.ast.Type, ptr %a25 %t105 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t103, %S.ast.Type %t104) store { ptr, i64, i64 } %t105, ptr %a107 store { ptr, i64, i64 } { ptr @.str.4880, i64 3, i64 0 }, ptr %a108 call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) store { ptr, i64, i64 } %t105, ptr %a109 call void @finch_str_drop(ptr %a109) %t110 = load { ptr, i64, i64 }, ptr %a106 %t111 = load i64, ptr %a11 call void @finch_str_from_int(ptr %a112, i64 %t111) %t113 = load { ptr, i64, i64 }, ptr %a112 store { ptr, i64, i64 } %t110, ptr %a115 store { ptr, i64, i64 } %t113, ptr %a116 call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) store { ptr, i64, i64 } %t110, ptr %a117 call void @finch_str_drop(ptr %a117) store { ptr, i64, i64 } %t113, ptr %a118 call void @finch_str_drop(ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a114 %t120 = load i64, ptr %t102 %t121 = add i64 %t120, 1 call void @finch_arr_reserve(ptr %a4, i64 %t121, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t122 = load ptr, ptr %a4 %t123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 %t120 store { ptr, i64, i64 } %t119, ptr %t123 store i64 %t121, ptr %t102 br label %endif7728 endif7728: call void @finch.drop.S_ast_Type(ptr %a25) br label %for.step7722 for.step7722: %t124 = load i64, ptr %a11 %t125 = add i64 %t124, 1 store i64 %t125, ptr %a11 br label %for.cond7720 for.end7723: %t126 = load ptr, ptr %a1 %t127 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t128 = load %S.ast.Type, ptr %t127 %t129 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t126, %S.ast.Type %t128) store { ptr, i64, i64 } { ptr @.str.4881, i64 5, i64 0 }, ptr %a131 store { ptr, i64, i64 } %t129, ptr %a132 call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) store { ptr, i64, i64 } %t129, ptr %a133 call void @finch_str_drop(ptr %a133) %t134 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t134, ptr %a136 store { ptr, i64, i64 } { ptr @.str.4882, i64 1, i64 0 }, ptr %a137 call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) store { ptr, i64, i64 } %t134, ptr %a138 call void @finch_str_drop(ptr %a138) %t139 = load { ptr, i64, i64 }, ptr %a135 %t140 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 11 %t141 = load { ptr, i64, i64 }, ptr %t140 store { ptr, i64, i64 } %t139, ptr %a143 store { ptr, i64, i64 } %t141, ptr %a144 call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) store { ptr, i64, i64 } %t139, ptr %a145 call void @finch_str_drop(ptr %a145) %t146 = load { ptr, i64, i64 }, ptr %a142 store { ptr, i64, i64 } %t146, ptr %a148 store { ptr, i64, i64 } { ptr @.str.4883, i64 1, i64 0 }, ptr %a149 call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) store { ptr, i64, i64 } %t146, ptr %a150 call void @finch_str_drop(ptr %a150) %t151 = load { ptr, i64, i64 }, ptr %a147 %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4884, i64 2, i64 0 }, ptr %a153 call void @finch_str_join(ptr %a154, ptr %a4, ptr %a153) %t155 = load { ptr, i64, i64 }, ptr %a154 store { ptr, i64, i64 } %t151, ptr %a157 store { ptr, i64, i64 } %t155, ptr %a158 call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158) store { ptr, i64, i64 } %t151, ptr %a159 call void @finch_str_drop(ptr %a159) store { ptr, i64, i64 } %t155, ptr %a160 call void @finch_str_drop(ptr %a160) %t161 = load { ptr, i64, i64 }, ptr %a156 store { ptr, i64, i64 } %t161, ptr %a163 store { ptr, i64, i64 } { ptr @.str.4885, i64 1, i64 0 }, ptr %a164 call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164) store { ptr, i64, i64 } %t161, ptr %a165 call void @finch_str_drop(ptr %a165) %t166 = load { ptr, i64, i64 }, ptr %a162 store { ptr, i64, i64 } %t166, ptr %a167 store { ptr, i64, i64 } { ptr @.str.4886, i64 4, i64 0 }, ptr %a168 store { ptr, i64, i64 } { ptr @.str.4887, i64 0, i64 0 }, ptr %a169 %t170 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t171 = getelementptr inbounds %S.ast.Type, ptr %t170, i32 0, i32 0 %t172 = load { ptr, i64, i64 }, ptr %t171 store { ptr, i64, i64 } %t172, ptr %a173 store { ptr, i64, i64 } { ptr @.str.4888, i64 4, i64 0 }, ptr %a174 %t175 = call i32 @finch_str_eq(ptr %a173, ptr %a174) %t176 = icmp ne i32 %t175, 0 br i1 %t176, label %then7729, label %else7730 then7729: %t177 = load ptr, ptr %a1 %t178 = load { ptr, i64, i64 }, ptr %a167 call void @finch.gen.emit(ptr %t177, { ptr, i64, i64 } %t178) %t179 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t179, { ptr, i64, i64 } { ptr @.str.4889, i64 8, i64 0 }) br label %endif7731 else7730: %t180 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t181 = getelementptr inbounds %S.ast.Type, ptr %t180, i32 0, i32 0 %t182 = load { ptr, i64, i64 }, ptr %t181 store { ptr, i64, i64 } %t182, ptr %a183 store { ptr, i64, i64 } { ptr @.str.4890, i64 4, i64 0 }, ptr %a184 %t185 = call i32 @finch_str_eq(ptr %a183, ptr %a184) %t186 = icmp ne i32 %t185, 0 br i1 %t186, label %then7732, label %else7733 then7732: %t187 = load { ptr, i64, i64 }, ptr %a168 store { ptr, i64, i64 } { ptr @.str.4891, i64 2, i64 0 }, ptr %a168 store { ptr, i64, i64 } %t187, ptr %a188 call void @finch_str_drop(ptr %a188) %t189 = load { ptr, i64, i64 }, ptr %a169 store { ptr, i64, i64 } { ptr @.str.4892, i64 8, i64 0 }, ptr %a169 store { ptr, i64, i64 } %t189, ptr %a190 call void @finch_str_drop(ptr %a190) %t191 = load ptr, ptr %a1 %t192 = load ptr, ptr %a1 %t193 = load ptr, ptr %a1 %t194 = load { ptr, i64, i64 }, ptr %a167 %t195 = call { ptr, i64, i64 } @finch.gen.op(ptr %t193, { ptr, i64, i64 } %t194) store { ptr, i64, i64 } { ptr @.str.4894, i64 8, i64 0 }, ptr %a197 store { ptr, i64, i64 } %t195, ptr %a198 call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198) store { ptr, i64, i64 } %t195, ptr %a199 call void @finch_str_drop(ptr %a199) %t200 = load { ptr, i64, i64 }, ptr %a196 store { ptr, i64, i64 } %t200, ptr %a202 store { ptr, i64, i64 } { ptr @.str.4895, i64 6, i64 0 }, ptr %a203 call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203) store { ptr, i64, i64 } %t200, ptr %a204 call void @finch_str_drop(ptr %a204) %t205 = load { ptr, i64, i64 }, ptr %a201 %t206 = call { ptr, i64, i64 } @finch.gen.op(ptr %t192, { ptr, i64, i64 } %t205) store { ptr, i64, i64 } %t205, ptr %a207 call void @finch_str_drop(ptr %a207) store { ptr, i64, i64 } { ptr @.str.4893, i64 7, i64 0 }, ptr %a209 store { ptr, i64, i64 } %t206, ptr %a210 call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) store { ptr, i64, i64 } %t206, ptr %a211 call void @finch_str_drop(ptr %a211) %t212 = load { ptr, i64, i64 }, ptr %a208 call void @finch.gen.emit(ptr %t191, { ptr, i64, i64 } %t212) store { ptr, i64, i64 } %t212, ptr %a213 call void @finch_str_drop(ptr %a213) br label %endif7734 else7733: %t214 = load ptr, ptr %a1 %t215 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t216 = load %S.ast.Type, ptr %t215 %t217 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t214, %S.ast.Type %t216) %t218 = load { ptr, i64, i64 }, ptr %a168 store { ptr, i64, i64 } %t217, ptr %a168 store { ptr, i64, i64 } %t218, ptr %a219 call void @finch_str_drop(ptr %a219) %t220 = load ptr, ptr %a1 %t221 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t222 = load %S.ast.Type, ptr %t221 %t223 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t220, %S.ast.Type %t222) %t224 = load { ptr, i64, i64 }, ptr %a169 store { ptr, i64, i64 } %t223, ptr %a169 store { ptr, i64, i64 } %t224, ptr %a225 call void @finch_str_drop(ptr %a225) %t226 = load ptr, ptr %a1 %t227 = load { ptr, i64, i64 }, ptr %a168 store { ptr, i64, i64 } { ptr @.str.4896, i64 4, i64 0 }, ptr %a229 store { ptr, i64, i64 } %t227, ptr %a230 call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) %t231 = load { ptr, i64, i64 }, ptr %a228 store { ptr, i64, i64 } %t231, ptr %a233 store { ptr, i64, i64 } { ptr @.str.4897, i64 1, i64 0 }, ptr %a234 call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) store { ptr, i64, i64 } %t231, ptr %a235 call void @finch_str_drop(ptr %a235) %t236 = load { ptr, i64, i64 }, ptr %a232 %t237 = load ptr, ptr %a1 %t238 = load { ptr, i64, i64 }, ptr %a167 %t239 = call { ptr, i64, i64 } @finch.gen.op(ptr %t237, { ptr, i64, i64 } %t238) store { ptr, i64, i64 } %t236, ptr %a241 store { ptr, i64, i64 } %t239, ptr %a242 call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) store { ptr, i64, i64 } %t236, ptr %a243 call void @finch_str_drop(ptr %a243) store { ptr, i64, i64 } %t239, ptr %a244 call void @finch_str_drop(ptr %a244) %t245 = load { ptr, i64, i64 }, ptr %a240 call void @finch.gen.emit(ptr %t226, { ptr, i64, i64 } %t245) store { ptr, i64, i64 } %t245, ptr %a246 call void @finch_str_drop(ptr %a246) br label %endif7734 endif7734: br label %endif7731 endif7731: store { ptr, i64, i64 } { ptr @.str.4898, i64 0, i64 0 }, ptr %a247 %t248 = load ptr, ptr %a1 %t249 = icmp eq ptr %t248, null br i1 %t249, label %panic7735, label %ok7736 panic7735: call void @finch_panic(ptr @.str.4899, i64 4517, ptr @.str.4900) unreachable ok7736: %t250 = getelementptr inbounds %S.gen.Gen, ptr %t248, i32 0, i32 31 %t251 = getelementptr inbounds %S.platform.Target, ptr %t250, i32 0, i32 1 %t252 = load i1, ptr %t251 br i1 %t252, label %then7737, label %endif7739 then7737: %t253 = load { ptr, i64, i64 }, ptr %a247 store { ptr, i64, i64 } { ptr @.str.4901, i64 10, i64 0 }, ptr %a247 store { ptr, i64, i64 } %t253, ptr %a254 call void @finch_str_drop(ptr %a254) br label %endif7739 endif7739: %t255 = load ptr, ptr %a1 %t256 = load %S.gen.Saved, ptr %a7 %t257 = load { ptr, i64, i64 }, ptr %a247 store { ptr, i64, i64 } { ptr @.str.4902, i64 6, i64 0 }, ptr %a259 store { ptr, i64, i64 } %t257, ptr %a260 call void @finch_str_concat(ptr %a258, ptr %a259, ptr %a260) %t261 = load { ptr, i64, i64 }, ptr %a258 %t262 = load { ptr, i64, i64 }, ptr %a169 store { ptr, i64, i64 } %t261, ptr %a264 store { ptr, i64, i64 } %t262, ptr %a265 call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) store { ptr, i64, i64 } %t261, ptr %a266 call void @finch_str_drop(ptr %a266) %t267 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t267, ptr %a269 store { ptr, i64, i64 } { ptr @.str.4903, i64 1, i64 0 }, ptr %a270 call void @finch_str_concat(ptr %a268, ptr %a269, ptr %a270) store { ptr, i64, i64 } %t267, ptr %a271 call void @finch_str_drop(ptr %a271) %t272 = load { ptr, i64, i64 }, ptr %a268 %t273 = load { ptr, i64, i64 }, ptr %a168 store { ptr, i64, i64 } %t272, ptr %a275 store { ptr, i64, i64 } %t273, ptr %a276 call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276) store { ptr, i64, i64 } %t272, ptr %a277 call void @finch_str_drop(ptr %a277) %t278 = load { ptr, i64, i64 }, ptr %a274 store { ptr, i64, i64 } %t278, ptr %a280 store { ptr, i64, i64 } { ptr @.str.4904, i64 2, i64 0 }, ptr %a281 call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) store { ptr, i64, i64 } %t278, ptr %a282 call void @finch_str_drop(ptr %a282) %t283 = load { ptr, i64, i64 }, ptr %a279 %t284 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 1 %t285 = load { ptr, i64, i64 }, ptr %t284 store { ptr, i64, i64 } %t283, ptr %a287 store { ptr, i64, i64 } %t285, ptr %a288 call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288) store { ptr, i64, i64 } %t283, ptr %a289 call void @finch_str_drop(ptr %a289) %t290 = load { ptr, i64, i64 }, ptr %a286 store { ptr, i64, i64 } %t290, ptr %a292 store { ptr, i64, i64 } { ptr @.str.4905, i64 1, i64 0 }, ptr %a293 call void @finch_str_concat(ptr %a291, ptr %a292, ptr %a293) store { ptr, i64, i64 } %t290, ptr %a294 call void @finch_str_drop(ptr %a294) %t295 = load { ptr, i64, i64 }, ptr %a291 %t296 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4906, i64 2, i64 0 }, ptr %a297 call void @finch_str_join(ptr %a298, ptr %a3, ptr %a297) %t299 = load { ptr, i64, i64 }, ptr %a298 store { ptr, i64, i64 } %t295, ptr %a301 store { ptr, i64, i64 } %t299, ptr %a302 call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) store { ptr, i64, i64 } %t295, ptr %a303 call void @finch_str_drop(ptr %a303) store { ptr, i64, i64 } %t299, ptr %a304 call void @finch_str_drop(ptr %a304) %t305 = load { ptr, i64, i64 }, ptr %a300 store { ptr, i64, i64 } %t305, ptr %a307 store { ptr, i64, i64 } { ptr @.str.4907, i64 1, i64 0 }, ptr %a308 call void @finch_str_concat(ptr %a306, ptr %a307, ptr %a308) store { ptr, i64, i64 } %t305, ptr %a309 call void @finch_str_drop(ptr %a309) %t310 = load { ptr, i64, i64 }, ptr %a306 call void @finch.gen.endHelper(ptr %t255, %S.gen.Saved %t256, { ptr, i64, i64 } %t310) store { ptr, i64, i64 } %t310, ptr %a311 call void @finch_str_drop(ptr %a311) %t312 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 1 %t313 = load { ptr, i64, i64 }, ptr %t312 store { ptr, i64, i64 } %t313, ptr %a314 call void @finch_str_copy(ptr %a315, ptr %a314) %t316 = load { ptr, i64, i64 }, ptr %a315 call void @finch_str_drop(ptr %a247) call void @finch_str_drop(ptr %a169) call void @finch_str_drop(ptr %a168) call void @finch_str_drop(ptr %a167) call void @finch.drop.S_gen_Saved(ptr %a7) call void @finch.drop.arr_str(ptr %a4) call void @finch.drop.arr_str(ptr %a3) ret { ptr, i64, i64 } %t316 } define internal void @finch.drop.arr_S_gen_Abi(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond7862 n.cond7862: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body7863, label %n.end7864 n.body7863: %t7 = getelementptr inbounds %S.gen.Abi, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Abi(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond7862 n.end7864: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.S_gen_Plan(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.Plan, ptr %a, i32 0, i32 0 call void @finch.drop.S_gen_Abi(ptr %t1) %t2 = getelementptr inbounds %S.gen.Plan, ptr %a, i32 0, i32 1 call void @finch.drop.arr_S_gen_Abi(ptr %t2) %t3 = getelementptr inbounds %S.gen.Plan, ptr %a, i32 0, i32 2 call void @finch_str_drop(ptr %t3) ret void } define internal { ptr, i64, i64 } @finch.gen.cThunk(ptr %p0, i64 %p1, %S.ast.Node %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a3 = alloca %S.ast.Node, align 16 %a14 = alloca %S.gen.FnSig, align 16 %a15 = alloca %S.gen.FnSig, align 16 %a17 = alloca %S.gen.FnSig, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca i64, align 16 %a51 = alloca i64, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca i64, align 16 %a108 = alloca %S.ast.Type, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca %S.gen.Plan, align 16 %a276 = alloca %S.gen.Saved, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca i64, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca i64, align 16 %a318 = alloca %S.ast.Type, align 16 %a319 = alloca %S.ast.Type, align 16 %a321 = alloca %S.ast.Type, align 16 %a330 = alloca %S.gen.Abi, align 16 %a331 = alloca %S.gen.Abi, align 16 %a333 = alloca %S.gen.Abi, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a346 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca { ptr, i64, i64 }, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a373 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a399 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a401 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca { ptr, i64, i64 }, align 16 %a406 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a410 = alloca { ptr, i64, i64 }, align 16 %a420 = alloca { ptr, i64, i64 }, align 16 %a421 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a441 = alloca { ptr, i64, i64 }, align 16 %a442 = alloca { ptr, i64, i64 }, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a444 = alloca { ptr, i64, i64 }, align 16 %a451 = alloca { ptr, i64, i64 }, align 16 %a453 = alloca { ptr, i64, i64 }, align 16 %a454 = alloca { ptr, i64, i64 }, align 16 %a455 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a459 = alloca { ptr, i64, i64 }, align 16 %a460 = alloca { ptr, i64, i64 }, align 16 %a461 = alloca { ptr, i64, i64 }, align 16 %a462 = alloca { ptr, i64, i64 }, align 16 %a463 = alloca { ptr, i64, i64 }, align 16 %a464 = alloca { ptr, i64, i64 }, align 16 %a465 = alloca { ptr, i64, i64 }, align 16 %a475 = alloca { ptr, i64, i64 }, align 16 %a476 = alloca { ptr, i64, i64 }, align 16 %a481 = alloca { ptr, i64, i64 }, align 16 %a485 = alloca i64, align 16 %a497 = alloca { ptr, i64, i64 }, align 16 %a498 = alloca { ptr, i64, i64 }, align 16 %a499 = alloca { ptr, i64, i64 }, align 16 %a502 = alloca { ptr, i64, i64 }, align 16 %a504 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a508 = alloca { ptr, i64, i64 }, align 16 %a524 = alloca { ptr, i64, i64 }, align 16 %a526 = alloca { ptr, i64, i64 }, align 16 %a527 = alloca { ptr, i64, i64 }, align 16 %a528 = alloca { ptr, i64, i64 }, align 16 %a529 = alloca { ptr, i64, i64 }, align 16 %a533 = alloca { ptr, i64, i64 }, align 16 %a534 = alloca { ptr, i64, i64 }, align 16 %a535 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a538 = alloca { ptr, i64, i64 }, align 16 %a539 = alloca { ptr, i64, i64 }, align 16 %a540 = alloca { ptr, i64, i64 }, align 16 %a544 = alloca { ptr, i64, i64 }, align 16 %a546 = alloca { ptr, i64, i64 }, align 16 %a547 = alloca { ptr, i64, i64 }, align 16 %a548 = alloca { ptr, i64, i64 }, align 16 %a549 = alloca { ptr, i64, i64 }, align 16 %a550 = alloca { ptr, i64, i64 }, align 16 %a553 = alloca { ptr, i64, i64 }, align 16 %a554 = alloca { ptr, i64, i64 }, align 16 %a555 = alloca { ptr, i64, i64 }, align 16 %a564 = alloca { ptr, i64, i64 }, align 16 %a565 = alloca { ptr, i64, i64 }, align 16 %a566 = alloca { ptr, i64, i64 }, align 16 %a567 = alloca { ptr, i64, i64 }, align 16 %a575 = alloca { ptr, i64, i64 }, align 16 %a576 = alloca { ptr, i64, i64 }, align 16 %a577 = alloca { ptr, i64, i64 }, align 16 %a578 = alloca { ptr, i64, i64 }, align 16 %a579 = alloca { ptr, i64, i64 }, align 16 %a580 = alloca { ptr, i64, i64 }, align 16 %a593 = alloca { ptr, i64, i64 }, align 16 %a594 = alloca { ptr, i64, i64 }, align 16 %a595 = alloca { ptr, i64, i64 }, align 16 %a596 = alloca { ptr, i64, i64 }, align 16 %a597 = alloca { ptr, i64, i64 }, align 16 %a599 = alloca { ptr, i64, i64 }, align 16 %a600 = alloca { ptr, i64, i64 }, align 16 %a601 = alloca { ptr, i64, i64 }, align 16 %a602 = alloca { ptr, i64, i64 }, align 16 %a605 = alloca { ptr, i64, i64 }, align 16 %a607 = alloca { ptr, i64, i64 }, align 16 %a608 = alloca { ptr, i64, i64 }, align 16 %a609 = alloca { ptr, i64, i64 }, align 16 %a610 = alloca { ptr, i64, i64 }, align 16 %a611 = alloca { ptr, i64, i64 }, align 16 %a621 = alloca { ptr, i64, i64 }, align 16 %a622 = alloca { ptr, i64, i64 }, align 16 %a623 = alloca { ptr, i64, i64 }, align 16 %a624 = alloca { ptr, i64, i64 }, align 16 %a627 = alloca { ptr, i64, i64 }, align 16 %a629 = alloca { ptr, i64, i64 }, align 16 %a630 = alloca { ptr, i64, i64 }, align 16 %a631 = alloca { ptr, i64, i64 }, align 16 %a632 = alloca { ptr, i64, i64 }, align 16 %a633 = alloca { ptr, i64, i64 }, align 16 %a647 = alloca { ptr, i64, i64 }, align 16 %a648 = alloca { ptr, i64, i64 }, align 16 %a649 = alloca { ptr, i64, i64 }, align 16 %a650 = alloca { ptr, i64, i64 }, align 16 %a652 = alloca { ptr, i64, i64 }, align 16 %a653 = alloca { ptr, i64, i64 }, align 16 %a654 = alloca { ptr, i64, i64 }, align 16 %a655 = alloca { ptr, i64, i64 }, align 16 %a659 = alloca { ptr, i64, i64 }, align 16 %a660 = alloca { ptr, i64, i64 }, align 16 %a661 = alloca { ptr, i64, i64 }, align 16 %a662 = alloca { ptr, i64, i64 }, align 16 %a664 = alloca { ptr, i64, i64 }, align 16 %a665 = alloca { ptr, i64, i64 }, align 16 %a666 = alloca { ptr, i64, i64 }, align 16 %a667 = alloca { ptr, i64, i64 }, align 16 %a670 = alloca { ptr, i64, i64 }, align 16 %a671 = alloca { ptr, i64, i64 }, align 16 %a673 = alloca { ptr, i64, i64 }, align 16 %a674 = alloca { ptr, i64, i64 }, align 16 %a675 = alloca { ptr, i64, i64 }, align 16 %a676 = alloca { ptr, i64, i64 }, align 16 %a677 = alloca { ptr, i64, i64 }, align 16 %a679 = alloca { ptr, i64, i64 }, align 16 %a680 = alloca { ptr, i64, i64 }, align 16 %a681 = alloca { ptr, i64, i64 }, align 16 %a682 = alloca { ptr, i64, i64 }, align 16 %a684 = alloca { ptr, i64, i64 }, align 16 %a685 = alloca { ptr, i64, i64 }, align 16 %a689 = alloca { ptr, i64, i64 }, align 16 %a690 = alloca { ptr, i64, i64 }, align 16 %a707 = alloca { ptr, i64, i64 }, align 16 %a708 = alloca { ptr, i64, i64 }, align 16 %a713 = alloca { ptr, i64, i64 }, align 16 %a714 = alloca { ptr, i64, i64 }, align 16 %a719 = alloca { ptr, i64, i64 }, align 16 %a729 = alloca { ptr, i64, i64 }, align 16 %a730 = alloca { ptr, i64, i64 }, align 16 %a735 = alloca { ptr, i64, i64 }, align 16 %a736 = alloca { ptr, i64, i64 }, align 16 %a737 = alloca { ptr, i64, i64 }, align 16 %a739 = alloca { ptr, i64, i64 }, align 16 %a740 = alloca { ptr, i64, i64 }, align 16 %a741 = alloca { ptr, i64, i64 }, align 16 %a742 = alloca { ptr, i64, i64 }, align 16 %a750 = alloca { ptr, i64, i64 }, align 16 %a751 = alloca { ptr, i64, i64 }, align 16 %a752 = alloca { ptr, i64, i64 }, align 16 %a753 = alloca { ptr, i64, i64 }, align 16 %a754 = alloca { ptr, i64, i64 }, align 16 %a756 = alloca { ptr, i64, i64 }, align 16 %a762 = alloca { ptr, i64, i64 }, align 16 %a768 = alloca { ptr, i64, i64 }, align 16 %a769 = alloca { ptr, i64, i64 }, align 16 %a770 = alloca { ptr, i64, i64 }, align 16 %a771 = alloca { ptr, i64, i64 }, align 16 %a773 = alloca { ptr, i64, i64 }, align 16 %a774 = alloca { ptr, i64, i64 }, align 16 %a775 = alloca { ptr, i64, i64 }, align 16 %a776 = alloca { ptr, i64, i64 }, align 16 %a781 = alloca { ptr, i64, i64 }, align 16 %a782 = alloca { ptr, i64, i64 }, align 16 %a783 = alloca { ptr, i64, i64 }, align 16 %a784 = alloca { ptr, i64, i64 }, align 16 %a785 = alloca { ptr, i64, i64 }, align 16 %a787 = alloca { ptr, i64, i64 }, align 16 %a791 = alloca { ptr, i64, i64 }, align 16 %a792 = alloca { ptr, i64, i64 }, align 16 %a793 = alloca { ptr, i64, i64 }, align 16 %a795 = alloca { ptr, i64, i64 }, align 16 %a796 = alloca { ptr, i64, i64 }, align 16 %a797 = alloca { ptr, i64, i64 }, align 16 %a798 = alloca { ptr, i64, i64 }, align 16 %a802 = alloca { ptr, i64, i64 }, align 16 %a803 = alloca { ptr, i64, i64 }, align 16 %a804 = alloca { ptr, i64, i64 }, align 16 %a805 = alloca { ptr, i64, i64 }, align 16 %a807 = alloca { ptr, i64, i64 }, align 16 %a808 = alloca { ptr, i64, i64 }, align 16 %a809 = alloca { ptr, i64, i64 }, align 16 %a810 = alloca { ptr, i64, i64 }, align 16 %a813 = alloca { ptr, i64, i64 }, align 16 %a814 = alloca { ptr, i64, i64 }, align 16 %a815 = alloca { ptr, i64, i64 }, align 16 %a816 = alloca { ptr, i64, i64 }, align 16 %a818 = alloca { ptr, i64, i64 }, align 16 %a819 = alloca { ptr, i64, i64 }, align 16 %a820 = alloca { ptr, i64, i64 }, align 16 %a821 = alloca { ptr, i64, i64 }, align 16 %a824 = alloca { ptr, i64, i64 }, align 16 %a825 = alloca { ptr, i64, i64 }, align 16 %a827 = alloca { ptr, i64, i64 }, align 16 %a828 = alloca { ptr, i64, i64 }, align 16 %a829 = alloca { ptr, i64, i64 }, align 16 %a830 = alloca { ptr, i64, i64 }, align 16 %a831 = alloca { ptr, i64, i64 }, align 16 %a833 = alloca { ptr, i64, i64 }, align 16 %a834 = alloca { ptr, i64, i64 }, align 16 %a835 = alloca { ptr, i64, i64 }, align 16 %a836 = alloca { ptr, i64, i64 }, align 16 %a838 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 store %S.ast.Node %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic7740, label %ok7741 panic7740: call void @finch_panic(ptr @.str.4908, i64 4526, ptr @.str.4909) unreachable ok7741: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 15 %t7 = load i64, ptr %a2 %t8 = load { ptr, i64, i64 }, ptr %t6 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 br i1 %t10, label %range7742, label %inrange7743 range7742: call void @finch_panic_index(ptr @.str.4910, i64 4526, i64 %t7, i64 %t9) unreachable inrange7743: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.FnSig, ptr %t11, i64 %t7 %t13 = load %S.gen.FnSig, ptr %t12 store %S.gen.FnSig %t13, ptr %a14 call void @finch.copy.S_gen_FnSig(ptr %a15, ptr %a14) %t16 = load %S.gen.FnSig, ptr %a15 store %S.gen.FnSig %t16, ptr %a17 %t18 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 0 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t19) store { ptr, i64, i64 } { ptr @.str.4911, i64 9, i64 0 }, ptr %a22 store { ptr, i64, i64 } %t20, ptr %a23 call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) store { ptr, i64, i64 } %t20, ptr %a24 call void @finch_str_drop(ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t25, ptr %a27 store { ptr, i64, i64 } { ptr @.str.4912, i64 1, i64 0 }, ptr %a28 call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) store { ptr, i64, i64 } %t25, ptr %a29 call void @finch_str_drop(ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a26 %t31 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 %t32 = load { ptr, i64, i64 }, ptr %t31 store { ptr, i64, i64 } %t30, ptr %a34 store { ptr, i64, i64 } %t32, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) store { ptr, i64, i64 } %t30, ptr %a36 call void @finch_str_drop(ptr %a36) %t37 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t37, ptr %a38 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null br i1 %t40, label %panic7744, label %ok7745 panic7744: call void @finch_panic(ptr @.str.4913, i64 4528, ptr @.str.4914) unreachable ok7745: %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 40 %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i32 0, i32 1 %t43 = load { ptr, i64, i64 }, ptr %a38 store { ptr, i64, i64 } { ptr @.str.4915, i64 2, i64 0 }, ptr %a45 store { ptr, i64, i64 } %t43, ptr %a46 call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a44 store i64 -1, ptr %a48 %t49 = load i64, ptr %t42 %t50 = load ptr, ptr %t41 store i64 0, ptr %a51 br label %find.cond7746 find.cond7746: %t52 = load i64, ptr %a51 %t53 = icmp slt i64 %t52, %t49 br i1 %t53, label %find.body7747, label %find.end7750 find.body7747: %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t52 %t55 = load { ptr, i64, i64 }, ptr %t54 store { ptr, i64, i64 } %t55, ptr %a56 store { ptr, i64, i64 } %t47, ptr %a57 %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) %t59 = icmp ne i32 %t58, 0 br i1 %t59, label %find.hit7748, label %find.next7749 find.hit7748: store i64 %t52, ptr %a48 br label %find.end7750 find.next7749: %t60 = add i64 %t52, 1 store i64 %t60, ptr %a51 br label %find.cond7746 find.end7750: store { ptr, i64, i64 } %t47, ptr %a61 call void @finch_str_drop(ptr %a61) %t62 = load i64, ptr %a48 %t63 = icmp sge i64 %t62, 0 br i1 %t63, label %then7751, label %endif7753 then7751: %t64 = load { ptr, i64, i64 }, ptr %a38 call void @finch.drop.S_gen_FnSig(ptr %a17) ret { ptr, i64, i64 } %t64 endif7753: %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null br i1 %t66, label %panic7754, label %ok7755 panic7754: call void @finch_panic(ptr @.str.4916, i64 4531, ptr @.str.4917) unreachable ok7755: %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 40 %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i32 0, i32 1 %t69 = load { ptr, i64, i64 }, ptr %a38 store { ptr, i64, i64 } { ptr @.str.4918, i64 2, i64 0 }, ptr %a71 store { ptr, i64, i64 } %t69, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a70 %t74 = load i64, ptr %t68 %t75 = add i64 %t74, 1 call void @finch_arr_reserve(ptr %t67, i64 %t75, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t76 = load ptr, ptr %t67 %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i64 %t74 store { ptr, i64, i64 } %t73, ptr %t77 store i64 %t75, ptr %t68 %t78 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 2 %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i32 0, i32 1 %t80 = load i64, ptr %t79 %t81 = icmp sgt i64 %t80, 0 br label %logic.from7756 logic.from7756: br i1 %t81, label %logic.end7758, label %logic.rhs7757 logic.rhs7757: %t82 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 9 %t83 = load i1, ptr %t82 br label %logic.rend7759 logic.rend7759: br label %logic.end7758 logic.end7758: %t84 = phi i1 [ true, %logic.from7756 ], [ %t83, %logic.rend7759 ] br i1 %t84, label %then7760, label %endif7762 then7760: %t85 = load ptr, ptr %a1 %t86 = load %S.ast.Node, ptr %a3 %t87 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 %t88 = load { ptr, i64, i64 }, ptr %t87 store { ptr, i64, i64 } { ptr @.str.4919, i64 5, i64 0 }, ptr %a90 store { ptr, i64, i64 } %t88, ptr %a91 call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) %t92 = load { ptr, i64, i64 }, ptr %a89 store { ptr, i64, i64 } %t92, ptr %a94 store { ptr, i64, i64 } { ptr @.str.4920, i64 81, i64 0 }, ptr %a95 call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) store { ptr, i64, i64 } %t92, ptr %a96 call void @finch_str_drop(ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a93 call void @finch.gen.fail(ptr %t85, %S.ast.Node %t86, { ptr, i64, i64 } %t97) store { ptr, i64, i64 } %t97, ptr %a98 call void @finch_str_drop(ptr %a98) br label %endif7762 endif7762: %t99 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 store i64 0, ptr %a100 br label %each.cond7763 each.cond7763: %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i32 0, i32 1 %t102 = load i64, ptr %t101 %t103 = load i64, ptr %a100 %t104 = icmp slt i64 %t103, %t102 br i1 %t104, label %each.body7764, label %each.end7766 each.body7764: %t105 = load ptr, ptr %t99 %t106 = getelementptr inbounds %S.ast.Type, ptr %t105, i64 %t103 %t107 = load %S.ast.Type, ptr %t106 store %S.ast.Type %t107, ptr %a108 %t109 = load %S.ast.Type, ptr %a108 %t110 = call i1 @finch.gen.isNumber(%S.ast.Type %t109) br label %logic.from7767 logic.from7767: br i1 %t110, label %logic.end7769, label %logic.rhs7768 logic.rhs7768: %t111 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 %t112 = load { ptr, i64, i64 }, ptr %t111 store { ptr, i64, i64 } %t112, ptr %a113 store { ptr, i64, i64 } { ptr @.str.4921, i64 4, i64 0 }, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 br label %logic.rend7770 logic.rend7770: br label %logic.end7769 logic.end7769: %t117 = phi i1 [ true, %logic.from7767 ], [ %t116, %logic.rend7770 ] br label %logic.from7771 logic.from7771: br i1 %t117, label %logic.end7773, label %logic.rhs7772 logic.rhs7772: %t118 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 %t119 = load { ptr, i64, i64 }, ptr %t118 store { ptr, i64, i64 } %t119, ptr %a120 store { ptr, i64, i64 } { ptr @.str.4922, i64 4, i64 0 }, ptr %a121 %t122 = call i32 @finch_str_eq(ptr %a120, ptr %a121) %t123 = icmp ne i32 %t122, 0 br label %logic.rend7774 logic.rend7774: br label %logic.end7773 logic.end7773: %t124 = phi i1 [ true, %logic.from7771 ], [ %t123, %logic.rend7774 ] br label %logic.from7775 logic.from7775: br i1 %t124, label %logic.end7777, label %logic.rhs7776 logic.rhs7776: %t125 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 %t126 = load { ptr, i64, i64 }, ptr %t125 store { ptr, i64, i64 } %t126, ptr %a127 store { ptr, i64, i64 } { ptr @.str.4923, i64 3, i64 0 }, ptr %a128 %t129 = call i32 @finch_str_eq(ptr %a127, ptr %a128) %t130 = icmp ne i32 %t129, 0 br label %logic.rend7778 logic.rend7778: br label %logic.end7777 logic.end7777: %t131 = phi i1 [ true, %logic.from7775 ], [ %t130, %logic.rend7778 ] br label %logic.from7779 logic.from7779: br i1 %t131, label %logic.end7781, label %logic.rhs7780 logic.rhs7780: %t132 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 %t133 = load { ptr, i64, i64 }, ptr %t132 store { ptr, i64, i64 } %t133, ptr %a134 store { ptr, i64, i64 } { ptr @.str.4924, i64 6, i64 0 }, ptr %a135 %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) %t137 = icmp ne i32 %t136, 0 br label %logic.from7782 logic.from7782: br i1 %t137, label %logic.rhs7783, label %logic.end7784 logic.rhs7783: %t138 = load ptr, ptr %a1 %t139 = icmp eq ptr %t138, null br i1 %t139, label %panic7785, label %ok7786 panic7785: call void @finch_panic(ptr @.str.4925, i64 4536, ptr @.str.4926) unreachable ok7786: %t140 = getelementptr inbounds %S.gen.Gen, ptr %t138, i32 0, i32 16 %t141 = load ptr, ptr %a1 %t142 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 3 %t143 = load { ptr, i64, i64 }, ptr %t142 %t144 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 2 %t145 = load { ptr, i64, i64 }, ptr %t144 %t146 = call i64 @finch.gen.findStruct(ptr %t141, { ptr, i64, i64 } %t143, { ptr, i64, i64 } %t145) %t147 = load { ptr, i64, i64 }, ptr %t140 %t148 = extractvalue { ptr, i64, i64 } %t147, 1 %t149 = icmp uge i64 %t146, %t148 br i1 %t149, label %range7787, label %inrange7788 range7787: call void @finch_panic_index(ptr @.str.4927, i64 4536, i64 %t146, i64 %t148) unreachable inrange7788: %t150 = extractvalue { ptr, i64, i64 } %t147, 0 %t151 = getelementptr inbounds %S.gen.StructDef, ptr %t150, i64 %t146 %t152 = getelementptr inbounds %S.gen.StructDef, ptr %t151, i32 0, i32 2 %t153 = load i1, ptr %t152 br label %logic.rend7789 logic.rend7789: br label %logic.end7784 logic.end7784: %t154 = phi i1 [ false, %logic.from7782 ], [ %t153, %logic.rend7789 ] br label %logic.rend7790 logic.rend7790: br label %logic.end7781 logic.end7781: %t155 = phi i1 [ true, %logic.from7779 ], [ %t154, %logic.rend7790 ] %t156 = xor i1 %t155, true br i1 %t156, label %then7791, label %endif7793 then7791: %t157 = load ptr, ptr %a1 %t158 = load %S.ast.Node, ptr %a3 %t159 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 %t160 = load { ptr, i64, i64 }, ptr %t159 store { ptr, i64, i64 } { ptr @.str.4928, i64 5, i64 0 }, ptr %a162 store { ptr, i64, i64 } %t160, ptr %a163 call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) %t164 = load { ptr, i64, i64 }, ptr %a161 store { ptr, i64, i64 } %t164, ptr %a166 store { ptr, i64, i64 } { ptr @.str.4929, i64 95, i64 0 }, ptr %a167 call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) store { ptr, i64, i64 } %t164, ptr %a168 call void @finch_str_drop(ptr %a168) %t169 = load { ptr, i64, i64 }, ptr %a165 %t170 = load %S.ast.Type, ptr %a108 %t171 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t170) store { ptr, i64, i64 } %t169, ptr %a173 store { ptr, i64, i64 } %t171, ptr %a174 call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174) store { ptr, i64, i64 } %t169, ptr %a175 call void @finch_str_drop(ptr %a175) store { ptr, i64, i64 } %t171, ptr %a176 call void @finch_str_drop(ptr %a176) %t177 = load { ptr, i64, i64 }, ptr %a172 call void @finch.gen.fail(ptr %t157, %S.ast.Node %t158, { ptr, i64, i64 } %t177) store { ptr, i64, i64 } %t177, ptr %a178 call void @finch_str_drop(ptr %a178) br label %endif7793 endif7793: br label %each.step7765 each.step7765: %t179 = load i64, ptr %a100 %t180 = add i64 %t179, 1 store i64 %t180, ptr %a100 br label %each.cond7763 each.end7766: %t181 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t182 = load %S.ast.Type, ptr %t181 %t183 = call i1 @finch.gen.isNumber(%S.ast.Type %t182) br label %logic.from7794 logic.from7794: br i1 %t183, label %logic.end7796, label %logic.rhs7795 logic.rhs7795: %t184 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t185 = getelementptr inbounds %S.ast.Type, ptr %t184, i32 0, i32 0 %t186 = load { ptr, i64, i64 }, ptr %t185 store { ptr, i64, i64 } %t186, ptr %a187 store { ptr, i64, i64 } { ptr @.str.4930, i64 4, i64 0 }, ptr %a188 %t189 = call i32 @finch_str_eq(ptr %a187, ptr %a188) %t190 = icmp ne i32 %t189, 0 br label %logic.rend7797 logic.rend7797: br label %logic.end7796 logic.end7796: %t191 = phi i1 [ true, %logic.from7794 ], [ %t190, %logic.rend7797 ] br label %logic.from7798 logic.from7798: br i1 %t191, label %logic.end7800, label %logic.rhs7799 logic.rhs7799: %t192 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t193 = getelementptr inbounds %S.ast.Type, ptr %t192, i32 0, i32 0 %t194 = load { ptr, i64, i64 }, ptr %t193 store { ptr, i64, i64 } %t194, ptr %a195 store { ptr, i64, i64 } { ptr @.str.4931, i64 4, i64 0 }, ptr %a196 %t197 = call i32 @finch_str_eq(ptr %a195, ptr %a196) %t198 = icmp ne i32 %t197, 0 br label %logic.rend7801 logic.rend7801: br label %logic.end7800 logic.end7800: %t199 = phi i1 [ true, %logic.from7798 ], [ %t198, %logic.rend7801 ] br label %logic.from7802 logic.from7802: br i1 %t199, label %logic.end7804, label %logic.rhs7803 logic.rhs7803: %t200 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t201 = getelementptr inbounds %S.ast.Type, ptr %t200, i32 0, i32 0 %t202 = load { ptr, i64, i64 }, ptr %t201 store { ptr, i64, i64 } %t202, ptr %a203 store { ptr, i64, i64 } { ptr @.str.4932, i64 3, i64 0 }, ptr %a204 %t205 = call i32 @finch_str_eq(ptr %a203, ptr %a204) %t206 = icmp ne i32 %t205, 0 br label %logic.rend7805 logic.rend7805: br label %logic.end7804 logic.end7804: %t207 = phi i1 [ true, %logic.from7802 ], [ %t206, %logic.rend7805 ] br label %logic.from7806 logic.from7806: br i1 %t207, label %logic.end7808, label %logic.rhs7807 logic.rhs7807: %t208 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t209 = getelementptr inbounds %S.ast.Type, ptr %t208, i32 0, i32 0 %t210 = load { ptr, i64, i64 }, ptr %t209 store { ptr, i64, i64 } %t210, ptr %a211 store { ptr, i64, i64 } { ptr @.str.4933, i64 4, i64 0 }, ptr %a212 %t213 = call i32 @finch_str_eq(ptr %a211, ptr %a212) %t214 = icmp ne i32 %t213, 0 br label %logic.rend7809 logic.rend7809: br label %logic.end7808 logic.end7808: %t215 = phi i1 [ true, %logic.from7806 ], [ %t214, %logic.rend7809 ] br label %logic.from7810 logic.from7810: br i1 %t215, label %logic.end7812, label %logic.rhs7811 logic.rhs7811: %t216 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t217 = getelementptr inbounds %S.ast.Type, ptr %t216, i32 0, i32 0 %t218 = load { ptr, i64, i64 }, ptr %t217 store { ptr, i64, i64 } %t218, ptr %a219 store { ptr, i64, i64 } { ptr @.str.4934, i64 6, i64 0 }, ptr %a220 %t221 = call i32 @finch_str_eq(ptr %a219, ptr %a220) %t222 = icmp ne i32 %t221, 0 br label %logic.from7813 logic.from7813: br i1 %t222, label %logic.rhs7814, label %logic.end7815 logic.rhs7814: %t223 = load ptr, ptr %a1 %t224 = icmp eq ptr %t223, null br i1 %t224, label %panic7816, label %ok7817 panic7816: call void @finch_panic(ptr @.str.4935, i64 4540, ptr @.str.4936) unreachable ok7817: %t225 = getelementptr inbounds %S.gen.Gen, ptr %t223, i32 0, i32 16 %t226 = load ptr, ptr %a1 %t227 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t228 = getelementptr inbounds %S.ast.Type, ptr %t227, i32 0, i32 3 %t229 = load { ptr, i64, i64 }, ptr %t228 %t230 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t231 = getelementptr inbounds %S.ast.Type, ptr %t230, i32 0, i32 2 %t232 = load { ptr, i64, i64 }, ptr %t231 %t233 = call i64 @finch.gen.findStruct(ptr %t226, { ptr, i64, i64 } %t229, { ptr, i64, i64 } %t232) %t234 = load { ptr, i64, i64 }, ptr %t225 %t235 = extractvalue { ptr, i64, i64 } %t234, 1 %t236 = icmp uge i64 %t233, %t235 br i1 %t236, label %range7818, label %inrange7819 range7818: call void @finch_panic_index(ptr @.str.4937, i64 4540, i64 %t233, i64 %t235) unreachable inrange7819: %t237 = extractvalue { ptr, i64, i64 } %t234, 0 %t238 = getelementptr inbounds %S.gen.StructDef, ptr %t237, i64 %t233 %t239 = getelementptr inbounds %S.gen.StructDef, ptr %t238, i32 0, i32 2 %t240 = load i1, ptr %t239 br label %logic.rend7820 logic.rend7820: br label %logic.end7815 logic.end7815: %t241 = phi i1 [ false, %logic.from7813 ], [ %t240, %logic.rend7820 ] br label %logic.rend7821 logic.rend7821: br label %logic.end7812 logic.end7812: %t242 = phi i1 [ true, %logic.from7810 ], [ %t241, %logic.rend7821 ] %t243 = xor i1 %t242, true br i1 %t243, label %then7822, label %endif7824 then7822: %t244 = load ptr, ptr %a1 %t245 = load %S.ast.Node, ptr %a3 %t246 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 %t247 = load { ptr, i64, i64 }, ptr %t246 store { ptr, i64, i64 } { ptr @.str.4938, i64 5, i64 0 }, ptr %a249 store { ptr, i64, i64 } %t247, ptr %a250 call void @finch_str_concat(ptr %a248, ptr %a249, ptr %a250) %t251 = load { ptr, i64, i64 }, ptr %a248 store { ptr, i64, i64 } %t251, ptr %a253 store { ptr, i64, i64 } { ptr @.str.4939, i64 38, i64 0 }, ptr %a254 call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) store { ptr, i64, i64 } %t251, ptr %a255 call void @finch_str_drop(ptr %a255) %t256 = load { ptr, i64, i64 }, ptr %a252 %t257 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t258 = load %S.ast.Type, ptr %t257 %t259 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t258) store { ptr, i64, i64 } %t256, ptr %a261 store { ptr, i64, i64 } %t259, ptr %a262 call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) store { ptr, i64, i64 } %t256, ptr %a263 call void @finch_str_drop(ptr %a263) store { ptr, i64, i64 } %t259, ptr %a264 call void @finch_str_drop(ptr %a264) %t265 = load { ptr, i64, i64 }, ptr %a260 call void @finch.gen.fail(ptr %t244, %S.ast.Node %t245, { ptr, i64, i64 } %t265) store { ptr, i64, i64 } %t265, ptr %a266 call void @finch_str_drop(ptr %a266) br label %endif7824 endif7824: %t267 = load ptr, ptr %a1 %t268 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t269 = load %S.ast.Type, ptr %t268 %t270 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 %t271 = load { ptr, i64, i64 }, ptr %t270 %t272 = call %S.gen.Plan @finch.gen.makePlan(ptr %t267, %S.ast.Type %t269, { ptr, i64, i64 } %t271) store %S.gen.Plan %t272, ptr %a273 %t274 = load ptr, ptr %a1 %t275 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t274) store %S.gen.Saved %t275, ptr %a276 store { ptr, i64, i64 } zeroinitializer, ptr %a277 store i64 0, ptr %a278 store { ptr, i64, i64 } { ptr @.str.4940, i64 0, i64 0 }, ptr %a279 %t280 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 3 %t281 = load i1, ptr %t280 br i1 %t281, label %then7825, label %endif7827 then7825: %t282 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 %t283 = load ptr, ptr %a1 %t284 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t285 = load %S.ast.Type, ptr %t284 %t286 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t283, %S.ast.Type %t285) store { ptr, i64, i64 } { ptr @.str.4941, i64 9, i64 0 }, ptr %a288 store { ptr, i64, i64 } %t286, ptr %a289 call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) store { ptr, i64, i64 } %t286, ptr %a290 call void @finch_str_drop(ptr %a290) %t291 = load { ptr, i64, i64 }, ptr %a287 store { ptr, i64, i64 } %t291, ptr %a293 store { ptr, i64, i64 } { ptr @.str.4942, i64 14, i64 0 }, ptr %a294 call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) store { ptr, i64, i64 } %t291, ptr %a295 call void @finch_str_drop(ptr %a295) %t296 = load { ptr, i64, i64 }, ptr %a292 %t297 = load i64, ptr %t282 %t298 = add i64 %t297, 1 call void @finch_arr_reserve(ptr %a277, i64 %t298, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t299 = load ptr, ptr %a277 %t300 = getelementptr inbounds { ptr, i64, i64 }, ptr %t299, i64 %t297 store { ptr, i64, i64 } %t296, ptr %t300 store i64 %t298, ptr %t282 %t301 = load { ptr, i64, i64 }, ptr %a279 store { ptr, i64, i64 } { ptr @.str.4943, i64 3, i64 0 }, ptr %a279 store { ptr, i64, i64 } %t301, ptr %a302 call void @finch_str_drop(ptr %a302) store i64 1, ptr %a278 br label %endif7827 endif7827: store { ptr, i64, i64 } zeroinitializer, ptr %a303 %t304 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 %t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %t304, i32 0, i32 1 %t306 = load i64, ptr %t305 store i64 0, ptr %a307 br label %for.cond7828 for.cond7828: %t308 = load i64, ptr %a307 %t309 = icmp slt i64 %t308, %t306 br i1 %t309, label %for.body7829, label %for.end7831 for.body7829: %t310 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 %t311 = load i64, ptr %a307 %t312 = load { ptr, i64, i64 }, ptr %t310 %t313 = extractvalue { ptr, i64, i64 } %t312, 1 %t314 = icmp uge i64 %t311, %t313 br i1 %t314, label %range7832, label %inrange7833 range7832: call void @finch_panic_index(ptr @.str.4944, i64 4555, i64 %t311, i64 %t313) unreachable inrange7833: %t315 = extractvalue { ptr, i64, i64 } %t312, 0 %t316 = getelementptr inbounds %S.ast.Type, ptr %t315, i64 %t311 %t317 = load %S.ast.Type, ptr %t316 store %S.ast.Type %t317, ptr %a318 call void @finch.copy.S_ast_Type(ptr %a319, ptr %a318) %t320 = load %S.ast.Type, ptr %a319 store %S.ast.Type %t320, ptr %a321 %t322 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 1 %t323 = load i64, ptr %a307 %t324 = load { ptr, i64, i64 }, ptr %t322 %t325 = extractvalue { ptr, i64, i64 } %t324, 1 %t326 = icmp uge i64 %t323, %t325 br i1 %t326, label %range7834, label %inrange7835 range7834: call void @finch_panic_index(ptr @.str.4945, i64 4556, i64 %t323, i64 %t325) unreachable inrange7835: %t327 = extractvalue { ptr, i64, i64 } %t324, 0 %t328 = getelementptr inbounds %S.gen.Abi, ptr %t327, i64 %t323 %t329 = load %S.gen.Abi, ptr %t328 store %S.gen.Abi %t329, ptr %a330 call void @finch.copy.S_gen_Abi(ptr %a331, ptr %a330) %t332 = load %S.gen.Abi, ptr %a331 store %S.gen.Abi %t332, ptr %a333 %t334 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 0 %t335 = load { ptr, i64, i64 }, ptr %t334 store { ptr, i64, i64 } %t335, ptr %a336 store { ptr, i64, i64 } { ptr @.str.4946, i64 6, i64 0 }, ptr %a337 %t338 = call i32 @finch_str_eq(ptr %a336, ptr %a337) %t339 = icmp ne i32 %t338, 0 br i1 %t339, label %then7836, label %else7837 then7836: %t340 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 %t341 = load ptr, ptr %a1 %t342 = load %S.ast.Type, ptr %a321 %t343 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t341, %S.ast.Type %t342) store { ptr, i64, i64 } { ptr @.str.4947, i64 10, i64 0 }, ptr %a345 store { ptr, i64, i64 } %t343, ptr %a346 call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) store { ptr, i64, i64 } %t343, ptr %a347 call void @finch_str_drop(ptr %a347) %t348 = load { ptr, i64, i64 }, ptr %a344 store { ptr, i64, i64 } %t348, ptr %a350 store { ptr, i64, i64 } { ptr @.str.4948, i64 8, i64 0 }, ptr %a351 call void @finch_str_concat(ptr %a349, ptr %a350, ptr %a351) store { ptr, i64, i64 } %t348, ptr %a352 call void @finch_str_drop(ptr %a352) %t353 = load { ptr, i64, i64 }, ptr %a349 %t354 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 3 %t355 = load i64, ptr %t354 call void @finch_str_from_int(ptr %a356, i64 %t355) %t357 = load { ptr, i64, i64 }, ptr %a356 store { ptr, i64, i64 } %t353, ptr %a359 store { ptr, i64, i64 } %t357, ptr %a360 call void @finch_str_concat(ptr %a358, ptr %a359, ptr %a360) store { ptr, i64, i64 } %t353, ptr %a361 call void @finch_str_drop(ptr %a361) store { ptr, i64, i64 } %t357, ptr %a362 call void @finch_str_drop(ptr %a362) %t363 = load { ptr, i64, i64 }, ptr %a358 store { ptr, i64, i64 } %t363, ptr %a365 store { ptr, i64, i64 } { ptr @.str.4949, i64 3, i64 0 }, ptr %a366 call void @finch_str_concat(ptr %a364, ptr %a365, ptr %a366) store { ptr, i64, i64 } %t363, ptr %a367 call void @finch_str_drop(ptr %a367) %t368 = load { ptr, i64, i64 }, ptr %a364 %t369 = load i64, ptr %a278 call void @finch_str_from_int(ptr %a370, i64 %t369) %t371 = load { ptr, i64, i64 }, ptr %a370 store { ptr, i64, i64 } %t368, ptr %a373 store { ptr, i64, i64 } %t371, ptr %a374 call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) store { ptr, i64, i64 } %t368, ptr %a375 call void @finch_str_drop(ptr %a375) store { ptr, i64, i64 } %t371, ptr %a376 call void @finch_str_drop(ptr %a376) %t377 = load { ptr, i64, i64 }, ptr %a372 %t378 = load i64, ptr %t340 %t379 = add i64 %t378, 1 call void @finch_arr_reserve(ptr %a277, i64 %t379, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t380 = load ptr, ptr %a277 %t381 = getelementptr inbounds { ptr, i64, i64 }, ptr %t380, i64 %t378 store { ptr, i64, i64 } %t377, ptr %t381 store i64 %t379, ptr %t340 %t382 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 %t383 = load ptr, ptr %a1 %t384 = load %S.ast.Type, ptr %a321 %t385 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t383, %S.ast.Type %t384) store { ptr, i64, i64 } %t385, ptr %a387 store { ptr, i64, i64 } { ptr @.str.4950, i64 1, i64 0 }, ptr %a388 call void @finch_str_concat(ptr %a386, ptr %a387, ptr %a388) store { ptr, i64, i64 } %t385, ptr %a389 call void @finch_str_drop(ptr %a389) %t390 = load { ptr, i64, i64 }, ptr %a386 %t391 = load ptr, ptr %a1 %t392 = load ptr, ptr %a1 %t393 = load %S.ast.Type, ptr %a321 %t394 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t392, %S.ast.Type %t393) %t395 = load i64, ptr %a278 call void @finch_str_from_int(ptr %a396, i64 %t395) %t397 = load { ptr, i64, i64 }, ptr %a396 store { ptr, i64, i64 } { ptr @.str.4951, i64 2, i64 0 }, ptr %a399 store { ptr, i64, i64 } %t397, ptr %a400 call void @finch_str_concat(ptr %a398, ptr %a399, ptr %a400) store { ptr, i64, i64 } %t397, ptr %a401 call void @finch_str_drop(ptr %a401) %t402 = load { ptr, i64, i64 }, ptr %a398 %t403 = call { ptr, i64, i64 } @finch.gen.load(ptr %t391, { ptr, i64, i64 } %t394, { ptr, i64, i64 } %t402) store { ptr, i64, i64 } %t394, ptr %a404 call void @finch_str_drop(ptr %a404) store { ptr, i64, i64 } %t402, ptr %a405 call void @finch_str_drop(ptr %a405) store { ptr, i64, i64 } %t390, ptr %a407 store { ptr, i64, i64 } %t403, ptr %a408 call void @finch_str_concat(ptr %a406, ptr %a407, ptr %a408) store { ptr, i64, i64 } %t390, ptr %a409 call void @finch_str_drop(ptr %a409) store { ptr, i64, i64 } %t403, ptr %a410 call void @finch_str_drop(ptr %a410) %t411 = load { ptr, i64, i64 }, ptr %a406 %t412 = load i64, ptr %t382 %t413 = add i64 %t412, 1 call void @finch_arr_reserve(ptr %a303, i64 %t413, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t414 = load ptr, ptr %a303 %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %t414, i64 %t412 store { ptr, i64, i64 } %t411, ptr %t415 store i64 %t413, ptr %t382 %t416 = load i64, ptr %a278 %t417 = add i64 %t416, 1 store i64 %t417, ptr %a278 br label %endif7838 else7837: %t418 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 0 %t419 = load { ptr, i64, i64 }, ptr %t418 store { ptr, i64, i64 } %t419, ptr %a420 store { ptr, i64, i64 } { ptr @.str.4952, i64 8, i64 0 }, ptr %a421 %t422 = call i32 @finch_str_eq(ptr %a420, ptr %a421) %t423 = icmp ne i32 %t422, 0 br i1 %t423, label %then7839, label %else7840 then7839: %t424 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 %t425 = load i64, ptr %a278 call void @finch_str_from_int(ptr %a426, i64 %t425) %t427 = load { ptr, i64, i64 }, ptr %a426 store { ptr, i64, i64 } { ptr @.str.4953, i64 6, i64 0 }, ptr %a429 store { ptr, i64, i64 } %t427, ptr %a430 call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430) store { ptr, i64, i64 } %t427, ptr %a431 call void @finch_str_drop(ptr %a431) %t432 = load { ptr, i64, i64 }, ptr %a428 %t433 = load i64, ptr %t424 %t434 = add i64 %t433, 1 call void @finch_arr_reserve(ptr %a277, i64 %t434, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t435 = load ptr, ptr %a277 %t436 = getelementptr inbounds { ptr, i64, i64 }, ptr %t435, i64 %t433 store { ptr, i64, i64 } %t432, ptr %t436 store i64 %t434, ptr %t424 %t437 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 %t438 = load ptr, ptr %a1 %t439 = load %S.ast.Type, ptr %a321 %t440 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t438, %S.ast.Type %t439) store { ptr, i64, i64 } %t440, ptr %a442 store { ptr, i64, i64 } { ptr @.str.4954, i64 1, i64 0 }, ptr %a443 call void @finch_str_concat(ptr %a441, ptr %a442, ptr %a443) store { ptr, i64, i64 } %t440, ptr %a444 call void @finch_str_drop(ptr %a444) %t445 = load { ptr, i64, i64 }, ptr %a441 %t446 = load ptr, ptr %a1 %t447 = load ptr, ptr %a1 %t448 = load %S.ast.Type, ptr %a321 %t449 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t447, %S.ast.Type %t448) %t450 = load i64, ptr %a278 call void @finch_str_from_int(ptr %a451, i64 %t450) %t452 = load { ptr, i64, i64 }, ptr %a451 store { ptr, i64, i64 } { ptr @.str.4955, i64 2, i64 0 }, ptr %a454 store { ptr, i64, i64 } %t452, ptr %a455 call void @finch_str_concat(ptr %a453, ptr %a454, ptr %a455) store { ptr, i64, i64 } %t452, ptr %a456 call void @finch_str_drop(ptr %a456) %t457 = load { ptr, i64, i64 }, ptr %a453 %t458 = call { ptr, i64, i64 } @finch.gen.load(ptr %t446, { ptr, i64, i64 } %t449, { ptr, i64, i64 } %t457) store { ptr, i64, i64 } %t449, ptr %a459 call void @finch_str_drop(ptr %a459) store { ptr, i64, i64 } %t457, ptr %a460 call void @finch_str_drop(ptr %a460) store { ptr, i64, i64 } %t445, ptr %a462 store { ptr, i64, i64 } %t458, ptr %a463 call void @finch_str_concat(ptr %a461, ptr %a462, ptr %a463) store { ptr, i64, i64 } %t445, ptr %a464 call void @finch_str_drop(ptr %a464) store { ptr, i64, i64 } %t458, ptr %a465 call void @finch_str_drop(ptr %a465) %t466 = load { ptr, i64, i64 }, ptr %a461 %t467 = load i64, ptr %t437 %t468 = add i64 %t467, 1 call void @finch_arr_reserve(ptr %a303, i64 %t468, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t469 = load ptr, ptr %a303 %t470 = getelementptr inbounds { ptr, i64, i64 }, ptr %t469, i64 %t467 store { ptr, i64, i64 } %t466, ptr %t470 store i64 %t468, ptr %t437 %t471 = load i64, ptr %a278 %t472 = add i64 %t471, 1 store i64 %t472, ptr %a278 br label %endif7841 else7840: %t473 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 0 %t474 = load { ptr, i64, i64 }, ptr %t473 store { ptr, i64, i64 } %t474, ptr %a475 store { ptr, i64, i64 } { ptr @.str.4956, i64 6, i64 0 }, ptr %a476 %t477 = call i32 @finch_str_eq(ptr %a475, ptr %a476) %t478 = icmp ne i32 %t477, 0 br i1 %t478, label %then7842, label %else7843 then7842: %t479 = load ptr, ptr %a1 %t480 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t479, { ptr, i64, i64 } { ptr @.str.4957, i64 9, i64 0 }) store { ptr, i64, i64 } %t480, ptr %a481 %t482 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 1 %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i32 0, i32 1 %t484 = load i64, ptr %t483 store i64 0, ptr %a485 br label %for.cond7845 for.cond7845: %t486 = load i64, ptr %a485 %t487 = icmp slt i64 %t486, %t484 br i1 %t487, label %for.body7846, label %for.end7848 for.body7846: %t488 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 %t489 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 1 %t490 = load i64, ptr %a485 %t491 = load { ptr, i64, i64 }, ptr %t489 %t492 = extractvalue { ptr, i64, i64 } %t491, 1 %t493 = icmp uge i64 %t490, %t492 br i1 %t493, label %range7849, label %inrange7850 range7849: call void @finch_panic_index(ptr @.str.4958, i64 4568, i64 %t490, i64 %t492) unreachable inrange7850: %t494 = extractvalue { ptr, i64, i64 } %t491, 0 %t495 = getelementptr inbounds { ptr, i64, i64 }, ptr %t494, i64 %t490 %t496 = load { ptr, i64, i64 }, ptr %t495 store { ptr, i64, i64 } %t496, ptr %a498 store { ptr, i64, i64 } { ptr @.str.4959, i64 3, i64 0 }, ptr %a499 call void @finch_str_concat(ptr %a497, ptr %a498, ptr %a499) %t500 = load { ptr, i64, i64 }, ptr %a497 %t501 = load i64, ptr %a278 call void @finch_str_from_int(ptr %a502, i64 %t501) %t503 = load { ptr, i64, i64 }, ptr %a502 store { ptr, i64, i64 } %t500, ptr %a505 store { ptr, i64, i64 } %t503, ptr %a506 call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506) store { ptr, i64, i64 } %t500, ptr %a507 call void @finch_str_drop(ptr %a507) store { ptr, i64, i64 } %t503, ptr %a508 call void @finch_str_drop(ptr %a508) %t509 = load { ptr, i64, i64 }, ptr %a504 %t510 = load i64, ptr %t488 %t511 = add i64 %t510, 1 call void @finch_arr_reserve(ptr %a277, i64 %t511, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t512 = load ptr, ptr %a277 %t513 = getelementptr inbounds { ptr, i64, i64 }, ptr %t512, i64 %t510 store { ptr, i64, i64 } %t509, ptr %t513 store i64 %t511, ptr %t488 %t514 = load ptr, ptr %a1 %t515 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 1 %t516 = load i64, ptr %a485 %t517 = load { ptr, i64, i64 }, ptr %t515 %t518 = extractvalue { ptr, i64, i64 } %t517, 1 %t519 = icmp uge i64 %t516, %t518 br i1 %t519, label %range7851, label %inrange7852 range7851: call void @finch_panic_index(ptr @.str.4960, i64 4569, i64 %t516, i64 %t518) unreachable inrange7852: %t520 = extractvalue { ptr, i64, i64 } %t517, 0 %t521 = getelementptr inbounds { ptr, i64, i64 }, ptr %t520, i64 %t516 %t522 = load { ptr, i64, i64 }, ptr %t521 %t523 = load i64, ptr %a278 call void @finch_str_from_int(ptr %a524, i64 %t523) %t525 = load { ptr, i64, i64 }, ptr %a524 store { ptr, i64, i64 } { ptr @.str.4961, i64 2, i64 0 }, ptr %a527 store { ptr, i64, i64 } %t525, ptr %a528 call void @finch_str_concat(ptr %a526, ptr %a527, ptr %a528) store { ptr, i64, i64 } %t525, ptr %a529 call void @finch_str_drop(ptr %a529) %t530 = load { ptr, i64, i64 }, ptr %a526 %t531 = load ptr, ptr %a1 %t532 = load { ptr, i64, i64 }, ptr %a481 store { ptr, i64, i64 } { ptr @.str.4962, i64 31, i64 0 }, ptr %a534 store { ptr, i64, i64 } %t532, ptr %a535 call void @finch_str_concat(ptr %a533, ptr %a534, ptr %a535) %t536 = load { ptr, i64, i64 }, ptr %a533 store { ptr, i64, i64 } %t536, ptr %a538 store { ptr, i64, i64 } { ptr @.str.4963, i64 6, i64 0 }, ptr %a539 call void @finch_str_concat(ptr %a537, ptr %a538, ptr %a539) store { ptr, i64, i64 } %t536, ptr %a540 call void @finch_str_drop(ptr %a540) %t541 = load { ptr, i64, i64 }, ptr %a537 %t542 = load i64, ptr %a485 %t543 = mul i64 8, %t542 call void @finch_str_from_int(ptr %a544, i64 %t543) %t545 = load { ptr, i64, i64 }, ptr %a544 store { ptr, i64, i64 } %t541, ptr %a547 store { ptr, i64, i64 } %t545, ptr %a548 call void @finch_str_concat(ptr %a546, ptr %a547, ptr %a548) store { ptr, i64, i64 } %t541, ptr %a549 call void @finch_str_drop(ptr %a549) store { ptr, i64, i64 } %t545, ptr %a550 call void @finch_str_drop(ptr %a550) %t551 = load { ptr, i64, i64 }, ptr %a546 %t552 = call { ptr, i64, i64 } @finch.gen.op(ptr %t531, { ptr, i64, i64 } %t551) store { ptr, i64, i64 } %t551, ptr %a553 call void @finch_str_drop(ptr %a553) call void @finch.gen.store(ptr %t514, { ptr, i64, i64 } %t522, { ptr, i64, i64 } %t530, { ptr, i64, i64 } %t552) store { ptr, i64, i64 } %t530, ptr %a554 call void @finch_str_drop(ptr %a554) store { ptr, i64, i64 } %t552, ptr %a555 call void @finch_str_drop(ptr %a555) %t556 = load i64, ptr %a278 %t557 = add i64 %t556, 1 store i64 %t557, ptr %a278 br label %for.step7847 for.step7847: %t558 = load i64, ptr %a485 %t559 = add i64 %t558, 1 store i64 %t559, ptr %a485 br label %for.cond7845 for.end7848: %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 %t561 = load ptr, ptr %a1 %t562 = load %S.ast.Type, ptr %a321 %t563 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t561, %S.ast.Type %t562) store { ptr, i64, i64 } %t563, ptr %a565 store { ptr, i64, i64 } { ptr @.str.4964, i64 1, i64 0 }, ptr %a566 call void @finch_str_concat(ptr %a564, ptr %a565, ptr %a566) store { ptr, i64, i64 } %t563, ptr %a567 call void @finch_str_drop(ptr %a567) %t568 = load { ptr, i64, i64 }, ptr %a564 %t569 = load ptr, ptr %a1 %t570 = load ptr, ptr %a1 %t571 = load %S.ast.Type, ptr %a321 %t572 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t570, %S.ast.Type %t571) %t573 = load { ptr, i64, i64 }, ptr %a481 %t574 = call { ptr, i64, i64 } @finch.gen.load(ptr %t569, { ptr, i64, i64 } %t572, { ptr, i64, i64 } %t573) store { ptr, i64, i64 } %t572, ptr %a575 call void @finch_str_drop(ptr %a575) store { ptr, i64, i64 } %t568, ptr %a577 store { ptr, i64, i64 } %t574, ptr %a578 call void @finch_str_concat(ptr %a576, ptr %a577, ptr %a578) store { ptr, i64, i64 } %t568, ptr %a579 call void @finch_str_drop(ptr %a579) store { ptr, i64, i64 } %t574, ptr %a580 call void @finch_str_drop(ptr %a580) %t581 = load { ptr, i64, i64 }, ptr %a576 %t582 = load i64, ptr %t560 %t583 = add i64 %t582, 1 call void @finch_arr_reserve(ptr %a303, i64 %t583, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t584 = load ptr, ptr %a303 %t585 = getelementptr inbounds { ptr, i64, i64 }, ptr %t584, i64 %t582 store { ptr, i64, i64 } %t581, ptr %t585 store i64 %t583, ptr %t560 call void @finch_str_drop(ptr %a481) br label %endif7844 else7843: %t586 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 %t587 = load ptr, ptr %a1 %t588 = load %S.ast.Type, ptr %a321 %t589 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t587, %S.ast.Type %t588) %t590 = load ptr, ptr %a1 %t591 = load %S.ast.Type, ptr %a321 %t592 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t590, %S.ast.Type %t591) store { ptr, i64, i64 } %t589, ptr %a594 store { ptr, i64, i64 } %t592, ptr %a595 call void @finch_str_concat(ptr %a593, ptr %a594, ptr %a595) store { ptr, i64, i64 } %t589, ptr %a596 call void @finch_str_drop(ptr %a596) store { ptr, i64, i64 } %t592, ptr %a597 call void @finch_str_drop(ptr %a597) %t598 = load { ptr, i64, i64 }, ptr %a593 store { ptr, i64, i64 } %t598, ptr %a600 store { ptr, i64, i64 } { ptr @.str.4965, i64 3, i64 0 }, ptr %a601 call void @finch_str_concat(ptr %a599, ptr %a600, ptr %a601) store { ptr, i64, i64 } %t598, ptr %a602 call void @finch_str_drop(ptr %a602) %t603 = load { ptr, i64, i64 }, ptr %a599 %t604 = load i64, ptr %a278 call void @finch_str_from_int(ptr %a605, i64 %t604) %t606 = load { ptr, i64, i64 }, ptr %a605 store { ptr, i64, i64 } %t603, ptr %a608 store { ptr, i64, i64 } %t606, ptr %a609 call void @finch_str_concat(ptr %a607, ptr %a608, ptr %a609) store { ptr, i64, i64 } %t603, ptr %a610 call void @finch_str_drop(ptr %a610) store { ptr, i64, i64 } %t606, ptr %a611 call void @finch_str_drop(ptr %a611) %t612 = load { ptr, i64, i64 }, ptr %a607 %t613 = load i64, ptr %t586 %t614 = add i64 %t613, 1 call void @finch_arr_reserve(ptr %a277, i64 %t614, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t615 = load ptr, ptr %a277 %t616 = getelementptr inbounds { ptr, i64, i64 }, ptr %t615, i64 %t613 store { ptr, i64, i64 } %t612, ptr %t616 store i64 %t614, ptr %t586 %t617 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 %t618 = load ptr, ptr %a1 %t619 = load %S.ast.Type, ptr %a321 %t620 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t618, %S.ast.Type %t619) store { ptr, i64, i64 } %t620, ptr %a622 store { ptr, i64, i64 } { ptr @.str.4966, i64 3, i64 0 }, ptr %a623 call void @finch_str_concat(ptr %a621, ptr %a622, ptr %a623) store { ptr, i64, i64 } %t620, ptr %a624 call void @finch_str_drop(ptr %a624) %t625 = load { ptr, i64, i64 }, ptr %a621 %t626 = load i64, ptr %a278 call void @finch_str_from_int(ptr %a627, i64 %t626) %t628 = load { ptr, i64, i64 }, ptr %a627 store { ptr, i64, i64 } %t625, ptr %a630 store { ptr, i64, i64 } %t628, ptr %a631 call void @finch_str_concat(ptr %a629, ptr %a630, ptr %a631) store { ptr, i64, i64 } %t625, ptr %a632 call void @finch_str_drop(ptr %a632) store { ptr, i64, i64 } %t628, ptr %a633 call void @finch_str_drop(ptr %a633) %t634 = load { ptr, i64, i64 }, ptr %a629 %t635 = load i64, ptr %t617 %t636 = add i64 %t635, 1 call void @finch_arr_reserve(ptr %a303, i64 %t636, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t637 = load ptr, ptr %a303 %t638 = getelementptr inbounds { ptr, i64, i64 }, ptr %t637, i64 %t635 store { ptr, i64, i64 } %t634, ptr %t638 store i64 %t636, ptr %t617 %t639 = load i64, ptr %a278 %t640 = add i64 %t639, 1 store i64 %t640, ptr %a278 br label %endif7844 endif7844: br label %endif7841 endif7841: br label %endif7838 endif7838: call void @finch.drop.S_gen_Abi(ptr %a333) call void @finch.drop.S_ast_Type(ptr %a321) br label %for.step7830 for.step7830: %t641 = load i64, ptr %a307 %t642 = add i64 %t641, 1 store i64 %t642, ptr %a307 br label %for.cond7828 for.end7831: %t643 = load ptr, ptr %a1 %t644 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t645 = load %S.ast.Type, ptr %t644 %t646 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t643, %S.ast.Type %t645) store { ptr, i64, i64 } { ptr @.str.4967, i64 5, i64 0 }, ptr %a648 store { ptr, i64, i64 } %t646, ptr %a649 call void @finch_str_concat(ptr %a647, ptr %a648, ptr %a649) store { ptr, i64, i64 } %t646, ptr %a650 call void @finch_str_drop(ptr %a650) %t651 = load { ptr, i64, i64 }, ptr %a647 store { ptr, i64, i64 } %t651, ptr %a653 store { ptr, i64, i64 } { ptr @.str.4968, i64 1, i64 0 }, ptr %a654 call void @finch_str_concat(ptr %a652, ptr %a653, ptr %a654) store { ptr, i64, i64 } %t651, ptr %a655 call void @finch_str_drop(ptr %a655) %t656 = load { ptr, i64, i64 }, ptr %a652 %t657 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 11 %t658 = load { ptr, i64, i64 }, ptr %t657 store { ptr, i64, i64 } %t656, ptr %a660 store { ptr, i64, i64 } %t658, ptr %a661 call void @finch_str_concat(ptr %a659, ptr %a660, ptr %a661) store { ptr, i64, i64 } %t656, ptr %a662 call void @finch_str_drop(ptr %a662) %t663 = load { ptr, i64, i64 }, ptr %a659 store { ptr, i64, i64 } %t663, ptr %a665 store { ptr, i64, i64 } { ptr @.str.4969, i64 1, i64 0 }, ptr %a666 call void @finch_str_concat(ptr %a664, ptr %a665, ptr %a666) store { ptr, i64, i64 } %t663, ptr %a667 call void @finch_str_drop(ptr %a667) %t668 = load { ptr, i64, i64 }, ptr %a664 %t669 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4970, i64 2, i64 0 }, ptr %a670 call void @finch_str_join(ptr %a671, ptr %a303, ptr %a670) %t672 = load { ptr, i64, i64 }, ptr %a671 store { ptr, i64, i64 } %t668, ptr %a674 store { ptr, i64, i64 } %t672, ptr %a675 call void @finch_str_concat(ptr %a673, ptr %a674, ptr %a675) store { ptr, i64, i64 } %t668, ptr %a676 call void @finch_str_drop(ptr %a676) store { ptr, i64, i64 } %t672, ptr %a677 call void @finch_str_drop(ptr %a677) %t678 = load { ptr, i64, i64 }, ptr %a673 store { ptr, i64, i64 } %t678, ptr %a680 store { ptr, i64, i64 } { ptr @.str.4971, i64 1, i64 0 }, ptr %a681 call void @finch_str_concat(ptr %a679, ptr %a680, ptr %a681) store { ptr, i64, i64 } %t678, ptr %a682 call void @finch_str_drop(ptr %a682) %t683 = load { ptr, i64, i64 }, ptr %a679 store { ptr, i64, i64 } %t683, ptr %a684 store { ptr, i64, i64 } { ptr @.str.4972, i64 0, i64 0 }, ptr %a685 %t686 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t687 = getelementptr inbounds %S.ast.Type, ptr %t686, i32 0, i32 0 %t688 = load { ptr, i64, i64 }, ptr %t687 store { ptr, i64, i64 } %t688, ptr %a689 store { ptr, i64, i64 } { ptr @.str.4973, i64 4, i64 0 }, ptr %a690 %t691 = call i32 @finch_str_eq(ptr %a689, ptr %a690) %t692 = icmp ne i32 %t691, 0 br i1 %t692, label %then7853, label %else7854 then7853: %t693 = load ptr, ptr %a1 %t694 = load { ptr, i64, i64 }, ptr %a684 call void @finch.gen.emit(ptr %t693, { ptr, i64, i64 } %t694) %t695 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t695, { ptr, i64, i64 } { ptr @.str.4974, i64 8, i64 0 }) br label %endif7855 else7854: %t696 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 3 %t697 = load i1, ptr %t696 br i1 %t697, label %then7856, label %else7857 then7856: %t698 = load ptr, ptr %a1 %t699 = load ptr, ptr %a1 %t700 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t701 = load %S.ast.Type, ptr %t700 %t702 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t699, %S.ast.Type %t701) %t703 = load ptr, ptr %a1 %t704 = load { ptr, i64, i64 }, ptr %a684 %t705 = call { ptr, i64, i64 } @finch.gen.op(ptr %t703, { ptr, i64, i64 } %t704) %t706 = load { ptr, i64, i64 }, ptr %a279 call void @finch.gen.store(ptr %t698, { ptr, i64, i64 } %t702, { ptr, i64, i64 } %t705, { ptr, i64, i64 } %t706) store { ptr, i64, i64 } %t702, ptr %a707 call void @finch_str_drop(ptr %a707) store { ptr, i64, i64 } %t705, ptr %a708 call void @finch_str_drop(ptr %a708) %t709 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t709, { ptr, i64, i64 } { ptr @.str.4975, i64 8, i64 0 }) br label %endif7858 else7857: %t710 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 0 %t711 = getelementptr inbounds %S.gen.Abi, ptr %t710, i32 0, i32 0 %t712 = load { ptr, i64, i64 }, ptr %t711 store { ptr, i64, i64 } %t712, ptr %a713 store { ptr, i64, i64 } { ptr @.str.4976, i64 6, i64 0 }, ptr %a714 %t715 = call i32 @finch_str_eq(ptr %a713, ptr %a714) %t716 = icmp ne i32 %t715, 0 br i1 %t716, label %then7859, label %else7860 then7859: %t717 = load ptr, ptr %a1 %t718 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t717, { ptr, i64, i64 } { ptr @.str.4977, i64 9, i64 0 }) store { ptr, i64, i64 } %t718, ptr %a719 %t720 = load ptr, ptr %a1 %t721 = load ptr, ptr %a1 %t722 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t723 = load %S.ast.Type, ptr %t722 %t724 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t721, %S.ast.Type %t723) %t725 = load ptr, ptr %a1 %t726 = load { ptr, i64, i64 }, ptr %a684 %t727 = call { ptr, i64, i64 } @finch.gen.op(ptr %t725, { ptr, i64, i64 } %t726) %t728 = load { ptr, i64, i64 }, ptr %a719 call void @finch.gen.store(ptr %t720, { ptr, i64, i64 } %t724, { ptr, i64, i64 } %t727, { ptr, i64, i64 } %t728) store { ptr, i64, i64 } %t724, ptr %a729 call void @finch_str_drop(ptr %a729) store { ptr, i64, i64 } %t727, ptr %a730 call void @finch_str_drop(ptr %a730) %t731 = load ptr, ptr %a1 %t732 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 0 %t733 = getelementptr inbounds %S.gen.Abi, ptr %t732, i32 0, i32 2 %t734 = load { ptr, i64, i64 }, ptr %t733 store { ptr, i64, i64 } { ptr @.str.4978, i64 4, i64 0 }, ptr %a736 store { ptr, i64, i64 } %t734, ptr %a737 call void @finch_str_concat(ptr %a735, ptr %a736, ptr %a737) %t738 = load { ptr, i64, i64 }, ptr %a735 store { ptr, i64, i64 } %t738, ptr %a740 store { ptr, i64, i64 } { ptr @.str.4979, i64 1, i64 0 }, ptr %a741 call void @finch_str_concat(ptr %a739, ptr %a740, ptr %a741) store { ptr, i64, i64 } %t738, ptr %a742 call void @finch_str_drop(ptr %a742) %t743 = load { ptr, i64, i64 }, ptr %a739 %t744 = load ptr, ptr %a1 %t745 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 0 %t746 = getelementptr inbounds %S.gen.Abi, ptr %t745, i32 0, i32 2 %t747 = load { ptr, i64, i64 }, ptr %t746 %t748 = load { ptr, i64, i64 }, ptr %a719 %t749 = call { ptr, i64, i64 } @finch.gen.load(ptr %t744, { ptr, i64, i64 } %t747, { ptr, i64, i64 } %t748) store { ptr, i64, i64 } %t743, ptr %a751 store { ptr, i64, i64 } %t749, ptr %a752 call void @finch_str_concat(ptr %a750, ptr %a751, ptr %a752) store { ptr, i64, i64 } %t743, ptr %a753 call void @finch_str_drop(ptr %a753) store { ptr, i64, i64 } %t749, ptr %a754 call void @finch_str_drop(ptr %a754) %t755 = load { ptr, i64, i64 }, ptr %a750 call void @finch.gen.emit(ptr %t731, { ptr, i64, i64 } %t755) store { ptr, i64, i64 } %t755, ptr %a756 call void @finch_str_drop(ptr %a756) call void @finch_str_drop(ptr %a719) br label %endif7861 else7860: %t757 = load ptr, ptr %a1 %t758 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t759 = load %S.ast.Type, ptr %t758 %t760 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t757, %S.ast.Type %t759) %t761 = load { ptr, i64, i64 }, ptr %a685 store { ptr, i64, i64 } %t760, ptr %a685 store { ptr, i64, i64 } %t761, ptr %a762 call void @finch_str_drop(ptr %a762) %t763 = load ptr, ptr %a1 %t764 = load ptr, ptr %a1 %t765 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t766 = load %S.ast.Type, ptr %t765 %t767 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t764, %S.ast.Type %t766) store { ptr, i64, i64 } { ptr @.str.4980, i64 4, i64 0 }, ptr %a769 store { ptr, i64, i64 } %t767, ptr %a770 call void @finch_str_concat(ptr %a768, ptr %a769, ptr %a770) store { ptr, i64, i64 } %t767, ptr %a771 call void @finch_str_drop(ptr %a771) %t772 = load { ptr, i64, i64 }, ptr %a768 store { ptr, i64, i64 } %t772, ptr %a774 store { ptr, i64, i64 } { ptr @.str.4981, i64 1, i64 0 }, ptr %a775 call void @finch_str_concat(ptr %a773, ptr %a774, ptr %a775) store { ptr, i64, i64 } %t772, ptr %a776 call void @finch_str_drop(ptr %a776) %t777 = load { ptr, i64, i64 }, ptr %a773 %t778 = load ptr, ptr %a1 %t779 = load { ptr, i64, i64 }, ptr %a684 %t780 = call { ptr, i64, i64 } @finch.gen.op(ptr %t778, { ptr, i64, i64 } %t779) store { ptr, i64, i64 } %t777, ptr %a782 store { ptr, i64, i64 } %t780, ptr %a783 call void @finch_str_concat(ptr %a781, ptr %a782, ptr %a783) store { ptr, i64, i64 } %t777, ptr %a784 call void @finch_str_drop(ptr %a784) store { ptr, i64, i64 } %t780, ptr %a785 call void @finch_str_drop(ptr %a785) %t786 = load { ptr, i64, i64 }, ptr %a781 call void @finch.gen.emit(ptr %t763, { ptr, i64, i64 } %t786) store { ptr, i64, i64 } %t786, ptr %a787 call void @finch_str_drop(ptr %a787) br label %endif7861 endif7861: br label %endif7858 endif7858: br label %endif7855 endif7855: %t788 = load ptr, ptr %a1 %t789 = load %S.gen.Saved, ptr %a276 %t790 = load { ptr, i64, i64 }, ptr %a685 store { ptr, i64, i64 } { ptr @.str.4982, i64 15, i64 0 }, ptr %a792 store { ptr, i64, i64 } %t790, ptr %a793 call void @finch_str_concat(ptr %a791, ptr %a792, ptr %a793) %t794 = load { ptr, i64, i64 }, ptr %a791 store { ptr, i64, i64 } %t794, ptr %a796 store { ptr, i64, i64 } { ptr @.str.4983, i64 1, i64 0 }, ptr %a797 call void @finch_str_concat(ptr %a795, ptr %a796, ptr %a797) store { ptr, i64, i64 } %t794, ptr %a798 call void @finch_str_drop(ptr %a798) %t799 = load { ptr, i64, i64 }, ptr %a795 %t800 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 2 %t801 = load { ptr, i64, i64 }, ptr %t800 store { ptr, i64, i64 } %t799, ptr %a803 store { ptr, i64, i64 } %t801, ptr %a804 call void @finch_str_concat(ptr %a802, ptr %a803, ptr %a804) store { ptr, i64, i64 } %t799, ptr %a805 call void @finch_str_drop(ptr %a805) %t806 = load { ptr, i64, i64 }, ptr %a802 store { ptr, i64, i64 } %t806, ptr %a808 store { ptr, i64, i64 } { ptr @.str.4984, i64 1, i64 0 }, ptr %a809 call void @finch_str_concat(ptr %a807, ptr %a808, ptr %a809) store { ptr, i64, i64 } %t806, ptr %a810 call void @finch_str_drop(ptr %a810) %t811 = load { ptr, i64, i64 }, ptr %a807 %t812 = load { ptr, i64, i64 }, ptr %a38 store { ptr, i64, i64 } %t811, ptr %a814 store { ptr, i64, i64 } %t812, ptr %a815 call void @finch_str_concat(ptr %a813, ptr %a814, ptr %a815) store { ptr, i64, i64 } %t811, ptr %a816 call void @finch_str_drop(ptr %a816) %t817 = load { ptr, i64, i64 }, ptr %a813 store { ptr, i64, i64 } %t817, ptr %a819 store { ptr, i64, i64 } { ptr @.str.4985, i64 1, i64 0 }, ptr %a820 call void @finch_str_concat(ptr %a818, ptr %a819, ptr %a820) store { ptr, i64, i64 } %t817, ptr %a821 call void @finch_str_drop(ptr %a821) %t822 = load { ptr, i64, i64 }, ptr %a818 %t823 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4986, i64 2, i64 0 }, ptr %a824 call void @finch_str_join(ptr %a825, ptr %a277, ptr %a824) %t826 = load { ptr, i64, i64 }, ptr %a825 store { ptr, i64, i64 } %t822, ptr %a828 store { ptr, i64, i64 } %t826, ptr %a829 call void @finch_str_concat(ptr %a827, ptr %a828, ptr %a829) store { ptr, i64, i64 } %t822, ptr %a830 call void @finch_str_drop(ptr %a830) store { ptr, i64, i64 } %t826, ptr %a831 call void @finch_str_drop(ptr %a831) %t832 = load { ptr, i64, i64 }, ptr %a827 store { ptr, i64, i64 } %t832, ptr %a834 store { ptr, i64, i64 } { ptr @.str.4987, i64 1, i64 0 }, ptr %a835 call void @finch_str_concat(ptr %a833, ptr %a834, ptr %a835) store { ptr, i64, i64 } %t832, ptr %a836 call void @finch_str_drop(ptr %a836) %t837 = load { ptr, i64, i64 }, ptr %a833 call void @finch.gen.endHelper(ptr %t788, %S.gen.Saved %t789, { ptr, i64, i64 } %t837) store { ptr, i64, i64 } %t837, ptr %a838 call void @finch_str_drop(ptr %a838) %t839 = load { ptr, i64, i64 }, ptr %a38 call void @finch_str_drop(ptr %a685) call void @finch_str_drop(ptr %a684) call void @finch.drop.arr_str(ptr %a303) call void @finch_str_drop(ptr %a279) call void @finch.drop.arr_str(ptr %a277) call void @finch.drop.S_gen_Saved(ptr %a276) call void @finch.drop.S_gen_Plan(ptr %a273) call void @finch.drop.S_gen_FnSig(ptr %a17) ret { ptr, i64, i64 } %t839 } define internal %S.gen.Val @finch.gen.enumFrom(ptr %p0, %S.ast.Node %p1, i64 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i64, align 16 %a14 = alloca %S.gen.EnumDef, align 16 %a15 = alloca %S.gen.EnumDef, align 16 %a17 = alloca %S.gen.EnumDef, align 16 %a31 = alloca %S.gen.Val, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca %S.ast.Type, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca i64, align 16 %a85 = alloca i64, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca %S.ast.Type, align 16 %a125 = alloca %S.ast.Type, align 16 %a135 = alloca %S.ast.Type, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca i64, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca %S.ast.Type, align 16 %a244 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i64 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic7865, label %ok7866 panic7865: call void @finch_panic(ptr @.str.4988, i64 4601, ptr @.str.4989) unreachable ok7866: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 %t7 = load i64, ptr %a3 %t8 = load { ptr, i64, i64 }, ptr %t6 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 br i1 %t10, label %range7867, label %inrange7868 range7867: call void @finch_panic_index(ptr @.str.4990, i64 4601, i64 %t7, i64 %t9) unreachable inrange7868: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.EnumDef, ptr %t11, i64 %t7 %t13 = load %S.gen.EnumDef, ptr %t12 store %S.gen.EnumDef %t13, ptr %a14 call void @finch.copy.S_gen_EnumDef(ptr %a15, ptr %a14) %t16 = load %S.gen.EnumDef, ptr %a15 store %S.gen.EnumDef %t16, ptr %a17 %t18 = load ptr, ptr %a1 %t19 = load %S.ast.Node, ptr %a2 %t20 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t21 = load { ptr, i64, i64 }, ptr %t20 call void @finch.gen.checkArgs(ptr %t18, %S.ast.Node %t19, i64 0, i64 1, { ptr, i64, i64 } %t21) %t22 = load ptr, ptr %a1 %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t24 = load { ptr, i64, i64 }, ptr %t23 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 0, %t25 br i1 %t26, label %range7869, label %inrange7870 range7869: call void @finch_panic_index(ptr @.str.4991, i64 4603, i64 0, i64 %t25) unreachable inrange7870: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds %S.ast.Node, ptr %t27, i64 0 %t29 = load %S.ast.Node, ptr %t28 %t30 = call %S.gen.Val @finch.gen.expr(ptr %t22, %S.ast.Node %t29) store %S.gen.Val %t30, ptr %a31 %t32 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 1 %t33 = load %S.ast.Type, ptr %t32 %t34 = call i1 @finch.gen.isInt(%S.ast.Type %t33) %t35 = xor i1 %t34, true br i1 %t35, label %then7871, label %endif7873 then7871: %t36 = load ptr, ptr %a1 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp uge i64 0, %t39 br i1 %t40, label %range7874, label %inrange7875 range7874: call void @finch_panic_index(ptr @.str.4992, i64 4605, i64 0, i64 %t39) unreachable inrange7875: %t41 = extractvalue { ptr, i64, i64 } %t38, 0 %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 0 %t43 = load %S.ast.Node, ptr %t42 %t44 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t45 = load { ptr, i64, i64 }, ptr %t44 store { ptr, i64, i64 } %t45, ptr %a47 store { ptr, i64, i64 } { ptr @.str.4993, i64 54, i64 0 }, ptr %a48 call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) %t49 = load { ptr, i64, i64 }, ptr %a46 %t50 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 1 %t51 = load %S.ast.Type, ptr %t50 %t52 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t51) store { ptr, i64, i64 } %t49, ptr %a54 store { ptr, i64, i64 } %t52, ptr %a55 call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) store { ptr, i64, i64 } %t49, ptr %a56 call void @finch_str_drop(ptr %a56) store { ptr, i64, i64 } %t52, ptr %a57 call void @finch_str_drop(ptr %a57) %t58 = load { ptr, i64, i64 }, ptr %a53 call void @finch.gen.fail(ptr %t36, %S.ast.Node %t43, { ptr, i64, i64 } %t58) store { ptr, i64, i64 } %t58, ptr %a59 call void @finch_str_drop(ptr %a59) br label %endif7873 endif7873: %t60 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.4994, i64 4, i64 0 }, 0 %t61 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t62 = load { ptr, i64, i64 }, ptr %t61 store { ptr, i64, i64 } %t62, ptr %a63 call void @finch_str_copy(ptr %a64, ptr %a63) %t65 = load { ptr, i64, i64 }, ptr %a64 %t66 = insertvalue %S.ast.Type %t60, { ptr, i64, i64 } %t65, 2 %t67 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 0 %t68 = load { ptr, i64, i64 }, ptr %t67 store { ptr, i64, i64 } %t68, ptr %a69 call void @finch_str_copy(ptr %a70, ptr %a69) %t71 = load { ptr, i64, i64 }, ptr %a70 %t72 = insertvalue %S.ast.Type %t66, { ptr, i64, i64 } %t71, 3 store %S.ast.Type %t72, ptr %a73 %t74 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 3 %t75 = load i1, ptr %t74 br i1 %t75, label %then7876, label %endif7878 then7876: %t76 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 %t78 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 %t79 = load { ptr, i64, i64 }, ptr %t78 store { ptr, i64, i64 } %t79, ptr %a80 %t81 = call i64 @finch_str_to_int(ptr %a80, ptr @.str.4995, i64 4609) store i64 -1, ptr %a82 %t83 = load i64, ptr %t77 %t84 = load ptr, ptr %t76 store i64 0, ptr %a85 br label %find.cond7879 find.cond7879: %t86 = load i64, ptr %a85 %t87 = icmp slt i64 %t86, %t83 br i1 %t87, label %find.body7880, label %find.end7883 find.body7880: %t88 = getelementptr inbounds i64, ptr %t84, i64 %t86 %t89 = load i64, ptr %t88 %t90 = icmp eq i64 %t89, %t81 br i1 %t90, label %find.hit7881, label %find.next7882 find.hit7881: store i64 %t86, ptr %a82 br label %find.end7883 find.next7882: %t91 = add i64 %t86, 1 store i64 %t91, ptr %a85 br label %find.cond7879 find.end7883: %t92 = load i64, ptr %a82 %t93 = icmp sge i64 %t92, 0 %t94 = xor i1 %t93, true br i1 %t94, label %then7884, label %endif7886 then7884: %t95 = load ptr, ptr %a1 %t96 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t97 = load { ptr, i64, i64 }, ptr %t96 %t98 = extractvalue { ptr, i64, i64 } %t97, 1 %t99 = icmp uge i64 0, %t98 br i1 %t99, label %range7887, label %inrange7888 range7887: call void @finch_panic_index(ptr @.str.4996, i64 4610, i64 0, i64 %t98) unreachable inrange7888: %t100 = extractvalue { ptr, i64, i64 } %t97, 0 %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 0 %t102 = load %S.ast.Node, ptr %t101 %t103 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 %t104 = load { ptr, i64, i64 }, ptr %t103 store { ptr, i64, i64 } %t104, ptr %a106 store { ptr, i64, i64 } { ptr @.str.4997, i64 37, i64 0 }, ptr %a107 call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) %t108 = load { ptr, i64, i64 }, ptr %a105 %t109 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t110 = load { ptr, i64, i64 }, ptr %t109 store { ptr, i64, i64 } %t108, ptr %a112 store { ptr, i64, i64 } %t110, ptr %a113 call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) store { ptr, i64, i64 } %t108, ptr %a114 call void @finch_str_drop(ptr %a114) %t115 = load { ptr, i64, i64 }, ptr %a111 call void @finch.gen.fail(ptr %t95, %S.ast.Node %t102, { ptr, i64, i64 } %t115) store { ptr, i64, i64 } %t115, ptr %a116 call void @finch_str_drop(ptr %a116) br label %endif7886 endif7886: %t117 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 %t118 = load { ptr, i64, i64 }, ptr %t117 store { ptr, i64, i64 } %t118, ptr %a119 call void @finch_str_copy(ptr %a120, ptr %a119) %t121 = load { ptr, i64, i64 }, ptr %a120 %t122 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t121, 0 %t123 = load %S.ast.Type, ptr %a73 store %S.ast.Type %t123, ptr %a124 call void @finch.copy.S_ast_Type(ptr %a125, ptr %a124) %t126 = load %S.ast.Type, ptr %a125 %t127 = insertvalue %S.gen.Val %t122, %S.ast.Type %t126, 1 call void @finch.drop.S_ast_Type(ptr %a73) call void @finch.drop.S_gen_Val(ptr %a31) call void @finch.drop.S_gen_EnumDef(ptr %a17) ret %S.gen.Val %t127 endif7878: %t128 = load ptr, ptr %a1 %t129 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 %t130 = load { ptr, i64, i64 }, ptr %t129 %t131 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 1 %t132 = load %S.ast.Type, ptr %t131 %t133 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4998, i64 3, i64 0 }) %t134 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t128, { ptr, i64, i64 } %t130, %S.ast.Type %t132, %S.ast.Type %t133) store %S.ast.Type %t133, ptr %a135 call void @finch.drop.S_ast_Type(ptr %a135) store { ptr, i64, i64 } %t134, ptr %a136 store { ptr, i64, i64 } { ptr @.str.4999, i64 0, i64 0 }, ptr %a137 %t138 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i32 0, i32 1 %t140 = load i64, ptr %t139 store i64 0, ptr %a141 br label %for.cond7889 for.cond7889: %t142 = load i64, ptr %a141 %t143 = icmp slt i64 %t142, %t140 br i1 %t143, label %for.body7890, label %for.end7892 for.body7890: %t144 = load ptr, ptr %a1 %t145 = load { ptr, i64, i64 }, ptr %a136 store { ptr, i64, i64 } { ptr @.str.5000, i64 12, i64 0 }, ptr %a147 store { ptr, i64, i64 } %t145, ptr %a148 call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) %t149 = load { ptr, i64, i64 }, ptr %a146 store { ptr, i64, i64 } %t149, ptr %a151 store { ptr, i64, i64 } { ptr @.str.5001, i64 2, i64 0 }, ptr %a152 call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) store { ptr, i64, i64 } %t149, ptr %a153 call void @finch_str_drop(ptr %a153) %t154 = load { ptr, i64, i64 }, ptr %a150 %t155 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 %t156 = load i64, ptr %a141 %t157 = load { ptr, i64, i64 }, ptr %t155 %t158 = extractvalue { ptr, i64, i64 } %t157, 1 %t159 = icmp uge i64 %t156, %t158 br i1 %t159, label %range7893, label %inrange7894 range7893: call void @finch_panic_index(ptr @.str.5002, i64 4617, i64 %t156, i64 %t158) unreachable inrange7894: %t160 = extractvalue { ptr, i64, i64 } %t157, 0 %t161 = getelementptr inbounds i64, ptr %t160, i64 %t156 %t162 = load i64, ptr %t161 call void @finch_str_from_int(ptr %a163, i64 %t162) %t164 = load { ptr, i64, i64 }, ptr %a163 store { ptr, i64, i64 } %t154, ptr %a166 store { ptr, i64, i64 } %t164, ptr %a167 call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) store { ptr, i64, i64 } %t154, ptr %a168 call void @finch_str_drop(ptr %a168) store { ptr, i64, i64 } %t164, ptr %a169 call void @finch_str_drop(ptr %a169) %t170 = load { ptr, i64, i64 }, ptr %a165 %t171 = call { ptr, i64, i64 } @finch.gen.op(ptr %t144, { ptr, i64, i64 } %t170) store { ptr, i64, i64 } %t170, ptr %a172 call void @finch_str_drop(ptr %a172) store { ptr, i64, i64 } %t171, ptr %a173 %t174 = load i64, ptr %a141 %t175 = icmp eq i64 %t174, 0 br i1 %t175, label %then7895, label %else7896 then7895: %t176 = load { ptr, i64, i64 }, ptr %a173 store { ptr, i64, i64 } %t176, ptr %a177 call void @finch_str_copy(ptr %a178, ptr %a177) %t179 = load { ptr, i64, i64 }, ptr %a178 %t180 = load { ptr, i64, i64 }, ptr %a137 store { ptr, i64, i64 } %t179, ptr %a137 store { ptr, i64, i64 } %t180, ptr %a181 call void @finch_str_drop(ptr %a181) br label %endif7897 else7896: %t182 = load ptr, ptr %a1 %t183 = load { ptr, i64, i64 }, ptr %a137 store { ptr, i64, i64 } { ptr @.str.5003, i64 6, i64 0 }, ptr %a185 store { ptr, i64, i64 } %t183, ptr %a186 call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186) %t187 = load { ptr, i64, i64 }, ptr %a184 store { ptr, i64, i64 } %t187, ptr %a189 store { ptr, i64, i64 } { ptr @.str.5004, i64 2, i64 0 }, ptr %a190 call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) store { ptr, i64, i64 } %t187, ptr %a191 call void @finch_str_drop(ptr %a191) %t192 = load { ptr, i64, i64 }, ptr %a188 %t193 = load { ptr, i64, i64 }, ptr %a173 store { ptr, i64, i64 } %t192, ptr %a195 store { ptr, i64, i64 } %t193, ptr %a196 call void @finch_str_concat(ptr %a194, ptr %a195, ptr %a196) store { ptr, i64, i64 } %t192, ptr %a197 call void @finch_str_drop(ptr %a197) %t198 = load { ptr, i64, i64 }, ptr %a194 %t199 = call { ptr, i64, i64 } @finch.gen.op(ptr %t182, { ptr, i64, i64 } %t198) store { ptr, i64, i64 } %t198, ptr %a200 call void @finch_str_drop(ptr %a200) %t201 = load { ptr, i64, i64 }, ptr %a137 store { ptr, i64, i64 } %t199, ptr %a137 store { ptr, i64, i64 } %t201, ptr %a202 call void @finch_str_drop(ptr %a202) br label %endif7897 endif7897: call void @finch_str_drop(ptr %a173) br label %for.step7891 for.step7891: %t203 = load i64, ptr %a141 %t204 = add i64 %t203, 1 store i64 %t204, ptr %a141 br label %for.cond7889 for.end7892: %t205 = load ptr, ptr %a1 %t206 = load ptr, ptr %a1 %t207 = load { ptr, i64, i64 }, ptr %a137 store { ptr, i64, i64 } { ptr @.str.5005, i64 7, i64 0 }, ptr %a209 store { ptr, i64, i64 } %t207, ptr %a210 call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) %t211 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t211, ptr %a213 store { ptr, i64, i64 } { ptr @.str.5006, i64 6, i64 0 }, ptr %a214 call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) store { ptr, i64, i64 } %t211, ptr %a215 call void @finch_str_drop(ptr %a215) %t216 = load { ptr, i64, i64 }, ptr %a212 %t217 = call { ptr, i64, i64 } @finch.gen.op(ptr %t206, { ptr, i64, i64 } %t216) store { ptr, i64, i64 } %t216, ptr %a218 call void @finch_str_drop(ptr %a218) %t219 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t220 = load { ptr, i64, i64 }, ptr %t219 store { ptr, i64, i64 } { ptr @.str.5007, i64 32, i64 0 }, ptr %a222 store { ptr, i64, i64 } %t220, ptr %a223 call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223) %t224 = load { ptr, i64, i64 }, ptr %a221 %t225 = load %S.ast.Node, ptr %a2 call void @finch.gen.panicIf(ptr %t205, { ptr, i64, i64 } %t217, { ptr, i64, i64 } %t224, %S.ast.Node %t225) store { ptr, i64, i64 } %t217, ptr %a226 call void @finch_str_drop(ptr %a226) store { ptr, i64, i64 } %t224, ptr %a227 call void @finch_str_drop(ptr %a227) %t228 = load ptr, ptr %a1 %t229 = load { ptr, i64, i64 }, ptr %a136 store { ptr, i64, i64 } { ptr @.str.5008, i64 10, i64 0 }, ptr %a231 store { ptr, i64, i64 } %t229, ptr %a232 call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) %t233 = load { ptr, i64, i64 }, ptr %a230 store { ptr, i64, i64 } %t233, ptr %a235 store { ptr, i64, i64 } { ptr @.str.5009, i64 7, i64 0 }, ptr %a236 call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) store { ptr, i64, i64 } %t233, ptr %a237 call void @finch_str_drop(ptr %a237) %t238 = load { ptr, i64, i64 }, ptr %a234 %t239 = call { ptr, i64, i64 } @finch.gen.op(ptr %t228, { ptr, i64, i64 } %t238) store { ptr, i64, i64 } %t238, ptr %a240 call void @finch_str_drop(ptr %a240) %t241 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t239, 0 %t242 = load %S.ast.Type, ptr %a73 store %S.ast.Type %t242, ptr %a243 call void @finch.copy.S_ast_Type(ptr %a244, ptr %a243) %t245 = load %S.ast.Type, ptr %a244 %t246 = insertvalue %S.gen.Val %t241, %S.ast.Type %t245, 1 call void @finch_str_drop(ptr %a137) call void @finch_str_drop(ptr %a136) call void @finch.drop.S_ast_Type(ptr %a73) call void @finch.drop.S_gen_Val(ptr %a31) call void @finch.drop.S_gen_EnumDef(ptr %a17) ret %S.gen.Val %t246 } define internal { ptr, i64, i64 } @finch.gen.cExt(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 store { ptr, i64, i64 } { ptr @.str.5010, i64 4, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 br label %logic.from7898 logic.from7898: br i1 %t8, label %logic.end7900, label %logic.rhs7899 logic.rhs7899: %t9 = load %S.ast.Type, ptr %a2 %t10 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t9) br label %logic.rend7901 logic.rend7901: br label %logic.end7900 logic.end7900: %t11 = phi i1 [ true, %logic.from7898 ], [ %t10, %logic.rend7901 ] br i1 %t11, label %then7902, label %endif7904 then7902: %t12 = load %S.ast.Type, ptr %a2 %t13 = call i64 @finch.gen.bitsOf(%S.ast.Type %t12) %t14 = icmp slt i64 %t13, 32 br i1 %t14, label %then7905, label %endif7907 then7905: ret { ptr, i64, i64 } { ptr @.str.5011, i64 8, i64 0 } endif7907: br label %endif7904 endif7904: %t15 = load %S.ast.Type, ptr %a2 %t16 = call i1 @finch.gen.isSigned(%S.ast.Type %t15) br label %logic.from7908 logic.from7908: br i1 %t16, label %logic.end7910, label %logic.rhs7909 logic.rhs7909: %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t18 = load { ptr, i64, i64 }, ptr %t17 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5012, i64 4, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 br label %logic.from7911 logic.from7911: br i1 %t22, label %logic.rhs7912, label %logic.end7913 logic.rhs7912: %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null br i1 %t24, label %panic7914, label %ok7915 panic7914: call void @finch_panic(ptr @.str.5013, i64 4637, ptr @.str.5014) unreachable ok7915: %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 31 %t26 = load %S.platform.Target, ptr %t25 %t27 = call i1 @finch.platform.charIsSigned(%S.platform.Target %t26) br label %logic.rend7916 logic.rend7916: br label %logic.end7913 logic.end7913: %t28 = phi i1 [ false, %logic.from7911 ], [ %t27, %logic.rend7916 ] br label %logic.rend7917 logic.rend7917: br label %logic.end7910 logic.end7910: %t29 = phi i1 [ true, %logic.from7908 ], [ %t28, %logic.rend7917 ] br label %logic.from7918 logic.from7918: br i1 %t29, label %logic.rhs7919, label %logic.end7920 logic.rhs7919: %t30 = load %S.ast.Type, ptr %a2 %t31 = call i64 @finch.gen.bitsOf(%S.ast.Type %t30) %t32 = icmp slt i64 %t31, 32 br label %logic.rend7921 logic.rend7921: br label %logic.end7920 logic.end7920: %t33 = phi i1 [ false, %logic.from7918 ], [ %t32, %logic.rend7921 ] br i1 %t33, label %then7922, label %endif7924 then7922: ret { ptr, i64, i64 } { ptr @.str.5015, i64 8, i64 0 } endif7924: %t34 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t35 = load { ptr, i64, i64 }, ptr %t34 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.5016, i64 4, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 br label %logic.from7925 logic.from7925: br i1 %t39, label %logic.rhs7926, label %logic.end7927 logic.rhs7926: %t40 = load %S.ast.Type, ptr %a2 %t41 = call i64 @finch.gen.bitsOf(%S.ast.Type %t40) %t42 = icmp slt i64 %t41, 32 br label %logic.rend7928 logic.rend7928: br label %logic.end7927 logic.end7927: %t43 = phi i1 [ false, %logic.from7925 ], [ %t42, %logic.rend7928 ] br i1 %t43, label %then7929, label %endif7931 then7929: ret { ptr, i64, i64 } { ptr @.str.5017, i64 8, i64 0 } endif7931: ret { ptr, i64, i64 } { ptr @.str.5018, i64 0, i64 0 } } define internal { ptr, i64, i64 } @finch.gen.cLL(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 store { ptr, i64, i64 } { ptr @.str.5019, i64 3, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 br i1 %t8, label %then7932, label %endif7934 then7932: ret { ptr, i64, i64 } { ptr @.str.5020, i64 3, i64 0 } endif7934: %t9 = load ptr, ptr %a1 %t10 = load %S.ast.Type, ptr %a2 %t11 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t9, %S.ast.Type %t10) ret { ptr, i64, i64 } %t11 } define internal %S.gen.Val @finch.gen.callC(ptr %p0, %S.ast.Node %p1, %S.cimport.CFunc %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.cimport.CFunc, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca i64, align 16 %a18 = alloca %S.ast.Type, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca i64, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca %S.ast.Type, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca i64, align 16 %a235 = alloca %S.ast.Type, align 16 %a240 = alloca %S.ast.Type, align 16 %a248 = alloca %S.ast.Type, align 16 %a249 = alloca %S.ast.Type, align 16 %a261 = alloca %S.gen.Plan, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a308 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca i64, align 16 %a327 = alloca i64, align 16 %a342 = alloca %S.ast.Type, align 16 %a343 = alloca %S.ast.Type, align 16 %a345 = alloca %S.ast.Type, align 16 %a354 = alloca %S.gen.Abi, align 16 %a355 = alloca %S.gen.Abi, align 16 %a357 = alloca %S.gen.Abi, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a384 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a401 = alloca %S.gen.Val, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a403 = alloca %S.gen.Val, align 16 %a406 = alloca %S.gen.Val, align 16 %a407 = alloca %S.gen.Val, align 16 %a417 = alloca { ptr, i64, i64 }, align 16 %a418 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a435 = alloca { ptr, i64, i64 }, align 16 %a439 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca { ptr, i64, i64 }, align 16 %a441 = alloca { ptr, i64, i64 }, align 16 %a442 = alloca { ptr, i64, i64 }, align 16 %a444 = alloca { ptr, i64, i64 }, align 16 %a445 = alloca { ptr, i64, i64 }, align 16 %a446 = alloca { ptr, i64, i64 }, align 16 %a447 = alloca { ptr, i64, i64 }, align 16 %a451 = alloca { ptr, i64, i64 }, align 16 %a453 = alloca { ptr, i64, i64 }, align 16 %a454 = alloca { ptr, i64, i64 }, align 16 %a455 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a459 = alloca { ptr, i64, i64 }, align 16 %a462 = alloca { ptr, i64, i64 }, align 16 %a463 = alloca { ptr, i64, i64 }, align 16 %a471 = alloca { ptr, i64, i64 }, align 16 %a472 = alloca { ptr, i64, i64 }, align 16 %a473 = alloca { ptr, i64, i64 }, align 16 %a476 = alloca { ptr, i64, i64 }, align 16 %a477 = alloca { ptr, i64, i64 }, align 16 %a478 = alloca { ptr, i64, i64 }, align 16 %a479 = alloca { ptr, i64, i64 }, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a488 = alloca { ptr, i64, i64 }, align 16 %a496 = alloca { ptr, i64, i64 }, align 16 %a497 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a513 = alloca { ptr, i64, i64 }, align 16 %a514 = alloca { ptr, i64, i64 }, align 16 %a515 = alloca { ptr, i64, i64 }, align 16 %a523 = alloca { ptr, i64, i64 }, align 16 %a524 = alloca { ptr, i64, i64 }, align 16 %a529 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a541 = alloca i64, align 16 %a555 = alloca { ptr, i64, i64 }, align 16 %a556 = alloca { ptr, i64, i64 }, align 16 %a557 = alloca { ptr, i64, i64 }, align 16 %a559 = alloca { ptr, i64, i64 }, align 16 %a560 = alloca { ptr, i64, i64 }, align 16 %a561 = alloca { ptr, i64, i64 }, align 16 %a562 = alloca { ptr, i64, i64 }, align 16 %a566 = alloca { ptr, i64, i64 }, align 16 %a568 = alloca { ptr, i64, i64 }, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a570 = alloca { ptr, i64, i64 }, align 16 %a571 = alloca { ptr, i64, i64 }, align 16 %a572 = alloca { ptr, i64, i64 }, align 16 %a575 = alloca { ptr, i64, i64 }, align 16 %a577 = alloca { ptr, i64, i64 }, align 16 %a578 = alloca { ptr, i64, i64 }, align 16 %a588 = alloca { ptr, i64, i64 }, align 16 %a589 = alloca { ptr, i64, i64 }, align 16 %a604 = alloca { ptr, i64, i64 }, align 16 %a605 = alloca { ptr, i64, i64 }, align 16 %a606 = alloca { ptr, i64, i64 }, align 16 %a609 = alloca { ptr, i64, i64 }, align 16 %a610 = alloca { ptr, i64, i64 }, align 16 %a611 = alloca { ptr, i64, i64 }, align 16 %a612 = alloca { ptr, i64, i64 }, align 16 %a627 = alloca { ptr, i64, i64 }, align 16 %a628 = alloca { ptr, i64, i64 }, align 16 %a629 = alloca { ptr, i64, i64 }, align 16 %a630 = alloca { ptr, i64, i64 }, align 16 %a631 = alloca { ptr, i64, i64 }, align 16 %a639 = alloca { ptr, i64, i64 }, align 16 %a640 = alloca { ptr, i64, i64 }, align 16 %a648 = alloca { ptr, i64, i64 }, align 16 %a649 = alloca { ptr, i64, i64 }, align 16 %a650 = alloca { ptr, i64, i64 }, align 16 %a651 = alloca { ptr, i64, i64 }, align 16 %a664 = alloca { ptr, i64, i64 }, align 16 %a665 = alloca { ptr, i64, i64 }, align 16 %a666 = alloca { ptr, i64, i64 }, align 16 %a667 = alloca { ptr, i64, i64 }, align 16 %a668 = alloca { ptr, i64, i64 }, align 16 %a670 = alloca { ptr, i64, i64 }, align 16 %a671 = alloca { ptr, i64, i64 }, align 16 %a672 = alloca { ptr, i64, i64 }, align 16 %a673 = alloca { ptr, i64, i64 }, align 16 %a677 = alloca { ptr, i64, i64 }, align 16 %a678 = alloca { ptr, i64, i64 }, align 16 %a679 = alloca { ptr, i64, i64 }, align 16 %a680 = alloca { ptr, i64, i64 }, align 16 %a696 = alloca %S.gen.Val, align 16 %a699 = alloca %S.ast.Type, align 16 %a700 = alloca %S.ast.Type, align 16 %a702 = alloca %S.ast.Type, align 16 %a705 = alloca { ptr, i64, i64 }, align 16 %a706 = alloca { ptr, i64, i64 }, align 16 %a720 = alloca %S.gen.Val, align 16 %a721 = alloca %S.gen.Val, align 16 %a731 = alloca { ptr, i64, i64 }, align 16 %a732 = alloca { ptr, i64, i64 }, align 16 %a737 = alloca { ptr, i64, i64 }, align 16 %a738 = alloca { ptr, i64, i64 }, align 16 %a753 = alloca { ptr, i64, i64 }, align 16 %a754 = alloca { ptr, i64, i64 }, align 16 %a756 = alloca { ptr, i64, i64 }, align 16 %a759 = alloca { ptr, i64, i64 }, align 16 %a760 = alloca { ptr, i64, i64 }, align 16 %a768 = alloca %S.ast.Type, align 16 %a770 = alloca { ptr, i64, i64 }, align 16 %a773 = alloca %S.ast.Type, align 16 %a776 = alloca { ptr, i64, i64 }, align 16 %a777 = alloca { ptr, i64, i64 }, align 16 %a784 = alloca { ptr, i64, i64 }, align 16 %a787 = alloca %S.ast.Type, align 16 %a790 = alloca { ptr, i64, i64 }, align 16 %a791 = alloca { ptr, i64, i64 }, align 16 %a797 = alloca { ptr, i64, i64 }, align 16 %a798 = alloca { ptr, i64, i64 }, align 16 %a799 = alloca { ptr, i64, i64 }, align 16 %a801 = alloca { ptr, i64, i64 }, align 16 %a802 = alloca { ptr, i64, i64 }, align 16 %a803 = alloca { ptr, i64, i64 }, align 16 %a804 = alloca { ptr, i64, i64 }, align 16 %a807 = alloca { ptr, i64, i64 }, align 16 %a809 = alloca { ptr, i64, i64 }, align 16 %a812 = alloca %S.ast.Type, align 16 %a817 = alloca { ptr, i64, i64 }, align 16 %a818 = alloca { ptr, i64, i64 }, align 16 %a831 = alloca %S.ast.Type, align 16 %a833 = alloca { ptr, i64, i64 }, align 16 %a836 = alloca %S.ast.Type, align 16 %a841 = alloca { ptr, i64, i64 }, align 16 %a842 = alloca { ptr, i64, i64 }, align 16 %a843 = alloca { ptr, i64, i64 }, align 16 %a844 = alloca { ptr, i64, i64 }, align 16 %a847 = alloca { ptr, i64, i64 }, align 16 %a848 = alloca { ptr, i64, i64 }, align 16 %a849 = alloca { ptr, i64, i64 }, align 16 %a850 = alloca { ptr, i64, i64 }, align 16 %a860 = alloca { ptr, i64, i64 }, align 16 %a861 = alloca { ptr, i64, i64 }, align 16 %a863 = alloca { ptr, i64, i64 }, align 16 %a864 = alloca { ptr, i64, i64 }, align 16 %a868 = alloca { ptr, i64, i64 }, align 16 %a869 = alloca { ptr, i64, i64 }, align 16 %a876 = alloca { ptr, i64, i64 }, align 16 %a877 = alloca { ptr, i64, i64 }, align 16 %a881 = alloca { ptr, i64, i64 }, align 16 %a886 = alloca { ptr, i64, i64 }, align 16 %a893 = alloca { ptr, i64, i64 }, align 16 %a894 = alloca { ptr, i64, i64 }, align 16 %a895 = alloca { ptr, i64, i64 }, align 16 %a897 = alloca i64, align 16 %a900 = alloca i64, align 16 %a905 = alloca { ptr, i64, i64 }, align 16 %a906 = alloca { ptr, i64, i64 }, align 16 %a910 = alloca { ptr, i64, i64 }, align 16 %a920 = alloca { ptr, i64, i64 }, align 16 %a921 = alloca { ptr, i64, i64 }, align 16 %a922 = alloca { ptr, i64, i64 }, align 16 %a937 = alloca { ptr, i64, i64 }, align 16 %a938 = alloca { ptr, i64, i64 }, align 16 %a939 = alloca { ptr, i64, i64 }, align 16 %a941 = alloca { ptr, i64, i64 }, align 16 %a942 = alloca { ptr, i64, i64 }, align 16 %a943 = alloca { ptr, i64, i64 }, align 16 %a944 = alloca { ptr, i64, i64 }, align 16 %a947 = alloca { ptr, i64, i64 }, align 16 %a948 = alloca { ptr, i64, i64 }, align 16 %a949 = alloca { ptr, i64, i64 }, align 16 %a950 = alloca { ptr, i64, i64 }, align 16 %a952 = alloca { ptr, i64, i64 }, align 16 %a953 = alloca { ptr, i64, i64 }, align 16 %a954 = alloca { ptr, i64, i64 }, align 16 %a955 = alloca { ptr, i64, i64 }, align 16 %a959 = alloca { ptr, i64, i64 }, align 16 %a960 = alloca { ptr, i64, i64 }, align 16 %a961 = alloca { ptr, i64, i64 }, align 16 %a962 = alloca { ptr, i64, i64 }, align 16 %a964 = alloca { ptr, i64, i64 }, align 16 %a965 = alloca { ptr, i64, i64 }, align 16 %a966 = alloca { ptr, i64, i64 }, align 16 %a967 = alloca { ptr, i64, i64 }, align 16 %a970 = alloca { ptr, i64, i64 }, align 16 %a971 = alloca { ptr, i64, i64 }, align 16 %a973 = alloca { ptr, i64, i64 }, align 16 %a974 = alloca { ptr, i64, i64 }, align 16 %a975 = alloca { ptr, i64, i64 }, align 16 %a976 = alloca { ptr, i64, i64 }, align 16 %a977 = alloca { ptr, i64, i64 }, align 16 %a980 = alloca { ptr, i64, i64 }, align 16 %a981 = alloca { ptr, i64, i64 }, align 16 %a982 = alloca { ptr, i64, i64 }, align 16 %a983 = alloca { ptr, i64, i64 }, align 16 %a985 = alloca { ptr, i64, i64 }, align 16 %a986 = alloca { ptr, i64, i64 }, align 16 %a987 = alloca { ptr, i64, i64 }, align 16 %a988 = alloca { ptr, i64, i64 }, align 16 %a994 = alloca { ptr, i64, i64 }, align 16 %a998 = alloca { ptr, i64, i64 }, align 16 %a999 = alloca { ptr, i64, i64 }, align 16 %a1001 = alloca { ptr, i64, i64 }, align 16 %a1002 = alloca { ptr, i64, i64 }, align 16 %a1003 = alloca { ptr, i64, i64 }, align 16 %a1004 = alloca { ptr, i64, i64 }, align 16 %a1007 = alloca { ptr, i64, i64 }, align 16 %a1008 = alloca { ptr, i64, i64 }, align 16 %a1009 = alloca { ptr, i64, i64 }, align 16 %a1010 = alloca { ptr, i64, i64 }, align 16 %a1012 = alloca { ptr, i64, i64 }, align 16 %a1013 = alloca { ptr, i64, i64 }, align 16 %a1014 = alloca { ptr, i64, i64 }, align 16 %a1015 = alloca { ptr, i64, i64 }, align 16 %a1018 = alloca { ptr, i64, i64 }, align 16 %a1020 = alloca { ptr, i64, i64 }, align 16 %a1021 = alloca { ptr, i64, i64 }, align 16 %a1022 = alloca { ptr, i64, i64 }, align 16 %a1024 = alloca { ptr, i64, i64 }, align 16 %a1025 = alloca { ptr, i64, i64 }, align 16 %a1026 = alloca { ptr, i64, i64 }, align 16 %a1027 = alloca { ptr, i64, i64 }, align 16 %a1030 = alloca { ptr, i64, i64 }, align 16 %a1031 = alloca { ptr, i64, i64 }, align 16 %a1032 = alloca { ptr, i64, i64 }, align 16 %a1033 = alloca { ptr, i64, i64 }, align 16 %a1036 = alloca { ptr, i64, i64 }, align 16 %a1037 = alloca { ptr, i64, i64 }, align 16 %a1038 = alloca { ptr, i64, i64 }, align 16 %a1039 = alloca { ptr, i64, i64 }, align 16 %a1041 = alloca { ptr, i64, i64 }, align 16 %a1042 = alloca { ptr, i64, i64 }, align 16 %a1043 = alloca { ptr, i64, i64 }, align 16 %a1044 = alloca { ptr, i64, i64 }, align 16 %a1048 = alloca { ptr, i64, i64 }, align 16 %a1049 = alloca { ptr, i64, i64 }, align 16 %a1050 = alloca { ptr, i64, i64 }, align 16 %a1051 = alloca { ptr, i64, i64 }, align 16 %a1053 = alloca { ptr, i64, i64 }, align 16 %a1054 = alloca { ptr, i64, i64 }, align 16 %a1055 = alloca { ptr, i64, i64 }, align 16 %a1056 = alloca { ptr, i64, i64 }, align 16 %a1059 = alloca { ptr, i64, i64 }, align 16 %a1060 = alloca { ptr, i64, i64 }, align 16 %a1062 = alloca { ptr, i64, i64 }, align 16 %a1063 = alloca { ptr, i64, i64 }, align 16 %a1064 = alloca { ptr, i64, i64 }, align 16 %a1065 = alloca { ptr, i64, i64 }, align 16 %a1066 = alloca { ptr, i64, i64 }, align 16 %a1068 = alloca { ptr, i64, i64 }, align 16 %a1069 = alloca { ptr, i64, i64 }, align 16 %a1070 = alloca { ptr, i64, i64 }, align 16 %a1071 = alloca { ptr, i64, i64 }, align 16 %a1073 = alloca { ptr, i64, i64 }, align 16 %a1076 = alloca { ptr, i64, i64 }, align 16 %a1077 = alloca { ptr, i64, i64 }, align 16 %a1086 = alloca %S.ast.Type, align 16 %a1087 = alloca %S.ast.Type, align 16 %a1103 = alloca { ptr, i64, i64 }, align 16 %a1106 = alloca %S.ast.Type, align 16 %a1107 = alloca %S.ast.Type, align 16 %a1113 = alloca { ptr, i64, i64 }, align 16 %a1120 = alloca { ptr, i64, i64 }, align 16 %a1121 = alloca { ptr, i64, i64 }, align 16 %a1126 = alloca { ptr, i64, i64 }, align 16 %a1139 = alloca { ptr, i64, i64 }, align 16 %a1142 = alloca %S.ast.Type, align 16 %a1143 = alloca %S.ast.Type, align 16 %a1148 = alloca { ptr, i64, i64 }, align 16 %a1149 = alloca { ptr, i64, i64 }, align 16 %a1154 = alloca { ptr, i64, i64 }, align 16 %a1159 = alloca { ptr, i64, i64 }, align 16 %a1160 = alloca { ptr, i64, i64 }, align 16 %a1161 = alloca { ptr, i64, i64 }, align 16 %a1163 = alloca { ptr, i64, i64 }, align 16 %a1164 = alloca { ptr, i64, i64 }, align 16 %a1165 = alloca { ptr, i64, i64 }, align 16 %a1166 = alloca { ptr, i64, i64 }, align 16 %a1169 = alloca { ptr, i64, i64 }, align 16 %a1170 = alloca { ptr, i64, i64 }, align 16 %a1171 = alloca { ptr, i64, i64 }, align 16 %a1172 = alloca { ptr, i64, i64 }, align 16 %a1174 = alloca { ptr, i64, i64 }, align 16 %a1175 = alloca { ptr, i64, i64 }, align 16 %a1176 = alloca { ptr, i64, i64 }, align 16 %a1177 = alloca { ptr, i64, i64 }, align 16 %a1179 = alloca { ptr, i64, i64 }, align 16 %a1185 = alloca %S.ast.Type, align 16 %a1186 = alloca %S.ast.Type, align 16 %a1190 = alloca { ptr, i64, i64 }, align 16 %a1191 = alloca { ptr, i64, i64 }, align 16 %a1195 = alloca %S.ast.Type, align 16 %a1196 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.cimport.CFunc %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic7935, label %ok7936 panic7935: call void @finch_panic(ptr @.str.5021, i64 4654, ptr @.str.5022) unreachable ok7936: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 %t7 = load i1, ptr %t6 br i1 %t7, label %then7937, label %endif7939 then7937: store { ptr, i64, i64 } zeroinitializer, ptr %a8 %t9 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 store i64 0, ptr %a10 br label %each.cond7940 each.cond7940: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = load i64, ptr %a10 %t14 = icmp slt i64 %t13, %t12 br i1 %t14, label %each.body7941, label %each.end7943 each.body7941: %t15 = load ptr, ptr %t9 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t13 %t17 = load %S.ast.Type, ptr %t16 store %S.ast.Type %t17, ptr %a18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t20 = load %S.ast.Type, ptr %a18 %t21 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t20) %t22 = load i64, ptr %t19 %t23 = add i64 %t22, 1 call void @finch_arr_reserve(ptr %a8, i64 %t23, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t24 = load ptr, ptr %a8 %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t22 store { ptr, i64, i64 } %t21, ptr %t25 store i64 %t23, ptr %t19 br label %each.step7942 each.step7942: %t26 = load i64, ptr %a10 %t27 = add i64 %t26, 1 store i64 %t27, ptr %a10 br label %each.cond7940 each.end7943: %t28 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 %t29 = load i1, ptr %t28 br i1 %t29, label %then7944, label %endif7946 then7944: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = add i64 %t31, 1 call void @finch_arr_reserve(ptr %a8, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t33 = load ptr, ptr %a8 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 store { ptr, i64, i64 } { ptr @.str.5023, i64 3, i64 0 }, ptr %t34 store i64 %t32, ptr %t30 br label %endif7946 endif7946: %t35 = load ptr, ptr %a1 %t36 = load %S.ast.Node, ptr %a2 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t38 = load i64, ptr %t37 %t39 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i32 0, i32 1 %t41 = load i64, ptr %t40 %t42 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 1 %t43 = load { ptr, i64, i64 }, ptr %t42 store { ptr, i64, i64 } { ptr @.str.5024, i64 17, i64 0 }, ptr %a45 store { ptr, i64, i64 } %t43, ptr %a46 call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } %t47, ptr %a49 store { ptr, i64, i64 } { ptr @.str.5025, i64 7, i64 0 }, ptr %a50 call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) store { ptr, i64, i64 } %t47, ptr %a51 call void @finch_str_drop(ptr %a51) %t52 = load { ptr, i64, i64 }, ptr %a48 %t53 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 2 %t54 = load %S.ast.Type, ptr %t53 %t55 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t54) store { ptr, i64, i64 } %t52, ptr %a57 store { ptr, i64, i64 } %t55, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) store { ptr, i64, i64 } %t52, ptr %a59 call void @finch_str_drop(ptr %a59) store { ptr, i64, i64 } %t55, ptr %a60 call void @finch_str_drop(ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a56 store { ptr, i64, i64 } %t61, ptr %a63 store { ptr, i64, i64 } { ptr @.str.5026, i64 1, i64 0 }, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) store { ptr, i64, i64 } %t61, ptr %a65 call void @finch_str_drop(ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a62 %t67 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t68 = load { ptr, i64, i64 }, ptr %t67 store { ptr, i64, i64 } %t66, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) store { ptr, i64, i64 } %t66, ptr %a72 call void @finch_str_drop(ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t73, ptr %a75 store { ptr, i64, i64 } { ptr @.str.5027, i64 1, i64 0 }, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) store { ptr, i64, i64 } %t73, ptr %a77 call void @finch_str_drop(ptr %a77) %t78 = load { ptr, i64, i64 }, ptr %a74 %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.5028, i64 2, i64 0 }, ptr %a80 call void @finch_str_join(ptr %a81, ptr %a8, ptr %a80) %t82 = load { ptr, i64, i64 }, ptr %a81 store { ptr, i64, i64 } %t78, ptr %a84 store { ptr, i64, i64 } %t82, ptr %a85 call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) store { ptr, i64, i64 } %t78, ptr %a86 call void @finch_str_drop(ptr %a86) store { ptr, i64, i64 } %t82, ptr %a87 call void @finch_str_drop(ptr %a87) %t88 = load { ptr, i64, i64 }, ptr %a83 store { ptr, i64, i64 } %t88, ptr %a90 store { ptr, i64, i64 } { ptr @.str.5029, i64 5, i64 0 }, ptr %a91 call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) store { ptr, i64, i64 } %t88, ptr %a92 call void @finch_str_drop(ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a89 call void @finch.gen.noteRef(ptr %t35, %S.ast.Node %t36, i64 %t38, i64 %t41, { ptr, i64, i64 } %t93, { ptr, i64, i64 } { ptr @.str.5030, i64 0, i64 0 }, i64 0, i64 0) store { ptr, i64, i64 } %t93, ptr %a94 call void @finch_str_drop(ptr %a94) call void @finch.drop.arr_str(ptr %a8) br label %endif7939 endif7939: %t95 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 5 %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i32 0, i32 1 %t97 = load i64, ptr %t96 %t98 = icmp sgt i64 %t97, 0 br i1 %t98, label %then7947, label %endif7949 then7947: %t99 = load ptr, ptr %a1 %t100 = load %S.ast.Node, ptr %a2 %t101 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t102 = load { ptr, i64, i64 }, ptr %t101 store { ptr, i64, i64 } { ptr @.str.5031, i64 16, i64 0 }, ptr %a104 store { ptr, i64, i64 } %t102, ptr %a105 call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) %t106 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t106, ptr %a108 store { ptr, i64, i64 } { ptr @.str.5032, i64 35, i64 0 }, ptr %a109 call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) store { ptr, i64, i64 } %t106, ptr %a110 call void @finch_str_drop(ptr %a110) %t111 = load { ptr, i64, i64 }, ptr %a107 %t112 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 5 %t113 = load { ptr, i64, i64 }, ptr %t112 store { ptr, i64, i64 } %t111, ptr %a115 store { ptr, i64, i64 } %t113, ptr %a116 call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) store { ptr, i64, i64 } %t111, ptr %a117 call void @finch_str_drop(ptr %a117) %t118 = load { ptr, i64, i64 }, ptr %a114 call void @finch.gen.fail(ptr %t99, %S.ast.Node %t100, { ptr, i64, i64 } %t118) store { ptr, i64, i64 } %t118, ptr %a119 call void @finch_str_drop(ptr %a119) br label %endif7949 endif7949: %t120 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %t120, i32 0, i32 1 %t122 = load i64, ptr %t121 store i64 %t122, ptr %a123 %t124 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 %t125 = load i1, ptr %t124 br i1 %t125, label %then7950, label %else7951 then7950: %t126 = load i64, ptr %a123 %t127 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 %t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t127, i32 0, i32 1 %t129 = load i64, ptr %t128 %t130 = icmp slt i64 %t126, %t129 br i1 %t130, label %then7953, label %endif7955 then7953: %t131 = load ptr, ptr %a1 %t132 = load %S.ast.Node, ptr %a2 %t133 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t134 = load { ptr, i64, i64 }, ptr %t133 store { ptr, i64, i64 } { ptr @.str.5033, i64 1, i64 0 }, ptr %a136 store { ptr, i64, i64 } %t134, ptr %a137 call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) %t138 = load { ptr, i64, i64 }, ptr %a135 store { ptr, i64, i64 } %t138, ptr %a140 store { ptr, i64, i64 } { ptr @.str.5034, i64 17, i64 0 }, ptr %a141 call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) store { ptr, i64, i64 } %t138, ptr %a142 call void @finch_str_drop(ptr %a142) %t143 = load { ptr, i64, i64 }, ptr %a139 %t144 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 %t146 = load i64, ptr %t145 call void @finch_str_from_int(ptr %a147, i64 %t146) %t148 = load { ptr, i64, i64 }, ptr %a147 store { ptr, i64, i64 } %t143, ptr %a150 store { ptr, i64, i64 } %t148, ptr %a151 call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) store { ptr, i64, i64 } %t143, ptr %a152 call void @finch_str_drop(ptr %a152) store { ptr, i64, i64 } %t148, ptr %a153 call void @finch_str_drop(ptr %a153) %t154 = load { ptr, i64, i64 }, ptr %a149 store { ptr, i64, i64 } %t154, ptr %a156 store { ptr, i64, i64 } { ptr @.str.5035, i64 22, i64 0 }, ptr %a157 call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) store { ptr, i64, i64 } %t154, ptr %a158 call void @finch_str_drop(ptr %a158) %t159 = load { ptr, i64, i64 }, ptr %a155 %t160 = load i64, ptr %a123 call void @finch_str_from_int(ptr %a161, i64 %t160) %t162 = load { ptr, i64, i64 }, ptr %a161 store { ptr, i64, i64 } %t159, ptr %a164 store { ptr, i64, i64 } %t162, ptr %a165 call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) store { ptr, i64, i64 } %t159, ptr %a166 call void @finch_str_drop(ptr %a166) store { ptr, i64, i64 } %t162, ptr %a167 call void @finch_str_drop(ptr %a167) %t168 = load { ptr, i64, i64 }, ptr %a163 call void @finch.gen.fail(ptr %t131, %S.ast.Node %t132, { ptr, i64, i64 } %t168) store { ptr, i64, i64 } %t168, ptr %a169 call void @finch_str_drop(ptr %a169) br label %endif7955 endif7955: br label %endif7952 else7951: %t170 = load i64, ptr %a123 %t171 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %t171, i32 0, i32 1 %t173 = load i64, ptr %t172 %t174 = icmp ne i64 %t170, %t173 br i1 %t174, label %then7956, label %endif7958 then7956: %t175 = load ptr, ptr %a1 %t176 = load %S.ast.Node, ptr %a2 %t177 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t178 = load { ptr, i64, i64 }, ptr %t177 store { ptr, i64, i64 } { ptr @.str.5036, i64 1, i64 0 }, ptr %a180 store { ptr, i64, i64 } %t178, ptr %a181 call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) %t182 = load { ptr, i64, i64 }, ptr %a179 store { ptr, i64, i64 } %t182, ptr %a184 store { ptr, i64, i64 } { ptr @.str.5037, i64 8, i64 0 }, ptr %a185 call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) store { ptr, i64, i64 } %t182, ptr %a186 call void @finch_str_drop(ptr %a186) %t187 = load { ptr, i64, i64 }, ptr %a183 %t188 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t188, i32 0, i32 1 %t190 = load i64, ptr %t189 call void @finch_str_from_int(ptr %a191, i64 %t190) %t192 = load { ptr, i64, i64 }, ptr %a191 store { ptr, i64, i64 } %t187, ptr %a194 store { ptr, i64, i64 } %t192, ptr %a195 call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) store { ptr, i64, i64 } %t187, ptr %a196 call void @finch_str_drop(ptr %a196) store { ptr, i64, i64 } %t192, ptr %a197 call void @finch_str_drop(ptr %a197) %t198 = load { ptr, i64, i64 }, ptr %a193 store { ptr, i64, i64 } %t198, ptr %a200 store { ptr, i64, i64 } { ptr @.str.5038, i64 22, i64 0 }, ptr %a201 call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) store { ptr, i64, i64 } %t198, ptr %a202 call void @finch_str_drop(ptr %a202) %t203 = load { ptr, i64, i64 }, ptr %a199 %t204 = load i64, ptr %a123 call void @finch_str_from_int(ptr %a205, i64 %t204) %t206 = load { ptr, i64, i64 }, ptr %a205 store { ptr, i64, i64 } %t203, ptr %a208 store { ptr, i64, i64 } %t206, ptr %a209 call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) store { ptr, i64, i64 } %t203, ptr %a210 call void @finch_str_drop(ptr %a210) store { ptr, i64, i64 } %t206, ptr %a211 call void @finch_str_drop(ptr %a211) %t212 = load { ptr, i64, i64 }, ptr %a207 call void @finch.gen.fail(ptr %t175, %S.ast.Node %t176, { ptr, i64, i64 } %t212) store { ptr, i64, i64 } %t212, ptr %a213 call void @finch_str_drop(ptr %a213) br label %endif7958 endif7958: br label %endif7952 endif7952: %t214 = load ptr, ptr %a1 %t215 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 2 %t216 = load %S.ast.Type, ptr %t215 %t217 = load %S.ast.Node, ptr %a2 %t218 = call %S.ast.Type @finch.gen.resolve(ptr %t214, %S.ast.Type %t216, %S.ast.Node %t217) store %S.ast.Type %t218, ptr %a219 %t220 = load ptr, ptr %a1 %t221 = load %S.ast.Node, ptr %a2 %t222 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t223 = load { ptr, i64, i64 }, ptr %t222 %t224 = load %S.ast.Type, ptr %a219 call void @finch.gen.checkByValue(ptr %t220, %S.ast.Node %t221, { ptr, i64, i64 } %t223, %S.ast.Type %t224, { ptr, i64, i64 } { ptr @.str.5039, i64 7, i64 0 }) store { ptr, i64, i64 } zeroinitializer, ptr %a225 %t226 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 store i64 0, ptr %a227 br label %each.cond7959 each.cond7959: %t228 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i32 0, i32 1 %t229 = load i64, ptr %t228 %t230 = load i64, ptr %a227 %t231 = icmp slt i64 %t230, %t229 br i1 %t231, label %each.body7960, label %each.end7962 each.body7960: %t232 = load ptr, ptr %t226 %t233 = getelementptr inbounds %S.ast.Type, ptr %t232, i64 %t230 %t234 = load %S.ast.Type, ptr %t233 store %S.ast.Type %t234, ptr %a235 %t236 = load ptr, ptr %a1 %t237 = load %S.ast.Type, ptr %a235 %t238 = load %S.ast.Node, ptr %a2 %t239 = call %S.ast.Type @finch.gen.resolve(ptr %t236, %S.ast.Type %t237, %S.ast.Node %t238) store %S.ast.Type %t239, ptr %a240 %t241 = load ptr, ptr %a1 %t242 = load %S.ast.Node, ptr %a2 %t243 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t244 = load { ptr, i64, i64 }, ptr %t243 %t245 = load %S.ast.Type, ptr %a240 call void @finch.gen.checkByValue(ptr %t241, %S.ast.Node %t242, { ptr, i64, i64 } %t244, %S.ast.Type %t245, { ptr, i64, i64 } { ptr @.str.5040, i64 5, i64 0 }) %t246 = getelementptr inbounds { ptr, i64, i64 }, ptr %a225, i32 0, i32 1 %t247 = load %S.ast.Type, ptr %a240 store %S.ast.Type %t247, ptr %a248 call void @finch.copy.S_ast_Type(ptr %a249, ptr %a248) %t250 = load %S.ast.Type, ptr %a249 %t251 = load i64, ptr %t246 %t252 = add i64 %t251, 1 call void @finch_arr_reserve(ptr %a225, i64 %t252, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t253 = load ptr, ptr %a225 %t254 = getelementptr inbounds %S.ast.Type, ptr %t253, i64 %t251 store %S.ast.Type %t250, ptr %t254 store i64 %t252, ptr %t246 call void @finch.drop.S_ast_Type(ptr %a240) br label %each.step7961 each.step7961: %t255 = load i64, ptr %a227 %t256 = add i64 %t255, 1 store i64 %t256, ptr %a227 br label %each.cond7959 each.end7962: %t257 = load ptr, ptr %a1 %t258 = load %S.ast.Type, ptr %a219 %t259 = load { ptr, i64, i64 }, ptr %a225 %t260 = call %S.gen.Plan @finch.gen.makePlan(ptr %t257, %S.ast.Type %t258, { ptr, i64, i64 } %t259) store %S.gen.Plan %t260, ptr %a261 store { ptr, i64, i64 } zeroinitializer, ptr %a262 store { ptr, i64, i64 } zeroinitializer, ptr %a263 store { ptr, i64, i64 } { ptr @.str.5041, i64 0, i64 0 }, ptr %a264 %t265 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 3 %t266 = load i1, ptr %t265 br i1 %t266, label %then7963, label %endif7965 then7963: %t267 = load ptr, ptr %a1 %t268 = load ptr, ptr %a1 %t269 = load %S.ast.Type, ptr %a219 %t270 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t268, %S.ast.Type %t269) %t271 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t267, { ptr, i64, i64 } %t270) store { ptr, i64, i64 } %t270, ptr %a272 call void @finch_str_drop(ptr %a272) %t273 = load { ptr, i64, i64 }, ptr %a264 store { ptr, i64, i64 } %t271, ptr %a264 store { ptr, i64, i64 } %t273, ptr %a274 call void @finch_str_drop(ptr %a274) %t275 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 %t276 = load ptr, ptr %a1 %t277 = load %S.ast.Type, ptr %a219 %t278 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t276, %S.ast.Type %t277) store { ptr, i64, i64 } { ptr @.str.5042, i64 9, i64 0 }, ptr %a280 store { ptr, i64, i64 } %t278, ptr %a281 call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) store { ptr, i64, i64 } %t278, ptr %a282 call void @finch_str_drop(ptr %a282) %t283 = load { ptr, i64, i64 }, ptr %a279 store { ptr, i64, i64 } %t283, ptr %a285 store { ptr, i64, i64 } { ptr @.str.5043, i64 10, i64 0 }, ptr %a286 call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) store { ptr, i64, i64 } %t283, ptr %a287 call void @finch_str_drop(ptr %a287) %t288 = load { ptr, i64, i64 }, ptr %a284 %t289 = load i64, ptr %t275 %t290 = add i64 %t289, 1 call void @finch_arr_reserve(ptr %a262, i64 %t290, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t291 = load ptr, ptr %a262 %t292 = getelementptr inbounds { ptr, i64, i64 }, ptr %t291, i64 %t289 store { ptr, i64, i64 } %t288, ptr %t292 store i64 %t290, ptr %t275 %t293 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 %t294 = load ptr, ptr %a1 %t295 = load %S.ast.Type, ptr %a219 %t296 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t294, %S.ast.Type %t295) store { ptr, i64, i64 } { ptr @.str.5044, i64 9, i64 0 }, ptr %a298 store { ptr, i64, i64 } %t296, ptr %a299 call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) store { ptr, i64, i64 } %t296, ptr %a300 call void @finch_str_drop(ptr %a300) %t301 = load { ptr, i64, i64 }, ptr %a297 store { ptr, i64, i64 } %t301, ptr %a303 store { ptr, i64, i64 } { ptr @.str.5045, i64 11, i64 0 }, ptr %a304 call void @finch_str_concat(ptr %a302, ptr %a303, ptr %a304) store { ptr, i64, i64 } %t301, ptr %a305 call void @finch_str_drop(ptr %a305) %t306 = load { ptr, i64, i64 }, ptr %a302 %t307 = load { ptr, i64, i64 }, ptr %a264 store { ptr, i64, i64 } %t306, ptr %a309 store { ptr, i64, i64 } %t307, ptr %a310 call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) store { ptr, i64, i64 } %t306, ptr %a311 call void @finch_str_drop(ptr %a311) %t312 = load { ptr, i64, i64 }, ptr %a308 %t313 = load i64, ptr %t293 %t314 = add i64 %t313, 1 call void @finch_arr_reserve(ptr %a263, i64 %t314, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t315 = load ptr, ptr %a263 %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t315, i64 %t313 store { ptr, i64, i64 } %t312, ptr %t316 store i64 %t314, ptr %t293 br label %endif7965 endif7965: store { ptr, i64, i64 } zeroinitializer, ptr %a317 %t318 = load ptr, ptr %a1 %t319 = icmp eq ptr %t318, null br i1 %t319, label %panic7966, label %ok7967 panic7966: call void @finch_panic(ptr @.str.5046, i64 4693, ptr @.str.5047) unreachable ok7967: %t320 = getelementptr inbounds %S.gen.Gen, ptr %t318, i32 0, i32 11 %t321 = getelementptr inbounds { ptr, i64, i64 }, ptr %t320, i32 0, i32 1 %t322 = load i64, ptr %t321 store i64 %t322, ptr %a323 %t324 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %t324, i32 0, i32 1 %t326 = load i64, ptr %t325 store i64 0, ptr %a327 br label %for.cond7968 for.cond7968: %t328 = load i64, ptr %a327 %t329 = icmp slt i64 %t328, %t326 br i1 %t329, label %for.body7969, label %for.end7971 for.body7969: %t330 = load i64, ptr %a327 %t331 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i32 0, i32 1 %t333 = load i64, ptr %t332 %t334 = icmp slt i64 %t330, %t333 br i1 %t334, label %then7972, label %endif7974 then7972: %t335 = load i64, ptr %a327 %t336 = load { ptr, i64, i64 }, ptr %a225 %t337 = extractvalue { ptr, i64, i64 } %t336, 1 %t338 = icmp uge i64 %t335, %t337 br i1 %t338, label %range7975, label %inrange7976 range7975: call void @finch_panic_index(ptr @.str.5048, i64 4696, i64 %t335, i64 %t337) unreachable inrange7976: %t339 = extractvalue { ptr, i64, i64 } %t336, 0 %t340 = getelementptr inbounds %S.ast.Type, ptr %t339, i64 %t335 %t341 = load %S.ast.Type, ptr %t340 store %S.ast.Type %t341, ptr %a342 call void @finch.copy.S_ast_Type(ptr %a343, ptr %a342) %t344 = load %S.ast.Type, ptr %a343 store %S.ast.Type %t344, ptr %a345 %t346 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 1 %t347 = load i64, ptr %a327 %t348 = load { ptr, i64, i64 }, ptr %t346 %t349 = extractvalue { ptr, i64, i64 } %t348, 1 %t350 = icmp uge i64 %t347, %t349 br i1 %t350, label %range7977, label %inrange7978 range7977: call void @finch_panic_index(ptr @.str.5049, i64 4697, i64 %t347, i64 %t349) unreachable inrange7978: %t351 = extractvalue { ptr, i64, i64 } %t348, 0 %t352 = getelementptr inbounds %S.gen.Abi, ptr %t351, i64 %t347 %t353 = load %S.gen.Abi, ptr %t352 store %S.gen.Abi %t353, ptr %a354 call void @finch.copy.S_gen_Abi(ptr %a355, ptr %a354) %t356 = load %S.gen.Abi, ptr %a355 store %S.gen.Abi %t356, ptr %a357 %t358 = load ptr, ptr %a1 %t359 = load ptr, ptr %a1 %t360 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t361 = load i64, ptr %a327 %t362 = load { ptr, i64, i64 }, ptr %t360 %t363 = extractvalue { ptr, i64, i64 } %t362, 1 %t364 = icmp uge i64 %t361, %t363 br i1 %t364, label %range7979, label %inrange7980 range7979: call void @finch_panic_index(ptr @.str.5050, i64 4698, i64 %t361, i64 %t363) unreachable inrange7980: %t365 = extractvalue { ptr, i64, i64 } %t362, 0 %t366 = getelementptr inbounds %S.ast.Node, ptr %t365, i64 %t361 %t367 = load %S.ast.Node, ptr %t366 %t368 = load %S.ast.Type, ptr %a345 %t369 = call %S.gen.Val @finch.gen.exprWant(ptr %t359, %S.ast.Node %t367, %S.ast.Type %t368) %t370 = load %S.ast.Type, ptr %a345 %t371 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t372 = load i64, ptr %a327 %t373 = load { ptr, i64, i64 }, ptr %t371 %t374 = extractvalue { ptr, i64, i64 } %t373, 1 %t375 = icmp uge i64 %t372, %t374 br i1 %t375, label %range7981, label %inrange7982 range7981: call void @finch_panic_index(ptr @.str.5051, i64 4698, i64 %t372, i64 %t374) unreachable inrange7982: %t376 = extractvalue { ptr, i64, i64 } %t373, 0 %t377 = getelementptr inbounds %S.ast.Node, ptr %t376, i64 %t372 %t378 = load %S.ast.Node, ptr %t377 %t379 = load i64, ptr %a327 %t380 = add i64 %t379, 1 call void @finch_str_from_int(ptr %a381, i64 %t380) %t382 = load { ptr, i64, i64 }, ptr %a381 store { ptr, i64, i64 } { ptr @.str.5052, i64 9, i64 0 }, ptr %a384 store { ptr, i64, i64 } %t382, ptr %a385 call void @finch_str_concat(ptr %a383, ptr %a384, ptr %a385) store { ptr, i64, i64 } %t382, ptr %a386 call void @finch_str_drop(ptr %a386) %t387 = load { ptr, i64, i64 }, ptr %a383 store { ptr, i64, i64 } %t387, ptr %a389 store { ptr, i64, i64 } { ptr @.str.5053, i64 4, i64 0 }, ptr %a390 call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390) store { ptr, i64, i64 } %t387, ptr %a391 call void @finch_str_drop(ptr %a391) %t392 = load { ptr, i64, i64 }, ptr %a388 %t393 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t394 = load { ptr, i64, i64 }, ptr %t393 store { ptr, i64, i64 } %t392, ptr %a396 store { ptr, i64, i64 } %t394, ptr %a397 call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397) store { ptr, i64, i64 } %t392, ptr %a398 call void @finch_str_drop(ptr %a398) %t399 = load { ptr, i64, i64 }, ptr %a395 %t400 = call %S.gen.Val @finch.gen.coerce(ptr %t358, %S.gen.Val %t369, %S.ast.Type %t370, %S.ast.Node %t378, { ptr, i64, i64 } %t399) store %S.gen.Val %t369, ptr %a401 call void @finch.drop.S_gen_Val(ptr %a401) store { ptr, i64, i64 } %t399, ptr %a402 call void @finch_str_drop(ptr %a402) store %S.gen.Val %t400, ptr %a403 %t404 = getelementptr inbounds { ptr, i64, i64 }, ptr %a317, i32 0, i32 1 %t405 = load %S.gen.Val, ptr %a403 store %S.gen.Val %t405, ptr %a406 call void @finch.copy.S_gen_Val(ptr %a407, ptr %a406) %t408 = load %S.gen.Val, ptr %a407 %t409 = load i64, ptr %t404 %t410 = add i64 %t409, 1 call void @finch_arr_reserve(ptr %a317, i64 %t410, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64)) %t411 = load ptr, ptr %a317 %t412 = getelementptr inbounds %S.gen.Val, ptr %t411, i64 %t409 store %S.gen.Val %t408, ptr %t412 store i64 %t410, ptr %t404 %t413 = load ptr, ptr %a1 %t414 = load %S.gen.Val, ptr %a403 call void @finch.gen.hold(ptr %t413, %S.gen.Val %t414) %t415 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 0 %t416 = load { ptr, i64, i64 }, ptr %t415 store { ptr, i64, i64 } %t416, ptr %a417 store { ptr, i64, i64 } { ptr @.str.5054, i64 6, i64 0 }, ptr %a418 %t419 = call i32 @finch_str_eq(ptr %a417, ptr %a418) %t420 = icmp ne i32 %t419, 0 br i1 %t420, label %then7983, label %else7984 then7983: %t421 = load ptr, ptr %a1 %t422 = load ptr, ptr %a1 %t423 = load %S.ast.Type, ptr %a345 %t424 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t422, %S.ast.Type %t423) %t425 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t421, { ptr, i64, i64 } %t424) store { ptr, i64, i64 } %t424, ptr %a426 call void @finch_str_drop(ptr %a426) store { ptr, i64, i64 } %t425, ptr %a427 %t428 = load ptr, ptr %a1 %t429 = load ptr, ptr %a1 %t430 = load %S.ast.Type, ptr %a345 %t431 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t429, %S.ast.Type %t430) %t432 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 %t433 = load { ptr, i64, i64 }, ptr %t432 %t434 = load { ptr, i64, i64 }, ptr %a427 call void @finch.gen.store(ptr %t428, { ptr, i64, i64 } %t431, { ptr, i64, i64 } %t433, { ptr, i64, i64 } %t434) store { ptr, i64, i64 } %t431, ptr %a435 call void @finch_str_drop(ptr %a435) %t436 = load ptr, ptr %a1 %t437 = load %S.ast.Type, ptr %a345 %t438 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t436, %S.ast.Type %t437) store { ptr, i64, i64 } { ptr @.str.5055, i64 10, i64 0 }, ptr %a440 store { ptr, i64, i64 } %t438, ptr %a441 call void @finch_str_concat(ptr %a439, ptr %a440, ptr %a441) store { ptr, i64, i64 } %t438, ptr %a442 call void @finch_str_drop(ptr %a442) %t443 = load { ptr, i64, i64 }, ptr %a439 store { ptr, i64, i64 } %t443, ptr %a445 store { ptr, i64, i64 } { ptr @.str.5056, i64 8, i64 0 }, ptr %a446 call void @finch_str_concat(ptr %a444, ptr %a445, ptr %a446) store { ptr, i64, i64 } %t443, ptr %a447 call void @finch_str_drop(ptr %a447) %t448 = load { ptr, i64, i64 }, ptr %a444 %t449 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 3 %t450 = load i64, ptr %t449 call void @finch_str_from_int(ptr %a451, i64 %t450) %t452 = load { ptr, i64, i64 }, ptr %a451 store { ptr, i64, i64 } %t448, ptr %a454 store { ptr, i64, i64 } %t452, ptr %a455 call void @finch_str_concat(ptr %a453, ptr %a454, ptr %a455) store { ptr, i64, i64 } %t448, ptr %a456 call void @finch_str_drop(ptr %a456) store { ptr, i64, i64 } %t452, ptr %a457 call void @finch_str_drop(ptr %a457) %t458 = load { ptr, i64, i64 }, ptr %a453 store { ptr, i64, i64 } %t458, ptr %a459 %t460 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 %t461 = load { ptr, i64, i64 }, ptr %a459 store { ptr, i64, i64 } %t461, ptr %a462 call void @finch_str_copy(ptr %a463, ptr %a462) %t464 = load { ptr, i64, i64 }, ptr %a463 %t465 = load i64, ptr %t460 %t466 = add i64 %t465, 1 call void @finch_arr_reserve(ptr %a262, i64 %t466, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t467 = load ptr, ptr %a262 %t468 = getelementptr inbounds { ptr, i64, i64 }, ptr %t467, i64 %t465 store { ptr, i64, i64 } %t464, ptr %t468 store i64 %t466, ptr %t460 %t469 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 %t470 = load { ptr, i64, i64 }, ptr %a459 store { ptr, i64, i64 } %t470, ptr %a472 store { ptr, i64, i64 } { ptr @.str.5057, i64 1, i64 0 }, ptr %a473 call void @finch_str_concat(ptr %a471, ptr %a472, ptr %a473) %t474 = load { ptr, i64, i64 }, ptr %a471 %t475 = load { ptr, i64, i64 }, ptr %a427 store { ptr, i64, i64 } %t474, ptr %a477 store { ptr, i64, i64 } %t475, ptr %a478 call void @finch_str_concat(ptr %a476, ptr %a477, ptr %a478) store { ptr, i64, i64 } %t474, ptr %a479 call void @finch_str_drop(ptr %a479) %t480 = load { ptr, i64, i64 }, ptr %a476 %t481 = load i64, ptr %t469 %t482 = add i64 %t481, 1 call void @finch_arr_reserve(ptr %a263, i64 %t482, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t483 = load ptr, ptr %a263 %t484 = getelementptr inbounds { ptr, i64, i64 }, ptr %t483, i64 %t481 store { ptr, i64, i64 } %t480, ptr %t484 store i64 %t482, ptr %t469 call void @finch_str_drop(ptr %a459) call void @finch_str_drop(ptr %a427) br label %endif7985 else7984: %t485 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 0 %t486 = load { ptr, i64, i64 }, ptr %t485 store { ptr, i64, i64 } %t486, ptr %a487 store { ptr, i64, i64 } { ptr @.str.5058, i64 8, i64 0 }, ptr %a488 %t489 = call i32 @finch_str_eq(ptr %a487, ptr %a488) %t490 = icmp ne i32 %t489, 0 br i1 %t490, label %then7986, label %else7987 then7986: %t491 = load ptr, ptr %a1 %t492 = load ptr, ptr %a1 %t493 = load %S.ast.Type, ptr %a345 %t494 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t492, %S.ast.Type %t493) %t495 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t491, { ptr, i64, i64 } %t494) store { ptr, i64, i64 } %t494, ptr %a496 call void @finch_str_drop(ptr %a496) store { ptr, i64, i64 } %t495, ptr %a497 %t498 = load ptr, ptr %a1 %t499 = load ptr, ptr %a1 %t500 = load %S.ast.Type, ptr %a345 %t501 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t499, %S.ast.Type %t500) %t502 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 %t503 = load { ptr, i64, i64 }, ptr %t502 %t504 = load { ptr, i64, i64 }, ptr %a497 call void @finch.gen.store(ptr %t498, { ptr, i64, i64 } %t501, { ptr, i64, i64 } %t503, { ptr, i64, i64 } %t504) store { ptr, i64, i64 } %t501, ptr %a505 call void @finch_str_drop(ptr %a505) %t506 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 %t507 = load i64, ptr %t506 %t508 = add i64 %t507, 1 call void @finch_arr_reserve(ptr %a262, i64 %t508, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t509 = load ptr, ptr %a262 %t510 = getelementptr inbounds { ptr, i64, i64 }, ptr %t509, i64 %t507 store { ptr, i64, i64 } { ptr @.str.5059, i64 3, i64 0 }, ptr %t510 store i64 %t508, ptr %t506 %t511 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 %t512 = load { ptr, i64, i64 }, ptr %a497 store { ptr, i64, i64 } { ptr @.str.5060, i64 4, i64 0 }, ptr %a514 store { ptr, i64, i64 } %t512, ptr %a515 call void @finch_str_concat(ptr %a513, ptr %a514, ptr %a515) %t516 = load { ptr, i64, i64 }, ptr %a513 %t517 = load i64, ptr %t511 %t518 = add i64 %t517, 1 call void @finch_arr_reserve(ptr %a263, i64 %t518, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t519 = load ptr, ptr %a263 %t520 = getelementptr inbounds { ptr, i64, i64 }, ptr %t519, i64 %t517 store { ptr, i64, i64 } %t516, ptr %t520 store i64 %t518, ptr %t511 call void @finch_str_drop(ptr %a497) br label %endif7988 else7987: %t521 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 0 %t522 = load { ptr, i64, i64 }, ptr %t521 store { ptr, i64, i64 } %t522, ptr %a523 store { ptr, i64, i64 } { ptr @.str.5061, i64 6, i64 0 }, ptr %a524 %t525 = call i32 @finch_str_eq(ptr %a523, ptr %a524) %t526 = icmp ne i32 %t525, 0 br i1 %t526, label %then7989, label %else7990 then7989: %t527 = load ptr, ptr %a1 %t528 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t527, { ptr, i64, i64 } { ptr @.str.5062, i64 9, i64 0 }) store { ptr, i64, i64 } %t528, ptr %a529 %t530 = load ptr, ptr %a1 %t531 = load ptr, ptr %a1 %t532 = load %S.ast.Type, ptr %a345 %t533 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t531, %S.ast.Type %t532) %t534 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 %t535 = load { ptr, i64, i64 }, ptr %t534 %t536 = load { ptr, i64, i64 }, ptr %a529 call void @finch.gen.store(ptr %t530, { ptr, i64, i64 } %t533, { ptr, i64, i64 } %t535, { ptr, i64, i64 } %t536) store { ptr, i64, i64 } %t533, ptr %a537 call void @finch_str_drop(ptr %a537) %t538 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 %t539 = getelementptr inbounds { ptr, i64, i64 }, ptr %t538, i32 0, i32 1 %t540 = load i64, ptr %t539 store i64 0, ptr %a541 br label %for.cond7992 for.cond7992: %t542 = load i64, ptr %a541 %t543 = icmp slt i64 %t542, %t540 br i1 %t543, label %for.body7993, label %for.end7995 for.body7993: %t544 = load ptr, ptr %a1 %t545 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 %t546 = load i64, ptr %a541 %t547 = load { ptr, i64, i64 }, ptr %t545 %t548 = extractvalue { ptr, i64, i64 } %t547, 1 %t549 = icmp uge i64 %t546, %t548 br i1 %t549, label %range7996, label %inrange7997 range7996: call void @finch_panic_index(ptr @.str.5063, i64 4716, i64 %t546, i64 %t548) unreachable inrange7997: %t550 = extractvalue { ptr, i64, i64 } %t547, 0 %t551 = getelementptr inbounds { ptr, i64, i64 }, ptr %t550, i64 %t546 %t552 = load { ptr, i64, i64 }, ptr %t551 %t553 = load ptr, ptr %a1 %t554 = load { ptr, i64, i64 }, ptr %a529 store { ptr, i64, i64 } { ptr @.str.5064, i64 31, i64 0 }, ptr %a556 store { ptr, i64, i64 } %t554, ptr %a557 call void @finch_str_concat(ptr %a555, ptr %a556, ptr %a557) %t558 = load { ptr, i64, i64 }, ptr %a555 store { ptr, i64, i64 } %t558, ptr %a560 store { ptr, i64, i64 } { ptr @.str.5065, i64 6, i64 0 }, ptr %a561 call void @finch_str_concat(ptr %a559, ptr %a560, ptr %a561) store { ptr, i64, i64 } %t558, ptr %a562 call void @finch_str_drop(ptr %a562) %t563 = load { ptr, i64, i64 }, ptr %a559 %t564 = load i64, ptr %a541 %t565 = mul i64 8, %t564 call void @finch_str_from_int(ptr %a566, i64 %t565) %t567 = load { ptr, i64, i64 }, ptr %a566 store { ptr, i64, i64 } %t563, ptr %a569 store { ptr, i64, i64 } %t567, ptr %a570 call void @finch_str_concat(ptr %a568, ptr %a569, ptr %a570) store { ptr, i64, i64 } %t563, ptr %a571 call void @finch_str_drop(ptr %a571) store { ptr, i64, i64 } %t567, ptr %a572 call void @finch_str_drop(ptr %a572) %t573 = load { ptr, i64, i64 }, ptr %a568 %t574 = call { ptr, i64, i64 } @finch.gen.op(ptr %t553, { ptr, i64, i64 } %t573) store { ptr, i64, i64 } %t573, ptr %a575 call void @finch_str_drop(ptr %a575) %t576 = call { ptr, i64, i64 } @finch.gen.load(ptr %t544, { ptr, i64, i64 } %t552, { ptr, i64, i64 } %t574) store { ptr, i64, i64 } %t574, ptr %a577 call void @finch_str_drop(ptr %a577) store { ptr, i64, i64 } %t576, ptr %a578 %t579 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 %t580 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 %t581 = load i64, ptr %a541 %t582 = load { ptr, i64, i64 }, ptr %t580 %t583 = extractvalue { ptr, i64, i64 } %t582, 1 %t584 = icmp uge i64 %t581, %t583 br i1 %t584, label %range7998, label %inrange7999 range7998: call void @finch_panic_index(ptr @.str.5066, i64 4717, i64 %t581, i64 %t583) unreachable inrange7999: %t585 = extractvalue { ptr, i64, i64 } %t582, 0 %t586 = getelementptr inbounds { ptr, i64, i64 }, ptr %t585, i64 %t581 %t587 = load { ptr, i64, i64 }, ptr %t586 store { ptr, i64, i64 } %t587, ptr %a588 call void @finch_str_copy(ptr %a589, ptr %a588) %t590 = load { ptr, i64, i64 }, ptr %a589 %t591 = load i64, ptr %t579 %t592 = add i64 %t591, 1 call void @finch_arr_reserve(ptr %a262, i64 %t592, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t593 = load ptr, ptr %a262 %t594 = getelementptr inbounds { ptr, i64, i64 }, ptr %t593, i64 %t591 store { ptr, i64, i64 } %t590, ptr %t594 store i64 %t592, ptr %t579 %t595 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 %t596 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 %t597 = load i64, ptr %a541 %t598 = load { ptr, i64, i64 }, ptr %t596 %t599 = extractvalue { ptr, i64, i64 } %t598, 1 %t600 = icmp uge i64 %t597, %t599 br i1 %t600, label %range8000, label %inrange8001 range8000: call void @finch_panic_index(ptr @.str.5067, i64 4718, i64 %t597, i64 %t599) unreachable inrange8001: %t601 = extractvalue { ptr, i64, i64 } %t598, 0 %t602 = getelementptr inbounds { ptr, i64, i64 }, ptr %t601, i64 %t597 %t603 = load { ptr, i64, i64 }, ptr %t602 store { ptr, i64, i64 } %t603, ptr %a605 store { ptr, i64, i64 } { ptr @.str.5068, i64 1, i64 0 }, ptr %a606 call void @finch_str_concat(ptr %a604, ptr %a605, ptr %a606) %t607 = load { ptr, i64, i64 }, ptr %a604 %t608 = load { ptr, i64, i64 }, ptr %a578 store { ptr, i64, i64 } %t607, ptr %a610 store { ptr, i64, i64 } %t608, ptr %a611 call void @finch_str_concat(ptr %a609, ptr %a610, ptr %a611) store { ptr, i64, i64 } %t607, ptr %a612 call void @finch_str_drop(ptr %a612) %t613 = load { ptr, i64, i64 }, ptr %a609 %t614 = load i64, ptr %t595 %t615 = add i64 %t614, 1 call void @finch_arr_reserve(ptr %a263, i64 %t615, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t616 = load ptr, ptr %a263 %t617 = getelementptr inbounds { ptr, i64, i64 }, ptr %t616, i64 %t614 store { ptr, i64, i64 } %t613, ptr %t617 store i64 %t615, ptr %t595 call void @finch_str_drop(ptr %a578) br label %for.step7994 for.step7994: %t618 = load i64, ptr %a541 %t619 = add i64 %t618, 1 store i64 %t619, ptr %a541 br label %for.cond7992 for.end7995: call void @finch_str_drop(ptr %a529) br label %endif7991 else7990: %t620 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 %t621 = load ptr, ptr %a1 %t622 = load %S.ast.Type, ptr %a345 %t623 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t621, %S.ast.Type %t622) %t624 = load ptr, ptr %a1 %t625 = load %S.ast.Type, ptr %a345 %t626 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t624, %S.ast.Type %t625) store { ptr, i64, i64 } %t623, ptr %a628 store { ptr, i64, i64 } %t626, ptr %a629 call void @finch_str_concat(ptr %a627, ptr %a628, ptr %a629) store { ptr, i64, i64 } %t623, ptr %a630 call void @finch_str_drop(ptr %a630) store { ptr, i64, i64 } %t626, ptr %a631 call void @finch_str_drop(ptr %a631) %t632 = load { ptr, i64, i64 }, ptr %a627 %t633 = load i64, ptr %t620 %t634 = add i64 %t633, 1 call void @finch_arr_reserve(ptr %a262, i64 %t634, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t635 = load ptr, ptr %a262 %t636 = getelementptr inbounds { ptr, i64, i64 }, ptr %t635, i64 %t633 store { ptr, i64, i64 } %t632, ptr %t636 store i64 %t634, ptr %t620 %t637 = getelementptr inbounds %S.ast.Type, ptr %a345, i32 0, i32 0 %t638 = load { ptr, i64, i64 }, ptr %t637 store { ptr, i64, i64 } %t638, ptr %a639 store { ptr, i64, i64 } { ptr @.str.5069, i64 3, i64 0 }, ptr %a640 %t641 = call i32 @finch_str_eq(ptr %a639, ptr %a640) %t642 = icmp ne i32 %t641, 0 br i1 %t642, label %then8002, label %else8003 then8002: %t643 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 %t644 = load ptr, ptr %a1 %t645 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 %t646 = load { ptr, i64, i64 }, ptr %t645 %t647 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t644, { ptr, i64, i64 } %t646) store { ptr, i64, i64 } { ptr @.str.5070, i64 4, i64 0 }, ptr %a649 store { ptr, i64, i64 } %t647, ptr %a650 call void @finch_str_concat(ptr %a648, ptr %a649, ptr %a650) store { ptr, i64, i64 } %t647, ptr %a651 call void @finch_str_drop(ptr %a651) %t652 = load { ptr, i64, i64 }, ptr %a648 %t653 = load i64, ptr %t643 %t654 = add i64 %t653, 1 call void @finch_arr_reserve(ptr %a263, i64 %t654, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t655 = load ptr, ptr %a263 %t656 = getelementptr inbounds { ptr, i64, i64 }, ptr %t655, i64 %t653 store { ptr, i64, i64 } %t652, ptr %t656 store i64 %t654, ptr %t643 br label %endif8004 else8003: %t657 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 %t658 = load ptr, ptr %a1 %t659 = load %S.ast.Type, ptr %a345 %t660 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t658, %S.ast.Type %t659) %t661 = load ptr, ptr %a1 %t662 = load %S.ast.Type, ptr %a345 %t663 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t661, %S.ast.Type %t662) store { ptr, i64, i64 } %t660, ptr %a665 store { ptr, i64, i64 } %t663, ptr %a666 call void @finch_str_concat(ptr %a664, ptr %a665, ptr %a666) store { ptr, i64, i64 } %t660, ptr %a667 call void @finch_str_drop(ptr %a667) store { ptr, i64, i64 } %t663, ptr %a668 call void @finch_str_drop(ptr %a668) %t669 = load { ptr, i64, i64 }, ptr %a664 store { ptr, i64, i64 } %t669, ptr %a671 store { ptr, i64, i64 } { ptr @.str.5071, i64 1, i64 0 }, ptr %a672 call void @finch_str_concat(ptr %a670, ptr %a671, ptr %a672) store { ptr, i64, i64 } %t669, ptr %a673 call void @finch_str_drop(ptr %a673) %t674 = load { ptr, i64, i64 }, ptr %a670 %t675 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 %t676 = load { ptr, i64, i64 }, ptr %t675 store { ptr, i64, i64 } %t674, ptr %a678 store { ptr, i64, i64 } %t676, ptr %a679 call void @finch_str_concat(ptr %a677, ptr %a678, ptr %a679) store { ptr, i64, i64 } %t674, ptr %a680 call void @finch_str_drop(ptr %a680) %t681 = load { ptr, i64, i64 }, ptr %a677 %t682 = load i64, ptr %t657 %t683 = add i64 %t682, 1 call void @finch_arr_reserve(ptr %a263, i64 %t683, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t684 = load ptr, ptr %a263 %t685 = getelementptr inbounds { ptr, i64, i64 }, ptr %t684, i64 %t682 store { ptr, i64, i64 } %t681, ptr %t685 store i64 %t683, ptr %t657 br label %endif8004 endif8004: br label %endif7991 endif7991: br label %endif7988 endif7988: br label %endif7985 endif7985: call void @finch.drop.S_gen_Val(ptr %a403) call void @finch.drop.S_gen_Abi(ptr %a357) call void @finch.drop.S_ast_Type(ptr %a345) br label %for.step7970 endif7974: %t686 = load ptr, ptr %a1 %t687 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t688 = load i64, ptr %a327 %t689 = load { ptr, i64, i64 }, ptr %t687 %t690 = extractvalue { ptr, i64, i64 } %t689, 1 %t691 = icmp uge i64 %t688, %t690 br i1 %t691, label %range8005, label %inrange8006 range8005: call void @finch_panic_index(ptr @.str.5072, i64 4731, i64 %t688, i64 %t690) unreachable inrange8006: %t692 = extractvalue { ptr, i64, i64 } %t689, 0 %t693 = getelementptr inbounds %S.ast.Node, ptr %t692, i64 %t688 %t694 = load %S.ast.Node, ptr %t693 %t695 = call %S.gen.Val @finch.gen.expr(ptr %t686, %S.ast.Node %t694) store %S.gen.Val %t695, ptr %a696 %t697 = getelementptr inbounds %S.gen.Val, ptr %a696, i32 0, i32 1 %t698 = load %S.ast.Type, ptr %t697 store %S.ast.Type %t698, ptr %a699 call void @finch.copy.S_ast_Type(ptr %a700, ptr %a699) %t701 = load %S.ast.Type, ptr %a700 store %S.ast.Type %t701, ptr %a702 %t703 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 %t704 = load { ptr, i64, i64 }, ptr %t703 store { ptr, i64, i64 } %t704, ptr %a705 store { ptr, i64, i64 } { ptr @.str.5073, i64 4, i64 0 }, ptr %a706 %t707 = call i32 @finch_str_eq(ptr %a705, ptr %a706) %t708 = icmp ne i32 %t707, 0 br i1 %t708, label %then8007, label %endif8009 then8007: %t709 = load ptr, ptr %a1 %t710 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t711 = load i64, ptr %a327 %t712 = load { ptr, i64, i64 }, ptr %t710 %t713 = extractvalue { ptr, i64, i64 } %t712, 1 %t714 = icmp uge i64 %t711, %t713 br i1 %t714, label %range8010, label %inrange8011 range8010: call void @finch_panic_index(ptr @.str.5074, i64 4734, i64 %t711, i64 %t713) unreachable inrange8011: %t715 = extractvalue { ptr, i64, i64 } %t712, 0 %t716 = getelementptr inbounds %S.ast.Node, ptr %t715, i64 %t711 %t717 = load %S.ast.Node, ptr %t716 call void @finch.gen.fail(ptr %t709, %S.ast.Node %t717, { ptr, i64, i64 } { ptr @.str.5075, i64 23, i64 0 }) br label %endif8009 endif8009: %t718 = getelementptr inbounds { ptr, i64, i64 }, ptr %a317, i32 0, i32 1 %t719 = load %S.gen.Val, ptr %a696 store %S.gen.Val %t719, ptr %a720 call void @finch.copy.S_gen_Val(ptr %a721, ptr %a720) %t722 = load %S.gen.Val, ptr %a721 %t723 = load i64, ptr %t718 %t724 = add i64 %t723, 1 call void @finch_arr_reserve(ptr %a317, i64 %t724, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64)) %t725 = load ptr, ptr %a317 %t726 = getelementptr inbounds %S.gen.Val, ptr %t725, i64 %t723 store %S.gen.Val %t722, ptr %t726 store i64 %t724, ptr %t718 %t727 = load ptr, ptr %a1 %t728 = load %S.gen.Val, ptr %a696 call void @finch.gen.hold(ptr %t727, %S.gen.Val %t728) %t729 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 %t730 = load { ptr, i64, i64 }, ptr %t729 store { ptr, i64, i64 } %t730, ptr %a731 store { ptr, i64, i64 } { ptr @.str.5076, i64 6, i64 0 }, ptr %a732 %t733 = call i32 @finch_str_eq(ptr %a731, ptr %a732) %t734 = icmp ne i32 %t733, 0 br label %logic.from8012 logic.from8012: br i1 %t734, label %logic.end8014, label %logic.rhs8013 logic.rhs8013: %t735 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 %t736 = load { ptr, i64, i64 }, ptr %t735 store { ptr, i64, i64 } %t736, ptr %a737 store { ptr, i64, i64 } { ptr @.str.5077, i64 5, i64 0 }, ptr %a738 %t739 = call i32 @finch_str_eq(ptr %a737, ptr %a738) %t740 = icmp ne i32 %t739, 0 br label %logic.rend8015 logic.rend8015: br label %logic.end8014 logic.end8014: %t741 = phi i1 [ true, %logic.from8012 ], [ %t740, %logic.rend8015 ] br i1 %t741, label %then8016, label %endif8018 then8016: %t742 = load ptr, ptr %a1 %t743 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t744 = load i64, ptr %a327 %t745 = load { ptr, i64, i64 }, ptr %t743 %t746 = extractvalue { ptr, i64, i64 } %t745, 1 %t747 = icmp uge i64 %t744, %t746 br i1 %t747, label %range8019, label %inrange8020 range8019: call void @finch_panic_index(ptr @.str.5078, i64 4739, i64 %t744, i64 %t746) unreachable inrange8020: %t748 = extractvalue { ptr, i64, i64 } %t745, 0 %t749 = getelementptr inbounds %S.ast.Node, ptr %t748, i64 %t744 %t750 = load %S.ast.Node, ptr %t749 call void @finch.gen.fail(ptr %t742, %S.ast.Node %t750, { ptr, i64, i64 } { ptr @.str.5079, i64 68, i64 0 }) br label %endif8018 endif8018: %t751 = getelementptr inbounds %S.gen.Val, ptr %a696, i32 0, i32 0 %t752 = load { ptr, i64, i64 }, ptr %t751 store { ptr, i64, i64 } %t752, ptr %a753 call void @finch_str_copy(ptr %a754, ptr %a753) %t755 = load { ptr, i64, i64 }, ptr %a754 store { ptr, i64, i64 } %t755, ptr %a756 %t757 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 %t758 = load { ptr, i64, i64 }, ptr %t757 store { ptr, i64, i64 } %t758, ptr %a759 store { ptr, i64, i64 } { ptr @.str.5080, i64 3, i64 0 }, ptr %a760 %t761 = call i32 @finch_str_eq(ptr %a759, ptr %a760) %t762 = icmp ne i32 %t761, 0 br i1 %t762, label %then8021, label %else8022 then8021: %t763 = load ptr, ptr %a1 %t764 = load { ptr, i64, i64 }, ptr %a756 %t765 = load %S.ast.Type, ptr %a702 %t766 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5081, i64 5, i64 0 }) %t767 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t763, { ptr, i64, i64 } %t764, %S.ast.Type %t765, %S.ast.Type %t766) store %S.ast.Type %t766, ptr %a768 call void @finch.drop.S_ast_Type(ptr %a768) %t769 = load { ptr, i64, i64 }, ptr %a756 store { ptr, i64, i64 } %t767, ptr %a756 store { ptr, i64, i64 } %t769, ptr %a770 call void @finch_str_drop(ptr %a770) %t771 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5082, i64 5, i64 0 }) %t772 = load %S.ast.Type, ptr %a702 store %S.ast.Type %t771, ptr %a702 store %S.ast.Type %t772, ptr %a773 call void @finch.drop.S_ast_Type(ptr %a773) br label %endif8023 else8022: %t774 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 %t775 = load { ptr, i64, i64 }, ptr %t774 store { ptr, i64, i64 } %t775, ptr %a776 store { ptr, i64, i64 } { ptr @.str.5083, i64 3, i64 0 }, ptr %a777 %t778 = call i32 @finch_str_eq(ptr %a776, ptr %a777) %t779 = icmp ne i32 %t778, 0 br i1 %t779, label %then8024, label %else8025 then8024: %t780 = load ptr, ptr %a1 %t781 = load { ptr, i64, i64 }, ptr %a756 %t782 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t780, { ptr, i64, i64 } %t781) %t783 = load { ptr, i64, i64 }, ptr %a756 store { ptr, i64, i64 } %t782, ptr %a756 store { ptr, i64, i64 } %t783, ptr %a784 call void @finch_str_drop(ptr %a784) %t785 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5084, i64 3, i64 0 }) %t786 = load %S.ast.Type, ptr %a702 store %S.ast.Type %t785, ptr %a702 store %S.ast.Type %t786, ptr %a787 call void @finch.drop.S_ast_Type(ptr %a787) br label %endif8026 else8025: %t788 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 %t789 = load { ptr, i64, i64 }, ptr %t788 store { ptr, i64, i64 } %t789, ptr %a790 store { ptr, i64, i64 } { ptr @.str.5085, i64 4, i64 0 }, ptr %a791 %t792 = call i32 @finch_str_eq(ptr %a790, ptr %a791) %t793 = icmp ne i32 %t792, 0 br i1 %t793, label %then8027, label %else8028 then8027: %t794 = load ptr, ptr %a1 %t795 = getelementptr inbounds %S.gen.Val, ptr %a696, i32 0, i32 0 %t796 = load { ptr, i64, i64 }, ptr %t795 store { ptr, i64, i64 } { ptr @.str.5086, i64 8, i64 0 }, ptr %a798 store { ptr, i64, i64 } %t796, ptr %a799 call void @finch_str_concat(ptr %a797, ptr %a798, ptr %a799) %t800 = load { ptr, i64, i64 }, ptr %a797 store { ptr, i64, i64 } %t800, ptr %a802 store { ptr, i64, i64 } { ptr @.str.5087, i64 7, i64 0 }, ptr %a803 call void @finch_str_concat(ptr %a801, ptr %a802, ptr %a803) store { ptr, i64, i64 } %t800, ptr %a804 call void @finch_str_drop(ptr %a804) %t805 = load { ptr, i64, i64 }, ptr %a801 %t806 = call { ptr, i64, i64 } @finch.gen.op(ptr %t794, { ptr, i64, i64 } %t805) store { ptr, i64, i64 } %t805, ptr %a807 call void @finch_str_drop(ptr %a807) %t808 = load { ptr, i64, i64 }, ptr %a756 store { ptr, i64, i64 } %t806, ptr %a756 store { ptr, i64, i64 } %t808, ptr %a809 call void @finch_str_drop(ptr %a809) %t810 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5088, i64 3, i64 0 }) %t811 = load %S.ast.Type, ptr %a702 store %S.ast.Type %t810, ptr %a702 store %S.ast.Type %t811, ptr %a812 call void @finch.drop.S_ast_Type(ptr %a812) br label %endif8029 else8028: %t813 = load %S.ast.Type, ptr %a702 %t814 = call i1 @finch.gen.isInt(%S.ast.Type %t813) br label %logic.from8030 logic.from8030: br i1 %t814, label %logic.end8032, label %logic.rhs8031 logic.rhs8031: %t815 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 %t816 = load { ptr, i64, i64 }, ptr %t815 store { ptr, i64, i64 } %t816, ptr %a817 store { ptr, i64, i64 } { ptr @.str.5089, i64 4, i64 0 }, ptr %a818 %t819 = call i32 @finch_str_eq(ptr %a817, ptr %a818) %t820 = icmp ne i32 %t819, 0 br label %logic.rend8033 logic.rend8033: br label %logic.end8032 logic.end8032: %t821 = phi i1 [ true, %logic.from8030 ], [ %t820, %logic.rend8033 ] br label %logic.from8034 logic.from8034: br i1 %t821, label %logic.rhs8035, label %logic.end8036 logic.rhs8035: %t822 = load %S.ast.Type, ptr %a702 %t823 = call i64 @finch.gen.bitsOf(%S.ast.Type %t822) %t824 = icmp slt i64 %t823, 32 br label %logic.rend8037 logic.rend8037: br label %logic.end8036 logic.end8036: %t825 = phi i1 [ false, %logic.from8034 ], [ %t824, %logic.rend8037 ] br i1 %t825, label %then8038, label %endif8040 then8038: %t826 = load ptr, ptr %a1 %t827 = load { ptr, i64, i64 }, ptr %a756 %t828 = load %S.ast.Type, ptr %a702 %t829 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5090, i64 3, i64 0 }) %t830 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t826, { ptr, i64, i64 } %t827, %S.ast.Type %t828, %S.ast.Type %t829) store %S.ast.Type %t829, ptr %a831 call void @finch.drop.S_ast_Type(ptr %a831) %t832 = load { ptr, i64, i64 }, ptr %a756 store { ptr, i64, i64 } %t830, ptr %a756 store { ptr, i64, i64 } %t832, ptr %a833 call void @finch_str_drop(ptr %a833) %t834 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5091, i64 3, i64 0 }) %t835 = load %S.ast.Type, ptr %a702 store %S.ast.Type %t834, ptr %a702 store %S.ast.Type %t835, ptr %a836 call void @finch.drop.S_ast_Type(ptr %a836) br label %endif8040 endif8040: br label %endif8029 endif8029: br label %endif8026 endif8026: br label %endif8023 endif8023: %t837 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 %t838 = load ptr, ptr %a1 %t839 = load %S.ast.Type, ptr %a702 %t840 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t838, %S.ast.Type %t839) store { ptr, i64, i64 } %t840, ptr %a842 store { ptr, i64, i64 } { ptr @.str.5092, i64 1, i64 0 }, ptr %a843 call void @finch_str_concat(ptr %a841, ptr %a842, ptr %a843) store { ptr, i64, i64 } %t840, ptr %a844 call void @finch_str_drop(ptr %a844) %t845 = load { ptr, i64, i64 }, ptr %a841 %t846 = load { ptr, i64, i64 }, ptr %a756 store { ptr, i64, i64 } %t845, ptr %a848 store { ptr, i64, i64 } %t846, ptr %a849 call void @finch_str_concat(ptr %a847, ptr %a848, ptr %a849) store { ptr, i64, i64 } %t845, ptr %a850 call void @finch_str_drop(ptr %a850) %t851 = load { ptr, i64, i64 }, ptr %a847 %t852 = load i64, ptr %t837 %t853 = add i64 %t852, 1 call void @finch_arr_reserve(ptr %a263, i64 %t853, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t854 = load ptr, ptr %a263 %t855 = getelementptr inbounds { ptr, i64, i64 }, ptr %t854, i64 %t852 store { ptr, i64, i64 } %t851, ptr %t855 store i64 %t853, ptr %t837 call void @finch_str_drop(ptr %a756) call void @finch.drop.S_ast_Type(ptr %a702) call void @finch.drop.S_gen_Val(ptr %a696) br label %for.step7970 for.step7970: %t856 = load i64, ptr %a327 %t857 = add i64 %t856, 1 store i64 %t857, ptr %a327 br label %for.cond7968 for.end7971: %t858 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 2 %t859 = load { ptr, i64, i64 }, ptr %t858 store { ptr, i64, i64 } %t859, ptr %a860 call void @finch_str_copy(ptr %a861, ptr %a860) %t862 = load { ptr, i64, i64 }, ptr %a861 store { ptr, i64, i64 } %t862, ptr %a863 store { ptr, i64, i64 } { ptr @.str.5093, i64 0, i64 0 }, ptr %a864 %t865 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 0 %t866 = getelementptr inbounds %S.gen.Abi, ptr %t865, i32 0, i32 0 %t867 = load { ptr, i64, i64 }, ptr %t866 store { ptr, i64, i64 } %t867, ptr %a868 store { ptr, i64, i64 } { ptr @.str.5094, i64 6, i64 0 }, ptr %a869 %t870 = call i32 @finch_str_eq(ptr %a868, ptr %a869) %t871 = icmp ne i32 %t870, 0 br i1 %t871, label %then8041, label %endif8043 then8041: %t872 = load ptr, ptr %a1 %t873 = load %S.ast.Type, ptr %a219 %t874 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t872, %S.ast.Type %t873) %t875 = load { ptr, i64, i64 }, ptr %a864 store { ptr, i64, i64 } %t874, ptr %a864 store { ptr, i64, i64 } %t875, ptr %a876 call void @finch_str_drop(ptr %a876) br label %endif8043 endif8043: store { ptr, i64, i64 } { ptr @.str.5095, i64 0, i64 0 }, ptr %a877 %t878 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 %t879 = load i1, ptr %t878 br i1 %t879, label %then8044, label %endif8046 then8044: %t880 = load { ptr, i64, i64 }, ptr %a877 store { ptr, i64, i64 } { ptr @.str.5096, i64 5, i64 0 }, ptr %a877 store { ptr, i64, i64 } %t880, ptr %a881 call void @finch_str_drop(ptr %a881) %t882 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 %t883 = load i64, ptr %t882 %t884 = icmp eq i64 %t883, 0 br i1 %t884, label %then8047, label %endif8049 then8047: %t885 = load { ptr, i64, i64 }, ptr %a877 store { ptr, i64, i64 } { ptr @.str.5097, i64 3, i64 0 }, ptr %a877 store { ptr, i64, i64 } %t885, ptr %a886 call void @finch_str_drop(ptr %a886) br label %endif8049 endif8049: br label %endif8046 endif8046: %t887 = load ptr, ptr %a1 %t888 = icmp eq ptr %t887, null br i1 %t888, label %panic8050, label %ok8051 panic8050: call void @finch_panic(ptr @.str.5098, i64 4770, ptr @.str.5099) unreachable ok8051: %t889 = getelementptr inbounds %S.gen.Gen, ptr %t887, i32 0, i32 40 %t890 = getelementptr inbounds { ptr, i64, i64 }, ptr %t889, i32 0, i32 1 %t891 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t892 = load { ptr, i64, i64 }, ptr %t891 store { ptr, i64, i64 } { ptr @.str.5100, i64 2, i64 0 }, ptr %a894 store { ptr, i64, i64 } %t892, ptr %a895 call void @finch_str_concat(ptr %a893, ptr %a894, ptr %a895) %t896 = load { ptr, i64, i64 }, ptr %a893 store i64 -1, ptr %a897 %t898 = load i64, ptr %t890 %t899 = load ptr, ptr %t889 store i64 0, ptr %a900 br label %find.cond8052 find.cond8052: %t901 = load i64, ptr %a900 %t902 = icmp slt i64 %t901, %t898 br i1 %t902, label %find.body8053, label %find.end8056 find.body8053: %t903 = getelementptr inbounds { ptr, i64, i64 }, ptr %t899, i64 %t901 %t904 = load { ptr, i64, i64 }, ptr %t903 store { ptr, i64, i64 } %t904, ptr %a905 store { ptr, i64, i64 } %t896, ptr %a906 %t907 = call i32 @finch_str_eq(ptr %a905, ptr %a906) %t908 = icmp ne i32 %t907, 0 br i1 %t908, label %find.hit8054, label %find.next8055 find.hit8054: store i64 %t901, ptr %a897 br label %find.end8056 find.next8055: %t909 = add i64 %t901, 1 store i64 %t909, ptr %a900 br label %find.cond8052 find.end8056: store { ptr, i64, i64 } %t896, ptr %a910 call void @finch_str_drop(ptr %a910) %t911 = load i64, ptr %a897 %t912 = icmp sge i64 %t911, 0 %t913 = xor i1 %t912, true br i1 %t913, label %then8057, label %endif8059 then8057: %t914 = load ptr, ptr %a1 %t915 = icmp eq ptr %t914, null br i1 %t915, label %panic8060, label %ok8061 panic8060: call void @finch_panic(ptr @.str.5101, i64 4771, ptr @.str.5102) unreachable ok8061: %t916 = getelementptr inbounds %S.gen.Gen, ptr %t914, i32 0, i32 40 %t917 = getelementptr inbounds { ptr, i64, i64 }, ptr %t916, i32 0, i32 1 %t918 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t919 = load { ptr, i64, i64 }, ptr %t918 store { ptr, i64, i64 } { ptr @.str.5103, i64 2, i64 0 }, ptr %a921 store { ptr, i64, i64 } %t919, ptr %a922 call void @finch_str_concat(ptr %a920, ptr %a921, ptr %a922) %t923 = load { ptr, i64, i64 }, ptr %a920 %t924 = load i64, ptr %t917 %t925 = add i64 %t924, 1 call void @finch_arr_reserve(ptr %t916, i64 %t925, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t926 = load ptr, ptr %t916 %t927 = getelementptr inbounds { ptr, i64, i64 }, ptr %t926, i64 %t924 store { ptr, i64, i64 } %t923, ptr %t927 store i64 %t925, ptr %t917 %t928 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t929 = load { ptr, i64, i64 }, ptr %t928 %t930 = call i1 @finch.gen.runtimeDeclares({ ptr, i64, i64 } %t929) %t931 = xor i1 %t930, true br i1 %t931, label %then8062, label %endif8064 then8062: %t932 = load ptr, ptr %a1 %t933 = icmp eq ptr %t932, null br i1 %t933, label %panic8065, label %ok8066 panic8065: call void @finch_panic(ptr @.str.5104, i64 4773, ptr @.str.5105) unreachable ok8066: %t934 = getelementptr inbounds %S.gen.Gen, ptr %t932, i32 0, i32 2 %t935 = getelementptr inbounds { ptr, i64, i64 }, ptr %t934, i32 0, i32 1 %t936 = load { ptr, i64, i64 }, ptr %a864 store { ptr, i64, i64 } { ptr @.str.5106, i64 7, i64 0 }, ptr %a938 store { ptr, i64, i64 } %t936, ptr %a939 call void @finch_str_concat(ptr %a937, ptr %a938, ptr %a939) %t940 = load { ptr, i64, i64 }, ptr %a937 store { ptr, i64, i64 } %t940, ptr %a942 store { ptr, i64, i64 } { ptr @.str.5107, i64 1, i64 0 }, ptr %a943 call void @finch_str_concat(ptr %a941, ptr %a942, ptr %a943) store { ptr, i64, i64 } %t940, ptr %a944 call void @finch_str_drop(ptr %a944) %t945 = load { ptr, i64, i64 }, ptr %a941 %t946 = load { ptr, i64, i64 }, ptr %a863 store { ptr, i64, i64 } %t945, ptr %a948 store { ptr, i64, i64 } %t946, ptr %a949 call void @finch_str_concat(ptr %a947, ptr %a948, ptr %a949) store { ptr, i64, i64 } %t945, ptr %a950 call void @finch_str_drop(ptr %a950) %t951 = load { ptr, i64, i64 }, ptr %a947 store { ptr, i64, i64 } %t951, ptr %a953 store { ptr, i64, i64 } { ptr @.str.5108, i64 2, i64 0 }, ptr %a954 call void @finch_str_concat(ptr %a952, ptr %a953, ptr %a954) store { ptr, i64, i64 } %t951, ptr %a955 call void @finch_str_drop(ptr %a955) %t956 = load { ptr, i64, i64 }, ptr %a952 %t957 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t958 = load { ptr, i64, i64 }, ptr %t957 store { ptr, i64, i64 } %t956, ptr %a960 store { ptr, i64, i64 } %t958, ptr %a961 call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) store { ptr, i64, i64 } %t956, ptr %a962 call void @finch_str_drop(ptr %a962) %t963 = load { ptr, i64, i64 }, ptr %a959 store { ptr, i64, i64 } %t963, ptr %a965 store { ptr, i64, i64 } { ptr @.str.5109, i64 1, i64 0 }, ptr %a966 call void @finch_str_concat(ptr %a964, ptr %a965, ptr %a966) store { ptr, i64, i64 } %t963, ptr %a967 call void @finch_str_drop(ptr %a967) %t968 = load { ptr, i64, i64 }, ptr %a964 %t969 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.5110, i64 2, i64 0 }, ptr %a970 call void @finch_str_join(ptr %a971, ptr %a262, ptr %a970) %t972 = load { ptr, i64, i64 }, ptr %a971 store { ptr, i64, i64 } %t968, ptr %a974 store { ptr, i64, i64 } %t972, ptr %a975 call void @finch_str_concat(ptr %a973, ptr %a974, ptr %a975) store { ptr, i64, i64 } %t968, ptr %a976 call void @finch_str_drop(ptr %a976) store { ptr, i64, i64 } %t972, ptr %a977 call void @finch_str_drop(ptr %a977) %t978 = load { ptr, i64, i64 }, ptr %a973 %t979 = load { ptr, i64, i64 }, ptr %a877 store { ptr, i64, i64 } %t978, ptr %a981 store { ptr, i64, i64 } %t979, ptr %a982 call void @finch_str_concat(ptr %a980, ptr %a981, ptr %a982) store { ptr, i64, i64 } %t978, ptr %a983 call void @finch_str_drop(ptr %a983) %t984 = load { ptr, i64, i64 }, ptr %a980 store { ptr, i64, i64 } %t984, ptr %a986 store { ptr, i64, i64 } { ptr @.str.5111, i64 1, i64 0 }, ptr %a987 call void @finch_str_concat(ptr %a985, ptr %a986, ptr %a987) store { ptr, i64, i64 } %t984, ptr %a988 call void @finch_str_drop(ptr %a988) %t989 = load { ptr, i64, i64 }, ptr %a985 %t990 = load i64, ptr %t935 %t991 = add i64 %t990, 1 call void @finch_arr_reserve(ptr %t934, i64 %t991, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t992 = load ptr, ptr %t934 %t993 = getelementptr inbounds { ptr, i64, i64 }, ptr %t992, i64 %t990 store { ptr, i64, i64 } %t989, ptr %t993 store i64 %t991, ptr %t935 br label %endif8064 endif8064: br label %endif8059 endif8059: store { ptr, i64, i64 } { ptr @.str.5112, i64 0, i64 0 }, ptr %a994 %t995 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 %t996 = load i1, ptr %t995 br i1 %t996, label %then8067, label %endif8069 then8067: %t997 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.5114, i64 2, i64 0 }, ptr %a998 call void @finch_str_join(ptr %a999, ptr %a262, ptr %a998) %t1000 = load { ptr, i64, i64 }, ptr %a999 store { ptr, i64, i64 } { ptr @.str.5113, i64 2, i64 0 }, ptr %a1002 store { ptr, i64, i64 } %t1000, ptr %a1003 call void @finch_str_concat(ptr %a1001, ptr %a1002, ptr %a1003) store { ptr, i64, i64 } %t1000, ptr %a1004 call void @finch_str_drop(ptr %a1004) %t1005 = load { ptr, i64, i64 }, ptr %a1001 %t1006 = load { ptr, i64, i64 }, ptr %a877 store { ptr, i64, i64 } %t1005, ptr %a1008 store { ptr, i64, i64 } %t1006, ptr %a1009 call void @finch_str_concat(ptr %a1007, ptr %a1008, ptr %a1009) store { ptr, i64, i64 } %t1005, ptr %a1010 call void @finch_str_drop(ptr %a1010) %t1011 = load { ptr, i64, i64 }, ptr %a1007 store { ptr, i64, i64 } %t1011, ptr %a1013 store { ptr, i64, i64 } { ptr @.str.5115, i64 1, i64 0 }, ptr %a1014 call void @finch_str_concat(ptr %a1012, ptr %a1013, ptr %a1014) store { ptr, i64, i64 } %t1011, ptr %a1015 call void @finch_str_drop(ptr %a1015) %t1016 = load { ptr, i64, i64 }, ptr %a1012 %t1017 = load { ptr, i64, i64 }, ptr %a994 store { ptr, i64, i64 } %t1016, ptr %a994 store { ptr, i64, i64 } %t1017, ptr %a1018 call void @finch_str_drop(ptr %a1018) br label %endif8069 endif8069: %t1019 = load { ptr, i64, i64 }, ptr %a864 store { ptr, i64, i64 } { ptr @.str.5116, i64 4, i64 0 }, ptr %a1021 store { ptr, i64, i64 } %t1019, ptr %a1022 call void @finch_str_concat(ptr %a1020, ptr %a1021, ptr %a1022) %t1023 = load { ptr, i64, i64 }, ptr %a1020 store { ptr, i64, i64 } %t1023, ptr %a1025 store { ptr, i64, i64 } { ptr @.str.5117, i64 1, i64 0 }, ptr %a1026 call void @finch_str_concat(ptr %a1024, ptr %a1025, ptr %a1026) store { ptr, i64, i64 } %t1023, ptr %a1027 call void @finch_str_drop(ptr %a1027) %t1028 = load { ptr, i64, i64 }, ptr %a1024 %t1029 = load { ptr, i64, i64 }, ptr %a863 store { ptr, i64, i64 } %t1028, ptr %a1031 store { ptr, i64, i64 } %t1029, ptr %a1032 call void @finch_str_concat(ptr %a1030, ptr %a1031, ptr %a1032) store { ptr, i64, i64 } %t1028, ptr %a1033 call void @finch_str_drop(ptr %a1033) %t1034 = load { ptr, i64, i64 }, ptr %a1030 %t1035 = load { ptr, i64, i64 }, ptr %a994 store { ptr, i64, i64 } %t1034, ptr %a1037 store { ptr, i64, i64 } %t1035, ptr %a1038 call void @finch_str_concat(ptr %a1036, ptr %a1037, ptr %a1038) store { ptr, i64, i64 } %t1034, ptr %a1039 call void @finch_str_drop(ptr %a1039) %t1040 = load { ptr, i64, i64 }, ptr %a1036 store { ptr, i64, i64 } %t1040, ptr %a1042 store { ptr, i64, i64 } { ptr @.str.5118, i64 2, i64 0 }, ptr %a1043 call void @finch_str_concat(ptr %a1041, ptr %a1042, ptr %a1043) store { ptr, i64, i64 } %t1040, ptr %a1044 call void @finch_str_drop(ptr %a1044) %t1045 = load { ptr, i64, i64 }, ptr %a1041 %t1046 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t1047 = load { ptr, i64, i64 }, ptr %t1046 store { ptr, i64, i64 } %t1045, ptr %a1049 store { ptr, i64, i64 } %t1047, ptr %a1050 call void @finch_str_concat(ptr %a1048, ptr %a1049, ptr %a1050) store { ptr, i64, i64 } %t1045, ptr %a1051 call void @finch_str_drop(ptr %a1051) %t1052 = load { ptr, i64, i64 }, ptr %a1048 store { ptr, i64, i64 } %t1052, ptr %a1054 store { ptr, i64, i64 } { ptr @.str.5119, i64 1, i64 0 }, ptr %a1055 call void @finch_str_concat(ptr %a1053, ptr %a1054, ptr %a1055) store { ptr, i64, i64 } %t1052, ptr %a1056 call void @finch_str_drop(ptr %a1056) %t1057 = load { ptr, i64, i64 }, ptr %a1053 %t1058 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.5120, i64 2, i64 0 }, ptr %a1059 call void @finch_str_join(ptr %a1060, ptr %a263, ptr %a1059) %t1061 = load { ptr, i64, i64 }, ptr %a1060 store { ptr, i64, i64 } %t1057, ptr %a1063 store { ptr, i64, i64 } %t1061, ptr %a1064 call void @finch_str_concat(ptr %a1062, ptr %a1063, ptr %a1064) store { ptr, i64, i64 } %t1057, ptr %a1065 call void @finch_str_drop(ptr %a1065) store { ptr, i64, i64 } %t1061, ptr %a1066 call void @finch_str_drop(ptr %a1066) %t1067 = load { ptr, i64, i64 }, ptr %a1062 store { ptr, i64, i64 } %t1067, ptr %a1069 store { ptr, i64, i64 } { ptr @.str.5121, i64 1, i64 0 }, ptr %a1070 call void @finch_str_concat(ptr %a1068, ptr %a1069, ptr %a1070) store { ptr, i64, i64 } %t1067, ptr %a1071 call void @finch_str_drop(ptr %a1071) %t1072 = load { ptr, i64, i64 }, ptr %a1068 store { ptr, i64, i64 } %t1072, ptr %a1073 %t1074 = getelementptr inbounds %S.ast.Type, ptr %a219, i32 0, i32 0 %t1075 = load { ptr, i64, i64 }, ptr %t1074 store { ptr, i64, i64 } %t1075, ptr %a1076 store { ptr, i64, i64 } { ptr @.str.5122, i64 4, i64 0 }, ptr %a1077 %t1078 = call i32 @finch_str_eq(ptr %a1076, ptr %a1077) %t1079 = icmp ne i32 %t1078, 0 br i1 %t1079, label %then8070, label %endif8072 then8070: %t1080 = load ptr, ptr %a1 %t1081 = load { ptr, i64, i64 }, ptr %a1073 call void @finch.gen.emit(ptr %t1080, { ptr, i64, i64 } %t1081) %t1082 = load ptr, ptr %a1 %t1083 = load { ptr, i64, i64 }, ptr %a317 %t1084 = load i64, ptr %a323 call void @finch.gen.releaseAll(ptr %t1082, { ptr, i64, i64 } %t1083, i64 %t1084) %t1085 = load %S.ast.Type, ptr %a219 store %S.ast.Type %t1085, ptr %a1086 call void @finch.copy.S_ast_Type(ptr %a1087, ptr %a1086) %t1088 = load %S.ast.Type, ptr %a1087 %t1089 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1088, 1 call void @finch_str_drop(ptr %a1073) call void @finch_str_drop(ptr %a994) call void @finch_str_drop(ptr %a877) call void @finch_str_drop(ptr %a864) call void @finch_str_drop(ptr %a863) call void @finch.drop.arr_S_gen_Val(ptr %a317) call void @finch_str_drop(ptr %a264) call void @finch.drop.arr_str(ptr %a263) call void @finch.drop.arr_str(ptr %a262) call void @finch.drop.S_gen_Plan(ptr %a261) call void @finch.drop.arr_S_ast_Type(ptr %a225) call void @finch.drop.S_ast_Type(ptr %a219) ret %S.gen.Val %t1089 endif8072: %t1090 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 3 %t1091 = load i1, ptr %t1090 br i1 %t1091, label %then8073, label %endif8075 then8073: %t1092 = load ptr, ptr %a1 %t1093 = load { ptr, i64, i64 }, ptr %a1073 call void @finch.gen.emit(ptr %t1092, { ptr, i64, i64 } %t1093) %t1094 = load ptr, ptr %a1 %t1095 = load { ptr, i64, i64 }, ptr %a317 %t1096 = load i64, ptr %a323 call void @finch.gen.releaseAll(ptr %t1094, { ptr, i64, i64 } %t1095, i64 %t1096) %t1097 = load ptr, ptr %a1 %t1098 = load ptr, ptr %a1 %t1099 = load %S.ast.Type, ptr %a219 %t1100 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t1098, %S.ast.Type %t1099) %t1101 = load { ptr, i64, i64 }, ptr %a264 %t1102 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1097, { ptr, i64, i64 } %t1100, { ptr, i64, i64 } %t1101) store { ptr, i64, i64 } %t1100, ptr %a1103 call void @finch_str_drop(ptr %a1103) %t1104 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1102, 0 %t1105 = load %S.ast.Type, ptr %a219 store %S.ast.Type %t1105, ptr %a1106 call void @finch.copy.S_ast_Type(ptr %a1107, ptr %a1106) %t1108 = load %S.ast.Type, ptr %a1107 %t1109 = insertvalue %S.gen.Val %t1104, %S.ast.Type %t1108, 1 call void @finch_str_drop(ptr %a1073) call void @finch_str_drop(ptr %a994) call void @finch_str_drop(ptr %a877) call void @finch_str_drop(ptr %a864) call void @finch_str_drop(ptr %a863) call void @finch.drop.arr_S_gen_Val(ptr %a317) call void @finch_str_drop(ptr %a264) call void @finch.drop.arr_str(ptr %a263) call void @finch.drop.arr_str(ptr %a262) call void @finch.drop.S_gen_Plan(ptr %a261) call void @finch.drop.arr_S_ast_Type(ptr %a225) call void @finch.drop.S_ast_Type(ptr %a219) ret %S.gen.Val %t1109 endif8075: %t1110 = load ptr, ptr %a1 %t1111 = load { ptr, i64, i64 }, ptr %a1073 %t1112 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1110, { ptr, i64, i64 } %t1111) store { ptr, i64, i64 } %t1112, ptr %a1113 %t1114 = load ptr, ptr %a1 %t1115 = load { ptr, i64, i64 }, ptr %a317 %t1116 = load i64, ptr %a323 call void @finch.gen.releaseAll(ptr %t1114, { ptr, i64, i64 } %t1115, i64 %t1116) %t1117 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 0 %t1118 = getelementptr inbounds %S.gen.Abi, ptr %t1117, i32 0, i32 0 %t1119 = load { ptr, i64, i64 }, ptr %t1118 store { ptr, i64, i64 } %t1119, ptr %a1120 store { ptr, i64, i64 } { ptr @.str.5123, i64 6, i64 0 }, ptr %a1121 %t1122 = call i32 @finch_str_eq(ptr %a1120, ptr %a1121) %t1123 = icmp ne i32 %t1122, 0 br i1 %t1123, label %then8076, label %endif8078 then8076: %t1124 = load ptr, ptr %a1 %t1125 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1124, { ptr, i64, i64 } { ptr @.str.5124, i64 9, i64 0 }) store { ptr, i64, i64 } %t1125, ptr %a1126 %t1127 = load ptr, ptr %a1 %t1128 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 0 %t1129 = getelementptr inbounds %S.gen.Abi, ptr %t1128, i32 0, i32 2 %t1130 = load { ptr, i64, i64 }, ptr %t1129 %t1131 = load { ptr, i64, i64 }, ptr %a1113 %t1132 = load { ptr, i64, i64 }, ptr %a1126 call void @finch.gen.store(ptr %t1127, { ptr, i64, i64 } %t1130, { ptr, i64, i64 } %t1131, { ptr, i64, i64 } %t1132) %t1133 = load ptr, ptr %a1 %t1134 = load ptr, ptr %a1 %t1135 = load %S.ast.Type, ptr %a219 %t1136 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t1134, %S.ast.Type %t1135) %t1137 = load { ptr, i64, i64 }, ptr %a1126 %t1138 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1133, { ptr, i64, i64 } %t1136, { ptr, i64, i64 } %t1137) store { ptr, i64, i64 } %t1136, ptr %a1139 call void @finch_str_drop(ptr %a1139) %t1140 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1138, 0 %t1141 = load %S.ast.Type, ptr %a219 store %S.ast.Type %t1141, ptr %a1142 call void @finch.copy.S_ast_Type(ptr %a1143, ptr %a1142) %t1144 = load %S.ast.Type, ptr %a1143 %t1145 = insertvalue %S.gen.Val %t1140, %S.ast.Type %t1144, 1 call void @finch_str_drop(ptr %a1126) call void @finch_str_drop(ptr %a1113) call void @finch_str_drop(ptr %a1073) call void @finch_str_drop(ptr %a994) call void @finch_str_drop(ptr %a877) call void @finch_str_drop(ptr %a864) call void @finch_str_drop(ptr %a863) call void @finch.drop.arr_S_gen_Val(ptr %a317) call void @finch_str_drop(ptr %a264) call void @finch.drop.arr_str(ptr %a263) call void @finch.drop.arr_str(ptr %a262) call void @finch.drop.S_gen_Plan(ptr %a261) call void @finch.drop.arr_S_ast_Type(ptr %a225) call void @finch.drop.S_ast_Type(ptr %a219) ret %S.gen.Val %t1145 endif8078: %t1146 = getelementptr inbounds %S.ast.Type, ptr %a219, i32 0, i32 0 %t1147 = load { ptr, i64, i64 }, ptr %t1146 store { ptr, i64, i64 } %t1147, ptr %a1148 store { ptr, i64, i64 } { ptr @.str.5125, i64 3, i64 0 }, ptr %a1149 %t1150 = call i32 @finch_str_eq(ptr %a1148, ptr %a1149) %t1151 = icmp ne i32 %t1150, 0 br i1 %t1151, label %then8079, label %endif8081 then8079: %t1152 = load ptr, ptr %a1 %t1153 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1152) store { ptr, i64, i64 } %t1153, ptr %a1154 %t1155 = load ptr, ptr %a1 %t1156 = load { ptr, i64, i64 }, ptr %a1154 call void @finch.gen.store(ptr %t1155, { ptr, i64, i64 } { ptr @.str.5126, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5127, i64 15, i64 0 }, { ptr, i64, i64 } %t1156) %t1157 = load ptr, ptr %a1 %t1158 = load { ptr, i64, i64 }, ptr %a1154 store { ptr, i64, i64 } { ptr @.str.5128, i64 32, i64 0 }, ptr %a1160 store { ptr, i64, i64 } %t1158, ptr %a1161 call void @finch_str_concat(ptr %a1159, ptr %a1160, ptr %a1161) %t1162 = load { ptr, i64, i64 }, ptr %a1159 store { ptr, i64, i64 } %t1162, ptr %a1164 store { ptr, i64, i64 } { ptr @.str.5129, i64 6, i64 0 }, ptr %a1165 call void @finch_str_concat(ptr %a1163, ptr %a1164, ptr %a1165) store { ptr, i64, i64 } %t1162, ptr %a1166 call void @finch_str_drop(ptr %a1166) %t1167 = load { ptr, i64, i64 }, ptr %a1163 %t1168 = load { ptr, i64, i64 }, ptr %a1113 store { ptr, i64, i64 } %t1167, ptr %a1170 store { ptr, i64, i64 } %t1168, ptr %a1171 call void @finch_str_concat(ptr %a1169, ptr %a1170, ptr %a1171) store { ptr, i64, i64 } %t1167, ptr %a1172 call void @finch_str_drop(ptr %a1172) %t1173 = load { ptr, i64, i64 }, ptr %a1169 store { ptr, i64, i64 } %t1173, ptr %a1175 store { ptr, i64, i64 } { ptr @.str.5130, i64 1, i64 0 }, ptr %a1176 call void @finch_str_concat(ptr %a1174, ptr %a1175, ptr %a1176) store { ptr, i64, i64 } %t1173, ptr %a1177 call void @finch_str_drop(ptr %a1177) %t1178 = load { ptr, i64, i64 }, ptr %a1174 call void @finch.gen.emit(ptr %t1157, { ptr, i64, i64 } %t1178) store { ptr, i64, i64 } %t1178, ptr %a1179 call void @finch_str_drop(ptr %a1179) %t1180 = load ptr, ptr %a1 %t1181 = load { ptr, i64, i64 }, ptr %a1154 %t1182 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1180, { ptr, i64, i64 } { ptr @.str.5131, i64 17, i64 0 }, { ptr, i64, i64 } %t1181) %t1183 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1182, 0 %t1184 = load %S.ast.Type, ptr %a219 store %S.ast.Type %t1184, ptr %a1185 call void @finch.copy.S_ast_Type(ptr %a1186, ptr %a1185) %t1187 = load %S.ast.Type, ptr %a1186 %t1188 = insertvalue %S.gen.Val %t1183, %S.ast.Type %t1187, 1 call void @finch_str_drop(ptr %a1154) call void @finch_str_drop(ptr %a1113) call void @finch_str_drop(ptr %a1073) call void @finch_str_drop(ptr %a994) call void @finch_str_drop(ptr %a877) call void @finch_str_drop(ptr %a864) call void @finch_str_drop(ptr %a863) call void @finch.drop.arr_S_gen_Val(ptr %a317) call void @finch_str_drop(ptr %a264) call void @finch.drop.arr_str(ptr %a263) call void @finch.drop.arr_str(ptr %a262) call void @finch.drop.S_gen_Plan(ptr %a261) call void @finch.drop.arr_S_ast_Type(ptr %a225) call void @finch.drop.S_ast_Type(ptr %a219) ret %S.gen.Val %t1188 endif8081: %t1189 = load { ptr, i64, i64 }, ptr %a1113 store { ptr, i64, i64 } %t1189, ptr %a1190 call void @finch_str_copy(ptr %a1191, ptr %a1190) %t1192 = load { ptr, i64, i64 }, ptr %a1191 %t1193 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1192, 0 %t1194 = load %S.ast.Type, ptr %a219 store %S.ast.Type %t1194, ptr %a1195 call void @finch.copy.S_ast_Type(ptr %a1196, ptr %a1195) %t1197 = load %S.ast.Type, ptr %a1196 %t1198 = insertvalue %S.gen.Val %t1193, %S.ast.Type %t1197, 1 call void @finch_str_drop(ptr %a1113) call void @finch_str_drop(ptr %a1073) call void @finch_str_drop(ptr %a994) call void @finch_str_drop(ptr %a877) call void @finch_str_drop(ptr %a864) call void @finch_str_drop(ptr %a863) call void @finch.drop.arr_S_gen_Val(ptr %a317) call void @finch_str_drop(ptr %a264) call void @finch.drop.arr_str(ptr %a263) call void @finch.drop.arr_str(ptr %a262) call void @finch.drop.S_gen_Plan(ptr %a261) call void @finch.drop.arr_S_ast_Type(ptr %a225) call void @finch.drop.S_ast_Type(ptr %a219) ret %S.gen.Val %t1198 } define internal void @finch.gen.releaseAll(ptr %p0, { ptr, i64, i64 } %p1, i64 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a4 = alloca i64, align 16 %a12 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 0, ptr %a4 br label %each.cond8082 each.cond8082: %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = load i64, ptr %a4 %t8 = icmp slt i64 %t7, %t6 br i1 %t8, label %each.body8083, label %each.end8085 each.body8083: %t9 = load ptr, ptr %a2 %t10 = getelementptr inbounds %S.gen.Val, ptr %t9, i64 %t7 %t11 = load %S.gen.Val, ptr %t10 store %S.gen.Val %t11, ptr %a12 %t13 = load ptr, ptr %a1 %t14 = load %S.gen.Val, ptr %a12 call void @finch.gen.release(ptr %t13, %S.gen.Val %t14) br label %each.step8084 each.step8084: %t15 = load i64, ptr %a4 %t16 = add i64 %t15, 1 store i64 %t16, ptr %a4 br label %each.cond8082 each.end8085: %t17 = load ptr, ptr %a1 %t18 = load i64, ptr %a3 call void @finch.gen.heldEnd(ptr %t17, i64 %t18) ret void } define internal i1 @finch.gen.runtimeDeclares({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca i64, align 16 %a18 = alloca i64, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 store { ptr, i64, i64 } { ptr @.str.5132, i64 6, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 store { ptr, i64, i64 } { ptr @.str.5133, i64 6, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 store { ptr, i64, i64 } { ptr @.str.5134, i64 4, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 store { ptr, i64, i64 } { ptr @.str.5135, i64 4, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 store { ptr, i64, i64 } { ptr @.str.5136, i64 5, i64 0 }, ptr %t8 %t9 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t10 = insertvalue { ptr, i64, i64 } %t9, i64 5, 1 %t11 = insertvalue { ptr, i64, i64 } %t10, i64 5, 2 store { ptr, i64, i64 } %t11, ptr %a12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a12, i32 0, i32 1 %t14 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a15 %t16 = load i64, ptr %t13 %t17 = load ptr, ptr %a12 store i64 0, ptr %a18 br label %find.cond8086 find.cond8086: %t19 = load i64, ptr %a18 %t20 = icmp slt i64 %t19, %t16 br i1 %t20, label %find.body8087, label %find.end8090 find.body8087: %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i64 %t19 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } %t14, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 br i1 %t26, label %find.hit8088, label %find.next8089 find.hit8088: store i64 %t19, ptr %a15 br label %find.end8090 find.next8089: %t27 = add i64 %t19, 1 store i64 %t27, ptr %a18 br label %find.cond8086 find.end8090: %t28 = load i64, ptr %a15 %t29 = icmp sge i64 %t28, 0 call void @finch.drop.arr_str(ptr %a12) ret i1 %t29 } define internal { ptr, i64, i64 } @finch.gen.headerHint({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca i64, align 16 %a65 = alloca i64, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca i64, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = mul i64 23, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 store { ptr, i64, i64 } { ptr @.str.5137, i64 6, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 store { ptr, i64, i64 } { ptr @.str.5138, i64 4, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 store { ptr, i64, i64 } { ptr @.str.5139, i64 7, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 store { ptr, i64, i64 } { ptr @.str.5140, i64 5, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 store { ptr, i64, i64 } { ptr @.str.5141, i64 5, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 store { ptr, i64, i64 } { ptr @.str.5142, i64 7, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 store { ptr, i64, i64 } { ptr @.str.5143, i64 4, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 store { ptr, i64, i64 } { ptr @.str.5144, i64 3, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 store { ptr, i64, i64 } { ptr @.str.5145, i64 3, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 store { ptr, i64, i64 } { ptr @.str.5146, i64 3, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 store { ptr, i64, i64 } { ptr @.str.5147, i64 5, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 store { ptr, i64, i64 } { ptr @.str.5148, i64 4, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 store { ptr, i64, i64 } { ptr @.str.5149, i64 6, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 store { ptr, i64, i64 } { ptr @.str.5150, i64 4, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 store { ptr, i64, i64 } { ptr @.str.5151, i64 5, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 store { ptr, i64, i64 } { ptr @.str.5152, i64 3, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16 store { ptr, i64, i64 } { ptr @.str.5153, i64 4, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17 store { ptr, i64, i64 } { ptr @.str.5154, i64 6, i64 0 }, ptr %t21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18 store { ptr, i64, i64 } { ptr @.str.5155, i64 6, i64 0 }, ptr %t22 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19 store { ptr, i64, i64 } { ptr @.str.5156, i64 6, i64 0 }, ptr %t23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20 store { ptr, i64, i64 } { ptr @.str.5157, i64 4, i64 0 }, ptr %t24 %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 21 store { ptr, i64, i64 } { ptr @.str.5158, i64 5, i64 0 }, ptr %t25 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 22 store { ptr, i64, i64 } { ptr @.str.5159, i64 6, i64 0 }, ptr %t26 %t27 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t28 = insertvalue { ptr, i64, i64 } %t27, i64 23, 1 %t29 = insertvalue { ptr, i64, i64 } %t28, i64 23, 2 store { ptr, i64, i64 } %t29, ptr %a30 %t31 = mul i64 23, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t32 = call ptr @finch_alloc(i64 %t31) %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 0 store { ptr, i64, i64 } { ptr @.str.5160, i64 7, i64 0 }, ptr %t33 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 1 store { ptr, i64, i64 } { ptr @.str.5161, i64 7, i64 0 }, ptr %t34 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 2 store { ptr, i64, i64 } { ptr @.str.5162, i64 7, i64 0 }, ptr %t35 %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 3 store { ptr, i64, i64 } { ptr @.str.5163, i64 7, i64 0 }, ptr %t36 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 4 store { ptr, i64, i64 } { ptr @.str.5164, i64 7, i64 0 }, ptr %t37 %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 5 store { ptr, i64, i64 } { ptr @.str.5165, i64 7, i64 0 }, ptr %t38 %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 6 store { ptr, i64, i64 } { ptr @.str.5166, i64 6, i64 0 }, ptr %t39 %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 7 store { ptr, i64, i64 } { ptr @.str.5167, i64 6, i64 0 }, ptr %t40 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 8 store { ptr, i64, i64 } { ptr @.str.5168, i64 6, i64 0 }, ptr %t41 %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 9 store { ptr, i64, i64 } { ptr @.str.5169, i64 6, i64 0 }, ptr %t42 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 10 store { ptr, i64, i64 } { ptr @.str.5170, i64 6, i64 0 }, ptr %t43 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 11 store { ptr, i64, i64 } { ptr @.str.5171, i64 6, i64 0 }, ptr %t44 %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 12 store { ptr, i64, i64 } { ptr @.str.5172, i64 8, i64 0 }, ptr %t45 %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 13 store { ptr, i64, i64 } { ptr @.str.5173, i64 8, i64 0 }, ptr %t46 %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 14 store { ptr, i64, i64 } { ptr @.str.5174, i64 8, i64 0 }, ptr %t47 %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 15 store { ptr, i64, i64 } { ptr @.str.5175, i64 8, i64 0 }, ptr %t48 %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 16 store { ptr, i64, i64 } { ptr @.str.5176, i64 8, i64 0 }, ptr %t49 %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 17 store { ptr, i64, i64 } { ptr @.str.5177, i64 8, i64 0 }, ptr %t50 %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 18 store { ptr, i64, i64 } { ptr @.str.5178, i64 8, i64 0 }, ptr %t51 %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 19 store { ptr, i64, i64 } { ptr @.str.5179, i64 8, i64 0 }, ptr %t52 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 20 store { ptr, i64, i64 } { ptr @.str.5180, i64 6, i64 0 }, ptr %t53 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 21 store { ptr, i64, i64 } { ptr @.str.5181, i64 8, i64 0 }, ptr %t54 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 22 store { ptr, i64, i64 } { ptr @.str.5182, i64 8, i64 0 }, ptr %t55 %t56 = insertvalue { ptr, i64, i64 } undef, ptr %t32, 0 %t57 = insertvalue { ptr, i64, i64 } %t56, i64 23, 1 %t58 = insertvalue { ptr, i64, i64 } %t57, i64 23, 2 store { ptr, i64, i64 } %t58, ptr %a59 %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 %t61 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a62 %t63 = load i64, ptr %t60 %t64 = load ptr, ptr %a30 store i64 0, ptr %a65 br label %find.cond8091 find.cond8091: %t66 = load i64, ptr %a65 %t67 = icmp slt i64 %t66, %t63 br i1 %t67, label %find.body8092, label %find.end8095 find.body8092: %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i64 %t66 %t69 = load { ptr, i64, i64 }, ptr %t68 store { ptr, i64, i64 } %t69, ptr %a70 store { ptr, i64, i64 } %t61, ptr %a71 %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) %t73 = icmp ne i32 %t72, 0 br i1 %t73, label %find.hit8093, label %find.next8094 find.hit8093: store i64 %t66, ptr %a62 br label %find.end8095 find.next8094: %t74 = add i64 %t66, 1 store i64 %t74, ptr %a65 br label %find.cond8091 find.end8095: %t75 = load i64, ptr %a62 store i64 %t75, ptr %a76 %t77 = load i64, ptr %a76 %t78 = icmp slt i64 %t77, 0 br i1 %t78, label %then8096, label %endif8098 then8096: call void @finch.drop.arr_str(ptr %a59) call void @finch.drop.arr_str(ptr %a30) ret { ptr, i64, i64 } { ptr @.str.5183, i64 0, i64 0 } endif8098: %t79 = load i64, ptr %a76 %t80 = load { ptr, i64, i64 }, ptr %a59 %t81 = extractvalue { ptr, i64, i64 } %t80, 1 %t82 = icmp uge i64 %t79, %t81 br i1 %t82, label %range8099, label %inrange8100 range8099: call void @finch_panic_index(ptr @.str.5185, i64 4830, i64 %t79, i64 %t81) unreachable inrange8100: %t83 = extractvalue { ptr, i64, i64 } %t80, 0 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i64 %t79 %t85 = load { ptr, i64, i64 }, ptr %t84 store { ptr, i64, i64 } { ptr @.str.5184, i64 28, i64 0 }, ptr %a87 store { ptr, i64, i64 } %t85, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a86 store { ptr, i64, i64 } %t89, ptr %a91 store { ptr, i64, i64 } { ptr @.str.5186, i64 14, i64 0 }, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) store { ptr, i64, i64 } %t89, ptr %a93 call void @finch_str_drop(ptr %a93) %t94 = load { ptr, i64, i64 }, ptr %a90 call void @finch.drop.arr_str(ptr %a59) call void @finch.drop.arr_str(ptr %a30) ret { ptr, i64, i64 } %t94 } define internal void @finch.drop.S_docs_Doc(ptr %a) { entry: %t1 = getelementptr inbounds %S.docs.Doc, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.docs.Doc, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.docs.Doc, ptr %a, i32 0, i32 2 call void @finch_str_drop(ptr %t3) ret void } define internal void @finch.drop.arr_S_docs_Doc(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond8110 n.cond8110: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body8111, label %n.end8112 n.body8111: %t7 = getelementptr inbounds %S.docs.Doc, ptr %t1, i64 %t5 call void @finch.drop.S_docs_Doc(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond8110 n.end8112: call void @finch_arr_free(ptr %a) ret void } define internal %S.gen.Val @finch.gen.call(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca %S.docs.Doc, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca i64, align 16 %a62 = alloca %S.gen.Val, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca %S.ast.Node, align 16 %a110 = alloca %S.ast.Node, align 16 %a112 = alloca %S.ast.Node, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca i64, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca %S.gen.Place, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca %S.gen.Val, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca i1, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca %S.ast.Type, align 16 %a220 = alloca %S.ast.Type, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca %S.ast.Type, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca %S.ast.Type, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca %S.ast.Type, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a346 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a369 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a373 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a377 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a382 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a384 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a399 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a411 = alloca { ptr, i64, i64 }, align 16 %a412 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a418 = alloca { ptr, i64, i64 }, align 16 %a419 = alloca { ptr, i64, i64 }, align 16 %a420 = alloca { ptr, i64, i64 }, align 16 %a421 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a444 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a466 = alloca { ptr, i64, i64 }, align 16 %a467 = alloca { ptr, i64, i64 }, align 16 %a468 = alloca { ptr, i64, i64 }, align 16 %a470 = alloca { ptr, i64, i64 }, align 16 %a471 = alloca { ptr, i64, i64 }, align 16 %a472 = alloca { ptr, i64, i64 }, align 16 %a473 = alloca { ptr, i64, i64 }, align 16 %a478 = alloca { ptr, i64, i64 }, align 16 %a479 = alloca { ptr, i64, i64 }, align 16 %a480 = alloca { ptr, i64, i64 }, align 16 %a481 = alloca { ptr, i64, i64 }, align 16 %a482 = alloca { ptr, i64, i64 }, align 16 %a484 = alloca { ptr, i64, i64 }, align 16 %a485 = alloca { ptr, i64, i64 }, align 16 %a486 = alloca { ptr, i64, i64 }, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a489 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a494 = alloca { ptr, i64, i64 }, align 16 %a498 = alloca { ptr, i64, i64 }, align 16 %a499 = alloca { ptr, i64, i64 }, align 16 %a504 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca { ptr, i64, i64 }, align 16 %a511 = alloca { ptr, i64, i64 }, align 16 %a516 = alloca { ptr, i64, i64 }, align 16 %a517 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca { ptr, i64, i64 }, align 16 %a523 = alloca { ptr, i64, i64 }, align 16 %a548 = alloca { ptr, i64, i64 }, align 16 %a549 = alloca { ptr, i64, i64 }, align 16 %a550 = alloca { ptr, i64, i64 }, align 16 %a551 = alloca { ptr, i64, i64 }, align 16 %a553 = alloca { ptr, i64, i64 }, align 16 %a554 = alloca { ptr, i64, i64 }, align 16 %a555 = alloca { ptr, i64, i64 }, align 16 %a556 = alloca { ptr, i64, i64 }, align 16 %a558 = alloca { ptr, i64, i64 }, align 16 %a570 = alloca { ptr, i64, i64 }, align 16 %a579 = alloca %S.ast.Type, align 16 %a581 = alloca { ptr, i64, i64 }, align 16 %a582 = alloca { ptr, i64, i64 }, align 16 %a586 = alloca { ptr, i64, i64 }, align 16 %a587 = alloca { ptr, i64, i64 }, align 16 %a603 = alloca %S.gen.Val, align 16 %a607 = alloca { ptr, i64, i64 }, align 16 %a609 = alloca { ptr, i64, i64 }, align 16 %a610 = alloca { ptr, i64, i64 }, align 16 %a615 = alloca { ptr, i64, i64 }, align 16 %a616 = alloca { ptr, i64, i64 }, align 16 %a617 = alloca { ptr, i64, i64 }, align 16 %a619 = alloca { ptr, i64, i64 }, align 16 %a620 = alloca { ptr, i64, i64 }, align 16 %a621 = alloca { ptr, i64, i64 }, align 16 %a622 = alloca { ptr, i64, i64 }, align 16 %a625 = alloca { ptr, i64, i64 }, align 16 %a626 = alloca { ptr, i64, i64 }, align 16 %a631 = alloca { ptr, i64, i64 }, align 16 %a632 = alloca { ptr, i64, i64 }, align 16 %a633 = alloca { ptr, i64, i64 }, align 16 %a635 = alloca { ptr, i64, i64 }, align 16 %a636 = alloca { ptr, i64, i64 }, align 16 %a637 = alloca { ptr, i64, i64 }, align 16 %a638 = alloca { ptr, i64, i64 }, align 16 %a641 = alloca { ptr, i64, i64 }, align 16 %a647 = alloca { ptr, i64, i64 }, align 16 %a654 = alloca { ptr, i64, i64 }, align 16 %a655 = alloca { ptr, i64, i64 }, align 16 %a658 = alloca { ptr, i64, i64 }, align 16 %a661 = alloca { ptr, i64, i64 }, align 16 %a668 = alloca { ptr, i64, i64 }, align 16 %a669 = alloca { ptr, i64, i64 }, align 16 %a670 = alloca { ptr, i64, i64 }, align 16 %a672 = alloca { ptr, i64, i64 }, align 16 %a673 = alloca { ptr, i64, i64 }, align 16 %a674 = alloca { ptr, i64, i64 }, align 16 %a675 = alloca { ptr, i64, i64 }, align 16 %a678 = alloca { ptr, i64, i64 }, align 16 %a679 = alloca { ptr, i64, i64 }, align 16 %a680 = alloca { ptr, i64, i64 }, align 16 %a681 = alloca { ptr, i64, i64 }, align 16 %a683 = alloca { ptr, i64, i64 }, align 16 %a684 = alloca { ptr, i64, i64 }, align 16 %a685 = alloca { ptr, i64, i64 }, align 16 %a686 = alloca { ptr, i64, i64 }, align 16 %a689 = alloca { ptr, i64, i64 }, align 16 %a690 = alloca { ptr, i64, i64 }, align 16 %a691 = alloca { ptr, i64, i64 }, align 16 %a692 = alloca { ptr, i64, i64 }, align 16 %a694 = alloca { ptr, i64, i64 }, align 16 %a695 = alloca { ptr, i64, i64 }, align 16 %a696 = alloca { ptr, i64, i64 }, align 16 %a697 = alloca { ptr, i64, i64 }, align 16 %a700 = alloca { ptr, i64, i64 }, align 16 %a701 = alloca { ptr, i64, i64 }, align 16 %a704 = alloca { ptr, i64, i64 }, align 16 %a705 = alloca { ptr, i64, i64 }, align 16 %a706 = alloca { ptr, i64, i64 }, align 16 %a708 = alloca { ptr, i64, i64 }, align 16 %a709 = alloca { ptr, i64, i64 }, align 16 %a710 = alloca { ptr, i64, i64 }, align 16 %a711 = alloca { ptr, i64, i64 }, align 16 %a714 = alloca { ptr, i64, i64 }, align 16 %a719 = alloca { ptr, i64, i64 }, align 16 %a727 = alloca { ptr, i64, i64 }, align 16 %a750 = alloca { ptr, i64, i64 }, align 16 %a753 = alloca { ptr, i64, i64 }, align 16 %a754 = alloca { ptr, i64, i64 }, align 16 %a755 = alloca { ptr, i64, i64 }, align 16 %a757 = alloca { ptr, i64, i64 }, align 16 %a758 = alloca { ptr, i64, i64 }, align 16 %a759 = alloca { ptr, i64, i64 }, align 16 %a760 = alloca { ptr, i64, i64 }, align 16 %a763 = alloca { ptr, i64, i64 }, align 16 %a764 = alloca { ptr, i64, i64 }, align 16 %a765 = alloca { ptr, i64, i64 }, align 16 %a766 = alloca { ptr, i64, i64 }, align 16 %a768 = alloca { ptr, i64, i64 }, align 16 %a769 = alloca { ptr, i64, i64 }, align 16 %a770 = alloca { ptr, i64, i64 }, align 16 %a771 = alloca { ptr, i64, i64 }, align 16 %a774 = alloca { ptr, i64, i64 }, align 16 %a775 = alloca { ptr, i64, i64 }, align 16 %a776 = alloca { ptr, i64, i64 }, align 16 %a777 = alloca { ptr, i64, i64 }, align 16 %a779 = alloca { ptr, i64, i64 }, align 16 %a780 = alloca { ptr, i64, i64 }, align 16 %a781 = alloca { ptr, i64, i64 }, align 16 %a782 = alloca { ptr, i64, i64 }, align 16 %a786 = alloca { ptr, i64, i64 }, align 16 %a788 = alloca { ptr, i64, i64 }, align 16 %a789 = alloca { ptr, i64, i64 }, align 16 %a790 = alloca { ptr, i64, i64 }, align 16 %a791 = alloca { ptr, i64, i64 }, align 16 %a792 = alloca { ptr, i64, i64 }, align 16 %a794 = alloca { ptr, i64, i64 }, align 16 %a795 = alloca { ptr, i64, i64 }, align 16 %a796 = alloca { ptr, i64, i64 }, align 16 %a797 = alloca { ptr, i64, i64 }, align 16 %a799 = alloca { ptr, i64, i64 }, align 16 %a810 = alloca { ptr, i64, i64 }, align 16 %a811 = alloca { ptr, i64, i64 }, align 16 %a826 = alloca %S.gen.Val, align 16 %a832 = alloca i64, align 16 %a844 = alloca %S.gen.Val, align 16 %a850 = alloca { ptr, i64, i64 }, align 16 %a854 = alloca { ptr, i64, i64 }, align 16 %a861 = alloca { ptr, i64, i64 }, align 16 %a862 = alloca { ptr, i64, i64 }, align 16 %a865 = alloca { ptr, i64, i64 }, align 16 %a868 = alloca { ptr, i64, i64 }, align 16 %a873 = alloca { ptr, i64, i64 }, align 16 %a874 = alloca { ptr, i64, i64 }, align 16 %a875 = alloca { ptr, i64, i64 }, align 16 %a877 = alloca { ptr, i64, i64 }, align 16 %a878 = alloca { ptr, i64, i64 }, align 16 %a879 = alloca { ptr, i64, i64 }, align 16 %a880 = alloca { ptr, i64, i64 }, align 16 %a883 = alloca { ptr, i64, i64 }, align 16 %a884 = alloca { ptr, i64, i64 }, align 16 %a885 = alloca { ptr, i64, i64 }, align 16 %a886 = alloca { ptr, i64, i64 }, align 16 %a888 = alloca { ptr, i64, i64 }, align 16 %a889 = alloca { ptr, i64, i64 }, align 16 %a890 = alloca { ptr, i64, i64 }, align 16 %a891 = alloca { ptr, i64, i64 }, align 16 %a894 = alloca { ptr, i64, i64 }, align 16 %a895 = alloca { ptr, i64, i64 }, align 16 %a896 = alloca { ptr, i64, i64 }, align 16 %a897 = alloca { ptr, i64, i64 }, align 16 %a899 = alloca { ptr, i64, i64 }, align 16 %a900 = alloca { ptr, i64, i64 }, align 16 %a901 = alloca { ptr, i64, i64 }, align 16 %a902 = alloca { ptr, i64, i64 }, align 16 %a905 = alloca { ptr, i64, i64 }, align 16 %a906 = alloca { ptr, i64, i64 }, align 16 %a909 = alloca { ptr, i64, i64 }, align 16 %a910 = alloca { ptr, i64, i64 }, align 16 %a911 = alloca { ptr, i64, i64 }, align 16 %a913 = alloca { ptr, i64, i64 }, align 16 %a914 = alloca { ptr, i64, i64 }, align 16 %a915 = alloca { ptr, i64, i64 }, align 16 %a916 = alloca { ptr, i64, i64 }, align 16 %a919 = alloca { ptr, i64, i64 }, align 16 %a924 = alloca { ptr, i64, i64 }, align 16 %a932 = alloca { ptr, i64, i64 }, align 16 %a941 = alloca { ptr, i64, i64 }, align 16 %a942 = alloca { ptr, i64, i64 }, align 16 %a943 = alloca { ptr, i64, i64 }, align 16 %a945 = alloca { ptr, i64, i64 }, align 16 %a946 = alloca { ptr, i64, i64 }, align 16 %a947 = alloca { ptr, i64, i64 }, align 16 %a948 = alloca { ptr, i64, i64 }, align 16 %a951 = alloca { ptr, i64, i64 }, align 16 %a952 = alloca { ptr, i64, i64 }, align 16 %a953 = alloca { ptr, i64, i64 }, align 16 %a954 = alloca { ptr, i64, i64 }, align 16 %a956 = alloca { ptr, i64, i64 }, align 16 %a957 = alloca { ptr, i64, i64 }, align 16 %a958 = alloca { ptr, i64, i64 }, align 16 %a959 = alloca { ptr, i64, i64 }, align 16 %a962 = alloca { ptr, i64, i64 }, align 16 %a963 = alloca { ptr, i64, i64 }, align 16 %a970 = alloca { ptr, i64, i64 }, align 16 %a971 = alloca { ptr, i64, i64 }, align 16 %a972 = alloca { ptr, i64, i64 }, align 16 %a974 = alloca { ptr, i64, i64 }, align 16 %a975 = alloca { ptr, i64, i64 }, align 16 %a976 = alloca { ptr, i64, i64 }, align 16 %a977 = alloca { ptr, i64, i64 }, align 16 %a980 = alloca { ptr, i64, i64 }, align 16 %a985 = alloca { ptr, i64, i64 }, align 16 %a986 = alloca { ptr, i64, i64 }, align 16 %a1001 = alloca %S.gen.Val, align 16 %a1004 = alloca { ptr, i64, i64 }, align 16 %a1007 = alloca { ptr, i64, i64 }, align 16 %a1008 = alloca { ptr, i64, i64 }, align 16 %a1009 = alloca { ptr, i64, i64 }, align 16 %a1011 = alloca { ptr, i64, i64 }, align 16 %a1012 = alloca { ptr, i64, i64 }, align 16 %a1013 = alloca { ptr, i64, i64 }, align 16 %a1014 = alloca { ptr, i64, i64 }, align 16 %a1019 = alloca { ptr, i64, i64 }, align 16 %a1020 = alloca { ptr, i64, i64 }, align 16 %a1021 = alloca { ptr, i64, i64 }, align 16 %a1022 = alloca { ptr, i64, i64 }, align 16 %a1023 = alloca { ptr, i64, i64 }, align 16 %a1025 = alloca { ptr, i64, i64 }, align 16 %a1026 = alloca { ptr, i64, i64 }, align 16 %a1027 = alloca { ptr, i64, i64 }, align 16 %a1028 = alloca { ptr, i64, i64 }, align 16 %a1030 = alloca { ptr, i64, i64 }, align 16 %a1037 = alloca { ptr, i64, i64 }, align 16 %a1038 = alloca { ptr, i64, i64 }, align 16 %a1041 = alloca { ptr, i64, i64 }, align 16 %a1044 = alloca { ptr, i64, i64 }, align 16 %a1049 = alloca { ptr, i64, i64 }, align 16 %a1050 = alloca { ptr, i64, i64 }, align 16 %a1051 = alloca { ptr, i64, i64 }, align 16 %a1053 = alloca { ptr, i64, i64 }, align 16 %a1054 = alloca { ptr, i64, i64 }, align 16 %a1055 = alloca { ptr, i64, i64 }, align 16 %a1056 = alloca { ptr, i64, i64 }, align 16 %a1059 = alloca { ptr, i64, i64 }, align 16 %a1060 = alloca { ptr, i64, i64 }, align 16 %a1061 = alloca { ptr, i64, i64 }, align 16 %a1062 = alloca { ptr, i64, i64 }, align 16 %a1064 = alloca { ptr, i64, i64 }, align 16 %a1065 = alloca { ptr, i64, i64 }, align 16 %a1066 = alloca { ptr, i64, i64 }, align 16 %a1067 = alloca { ptr, i64, i64 }, align 16 %a1070 = alloca { ptr, i64, i64 }, align 16 %a1071 = alloca { ptr, i64, i64 }, align 16 %a1074 = alloca { ptr, i64, i64 }, align 16 %a1075 = alloca { ptr, i64, i64 }, align 16 %a1076 = alloca { ptr, i64, i64 }, align 16 %a1078 = alloca { ptr, i64, i64 }, align 16 %a1079 = alloca { ptr, i64, i64 }, align 16 %a1080 = alloca { ptr, i64, i64 }, align 16 %a1081 = alloca { ptr, i64, i64 }, align 16 %a1084 = alloca { ptr, i64, i64 }, align 16 %a1089 = alloca { ptr, i64, i64 }, align 16 %a1097 = alloca { ptr, i64, i64 }, align 16 %a1101 = alloca %S.ast.Type, align 16 %a1108 = alloca { ptr, i64, i64 }, align 16 %a1109 = alloca { ptr, i64, i64 }, align 16 %a1110 = alloca { ptr, i64, i64 }, align 16 %a1112 = alloca { ptr, i64, i64 }, align 16 %a1113 = alloca { ptr, i64, i64 }, align 16 %a1114 = alloca { ptr, i64, i64 }, align 16 %a1115 = alloca { ptr, i64, i64 }, align 16 %a1118 = alloca { ptr, i64, i64 }, align 16 %a1119 = alloca { ptr, i64, i64 }, align 16 %a1123 = alloca %S.ast.Type, align 16 %a1128 = alloca { ptr, i64, i64 }, align 16 %a1129 = alloca { ptr, i64, i64 }, align 16 %a1130 = alloca { ptr, i64, i64 }, align 16 %a1132 = alloca { ptr, i64, i64 }, align 16 %a1133 = alloca { ptr, i64, i64 }, align 16 %a1134 = alloca { ptr, i64, i64 }, align 16 %a1135 = alloca { ptr, i64, i64 }, align 16 %a1138 = alloca { ptr, i64, i64 }, align 16 %a1143 = alloca { ptr, i64, i64 }, align 16 %a1144 = alloca { ptr, i64, i64 }, align 16 %a1159 = alloca %S.gen.Val, align 16 %a1162 = alloca { ptr, i64, i64 }, align 16 %a1165 = alloca { ptr, i64, i64 }, align 16 %a1166 = alloca { ptr, i64, i64 }, align 16 %a1167 = alloca { ptr, i64, i64 }, align 16 %a1169 = alloca { ptr, i64, i64 }, align 16 %a1170 = alloca { ptr, i64, i64 }, align 16 %a1171 = alloca { ptr, i64, i64 }, align 16 %a1172 = alloca { ptr, i64, i64 }, align 16 %a1177 = alloca { ptr, i64, i64 }, align 16 %a1178 = alloca { ptr, i64, i64 }, align 16 %a1179 = alloca { ptr, i64, i64 }, align 16 %a1180 = alloca { ptr, i64, i64 }, align 16 %a1181 = alloca { ptr, i64, i64 }, align 16 %a1183 = alloca { ptr, i64, i64 }, align 16 %a1184 = alloca { ptr, i64, i64 }, align 16 %a1185 = alloca { ptr, i64, i64 }, align 16 %a1186 = alloca { ptr, i64, i64 }, align 16 %a1188 = alloca { ptr, i64, i64 }, align 16 %a1191 = alloca { ptr, i64, i64 }, align 16 %a1192 = alloca { ptr, i64, i64 }, align 16 %a1193 = alloca { ptr, i64, i64 }, align 16 %a1195 = alloca { ptr, i64, i64 }, align 16 %a1196 = alloca { ptr, i64, i64 }, align 16 %a1197 = alloca { ptr, i64, i64 }, align 16 %a1198 = alloca { ptr, i64, i64 }, align 16 %a1201 = alloca { ptr, i64, i64 }, align 16 %a1202 = alloca { ptr, i64, i64 }, align 16 %a1206 = alloca %S.ast.Type, align 16 %a1210 = alloca { ptr, i64, i64 }, align 16 %a1211 = alloca { ptr, i64, i64 }, align 16 %a1217 = alloca { ptr, i64, i64 }, align 16 %a1218 = alloca { ptr, i64, i64 }, align 16 %a1243 = alloca %S.gen.Val, align 16 %a1244 = alloca %S.ast.Type, align 16 %a1245 = alloca %S.gen.Val, align 16 %a1249 = alloca { ptr, i64, i64 }, align 16 %a1250 = alloca { ptr, i64, i64 }, align 16 %a1251 = alloca { ptr, i64, i64 }, align 16 %a1253 = alloca { ptr, i64, i64 }, align 16 %a1254 = alloca { ptr, i64, i64 }, align 16 %a1255 = alloca { ptr, i64, i64 }, align 16 %a1256 = alloca { ptr, i64, i64 }, align 16 %a1259 = alloca { ptr, i64, i64 }, align 16 %a1260 = alloca { ptr, i64, i64 }, align 16 %a1263 = alloca { ptr, i64, i64 }, align 16 %a1266 = alloca { ptr, i64, i64 }, align 16 %a1267 = alloca { ptr, i64, i64 }, align 16 %a1268 = alloca { ptr, i64, i64 }, align 16 %a1270 = alloca { ptr, i64, i64 }, align 16 %a1271 = alloca { ptr, i64, i64 }, align 16 %a1272 = alloca { ptr, i64, i64 }, align 16 %a1273 = alloca { ptr, i64, i64 }, align 16 %a1275 = alloca { ptr, i64, i64 }, align 16 %a1279 = alloca { ptr, i64, i64 }, align 16 %a1280 = alloca { ptr, i64, i64 }, align 16 %a1285 = alloca %S.gen.Val, align 16 %a1303 = alloca %S.gen.Val, align 16 %a1306 = alloca { ptr, i64, i64 }, align 16 %a1309 = alloca { ptr, i64, i64 }, align 16 %a1310 = alloca { ptr, i64, i64 }, align 16 %a1311 = alloca { ptr, i64, i64 }, align 16 %a1313 = alloca { ptr, i64, i64 }, align 16 %a1314 = alloca { ptr, i64, i64 }, align 16 %a1315 = alloca { ptr, i64, i64 }, align 16 %a1316 = alloca { ptr, i64, i64 }, align 16 %a1321 = alloca { ptr, i64, i64 }, align 16 %a1322 = alloca { ptr, i64, i64 }, align 16 %a1323 = alloca { ptr, i64, i64 }, align 16 %a1324 = alloca { ptr, i64, i64 }, align 16 %a1325 = alloca { ptr, i64, i64 }, align 16 %a1327 = alloca { ptr, i64, i64 }, align 16 %a1328 = alloca { ptr, i64, i64 }, align 16 %a1329 = alloca { ptr, i64, i64 }, align 16 %a1330 = alloca { ptr, i64, i64 }, align 16 %a1332 = alloca { ptr, i64, i64 }, align 16 %a1343 = alloca { ptr, i64, i64 }, align 16 %a1344 = alloca { ptr, i64, i64 }, align 16 %a1359 = alloca %S.gen.Val, align 16 %a1365 = alloca { ptr, i64, i64 }, align 16 %a1366 = alloca { ptr, i64, i64 }, align 16 %a1367 = alloca { ptr, i64, i64 }, align 16 %a1368 = alloca { ptr, i64, i64 }, align 16 %a1370 = alloca { ptr, i64, i64 }, align 16 %a1371 = alloca { ptr, i64, i64 }, align 16 %a1372 = alloca { ptr, i64, i64 }, align 16 %a1373 = alloca { ptr, i64, i64 }, align 16 %a1376 = alloca { ptr, i64, i64 }, align 16 %a1377 = alloca { ptr, i64, i64 }, align 16 %a1387 = alloca { ptr, i64, i64 }, align 16 %a1388 = alloca { ptr, i64, i64 }, align 16 %a1390 = alloca { ptr, i64, i64 }, align 16 %a1391 = alloca { ptr, i64, i64 }, align 16 %a1399 = alloca { ptr, i64, i64 }, align 16 %a1400 = alloca { ptr, i64, i64 }, align 16 %a1415 = alloca %S.gen.Val, align 16 %a1419 = alloca { ptr, i64, i64 }, align 16 %a1420 = alloca { ptr, i64, i64 }, align 16 %a1449 = alloca { ptr, i64, i64 }, align 16 %a1452 = alloca { ptr, i64, i64 }, align 16 %a1457 = alloca { ptr, i64, i64 }, align 16 %a1458 = alloca { ptr, i64, i64 }, align 16 %a1459 = alloca { ptr, i64, i64 }, align 16 %a1461 = alloca { ptr, i64, i64 }, align 16 %a1462 = alloca { ptr, i64, i64 }, align 16 %a1463 = alloca { ptr, i64, i64 }, align 16 %a1464 = alloca { ptr, i64, i64 }, align 16 %a1467 = alloca { ptr, i64, i64 }, align 16 %a1470 = alloca { ptr, i64, i64 }, align 16 %a1491 = alloca { ptr, i64, i64 }, align 16 %a1492 = alloca { ptr, i64, i64 }, align 16 %a1493 = alloca { ptr, i64, i64 }, align 16 %a1495 = alloca { ptr, i64, i64 }, align 16 %a1496 = alloca { ptr, i64, i64 }, align 16 %a1497 = alloca { ptr, i64, i64 }, align 16 %a1498 = alloca { ptr, i64, i64 }, align 16 %a1500 = alloca { ptr, i64, i64 }, align 16 %a1510 = alloca i64, align 16 %a1521 = alloca { ptr, i64, i64 }, align 16 %a1522 = alloca { ptr, i64, i64 }, align 16 %a1523 = alloca { ptr, i64, i64 }, align 16 %a1525 = alloca { ptr, i64, i64 }, align 16 %a1526 = alloca { ptr, i64, i64 }, align 16 %a1527 = alloca { ptr, i64, i64 }, align 16 %a1528 = alloca { ptr, i64, i64 }, align 16 %a1530 = alloca { ptr, i64, i64 }, align 16 %a1543 = alloca i64, align 16 %a1567 = alloca { ptr, i64, i64 }, align 16 %a1568 = alloca { ptr, i64, i64 }, align 16 %a1569 = alloca { ptr, i64, i64 }, align 16 %a1571 = alloca { ptr, i64, i64 }, align 16 %a1572 = alloca { ptr, i64, i64 }, align 16 %a1573 = alloca { ptr, i64, i64 }, align 16 %a1574 = alloca { ptr, i64, i64 }, align 16 %a1577 = alloca { ptr, i64, i64 }, align 16 %a1578 = alloca { ptr, i64, i64 }, align 16 %a1579 = alloca { ptr, i64, i64 }, align 16 %a1580 = alloca { ptr, i64, i64 }, align 16 %a1582 = alloca { ptr, i64, i64 }, align 16 %a1583 = alloca { ptr, i64, i64 }, align 16 %a1584 = alloca { ptr, i64, i64 }, align 16 %a1585 = alloca { ptr, i64, i64 }, align 16 %a1587 = alloca { ptr, i64, i64 }, align 16 %a1588 = alloca { ptr, i64, i64 }, align 16 %a1591 = alloca i64, align 16 %a1599 = alloca %S.ast.Type, align 16 %a1620 = alloca %S.ast.Type, align 16 %a1641 = alloca i64, align 16 %a1654 = alloca %S.gen.StructDef, align 16 %a1655 = alloca %S.gen.StructDef, align 16 %a1657 = alloca %S.gen.StructDef, align 16 %a1685 = alloca %S.ast.Node, align 16 %a1686 = alloca %S.ast.Node, align 16 %a1688 = alloca %S.ast.Node, align 16 %a1697 = alloca { ptr, i64, i64 }, align 16 %a1698 = alloca { ptr, i64, i64 }, align 16 %a1699 = alloca { ptr, i64, i64 }, align 16 %a1701 = alloca { ptr, i64, i64 }, align 16 %a1702 = alloca { ptr, i64, i64 }, align 16 %a1703 = alloca { ptr, i64, i64 }, align 16 %a1704 = alloca { ptr, i64, i64 }, align 16 %a1708 = alloca { ptr, i64, i64 }, align 16 %a1709 = alloca { ptr, i64, i64 }, align 16 %a1711 = alloca { ptr, i64, i64 }, align 16 %a1712 = alloca { ptr, i64, i64 }, align 16 %a1713 = alloca { ptr, i64, i64 }, align 16 %a1714 = alloca { ptr, i64, i64 }, align 16 %a1715 = alloca { ptr, i64, i64 }, align 16 %a1717 = alloca { ptr, i64, i64 }, align 16 %a1718 = alloca { ptr, i64, i64 }, align 16 %a1719 = alloca { ptr, i64, i64 }, align 16 %a1720 = alloca { ptr, i64, i64 }, align 16 %a1737 = alloca { ptr, i64, i64 }, align 16 %a1753 = alloca i64, align 16 %a1765 = alloca { ptr, i64, i64 }, align 16 %a1775 = alloca { ptr, i64, i64 }, align 16 %a1778 = alloca { ptr, i64, i64 }, align 16 %a1779 = alloca { ptr, i64, i64 }, align 16 %a1806 = alloca { ptr, i64, i64 }, align 16 %a1807 = alloca { ptr, i64, i64 }, align 16 %a1808 = alloca { ptr, i64, i64 }, align 16 %a1810 = alloca { ptr, i64, i64 }, align 16 %a1811 = alloca { ptr, i64, i64 }, align 16 %a1812 = alloca { ptr, i64, i64 }, align 16 %a1813 = alloca { ptr, i64, i64 }, align 16 %a1815 = alloca { ptr, i64, i64 }, align 16 %a1819 = alloca { ptr, i64, i64 }, align 16 %a1820 = alloca { ptr, i64, i64 }, align 16 %a1821 = alloca { ptr, i64, i64 }, align 16 %a1823 = alloca { ptr, i64, i64 }, align 16 %a1824 = alloca { ptr, i64, i64 }, align 16 %a1825 = alloca { ptr, i64, i64 }, align 16 %a1826 = alloca { ptr, i64, i64 }, align 16 %a1830 = alloca { ptr, i64, i64 }, align 16 %a1831 = alloca { ptr, i64, i64 }, align 16 %a1832 = alloca { ptr, i64, i64 }, align 16 %a1833 = alloca { ptr, i64, i64 }, align 16 %a1834 = alloca { ptr, i64, i64 }, align 16 %a1836 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch_str_copy(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null br i1 %t10, label %panic8101, label %ok8102 panic8101: call void @finch_panic(ptr @.str.5187, i64 4835, ptr @.str.5188) unreachable ok8102: %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 28 %t12 = load i1, ptr %t11 br label %logic.from8103 logic.from8103: br i1 %t12, label %logic.rhs8104, label %logic.end8105 logic.rhs8104: %t13 = load { ptr, i64, i64 }, ptr %a8 %t14 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t13) br label %logic.rend8106 logic.rend8106: br label %logic.end8105 logic.end8105: %t15 = phi i1 [ false, %logic.from8103 ], [ %t14, %logic.rend8106 ] br i1 %t15, label %then8107, label %endif8109 then8107: %t16 = call { ptr, i64, i64 } @finch.docs.builtins() %t17 = load { ptr, i64, i64 }, ptr %a8 %t18 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t16, { ptr, i64, i64 } %t17) store { ptr, i64, i64 } %t16, ptr %a19 call void @finch.drop.arr_S_docs_Doc(ptr %a19) store %S.docs.Doc %t18, ptr %a20 %t21 = getelementptr inbounds %S.docs.Doc, ptr %a20, i32 0, i32 0 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = icmp sgt i64 %t23, 0 br i1 %t24, label %then8113, label %endif8115 then8113: %t25 = load ptr, ptr %a1 %t26 = load %S.ast.Node, ptr %a2 %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t28 = load i64, ptr %t27 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t30 = load i64, ptr %t29 %t31 = load %S.docs.Doc, ptr %a20 %t32 = call { ptr, i64, i64 } @finch.docs.hover(%S.docs.Doc %t31) call void @finch.gen.noteRef(ptr %t25, %S.ast.Node %t26, i64 %t28, i64 %t30, { ptr, i64, i64 } %t32, { ptr, i64, i64 } { ptr @.str.5189, i64 0, i64 0 }, i64 0, i64 0) store { ptr, i64, i64 } %t32, ptr %a33 call void @finch_str_drop(ptr %a33) br label %endif8115 endif8115: call void @finch.drop.S_docs_Doc(ptr %a20) br label %endif8109 endif8109: %t34 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t34, ptr %a35 store { ptr, i64, i64 } { ptr @.str.5190, i64 5, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 br i1 %t38, label %then8116, label %endif8118 then8116: %t39 = load ptr, ptr %a1 %t40 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } { ptr @.str.5191, i64 86, i64 0 }) br label %endif8118 endif8118: %t41 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.5192, i64 5, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 br i1 %t45, label %then8119, label %endif8121 then8119: %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i32 0, i32 1 %t48 = load i64, ptr %t47 store i64 0, ptr %a49 br label %for.cond8122 for.cond8122: %t50 = load i64, ptr %a49 %t51 = icmp slt i64 %t50, %t48 br i1 %t51, label %for.body8123, label %for.end8125 for.body8123: %t52 = load ptr, ptr %a1 %t53 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t54 = load i64, ptr %a49 %t55 = load { ptr, i64, i64 }, ptr %t53 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 br i1 %t57, label %range8126, label %inrange8127 range8126: call void @finch_panic_index(ptr @.str.5193, i64 4846, i64 %t54, i64 %t56) unreachable inrange8127: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 %t60 = load %S.ast.Node, ptr %t59 %t61 = call %S.gen.Val @finch.gen.expr(ptr %t52, %S.ast.Node %t60) store %S.gen.Val %t61, ptr %a62 %t63 = getelementptr inbounds %S.gen.Val, ptr %a62, i32 0, i32 1 %t64 = getelementptr inbounds %S.ast.Type, ptr %t63, i32 0, i32 0 %t65 = load { ptr, i64, i64 }, ptr %t64 store { ptr, i64, i64 } %t65, ptr %a66 store { ptr, i64, i64 } { ptr @.str.5194, i64 4, i64 0 }, ptr %a67 %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) %t69 = icmp ne i32 %t68, 0 br i1 %t69, label %then8128, label %endif8130 then8128: %t70 = load ptr, ptr %a1 %t71 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t72 = load i64, ptr %a49 %t73 = load { ptr, i64, i64 }, ptr %t71 %t74 = extractvalue { ptr, i64, i64 } %t73, 1 %t75 = icmp uge i64 %t72, %t74 br i1 %t75, label %range8131, label %inrange8132 range8131: call void @finch_panic_index(ptr @.str.5195, i64 4848, i64 %t72, i64 %t74) unreachable inrange8132: %t76 = extractvalue { ptr, i64, i64 } %t73, 0 %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 %t72 %t78 = load %S.ast.Node, ptr %t77 call void @finch.gen.fail(ptr %t70, %S.ast.Node %t78, { ptr, i64, i64 } { ptr @.str.5196, i64 53, i64 0 }) br label %endif8130 endif8130: %t79 = load i64, ptr %a49 %t80 = icmp sgt i64 %t79, 0 br i1 %t80, label %then8133, label %endif8135 then8133: %t81 = load ptr, ptr %a1 call void @finch.gen.printf(ptr %t81, { ptr, i64, i64 } { ptr @.str.5197, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.5198, i64 0, i64 0 }) br label %endif8135 endif8135: %t82 = load ptr, ptr %a1 %t83 = getelementptr inbounds %S.gen.Val, ptr %a62, i32 0, i32 0 %t84 = load { ptr, i64, i64 }, ptr %t83 %t85 = getelementptr inbounds %S.gen.Val, ptr %a62, i32 0, i32 1 %t86 = load %S.ast.Type, ptr %t85 call void @finch.gen.emitPrint(ptr %t82, { ptr, i64, i64 } %t84, %S.ast.Type %t86, i1 false) %t87 = load ptr, ptr %a1 %t88 = load %S.gen.Val, ptr %a62 call void @finch.gen.release(ptr %t87, %S.gen.Val %t88) call void @finch.drop.S_gen_Val(ptr %a62) br label %for.step8124 for.step8124: %t89 = load i64, ptr %a49 %t90 = add i64 %t89, 1 store i64 %t90, ptr %a49 br label %for.cond8122 for.end8125: %t91 = load ptr, ptr %a1 call void @finch.gen.printf(ptr %t91, { ptr, i64, i64 } { ptr @.str.5199, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.5200, i64 0, i64 0 }) %t92 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5201, i64 4, i64 0 }) %t93 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t92, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t93 endif8121: %t94 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t94, ptr %a95 store { ptr, i64, i64 } { ptr @.str.5202, i64 4, i64 0 }, ptr %a96 %t97 = call i32 @finch_str_eq(ptr %a95, ptr %a96) %t98 = icmp ne i32 %t97, 0 br i1 %t98, label %then8136, label %endif8138 then8136: %t99 = load ptr, ptr %a1 %t100 = load %S.ast.Node, ptr %a2 %t101 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t99, %S.ast.Node %t100, i64 0, i64 1, { ptr, i64, i64 } %t101) %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t103 = load { ptr, i64, i64 }, ptr %t102 %t104 = extractvalue { ptr, i64, i64 } %t103, 1 %t105 = icmp uge i64 0, %t104 br i1 %t105, label %range8139, label %inrange8140 range8139: call void @finch_panic_index(ptr @.str.5203, i64 4861, i64 0, i64 %t104) unreachable inrange8140: %t106 = extractvalue { ptr, i64, i64 } %t103, 0 %t107 = getelementptr inbounds %S.ast.Node, ptr %t106, i64 0 %t108 = load %S.ast.Node, ptr %t107 store %S.ast.Node %t108, ptr %a109 call void @finch.copy.S_ast_Node(ptr %a110, ptr %a109) %t111 = load %S.ast.Node, ptr %a110 store %S.ast.Node %t111, ptr %a112 %t113 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 %t114 = load { ptr, i64, i64 }, ptr %t113 store { ptr, i64, i64 } %t114, ptr %a115 store { ptr, i64, i64 } { ptr @.str.5204, i64 3, i64 0 }, ptr %a116 %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) %t118 = icmp ne i32 %t117, 0 br label %logic.from8141 logic.from8141: br i1 %t118, label %logic.rhs8142, label %logic.end8143 logic.rhs8142: %t119 = load ptr, ptr %a1 %t120 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 1 %t121 = load { ptr, i64, i64 }, ptr %t120 %t122 = call i64 @finch.gen.lookup(ptr %t119, { ptr, i64, i64 } %t121) %t123 = icmp slt i64 %t122, 0 br label %logic.rend8144 logic.rend8144: br label %logic.end8143 logic.end8143: %t124 = phi i1 [ false, %logic.from8141 ], [ %t123, %logic.rend8144 ] br i1 %t124, label %then8145, label %endif8147 then8145: %t125 = load ptr, ptr %a1 %t126 = load ptr, ptr %a1 %t127 = icmp eq ptr %t126, null br i1 %t127, label %panic8148, label %ok8149 panic8148: call void @finch_panic(ptr @.str.5205, i64 4863, ptr @.str.5206) unreachable ok8149: %t128 = getelementptr inbounds %S.gen.Gen, ptr %t126, i32 0, i32 14 %t129 = load { ptr, i64, i64 }, ptr %t128 %t130 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 1 %t131 = load { ptr, i64, i64 }, ptr %t130 %t132 = call i64 @finch.gen.findFn(ptr %t125, { ptr, i64, i64 } %t129, { ptr, i64, i64 } %t131) store i64 %t132, ptr %a133 %t134 = load i64, ptr %a133 %t135 = icmp sge i64 %t134, 0 br i1 %t135, label %then8150, label %endif8152 then8150: %t136 = load ptr, ptr %a1 %t137 = load i64, ptr %a133 %t138 = load %S.ast.Node, ptr %a112 %t139 = call { ptr, i64, i64 } @finch.gen.cThunk(ptr %t136, i64 %t137, %S.ast.Node %t138) %t140 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t139, 0 %t141 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5207, i64 3, i64 0 }) %t142 = insertvalue %S.gen.Val %t140, %S.ast.Type %t141, 1 call void @finch.drop.S_ast_Node(ptr %a112) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t142 endif8152: br label %endif8147 endif8147: %t143 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 %t144 = load { ptr, i64, i64 }, ptr %t143 store { ptr, i64, i64 } %t144, ptr %a145 store { ptr, i64, i64 } { ptr @.str.5208, i64 3, i64 0 }, ptr %a146 %t147 = call i32 @finch_str_eq(ptr %a145, ptr %a146) %t148 = icmp eq i32 %t147, 0 br label %logic.from8153 logic.from8153: br i1 %t148, label %logic.rhs8154, label %logic.end8155 logic.rhs8154: %t149 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 %t150 = load { ptr, i64, i64 }, ptr %t149 store { ptr, i64, i64 } %t150, ptr %a151 store { ptr, i64, i64 } { ptr @.str.5209, i64 6, i64 0 }, ptr %a152 %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) %t154 = icmp eq i32 %t153, 0 br label %logic.rend8156 logic.rend8156: br label %logic.end8155 logic.end8155: %t155 = phi i1 [ false, %logic.from8153 ], [ %t154, %logic.rend8156 ] br label %logic.from8157 logic.from8157: br i1 %t155, label %logic.rhs8158, label %logic.end8159 logic.rhs8158: %t156 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 %t157 = load { ptr, i64, i64 }, ptr %t156 store { ptr, i64, i64 } %t157, ptr %a158 store { ptr, i64, i64 } { ptr @.str.5210, i64 5, i64 0 }, ptr %a159 %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) %t161 = icmp eq i32 %t160, 0 br label %logic.rend8160 logic.rend8160: br label %logic.end8159 logic.end8159: %t162 = phi i1 [ false, %logic.from8157 ], [ %t161, %logic.rend8160 ] br i1 %t162, label %then8161, label %endif8163 then8161: %t163 = load ptr, ptr %a1 %t164 = load %S.ast.Node, ptr %a112 call void @finch.gen.fail(ptr %t163, %S.ast.Node %t164, { ptr, i64, i64 } { ptr @.str.5211, i64 63, i64 0 }) br label %endif8163 endif8163: %t165 = load ptr, ptr %a1 %t166 = load %S.ast.Node, ptr %a112 %t167 = call %S.gen.Place @finch.gen.place(ptr %t165, %S.ast.Node %t166, i1 true) store %S.gen.Place %t167, ptr %a168 %t169 = getelementptr inbounds %S.gen.Place, ptr %a168, i32 0, i32 0 %t170 = load { ptr, i64, i64 }, ptr %t169 store { ptr, i64, i64 } %t170, ptr %a171 call void @finch_str_copy(ptr %a172, ptr %a171) %t173 = load { ptr, i64, i64 }, ptr %a172 %t174 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t173, 0 %t175 = getelementptr inbounds %S.gen.Place, ptr %a168, i32 0, i32 1 %t176 = load %S.ast.Type, ptr %t175 %t177 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t176) %t178 = insertvalue %S.gen.Val %t174, %S.ast.Type %t177, 1 call void @finch.drop.S_gen_Place(ptr %a168) call void @finch.drop.S_ast_Node(ptr %a112) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t178 endif8138: %t179 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t179, ptr %a180 store { ptr, i64, i64 } { ptr @.str.5212, i64 3, i64 0 }, ptr %a181 %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) %t183 = icmp ne i32 %t182, 0 br i1 %t183, label %then8164, label %endif8166 then8164: %t184 = load ptr, ptr %a1 %t185 = load %S.ast.Node, ptr %a2 %t186 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t184, %S.ast.Node %t185, i64 0, i64 1, { ptr, i64, i64 } %t186) %t187 = load ptr, ptr %a1 %t188 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t189 = load { ptr, i64, i64 }, ptr %t188 %t190 = extractvalue { ptr, i64, i64 } %t189, 1 %t191 = icmp uge i64 0, %t190 br i1 %t191, label %range8167, label %inrange8168 range8167: call void @finch_panic_index(ptr @.str.5213, i64 4876, i64 0, i64 %t190) unreachable inrange8168: %t192 = extractvalue { ptr, i64, i64 } %t189, 0 %t193 = getelementptr inbounds %S.ast.Node, ptr %t192, i64 0 %t194 = load %S.ast.Node, ptr %t193 %t195 = call %S.gen.Val @finch.gen.expr(ptr %t187, %S.ast.Node %t194) store %S.gen.Val %t195, ptr %a196 %t197 = load ptr, ptr %a1 %t198 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t197) store { ptr, i64, i64 } %t198, ptr %a199 %t200 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t201 = getelementptr inbounds %S.ast.Type, ptr %t200, i32 0, i32 0 %t202 = load { ptr, i64, i64 }, ptr %t201 store { ptr, i64, i64 } %t202, ptr %a203 call void @finch_str_copy(ptr %a204, ptr %a203) %t205 = load { ptr, i64, i64 }, ptr %a204 store { ptr, i64, i64 } %t205, ptr %a206 store i1 false, ptr %a207 %t208 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t208, ptr %a209 store { ptr, i64, i64 } { ptr @.str.5214, i64 3, i64 0 }, ptr %a210 %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) %t212 = icmp ne i32 %t211, 0 br i1 %t212, label %then8169, label %else8170 then8169: %t213 = load ptr, ptr %a1 %t214 = load %S.gen.Val, ptr %a196 %t215 = call { ptr, i64, i64 } @finch.gen.own(ptr %t213, %S.gen.Val %t214) %t216 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t215, 0 %t217 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t218 = load %S.ast.Type, ptr %t217 store %S.ast.Type %t218, ptr %a219 call void @finch.copy.S_ast_Type(ptr %a220, ptr %a219) %t221 = load %S.ast.Type, ptr %a220 %t222 = insertvalue %S.gen.Val %t216, %S.ast.Type %t221, 1 %t223 = insertvalue %S.gen.Val %t222, i1 true, 2 call void @finch_str_drop(ptr %a206) call void @finch_str_drop(ptr %a199) call void @finch.drop.S_gen_Val(ptr %a196) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t223 else8170: %t224 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t225 = load %S.ast.Type, ptr %t224 %t226 = call i1 @finch.gen.isSigned(%S.ast.Type %t225) br i1 %t226, label %then8172, label %else8173 then8172: %t227 = load ptr, ptr %a1 %t228 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } { ptr @.str.5215, i64 34, i64 0 }, ptr %a230 store { ptr, i64, i64 } %t228, ptr %a231 call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) %t232 = load { ptr, i64, i64 }, ptr %a229 store { ptr, i64, i64 } %t232, ptr %a234 store { ptr, i64, i64 } { ptr @.str.5216, i64 6, i64 0 }, ptr %a235 call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) store { ptr, i64, i64 } %t232, ptr %a236 call void @finch_str_drop(ptr %a236) %t237 = load { ptr, i64, i64 }, ptr %a233 %t238 = load ptr, ptr %a1 %t239 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 %t240 = load { ptr, i64, i64 }, ptr %t239 %t241 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t242 = load %S.ast.Type, ptr %t241 %t243 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5217, i64 3, i64 0 }) %t244 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t238, { ptr, i64, i64 } %t240, %S.ast.Type %t242, %S.ast.Type %t243) store %S.ast.Type %t243, ptr %a245 call void @finch.drop.S_ast_Type(ptr %a245) store { ptr, i64, i64 } %t237, ptr %a247 store { ptr, i64, i64 } %t244, ptr %a248 call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) store { ptr, i64, i64 } %t237, ptr %a249 call void @finch_str_drop(ptr %a249) store { ptr, i64, i64 } %t244, ptr %a250 call void @finch_str_drop(ptr %a250) %t251 = load { ptr, i64, i64 }, ptr %a246 store { ptr, i64, i64 } %t251, ptr %a253 store { ptr, i64, i64 } { ptr @.str.5218, i64 1, i64 0 }, ptr %a254 call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) store { ptr, i64, i64 } %t251, ptr %a255 call void @finch_str_drop(ptr %a255) %t256 = load { ptr, i64, i64 }, ptr %a252 call void @finch.gen.emit(ptr %t227, { ptr, i64, i64 } %t256) store { ptr, i64, i64 } %t256, ptr %a257 call void @finch_str_drop(ptr %a257) br label %endif8174 else8173: %t258 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t259 = load %S.ast.Type, ptr %t258 %t260 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t259) br i1 %t260, label %then8175, label %else8176 then8175: %t261 = load ptr, ptr %a1 %t262 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } { ptr @.str.5219, i64 35, i64 0 }, ptr %a264 store { ptr, i64, i64 } %t262, ptr %a265 call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) %t266 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t266, ptr %a268 store { ptr, i64, i64 } { ptr @.str.5220, i64 6, i64 0 }, ptr %a269 call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269) store { ptr, i64, i64 } %t266, ptr %a270 call void @finch_str_drop(ptr %a270) %t271 = load { ptr, i64, i64 }, ptr %a267 %t272 = load ptr, ptr %a1 %t273 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 %t274 = load { ptr, i64, i64 }, ptr %t273 %t275 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t276 = load %S.ast.Type, ptr %t275 %t277 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5221, i64 3, i64 0 }) %t278 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t272, { ptr, i64, i64 } %t274, %S.ast.Type %t276, %S.ast.Type %t277) store %S.ast.Type %t277, ptr %a279 call void @finch.drop.S_ast_Type(ptr %a279) store { ptr, i64, i64 } %t271, ptr %a281 store { ptr, i64, i64 } %t278, ptr %a282 call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282) store { ptr, i64, i64 } %t271, ptr %a283 call void @finch_str_drop(ptr %a283) store { ptr, i64, i64 } %t278, ptr %a284 call void @finch_str_drop(ptr %a284) %t285 = load { ptr, i64, i64 }, ptr %a280 store { ptr, i64, i64 } %t285, ptr %a287 store { ptr, i64, i64 } { ptr @.str.5222, i64 1, i64 0 }, ptr %a288 call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288) store { ptr, i64, i64 } %t285, ptr %a289 call void @finch_str_drop(ptr %a289) %t290 = load { ptr, i64, i64 }, ptr %a286 call void @finch.gen.emit(ptr %t261, { ptr, i64, i64 } %t290) store { ptr, i64, i64 } %t290, ptr %a291 call void @finch_str_drop(ptr %a291) br label %endif8177 else8176: %t292 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t293 = load %S.ast.Type, ptr %t292 %t294 = call i1 @finch.gen.isFloat(%S.ast.Type %t293) br i1 %t294, label %then8178, label %else8179 then8178: %t295 = load ptr, ptr %a1 %t296 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } { ptr @.str.5223, i64 36, i64 0 }, ptr %a298 store { ptr, i64, i64 } %t296, ptr %a299 call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) %t300 = load { ptr, i64, i64 }, ptr %a297 store { ptr, i64, i64 } %t300, ptr %a302 store { ptr, i64, i64 } { ptr @.str.5224, i64 9, i64 0 }, ptr %a303 call void @finch_str_concat(ptr %a301, ptr %a302, ptr %a303) store { ptr, i64, i64 } %t300, ptr %a304 call void @finch_str_drop(ptr %a304) %t305 = load { ptr, i64, i64 }, ptr %a301 %t306 = load ptr, ptr %a1 %t307 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 %t308 = load { ptr, i64, i64 }, ptr %t307 %t309 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t310 = load %S.ast.Type, ptr %t309 %t311 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5225, i64 5, i64 0 }) %t312 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t306, { ptr, i64, i64 } %t308, %S.ast.Type %t310, %S.ast.Type %t311) store %S.ast.Type %t311, ptr %a313 call void @finch.drop.S_ast_Type(ptr %a313) store { ptr, i64, i64 } %t305, ptr %a315 store { ptr, i64, i64 } %t312, ptr %a316 call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) store { ptr, i64, i64 } %t305, ptr %a317 call void @finch_str_drop(ptr %a317) store { ptr, i64, i64 } %t312, ptr %a318 call void @finch_str_drop(ptr %a318) %t319 = load { ptr, i64, i64 }, ptr %a314 store { ptr, i64, i64 } %t319, ptr %a321 store { ptr, i64, i64 } { ptr @.str.5226, i64 1, i64 0 }, ptr %a322 call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322) store { ptr, i64, i64 } %t319, ptr %a323 call void @finch_str_drop(ptr %a323) %t324 = load { ptr, i64, i64 }, ptr %a320 call void @finch.gen.emit(ptr %t295, { ptr, i64, i64 } %t324) store { ptr, i64, i64 } %t324, ptr %a325 call void @finch_str_drop(ptr %a325) br label %endif8180 else8179: %t326 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t326, ptr %a327 store { ptr, i64, i64 } { ptr @.str.5227, i64 4, i64 0 }, ptr %a328 %t329 = call i32 @finch_str_eq(ptr %a327, ptr %a328) %t330 = icmp ne i32 %t329, 0 br i1 %t330, label %then8181, label %else8182 then8181: %t331 = load ptr, ptr %a1 %t332 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } { ptr @.str.5228, i64 35, i64 0 }, ptr %a334 store { ptr, i64, i64 } %t332, ptr %a335 call void @finch_str_concat(ptr %a333, ptr %a334, ptr %a335) %t336 = load { ptr, i64, i64 }, ptr %a333 store { ptr, i64, i64 } %t336, ptr %a338 store { ptr, i64, i64 } { ptr @.str.5229, i64 13, i64 0 }, ptr %a339 call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) store { ptr, i64, i64 } %t336, ptr %a340 call void @finch_str_drop(ptr %a340) %t341 = load { ptr, i64, i64 }, ptr %a337 %t342 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 %t343 = load { ptr, i64, i64 }, ptr %t342 store { ptr, i64, i64 } %t341, ptr %a345 store { ptr, i64, i64 } %t343, ptr %a346 call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) store { ptr, i64, i64 } %t341, ptr %a347 call void @finch_str_drop(ptr %a347) %t348 = load { ptr, i64, i64 }, ptr %a344 store { ptr, i64, i64 } %t348, ptr %a350 store { ptr, i64, i64 } { ptr @.str.5230, i64 1, i64 0 }, ptr %a351 call void @finch_str_concat(ptr %a349, ptr %a350, ptr %a351) store { ptr, i64, i64 } %t348, ptr %a352 call void @finch_str_drop(ptr %a352) %t353 = load { ptr, i64, i64 }, ptr %a349 call void @finch.gen.emit(ptr %t331, { ptr, i64, i64 } %t353) store { ptr, i64, i64 } %t353, ptr %a354 call void @finch_str_drop(ptr %a354) br label %endif8183 else8182: %t355 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t355, ptr %a356 store { ptr, i64, i64 } { ptr @.str.5231, i64 4, i64 0 }, ptr %a357 %t358 = call i32 @finch_str_eq(ptr %a356, ptr %a357) %t359 = icmp ne i32 %t358, 0 br i1 %t359, label %then8184, label %else8185 then8184: %t360 = load ptr, ptr %a1 %t361 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 %t362 = load { ptr, i64, i64 }, ptr %t361 store { ptr, i64, i64 } { ptr @.str.5232, i64 8, i64 0 }, ptr %a364 store { ptr, i64, i64 } %t362, ptr %a365 call void @finch_str_concat(ptr %a363, ptr %a364, ptr %a365) %t366 = load { ptr, i64, i64 }, ptr %a363 store { ptr, i64, i64 } %t366, ptr %a368 store { ptr, i64, i64 } { ptr @.str.5233, i64 7, i64 0 }, ptr %a369 call void @finch_str_concat(ptr %a367, ptr %a368, ptr %a369) store { ptr, i64, i64 } %t366, ptr %a370 call void @finch_str_drop(ptr %a370) %t371 = load { ptr, i64, i64 }, ptr %a367 %t372 = call { ptr, i64, i64 } @finch.gen.op(ptr %t360, { ptr, i64, i64 } %t371) store { ptr, i64, i64 } %t371, ptr %a373 call void @finch_str_drop(ptr %a373) store { ptr, i64, i64 } %t372, ptr %a374 %t375 = load ptr, ptr %a1 %t376 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } { ptr @.str.5234, i64 35, i64 0 }, ptr %a378 store { ptr, i64, i64 } %t376, ptr %a379 call void @finch_str_concat(ptr %a377, ptr %a378, ptr %a379) %t380 = load { ptr, i64, i64 }, ptr %a377 store { ptr, i64, i64 } %t380, ptr %a382 store { ptr, i64, i64 } { ptr @.str.5235, i64 6, i64 0 }, ptr %a383 call void @finch_str_concat(ptr %a381, ptr %a382, ptr %a383) store { ptr, i64, i64 } %t380, ptr %a384 call void @finch_str_drop(ptr %a384) %t385 = load { ptr, i64, i64 }, ptr %a381 %t386 = load { ptr, i64, i64 }, ptr %a374 store { ptr, i64, i64 } %t385, ptr %a388 store { ptr, i64, i64 } %t386, ptr %a389 call void @finch_str_concat(ptr %a387, ptr %a388, ptr %a389) store { ptr, i64, i64 } %t385, ptr %a390 call void @finch_str_drop(ptr %a390) %t391 = load { ptr, i64, i64 }, ptr %a387 store { ptr, i64, i64 } %t391, ptr %a393 store { ptr, i64, i64 } { ptr @.str.5236, i64 1, i64 0 }, ptr %a394 call void @finch_str_concat(ptr %a392, ptr %a393, ptr %a394) store { ptr, i64, i64 } %t391, ptr %a395 call void @finch_str_drop(ptr %a395) %t396 = load { ptr, i64, i64 }, ptr %a392 call void @finch.gen.emit(ptr %t375, { ptr, i64, i64 } %t396) store { ptr, i64, i64 } %t396, ptr %a397 call void @finch_str_drop(ptr %a397) call void @finch_str_drop(ptr %a374) br label %endif8186 else8185: %t398 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t398, ptr %a399 store { ptr, i64, i64 } { ptr @.str.5237, i64 3, i64 0 }, ptr %a400 %t401 = call i32 @finch_str_eq(ptr %a399, ptr %a400) %t402 = icmp ne i32 %t401, 0 br i1 %t402, label %then8187, label %else8188 then8187: %t403 = load ptr, ptr %a1 %t404 = load { ptr, i64, i64 }, ptr %a199 call void @finch.gen.store(ptr %t403, { ptr, i64, i64 } { ptr @.str.5238, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5239, i64 15, i64 0 }, { ptr, i64, i64 } %t404) %t405 = load ptr, ptr %a1 %t406 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } { ptr @.str.5240, i64 32, i64 0 }, ptr %a408 store { ptr, i64, i64 } %t406, ptr %a409 call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) %t410 = load { ptr, i64, i64 }, ptr %a407 store { ptr, i64, i64 } %t410, ptr %a412 store { ptr, i64, i64 } { ptr @.str.5241, i64 6, i64 0 }, ptr %a413 call void @finch_str_concat(ptr %a411, ptr %a412, ptr %a413) store { ptr, i64, i64 } %t410, ptr %a414 call void @finch_str_drop(ptr %a414) %t415 = load { ptr, i64, i64 }, ptr %a411 %t416 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 %t417 = load { ptr, i64, i64 }, ptr %t416 store { ptr, i64, i64 } %t415, ptr %a419 store { ptr, i64, i64 } %t417, ptr %a420 call void @finch_str_concat(ptr %a418, ptr %a419, ptr %a420) store { ptr, i64, i64 } %t415, ptr %a421 call void @finch_str_drop(ptr %a421) %t422 = load { ptr, i64, i64 }, ptr %a418 store { ptr, i64, i64 } %t422, ptr %a424 store { ptr, i64, i64 } { ptr @.str.5242, i64 1, i64 0 }, ptr %a425 call void @finch_str_concat(ptr %a423, ptr %a424, ptr %a425) store { ptr, i64, i64 } %t422, ptr %a426 call void @finch_str_drop(ptr %a426) %t427 = load { ptr, i64, i64 }, ptr %a423 call void @finch.gen.emit(ptr %t405, { ptr, i64, i64 } %t427) store { ptr, i64, i64 } %t427, ptr %a428 call void @finch_str_drop(ptr %a428) store i1 true, ptr %a207 br label %endif8189 else8188: %t429 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t429, ptr %a430 store { ptr, i64, i64 } { ptr @.str.5243, i64 5, i64 0 }, ptr %a431 %t432 = call i32 @finch_str_eq(ptr %a430, ptr %a431) %t433 = icmp ne i32 %t432, 0 br label %logic.from8190 logic.from8190: br i1 %t433, label %logic.rhs8191, label %logic.end8192 logic.rhs8191: %t434 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t435 = getelementptr inbounds %S.ast.Type, ptr %t434, i32 0, i32 1 %t436 = load { ptr, i64, i64 }, ptr %t435 %t437 = extractvalue { ptr, i64, i64 } %t436, 1 %t438 = icmp uge i64 0, %t437 br i1 %t438, label %range8193, label %inrange8194 range8193: call void @finch_panic_index(ptr @.str.5244, i64 4898, i64 0, i64 %t437) unreachable inrange8194: %t439 = extractvalue { ptr, i64, i64 } %t436, 0 %t440 = getelementptr inbounds %S.ast.Type, ptr %t439, i64 0 %t441 = getelementptr inbounds %S.ast.Type, ptr %t440, i32 0, i32 0 %t442 = load { ptr, i64, i64 }, ptr %t441 store { ptr, i64, i64 } %t442, ptr %a443 store { ptr, i64, i64 } { ptr @.str.5245, i64 2, i64 0 }, ptr %a444 %t445 = call i32 @finch_str_eq(ptr %a443, ptr %a444) %t446 = icmp ne i32 %t445, 0 br label %logic.from8195 logic.from8195: br i1 %t446, label %logic.end8197, label %logic.rhs8196 logic.rhs8196: %t447 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t448 = getelementptr inbounds %S.ast.Type, ptr %t447, i32 0, i32 1 %t449 = load { ptr, i64, i64 }, ptr %t448 %t450 = extractvalue { ptr, i64, i64 } %t449, 1 %t451 = icmp uge i64 0, %t450 br i1 %t451, label %range8198, label %inrange8199 range8198: call void @finch_panic_index(ptr @.str.5246, i64 4898, i64 0, i64 %t450) unreachable inrange8199: %t452 = extractvalue { ptr, i64, i64 } %t449, 0 %t453 = getelementptr inbounds %S.ast.Type, ptr %t452, i64 0 %t454 = getelementptr inbounds %S.ast.Type, ptr %t453, i32 0, i32 0 %t455 = load { ptr, i64, i64 }, ptr %t454 store { ptr, i64, i64 } %t455, ptr %a456 store { ptr, i64, i64 } { ptr @.str.5247, i64 4, i64 0 }, ptr %a457 %t458 = call i32 @finch_str_eq(ptr %a456, ptr %a457) %t459 = icmp ne i32 %t458, 0 br label %logic.rend8200 logic.rend8200: br label %logic.end8197 logic.end8197: %t460 = phi i1 [ true, %logic.from8195 ], [ %t459, %logic.rend8200 ] br label %logic.rend8201 logic.rend8201: br label %logic.end8192 logic.end8192: %t461 = phi i1 [ false, %logic.from8190 ], [ %t460, %logic.rend8201 ] br i1 %t461, label %then8202, label %else8203 then8202: %t462 = load ptr, ptr %a1 %t463 = load { ptr, i64, i64 }, ptr %a199 call void @finch.gen.store(ptr %t462, { ptr, i64, i64 } { ptr @.str.5248, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5249, i64 15, i64 0 }, { ptr, i64, i64 } %t463) %t464 = load ptr, ptr %a1 %t465 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } { ptr @.str.5250, i64 36, i64 0 }, ptr %a467 store { ptr, i64, i64 } %t465, ptr %a468 call void @finch_str_concat(ptr %a466, ptr %a467, ptr %a468) %t469 = load { ptr, i64, i64 }, ptr %a466 store { ptr, i64, i64 } %t469, ptr %a471 store { ptr, i64, i64 } { ptr @.str.5251, i64 6, i64 0 }, ptr %a472 call void @finch_str_concat(ptr %a470, ptr %a471, ptr %a472) store { ptr, i64, i64 } %t469, ptr %a473 call void @finch_str_drop(ptr %a473) %t474 = load { ptr, i64, i64 }, ptr %a470 %t475 = load ptr, ptr %a1 %t476 = load %S.gen.Val, ptr %a196 %t477 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t475, %S.gen.Val %t476) store { ptr, i64, i64 } %t474, ptr %a479 store { ptr, i64, i64 } %t477, ptr %a480 call void @finch_str_concat(ptr %a478, ptr %a479, ptr %a480) store { ptr, i64, i64 } %t474, ptr %a481 call void @finch_str_drop(ptr %a481) store { ptr, i64, i64 } %t477, ptr %a482 call void @finch_str_drop(ptr %a482) %t483 = load { ptr, i64, i64 }, ptr %a478 store { ptr, i64, i64 } %t483, ptr %a485 store { ptr, i64, i64 } { ptr @.str.5252, i64 1, i64 0 }, ptr %a486 call void @finch_str_concat(ptr %a484, ptr %a485, ptr %a486) store { ptr, i64, i64 } %t483, ptr %a487 call void @finch_str_drop(ptr %a487) %t488 = load { ptr, i64, i64 }, ptr %a484 call void @finch.gen.emit(ptr %t464, { ptr, i64, i64 } %t488) store { ptr, i64, i64 } %t488, ptr %a489 call void @finch_str_drop(ptr %a489) %t490 = load ptr, ptr %a1 %t491 = load %S.gen.Val, ptr %a196 call void @finch.gen.release(ptr %t490, %S.gen.Val %t491) br label %endif8204 else8203: %t492 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t492, ptr %a493 store { ptr, i64, i64 } { ptr @.str.5253, i64 4, i64 0 }, ptr %a494 %t495 = call i32 @finch_str_eq(ptr %a493, ptr %a494) %t496 = icmp ne i32 %t495, 0 br label %logic.from8205 logic.from8205: br i1 %t496, label %logic.end8207, label %logic.rhs8206 logic.rhs8206: %t497 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t497, ptr %a498 store { ptr, i64, i64 } { ptr @.str.5254, i64 4, i64 0 }, ptr %a499 %t500 = call i32 @finch_str_eq(ptr %a498, ptr %a499) %t501 = icmp ne i32 %t500, 0 br label %logic.rend8208 logic.rend8208: br label %logic.end8207 logic.end8207: %t502 = phi i1 [ true, %logic.from8205 ], [ %t501, %logic.rend8208 ] br label %logic.from8209 logic.from8209: br i1 %t502, label %logic.end8211, label %logic.rhs8210 logic.rhs8210: %t503 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t503, ptr %a504 store { ptr, i64, i64 } { ptr @.str.5255, i64 5, i64 0 }, ptr %a505 %t506 = call i32 @finch_str_eq(ptr %a504, ptr %a505) %t507 = icmp ne i32 %t506, 0 br label %logic.rend8212 logic.rend8212: br label %logic.end8211 logic.end8211: %t508 = phi i1 [ true, %logic.from8209 ], [ %t507, %logic.rend8212 ] br label %logic.from8213 logic.from8213: br i1 %t508, label %logic.end8215, label %logic.rhs8214 logic.rhs8214: %t509 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t509, ptr %a510 store { ptr, i64, i64 } { ptr @.str.5256, i64 3, i64 0 }, ptr %a511 %t512 = call i32 @finch_str_eq(ptr %a510, ptr %a511) %t513 = icmp ne i32 %t512, 0 br label %logic.rend8216 logic.rend8216: br label %logic.end8215 logic.end8215: %t514 = phi i1 [ true, %logic.from8213 ], [ %t513, %logic.rend8216 ] br label %logic.from8217 logic.from8217: br i1 %t514, label %logic.end8219, label %logic.rhs8218 logic.rhs8218: %t515 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t515, ptr %a516 store { ptr, i64, i64 } { ptr @.str.5257, i64 6, i64 0 }, ptr %a517 %t518 = call i32 @finch_str_eq(ptr %a516, ptr %a517) %t519 = icmp ne i32 %t518, 0 br label %logic.rend8220 logic.rend8220: br label %logic.end8219 logic.end8219: %t520 = phi i1 [ true, %logic.from8217 ], [ %t519, %logic.rend8220 ] br label %logic.from8221 logic.from8221: br i1 %t520, label %logic.end8223, label %logic.rhs8222 logic.rhs8222: %t521 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t521, ptr %a522 store { ptr, i64, i64 } { ptr @.str.5258, i64 4, i64 0 }, ptr %a523 %t524 = call i32 @finch_str_eq(ptr %a522, ptr %a523) %t525 = icmp ne i32 %t524, 0 br label %logic.rend8224 logic.rend8224: br label %logic.end8223 logic.end8223: %t526 = phi i1 [ true, %logic.from8221 ], [ %t525, %logic.rend8224 ] br i1 %t526, label %then8225, label %else8226 then8225: %t527 = load ptr, ptr %a1 %t528 = load { ptr, i64, i64 }, ptr %a199 call void @finch.gen.store(ptr %t527, { ptr, i64, i64 } { ptr @.str.5259, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5260, i64 15, i64 0 }, { ptr, i64, i64 } %t528) %t529 = load ptr, ptr %a1 %t530 = load { ptr, i64, i64 }, ptr %a199 %t531 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 %t532 = load { ptr, i64, i64 }, ptr %t531 %t533 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t534 = load %S.ast.Type, ptr %t533 call void @finch.gen.emitFormat(ptr %t529, { ptr, i64, i64 } %t530, { ptr, i64, i64 } %t532, %S.ast.Type %t534, i1 false) %t535 = load ptr, ptr %a1 %t536 = load %S.gen.Val, ptr %a196 call void @finch.gen.release(ptr %t535, %S.gen.Val %t536) br label %endif8227 else8226: %t537 = load ptr, ptr %a1 %t538 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t539 = load { ptr, i64, i64 }, ptr %t538 %t540 = extractvalue { ptr, i64, i64 } %t539, 1 %t541 = icmp uge i64 0, %t540 br i1 %t541, label %range8228, label %inrange8229 range8228: call void @finch_panic_index(ptr @.str.5261, i64 4908, i64 0, i64 %t540) unreachable inrange8229: %t542 = extractvalue { ptr, i64, i64 } %t539, 0 %t543 = getelementptr inbounds %S.ast.Node, ptr %t542, i64 0 %t544 = load %S.ast.Node, ptr %t543 %t545 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t546 = load %S.ast.Type, ptr %t545 %t547 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t546) store { ptr, i64, i64 } { ptr @.str.5262, i64 11, i64 0 }, ptr %a549 store { ptr, i64, i64 } %t547, ptr %a550 call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) store { ptr, i64, i64 } %t547, ptr %a551 call void @finch_str_drop(ptr %a551) %t552 = load { ptr, i64, i64 }, ptr %a548 store { ptr, i64, i64 } %t552, ptr %a554 store { ptr, i64, i64 } { ptr @.str.5263, i64 9, i64 0 }, ptr %a555 call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555) store { ptr, i64, i64 } %t552, ptr %a556 call void @finch_str_drop(ptr %a556) %t557 = load { ptr, i64, i64 }, ptr %a553 call void @finch.gen.fail(ptr %t537, %S.ast.Node %t544, { ptr, i64, i64 } %t557) store { ptr, i64, i64 } %t557, ptr %a558 call void @finch_str_drop(ptr %a558) br label %endif8227 endif8227: br label %endif8204 endif8204: br label %endif8189 endif8189: br label %endif8186 endif8186: br label %endif8183 endif8183: br label %endif8180 endif8180: br label %endif8177 endif8177: br label %endif8174 endif8174: br label %endif8171 endif8171: %t559 = load ptr, ptr %a1 %t560 = load { ptr, i64, i64 }, ptr %a199 %t561 = call { ptr, i64, i64 } @finch.gen.load(ptr %t559, { ptr, i64, i64 } { ptr @.str.5264, i64 17, i64 0 }, { ptr, i64, i64 } %t560) %t562 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t561, 0 %t563 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5265, i64 3, i64 0 }) %t564 = insertvalue %S.gen.Val %t562, %S.ast.Type %t563, 1 %t565 = load i1, ptr %a207 %t566 = xor i1 %t565, true %t567 = insertvalue %S.gen.Val %t564, i1 %t566, 2 call void @finch_str_drop(ptr %a206) call void @finch_str_drop(ptr %a199) call void @finch.drop.S_gen_Val(ptr %a196) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t567 endif8166: %t568 = load { ptr, i64, i64 }, ptr %a8 %t569 = call { ptr, i64, i64 } @finch.gen.numType({ ptr, i64, i64 } %t568) store { ptr, i64, i64 } %t569, ptr %a570 %t571 = getelementptr inbounds { ptr, i64, i64 }, ptr %a570, i32 0, i32 1 %t572 = load i64, ptr %t571 %t573 = icmp sgt i64 %t572, 0 br i1 %t573, label %then8230, label %endif8232 then8230: %t574 = load ptr, ptr %a1 %t575 = load %S.ast.Node, ptr %a2 %t576 = load { ptr, i64, i64 }, ptr %a570 %t577 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } %t576) %t578 = call %S.gen.Val @finch.gen.convert(ptr %t574, %S.ast.Node %t575, %S.ast.Type %t577) store %S.ast.Type %t577, ptr %a579 call void @finch.drop.S_ast_Type(ptr %a579) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t578 endif8232: %t580 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t580, ptr %a581 store { ptr, i64, i64 } { ptr @.str.5266, i64 9, i64 0 }, ptr %a582 %t583 = call i32 @finch_str_eq(ptr %a581, ptr %a582) %t584 = icmp ne i32 %t583, 0 br label %logic.from8233 logic.from8233: br i1 %t584, label %logic.end8235, label %logic.rhs8234 logic.rhs8234: %t585 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t585, ptr %a586 store { ptr, i64, i64 } { ptr @.str.5267, i64 11, i64 0 }, ptr %a587 %t588 = call i32 @finch_str_eq(ptr %a586, ptr %a587) %t589 = icmp ne i32 %t588, 0 br label %logic.rend8236 logic.rend8236: br label %logic.end8235 logic.end8235: %t590 = phi i1 [ true, %logic.from8233 ], [ %t589, %logic.rend8236 ] br i1 %t590, label %then8237, label %endif8239 then8237: %t591 = load ptr, ptr %a1 %t592 = load %S.ast.Node, ptr %a2 %t593 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t591, %S.ast.Node %t592, i64 0, i64 1, { ptr, i64, i64 } %t593) %t594 = load ptr, ptr %a1 %t595 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t596 = load { ptr, i64, i64 }, ptr %t595 %t597 = extractvalue { ptr, i64, i64 } %t596, 1 %t598 = icmp uge i64 0, %t597 br i1 %t598, label %range8240, label %inrange8241 range8240: call void @finch_panic_index(ptr @.str.5268, i64 4918, i64 0, i64 %t597) unreachable inrange8241: %t599 = extractvalue { ptr, i64, i64 } %t596, 0 %t600 = getelementptr inbounds %S.ast.Node, ptr %t599, i64 0 %t601 = load %S.ast.Node, ptr %t600 %t602 = call %S.gen.Val @finch.gen.strArg(ptr %t594, %S.ast.Node %t601, { ptr, i64, i64 } { ptr @.str.5269, i64 13, i64 0 }) store %S.gen.Val %t602, ptr %a603 %t604 = load ptr, ptr %a1 %t605 = load %S.gen.Val, ptr %a603 %t606 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t604, %S.gen.Val %t605) store { ptr, i64, i64 } %t606, ptr %a607 %t608 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t608, ptr %a609 store { ptr, i64, i64 } { ptr @.str.5270, i64 11, i64 0 }, ptr %a610 %t611 = call i32 @finch_str_eq(ptr %a609, ptr %a610) %t612 = icmp ne i32 %t611, 0 br i1 %t612, label %then8242, label %endif8244 then8242: %t613 = load ptr, ptr %a1 %t614 = load { ptr, i64, i64 }, ptr %a607 store { ptr, i64, i64 } { ptr @.str.5271, i64 32, i64 0 }, ptr %a616 store { ptr, i64, i64 } %t614, ptr %a617 call void @finch_str_concat(ptr %a615, ptr %a616, ptr %a617) %t618 = load { ptr, i64, i64 }, ptr %a615 store { ptr, i64, i64 } %t618, ptr %a620 store { ptr, i64, i64 } { ptr @.str.5272, i64 1, i64 0 }, ptr %a621 call void @finch_str_concat(ptr %a619, ptr %a620, ptr %a621) store { ptr, i64, i64 } %t618, ptr %a622 call void @finch_str_drop(ptr %a622) %t623 = load { ptr, i64, i64 }, ptr %a619 %t624 = call { ptr, i64, i64 } @finch.gen.op(ptr %t613, { ptr, i64, i64 } %t623) store { ptr, i64, i64 } %t623, ptr %a625 call void @finch_str_drop(ptr %a625) store { ptr, i64, i64 } %t624, ptr %a626 %t627 = load ptr, ptr %a1 %t628 = load %S.gen.Val, ptr %a603 call void @finch.gen.release(ptr %t627, %S.gen.Val %t628) %t629 = load ptr, ptr %a1 %t630 = load { ptr, i64, i64 }, ptr %a626 store { ptr, i64, i64 } { ptr @.str.5273, i64 12, i64 0 }, ptr %a632 store { ptr, i64, i64 } %t630, ptr %a633 call void @finch_str_concat(ptr %a631, ptr %a632, ptr %a633) %t634 = load { ptr, i64, i64 }, ptr %a631 store { ptr, i64, i64 } %t634, ptr %a636 store { ptr, i64, i64 } { ptr @.str.5274, i64 3, i64 0 }, ptr %a637 call void @finch_str_concat(ptr %a635, ptr %a636, ptr %a637) store { ptr, i64, i64 } %t634, ptr %a638 call void @finch_str_drop(ptr %a638) %t639 = load { ptr, i64, i64 }, ptr %a635 %t640 = call { ptr, i64, i64 } @finch.gen.op(ptr %t629, { ptr, i64, i64 } %t639) store { ptr, i64, i64 } %t639, ptr %a641 call void @finch_str_drop(ptr %a641) %t642 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t640, 0 %t643 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5275, i64 4, i64 0 }) %t644 = insertvalue %S.gen.Val %t642, %S.ast.Type %t643, 1 call void @finch_str_drop(ptr %a626) call void @finch_str_drop(ptr %a607) call void @finch.drop.S_gen_Val(ptr %a603) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t644 endif8244: %t645 = load ptr, ptr %a1 %t646 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t645) store { ptr, i64, i64 } %t646, ptr %a647 %t648 = load ptr, ptr %a1 %t649 = icmp eq ptr %t648, null br i1 %t649, label %panic8245, label %ok8246 panic8245: call void @finch_panic(ptr @.str.5276, i64 4926, ptr @.str.5277) unreachable ok8246: %t650 = getelementptr inbounds %S.gen.Gen, ptr %t648, i32 0, i32 41 %t651 = load { ptr, i64, i64 }, ptr %t650 %t652 = load %S.ast.Node, ptr %a2 %t653 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t652) store { ptr, i64, i64 } %t651, ptr %a654 store { ptr, i64, i64 } %t653, ptr %a655 %t656 = call i32 @finch_str_eq(ptr %a654, ptr %a655) %t657 = icmp ne i32 %t656, 0 store { ptr, i64, i64 } %t653, ptr %a658 call void @finch_str_drop(ptr %a658) br i1 %t657, label %then8247, label %endif8249 then8247: %t659 = load ptr, ptr %a1 %t660 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t659, { ptr, i64, i64 } { ptr @.str.5278, i64 17, i64 0 }) store { ptr, i64, i64 } %t660, ptr %a661 %t662 = load ptr, ptr %a1 %t663 = load { ptr, i64, i64 }, ptr %a647 call void @finch.gen.store(ptr %t662, { ptr, i64, i64 } { ptr @.str.5279, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5280, i64 15, i64 0 }, { ptr, i64, i64 } %t663) %t664 = load ptr, ptr %a1 %t665 = load { ptr, i64, i64 }, ptr %a661 call void @finch.gen.store(ptr %t664, { ptr, i64, i64 } { ptr @.str.5281, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5282, i64 15, i64 0 }, { ptr, i64, i64 } %t665) %t666 = load ptr, ptr %a1 %t667 = load { ptr, i64, i64 }, ptr %a647 store { ptr, i64, i64 } { ptr @.str.5283, i64 34, i64 0 }, ptr %a669 store { ptr, i64, i64 } %t667, ptr %a670 call void @finch_str_concat(ptr %a668, ptr %a669, ptr %a670) %t671 = load { ptr, i64, i64 }, ptr %a668 store { ptr, i64, i64 } %t671, ptr %a673 store { ptr, i64, i64 } { ptr @.str.5284, i64 6, i64 0 }, ptr %a674 call void @finch_str_concat(ptr %a672, ptr %a673, ptr %a674) store { ptr, i64, i64 } %t671, ptr %a675 call void @finch_str_drop(ptr %a675) %t676 = load { ptr, i64, i64 }, ptr %a672 %t677 = load { ptr, i64, i64 }, ptr %a607 store { ptr, i64, i64 } %t676, ptr %a679 store { ptr, i64, i64 } %t677, ptr %a680 call void @finch_str_concat(ptr %a678, ptr %a679, ptr %a680) store { ptr, i64, i64 } %t676, ptr %a681 call void @finch_str_drop(ptr %a681) %t682 = load { ptr, i64, i64 }, ptr %a678 store { ptr, i64, i64 } %t682, ptr %a684 store { ptr, i64, i64 } { ptr @.str.5285, i64 6, i64 0 }, ptr %a685 call void @finch_str_concat(ptr %a683, ptr %a684, ptr %a685) store { ptr, i64, i64 } %t682, ptr %a686 call void @finch_str_drop(ptr %a686) %t687 = load { ptr, i64, i64 }, ptr %a683 %t688 = load { ptr, i64, i64 }, ptr %a661 store { ptr, i64, i64 } %t687, ptr %a690 store { ptr, i64, i64 } %t688, ptr %a691 call void @finch_str_concat(ptr %a689, ptr %a690, ptr %a691) store { ptr, i64, i64 } %t687, ptr %a692 call void @finch_str_drop(ptr %a692) %t693 = load { ptr, i64, i64 }, ptr %a689 store { ptr, i64, i64 } %t693, ptr %a695 store { ptr, i64, i64 } { ptr @.str.5286, i64 1, i64 0 }, ptr %a696 call void @finch_str_concat(ptr %a694, ptr %a695, ptr %a696) store { ptr, i64, i64 } %t693, ptr %a697 call void @finch_str_drop(ptr %a697) %t698 = load { ptr, i64, i64 }, ptr %a694 %t699 = call { ptr, i64, i64 } @finch.gen.op(ptr %t666, { ptr, i64, i64 } %t698) store { ptr, i64, i64 } %t698, ptr %a700 call void @finch_str_drop(ptr %a700) store { ptr, i64, i64 } %t699, ptr %a701 %t702 = load ptr, ptr %a1 %t703 = load { ptr, i64, i64 }, ptr %a701 store { ptr, i64, i64 } { ptr @.str.5287, i64 12, i64 0 }, ptr %a705 store { ptr, i64, i64 } %t703, ptr %a706 call void @finch_str_concat(ptr %a704, ptr %a705, ptr %a706) %t707 = load { ptr, i64, i64 }, ptr %a704 store { ptr, i64, i64 } %t707, ptr %a709 store { ptr, i64, i64 } { ptr @.str.5288, i64 3, i64 0 }, ptr %a710 call void @finch_str_concat(ptr %a708, ptr %a709, ptr %a710) store { ptr, i64, i64 } %t707, ptr %a711 call void @finch_str_drop(ptr %a711) %t712 = load { ptr, i64, i64 }, ptr %a708 %t713 = call { ptr, i64, i64 } @finch.gen.op(ptr %t702, { ptr, i64, i64 } %t712) store { ptr, i64, i64 } %t712, ptr %a714 call void @finch_str_drop(ptr %a714) %t715 = load ptr, ptr %a1 %t716 = icmp eq ptr %t715, null br i1 %t716, label %panic8250, label %ok8251 panic8250: call void @finch_panic(ptr @.str.5289, i64 4931, ptr @.str.5290) unreachable ok8251: %t717 = getelementptr inbounds %S.gen.Gen, ptr %t715, i32 0, i32 42 %t718 = load { ptr, i64, i64 }, ptr %t717 store { ptr, i64, i64 } %t713, ptr %t717 store { ptr, i64, i64 } %t718, ptr %a719 call void @finch_str_drop(ptr %a719) %t720 = load ptr, ptr %a1 %t721 = load { ptr, i64, i64 }, ptr %a661 %t722 = call { ptr, i64, i64 } @finch.gen.load(ptr %t720, { ptr, i64, i64 } { ptr @.str.5291, i64 17, i64 0 }, { ptr, i64, i64 } %t721) %t723 = load ptr, ptr %a1 %t724 = icmp eq ptr %t723, null br i1 %t724, label %panic8252, label %ok8253 panic8252: call void @finch_panic(ptr @.str.5292, i64 4932, ptr @.str.5293) unreachable ok8253: %t725 = getelementptr inbounds %S.gen.Gen, ptr %t723, i32 0, i32 43 %t726 = load { ptr, i64, i64 }, ptr %t725 store { ptr, i64, i64 } %t722, ptr %t725 store { ptr, i64, i64 } %t726, ptr %a727 call void @finch_str_drop(ptr %a727) %t728 = load ptr, ptr %a1 %t729 = load %S.gen.Val, ptr %a603 call void @finch.gen.release(ptr %t728, %S.gen.Val %t729) %t730 = load ptr, ptr %a1 %t731 = load { ptr, i64, i64 }, ptr %a647 %t732 = call { ptr, i64, i64 } @finch.gen.load(ptr %t730, { ptr, i64, i64 } { ptr @.str.5294, i64 17, i64 0 }, { ptr, i64, i64 } %t731) %t733 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t732, 0 %t734 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5295, i64 3, i64 0 }) %t735 = insertvalue %S.gen.Val %t733, %S.ast.Type %t734, 1 %t736 = insertvalue %S.gen.Val %t735, i1 true, 2 call void @finch_str_drop(ptr %a701) call void @finch_str_drop(ptr %a661) call void @finch_str_drop(ptr %a647) call void @finch_str_drop(ptr %a607) call void @finch.drop.S_gen_Val(ptr %a603) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t736 endif8249: %t737 = load ptr, ptr %a1 %t738 = load ptr, ptr %a1 %t739 = icmp eq ptr %t738, null br i1 %t739, label %panic8254, label %ok8255 panic8254: call void @finch_panic(ptr @.str.5296, i64 4936, ptr @.str.5297) unreachable ok8255: %t740 = getelementptr inbounds %S.gen.Gen, ptr %t738, i32 0, i32 1 %t741 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t742 = load i64, ptr %t741 %t743 = load { ptr, i64, i64 }, ptr %t740 %t744 = extractvalue { ptr, i64, i64 } %t743, 1 %t745 = icmp uge i64 %t742, %t744 br i1 %t745, label %range8256, label %inrange8257 range8256: call void @finch_panic_index(ptr @.str.5298, i64 4936, i64 %t742, i64 %t744) unreachable inrange8257: %t746 = extractvalue { ptr, i64, i64 } %t743, 0 %t747 = getelementptr inbounds { ptr, i64, i64 }, ptr %t746, i64 %t742 %t748 = load { ptr, i64, i64 }, ptr %t747 %t749 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t737, { ptr, i64, i64 } %t748) store { ptr, i64, i64 } %t749, ptr %a750 %t751 = load ptr, ptr %a1 %t752 = load { ptr, i64, i64 }, ptr %a647 store { ptr, i64, i64 } { ptr @.str.5299, i64 31, i64 0 }, ptr %a754 store { ptr, i64, i64 } %t752, ptr %a755 call void @finch_str_concat(ptr %a753, ptr %a754, ptr %a755) %t756 = load { ptr, i64, i64 }, ptr %a753 store { ptr, i64, i64 } %t756, ptr %a758 store { ptr, i64, i64 } { ptr @.str.5300, i64 6, i64 0 }, ptr %a759 call void @finch_str_concat(ptr %a757, ptr %a758, ptr %a759) store { ptr, i64, i64 } %t756, ptr %a760 call void @finch_str_drop(ptr %a760) %t761 = load { ptr, i64, i64 }, ptr %a757 %t762 = load { ptr, i64, i64 }, ptr %a607 store { ptr, i64, i64 } %t761, ptr %a764 store { ptr, i64, i64 } %t762, ptr %a765 call void @finch_str_concat(ptr %a763, ptr %a764, ptr %a765) store { ptr, i64, i64 } %t761, ptr %a766 call void @finch_str_drop(ptr %a766) %t767 = load { ptr, i64, i64 }, ptr %a763 store { ptr, i64, i64 } %t767, ptr %a769 store { ptr, i64, i64 } { ptr @.str.5301, i64 6, i64 0 }, ptr %a770 call void @finch_str_concat(ptr %a768, ptr %a769, ptr %a770) store { ptr, i64, i64 } %t767, ptr %a771 call void @finch_str_drop(ptr %a771) %t772 = load { ptr, i64, i64 }, ptr %a768 %t773 = load { ptr, i64, i64 }, ptr %a750 store { ptr, i64, i64 } %t772, ptr %a775 store { ptr, i64, i64 } %t773, ptr %a776 call void @finch_str_concat(ptr %a774, ptr %a775, ptr %a776) store { ptr, i64, i64 } %t772, ptr %a777 call void @finch_str_drop(ptr %a777) %t778 = load { ptr, i64, i64 }, ptr %a774 store { ptr, i64, i64 } %t778, ptr %a780 store { ptr, i64, i64 } { ptr @.str.5302, i64 6, i64 0 }, ptr %a781 call void @finch_str_concat(ptr %a779, ptr %a780, ptr %a781) store { ptr, i64, i64 } %t778, ptr %a782 call void @finch_str_drop(ptr %a782) %t783 = load { ptr, i64, i64 }, ptr %a779 %t784 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t785 = load i64, ptr %t784 call void @finch_str_from_int(ptr %a786, i64 %t785) %t787 = load { ptr, i64, i64 }, ptr %a786 store { ptr, i64, i64 } %t783, ptr %a789 store { ptr, i64, i64 } %t787, ptr %a790 call void @finch_str_concat(ptr %a788, ptr %a789, ptr %a790) store { ptr, i64, i64 } %t783, ptr %a791 call void @finch_str_drop(ptr %a791) store { ptr, i64, i64 } %t787, ptr %a792 call void @finch_str_drop(ptr %a792) %t793 = load { ptr, i64, i64 }, ptr %a788 store { ptr, i64, i64 } %t793, ptr %a795 store { ptr, i64, i64 } { ptr @.str.5303, i64 1, i64 0 }, ptr %a796 call void @finch_str_concat(ptr %a794, ptr %a795, ptr %a796) store { ptr, i64, i64 } %t793, ptr %a797 call void @finch_str_drop(ptr %a797) %t798 = load { ptr, i64, i64 }, ptr %a794 call void @finch.gen.emit(ptr %t751, { ptr, i64, i64 } %t798) store { ptr, i64, i64 } %t798, ptr %a799 call void @finch_str_drop(ptr %a799) %t800 = load ptr, ptr %a1 %t801 = load %S.gen.Val, ptr %a603 call void @finch.gen.release(ptr %t800, %S.gen.Val %t801) %t802 = load ptr, ptr %a1 %t803 = load { ptr, i64, i64 }, ptr %a647 %t804 = call { ptr, i64, i64 } @finch.gen.load(ptr %t802, { ptr, i64, i64 } { ptr @.str.5304, i64 17, i64 0 }, { ptr, i64, i64 } %t803) %t805 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t804, 0 %t806 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5305, i64 3, i64 0 }) %t807 = insertvalue %S.gen.Val %t805, %S.ast.Type %t806, 1 %t808 = insertvalue %S.gen.Val %t807, i1 true, 2 call void @finch_str_drop(ptr %a750) call void @finch_str_drop(ptr %a647) call void @finch_str_drop(ptr %a607) call void @finch.drop.S_gen_Val(ptr %a603) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t808 endif8239: %t809 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t809, ptr %a810 store { ptr, i64, i64 } { ptr @.str.5306, i64 10, i64 0 }, ptr %a811 %t812 = call i32 @finch_str_eq(ptr %a810, ptr %a811) %t813 = icmp ne i32 %t812, 0 br i1 %t813, label %then8258, label %endif8260 then8258: %t814 = load ptr, ptr %a1 %t815 = load %S.ast.Node, ptr %a2 %t816 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t814, %S.ast.Node %t815, i64 0, i64 2, { ptr, i64, i64 } %t816) %t817 = load ptr, ptr %a1 %t818 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t819 = load { ptr, i64, i64 }, ptr %t818 %t820 = extractvalue { ptr, i64, i64 } %t819, 1 %t821 = icmp uge i64 0, %t820 br i1 %t821, label %range8261, label %inrange8262 range8261: call void @finch_panic_index(ptr @.str.5307, i64 4943, i64 0, i64 %t820) unreachable inrange8262: %t822 = extractvalue { ptr, i64, i64 } %t819, 0 %t823 = getelementptr inbounds %S.ast.Node, ptr %t822, i64 0 %t824 = load %S.ast.Node, ptr %t823 %t825 = call %S.gen.Val @finch.gen.strArg(ptr %t817, %S.ast.Node %t824, { ptr, i64, i64 } { ptr @.str.5308, i64 13, i64 0 }) store %S.gen.Val %t825, ptr %a826 %t827 = load ptr, ptr %a1 %t828 = icmp eq ptr %t827, null br i1 %t828, label %panic8263, label %ok8264 panic8263: call void @finch_panic(ptr @.str.5309, i64 4944, ptr @.str.5310) unreachable ok8264: %t829 = getelementptr inbounds %S.gen.Gen, ptr %t827, i32 0, i32 11 %t830 = getelementptr inbounds { ptr, i64, i64 }, ptr %t829, i32 0, i32 1 %t831 = load i64, ptr %t830 store i64 %t831, ptr %a832 %t833 = load ptr, ptr %a1 %t834 = load %S.gen.Val, ptr %a826 call void @finch.gen.hold(ptr %t833, %S.gen.Val %t834) %t835 = load ptr, ptr %a1 %t836 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t837 = load { ptr, i64, i64 }, ptr %t836 %t838 = extractvalue { ptr, i64, i64 } %t837, 1 %t839 = icmp uge i64 1, %t838 br i1 %t839, label %range8265, label %inrange8266 range8265: call void @finch_panic_index(ptr @.str.5311, i64 4946, i64 1, i64 %t838) unreachable inrange8266: %t840 = extractvalue { ptr, i64, i64 } %t837, 0 %t841 = getelementptr inbounds %S.ast.Node, ptr %t840, i64 1 %t842 = load %S.ast.Node, ptr %t841 %t843 = call %S.gen.Val @finch.gen.strArg(ptr %t835, %S.ast.Node %t842, { ptr, i64, i64 } { ptr @.str.5312, i64 8, i64 0 }) store %S.gen.Val %t843, ptr %a844 %t845 = load ptr, ptr %a1 %t846 = load i64, ptr %a832 call void @finch.gen.heldEnd(ptr %t845, i64 %t846) %t847 = load ptr, ptr %a1 %t848 = load %S.gen.Val, ptr %a826 %t849 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t847, %S.gen.Val %t848) store { ptr, i64, i64 } %t849, ptr %a850 %t851 = load ptr, ptr %a1 %t852 = load %S.gen.Val, ptr %a844 %t853 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t851, %S.gen.Val %t852) store { ptr, i64, i64 } %t853, ptr %a854 %t855 = load ptr, ptr %a1 %t856 = icmp eq ptr %t855, null br i1 %t856, label %panic8267, label %ok8268 panic8267: call void @finch_panic(ptr @.str.5313, i64 4950, ptr @.str.5314) unreachable ok8268: %t857 = getelementptr inbounds %S.gen.Gen, ptr %t855, i32 0, i32 41 %t858 = load { ptr, i64, i64 }, ptr %t857 %t859 = load %S.ast.Node, ptr %a2 %t860 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t859) store { ptr, i64, i64 } %t858, ptr %a861 store { ptr, i64, i64 } %t860, ptr %a862 %t863 = call i32 @finch_str_eq(ptr %a861, ptr %a862) %t864 = icmp ne i32 %t863, 0 store { ptr, i64, i64 } %t860, ptr %a865 call void @finch_str_drop(ptr %a865) br i1 %t864, label %then8269, label %endif8271 then8269: %t866 = load ptr, ptr %a1 %t867 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t866, { ptr, i64, i64 } { ptr @.str.5315, i64 17, i64 0 }) store { ptr, i64, i64 } %t867, ptr %a868 %t869 = load ptr, ptr %a1 %t870 = load { ptr, i64, i64 }, ptr %a868 call void @finch.gen.store(ptr %t869, { ptr, i64, i64 } { ptr @.str.5316, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5317, i64 15, i64 0 }, { ptr, i64, i64 } %t870) %t871 = load ptr, ptr %a1 %t872 = load { ptr, i64, i64 }, ptr %a850 store { ptr, i64, i64 } { ptr @.str.5318, i64 35, i64 0 }, ptr %a874 store { ptr, i64, i64 } %t872, ptr %a875 call void @finch_str_concat(ptr %a873, ptr %a874, ptr %a875) %t876 = load { ptr, i64, i64 }, ptr %a873 store { ptr, i64, i64 } %t876, ptr %a878 store { ptr, i64, i64 } { ptr @.str.5319, i64 6, i64 0 }, ptr %a879 call void @finch_str_concat(ptr %a877, ptr %a878, ptr %a879) store { ptr, i64, i64 } %t876, ptr %a880 call void @finch_str_drop(ptr %a880) %t881 = load { ptr, i64, i64 }, ptr %a877 %t882 = load { ptr, i64, i64 }, ptr %a854 store { ptr, i64, i64 } %t881, ptr %a884 store { ptr, i64, i64 } %t882, ptr %a885 call void @finch_str_concat(ptr %a883, ptr %a884, ptr %a885) store { ptr, i64, i64 } %t881, ptr %a886 call void @finch_str_drop(ptr %a886) %t887 = load { ptr, i64, i64 }, ptr %a883 store { ptr, i64, i64 } %t887, ptr %a889 store { ptr, i64, i64 } { ptr @.str.5320, i64 6, i64 0 }, ptr %a890 call void @finch_str_concat(ptr %a888, ptr %a889, ptr %a890) store { ptr, i64, i64 } %t887, ptr %a891 call void @finch_str_drop(ptr %a891) %t892 = load { ptr, i64, i64 }, ptr %a888 %t893 = load { ptr, i64, i64 }, ptr %a868 store { ptr, i64, i64 } %t892, ptr %a895 store { ptr, i64, i64 } %t893, ptr %a896 call void @finch_str_concat(ptr %a894, ptr %a895, ptr %a896) store { ptr, i64, i64 } %t892, ptr %a897 call void @finch_str_drop(ptr %a897) %t898 = load { ptr, i64, i64 }, ptr %a894 store { ptr, i64, i64 } %t898, ptr %a900 store { ptr, i64, i64 } { ptr @.str.5321, i64 1, i64 0 }, ptr %a901 call void @finch_str_concat(ptr %a899, ptr %a900, ptr %a901) store { ptr, i64, i64 } %t898, ptr %a902 call void @finch_str_drop(ptr %a902) %t903 = load { ptr, i64, i64 }, ptr %a899 %t904 = call { ptr, i64, i64 } @finch.gen.op(ptr %t871, { ptr, i64, i64 } %t903) store { ptr, i64, i64 } %t903, ptr %a905 call void @finch_str_drop(ptr %a905) store { ptr, i64, i64 } %t904, ptr %a906 %t907 = load ptr, ptr %a1 %t908 = load { ptr, i64, i64 }, ptr %a906 store { ptr, i64, i64 } { ptr @.str.5322, i64 12, i64 0 }, ptr %a910 store { ptr, i64, i64 } %t908, ptr %a911 call void @finch_str_concat(ptr %a909, ptr %a910, ptr %a911) %t912 = load { ptr, i64, i64 }, ptr %a909 store { ptr, i64, i64 } %t912, ptr %a914 store { ptr, i64, i64 } { ptr @.str.5323, i64 3, i64 0 }, ptr %a915 call void @finch_str_concat(ptr %a913, ptr %a914, ptr %a915) store { ptr, i64, i64 } %t912, ptr %a916 call void @finch_str_drop(ptr %a916) %t917 = load { ptr, i64, i64 }, ptr %a913 %t918 = call { ptr, i64, i64 } @finch.gen.op(ptr %t907, { ptr, i64, i64 } %t917) store { ptr, i64, i64 } %t917, ptr %a919 call void @finch_str_drop(ptr %a919) %t920 = load ptr, ptr %a1 %t921 = icmp eq ptr %t920, null br i1 %t921, label %panic8272, label %ok8273 panic8272: call void @finch_panic(ptr @.str.5324, i64 4954, ptr @.str.5325) unreachable ok8273: %t922 = getelementptr inbounds %S.gen.Gen, ptr %t920, i32 0, i32 42 %t923 = load { ptr, i64, i64 }, ptr %t922 store { ptr, i64, i64 } %t918, ptr %t922 store { ptr, i64, i64 } %t923, ptr %a924 call void @finch_str_drop(ptr %a924) %t925 = load ptr, ptr %a1 %t926 = load { ptr, i64, i64 }, ptr %a868 %t927 = call { ptr, i64, i64 } @finch.gen.load(ptr %t925, { ptr, i64, i64 } { ptr @.str.5326, i64 17, i64 0 }, { ptr, i64, i64 } %t926) %t928 = load ptr, ptr %a1 %t929 = icmp eq ptr %t928, null br i1 %t929, label %panic8274, label %ok8275 panic8274: call void @finch_panic(ptr @.str.5327, i64 4955, ptr @.str.5328) unreachable ok8275: %t930 = getelementptr inbounds %S.gen.Gen, ptr %t928, i32 0, i32 43 %t931 = load { ptr, i64, i64 }, ptr %t930 store { ptr, i64, i64 } %t927, ptr %t930 store { ptr, i64, i64 } %t931, ptr %a932 call void @finch_str_drop(ptr %a932) %t933 = load ptr, ptr %a1 %t934 = load %S.gen.Val, ptr %a826 call void @finch.gen.release(ptr %t933, %S.gen.Val %t934) %t935 = load ptr, ptr %a1 %t936 = load %S.gen.Val, ptr %a844 call void @finch.gen.release(ptr %t935, %S.gen.Val %t936) %t937 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5329, i64 4, i64 0 }) %t938 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t937, 1 call void @finch_str_drop(ptr %a906) call void @finch_str_drop(ptr %a868) call void @finch_str_drop(ptr %a854) call void @finch_str_drop(ptr %a850) call void @finch.drop.S_gen_Val(ptr %a844) call void @finch.drop.S_gen_Val(ptr %a826) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t938 endif8271: %t939 = load ptr, ptr %a1 %t940 = load { ptr, i64, i64 }, ptr %a850 store { ptr, i64, i64 } { ptr @.str.5330, i64 31, i64 0 }, ptr %a942 store { ptr, i64, i64 } %t940, ptr %a943 call void @finch_str_concat(ptr %a941, ptr %a942, ptr %a943) %t944 = load { ptr, i64, i64 }, ptr %a941 store { ptr, i64, i64 } %t944, ptr %a946 store { ptr, i64, i64 } { ptr @.str.5331, i64 6, i64 0 }, ptr %a947 call void @finch_str_concat(ptr %a945, ptr %a946, ptr %a947) store { ptr, i64, i64 } %t944, ptr %a948 call void @finch_str_drop(ptr %a948) %t949 = load { ptr, i64, i64 }, ptr %a945 %t950 = load { ptr, i64, i64 }, ptr %a854 store { ptr, i64, i64 } %t949, ptr %a952 store { ptr, i64, i64 } %t950, ptr %a953 call void @finch_str_concat(ptr %a951, ptr %a952, ptr %a953) store { ptr, i64, i64 } %t949, ptr %a954 call void @finch_str_drop(ptr %a954) %t955 = load { ptr, i64, i64 }, ptr %a951 store { ptr, i64, i64 } %t955, ptr %a957 store { ptr, i64, i64 } { ptr @.str.5332, i64 1, i64 0 }, ptr %a958 call void @finch_str_concat(ptr %a956, ptr %a957, ptr %a958) store { ptr, i64, i64 } %t955, ptr %a959 call void @finch_str_drop(ptr %a959) %t960 = load { ptr, i64, i64 }, ptr %a956 %t961 = call { ptr, i64, i64 } @finch.gen.op(ptr %t939, { ptr, i64, i64 } %t960) store { ptr, i64, i64 } %t960, ptr %a962 call void @finch_str_drop(ptr %a962) store { ptr, i64, i64 } %t961, ptr %a963 %t964 = load ptr, ptr %a1 %t965 = load %S.gen.Val, ptr %a826 call void @finch.gen.release(ptr %t964, %S.gen.Val %t965) %t966 = load ptr, ptr %a1 %t967 = load %S.gen.Val, ptr %a844 call void @finch.gen.release(ptr %t966, %S.gen.Val %t967) %t968 = load ptr, ptr %a1 %t969 = load { ptr, i64, i64 }, ptr %a963 store { ptr, i64, i64 } { ptr @.str.5333, i64 12, i64 0 }, ptr %a971 store { ptr, i64, i64 } %t969, ptr %a972 call void @finch_str_concat(ptr %a970, ptr %a971, ptr %a972) %t973 = load { ptr, i64, i64 }, ptr %a970 store { ptr, i64, i64 } %t973, ptr %a975 store { ptr, i64, i64 } { ptr @.str.5334, i64 3, i64 0 }, ptr %a976 call void @finch_str_concat(ptr %a974, ptr %a975, ptr %a976) store { ptr, i64, i64 } %t973, ptr %a977 call void @finch_str_drop(ptr %a977) %t978 = load { ptr, i64, i64 }, ptr %a974 %t979 = call { ptr, i64, i64 } @finch.gen.op(ptr %t968, { ptr, i64, i64 } %t978) store { ptr, i64, i64 } %t978, ptr %a980 call void @finch_str_drop(ptr %a980) %t981 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t979, 0 %t982 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5335, i64 4, i64 0 }) %t983 = insertvalue %S.gen.Val %t981, %S.ast.Type %t982, 1 call void @finch_str_drop(ptr %a963) call void @finch_str_drop(ptr %a854) call void @finch_str_drop(ptr %a850) call void @finch.drop.S_gen_Val(ptr %a844) call void @finch.drop.S_gen_Val(ptr %a826) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t983 endif8260: %t984 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t984, ptr %a985 store { ptr, i64, i64 } { ptr @.str.5336, i64 11, i64 0 }, ptr %a986 %t987 = call i32 @finch_str_eq(ptr %a985, ptr %a986) %t988 = icmp ne i32 %t987, 0 br i1 %t988, label %then8276, label %endif8278 then8276: %t989 = load ptr, ptr %a1 %t990 = load %S.ast.Node, ptr %a2 %t991 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t989, %S.ast.Node %t990, i64 0, i64 1, { ptr, i64, i64 } %t991) %t992 = load ptr, ptr %a1 %t993 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t994 = load { ptr, i64, i64 }, ptr %t993 %t995 = extractvalue { ptr, i64, i64 } %t994, 1 %t996 = icmp uge i64 0, %t995 br i1 %t996, label %range8279, label %inrange8280 range8279: call void @finch_panic_index(ptr @.str.5337, i64 4967, i64 0, i64 %t995) unreachable inrange8280: %t997 = extractvalue { ptr, i64, i64 } %t994, 0 %t998 = getelementptr inbounds %S.ast.Node, ptr %t997, i64 0 %t999 = load %S.ast.Node, ptr %t998 %t1000 = call %S.gen.Val @finch.gen.strArg(ptr %t992, %S.ast.Node %t999, { ptr, i64, i64 } { ptr @.str.5338, i64 13, i64 0 }) store %S.gen.Val %t1000, ptr %a1001 %t1002 = load ptr, ptr %a1 %t1003 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1002) store { ptr, i64, i64 } %t1003, ptr %a1004 %t1005 = load ptr, ptr %a1 %t1006 = load { ptr, i64, i64 }, ptr %a1004 store { ptr, i64, i64 } { ptr @.str.5339, i64 30, i64 0 }, ptr %a1008 store { ptr, i64, i64 } %t1006, ptr %a1009 call void @finch_str_concat(ptr %a1007, ptr %a1008, ptr %a1009) %t1010 = load { ptr, i64, i64 }, ptr %a1007 store { ptr, i64, i64 } %t1010, ptr %a1012 store { ptr, i64, i64 } { ptr @.str.5340, i64 6, i64 0 }, ptr %a1013 call void @finch_str_concat(ptr %a1011, ptr %a1012, ptr %a1013) store { ptr, i64, i64 } %t1010, ptr %a1014 call void @finch_str_drop(ptr %a1014) %t1015 = load { ptr, i64, i64 }, ptr %a1011 %t1016 = load ptr, ptr %a1 %t1017 = load %S.gen.Val, ptr %a1001 %t1018 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t1016, %S.gen.Val %t1017) store { ptr, i64, i64 } %t1015, ptr %a1020 store { ptr, i64, i64 } %t1018, ptr %a1021 call void @finch_str_concat(ptr %a1019, ptr %a1020, ptr %a1021) store { ptr, i64, i64 } %t1015, ptr %a1022 call void @finch_str_drop(ptr %a1022) store { ptr, i64, i64 } %t1018, ptr %a1023 call void @finch_str_drop(ptr %a1023) %t1024 = load { ptr, i64, i64 }, ptr %a1019 store { ptr, i64, i64 } %t1024, ptr %a1026 store { ptr, i64, i64 } { ptr @.str.5341, i64 1, i64 0 }, ptr %a1027 call void @finch_str_concat(ptr %a1025, ptr %a1026, ptr %a1027) store { ptr, i64, i64 } %t1024, ptr %a1028 call void @finch_str_drop(ptr %a1028) %t1029 = load { ptr, i64, i64 }, ptr %a1025 call void @finch.gen.emit(ptr %t1005, { ptr, i64, i64 } %t1029) store { ptr, i64, i64 } %t1029, ptr %a1030 call void @finch_str_drop(ptr %a1030) %t1031 = load ptr, ptr %a1 %t1032 = icmp eq ptr %t1031, null br i1 %t1032, label %panic8281, label %ok8282 panic8281: call void @finch_panic(ptr @.str.5342, i64 4970, ptr @.str.5343) unreachable ok8282: %t1033 = getelementptr inbounds %S.gen.Gen, ptr %t1031, i32 0, i32 41 %t1034 = load { ptr, i64, i64 }, ptr %t1033 %t1035 = load %S.ast.Node, ptr %a2 %t1036 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t1035) store { ptr, i64, i64 } %t1034, ptr %a1037 store { ptr, i64, i64 } %t1036, ptr %a1038 %t1039 = call i32 @finch_str_eq(ptr %a1037, ptr %a1038) %t1040 = icmp ne i32 %t1039, 0 store { ptr, i64, i64 } %t1036, ptr %a1041 call void @finch_str_drop(ptr %a1041) br i1 %t1040, label %then8283, label %endif8285 then8283: %t1042 = load ptr, ptr %a1 %t1043 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1042, { ptr, i64, i64 } { ptr @.str.5344, i64 17, i64 0 }) store { ptr, i64, i64 } %t1043, ptr %a1044 %t1045 = load ptr, ptr %a1 %t1046 = load { ptr, i64, i64 }, ptr %a1044 call void @finch.gen.store(ptr %t1045, { ptr, i64, i64 } { ptr @.str.5345, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5346, i64 15, i64 0 }, { ptr, i64, i64 } %t1046) %t1047 = load ptr, ptr %a1 %t1048 = load { ptr, i64, i64 }, ptr %a1004 store { ptr, i64, i64 } { ptr @.str.5347, i64 36, i64 0 }, ptr %a1050 store { ptr, i64, i64 } %t1048, ptr %a1051 call void @finch_str_concat(ptr %a1049, ptr %a1050, ptr %a1051) %t1052 = load { ptr, i64, i64 }, ptr %a1049 store { ptr, i64, i64 } %t1052, ptr %a1054 store { ptr, i64, i64 } { ptr @.str.5348, i64 6, i64 0 }, ptr %a1055 call void @finch_str_concat(ptr %a1053, ptr %a1054, ptr %a1055) store { ptr, i64, i64 } %t1052, ptr %a1056 call void @finch_str_drop(ptr %a1056) %t1057 = load { ptr, i64, i64 }, ptr %a1053 %t1058 = load { ptr, i64, i64 }, ptr %a1044 store { ptr, i64, i64 } %t1057, ptr %a1060 store { ptr, i64, i64 } %t1058, ptr %a1061 call void @finch_str_concat(ptr %a1059, ptr %a1060, ptr %a1061) store { ptr, i64, i64 } %t1057, ptr %a1062 call void @finch_str_drop(ptr %a1062) %t1063 = load { ptr, i64, i64 }, ptr %a1059 store { ptr, i64, i64 } %t1063, ptr %a1065 store { ptr, i64, i64 } { ptr @.str.5349, i64 1, i64 0 }, ptr %a1066 call void @finch_str_concat(ptr %a1064, ptr %a1065, ptr %a1066) store { ptr, i64, i64 } %t1063, ptr %a1067 call void @finch_str_drop(ptr %a1067) %t1068 = load { ptr, i64, i64 }, ptr %a1064 %t1069 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1047, { ptr, i64, i64 } %t1068) store { ptr, i64, i64 } %t1068, ptr %a1070 call void @finch_str_drop(ptr %a1070) store { ptr, i64, i64 } %t1069, ptr %a1071 %t1072 = load ptr, ptr %a1 %t1073 = load { ptr, i64, i64 }, ptr %a1071 store { ptr, i64, i64 } { ptr @.str.5350, i64 12, i64 0 }, ptr %a1075 store { ptr, i64, i64 } %t1073, ptr %a1076 call void @finch_str_concat(ptr %a1074, ptr %a1075, ptr %a1076) %t1077 = load { ptr, i64, i64 }, ptr %a1074 store { ptr, i64, i64 } %t1077, ptr %a1079 store { ptr, i64, i64 } { ptr @.str.5351, i64 3, i64 0 }, ptr %a1080 call void @finch_str_concat(ptr %a1078, ptr %a1079, ptr %a1080) store { ptr, i64, i64 } %t1077, ptr %a1081 call void @finch_str_drop(ptr %a1081) %t1082 = load { ptr, i64, i64 }, ptr %a1078 %t1083 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1072, { ptr, i64, i64 } %t1082) store { ptr, i64, i64 } %t1082, ptr %a1084 call void @finch_str_drop(ptr %a1084) %t1085 = load ptr, ptr %a1 %t1086 = icmp eq ptr %t1085, null br i1 %t1086, label %panic8286, label %ok8287 panic8286: call void @finch_panic(ptr @.str.5352, i64 4974, ptr @.str.5353) unreachable ok8287: %t1087 = getelementptr inbounds %S.gen.Gen, ptr %t1085, i32 0, i32 42 %t1088 = load { ptr, i64, i64 }, ptr %t1087 store { ptr, i64, i64 } %t1083, ptr %t1087 store { ptr, i64, i64 } %t1088, ptr %a1089 call void @finch_str_drop(ptr %a1089) %t1090 = load ptr, ptr %a1 %t1091 = load { ptr, i64, i64 }, ptr %a1044 %t1092 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1090, { ptr, i64, i64 } { ptr @.str.5354, i64 17, i64 0 }, { ptr, i64, i64 } %t1091) %t1093 = load ptr, ptr %a1 %t1094 = icmp eq ptr %t1093, null br i1 %t1094, label %panic8288, label %ok8289 panic8288: call void @finch_panic(ptr @.str.5355, i64 4975, ptr @.str.5356) unreachable ok8289: %t1095 = getelementptr inbounds %S.gen.Gen, ptr %t1093, i32 0, i32 43 %t1096 = load { ptr, i64, i64 }, ptr %t1095 store { ptr, i64, i64 } %t1092, ptr %t1095 store { ptr, i64, i64 } %t1096, ptr %a1097 call void @finch_str_drop(ptr %a1097) %t1098 = load ptr, ptr %a1 %t1099 = load { ptr, i64, i64 }, ptr %a1004 %t1100 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5357, i64 3, i64 0 }) call void @finch.gen.dropAt(ptr %t1098, { ptr, i64, i64 } %t1099, %S.ast.Type %t1100) store %S.ast.Type %t1100, ptr %a1101 call void @finch.drop.S_ast_Type(ptr %a1101) %t1102 = load ptr, ptr %a1 %t1103 = load %S.gen.Val, ptr %a1001 call void @finch.gen.release(ptr %t1102, %S.gen.Val %t1103) %t1104 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5358, i64 4, i64 0 }) %t1105 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1104, 1 call void @finch_str_drop(ptr %a1071) call void @finch_str_drop(ptr %a1044) call void @finch_str_drop(ptr %a1004) call void @finch.drop.S_gen_Val(ptr %a1001) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1105 endif8285: %t1106 = load ptr, ptr %a1 %t1107 = load { ptr, i64, i64 }, ptr %a1004 store { ptr, i64, i64 } { ptr @.str.5359, i64 32, i64 0 }, ptr %a1109 store { ptr, i64, i64 } %t1107, ptr %a1110 call void @finch_str_concat(ptr %a1108, ptr %a1109, ptr %a1110) %t1111 = load { ptr, i64, i64 }, ptr %a1108 store { ptr, i64, i64 } %t1111, ptr %a1113 store { ptr, i64, i64 } { ptr @.str.5360, i64 1, i64 0 }, ptr %a1114 call void @finch_str_concat(ptr %a1112, ptr %a1113, ptr %a1114) store { ptr, i64, i64 } %t1111, ptr %a1115 call void @finch_str_drop(ptr %a1115) %t1116 = load { ptr, i64, i64 }, ptr %a1112 %t1117 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1106, { ptr, i64, i64 } %t1116) store { ptr, i64, i64 } %t1116, ptr %a1118 call void @finch_str_drop(ptr %a1118) store { ptr, i64, i64 } %t1117, ptr %a1119 %t1120 = load ptr, ptr %a1 %t1121 = load { ptr, i64, i64 }, ptr %a1004 %t1122 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5361, i64 3, i64 0 }) call void @finch.gen.dropAt(ptr %t1120, { ptr, i64, i64 } %t1121, %S.ast.Type %t1122) store %S.ast.Type %t1122, ptr %a1123 call void @finch.drop.S_ast_Type(ptr %a1123) %t1124 = load ptr, ptr %a1 %t1125 = load %S.gen.Val, ptr %a1001 call void @finch.gen.release(ptr %t1124, %S.gen.Val %t1125) %t1126 = load ptr, ptr %a1 %t1127 = load { ptr, i64, i64 }, ptr %a1119 store { ptr, i64, i64 } { ptr @.str.5362, i64 12, i64 0 }, ptr %a1129 store { ptr, i64, i64 } %t1127, ptr %a1130 call void @finch_str_concat(ptr %a1128, ptr %a1129, ptr %a1130) %t1131 = load { ptr, i64, i64 }, ptr %a1128 store { ptr, i64, i64 } %t1131, ptr %a1133 store { ptr, i64, i64 } { ptr @.str.5363, i64 3, i64 0 }, ptr %a1134 call void @finch_str_concat(ptr %a1132, ptr %a1133, ptr %a1134) store { ptr, i64, i64 } %t1131, ptr %a1135 call void @finch_str_drop(ptr %a1135) %t1136 = load { ptr, i64, i64 }, ptr %a1132 %t1137 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1126, { ptr, i64, i64 } %t1136) store { ptr, i64, i64 } %t1136, ptr %a1138 call void @finch_str_drop(ptr %a1138) %t1139 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1137, 0 %t1140 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5364, i64 4, i64 0 }) %t1141 = insertvalue %S.gen.Val %t1139, %S.ast.Type %t1140, 1 call void @finch_str_drop(ptr %a1119) call void @finch_str_drop(ptr %a1004) call void @finch.drop.S_gen_Val(ptr %a1001) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1141 endif8278: %t1142 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1142, ptr %a1143 store { ptr, i64, i64 } { ptr @.str.5365, i64 5, i64 0 }, ptr %a1144 %t1145 = call i32 @finch_str_eq(ptr %a1143, ptr %a1144) %t1146 = icmp ne i32 %t1145, 0 br i1 %t1146, label %then8290, label %endif8292 then8290: %t1147 = load ptr, ptr %a1 %t1148 = load %S.ast.Node, ptr %a2 %t1149 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t1147, %S.ast.Node %t1148, i64 0, i64 1, { ptr, i64, i64 } %t1149) %t1150 = load ptr, ptr %a1 %t1151 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1152 = load { ptr, i64, i64 }, ptr %t1151 %t1153 = extractvalue { ptr, i64, i64 } %t1152, 1 %t1154 = icmp uge i64 0, %t1153 br i1 %t1154, label %range8293, label %inrange8294 range8293: call void @finch_panic_index(ptr @.str.5366, i64 4987, i64 0, i64 %t1153) unreachable inrange8294: %t1155 = extractvalue { ptr, i64, i64 } %t1152, 0 %t1156 = getelementptr inbounds %S.ast.Node, ptr %t1155, i64 0 %t1157 = load %S.ast.Node, ptr %t1156 %t1158 = call %S.gen.Val @finch.gen.strArg(ptr %t1150, %S.ast.Node %t1157, { ptr, i64, i64 } { ptr @.str.5367, i64 11, i64 0 }) store %S.gen.Val %t1158, ptr %a1159 %t1160 = load ptr, ptr %a1 %t1161 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1160) store { ptr, i64, i64 } %t1161, ptr %a1162 %t1163 = load ptr, ptr %a1 %t1164 = load { ptr, i64, i64 }, ptr %a1162 store { ptr, i64, i64 } { ptr @.str.5368, i64 30, i64 0 }, ptr %a1166 store { ptr, i64, i64 } %t1164, ptr %a1167 call void @finch_str_concat(ptr %a1165, ptr %a1166, ptr %a1167) %t1168 = load { ptr, i64, i64 }, ptr %a1165 store { ptr, i64, i64 } %t1168, ptr %a1170 store { ptr, i64, i64 } { ptr @.str.5369, i64 6, i64 0 }, ptr %a1171 call void @finch_str_concat(ptr %a1169, ptr %a1170, ptr %a1171) store { ptr, i64, i64 } %t1168, ptr %a1172 call void @finch_str_drop(ptr %a1172) %t1173 = load { ptr, i64, i64 }, ptr %a1169 %t1174 = load ptr, ptr %a1 %t1175 = load %S.gen.Val, ptr %a1159 %t1176 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t1174, %S.gen.Val %t1175) store { ptr, i64, i64 } %t1173, ptr %a1178 store { ptr, i64, i64 } %t1176, ptr %a1179 call void @finch_str_concat(ptr %a1177, ptr %a1178, ptr %a1179) store { ptr, i64, i64 } %t1173, ptr %a1180 call void @finch_str_drop(ptr %a1180) store { ptr, i64, i64 } %t1176, ptr %a1181 call void @finch_str_drop(ptr %a1181) %t1182 = load { ptr, i64, i64 }, ptr %a1177 store { ptr, i64, i64 } %t1182, ptr %a1184 store { ptr, i64, i64 } { ptr @.str.5370, i64 1, i64 0 }, ptr %a1185 call void @finch_str_concat(ptr %a1183, ptr %a1184, ptr %a1185) store { ptr, i64, i64 } %t1182, ptr %a1186 call void @finch_str_drop(ptr %a1186) %t1187 = load { ptr, i64, i64 }, ptr %a1183 call void @finch.gen.emit(ptr %t1163, { ptr, i64, i64 } %t1187) store { ptr, i64, i64 } %t1187, ptr %a1188 call void @finch_str_drop(ptr %a1188) %t1189 = load ptr, ptr %a1 %t1190 = load { ptr, i64, i64 }, ptr %a1162 store { ptr, i64, i64 } { ptr @.str.5371, i64 26, i64 0 }, ptr %a1192 store { ptr, i64, i64 } %t1190, ptr %a1193 call void @finch_str_concat(ptr %a1191, ptr %a1192, ptr %a1193) %t1194 = load { ptr, i64, i64 }, ptr %a1191 store { ptr, i64, i64 } %t1194, ptr %a1196 store { ptr, i64, i64 } { ptr @.str.5372, i64 1, i64 0 }, ptr %a1197 call void @finch_str_concat(ptr %a1195, ptr %a1196, ptr %a1197) store { ptr, i64, i64 } %t1194, ptr %a1198 call void @finch_str_drop(ptr %a1198) %t1199 = load { ptr, i64, i64 }, ptr %a1195 %t1200 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1189, { ptr, i64, i64 } %t1199) store { ptr, i64, i64 } %t1199, ptr %a1201 call void @finch_str_drop(ptr %a1201) store { ptr, i64, i64 } %t1200, ptr %a1202 %t1203 = load ptr, ptr %a1 %t1204 = load { ptr, i64, i64 }, ptr %a1162 %t1205 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5373, i64 3, i64 0 }) call void @finch.gen.dropAt(ptr %t1203, { ptr, i64, i64 } %t1204, %S.ast.Type %t1205) store %S.ast.Type %t1205, ptr %a1206 call void @finch.drop.S_ast_Type(ptr %a1206) %t1207 = load ptr, ptr %a1 %t1208 = load %S.gen.Val, ptr %a1159 call void @finch.gen.release(ptr %t1207, %S.gen.Val %t1208) %t1209 = load { ptr, i64, i64 }, ptr %a1202 store { ptr, i64, i64 } %t1209, ptr %a1210 call void @finch_str_copy(ptr %a1211, ptr %a1210) %t1212 = load { ptr, i64, i64 }, ptr %a1211 %t1213 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1212, 0 %t1214 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5374, i64 3, i64 0 }) %t1215 = insertvalue %S.gen.Val %t1213, %S.ast.Type %t1214, 1 call void @finch_str_drop(ptr %a1202) call void @finch_str_drop(ptr %a1162) call void @finch.drop.S_gen_Val(ptr %a1159) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1215 endif8292: %t1216 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1216, ptr %a1217 store { ptr, i64, i64 } { ptr @.str.5375, i64 4, i64 0 }, ptr %a1218 %t1219 = call i32 @finch_str_eq(ptr %a1217, ptr %a1218) %t1220 = icmp ne i32 %t1219, 0 br i1 %t1220, label %then8295, label %endif8297 then8295: %t1221 = load ptr, ptr %a1 %t1222 = load %S.ast.Node, ptr %a2 %t1223 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t1221, %S.ast.Node %t1222, i64 0, i64 1, { ptr, i64, i64 } %t1223) %t1224 = load ptr, ptr %a1 %t1225 = load ptr, ptr %a1 %t1226 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1227 = load { ptr, i64, i64 }, ptr %t1226 %t1228 = extractvalue { ptr, i64, i64 } %t1227, 1 %t1229 = icmp uge i64 0, %t1228 br i1 %t1229, label %range8298, label %inrange8299 range8298: call void @finch_panic_index(ptr @.str.5376, i64 4997, i64 0, i64 %t1228) unreachable inrange8299: %t1230 = extractvalue { ptr, i64, i64 } %t1227, 0 %t1231 = getelementptr inbounds %S.ast.Node, ptr %t1230, i64 0 %t1232 = load %S.ast.Node, ptr %t1231 %t1233 = call %S.gen.Val @finch.gen.expr(ptr %t1225, %S.ast.Node %t1232) %t1234 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5377, i64 3, i64 0 }) %t1235 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1236 = load { ptr, i64, i64 }, ptr %t1235 %t1237 = extractvalue { ptr, i64, i64 } %t1236, 1 %t1238 = icmp uge i64 0, %t1237 br i1 %t1238, label %range8300, label %inrange8301 range8300: call void @finch_panic_index(ptr @.str.5378, i64 4997, i64 0, i64 %t1237) unreachable inrange8301: %t1239 = extractvalue { ptr, i64, i64 } %t1236, 0 %t1240 = getelementptr inbounds %S.ast.Node, ptr %t1239, i64 0 %t1241 = load %S.ast.Node, ptr %t1240 %t1242 = call %S.gen.Val @finch.gen.coerce(ptr %t1224, %S.gen.Val %t1233, %S.ast.Type %t1234, %S.ast.Node %t1241, { ptr, i64, i64 } { ptr @.str.5379, i64 13, i64 0 }) store %S.gen.Val %t1233, ptr %a1243 call void @finch.drop.S_gen_Val(ptr %a1243) store %S.ast.Type %t1234, ptr %a1244 call void @finch.drop.S_ast_Type(ptr %a1244) store %S.gen.Val %t1242, ptr %a1245 %t1246 = load ptr, ptr %a1 %t1247 = getelementptr inbounds %S.gen.Val, ptr %a1245, i32 0, i32 0 %t1248 = load { ptr, i64, i64 }, ptr %t1247 store { ptr, i64, i64 } { ptr @.str.5380, i64 10, i64 0 }, ptr %a1250 store { ptr, i64, i64 } %t1248, ptr %a1251 call void @finch_str_concat(ptr %a1249, ptr %a1250, ptr %a1251) %t1252 = load { ptr, i64, i64 }, ptr %a1249 store { ptr, i64, i64 } %t1252, ptr %a1254 store { ptr, i64, i64 } { ptr @.str.5381, i64 7, i64 0 }, ptr %a1255 call void @finch_str_concat(ptr %a1253, ptr %a1254, ptr %a1255) store { ptr, i64, i64 } %t1252, ptr %a1256 call void @finch_str_drop(ptr %a1256) %t1257 = load { ptr, i64, i64 }, ptr %a1253 %t1258 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1246, { ptr, i64, i64 } %t1257) store { ptr, i64, i64 } %t1257, ptr %a1259 call void @finch_str_drop(ptr %a1259) store { ptr, i64, i64 } %t1258, ptr %a1260 %t1261 = load ptr, ptr %a1 %t1262 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1261, { ptr, i64, i64 } { ptr @.str.5382, i64 26, i64 0 }) store { ptr, i64, i64 } %t1262, ptr %a1263 %t1264 = load ptr, ptr %a1 %t1265 = load { ptr, i64, i64 }, ptr %a1260 store { ptr, i64, i64 } { ptr @.str.5383, i64 20, i64 0 }, ptr %a1267 store { ptr, i64, i64 } %t1265, ptr %a1268 call void @finch_str_concat(ptr %a1266, ptr %a1267, ptr %a1268) %t1269 = load { ptr, i64, i64 }, ptr %a1266 store { ptr, i64, i64 } %t1269, ptr %a1271 store { ptr, i64, i64 } { ptr @.str.5384, i64 1, i64 0 }, ptr %a1272 call void @finch_str_concat(ptr %a1270, ptr %a1271, ptr %a1272) store { ptr, i64, i64 } %t1269, ptr %a1273 call void @finch_str_drop(ptr %a1273) %t1274 = load { ptr, i64, i64 }, ptr %a1270 call void @finch.gen.emit(ptr %t1264, { ptr, i64, i64 } %t1274) store { ptr, i64, i64 } %t1274, ptr %a1275 call void @finch_str_drop(ptr %a1275) %t1276 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5385, i64 4, i64 0 }) %t1277 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1276, 1 call void @finch_str_drop(ptr %a1263) call void @finch_str_drop(ptr %a1260) call void @finch.drop.S_gen_Val(ptr %a1245) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1277 endif8297: %t1278 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1278, ptr %a1279 store { ptr, i64, i64 } { ptr @.str.5386, i64 5, i64 0 }, ptr %a1280 %t1281 = call i32 @finch_str_eq(ptr %a1279, ptr %a1280) %t1282 = icmp ne i32 %t1281, 0 br i1 %t1282, label %then8302, label %endif8304 then8302: %t1283 = load ptr, ptr %a1 %t1284 = call %S.gen.Val @finch.gen.strConst(ptr %t1283, { ptr, i64, i64 } { ptr @.str.5387, i64 0, i64 0 }) store %S.gen.Val %t1284, ptr %a1285 %t1286 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1287 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1286, i32 0, i32 1 %t1288 = load i64, ptr %t1287 %t1289 = icmp sgt i64 %t1288, 0 br i1 %t1289, label %then8305, label %endif8307 then8305: %t1290 = load ptr, ptr %a1 %t1291 = load %S.ast.Node, ptr %a2 %t1292 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t1290, %S.ast.Node %t1291, i64 0, i64 1, { ptr, i64, i64 } %t1292) %t1293 = load ptr, ptr %a1 %t1294 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1295 = load { ptr, i64, i64 }, ptr %t1294 %t1296 = extractvalue { ptr, i64, i64 } %t1295, 1 %t1297 = icmp uge i64 0, %t1296 br i1 %t1297, label %range8308, label %inrange8309 range8308: call void @finch_panic_index(ptr @.str.5388, i64 5007, i64 0, i64 %t1296) unreachable inrange8309: %t1298 = extractvalue { ptr, i64, i64 } %t1295, 0 %t1299 = getelementptr inbounds %S.ast.Node, ptr %t1298, i64 0 %t1300 = load %S.ast.Node, ptr %t1299 %t1301 = call %S.gen.Val @finch.gen.strArg(ptr %t1293, %S.ast.Node %t1300, { ptr, i64, i64 } { ptr @.str.5389, i64 12, i64 0 }) %t1302 = load %S.gen.Val, ptr %a1285 store %S.gen.Val %t1301, ptr %a1285 store %S.gen.Val %t1302, ptr %a1303 call void @finch.drop.S_gen_Val(ptr %a1303) br label %endif8307 endif8307: %t1304 = load ptr, ptr %a1 %t1305 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1304) store { ptr, i64, i64 } %t1305, ptr %a1306 %t1307 = load ptr, ptr %a1 %t1308 = load { ptr, i64, i64 }, ptr %a1306 store { ptr, i64, i64 } { ptr @.str.5390, i64 27, i64 0 }, ptr %a1310 store { ptr, i64, i64 } %t1308, ptr %a1311 call void @finch_str_concat(ptr %a1309, ptr %a1310, ptr %a1311) %t1312 = load { ptr, i64, i64 }, ptr %a1309 store { ptr, i64, i64 } %t1312, ptr %a1314 store { ptr, i64, i64 } { ptr @.str.5391, i64 6, i64 0 }, ptr %a1315 call void @finch_str_concat(ptr %a1313, ptr %a1314, ptr %a1315) store { ptr, i64, i64 } %t1312, ptr %a1316 call void @finch_str_drop(ptr %a1316) %t1317 = load { ptr, i64, i64 }, ptr %a1313 %t1318 = load ptr, ptr %a1 %t1319 = load %S.gen.Val, ptr %a1285 %t1320 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t1318, %S.gen.Val %t1319) store { ptr, i64, i64 } %t1317, ptr %a1322 store { ptr, i64, i64 } %t1320, ptr %a1323 call void @finch_str_concat(ptr %a1321, ptr %a1322, ptr %a1323) store { ptr, i64, i64 } %t1317, ptr %a1324 call void @finch_str_drop(ptr %a1324) store { ptr, i64, i64 } %t1320, ptr %a1325 call void @finch_str_drop(ptr %a1325) %t1326 = load { ptr, i64, i64 }, ptr %a1321 store { ptr, i64, i64 } %t1326, ptr %a1328 store { ptr, i64, i64 } { ptr @.str.5392, i64 1, i64 0 }, ptr %a1329 call void @finch_str_concat(ptr %a1327, ptr %a1328, ptr %a1329) store { ptr, i64, i64 } %t1326, ptr %a1330 call void @finch_str_drop(ptr %a1330) %t1331 = load { ptr, i64, i64 }, ptr %a1327 call void @finch.gen.emit(ptr %t1307, { ptr, i64, i64 } %t1331) store { ptr, i64, i64 } %t1331, ptr %a1332 call void @finch_str_drop(ptr %a1332) %t1333 = load ptr, ptr %a1 %t1334 = load %S.gen.Val, ptr %a1285 call void @finch.gen.release(ptr %t1333, %S.gen.Val %t1334) %t1335 = load ptr, ptr %a1 %t1336 = load { ptr, i64, i64 }, ptr %a1306 %t1337 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1335, { ptr, i64, i64 } { ptr @.str.5393, i64 17, i64 0 }, { ptr, i64, i64 } %t1336) %t1338 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1337, 0 %t1339 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5394, i64 3, i64 0 }) %t1340 = insertvalue %S.gen.Val %t1338, %S.ast.Type %t1339, 1 %t1341 = insertvalue %S.gen.Val %t1340, i1 true, 2 call void @finch_str_drop(ptr %a1306) call void @finch.drop.S_gen_Val(ptr %a1285) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1341 endif8304: %t1342 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1342, ptr %a1343 store { ptr, i64, i64 } { ptr @.str.5395, i64 3, i64 0 }, ptr %a1344 %t1345 = call i32 @finch_str_eq(ptr %a1343, ptr %a1344) %t1346 = icmp ne i32 %t1345, 0 br i1 %t1346, label %then8310, label %endif8312 then8310: %t1347 = load ptr, ptr %a1 %t1348 = load %S.ast.Node, ptr %a2 %t1349 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t1347, %S.ast.Node %t1348, i64 0, i64 1, { ptr, i64, i64 } %t1349) %t1350 = load ptr, ptr %a1 %t1351 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1352 = load { ptr, i64, i64 }, ptr %t1351 %t1353 = extractvalue { ptr, i64, i64 } %t1352, 1 %t1354 = icmp uge i64 0, %t1353 br i1 %t1354, label %range8313, label %inrange8314 range8313: call void @finch_panic_index(ptr @.str.5396, i64 5016, i64 0, i64 %t1353) unreachable inrange8314: %t1355 = extractvalue { ptr, i64, i64 } %t1352, 0 %t1356 = getelementptr inbounds %S.ast.Node, ptr %t1355, i64 0 %t1357 = load %S.ast.Node, ptr %t1356 %t1358 = call %S.gen.Val @finch.gen.expr(ptr %t1350, %S.ast.Node %t1357) store %S.gen.Val %t1358, ptr %a1359 %t1360 = load ptr, ptr %a1 %t1361 = load ptr, ptr %a1 %t1362 = getelementptr inbounds %S.gen.Val, ptr %a1359, i32 0, i32 1 %t1363 = load %S.ast.Type, ptr %t1362 %t1364 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1361, %S.ast.Type %t1363) store { ptr, i64, i64 } { ptr @.str.5397, i64 26, i64 0 }, ptr %a1366 store { ptr, i64, i64 } %t1364, ptr %a1367 call void @finch_str_concat(ptr %a1365, ptr %a1366, ptr %a1367) store { ptr, i64, i64 } %t1364, ptr %a1368 call void @finch_str_drop(ptr %a1368) %t1369 = load { ptr, i64, i64 }, ptr %a1365 store { ptr, i64, i64 } %t1369, ptr %a1371 store { ptr, i64, i64 } { ptr @.str.5398, i64 1, i64 0 }, ptr %a1372 call void @finch_str_concat(ptr %a1370, ptr %a1371, ptr %a1372) store { ptr, i64, i64 } %t1369, ptr %a1373 call void @finch_str_drop(ptr %a1373) %t1374 = load { ptr, i64, i64 }, ptr %a1370 %t1375 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1360, { ptr, i64, i64 } %t1374) store { ptr, i64, i64 } %t1374, ptr %a1376 call void @finch_str_drop(ptr %a1376) store { ptr, i64, i64 } %t1375, ptr %a1377 %t1378 = load ptr, ptr %a1 %t1379 = load ptr, ptr %a1 %t1380 = getelementptr inbounds %S.gen.Val, ptr %a1359, i32 0, i32 1 %t1381 = load %S.ast.Type, ptr %t1380 %t1382 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t1379, %S.ast.Type %t1381) %t1383 = load ptr, ptr %a1 %t1384 = load %S.gen.Val, ptr %a1359 %t1385 = call { ptr, i64, i64 } @finch.gen.own(ptr %t1383, %S.gen.Val %t1384) %t1386 = load { ptr, i64, i64 }, ptr %a1377 call void @finch.gen.store(ptr %t1378, { ptr, i64, i64 } %t1382, { ptr, i64, i64 } %t1385, { ptr, i64, i64 } %t1386) store { ptr, i64, i64 } %t1382, ptr %a1387 call void @finch_str_drop(ptr %a1387) store { ptr, i64, i64 } %t1385, ptr %a1388 call void @finch_str_drop(ptr %a1388) %t1389 = load { ptr, i64, i64 }, ptr %a1377 store { ptr, i64, i64 } %t1389, ptr %a1390 call void @finch_str_copy(ptr %a1391, ptr %a1390) %t1392 = load { ptr, i64, i64 }, ptr %a1391 %t1393 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1392, 0 %t1394 = getelementptr inbounds %S.gen.Val, ptr %a1359, i32 0, i32 1 %t1395 = load %S.ast.Type, ptr %t1394 %t1396 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t1395) %t1397 = insertvalue %S.gen.Val %t1393, %S.ast.Type %t1396, 1 call void @finch_str_drop(ptr %a1377) call void @finch.drop.S_gen_Val(ptr %a1359) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1397 endif8312: %t1398 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1398, ptr %a1399 store { ptr, i64, i64 } { ptr @.str.5399, i64 4, i64 0 }, ptr %a1400 %t1401 = call i32 @finch_str_eq(ptr %a1399, ptr %a1400) %t1402 = icmp ne i32 %t1401, 0 br i1 %t1402, label %then8315, label %endif8317 then8315: %t1403 = load ptr, ptr %a1 %t1404 = load %S.ast.Node, ptr %a2 %t1405 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t1403, %S.ast.Node %t1404, i64 0, i64 1, { ptr, i64, i64 } %t1405) %t1406 = load ptr, ptr %a1 %t1407 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1408 = load { ptr, i64, i64 }, ptr %t1407 %t1409 = extractvalue { ptr, i64, i64 } %t1408, 1 %t1410 = icmp uge i64 0, %t1409 br i1 %t1410, label %range8318, label %inrange8319 range8318: call void @finch_panic_index(ptr @.str.5400, i64 5023, i64 0, i64 %t1409) unreachable inrange8319: %t1411 = extractvalue { ptr, i64, i64 } %t1408, 0 %t1412 = getelementptr inbounds %S.ast.Node, ptr %t1411, i64 0 %t1413 = load %S.ast.Node, ptr %t1412 %t1414 = call %S.gen.Val @finch.gen.expr(ptr %t1406, %S.ast.Node %t1413) store %S.gen.Val %t1414, ptr %a1415 %t1416 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 %t1417 = getelementptr inbounds %S.ast.Type, ptr %t1416, i32 0, i32 0 %t1418 = load { ptr, i64, i64 }, ptr %t1417 store { ptr, i64, i64 } %t1418, ptr %a1419 store { ptr, i64, i64 } { ptr @.str.5401, i64 3, i64 0 }, ptr %a1420 %t1421 = call i32 @finch_str_eq(ptr %a1419, ptr %a1420) %t1422 = icmp eq i32 %t1421, 0 br i1 %t1422, label %then8320, label %endif8322 then8320: %t1423 = load ptr, ptr %a1 %t1424 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1425 = load { ptr, i64, i64 }, ptr %t1424 %t1426 = extractvalue { ptr, i64, i64 } %t1425, 1 %t1427 = icmp uge i64 0, %t1426 br i1 %t1427, label %range8323, label %inrange8324 range8323: call void @finch_panic_index(ptr @.str.5402, i64 5025, i64 0, i64 %t1426) unreachable inrange8324: %t1428 = extractvalue { ptr, i64, i64 } %t1425, 0 %t1429 = getelementptr inbounds %S.ast.Node, ptr %t1428, i64 0 %t1430 = load %S.ast.Node, ptr %t1429 call void @finch.gen.fail(ptr %t1423, %S.ast.Node %t1430, { ptr, i64, i64 } { ptr @.str.5403, i64 119, i64 0 }) br label %endif8322 endif8322: %t1431 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 %t1432 = getelementptr inbounds %S.ast.Type, ptr %t1431, i32 0, i32 1 %t1433 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1432, i32 0, i32 1 %t1434 = load i64, ptr %t1433 %t1435 = icmp sgt i64 %t1434, 0 br label %logic.from8325 logic.from8325: br i1 %t1435, label %logic.rhs8326, label %logic.end8327 logic.rhs8326: %t1436 = load ptr, ptr %a1 %t1437 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 %t1438 = getelementptr inbounds %S.ast.Type, ptr %t1437, i32 0, i32 1 %t1439 = load { ptr, i64, i64 }, ptr %t1438 %t1440 = extractvalue { ptr, i64, i64 } %t1439, 1 %t1441 = icmp uge i64 0, %t1440 br i1 %t1441, label %range8328, label %inrange8329 range8328: call void @finch_panic_index(ptr @.str.5404, i64 5027, i64 0, i64 %t1440) unreachable inrange8329: %t1442 = extractvalue { ptr, i64, i64 } %t1439, 0 %t1443 = getelementptr inbounds %S.ast.Type, ptr %t1442, i64 0 %t1444 = load %S.ast.Type, ptr %t1443 %t1445 = call i1 @finch.gen.owning(ptr %t1436, %S.ast.Type %t1444) br label %logic.rend8330 logic.rend8330: br label %logic.end8327 logic.end8327: %t1446 = phi i1 [ false, %logic.from8325 ], [ %t1445, %logic.rend8330 ] br i1 %t1446, label %then8331, label %endif8333 then8331: %t1447 = load ptr, ptr %a1 %t1448 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t1447, { ptr, i64, i64 } { ptr @.str.5405, i64 9, i64 0 }) store { ptr, i64, i64 } %t1448, ptr %a1449 %t1450 = load ptr, ptr %a1 %t1451 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t1450, { ptr, i64, i64 } { ptr @.str.5406, i64 9, i64 0 }) store { ptr, i64, i64 } %t1451, ptr %a1452 %t1453 = load ptr, ptr %a1 %t1454 = load ptr, ptr %a1 %t1455 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 0 %t1456 = load { ptr, i64, i64 }, ptr %t1455 store { ptr, i64, i64 } { ptr @.str.5407, i64 12, i64 0 }, ptr %a1458 store { ptr, i64, i64 } %t1456, ptr %a1459 call void @finch_str_concat(ptr %a1457, ptr %a1458, ptr %a1459) %t1460 = load { ptr, i64, i64 }, ptr %a1457 store { ptr, i64, i64 } %t1460, ptr %a1462 store { ptr, i64, i64 } { ptr @.str.5408, i64 6, i64 0 }, ptr %a1463 call void @finch_str_concat(ptr %a1461, ptr %a1462, ptr %a1463) store { ptr, i64, i64 } %t1460, ptr %a1464 call void @finch_str_drop(ptr %a1464) %t1465 = load { ptr, i64, i64 }, ptr %a1461 %t1466 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1454, { ptr, i64, i64 } %t1465) store { ptr, i64, i64 } %t1465, ptr %a1467 call void @finch_str_drop(ptr %a1467) %t1468 = load { ptr, i64, i64 }, ptr %a1452 %t1469 = load { ptr, i64, i64 }, ptr %a1449 call void @finch.gen.condBr(ptr %t1453, { ptr, i64, i64 } %t1466, { ptr, i64, i64 } %t1468, { ptr, i64, i64 } %t1469) store { ptr, i64, i64 } %t1466, ptr %a1470 call void @finch_str_drop(ptr %a1470) %t1471 = load ptr, ptr %a1 %t1472 = load { ptr, i64, i64 }, ptr %a1449 call void @finch.gen.label(ptr %t1471, { ptr, i64, i64 } %t1472) %t1473 = load ptr, ptr %a1 %t1474 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 0 %t1475 = load { ptr, i64, i64 }, ptr %t1474 %t1476 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 %t1477 = getelementptr inbounds %S.ast.Type, ptr %t1476, i32 0, i32 1 %t1478 = load { ptr, i64, i64 }, ptr %t1477 %t1479 = extractvalue { ptr, i64, i64 } %t1478, 1 %t1480 = icmp uge i64 0, %t1479 br i1 %t1480, label %range8334, label %inrange8335 range8334: call void @finch_panic_index(ptr @.str.5409, i64 5032, i64 0, i64 %t1479) unreachable inrange8335: %t1481 = extractvalue { ptr, i64, i64 } %t1478, 0 %t1482 = getelementptr inbounds %S.ast.Type, ptr %t1481, i64 0 %t1483 = load %S.ast.Type, ptr %t1482 call void @finch.gen.dropAt(ptr %t1473, { ptr, i64, i64 } %t1475, %S.ast.Type %t1483) %t1484 = load ptr, ptr %a1 %t1485 = load { ptr, i64, i64 }, ptr %a1452 call void @finch.gen.br(ptr %t1484, { ptr, i64, i64 } %t1485) %t1486 = load ptr, ptr %a1 %t1487 = load { ptr, i64, i64 }, ptr %a1452 call void @finch.gen.label(ptr %t1486, { ptr, i64, i64 } %t1487) call void @finch_str_drop(ptr %a1452) call void @finch_str_drop(ptr %a1449) br label %endif8333 endif8333: %t1488 = load ptr, ptr %a1 %t1489 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 0 %t1490 = load { ptr, i64, i64 }, ptr %t1489 store { ptr, i64, i64 } { ptr @.str.5410, i64 20, i64 0 }, ptr %a1492 store { ptr, i64, i64 } %t1490, ptr %a1493 call void @finch_str_concat(ptr %a1491, ptr %a1492, ptr %a1493) %t1494 = load { ptr, i64, i64 }, ptr %a1491 store { ptr, i64, i64 } %t1494, ptr %a1496 store { ptr, i64, i64 } { ptr @.str.5411, i64 1, i64 0 }, ptr %a1497 call void @finch_str_concat(ptr %a1495, ptr %a1496, ptr %a1497) store { ptr, i64, i64 } %t1494, ptr %a1498 call void @finch_str_drop(ptr %a1498) %t1499 = load { ptr, i64, i64 }, ptr %a1495 call void @finch.gen.emit(ptr %t1488, { ptr, i64, i64 } %t1499) store { ptr, i64, i64 } %t1499, ptr %a1500 call void @finch_str_drop(ptr %a1500) %t1501 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5412, i64 4, i64 0 }) %t1502 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1501, 1 call void @finch.drop.S_gen_Val(ptr %a1415) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1502 endif8317: %t1503 = load ptr, ptr %a1 %t1504 = load ptr, ptr %a1 %t1505 = icmp eq ptr %t1504, null br i1 %t1505, label %panic8336, label %ok8337 panic8336: call void @finch_panic(ptr @.str.5413, i64 5039, ptr @.str.5414) unreachable ok8337: %t1506 = getelementptr inbounds %S.gen.Gen, ptr %t1504, i32 0, i32 14 %t1507 = load { ptr, i64, i64 }, ptr %t1506 %t1508 = load { ptr, i64, i64 }, ptr %a8 %t1509 = call i64 @finch.gen.findFn(ptr %t1503, { ptr, i64, i64 } %t1507, { ptr, i64, i64 } %t1508) store i64 %t1509, ptr %a1510 %t1511 = load i64, ptr %a1510 %t1512 = icmp sge i64 %t1511, 0 br i1 %t1512, label %then8338, label %endif8340 then8338: %t1513 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t1514 = getelementptr inbounds %S.ast.Type, ptr %t1513, i32 0, i32 1 %t1515 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1514, i32 0, i32 1 %t1516 = load i64, ptr %t1515 %t1517 = icmp sgt i64 %t1516, 0 br i1 %t1517, label %then8341, label %endif8343 then8341: %t1518 = load ptr, ptr %a1 %t1519 = load %S.ast.Node, ptr %a2 %t1520 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.5415, i64 1, i64 0 }, ptr %a1522 store { ptr, i64, i64 } %t1520, ptr %a1523 call void @finch_str_concat(ptr %a1521, ptr %a1522, ptr %a1523) %t1524 = load { ptr, i64, i64 }, ptr %a1521 store { ptr, i64, i64 } %t1524, ptr %a1526 store { ptr, i64, i64 } { ptr @.str.5416, i64 47, i64 0 }, ptr %a1527 call void @finch_str_concat(ptr %a1525, ptr %a1526, ptr %a1527) store { ptr, i64, i64 } %t1524, ptr %a1528 call void @finch_str_drop(ptr %a1528) %t1529 = load { ptr, i64, i64 }, ptr %a1525 call void @finch.gen.fail(ptr %t1518, %S.ast.Node %t1519, { ptr, i64, i64 } %t1529) store { ptr, i64, i64 } %t1529, ptr %a1530 call void @finch_str_drop(ptr %a1530) br label %endif8343 endif8343: %t1531 = load ptr, ptr %a1 %t1532 = load i64, ptr %a1510 %t1533 = load %S.ast.Node, ptr %a2 %t1534 = load { ptr, i64, i64 }, ptr %a8 %t1535 = call %S.gen.Val @finch.gen.callFn(ptr %t1531, i64 %t1532, %S.ast.Node %t1533, i64 0, { ptr, i64, i64 } %t1534, { ptr, i64, i64 } { ptr @.str.5417, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.5418, i64 0, i64 0 }) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1535 endif8340: %t1536 = load ptr, ptr %a1 %t1537 = load ptr, ptr %a1 %t1538 = icmp eq ptr %t1537, null br i1 %t1538, label %panic8344, label %ok8345 panic8344: call void @finch_panic(ptr @.str.5419, i64 5046, ptr @.str.5420) unreachable ok8345: %t1539 = getelementptr inbounds %S.gen.Gen, ptr %t1537, i32 0, i32 14 %t1540 = load { ptr, i64, i64 }, ptr %t1539 %t1541 = load { ptr, i64, i64 }, ptr %a8 %t1542 = call i64 @finch.gen.findTemplate(ptr %t1536, { ptr, i64, i64 } %t1540, { ptr, i64, i64 } %t1541, { ptr, i64, i64 } { ptr @.str.5421, i64 0, i64 0 }, i1 false) store i64 %t1542, ptr %a1543 %t1544 = load i64, ptr %a1543 %t1545 = icmp sge i64 %t1544, 0 br i1 %t1545, label %then8346, label %endif8348 then8346: %t1546 = load ptr, ptr %a1 %t1547 = load %S.ast.Node, ptr %a2 %t1548 = load i64, ptr %a1543 %t1549 = load { ptr, i64, i64 }, ptr %a8 %t1550 = call %S.gen.Val @finch.gen.genericCall(ptr %t1546, %S.ast.Node %t1547, i64 %t1548, i64 0, { ptr, i64, i64 } %t1549) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1550 endif8348: %t1551 = load ptr, ptr %a1 %t1552 = load ptr, ptr %a1 %t1553 = icmp eq ptr %t1552, null br i1 %t1553, label %panic8349, label %ok8350 panic8349: call void @finch_panic(ptr @.str.5422, i64 5050, ptr @.str.5423) unreachable ok8350: %t1554 = getelementptr inbounds %S.gen.Gen, ptr %t1552, i32 0, i32 14 %t1555 = load { ptr, i64, i64 }, ptr %t1554 %t1556 = load { ptr, i64, i64 }, ptr %a8 %t1557 = call i64 @finch.gen.findTemplate(ptr %t1551, { ptr, i64, i64 } %t1555, { ptr, i64, i64 } %t1556, { ptr, i64, i64 } { ptr @.str.5424, i64 0, i64 0 }, i1 true) %t1558 = icmp sge i64 %t1557, 0 br i1 %t1558, label %then8351, label %endif8353 then8351: %t1559 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t1560 = getelementptr inbounds %S.ast.Type, ptr %t1559, i32 0, i32 1 %t1561 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1560, i32 0, i32 1 %t1562 = load i64, ptr %t1561 %t1563 = icmp eq i64 %t1562, 0 br i1 %t1563, label %then8354, label %endif8356 then8354: %t1564 = load ptr, ptr %a1 %t1565 = load %S.ast.Node, ptr %a2 %t1566 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.5425, i64 1, i64 0 }, ptr %a1568 store { ptr, i64, i64 } %t1566, ptr %a1569 call void @finch_str_concat(ptr %a1567, ptr %a1568, ptr %a1569) %t1570 = load { ptr, i64, i64 }, ptr %a1567 store { ptr, i64, i64 } %t1570, ptr %a1572 store { ptr, i64, i64 } { ptr @.str.5426, i64 42, i64 0 }, ptr %a1573 call void @finch_str_concat(ptr %a1571, ptr %a1572, ptr %a1573) store { ptr, i64, i64 } %t1570, ptr %a1574 call void @finch_str_drop(ptr %a1574) %t1575 = load { ptr, i64, i64 }, ptr %a1571 %t1576 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1575, ptr %a1578 store { ptr, i64, i64 } %t1576, ptr %a1579 call void @finch_str_concat(ptr %a1577, ptr %a1578, ptr %a1579) store { ptr, i64, i64 } %t1575, ptr %a1580 call void @finch_str_drop(ptr %a1580) %t1581 = load { ptr, i64, i64 }, ptr %a1577 store { ptr, i64, i64 } %t1581, ptr %a1583 store { ptr, i64, i64 } { ptr @.str.5427, i64 10, i64 0 }, ptr %a1584 call void @finch_str_concat(ptr %a1582, ptr %a1583, ptr %a1584) store { ptr, i64, i64 } %t1581, ptr %a1585 call void @finch_str_drop(ptr %a1585) %t1586 = load { ptr, i64, i64 }, ptr %a1582 call void @finch.gen.fail(ptr %t1564, %S.ast.Node %t1565, { ptr, i64, i64 } %t1586) store { ptr, i64, i64 } %t1586, ptr %a1587 call void @finch_str_drop(ptr %a1587) br label %endif8356 endif8356: store { ptr, i64, i64 } zeroinitializer, ptr %a1588 %t1589 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t1590 = getelementptr inbounds %S.ast.Type, ptr %t1589, i32 0, i32 1 store i64 0, ptr %a1591 br label %each.cond8357 each.cond8357: %t1592 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1590, i32 0, i32 1 %t1593 = load i64, ptr %t1592 %t1594 = load i64, ptr %a1591 %t1595 = icmp slt i64 %t1594, %t1593 br i1 %t1595, label %each.body8358, label %each.end8360 each.body8358: %t1596 = load ptr, ptr %t1590 %t1597 = getelementptr inbounds %S.ast.Type, ptr %t1596, i64 %t1594 %t1598 = load %S.ast.Type, ptr %t1597 store %S.ast.Type %t1598, ptr %a1599 %t1600 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1588, i32 0, i32 1 %t1601 = load ptr, ptr %a1 %t1602 = load %S.ast.Type, ptr %a1599 %t1603 = load %S.ast.Node, ptr %a2 %t1604 = call %S.ast.Type @finch.gen.resolve(ptr %t1601, %S.ast.Type %t1602, %S.ast.Node %t1603) %t1605 = load i64, ptr %t1600 %t1606 = add i64 %t1605, 1 call void @finch_arr_reserve(ptr %a1588, i64 %t1606, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t1607 = load ptr, ptr %a1588 %t1608 = getelementptr inbounds %S.ast.Type, ptr %t1607, i64 %t1605 store %S.ast.Type %t1604, ptr %t1608 store i64 %t1606, ptr %t1600 br label %each.step8359 each.step8359: %t1609 = load i64, ptr %a1591 %t1610 = add i64 %t1609, 1 store i64 %t1610, ptr %a1591 br label %each.cond8357 each.end8360: %t1611 = load ptr, ptr %a1 %t1612 = load ptr, ptr %a1 %t1613 = icmp eq ptr %t1612, null br i1 %t1613, label %panic8361, label %ok8362 panic8361: call void @finch_panic(ptr @.str.5428, i64 5059, ptr @.str.5429) unreachable ok8362: %t1614 = getelementptr inbounds %S.gen.Gen, ptr %t1612, i32 0, i32 14 %t1615 = load { ptr, i64, i64 }, ptr %t1614 %t1616 = load { ptr, i64, i64 }, ptr %a8 %t1617 = load { ptr, i64, i64 }, ptr %a1588 %t1618 = load %S.ast.Node, ptr %a2 %t1619 = call %S.ast.Type @finch.gen.instStruct(ptr %t1611, { ptr, i64, i64 } %t1615, { ptr, i64, i64 } %t1616, { ptr, i64, i64 } %t1617, %S.ast.Node %t1618) store %S.ast.Type %t1619, ptr %a1620 %t1621 = load ptr, ptr %a1 %t1622 = load ptr, ptr %a1 %t1623 = getelementptr inbounds %S.ast.Type, ptr %a1620, i32 0, i32 3 %t1624 = load { ptr, i64, i64 }, ptr %t1623 %t1625 = getelementptr inbounds %S.ast.Type, ptr %a1620, i32 0, i32 2 %t1626 = load { ptr, i64, i64 }, ptr %t1625 %t1627 = call i64 @finch.gen.findStruct(ptr %t1622, { ptr, i64, i64 } %t1624, { ptr, i64, i64 } %t1626) %t1628 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1629 = load { ptr, i64, i64 }, ptr %t1628 %t1630 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 %t1631 = load { ptr, i64, i64 }, ptr %t1630 %t1632 = load %S.ast.Node, ptr %a2 %t1633 = call %S.gen.Val @finch.gen.construct(ptr %t1621, i64 %t1627, { ptr, i64, i64 } %t1629, { ptr, i64, i64 } %t1631, %S.ast.Node %t1632) call void @finch.drop.S_ast_Type(ptr %a1620) call void @finch.drop.arr_S_ast_Type(ptr %a1588) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1633 endif8353: %t1634 = load ptr, ptr %a1 %t1635 = load ptr, ptr %a1 %t1636 = icmp eq ptr %t1635, null br i1 %t1636, label %panic8363, label %ok8364 panic8363: call void @finch_panic(ptr @.str.5430, i64 5062, ptr @.str.5431) unreachable ok8364: %t1637 = getelementptr inbounds %S.gen.Gen, ptr %t1635, i32 0, i32 14 %t1638 = load { ptr, i64, i64 }, ptr %t1637 %t1639 = load { ptr, i64, i64 }, ptr %a8 %t1640 = call i64 @finch.gen.findStruct(ptr %t1634, { ptr, i64, i64 } %t1638, { ptr, i64, i64 } %t1639) store i64 %t1640, ptr %a1641 %t1642 = load i64, ptr %a1641 %t1643 = icmp sge i64 %t1642, 0 br i1 %t1643, label %then8365, label %endif8367 then8365: %t1644 = load ptr, ptr %a1 %t1645 = icmp eq ptr %t1644, null br i1 %t1645, label %panic8368, label %ok8369 panic8368: call void @finch_panic(ptr @.str.5432, i64 5064, ptr @.str.5433) unreachable ok8369: %t1646 = getelementptr inbounds %S.gen.Gen, ptr %t1644, i32 0, i32 16 %t1647 = load i64, ptr %a1641 %t1648 = load { ptr, i64, i64 }, ptr %t1646 %t1649 = extractvalue { ptr, i64, i64 } %t1648, 1 %t1650 = icmp uge i64 %t1647, %t1649 br i1 %t1650, label %range8370, label %inrange8371 range8370: call void @finch_panic_index(ptr @.str.5434, i64 5064, i64 %t1647, i64 %t1649) unreachable inrange8371: %t1651 = extractvalue { ptr, i64, i64 } %t1648, 0 %t1652 = getelementptr inbounds %S.gen.StructDef, ptr %t1651, i64 %t1647 %t1653 = load %S.gen.StructDef, ptr %t1652 store %S.gen.StructDef %t1653, ptr %a1654 call void @finch.copy.S_gen_StructDef(ptr %a1655, ptr %a1654) %t1656 = load %S.gen.StructDef, ptr %a1655 store %S.gen.StructDef %t1656, ptr %a1657 %t1658 = load ptr, ptr %a1 %t1659 = icmp eq ptr %t1658, null br i1 %t1659, label %panic8372, label %ok8373 panic8372: call void @finch_panic(ptr @.str.5435, i64 5065, ptr @.str.5436) unreachable ok8373: %t1660 = getelementptr inbounds %S.gen.Gen, ptr %t1658, i32 0, i32 28 %t1661 = load i1, ptr %t1660 br label %logic.from8374 logic.from8374: br i1 %t1661, label %logic.rhs8375, label %logic.end8376 logic.rhs8375: %t1662 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 2 %t1663 = load i1, ptr %t1662 %t1664 = xor i1 %t1663, true br label %logic.rend8377 logic.rend8377: br label %logic.end8376 logic.end8376: %t1665 = phi i1 [ false, %logic.from8374 ], [ %t1664, %logic.rend8377 ] br i1 %t1665, label %then8378, label %endif8380 then8378: %t1666 = load ptr, ptr %a1 %t1667 = icmp eq ptr %t1666, null br i1 %t1667, label %panic8381, label %ok8382 panic8381: call void @finch_panic(ptr @.str.5437, i64 5066, ptr @.str.5438) unreachable ok8382: %t1668 = getelementptr inbounds %S.gen.Gen, ptr %t1666, i32 0, i32 0 %t1669 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 13 %t1670 = load i64, ptr %t1669 %t1671 = load { ptr, i64, i64 }, ptr %t1668 %t1672 = extractvalue { ptr, i64, i64 } %t1671, 1 %t1673 = icmp uge i64 %t1670, %t1672 br i1 %t1673, label %range8383, label %inrange8384 range8383: call void @finch_panic_index(ptr @.str.5439, i64 5066, i64 %t1670, i64 %t1672) unreachable inrange8384: %t1674 = extractvalue { ptr, i64, i64 } %t1671, 0 %t1675 = getelementptr inbounds %S.ast.Program, ptr %t1674, i64 %t1670 %t1676 = getelementptr inbounds %S.ast.Program, ptr %t1675, i32 0, i32 6 %t1677 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 14 %t1678 = load i64, ptr %t1677 %t1679 = load { ptr, i64, i64 }, ptr %t1676 %t1680 = extractvalue { ptr, i64, i64 } %t1679, 1 %t1681 = icmp uge i64 %t1678, %t1680 br i1 %t1681, label %range8385, label %inrange8386 range8385: call void @finch_panic_index(ptr @.str.5440, i64 5066, i64 %t1678, i64 %t1680) unreachable inrange8386: %t1682 = extractvalue { ptr, i64, i64 } %t1679, 0 %t1683 = getelementptr inbounds %S.ast.Node, ptr %t1682, i64 %t1678 %t1684 = load %S.ast.Node, ptr %t1683 store %S.ast.Node %t1684, ptr %a1685 call void @finch.copy.S_ast_Node(ptr %a1686, ptr %a1685) %t1687 = load %S.ast.Node, ptr %a1686 store %S.ast.Node %t1687, ptr %a1688 %t1689 = load ptr, ptr %a1 %t1690 = load %S.ast.Node, ptr %a2 %t1691 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t1692 = load i64, ptr %t1691 %t1693 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t1694 = load i64, ptr %t1693 %t1695 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 1 %t1696 = load { ptr, i64, i64 }, ptr %t1695 store { ptr, i64, i64 } { ptr @.str.5441, i64 16, i64 0 }, ptr %a1698 store { ptr, i64, i64 } %t1696, ptr %a1699 call void @finch_str_concat(ptr %a1697, ptr %a1698, ptr %a1699) %t1700 = load { ptr, i64, i64 }, ptr %a1697 store { ptr, i64, i64 } %t1700, ptr %a1702 store { ptr, i64, i64 } { ptr @.str.5442, i64 3, i64 0 }, ptr %a1703 call void @finch_str_concat(ptr %a1701, ptr %a1702, ptr %a1703) store { ptr, i64, i64 } %t1700, ptr %a1704 call void @finch_str_drop(ptr %a1704) %t1705 = load { ptr, i64, i64 }, ptr %a1701 %t1706 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 11 %t1707 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1706, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.5443, i64 2, i64 0 }, ptr %a1708 call void @finch_str_join(ptr %a1709, ptr %t1706, ptr %a1708) %t1710 = load { ptr, i64, i64 }, ptr %a1709 store { ptr, i64, i64 } %t1705, ptr %a1712 store { ptr, i64, i64 } %t1710, ptr %a1713 call void @finch_str_concat(ptr %a1711, ptr %a1712, ptr %a1713) store { ptr, i64, i64 } %t1705, ptr %a1714 call void @finch_str_drop(ptr %a1714) store { ptr, i64, i64 } %t1710, ptr %a1715 call void @finch_str_drop(ptr %a1715) %t1716 = load { ptr, i64, i64 }, ptr %a1711 store { ptr, i64, i64 } %t1716, ptr %a1718 store { ptr, i64, i64 } { ptr @.str.5444, i64 6, i64 0 }, ptr %a1719 call void @finch_str_concat(ptr %a1717, ptr %a1718, ptr %a1719) store { ptr, i64, i64 } %t1716, ptr %a1720 call void @finch_str_drop(ptr %a1720) %t1721 = load { ptr, i64, i64 }, ptr %a1717 %t1722 = load ptr, ptr %a1 %t1723 = icmp eq ptr %t1722, null br i1 %t1723, label %panic8387, label %ok8388 panic8387: call void @finch_panic(ptr @.str.5445, i64 5067, ptr @.str.5446) unreachable ok8388: %t1724 = getelementptr inbounds %S.gen.Gen, ptr %t1722, i32 0, i32 1 %t1725 = getelementptr inbounds %S.ast.Node, ptr %a1688, i32 0, i32 13 %t1726 = load i64, ptr %t1725 %t1727 = load { ptr, i64, i64 }, ptr %t1724 %t1728 = extractvalue { ptr, i64, i64 } %t1727, 1 %t1729 = icmp uge i64 %t1726, %t1728 br i1 %t1729, label %range8389, label %inrange8390 range8389: call void @finch_panic_index(ptr @.str.5447, i64 5067, i64 %t1726, i64 %t1728) unreachable inrange8390: %t1730 = extractvalue { ptr, i64, i64 } %t1727, 0 %t1731 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1730, i64 %t1726 %t1732 = load { ptr, i64, i64 }, ptr %t1731 %t1733 = getelementptr inbounds %S.ast.Node, ptr %a1688, i32 0, i32 11 %t1734 = load i64, ptr %t1733 %t1735 = getelementptr inbounds %S.ast.Node, ptr %a1688, i32 0, i32 12 %t1736 = load i64, ptr %t1735 call void @finch.gen.noteRef(ptr %t1689, %S.ast.Node %t1690, i64 %t1692, i64 %t1694, { ptr, i64, i64 } %t1721, { ptr, i64, i64 } %t1732, i64 %t1734, i64 %t1736) store { ptr, i64, i64 } %t1721, ptr %a1737 call void @finch_str_drop(ptr %a1737) call void @finch.drop.S_ast_Node(ptr %a1688) br label %endif8380 endif8380: %t1738 = load ptr, ptr %a1 %t1739 = load i64, ptr %a1641 %t1740 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1741 = load { ptr, i64, i64 }, ptr %t1740 %t1742 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 %t1743 = load { ptr, i64, i64 }, ptr %t1742 %t1744 = load %S.ast.Node, ptr %a2 %t1745 = call %S.gen.Val @finch.gen.construct(ptr %t1738, i64 %t1739, { ptr, i64, i64 } %t1741, { ptr, i64, i64 } %t1743, %S.ast.Node %t1744) call void @finch.drop.S_gen_StructDef(ptr %a1657) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1745 endif8367: %t1746 = load ptr, ptr %a1 %t1747 = load ptr, ptr %a1 %t1748 = icmp eq ptr %t1747, null br i1 %t1748, label %panic8391, label %ok8392 panic8391: call void @finch_panic(ptr @.str.5448, i64 5071, ptr @.str.5449) unreachable ok8392: %t1749 = getelementptr inbounds %S.gen.Gen, ptr %t1747, i32 0, i32 14 %t1750 = load { ptr, i64, i64 }, ptr %t1749 %t1751 = load { ptr, i64, i64 }, ptr %a8 %t1752 = call i64 @finch.gen.findEnum(ptr %t1746, { ptr, i64, i64 } %t1750, { ptr, i64, i64 } %t1751) store i64 %t1752, ptr %a1753 %t1754 = load i64, ptr %a1753 %t1755 = icmp sge i64 %t1754, 0 br i1 %t1755, label %then8393, label %endif8395 then8393: %t1756 = load ptr, ptr %a1 %t1757 = load %S.ast.Node, ptr %a2 %t1758 = load i64, ptr %a1753 %t1759 = call %S.gen.Val @finch.gen.enumFrom(ptr %t1756, %S.ast.Node %t1757, i64 %t1758) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1759 endif8395: %t1760 = load ptr, ptr %a1 %t1761 = icmp eq ptr %t1760, null br i1 %t1761, label %panic8396, label %ok8397 panic8396: call void @finch_panic(ptr @.str.5450, i64 5075, ptr @.str.5451) unreachable ok8397: %t1762 = getelementptr inbounds %S.gen.Gen, ptr %t1760, i32 0, i32 26 %t1763 = getelementptr inbounds %S.cimport.CImports, ptr %t1762, i32 0, i32 0 %t1764 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1764, ptr %a1765 %t1766 = call i64 @finch_map_find(ptr %t1763, ptr %a1765, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t1767 = icmp sge i64 %t1766, 0 br i1 %t1767, label %then8398, label %endif8400 then8398: %t1768 = load ptr, ptr %a1 %t1769 = load %S.ast.Node, ptr %a2 %t1770 = load ptr, ptr %a1 %t1771 = icmp eq ptr %t1770, null br i1 %t1771, label %panic8401, label %ok8402 panic8401: call void @finch_panic(ptr @.str.5452, i64 5076, ptr @.str.5453) unreachable ok8402: %t1772 = getelementptr inbounds %S.gen.Gen, ptr %t1770, i32 0, i32 26 %t1773 = getelementptr inbounds %S.cimport.CImports, ptr %t1772, i32 0, i32 0 %t1774 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1774, ptr %a1775 %t1776 = call i64 @finch_map_find(ptr %t1773, ptr %a1775, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t1777 = icmp slt i64 %t1776, 0 br i1 %t1777, label %map.missing8403, label %map.found8404 map.missing8403: store { ptr, i64, i64 } zeroinitializer, ptr %a1778 store { ptr, i64, i64 } %t1774, ptr %a1779 call void @finch_buf_str(ptr %a1778, ptr %a1779, i32 1) call void @finch_map_missing(ptr @.str.5454, i64 5076, ptr %a1778) unreachable map.found8404: %t1780 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t1773, i32 0, i32 0 %t1781 = load ptr, ptr %t1780 %t1782 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t1781, i64 %t1776 %t1783 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t1782, i32 0, i32 2 %t1784 = load %S.cimport.CFunc, ptr %t1783 %t1785 = call %S.gen.Val @finch.gen.callC(ptr %t1768, %S.ast.Node %t1769, %S.cimport.CFunc %t1784) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1785 endif8400: %t1786 = load ptr, ptr %a1 %t1787 = load { ptr, i64, i64 }, ptr %a8 %t1788 = call i64 @finch.gen.findStruct(ptr %t1786, { ptr, i64, i64 } { ptr @.str.5455, i64 1, i64 0 }, { ptr, i64, i64 } %t1787) store i64 %t1788, ptr %a1641 %t1789 = load i64, ptr %a1641 %t1790 = icmp sge i64 %t1789, 0 br i1 %t1790, label %then8405, label %endif8407 then8405: %t1791 = load ptr, ptr %a1 %t1792 = load i64, ptr %a1641 %t1793 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1794 = load { ptr, i64, i64 }, ptr %t1793 %t1795 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 %t1796 = load { ptr, i64, i64 }, ptr %t1795 %t1797 = load %S.ast.Node, ptr %a2 %t1798 = call %S.gen.Val @finch.gen.construct(ptr %t1791, i64 %t1792, { ptr, i64, i64 } %t1794, { ptr, i64, i64 } %t1796, %S.ast.Node %t1797) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1798 endif8407: %t1799 = load ptr, ptr %a1 %t1800 = load { ptr, i64, i64 }, ptr %a8 %t1801 = call i64 @finch.gen.lookup(ptr %t1799, { ptr, i64, i64 } %t1800) %t1802 = icmp sge i64 %t1801, 0 br i1 %t1802, label %then8408, label %endif8410 then8408: %t1803 = load ptr, ptr %a1 %t1804 = load %S.ast.Node, ptr %a2 %t1805 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.5456, i64 1, i64 0 }, ptr %a1807 store { ptr, i64, i64 } %t1805, ptr %a1808 call void @finch_str_concat(ptr %a1806, ptr %a1807, ptr %a1808) %t1809 = load { ptr, i64, i64 }, ptr %a1806 store { ptr, i64, i64 } %t1809, ptr %a1811 store { ptr, i64, i64 } { ptr @.str.5457, i64 31, i64 0 }, ptr %a1812 call void @finch_str_concat(ptr %a1810, ptr %a1811, ptr %a1812) store { ptr, i64, i64 } %t1809, ptr %a1813 call void @finch_str_drop(ptr %a1813) %t1814 = load { ptr, i64, i64 }, ptr %a1810 call void @finch.gen.fail(ptr %t1803, %S.ast.Node %t1804, { ptr, i64, i64 } %t1814) store { ptr, i64, i64 } %t1814, ptr %a1815 call void @finch_str_drop(ptr %a1815) br label %endif8410 endif8410: %t1816 = load ptr, ptr %a1 %t1817 = load %S.ast.Node, ptr %a2 %t1818 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.5458, i64 28, i64 0 }, ptr %a1820 store { ptr, i64, i64 } %t1818, ptr %a1821 call void @finch_str_concat(ptr %a1819, ptr %a1820, ptr %a1821) %t1822 = load { ptr, i64, i64 }, ptr %a1819 store { ptr, i64, i64 } %t1822, ptr %a1824 store { ptr, i64, i64 } { ptr @.str.5459, i64 1, i64 0 }, ptr %a1825 call void @finch_str_concat(ptr %a1823, ptr %a1824, ptr %a1825) store { ptr, i64, i64 } %t1822, ptr %a1826 call void @finch_str_drop(ptr %a1826) %t1827 = load { ptr, i64, i64 }, ptr %a1823 %t1828 = load { ptr, i64, i64 }, ptr %a8 %t1829 = call { ptr, i64, i64 } @finch.gen.headerHint({ ptr, i64, i64 } %t1828) store { ptr, i64, i64 } %t1827, ptr %a1831 store { ptr, i64, i64 } %t1829, ptr %a1832 call void @finch_str_concat(ptr %a1830, ptr %a1831, ptr %a1832) store { ptr, i64, i64 } %t1827, ptr %a1833 call void @finch_str_drop(ptr %a1833) store { ptr, i64, i64 } %t1829, ptr %a1834 call void @finch_str_drop(ptr %a1834) %t1835 = load { ptr, i64, i64 }, ptr %a1830 call void @finch.gen.fail(ptr %t1816, %S.ast.Node %t1817, { ptr, i64, i64 } %t1835) store { ptr, i64, i64 } %t1835, ptr %a1836 call void @finch_str_drop(ptr %a1836) call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val zeroinitializer } define internal %S.gen.Val @finch.gen.callFn(ptr %p0, i64 %p1, %S.ast.Node %p2, i64 %p3, { ptr, i64, i64 } %p4, { ptr, i64, i64 } %p5, { ptr, i64, i64 } %p6) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a3 = alloca %S.ast.Node, align 16 %a4 = alloca i64, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca %S.gen.FnSig, align 16 %a19 = alloca %S.gen.FnSig, align 16 %a21 = alloca %S.gen.FnSig, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca i64, align 16 %a70 = alloca i64, align 16 %a83 = alloca %S.ast.Node, align 16 %a84 = alloca %S.ast.Node, align 16 %a86 = alloca %S.ast.Node, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca %S.gen.Val, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca %S.gen.Val, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca %S.ast.Type, align 16 %a166 = alloca %S.ast.Type, align 16 %a171 = alloca %S.gen.Val, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca %S.gen.Val, align 16 %a204 = alloca %S.gen.Val, align 16 %a220 = alloca %S.gen.Val, align 16 %a221 = alloca i64, align 16 %a229 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 store %S.ast.Node %p2, ptr %a3 store i64 %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 store { ptr, i64, i64 } %p5, ptr %a6 store { ptr, i64, i64 } %p6, ptr %a7 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic8411, label %ok8412 panic8411: call void @finch_panic(ptr @.str.5460, i64 5090, ptr @.str.5461) unreachable ok8412: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 15 %t11 = load i64, ptr %a2 %t12 = load { ptr, i64, i64 }, ptr %t10 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 %t11, %t13 br i1 %t14, label %range8413, label %inrange8414 range8413: call void @finch_panic_index(ptr @.str.5462, i64 5090, i64 %t11, i64 %t13) unreachable inrange8414: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.gen.FnSig, ptr %t15, i64 %t11 %t17 = load %S.gen.FnSig, ptr %t16 store %S.gen.FnSig %t17, ptr %a18 call void @finch.copy.S_gen_FnSig(ptr %a19, ptr %a18) %t20 = load %S.gen.FnSig, ptr %a19 store %S.gen.FnSig %t20, ptr %a21 %t22 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 0 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = icmp eq i64 %t24, 0 br label %logic.from8415 logic.from8415: br i1 %t25, label %logic.rhs8416, label %logic.end8417 logic.rhs8416: %t26 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 1 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.5463, i64 4, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 br label %logic.rend8418 logic.rend8418: br label %logic.end8417 logic.end8417: %t32 = phi i1 [ false, %logic.from8415 ], [ %t31, %logic.rend8418 ] br i1 %t32, label %then8419, label %endif8421 then8419: %t33 = load ptr, ptr %a1 %t34 = load %S.ast.Node, ptr %a3 call void @finch.gen.fail(ptr %t33, %S.ast.Node %t34, { ptr, i64, i64 } { ptr @.str.5464, i64 52, i64 0 }) br label %endif8421 endif8421: %t35 = load ptr, ptr %a1 %t36 = load %S.ast.Node, ptr %a3 %t37 = load %S.gen.FnSig, ptr %a21 call void @finch.gen.noteCall(ptr %t35, %S.ast.Node %t36, %S.gen.FnSig %t37) %t38 = load ptr, ptr %a1 %t39 = load %S.ast.Node, ptr %a3 %t40 = load i64, ptr %a4 %t41 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i32 0, i32 1 %t43 = load i64, ptr %t42 %t44 = load { ptr, i64, i64 }, ptr %a5 call void @finch.gen.checkArgs(ptr %t38, %S.ast.Node %t39, i64 %t40, i64 %t43, { ptr, i64, i64 } %t44) store { ptr, i64, i64 } zeroinitializer, ptr %a45 %t46 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 2 %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i32 0, i32 1 %t48 = load i64, ptr %t47 %t49 = icmp sgt i64 %t48, 0 br i1 %t49, label %then8422, label %endif8424 then8422: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 %t51 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } { ptr @.str.5465, i64 4, i64 0 }, ptr %a53 store { ptr, i64, i64 } %t51, ptr %a54 call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a52 %t56 = load i64, ptr %t50 %t57 = add i64 %t56, 1 call void @finch_arr_reserve(ptr %a45, i64 %t57, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t58 = load ptr, ptr %a45 %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t58, i64 %t56 store { ptr, i64, i64 } %t55, ptr %t59 store i64 %t57, ptr %t50 br label %endif8424 endif8424: store { ptr, i64, i64 } zeroinitializer, ptr %a60 %t61 = load ptr, ptr %a1 %t62 = icmp eq ptr %t61, null br i1 %t62, label %panic8425, label %ok8426 panic8425: call void @finch_panic(ptr @.str.5466, i64 5101, ptr @.str.5467) unreachable ok8426: %t63 = getelementptr inbounds %S.gen.Gen, ptr %t61, i32 0, i32 11 %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 %t65 = load i64, ptr %t64 store i64 %t65, ptr %a66 %t67 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i32 0, i32 1 %t69 = load i64, ptr %t68 store i64 0, ptr %a70 br label %for.cond8427 for.cond8427: %t71 = load i64, ptr %a70 %t72 = icmp slt i64 %t71, %t69 br i1 %t72, label %for.body8428, label %for.end8430 for.body8428: %t73 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t74 = load i64, ptr %a4 %t75 = load i64, ptr %a70 %t76 = add i64 %t74, %t75 %t77 = load { ptr, i64, i64 }, ptr %t73 %t78 = extractvalue { ptr, i64, i64 } %t77, 1 %t79 = icmp uge i64 %t76, %t78 br i1 %t79, label %range8431, label %inrange8432 range8431: call void @finch_panic_index(ptr @.str.5468, i64 5103, i64 %t76, i64 %t78) unreachable inrange8432: %t80 = extractvalue { ptr, i64, i64 } %t77, 0 %t81 = getelementptr inbounds %S.ast.Node, ptr %t80, i64 %t76 %t82 = load %S.ast.Node, ptr %t81 store %S.ast.Node %t82, ptr %a83 call void @finch.copy.S_ast_Node(ptr %a84, ptr %a83) %t85 = load %S.ast.Node, ptr %a84 store %S.ast.Node %t85, ptr %a86 %t87 = load ptr, ptr %a1 %t88 = load ptr, ptr %a1 %t89 = load %S.ast.Node, ptr %a86 %t90 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 %t91 = load i64, ptr %a70 %t92 = load { ptr, i64, i64 }, ptr %t90 %t93 = extractvalue { ptr, i64, i64 } %t92, 1 %t94 = icmp uge i64 %t91, %t93 br i1 %t94, label %range8433, label %inrange8434 range8433: call void @finch_panic_index(ptr @.str.5469, i64 5104, i64 %t91, i64 %t93) unreachable inrange8434: %t95 = extractvalue { ptr, i64, i64 } %t92, 0 %t96 = getelementptr inbounds %S.ast.Type, ptr %t95, i64 %t91 %t97 = load %S.ast.Type, ptr %t96 %t98 = call %S.gen.Val @finch.gen.exprWant(ptr %t88, %S.ast.Node %t89, %S.ast.Type %t97) %t99 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 %t100 = load i64, ptr %a70 %t101 = load { ptr, i64, i64 }, ptr %t99 %t102 = extractvalue { ptr, i64, i64 } %t101, 1 %t103 = icmp uge i64 %t100, %t102 br i1 %t103, label %range8435, label %inrange8436 range8435: call void @finch_panic_index(ptr @.str.5470, i64 5104, i64 %t100, i64 %t102) unreachable inrange8436: %t104 = extractvalue { ptr, i64, i64 } %t101, 0 %t105 = getelementptr inbounds %S.ast.Type, ptr %t104, i64 %t100 %t106 = load %S.ast.Type, ptr %t105 %t107 = load %S.ast.Node, ptr %a86 %t108 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 14 %t109 = load i64, ptr %a70 %t110 = load { ptr, i64, i64 }, ptr %t108 %t111 = extractvalue { ptr, i64, i64 } %t110, 1 %t112 = icmp uge i64 %t109, %t111 br i1 %t112, label %range8437, label %inrange8438 range8437: call void @finch_panic_index(ptr @.str.5472, i64 5104, i64 %t109, i64 %t111) unreachable inrange8438: %t113 = extractvalue { ptr, i64, i64 } %t110, 0 %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %t113, i64 %t109 %t115 = load { ptr, i64, i64 }, ptr %t114 store { ptr, i64, i64 } { ptr @.str.5471, i64 10, i64 0 }, ptr %a117 store { ptr, i64, i64 } %t115, ptr %a118 call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a116 store { ptr, i64, i64 } %t119, ptr %a121 store { ptr, i64, i64 } { ptr @.str.5473, i64 1, i64 0 }, ptr %a122 call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) store { ptr, i64, i64 } %t119, ptr %a123 call void @finch_str_drop(ptr %a123) %t124 = load { ptr, i64, i64 }, ptr %a120 %t125 = call %S.gen.Val @finch.gen.coerce(ptr %t87, %S.gen.Val %t98, %S.ast.Type %t106, %S.ast.Node %t107, { ptr, i64, i64 } %t124) store %S.gen.Val %t98, ptr %a126 call void @finch.drop.S_gen_Val(ptr %a126) store { ptr, i64, i64 } %t124, ptr %a127 call void @finch_str_drop(ptr %a127) store %S.gen.Val %t125, ptr %a128 %t129 = load ptr, ptr %a1 %t130 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 %t131 = load i64, ptr %a70 %t132 = load { ptr, i64, i64 }, ptr %t130 %t133 = extractvalue { ptr, i64, i64 } %t132, 1 %t134 = icmp uge i64 %t131, %t133 br i1 %t134, label %range8439, label %inrange8440 range8439: call void @finch_panic_index(ptr @.str.5474, i64 5106, i64 %t131, i64 %t133) unreachable inrange8440: %t135 = extractvalue { ptr, i64, i64 } %t132, 0 %t136 = getelementptr inbounds %S.ast.Type, ptr %t135, i64 %t131 %t137 = load %S.ast.Type, ptr %t136 %t138 = call i1 @finch.gen.owning(ptr %t129, %S.ast.Type %t137) br label %logic.from8441 logic.from8441: br i1 %t138, label %logic.rhs8442, label %logic.end8443 logic.rhs8442: %t139 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 2 %t140 = load i1, ptr %t139 %t141 = xor i1 %t140, true br label %logic.rend8444 logic.rend8444: br label %logic.end8443 logic.end8443: %t142 = phi i1 [ false, %logic.from8441 ], [ %t141, %logic.rend8444 ] br label %logic.from8445 logic.from8445: br i1 %t142, label %logic.rhs8446, label %logic.end8447 logic.rhs8446: %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t144 = load i64, ptr %t143 %t145 = icmp sgt i64 %t144, 0 br label %logic.rend8448 logic.rend8448: br label %logic.end8447 logic.end8447: %t146 = phi i1 [ false, %logic.from8445 ], [ %t145, %logic.rend8448 ] br label %logic.from8449 logic.from8449: br i1 %t146, label %logic.rhs8450, label %logic.end8451 logic.rhs8450: %t147 = load %S.ast.Node, ptr %a86 %t148 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t147) %t149 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t148, ptr %a150 store { ptr, i64, i64 } %t149, ptr %a151 %t152 = call i32 @finch_str_eq(ptr %a150, ptr %a151) %t153 = icmp ne i32 %t152, 0 store { ptr, i64, i64 } %t148, ptr %a154 call void @finch_str_drop(ptr %a154) br label %logic.rend8452 logic.rend8452: br label %logic.end8451 logic.end8451: %t155 = phi i1 [ false, %logic.from8449 ], [ %t153, %logic.rend8452 ] br i1 %t155, label %then8453, label %endif8455 then8453: %t156 = load ptr, ptr %a1 %t157 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 0 %t158 = load { ptr, i64, i64 }, ptr %t157 %t159 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 1 %t160 = load %S.ast.Type, ptr %t159 %t161 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t156, { ptr, i64, i64 } %t158, %S.ast.Type %t160) %t162 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t161, 0 %t163 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 1 %t164 = load %S.ast.Type, ptr %t163 store %S.ast.Type %t164, ptr %a165 call void @finch.copy.S_ast_Type(ptr %a166, ptr %a165) %t167 = load %S.ast.Type, ptr %a166 %t168 = insertvalue %S.gen.Val %t162, %S.ast.Type %t167, 1 %t169 = insertvalue %S.gen.Val %t168, i1 true, 2 %t170 = load %S.gen.Val, ptr %a128 store %S.gen.Val %t169, ptr %a128 store %S.gen.Val %t170, ptr %a171 call void @finch.drop.S_gen_Val(ptr %a171) br label %endif8455 endif8455: %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 %t173 = load ptr, ptr %a1 %t174 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 %t175 = load i64, ptr %a70 %t176 = load { ptr, i64, i64 }, ptr %t174 %t177 = extractvalue { ptr, i64, i64 } %t176, 1 %t178 = icmp uge i64 %t175, %t177 br i1 %t178, label %range8456, label %inrange8457 range8456: call void @finch_panic_index(ptr @.str.5475, i64 5109, i64 %t175, i64 %t177) unreachable inrange8457: %t179 = extractvalue { ptr, i64, i64 } %t176, 0 %t180 = getelementptr inbounds %S.ast.Type, ptr %t179, i64 %t175 %t181 = load %S.ast.Type, ptr %t180 %t182 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t173, %S.ast.Type %t181) store { ptr, i64, i64 } %t182, ptr %a184 store { ptr, i64, i64 } { ptr @.str.5476, i64 1, i64 0 }, ptr %a185 call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) store { ptr, i64, i64 } %t182, ptr %a186 call void @finch_str_drop(ptr %a186) %t187 = load { ptr, i64, i64 }, ptr %a183 %t188 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 0 %t189 = load { ptr, i64, i64 }, ptr %t188 store { ptr, i64, i64 } %t187, ptr %a191 store { ptr, i64, i64 } %t189, ptr %a192 call void @finch_str_concat(ptr %a190, ptr %a191, ptr %a192) store { ptr, i64, i64 } %t187, ptr %a193 call void @finch_str_drop(ptr %a193) %t194 = load { ptr, i64, i64 }, ptr %a190 %t195 = load i64, ptr %t172 %t196 = add i64 %t195, 1 call void @finch_arr_reserve(ptr %a45, i64 %t196, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t197 = load ptr, ptr %a45 %t198 = getelementptr inbounds { ptr, i64, i64 }, ptr %t197, i64 %t195 store { ptr, i64, i64 } %t194, ptr %t198 store i64 %t196, ptr %t172 %t199 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 2 %t200 = load i1, ptr %t199 br i1 %t200, label %then8458, label %endif8460 then8458: %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %a60, i32 0, i32 1 %t202 = load %S.gen.Val, ptr %a128 store %S.gen.Val %t202, ptr %a203 call void @finch.copy.S_gen_Val(ptr %a204, ptr %a203) %t205 = load %S.gen.Val, ptr %a204 %t206 = load i64, ptr %t201 %t207 = add i64 %t206, 1 call void @finch_arr_reserve(ptr %a60, i64 %t207, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64)) %t208 = load ptr, ptr %a60 %t209 = getelementptr inbounds %S.gen.Val, ptr %t208, i64 %t206 store %S.gen.Val %t205, ptr %t209 store i64 %t207, ptr %t201 br label %endif8460 endif8460: %t210 = load ptr, ptr %a1 %t211 = load %S.gen.Val, ptr %a128 call void @finch.gen.hold(ptr %t210, %S.gen.Val %t211) call void @finch.drop.S_gen_Val(ptr %a128) call void @finch.drop.S_ast_Node(ptr %a86) br label %for.step8429 for.step8429: %t212 = load i64, ptr %a70 %t213 = add i64 %t212, 1 store i64 %t213, ptr %a70 br label %for.cond8427 for.end8430: %t214 = load ptr, ptr %a1 %t215 = load %S.gen.FnSig, ptr %a21 %t216 = load %S.ast.Node, ptr %a3 %t217 = load { ptr, i64, i64 }, ptr %a45 %t218 = load { ptr, i64, i64 }, ptr %a5 %t219 = call %S.gen.Val @finch.gen.emitCall(ptr %t214, %S.gen.FnSig %t215, %S.ast.Node %t216, { ptr, i64, i64 } %t217, { ptr, i64, i64 } %t218) store %S.gen.Val %t219, ptr %a220 store i64 0, ptr %a221 br label %each.cond8461 each.cond8461: %t222 = getelementptr inbounds { ptr, i64, i64 }, ptr %a60, i32 0, i32 1 %t223 = load i64, ptr %t222 %t224 = load i64, ptr %a221 %t225 = icmp slt i64 %t224, %t223 br i1 %t225, label %each.body8462, label %each.end8464 each.body8462: %t226 = load ptr, ptr %a60 %t227 = getelementptr inbounds %S.gen.Val, ptr %t226, i64 %t224 %t228 = load %S.gen.Val, ptr %t227 store %S.gen.Val %t228, ptr %a229 %t230 = load ptr, ptr %a1 %t231 = load %S.gen.Val, ptr %a229 call void @finch.gen.release(ptr %t230, %S.gen.Val %t231) br label %each.step8463 each.step8463: %t232 = load i64, ptr %a221 %t233 = add i64 %t232, 1 store i64 %t233, ptr %a221 br label %each.cond8461 each.end8464: %t234 = load ptr, ptr %a1 %t235 = load i64, ptr %a66 call void @finch.gen.heldEnd(ptr %t234, i64 %t235) %t236 = load %S.gen.Val, ptr %a220 call void @finch.drop.arr_S_gen_Val(ptr %a60) call void @finch.drop.arr_str(ptr %a45) call void @finch.drop.S_gen_FnSig(ptr %a21) ret %S.gen.Val %t236 } define internal %S.gen.Val @finch.gen.emitCall(ptr %p0, %S.gen.FnSig %p1, %S.ast.Node %p2, { ptr, i64, i64 } %p3, { ptr, i64, i64 } %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.FnSig, align 16 %a3 = alloca %S.ast.Node, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca %S.ast.Type, align 16 %a201 = alloca %S.ast.Type, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca %S.ast.Type, align 16 %a235 = alloca %S.ast.Type, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca %S.ast.Type, align 16 %a255 = alloca %S.ast.Type, align 16 %a264 = alloca %S.ast.Type, align 16 %a265 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store %S.gen.FnSig %p1, ptr %a2 store %S.ast.Node %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 %t6 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 %t7 = load i1, ptr %t6 br label %logic.from8465 logic.from8465: br i1 %t7, label %logic.rhs8466, label %logic.end8467 logic.rhs8466: %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic8468, label %ok8469 panic8468: call void @finch_panic(ptr @.str.5477, i64 5125, ptr @.str.5478) unreachable ok8469: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 41 %t11 = load { ptr, i64, i64 }, ptr %t10 %t12 = load %S.ast.Node, ptr %a3 %t13 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t12) store { ptr, i64, i64 } %t11, ptr %a14 store { ptr, i64, i64 } %t13, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp eq i32 %t16, 0 store { ptr, i64, i64 } %t13, ptr %a18 call void @finch_str_drop(ptr %a18) br label %logic.rend8470 logic.rend8470: br label %logic.end8467 logic.end8467: %t19 = phi i1 [ false, %logic.from8465 ], [ %t17, %logic.rend8470 ] br i1 %t19, label %then8471, label %endif8473 then8471: %t20 = load ptr, ptr %a1 %t21 = load %S.ast.Node, ptr %a3 %t22 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.5479, i64 1, i64 0 }, ptr %a24 store { ptr, i64, i64 } %t22, ptr %a25 call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t26, ptr %a28 store { ptr, i64, i64 } { ptr @.str.5480, i64 39, i64 0 }, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) store { ptr, i64, i64 } %t26, ptr %a30 call void @finch_str_drop(ptr %a30) %t31 = load { ptr, i64, i64 }, ptr %a27 %t32 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t31, ptr %a34 store { ptr, i64, i64 } %t32, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) store { ptr, i64, i64 } %t31, ptr %a36 call void @finch_str_drop(ptr %a36) %t37 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t37, ptr %a39 store { ptr, i64, i64 } { ptr @.str.5481, i64 19, i64 0 }, ptr %a40 call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) store { ptr, i64, i64 } %t37, ptr %a41 call void @finch_str_drop(ptr %a41) %t42 = load { ptr, i64, i64 }, ptr %a38 %t43 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t42, ptr %a45 store { ptr, i64, i64 } %t43, ptr %a46 call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) store { ptr, i64, i64 } %t42, ptr %a47 call void @finch_str_drop(ptr %a47) %t48 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } %t48, ptr %a50 store { ptr, i64, i64 } { ptr @.str.5482, i64 27, i64 0 }, ptr %a51 call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) store { ptr, i64, i64 } %t48, ptr %a52 call void @finch_str_drop(ptr %a52) %t53 = load { ptr, i64, i64 }, ptr %a49 %t54 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t53, ptr %a56 store { ptr, i64, i64 } %t54, ptr %a57 call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) store { ptr, i64, i64 } %t53, ptr %a58 call void @finch_str_drop(ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a55 store { ptr, i64, i64 } %t59, ptr %a61 store { ptr, i64, i64 } { ptr @.str.5483, i64 5, i64 0 }, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) store { ptr, i64, i64 } %t59, ptr %a63 call void @finch_str_drop(ptr %a63) %t64 = load { ptr, i64, i64 }, ptr %a60 call void @finch.gen.fail(ptr %t20, %S.ast.Node %t21, { ptr, i64, i64 } %t64) store { ptr, i64, i64 } %t64, ptr %a65 call void @finch_str_drop(ptr %a65) br label %endif8473 endif8473: %t66 = load ptr, ptr %a1 %t67 = load %S.gen.FnSig, ptr %a2 %t68 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t66, %S.gen.FnSig %t67) store { ptr, i64, i64 } { ptr @.str.5484, i64 5, i64 0 }, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) store { ptr, i64, i64 } %t68, ptr %a72 call void @finch_str_drop(ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t73, ptr %a75 store { ptr, i64, i64 } { ptr @.str.5485, i64 1, i64 0 }, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) store { ptr, i64, i64 } %t73, ptr %a77 call void @finch_str_drop(ptr %a77) %t78 = load { ptr, i64, i64 }, ptr %a74 %t79 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 11 %t80 = load { ptr, i64, i64 }, ptr %t79 store { ptr, i64, i64 } %t78, ptr %a82 store { ptr, i64, i64 } %t80, ptr %a83 call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) store { ptr, i64, i64 } %t78, ptr %a84 call void @finch_str_drop(ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a81 store { ptr, i64, i64 } %t85, ptr %a87 store { ptr, i64, i64 } { ptr @.str.5486, i64 1, i64 0 }, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) store { ptr, i64, i64 } %t85, ptr %a89 call void @finch_str_drop(ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a86 %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.5487, i64 2, i64 0 }, ptr %a92 call void @finch_str_join(ptr %a93, ptr %a4, ptr %a92) %t94 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t90, ptr %a96 store { ptr, i64, i64 } %t94, ptr %a97 call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) store { ptr, i64, i64 } %t90, ptr %a98 call void @finch_str_drop(ptr %a98) store { ptr, i64, i64 } %t94, ptr %a99 call void @finch_str_drop(ptr %a99) %t100 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t100, ptr %a102 store { ptr, i64, i64 } { ptr @.str.5488, i64 1, i64 0 }, ptr %a103 call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) store { ptr, i64, i64 } %t100, ptr %a104 call void @finch_str_drop(ptr %a104) %t105 = load { ptr, i64, i64 }, ptr %a101 store { ptr, i64, i64 } %t105, ptr %a106 %t107 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 %t108 = load i1, ptr %t107 br i1 %t108, label %then8474, label %endif8476 then8474: %t109 = load ptr, ptr %a1 %t110 = load { ptr, i64, i64 }, ptr %a106 %t111 = call { ptr, i64, i64 } @finch.gen.op(ptr %t109, { ptr, i64, i64 } %t110) store { ptr, i64, i64 } %t111, ptr %a112 %t113 = load ptr, ptr %a1 %t114 = load ptr, ptr %a1 %t115 = load %S.gen.FnSig, ptr %a2 %t116 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t114, %S.gen.FnSig %t115) store { ptr, i64, i64 } { ptr @.str.5489, i64 13, i64 0 }, ptr %a118 store { ptr, i64, i64 } %t116, ptr %a119 call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119) store { ptr, i64, i64 } %t116, ptr %a120 call void @finch_str_drop(ptr %a120) %t121 = load { ptr, i64, i64 }, ptr %a117 store { ptr, i64, i64 } %t121, ptr %a123 store { ptr, i64, i64 } { ptr @.str.5490, i64 1, i64 0 }, ptr %a124 call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) store { ptr, i64, i64 } %t121, ptr %a125 call void @finch_str_drop(ptr %a125) %t126 = load { ptr, i64, i64 }, ptr %a122 %t127 = load { ptr, i64, i64 }, ptr %a112 store { ptr, i64, i64 } %t126, ptr %a129 store { ptr, i64, i64 } %t127, ptr %a130 call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) store { ptr, i64, i64 } %t126, ptr %a131 call void @finch_str_drop(ptr %a131) %t132 = load { ptr, i64, i64 }, ptr %a128 store { ptr, i64, i64 } %t132, ptr %a134 store { ptr, i64, i64 } { ptr @.str.5491, i64 3, i64 0 }, ptr %a135 call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) store { ptr, i64, i64 } %t132, ptr %a136 call void @finch_str_drop(ptr %a136) %t137 = load { ptr, i64, i64 }, ptr %a133 %t138 = call { ptr, i64, i64 } @finch.gen.op(ptr %t113, { ptr, i64, i64 } %t137) store { ptr, i64, i64 } %t137, ptr %a139 call void @finch_str_drop(ptr %a139) store { ptr, i64, i64 } %t138, ptr %a140 %t141 = load ptr, ptr %a1 %t142 = load { ptr, i64, i64 }, ptr %a140 store { ptr, i64, i64 } { ptr @.str.5492, i64 7, i64 0 }, ptr %a144 store { ptr, i64, i64 } %t142, ptr %a145 call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145) %t146 = load { ptr, i64, i64 }, ptr %a143 store { ptr, i64, i64 } %t146, ptr %a148 store { ptr, i64, i64 } { ptr @.str.5493, i64 6, i64 0 }, ptr %a149 call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) store { ptr, i64, i64 } %t146, ptr %a150 call void @finch_str_drop(ptr %a150) %t151 = load { ptr, i64, i64 }, ptr %a147 %t152 = call { ptr, i64, i64 } @finch.gen.op(ptr %t141, { ptr, i64, i64 } %t151) store { ptr, i64, i64 } %t151, ptr %a153 call void @finch_str_drop(ptr %a153) %t154 = load ptr, ptr %a1 %t155 = icmp eq ptr %t154, null br i1 %t155, label %panic8477, label %ok8478 panic8477: call void @finch_panic(ptr @.str.5494, i64 5132, ptr @.str.5495) unreachable ok8478: %t156 = getelementptr inbounds %S.gen.Gen, ptr %t154, i32 0, i32 42 %t157 = load { ptr, i64, i64 }, ptr %t156 store { ptr, i64, i64 } %t152, ptr %t156 store { ptr, i64, i64 } %t157, ptr %a158 call void @finch_str_drop(ptr %a158) %t159 = load ptr, ptr %a1 %t160 = load ptr, ptr %a1 %t161 = load %S.gen.FnSig, ptr %a2 %t162 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t160, %S.gen.FnSig %t161) store { ptr, i64, i64 } { ptr @.str.5496, i64 13, i64 0 }, ptr %a164 store { ptr, i64, i64 } %t162, ptr %a165 call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) store { ptr, i64, i64 } %t162, ptr %a166 call void @finch_str_drop(ptr %a166) %t167 = load { ptr, i64, i64 }, ptr %a163 store { ptr, i64, i64 } %t167, ptr %a169 store { ptr, i64, i64 } { ptr @.str.5497, i64 1, i64 0 }, ptr %a170 call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) store { ptr, i64, i64 } %t167, ptr %a171 call void @finch_str_drop(ptr %a171) %t172 = load { ptr, i64, i64 }, ptr %a168 %t173 = load { ptr, i64, i64 }, ptr %a112 store { ptr, i64, i64 } %t172, ptr %a175 store { ptr, i64, i64 } %t173, ptr %a176 call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) store { ptr, i64, i64 } %t172, ptr %a177 call void @finch_str_drop(ptr %a177) %t178 = load { ptr, i64, i64 }, ptr %a174 store { ptr, i64, i64 } %t178, ptr %a180 store { ptr, i64, i64 } { ptr @.str.5498, i64 3, i64 0 }, ptr %a181 call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) store { ptr, i64, i64 } %t178, ptr %a182 call void @finch_str_drop(ptr %a182) %t183 = load { ptr, i64, i64 }, ptr %a179 %t184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t159, { ptr, i64, i64 } %t183) store { ptr, i64, i64 } %t183, ptr %a185 call void @finch_str_drop(ptr %a185) %t186 = load ptr, ptr %a1 %t187 = icmp eq ptr %t186, null br i1 %t187, label %panic8479, label %ok8480 panic8479: call void @finch_panic(ptr @.str.5499, i64 5133, ptr @.str.5500) unreachable ok8480: %t188 = getelementptr inbounds %S.gen.Gen, ptr %t186, i32 0, i32 43 %t189 = load { ptr, i64, i64 }, ptr %t188 store { ptr, i64, i64 } %t184, ptr %t188 store { ptr, i64, i64 } %t189, ptr %a190 call void @finch_str_drop(ptr %a190) %t191 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t192 = getelementptr inbounds %S.ast.Type, ptr %t191, i32 0, i32 0 %t193 = load { ptr, i64, i64 }, ptr %t192 store { ptr, i64, i64 } %t193, ptr %a194 store { ptr, i64, i64 } { ptr @.str.5501, i64 4, i64 0 }, ptr %a195 %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) %t197 = icmp ne i32 %t196, 0 br i1 %t197, label %then8481, label %endif8483 then8481: %t198 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t199 = load %S.ast.Type, ptr %t198 store %S.ast.Type %t199, ptr %a200 call void @finch.copy.S_ast_Type(ptr %a201, ptr %a200) %t202 = load %S.ast.Type, ptr %a201 %t203 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t202, 1 call void @finch_str_drop(ptr %a140) call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a106) ret %S.gen.Val %t203 endif8483: %t204 = load ptr, ptr %a1 %t205 = load ptr, ptr %a1 %t206 = load %S.gen.FnSig, ptr %a2 %t207 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t205, %S.gen.FnSig %t206) store { ptr, i64, i64 } { ptr @.str.5502, i64 13, i64 0 }, ptr %a209 store { ptr, i64, i64 } %t207, ptr %a210 call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) store { ptr, i64, i64 } %t207, ptr %a211 call void @finch_str_drop(ptr %a211) %t212 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t212, ptr %a214 store { ptr, i64, i64 } { ptr @.str.5503, i64 1, i64 0 }, ptr %a215 call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) store { ptr, i64, i64 } %t212, ptr %a216 call void @finch_str_drop(ptr %a216) %t217 = load { ptr, i64, i64 }, ptr %a213 %t218 = load { ptr, i64, i64 }, ptr %a112 store { ptr, i64, i64 } %t217, ptr %a220 store { ptr, i64, i64 } %t218, ptr %a221 call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) store { ptr, i64, i64 } %t217, ptr %a222 call void @finch_str_drop(ptr %a222) %t223 = load { ptr, i64, i64 }, ptr %a219 store { ptr, i64, i64 } %t223, ptr %a225 store { ptr, i64, i64 } { ptr @.str.5504, i64 3, i64 0 }, ptr %a226 call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) store { ptr, i64, i64 } %t223, ptr %a227 call void @finch_str_drop(ptr %a227) %t228 = load { ptr, i64, i64 }, ptr %a224 %t229 = call { ptr, i64, i64 } @finch.gen.op(ptr %t204, { ptr, i64, i64 } %t228) store { ptr, i64, i64 } %t228, ptr %a230 call void @finch_str_drop(ptr %a230) %t231 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t229, 0 %t232 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t233 = load %S.ast.Type, ptr %t232 store %S.ast.Type %t233, ptr %a234 call void @finch.copy.S_ast_Type(ptr %a235, ptr %a234) %t236 = load %S.ast.Type, ptr %a235 %t237 = insertvalue %S.gen.Val %t231, %S.ast.Type %t236, 1 %t238 = load ptr, ptr %a1 %t239 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t240 = load %S.ast.Type, ptr %t239 %t241 = call i1 @finch.gen.owning(ptr %t238, %S.ast.Type %t240) %t242 = insertvalue %S.gen.Val %t237, i1 %t241, 2 call void @finch_str_drop(ptr %a140) call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a106) ret %S.gen.Val %t242 endif8476: %t243 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t244 = getelementptr inbounds %S.ast.Type, ptr %t243, i32 0, i32 0 %t245 = load { ptr, i64, i64 }, ptr %t244 store { ptr, i64, i64 } %t245, ptr %a246 store { ptr, i64, i64 } { ptr @.str.5505, i64 4, i64 0 }, ptr %a247 %t248 = call i32 @finch_str_eq(ptr %a246, ptr %a247) %t249 = icmp ne i32 %t248, 0 br i1 %t249, label %then8484, label %endif8486 then8484: %t250 = load ptr, ptr %a1 %t251 = load { ptr, i64, i64 }, ptr %a106 call void @finch.gen.emit(ptr %t250, { ptr, i64, i64 } %t251) %t252 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t253 = load %S.ast.Type, ptr %t252 store %S.ast.Type %t253, ptr %a254 call void @finch.copy.S_ast_Type(ptr %a255, ptr %a254) %t256 = load %S.ast.Type, ptr %a255 %t257 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t256, 1 call void @finch_str_drop(ptr %a106) ret %S.gen.Val %t257 endif8486: %t258 = load ptr, ptr %a1 %t259 = load { ptr, i64, i64 }, ptr %a106 %t260 = call { ptr, i64, i64 } @finch.gen.op(ptr %t258, { ptr, i64, i64 } %t259) %t261 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t260, 0 %t262 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t263 = load %S.ast.Type, ptr %t262 store %S.ast.Type %t263, ptr %a264 call void @finch.copy.S_ast_Type(ptr %a265, ptr %a264) %t266 = load %S.ast.Type, ptr %a265 %t267 = insertvalue %S.gen.Val %t261, %S.ast.Type %t266, 1 %t268 = load ptr, ptr %a1 %t269 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t270 = load %S.ast.Type, ptr %t269 %t271 = call i1 @finch.gen.owning(ptr %t268, %S.ast.Type %t270) %t272 = insertvalue %S.gen.Val %t267, i1 %t271, 2 call void @finch_str_drop(ptr %a106) ret %S.gen.Val %t272 } define internal %S.gen.Val @finch.gen.construct(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, %S.ast.Node %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca %S.ast.Node, align 16 %a16 = alloca %S.gen.StructDef, align 16 %a17 = alloca %S.gen.StructDef, align 16 %a19 = alloca %S.gen.StructDef, align 16 %a20 = alloca %S.ast.Node, align 16 %a43 = alloca %S.ast.Node, align 16 %a44 = alloca %S.ast.Node, align 16 %a47 = alloca %S.ast.Node, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca %S.ast.Type, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca i1, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca i64, align 16 %a95 = alloca i64, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca i64, align 16 %a196 = alloca i64, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca i64, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca i64, align 16 %a294 = alloca i64, align 16 %a305 = alloca %S.ast.Type, align 16 %a306 = alloca %S.ast.Type, align 16 %a308 = alloca %S.ast.Type, align 16 %a309 = alloca %S.gen.Val, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca { ptr, i64, i64 }, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca %S.gen.Val, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca %S.gen.Val, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a399 = alloca { ptr, i64, i64 }, align 16 %a401 = alloca { ptr, i64, i64 }, align 16 %a406 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a415 = alloca { ptr, i64, i64 }, align 16 %a417 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a434 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 %a438 = alloca { ptr, i64, i64 }, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a444 = alloca { ptr, i64, i64 }, align 16 %a447 = alloca { ptr, i64, i64 }, align 16 %a454 = alloca { ptr, i64, i64 }, align 16 %a455 = alloca { ptr, i64, i64 }, align 16 %a458 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a501 = alloca { ptr, i64, i64 }, align 16 %a502 = alloca { ptr, i64, i64 }, align 16 %a504 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca %S.gen.Val, align 16 %a511 = alloca { ptr, i64, i64 }, align 16 %a513 = alloca %S.gen.Val, align 16 %a518 = alloca { ptr, i64, i64 }, align 16 %a519 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca { ptr, i64, i64 }, align 16 %a527 = alloca { ptr, i64, i64 }, align 16 %a528 = alloca { ptr, i64, i64 }, align 16 %a531 = alloca { ptr, i64, i64 }, align 16 %a536 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a540 = alloca { ptr, i64, i64 }, align 16 %a545 = alloca { ptr, i64, i64 }, align 16 %a546 = alloca { ptr, i64, i64 }, align 16 %a549 = alloca { ptr, i64, i64 }, align 16 %a553 = alloca { ptr, i64, i64 }, align 16 %a556 = alloca { ptr, i64, i64 }, align 16 %a557 = alloca { ptr, i64, i64 }, align 16 %a561 = alloca %S.ast.Type, align 16 %a562 = alloca %S.ast.Type, align 16 %a566 = alloca %S.gen.Val, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a570 = alloca { ptr, i64, i64 }, align 16 %a571 = alloca { ptr, i64, i64 }, align 16 %a573 = alloca { ptr, i64, i64 }, align 16 %a574 = alloca { ptr, i64, i64 }, align 16 %a575 = alloca { ptr, i64, i64 }, align 16 %a576 = alloca { ptr, i64, i64 }, align 16 %a579 = alloca { ptr, i64, i64 }, align 16 %a580 = alloca { ptr, i64, i64 }, align 16 %a581 = alloca { ptr, i64, i64 }, align 16 %a582 = alloca { ptr, i64, i64 }, align 16 %a584 = alloca { ptr, i64, i64 }, align 16 %a585 = alloca { ptr, i64, i64 }, align 16 %a586 = alloca { ptr, i64, i64 }, align 16 %a587 = alloca { ptr, i64, i64 }, align 16 %a592 = alloca { ptr, i64, i64 }, align 16 %a593 = alloca { ptr, i64, i64 }, align 16 %a594 = alloca { ptr, i64, i64 }, align 16 %a595 = alloca { ptr, i64, i64 }, align 16 %a596 = alloca { ptr, i64, i64 }, align 16 %a598 = alloca { ptr, i64, i64 }, align 16 %a599 = alloca { ptr, i64, i64 }, align 16 %a600 = alloca { ptr, i64, i64 }, align 16 %a601 = alloca { ptr, i64, i64 }, align 16 %a604 = alloca { ptr, i64, i64 }, align 16 %a605 = alloca { ptr, i64, i64 }, align 16 %a606 = alloca { ptr, i64, i64 }, align 16 %a607 = alloca { ptr, i64, i64 }, align 16 %a609 = alloca { ptr, i64, i64 }, align 16 %a610 = alloca { ptr, i64, i64 }, align 16 %a611 = alloca { ptr, i64, i64 }, align 16 %a612 = alloca { ptr, i64, i64 }, align 16 %a622 = alloca { ptr, i64, i64 }, align 16 %a624 = alloca { ptr, i64, i64 }, align 16 %a625 = alloca { ptr, i64, i64 }, align 16 %a626 = alloca { ptr, i64, i64 }, align 16 %a627 = alloca { ptr, i64, i64 }, align 16 %a628 = alloca { ptr, i64, i64 }, align 16 %a631 = alloca { ptr, i64, i64 }, align 16 %a633 = alloca { ptr, i64, i64 }, align 16 %a639 = alloca { ptr, i64, i64 }, align 16 %a640 = alloca { ptr, i64, i64 }, align 16 %a644 = alloca %S.ast.Type, align 16 %a645 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 store %S.ast.Node %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic8487, label %ok8488 panic8487: call void @finch_panic(ptr @.str.5506, i64 5147, ptr @.str.5507) unreachable ok8488: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 16 %t9 = load i64, ptr %a2 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 br i1 %t12, label %range8489, label %inrange8490 range8489: call void @finch_panic_index(ptr @.str.5508, i64 5147, i64 %t9, i64 %t11) unreachable inrange8490: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.StructDef, ptr %t13, i64 %t9 %t15 = load %S.gen.StructDef, ptr %t14 store %S.gen.StructDef %t15, ptr %a16 call void @finch.copy.S_gen_StructDef(ptr %a17, ptr %a16) %t18 = load %S.gen.StructDef, ptr %a17 store %S.gen.StructDef %t18, ptr %a19 store %S.ast.Node zeroinitializer, ptr %a20 %t21 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 2 %t22 = load i1, ptr %t21 %t23 = xor i1 %t22, true br i1 %t23, label %then8491, label %endif8493 then8491: %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null br i1 %t25, label %panic8494, label %ok8495 panic8494: call void @finch_panic(ptr @.str.5509, i64 5150, ptr @.str.5510) unreachable ok8495: %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 0 %t27 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 13 %t28 = load i64, ptr %t27 %t29 = load { ptr, i64, i64 }, ptr %t26 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 %t28, %t30 br i1 %t31, label %range8496, label %inrange8497 range8496: call void @finch_panic_index(ptr @.str.5511, i64 5150, i64 %t28, i64 %t30) unreachable inrange8497: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds %S.ast.Program, ptr %t32, i64 %t28 %t34 = getelementptr inbounds %S.ast.Program, ptr %t33, i32 0, i32 6 %t35 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 14 %t36 = load i64, ptr %t35 %t37 = load { ptr, i64, i64 }, ptr %t34 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 br i1 %t39, label %range8498, label %inrange8499 range8498: call void @finch_panic_index(ptr @.str.5512, i64 5150, i64 %t36, i64 %t38) unreachable inrange8499: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 %t42 = load %S.ast.Node, ptr %t41 store %S.ast.Node %t42, ptr %a43 call void @finch.copy.S_ast_Node(ptr %a44, ptr %a43) %t45 = load %S.ast.Node, ptr %a44 %t46 = load %S.ast.Node, ptr %a20 store %S.ast.Node %t45, ptr %a20 store %S.ast.Node %t46, ptr %a47 call void @finch.drop.S_ast_Node(ptr %a47) br label %endif8493 endif8493: %t48 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.5513, i64 6, i64 0 }, 0 %t49 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 %t50 = load { ptr, i64, i64 }, ptr %t49 store { ptr, i64, i64 } %t50, ptr %a51 call void @finch_str_copy(ptr %a52, ptr %a51) %t53 = load { ptr, i64, i64 }, ptr %a52 %t54 = insertvalue %S.ast.Type %t48, { ptr, i64, i64 } %t53, 2 %t55 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 0 %t56 = load { ptr, i64, i64 }, ptr %t55 store { ptr, i64, i64 } %t56, ptr %a57 call void @finch_str_copy(ptr %a58, ptr %a57) %t59 = load { ptr, i64, i64 }, ptr %a58 %t60 = insertvalue %S.ast.Type %t54, { ptr, i64, i64 } %t59, 3 store %S.ast.Type %t60, ptr %a61 %t62 = load ptr, ptr %a1 %t63 = load %S.ast.Type, ptr %a61 %t64 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t62, %S.ast.Type %t63) store { ptr, i64, i64 } %t64, ptr %a65 %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t67 = load i64, ptr %t66 %t68 = icmp sgt i64 %t67, 0 br label %logic.from8500 logic.from8500: br i1 %t68, label %logic.rhs8501, label %logic.end8502 logic.rhs8501: %t69 = load { ptr, i64, i64 }, ptr %a4 %t70 = extractvalue { ptr, i64, i64 } %t69, 1 %t71 = icmp uge i64 0, %t70 br i1 %t71, label %range8503, label %inrange8504 range8503: call void @finch_panic_index(ptr @.str.5514, i64 5154, i64 0, i64 %t70) unreachable inrange8504: %t72 = extractvalue { ptr, i64, i64 } %t69, 0 %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i64 0 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1 %t75 = load i64, ptr %t74 %t76 = icmp sgt i64 %t75, 0 br label %logic.rend8505 logic.rend8505: br label %logic.end8502 logic.end8502: %t77 = phi i1 [ false, %logic.from8500 ], [ %t76, %logic.rend8505 ] store i1 %t77, ptr %a78 store { ptr, i64, i64 } zeroinitializer, ptr %a79 %t80 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %t80, i32 0, i32 1 %t82 = load i64, ptr %t81 store i64 0, ptr %a83 br label %for.cond8506 for.cond8506: %t84 = load i64, ptr %a83 %t85 = icmp slt i64 %t84, %t82 br i1 %t85, label %for.body8507, label %for.end8509 for.body8507: %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %a79, i32 0, i32 1 %t87 = load i64, ptr %t86 %t88 = add i64 %t87, 1 call void @finch_arr_reserve(ptr %a79, i64 %t88, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t89 = load ptr, ptr %a79 %t90 = getelementptr inbounds i64, ptr %t89, i64 %t87 store i64 -1, ptr %t90 store i64 %t88, ptr %t86 br label %for.step8508 for.step8508: %t91 = load i64, ptr %a83 %t92 = add i64 %t91, 1 store i64 %t92, ptr %a83 br label %for.cond8506 for.end8509: %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t94 = load i64, ptr %t93 store i64 0, ptr %a95 br label %for.cond8510 for.cond8510: %t96 = load i64, ptr %a95 %t97 = icmp slt i64 %t96, %t94 br i1 %t97, label %for.body8511, label %for.end8513 for.body8511: %t98 = load i64, ptr %a95 %t99 = load { ptr, i64, i64 }, ptr %a4 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 %t98, %t100 br i1 %t101, label %range8514, label %inrange8515 range8514: call void @finch_panic_index(ptr @.str.5515, i64 5160, i64 %t98, i64 %t100) unreachable inrange8515: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i64 %t98 %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i32 0, i32 1 %t105 = load i64, ptr %t104 %t106 = icmp sgt i64 %t105, 0 %t107 = load i1, ptr %a78 %t108 = icmp ne i1 %t106, %t107 br i1 %t108, label %then8516, label %endif8518 then8516: %t109 = load ptr, ptr %a1 %t110 = load i64, ptr %a95 %t111 = load { ptr, i64, i64 }, ptr %a3 %t112 = extractvalue { ptr, i64, i64 } %t111, 1 %t113 = icmp uge i64 %t110, %t112 br i1 %t113, label %range8519, label %inrange8520 range8519: call void @finch_panic_index(ptr @.str.5516, i64 5161, i64 %t110, i64 %t112) unreachable inrange8520: %t114 = extractvalue { ptr, i64, i64 } %t111, 0 %t115 = getelementptr inbounds %S.ast.Node, ptr %t114, i64 %t110 %t116 = load %S.ast.Node, ptr %t115 call void @finch.gen.fail(ptr %t109, %S.ast.Node %t116, { ptr, i64, i64 } { ptr @.str.5517, i64 69, i64 0 }) br label %endif8518 endif8518: %t117 = load i1, ptr %a78 %t118 = xor i1 %t117, true br i1 %t118, label %then8521, label %endif8523 then8521: %t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t120 = load i64, ptr %t119 %t121 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t122 = getelementptr inbounds { ptr, i64, i64 }, ptr %t121, i32 0, i32 1 %t123 = load i64, ptr %t122 %t124 = icmp ne i64 %t120, %t123 br i1 %t124, label %then8524, label %endif8526 then8524: %t125 = load ptr, ptr %a1 %t126 = load %S.ast.Node, ptr %a5 %t127 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 %t128 = load { ptr, i64, i64 }, ptr %t127 store { ptr, i64, i64 } %t128, ptr %a130 store { ptr, i64, i64 } { ptr @.str.5518, i64 5, i64 0 }, ptr %a131 call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) %t132 = load { ptr, i64, i64 }, ptr %a129 %t133 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 %t135 = load i64, ptr %t134 call void @finch_str_from_int(ptr %a136, i64 %t135) %t137 = load { ptr, i64, i64 }, ptr %a136 store { ptr, i64, i64 } %t132, ptr %a139 store { ptr, i64, i64 } %t137, ptr %a140 call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) store { ptr, i64, i64 } %t132, ptr %a141 call void @finch_str_drop(ptr %a141) store { ptr, i64, i64 } %t137, ptr %a142 call void @finch_str_drop(ptr %a142) %t143 = load { ptr, i64, i64 }, ptr %a138 store { ptr, i64, i64 } %t143, ptr %a145 store { ptr, i64, i64 } { ptr @.str.5519, i64 17, i64 0 }, ptr %a146 call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) store { ptr, i64, i64 } %t143, ptr %a147 call void @finch_str_drop(ptr %a147) %t148 = load { ptr, i64, i64 }, ptr %a144 %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t150 = load i64, ptr %t149 call void @finch_str_from_int(ptr %a151, i64 %t150) %t152 = load { ptr, i64, i64 }, ptr %a151 store { ptr, i64, i64 } %t148, ptr %a154 store { ptr, i64, i64 } %t152, ptr %a155 call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) store { ptr, i64, i64 } %t148, ptr %a156 call void @finch_str_drop(ptr %a156) store { ptr, i64, i64 } %t152, ptr %a157 call void @finch_str_drop(ptr %a157) %t158 = load { ptr, i64, i64 }, ptr %a153 store { ptr, i64, i64 } %t158, ptr %a160 store { ptr, i64, i64 } { ptr @.str.5520, i64 23, i64 0 }, ptr %a161 call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) store { ptr, i64, i64 } %t158, ptr %a162 call void @finch_str_drop(ptr %a162) %t163 = load { ptr, i64, i64 }, ptr %a159 %t164 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 %t165 = load { ptr, i64, i64 }, ptr %t164 store { ptr, i64, i64 } %t163, ptr %a167 store { ptr, i64, i64 } %t165, ptr %a168 call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) store { ptr, i64, i64 } %t163, ptr %a169 call void @finch_str_drop(ptr %a169) %t170 = load { ptr, i64, i64 }, ptr %a166 store { ptr, i64, i64 } %t170, ptr %a172 store { ptr, i64, i64 } { ptr @.str.5521, i64 15, i64 0 }, ptr %a173 call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) store { ptr, i64, i64 } %t170, ptr %a174 call void @finch_str_drop(ptr %a174) %t175 = load { ptr, i64, i64 }, ptr %a171 call void @finch.gen.fail(ptr %t125, %S.ast.Node %t126, { ptr, i64, i64 } %t175) store { ptr, i64, i64 } %t175, ptr %a176 call void @finch_str_drop(ptr %a176) br label %endif8526 endif8526: %t177 = load i64, ptr %a95 %t178 = load i64, ptr %a95 %t179 = load { ptr, i64, i64 }, ptr %a79 %t180 = extractvalue { ptr, i64, i64 } %t179, 1 %t181 = icmp uge i64 %t178, %t180 br i1 %t181, label %range8527, label %inrange8528 range8527: call void @finch_panic_index(ptr @.str.5522, i64 5167, i64 %t178, i64 %t180) unreachable inrange8528: %t182 = extractvalue { ptr, i64, i64 } %t179, 0 %t183 = getelementptr inbounds i64, ptr %t182, i64 %t178 store i64 %t177, ptr %t183 br label %for.step8512 endif8523: %t184 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i32 0, i32 1 %t186 = load i64, ptr %a95 %t187 = load { ptr, i64, i64 }, ptr %a4 %t188 = extractvalue { ptr, i64, i64 } %t187, 1 %t189 = icmp uge i64 %t186, %t188 br i1 %t189, label %range8529, label %inrange8530 range8529: call void @finch_panic_index(ptr @.str.5523, i64 5170, i64 %t186, i64 %t188) unreachable inrange8530: %t190 = extractvalue { ptr, i64, i64 } %t187, 0 %t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %t190, i64 %t186 %t192 = load { ptr, i64, i64 }, ptr %t191 store i64 -1, ptr %a193 %t194 = load i64, ptr %t185 %t195 = load ptr, ptr %t184 store i64 0, ptr %a196 br label %find.cond8531 find.cond8531: %t197 = load i64, ptr %a196 %t198 = icmp slt i64 %t197, %t194 br i1 %t198, label %find.body8532, label %find.end8535 find.body8532: %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t195, i64 %t197 %t200 = load { ptr, i64, i64 }, ptr %t199 store { ptr, i64, i64 } %t200, ptr %a201 store { ptr, i64, i64 } %t192, ptr %a202 %t203 = call i32 @finch_str_eq(ptr %a201, ptr %a202) %t204 = icmp ne i32 %t203, 0 br i1 %t204, label %find.hit8533, label %find.next8534 find.hit8533: store i64 %t197, ptr %a193 br label %find.end8535 find.next8534: %t205 = add i64 %t197, 1 store i64 %t205, ptr %a196 br label %find.cond8531 find.end8535: %t206 = load i64, ptr %a193 store i64 %t206, ptr %a207 %t208 = load i64, ptr %a207 %t209 = icmp slt i64 %t208, 0 br i1 %t209, label %then8536, label %endif8538 then8536: %t210 = load ptr, ptr %a1 %t211 = load i64, ptr %a95 %t212 = load { ptr, i64, i64 }, ptr %a3 %t213 = extractvalue { ptr, i64, i64 } %t212, 1 %t214 = icmp uge i64 %t211, %t213 br i1 %t214, label %range8539, label %inrange8540 range8539: call void @finch_panic_index(ptr @.str.5524, i64 5172, i64 %t211, i64 %t213) unreachable inrange8540: %t215 = extractvalue { ptr, i64, i64 } %t212, 0 %t216 = getelementptr inbounds %S.ast.Node, ptr %t215, i64 %t211 %t217 = load %S.ast.Node, ptr %t216 %t218 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 %t219 = load { ptr, i64, i64 }, ptr %t218 store { ptr, i64, i64 } %t219, ptr %a221 store { ptr, i64, i64 } { ptr @.str.5525, i64 15, i64 0 }, ptr %a222 call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) %t223 = load { ptr, i64, i64 }, ptr %a220 %t224 = load i64, ptr %a95 %t225 = load { ptr, i64, i64 }, ptr %a4 %t226 = extractvalue { ptr, i64, i64 } %t225, 1 %t227 = icmp uge i64 %t224, %t226 br i1 %t227, label %range8541, label %inrange8542 range8541: call void @finch_panic_index(ptr @.str.5526, i64 5172, i64 %t224, i64 %t226) unreachable inrange8542: %t228 = extractvalue { ptr, i64, i64 } %t225, 0 %t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %t228, i64 %t224 %t230 = load { ptr, i64, i64 }, ptr %t229 store { ptr, i64, i64 } %t223, ptr %a232 store { ptr, i64, i64 } %t230, ptr %a233 call void @finch_str_concat(ptr %a231, ptr %a232, ptr %a233) store { ptr, i64, i64 } %t223, ptr %a234 call void @finch_str_drop(ptr %a234) %t235 = load { ptr, i64, i64 }, ptr %a231 store { ptr, i64, i64 } %t235, ptr %a237 store { ptr, i64, i64 } { ptr @.str.5527, i64 1, i64 0 }, ptr %a238 call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238) store { ptr, i64, i64 } %t235, ptr %a239 call void @finch_str_drop(ptr %a239) %t240 = load { ptr, i64, i64 }, ptr %a236 call void @finch.gen.fail(ptr %t210, %S.ast.Node %t217, { ptr, i64, i64 } %t240) store { ptr, i64, i64 } %t240, ptr %a241 call void @finch_str_drop(ptr %a241) br label %endif8538 endif8538: %t242 = load i64, ptr %a207 %t243 = load { ptr, i64, i64 }, ptr %a79 %t244 = extractvalue { ptr, i64, i64 } %t243, 1 %t245 = icmp uge i64 %t242, %t244 br i1 %t245, label %range8543, label %inrange8544 range8543: call void @finch_panic_index(ptr @.str.5528, i64 5174, i64 %t242, i64 %t244) unreachable inrange8544: %t246 = extractvalue { ptr, i64, i64 } %t243, 0 %t247 = getelementptr inbounds i64, ptr %t246, i64 %t242 %t248 = load i64, ptr %t247 %t249 = icmp sge i64 %t248, 0 br i1 %t249, label %then8545, label %endif8547 then8545: %t250 = load ptr, ptr %a1 %t251 = load i64, ptr %a95 %t252 = load { ptr, i64, i64 }, ptr %a3 %t253 = extractvalue { ptr, i64, i64 } %t252, 1 %t254 = icmp uge i64 %t251, %t253 br i1 %t254, label %range8548, label %inrange8549 range8548: call void @finch_panic_index(ptr @.str.5529, i64 5175, i64 %t251, i64 %t253) unreachable inrange8549: %t255 = extractvalue { ptr, i64, i64 } %t252, 0 %t256 = getelementptr inbounds %S.ast.Node, ptr %t255, i64 %t251 %t257 = load %S.ast.Node, ptr %t256 %t258 = load i64, ptr %a95 %t259 = load { ptr, i64, i64 }, ptr %a4 %t260 = extractvalue { ptr, i64, i64 } %t259, 1 %t261 = icmp uge i64 %t258, %t260 br i1 %t261, label %range8550, label %inrange8551 range8550: call void @finch_panic_index(ptr @.str.5531, i64 5175, i64 %t258, i64 %t260) unreachable inrange8551: %t262 = extractvalue { ptr, i64, i64 } %t259, 0 %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 %t258 %t264 = load { ptr, i64, i64 }, ptr %t263 store { ptr, i64, i64 } { ptr @.str.5530, i64 11, i64 0 }, ptr %a266 store { ptr, i64, i64 } %t264, ptr %a267 call void @finch_str_concat(ptr %a265, ptr %a266, ptr %a267) %t268 = load { ptr, i64, i64 }, ptr %a265 store { ptr, i64, i64 } %t268, ptr %a270 store { ptr, i64, i64 } { ptr @.str.5532, i64 16, i64 0 }, ptr %a271 call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) store { ptr, i64, i64 } %t268, ptr %a272 call void @finch_str_drop(ptr %a272) %t273 = load { ptr, i64, i64 }, ptr %a269 call void @finch.gen.fail(ptr %t250, %S.ast.Node %t257, { ptr, i64, i64 } %t273) store { ptr, i64, i64 } %t273, ptr %a274 call void @finch_str_drop(ptr %a274) br label %endif8547 endif8547: %t275 = load i64, ptr %a95 %t276 = load i64, ptr %a207 %t277 = load { ptr, i64, i64 }, ptr %a79 %t278 = extractvalue { ptr, i64, i64 } %t277, 1 %t279 = icmp uge i64 %t276, %t278 br i1 %t279, label %range8552, label %inrange8553 range8552: call void @finch_panic_index(ptr @.str.5533, i64 5177, i64 %t276, i64 %t278) unreachable inrange8553: %t280 = extractvalue { ptr, i64, i64 } %t277, 0 %t281 = getelementptr inbounds i64, ptr %t280, i64 %t276 store i64 %t275, ptr %t281 br label %for.step8512 for.step8512: %t282 = load i64, ptr %a95 %t283 = add i64 %t282, 1 store i64 %t283, ptr %a95 br label %for.cond8510 for.end8513: store { ptr, i64, i64 } { ptr @.str.5534, i64 15, i64 0 }, ptr %a284 %t285 = load ptr, ptr %a1 %t286 = icmp eq ptr %t285, null br i1 %t286, label %panic8554, label %ok8555 panic8554: call void @finch_panic(ptr @.str.5535, i64 5180, ptr @.str.5536) unreachable ok8555: %t287 = getelementptr inbounds %S.gen.Gen, ptr %t285, i32 0, i32 11 %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i32 0, i32 1 %t289 = load i64, ptr %t288 store i64 %t289, ptr %a290 %t291 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t292 = getelementptr inbounds { ptr, i64, i64 }, ptr %t291, i32 0, i32 1 %t293 = load i64, ptr %t292 store i64 0, ptr %a294 br label %for.cond8556 for.cond8556: %t295 = load i64, ptr %a294 %t296 = icmp slt i64 %t295, %t293 br i1 %t296, label %for.body8557, label %for.end8559 for.body8557: %t297 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 12 %t298 = load i64, ptr %a294 %t299 = load { ptr, i64, i64 }, ptr %t297 %t300 = extractvalue { ptr, i64, i64 } %t299, 1 %t301 = icmp uge i64 %t298, %t300 br i1 %t301, label %range8560, label %inrange8561 range8560: call void @finch_panic_index(ptr @.str.5537, i64 5182, i64 %t298, i64 %t300) unreachable inrange8561: %t302 = extractvalue { ptr, i64, i64 } %t299, 0 %t303 = getelementptr inbounds %S.ast.Type, ptr %t302, i64 %t298 %t304 = load %S.ast.Type, ptr %t303 store %S.ast.Type %t304, ptr %a305 call void @finch.copy.S_ast_Type(ptr %a306, ptr %a305) %t307 = load %S.ast.Type, ptr %a306 store %S.ast.Type %t307, ptr %a308 store %S.gen.Val zeroinitializer, ptr %a309 %t310 = load i64, ptr %a294 %t311 = load { ptr, i64, i64 }, ptr %a79 %t312 = extractvalue { ptr, i64, i64 } %t311, 1 %t313 = icmp uge i64 %t310, %t312 br i1 %t313, label %range8562, label %inrange8563 range8562: call void @finch_panic_index(ptr @.str.5538, i64 5184, i64 %t310, i64 %t312) unreachable inrange8563: %t314 = extractvalue { ptr, i64, i64 } %t311, 0 %t315 = getelementptr inbounds i64, ptr %t314, i64 %t310 %t316 = load i64, ptr %t315 %t317 = icmp sge i64 %t316, 0 br i1 %t317, label %then8564, label %else8565 then8564: %t318 = load ptr, ptr %a1 %t319 = load ptr, ptr %a1 %t320 = load i64, ptr %a294 %t321 = load { ptr, i64, i64 }, ptr %a79 %t322 = extractvalue { ptr, i64, i64 } %t321, 1 %t323 = icmp uge i64 %t320, %t322 br i1 %t323, label %range8567, label %inrange8568 range8567: call void @finch_panic_index(ptr @.str.5539, i64 5185, i64 %t320, i64 %t322) unreachable inrange8568: %t324 = extractvalue { ptr, i64, i64 } %t321, 0 %t325 = getelementptr inbounds i64, ptr %t324, i64 %t320 %t326 = load i64, ptr %t325 %t327 = load { ptr, i64, i64 }, ptr %a3 %t328 = extractvalue { ptr, i64, i64 } %t327, 1 %t329 = icmp uge i64 %t326, %t328 br i1 %t329, label %range8569, label %inrange8570 range8569: call void @finch_panic_index(ptr @.str.5540, i64 5185, i64 %t326, i64 %t328) unreachable inrange8570: %t330 = extractvalue { ptr, i64, i64 } %t327, 0 %t331 = getelementptr inbounds %S.ast.Node, ptr %t330, i64 %t326 %t332 = load %S.ast.Node, ptr %t331 %t333 = load %S.ast.Type, ptr %a308 %t334 = call %S.gen.Val @finch.gen.exprWant(ptr %t319, %S.ast.Node %t332, %S.ast.Type %t333) %t335 = load %S.ast.Type, ptr %a308 %t336 = load i64, ptr %a294 %t337 = load { ptr, i64, i64 }, ptr %a79 %t338 = extractvalue { ptr, i64, i64 } %t337, 1 %t339 = icmp uge i64 %t336, %t338 br i1 %t339, label %range8571, label %inrange8572 range8571: call void @finch_panic_index(ptr @.str.5541, i64 5185, i64 %t336, i64 %t338) unreachable inrange8572: %t340 = extractvalue { ptr, i64, i64 } %t337, 0 %t341 = getelementptr inbounds i64, ptr %t340, i64 %t336 %t342 = load i64, ptr %t341 %t343 = load { ptr, i64, i64 }, ptr %a3 %t344 = extractvalue { ptr, i64, i64 } %t343, 1 %t345 = icmp uge i64 %t342, %t344 br i1 %t345, label %range8573, label %inrange8574 range8573: call void @finch_panic_index(ptr @.str.5542, i64 5185, i64 %t342, i64 %t344) unreachable inrange8574: %t346 = extractvalue { ptr, i64, i64 } %t343, 0 %t347 = getelementptr inbounds %S.ast.Node, ptr %t346, i64 %t342 %t348 = load %S.ast.Node, ptr %t347 %t349 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t350 = load i64, ptr %a294 %t351 = load { ptr, i64, i64 }, ptr %t349 %t352 = extractvalue { ptr, i64, i64 } %t351, 1 %t353 = icmp uge i64 %t350, %t352 br i1 %t353, label %range8575, label %inrange8576 range8575: call void @finch_panic_index(ptr @.str.5544, i64 5185, i64 %t350, i64 %t352) unreachable inrange8576: %t354 = extractvalue { ptr, i64, i64 } %t351, 0 %t355 = getelementptr inbounds { ptr, i64, i64 }, ptr %t354, i64 %t350 %t356 = load { ptr, i64, i64 }, ptr %t355 store { ptr, i64, i64 } { ptr @.str.5543, i64 11, i64 0 }, ptr %a358 store { ptr, i64, i64 } %t356, ptr %a359 call void @finch_str_concat(ptr %a357, ptr %a358, ptr %a359) %t360 = load { ptr, i64, i64 }, ptr %a357 store { ptr, i64, i64 } %t360, ptr %a362 store { ptr, i64, i64 } { ptr @.str.5545, i64 1, i64 0 }, ptr %a363 call void @finch_str_concat(ptr %a361, ptr %a362, ptr %a363) store { ptr, i64, i64 } %t360, ptr %a364 call void @finch_str_drop(ptr %a364) %t365 = load { ptr, i64, i64 }, ptr %a361 %t366 = call %S.gen.Val @finch.gen.coerce(ptr %t318, %S.gen.Val %t334, %S.ast.Type %t335, %S.ast.Node %t348, { ptr, i64, i64 } %t365) store %S.gen.Val %t334, ptr %a367 call void @finch.drop.S_gen_Val(ptr %a367) store { ptr, i64, i64 } %t365, ptr %a368 call void @finch_str_drop(ptr %a368) %t369 = load %S.gen.Val, ptr %a309 store %S.gen.Val %t366, ptr %a309 store %S.gen.Val %t369, ptr %a370 call void @finch.drop.S_gen_Val(ptr %a370) br label %endif8566 else8565: %t371 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 2 %t372 = load i1, ptr %t371 %t373 = xor i1 %t372, true br label %logic.from8577 logic.from8577: br i1 %t373, label %logic.rhs8578, label %logic.end8579 logic.rhs8578: %t374 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9 %t375 = load i64, ptr %a294 %t376 = load { ptr, i64, i64 }, ptr %t374 %t377 = extractvalue { ptr, i64, i64 } %t376, 1 %t378 = icmp uge i64 %t375, %t377 br i1 %t378, label %range8580, label %inrange8581 range8580: call void @finch_panic_index(ptr @.str.5546, i64 5186, i64 %t375, i64 %t377) unreachable inrange8581: %t379 = extractvalue { ptr, i64, i64 } %t376, 0 %t380 = getelementptr inbounds %S.ast.Node, ptr %t379, i64 %t375 %t381 = getelementptr inbounds %S.ast.Node, ptr %t380, i32 0, i32 9 %t382 = getelementptr inbounds { ptr, i64, i64 }, ptr %t381, i32 0, i32 1 %t383 = load i64, ptr %t382 %t384 = icmp sgt i64 %t383, 0 br label %logic.rend8582 logic.rend8582: br label %logic.end8579 logic.end8579: %t385 = phi i1 [ false, %logic.from8577 ], [ %t384, %logic.rend8582 ] br i1 %t385, label %then8583, label %else8584 then8583: %t386 = load ptr, ptr %a1 %t387 = icmp eq ptr %t386, null br i1 %t387, label %panic8586, label %ok8587 panic8586: call void @finch_panic(ptr @.str.5547, i64 5188, ptr @.str.5548) unreachable ok8587: %t388 = getelementptr inbounds %S.gen.Gen, ptr %t386, i32 0, i32 10 %t389 = load { ptr, i64, i64 }, ptr %t388 store { ptr, i64, i64 } %t389, ptr %a390 call void @finch.copy.arr_S_gen_Scope(ptr %a391, ptr %a390) %t392 = load { ptr, i64, i64 }, ptr %a391 store { ptr, i64, i64 } %t392, ptr %a393 %t394 = load ptr, ptr %a1 %t395 = icmp eq ptr %t394, null br i1 %t395, label %panic8588, label %ok8589 panic8588: call void @finch_panic(ptr @.str.5549, i64 5189, ptr @.str.5550) unreachable ok8589: %t396 = getelementptr inbounds %S.gen.Gen, ptr %t394, i32 0, i32 14 %t397 = load { ptr, i64, i64 }, ptr %t396 store { ptr, i64, i64 } %t397, ptr %a398 call void @finch_str_copy(ptr %a399, ptr %a398) %t400 = load { ptr, i64, i64 }, ptr %a399 store { ptr, i64, i64 } %t400, ptr %a401 %t402 = load ptr, ptr %a1 %t403 = icmp eq ptr %t402, null br i1 %t403, label %panic8590, label %ok8591 panic8590: call void @finch_panic(ptr @.str.5551, i64 5190, ptr @.str.5552) unreachable ok8591: %t404 = getelementptr inbounds %S.gen.Gen, ptr %t402, i32 0, i32 18 %t405 = load { ptr, i64, i64 }, ptr %t404 store { ptr, i64, i64 } %t405, ptr %a406 call void @finch.copy.arr_str(ptr %a407, ptr %a406) %t408 = load { ptr, i64, i64 }, ptr %a407 store { ptr, i64, i64 } %t408, ptr %a409 %t410 = load ptr, ptr %a1 %t411 = icmp eq ptr %t410, null br i1 %t411, label %panic8592, label %ok8593 panic8592: call void @finch_panic(ptr @.str.5553, i64 5191, ptr @.str.5554) unreachable ok8593: %t412 = getelementptr inbounds %S.gen.Gen, ptr %t410, i32 0, i32 19 %t413 = load { ptr, i64, i64 }, ptr %t412 store { ptr, i64, i64 } %t413, ptr %a414 call void @finch.copy.arr_S_ast_Type(ptr %a415, ptr %a414) %t416 = load { ptr, i64, i64 }, ptr %a415 store { ptr, i64, i64 } %t416, ptr %a417 %t418 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 6 %t419 = load { ptr, i64, i64 }, ptr %t418 %t420 = load ptr, ptr %a1 %t421 = icmp eq ptr %t420, null br i1 %t421, label %panic8594, label %ok8595 panic8594: call void @finch_panic(ptr @.str.5555, i64 5192, ptr @.str.5556) unreachable ok8595: %t422 = getelementptr inbounds %S.gen.Gen, ptr %t420, i32 0, i32 18 store { ptr, i64, i64 } %t419, ptr %a423 call void @finch.copy.arr_str(ptr %a424, ptr %a423) %t425 = load { ptr, i64, i64 }, ptr %a424 %t426 = load { ptr, i64, i64 }, ptr %t422 store { ptr, i64, i64 } %t425, ptr %t422 store { ptr, i64, i64 } %t426, ptr %a427 call void @finch.drop.arr_str(ptr %a427) %t428 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 7 %t429 = load { ptr, i64, i64 }, ptr %t428 %t430 = load ptr, ptr %a1 %t431 = icmp eq ptr %t430, null br i1 %t431, label %panic8596, label %ok8597 panic8596: call void @finch_panic(ptr @.str.5557, i64 5193, ptr @.str.5558) unreachable ok8597: %t432 = getelementptr inbounds %S.gen.Gen, ptr %t430, i32 0, i32 19 store { ptr, i64, i64 } %t429, ptr %a433 call void @finch.copy.arr_S_ast_Type(ptr %a434, ptr %a433) %t435 = load { ptr, i64, i64 }, ptr %a434 %t436 = load { ptr, i64, i64 }, ptr %t432 store { ptr, i64, i64 } %t435, ptr %t432 store { ptr, i64, i64 } %t436, ptr %a437 call void @finch.drop.arr_S_ast_Type(ptr %a437) store { ptr, i64, i64 } zeroinitializer, ptr %a438 %t439 = load { ptr, i64, i64 }, ptr %a438 %t440 = load ptr, ptr %a1 %t441 = icmp eq ptr %t440, null br i1 %t441, label %panic8598, label %ok8599 panic8598: call void @finch_panic(ptr @.str.5559, i64 5195, ptr @.str.5560) unreachable ok8599: %t442 = getelementptr inbounds %S.gen.Gen, ptr %t440, i32 0, i32 10 store { ptr, i64, i64 } %t439, ptr %a443 call void @finch.copy.arr_S_gen_Scope(ptr %a444, ptr %a443) %t445 = load { ptr, i64, i64 }, ptr %a444 %t446 = load { ptr, i64, i64 }, ptr %t442 store { ptr, i64, i64 } %t445, ptr %t442 store { ptr, i64, i64 } %t446, ptr %a447 call void @finch.drop.arr_S_gen_Scope(ptr %a447) %t448 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t448) %t449 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 0 %t450 = load { ptr, i64, i64 }, ptr %t449 %t451 = load ptr, ptr %a1 %t452 = icmp eq ptr %t451, null br i1 %t452, label %panic8600, label %ok8601 panic8600: call void @finch_panic(ptr @.str.5561, i64 5197, ptr @.str.5562) unreachable ok8601: %t453 = getelementptr inbounds %S.gen.Gen, ptr %t451, i32 0, i32 14 store { ptr, i64, i64 } %t450, ptr %a454 call void @finch_str_copy(ptr %a455, ptr %a454) %t456 = load { ptr, i64, i64 }, ptr %a455 %t457 = load { ptr, i64, i64 }, ptr %t453 store { ptr, i64, i64 } %t456, ptr %t453 store { ptr, i64, i64 } %t457, ptr %a458 call void @finch_str_drop(ptr %a458) %t459 = load ptr, ptr %a1 %t460 = load ptr, ptr %a1 %t461 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9 %t462 = load i64, ptr %a294 %t463 = load { ptr, i64, i64 }, ptr %t461 %t464 = extractvalue { ptr, i64, i64 } %t463, 1 %t465 = icmp uge i64 %t462, %t464 br i1 %t465, label %range8602, label %inrange8603 range8602: call void @finch_panic_index(ptr @.str.5563, i64 5198, i64 %t462, i64 %t464) unreachable inrange8603: %t466 = extractvalue { ptr, i64, i64 } %t463, 0 %t467 = getelementptr inbounds %S.ast.Node, ptr %t466, i64 %t462 %t468 = getelementptr inbounds %S.ast.Node, ptr %t467, i32 0, i32 9 %t469 = load { ptr, i64, i64 }, ptr %t468 %t470 = extractvalue { ptr, i64, i64 } %t469, 1 %t471 = icmp uge i64 0, %t470 br i1 %t471, label %range8604, label %inrange8605 range8604: call void @finch_panic_index(ptr @.str.5564, i64 5198, i64 0, i64 %t470) unreachable inrange8605: %t472 = extractvalue { ptr, i64, i64 } %t469, 0 %t473 = getelementptr inbounds %S.ast.Node, ptr %t472, i64 0 %t474 = load %S.ast.Node, ptr %t473 %t475 = load %S.ast.Type, ptr %a308 %t476 = call %S.gen.Val @finch.gen.exprWant(ptr %t460, %S.ast.Node %t474, %S.ast.Type %t475) %t477 = load %S.ast.Type, ptr %a308 %t478 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9 %t479 = load i64, ptr %a294 %t480 = load { ptr, i64, i64 }, ptr %t478 %t481 = extractvalue { ptr, i64, i64 } %t480, 1 %t482 = icmp uge i64 %t479, %t481 br i1 %t482, label %range8606, label %inrange8607 range8606: call void @finch_panic_index(ptr @.str.5565, i64 5198, i64 %t479, i64 %t481) unreachable inrange8607: %t483 = extractvalue { ptr, i64, i64 } %t480, 0 %t484 = getelementptr inbounds %S.ast.Node, ptr %t483, i64 %t479 %t485 = getelementptr inbounds %S.ast.Node, ptr %t484, i32 0, i32 9 %t486 = load { ptr, i64, i64 }, ptr %t485 %t487 = extractvalue { ptr, i64, i64 } %t486, 1 %t488 = icmp uge i64 0, %t487 br i1 %t488, label %range8608, label %inrange8609 range8608: call void @finch_panic_index(ptr @.str.5566, i64 5198, i64 0, i64 %t487) unreachable inrange8609: %t489 = extractvalue { ptr, i64, i64 } %t486, 0 %t490 = getelementptr inbounds %S.ast.Node, ptr %t489, i64 0 %t491 = load %S.ast.Node, ptr %t490 %t492 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t493 = load i64, ptr %a294 %t494 = load { ptr, i64, i64 }, ptr %t492 %t495 = extractvalue { ptr, i64, i64 } %t494, 1 %t496 = icmp uge i64 %t493, %t495 br i1 %t496, label %range8610, label %inrange8611 range8610: call void @finch_panic_index(ptr @.str.5568, i64 5198, i64 %t493, i64 %t495) unreachable inrange8611: %t497 = extractvalue { ptr, i64, i64 } %t494, 0 %t498 = getelementptr inbounds { ptr, i64, i64 }, ptr %t497, i64 %t493 %t499 = load { ptr, i64, i64 }, ptr %t498 store { ptr, i64, i64 } { ptr @.str.5567, i64 16, i64 0 }, ptr %a501 store { ptr, i64, i64 } %t499, ptr %a502 call void @finch_str_concat(ptr %a500, ptr %a501, ptr %a502) %t503 = load { ptr, i64, i64 }, ptr %a500 store { ptr, i64, i64 } %t503, ptr %a505 store { ptr, i64, i64 } { ptr @.str.5569, i64 1, i64 0 }, ptr %a506 call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506) store { ptr, i64, i64 } %t503, ptr %a507 call void @finch_str_drop(ptr %a507) %t508 = load { ptr, i64, i64 }, ptr %a504 %t509 = call %S.gen.Val @finch.gen.coerce(ptr %t459, %S.gen.Val %t476, %S.ast.Type %t477, %S.ast.Node %t491, { ptr, i64, i64 } %t508) store %S.gen.Val %t476, ptr %a510 call void @finch.drop.S_gen_Val(ptr %a510) store { ptr, i64, i64 } %t508, ptr %a511 call void @finch_str_drop(ptr %a511) %t512 = load %S.gen.Val, ptr %a309 store %S.gen.Val %t509, ptr %a309 store %S.gen.Val %t512, ptr %a513 call void @finch.drop.S_gen_Val(ptr %a513) %t514 = load { ptr, i64, i64 }, ptr %a401 %t515 = load ptr, ptr %a1 %t516 = icmp eq ptr %t515, null br i1 %t516, label %panic8612, label %ok8613 panic8612: call void @finch_panic(ptr @.str.5570, i64 5199, ptr @.str.5571) unreachable ok8613: %t517 = getelementptr inbounds %S.gen.Gen, ptr %t515, i32 0, i32 14 store { ptr, i64, i64 } %t514, ptr %a518 call void @finch_str_copy(ptr %a519, ptr %a518) %t520 = load { ptr, i64, i64 }, ptr %a519 %t521 = load { ptr, i64, i64 }, ptr %t517 store { ptr, i64, i64 } %t520, ptr %t517 store { ptr, i64, i64 } %t521, ptr %a522 call void @finch_str_drop(ptr %a522) %t523 = load { ptr, i64, i64 }, ptr %a409 %t524 = load ptr, ptr %a1 %t525 = icmp eq ptr %t524, null br i1 %t525, label %panic8614, label %ok8615 panic8614: call void @finch_panic(ptr @.str.5572, i64 5200, ptr @.str.5573) unreachable ok8615: %t526 = getelementptr inbounds %S.gen.Gen, ptr %t524, i32 0, i32 18 store { ptr, i64, i64 } %t523, ptr %a527 call void @finch.copy.arr_str(ptr %a528, ptr %a527) %t529 = load { ptr, i64, i64 }, ptr %a528 %t530 = load { ptr, i64, i64 }, ptr %t526 store { ptr, i64, i64 } %t529, ptr %t526 store { ptr, i64, i64 } %t530, ptr %a531 call void @finch.drop.arr_str(ptr %a531) %t532 = load { ptr, i64, i64 }, ptr %a417 %t533 = load ptr, ptr %a1 %t534 = icmp eq ptr %t533, null br i1 %t534, label %panic8616, label %ok8617 panic8616: call void @finch_panic(ptr @.str.5574, i64 5201, ptr @.str.5575) unreachable ok8617: %t535 = getelementptr inbounds %S.gen.Gen, ptr %t533, i32 0, i32 19 store { ptr, i64, i64 } %t532, ptr %a536 call void @finch.copy.arr_S_ast_Type(ptr %a537, ptr %a536) %t538 = load { ptr, i64, i64 }, ptr %a537 %t539 = load { ptr, i64, i64 }, ptr %t535 store { ptr, i64, i64 } %t538, ptr %t535 store { ptr, i64, i64 } %t539, ptr %a540 call void @finch.drop.arr_S_ast_Type(ptr %a540) %t541 = load { ptr, i64, i64 }, ptr %a393 %t542 = load ptr, ptr %a1 %t543 = icmp eq ptr %t542, null br i1 %t543, label %panic8618, label %ok8619 panic8618: call void @finch_panic(ptr @.str.5576, i64 5202, ptr @.str.5577) unreachable ok8619: %t544 = getelementptr inbounds %S.gen.Gen, ptr %t542, i32 0, i32 10 store { ptr, i64, i64 } %t541, ptr %a545 call void @finch.copy.arr_S_gen_Scope(ptr %a546, ptr %a545) %t547 = load { ptr, i64, i64 }, ptr %a546 %t548 = load { ptr, i64, i64 }, ptr %t544 store { ptr, i64, i64 } %t547, ptr %t544 store { ptr, i64, i64 } %t548, ptr %a549 call void @finch.drop.arr_S_gen_Scope(ptr %a549) call void @finch.drop.arr_S_gen_Scope(ptr %a438) call void @finch.drop.arr_S_ast_Type(ptr %a417) call void @finch.drop.arr_str(ptr %a409) call void @finch_str_drop(ptr %a401) call void @finch.drop.arr_S_gen_Scope(ptr %a393) br label %endif8585 else8584: call void @finch.drop.S_gen_Val(ptr %a309) call void @finch.drop.S_ast_Type(ptr %a308) br label %for.step8558 endif8585: br label %endif8566 endif8566: %t550 = load ptr, ptr %a1 %t551 = load %S.gen.Val, ptr %a309 %t552 = call { ptr, i64, i64 } @finch.gen.own(ptr %t550, %S.gen.Val %t551) store { ptr, i64, i64 } %t552, ptr %a553 %t554 = load ptr, ptr %a1 %t555 = load { ptr, i64, i64 }, ptr %a553 store { ptr, i64, i64 } %t555, ptr %a556 call void @finch_str_copy(ptr %a557, ptr %a556) %t558 = load { ptr, i64, i64 }, ptr %a557 %t559 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t558, 0 %t560 = load %S.ast.Type, ptr %a308 store %S.ast.Type %t560, ptr %a561 call void @finch.copy.S_ast_Type(ptr %a562, ptr %a561) %t563 = load %S.ast.Type, ptr %a562 %t564 = insertvalue %S.gen.Val %t559, %S.ast.Type %t563, 1 %t565 = insertvalue %S.gen.Val %t564, i1 true, 2 call void @finch.gen.hold(ptr %t554, %S.gen.Val %t565) store %S.gen.Val %t565, ptr %a566 call void @finch.drop.S_gen_Val(ptr %a566) %t567 = load ptr, ptr %a1 %t568 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } { ptr @.str.5578, i64 12, i64 0 }, ptr %a570 store { ptr, i64, i64 } %t568, ptr %a571 call void @finch_str_concat(ptr %a569, ptr %a570, ptr %a571) %t572 = load { ptr, i64, i64 }, ptr %a569 store { ptr, i64, i64 } %t572, ptr %a574 store { ptr, i64, i64 } { ptr @.str.5579, i64 1, i64 0 }, ptr %a575 call void @finch_str_concat(ptr %a573, ptr %a574, ptr %a575) store { ptr, i64, i64 } %t572, ptr %a576 call void @finch_str_drop(ptr %a576) %t577 = load { ptr, i64, i64 }, ptr %a573 %t578 = load { ptr, i64, i64 }, ptr %a284 store { ptr, i64, i64 } %t577, ptr %a580 store { ptr, i64, i64 } %t578, ptr %a581 call void @finch_str_concat(ptr %a579, ptr %a580, ptr %a581) store { ptr, i64, i64 } %t577, ptr %a582 call void @finch_str_drop(ptr %a582) %t583 = load { ptr, i64, i64 }, ptr %a579 store { ptr, i64, i64 } %t583, ptr %a585 store { ptr, i64, i64 } { ptr @.str.5580, i64 2, i64 0 }, ptr %a586 call void @finch_str_concat(ptr %a584, ptr %a585, ptr %a586) store { ptr, i64, i64 } %t583, ptr %a587 call void @finch_str_drop(ptr %a587) %t588 = load { ptr, i64, i64 }, ptr %a584 %t589 = load ptr, ptr %a1 %t590 = load %S.ast.Type, ptr %a308 %t591 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t589, %S.ast.Type %t590) store { ptr, i64, i64 } %t588, ptr %a593 store { ptr, i64, i64 } %t591, ptr %a594 call void @finch_str_concat(ptr %a592, ptr %a593, ptr %a594) store { ptr, i64, i64 } %t588, ptr %a595 call void @finch_str_drop(ptr %a595) store { ptr, i64, i64 } %t591, ptr %a596 call void @finch_str_drop(ptr %a596) %t597 = load { ptr, i64, i64 }, ptr %a592 store { ptr, i64, i64 } %t597, ptr %a599 store { ptr, i64, i64 } { ptr @.str.5581, i64 1, i64 0 }, ptr %a600 call void @finch_str_concat(ptr %a598, ptr %a599, ptr %a600) store { ptr, i64, i64 } %t597, ptr %a601 call void @finch_str_drop(ptr %a601) %t602 = load { ptr, i64, i64 }, ptr %a598 %t603 = load { ptr, i64, i64 }, ptr %a553 store { ptr, i64, i64 } %t602, ptr %a605 store { ptr, i64, i64 } %t603, ptr %a606 call void @finch_str_concat(ptr %a604, ptr %a605, ptr %a606) store { ptr, i64, i64 } %t602, ptr %a607 call void @finch_str_drop(ptr %a607) %t608 = load { ptr, i64, i64 }, ptr %a604 store { ptr, i64, i64 } %t608, ptr %a610 store { ptr, i64, i64 } { ptr @.str.5582, i64 2, i64 0 }, ptr %a611 call void @finch_str_concat(ptr %a609, ptr %a610, ptr %a611) store { ptr, i64, i64 } %t608, ptr %a612 call void @finch_str_drop(ptr %a612) %t613 = load { ptr, i64, i64 }, ptr %a609 %t614 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 3 %t615 = load i64, ptr %a294 %t616 = load { ptr, i64, i64 }, ptr %t614 %t617 = extractvalue { ptr, i64, i64 } %t616, 1 %t618 = icmp uge i64 %t615, %t617 br i1 %t618, label %range8620, label %inrange8621 range8620: call void @finch_panic_index(ptr @.str.5583, i64 5208, i64 %t615, i64 %t617) unreachable inrange8621: %t619 = extractvalue { ptr, i64, i64 } %t616, 0 %t620 = getelementptr inbounds i64, ptr %t619, i64 %t615 %t621 = load i64, ptr %t620 call void @finch_str_from_int(ptr %a622, i64 %t621) %t623 = load { ptr, i64, i64 }, ptr %a622 store { ptr, i64, i64 } %t613, ptr %a625 store { ptr, i64, i64 } %t623, ptr %a626 call void @finch_str_concat(ptr %a624, ptr %a625, ptr %a626) store { ptr, i64, i64 } %t613, ptr %a627 call void @finch_str_drop(ptr %a627) store { ptr, i64, i64 } %t623, ptr %a628 call void @finch_str_drop(ptr %a628) %t629 = load { ptr, i64, i64 }, ptr %a624 %t630 = call { ptr, i64, i64 } @finch.gen.op(ptr %t567, { ptr, i64, i64 } %t629) store { ptr, i64, i64 } %t629, ptr %a631 call void @finch_str_drop(ptr %a631) %t632 = load { ptr, i64, i64 }, ptr %a284 store { ptr, i64, i64 } %t630, ptr %a284 store { ptr, i64, i64 } %t632, ptr %a633 call void @finch_str_drop(ptr %a633) call void @finch_str_drop(ptr %a553) call void @finch.drop.S_gen_Val(ptr %a309) call void @finch.drop.S_ast_Type(ptr %a308) br label %for.step8558 for.step8558: %t634 = load i64, ptr %a294 %t635 = add i64 %t634, 1 store i64 %t635, ptr %a294 br label %for.cond8556 for.end8559: %t636 = load ptr, ptr %a1 %t637 = load i64, ptr %a290 call void @finch.gen.heldEnd(ptr %t636, i64 %t637) %t638 = load { ptr, i64, i64 }, ptr %a284 store { ptr, i64, i64 } %t638, ptr %a639 call void @finch_str_copy(ptr %a640, ptr %a639) %t641 = load { ptr, i64, i64 }, ptr %a640 %t642 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t641, 0 %t643 = load %S.ast.Type, ptr %a61 store %S.ast.Type %t643, ptr %a644 call void @finch.copy.S_ast_Type(ptr %a645, ptr %a644) %t646 = load %S.ast.Type, ptr %a645 %t647 = insertvalue %S.gen.Val %t642, %S.ast.Type %t646, 1 %t648 = load ptr, ptr %a1 %t649 = load %S.ast.Type, ptr %a61 %t650 = call i1 @finch.gen.owning(ptr %t648, %S.ast.Type %t649) %t651 = insertvalue %S.gen.Val %t647, i1 %t650, 2 call void @finch_str_drop(ptr %a284) call void @finch.drop.arr_int(ptr %a79) call void @finch_str_drop(ptr %a65) call void @finch.drop.S_ast_Type(ptr %a61) call void @finch.drop.S_ast_Node(ptr %a20) call void @finch.drop.S_gen_StructDef(ptr %a19) ret %S.gen.Val %t651 } define internal void @finch.gen.noteMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca %S.docs.Doc, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic8622, label %ok8623 panic8622: call void @finch_panic(ptr @.str.5584, i64 5218, ptr @.str.5585) unreachable ok8623: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 %t7 = load i1, ptr %t6 %t8 = xor i1 %t7, true br i1 %t8, label %then8624, label %endif8626 then8624: ret void endif8626: %t9 = load { ptr, i64, i64 }, ptr %a3 %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t11 = load { ptr, i64, i64 }, ptr %t10 %t12 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t9, { ptr, i64, i64 } %t11) store %S.docs.Doc %t12, ptr %a13 %t14 = getelementptr inbounds %S.docs.Doc, ptr %a13, i32 0, i32 0 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = icmp sgt i64 %t16, 0 br i1 %t17, label %then8627, label %endif8629 then8627: %t18 = load ptr, ptr %a1 %t19 = load %S.ast.Node, ptr %a2 %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t21 = load i64, ptr %t20 %t22 = add i64 %t21, 1 %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i32 0, i32 1 %t25 = load i64, ptr %t24 %t26 = load %S.docs.Doc, ptr %a13 %t27 = call { ptr, i64, i64 } @finch.docs.hover(%S.docs.Doc %t26) call void @finch.gen.noteRef(ptr %t18, %S.ast.Node %t19, i64 %t22, i64 %t25, { ptr, i64, i64 } %t27, { ptr, i64, i64 } { ptr @.str.5586, i64 0, i64 0 }, i64 0, i64 0) store { ptr, i64, i64 } %t27, ptr %a28 call void @finch_str_drop(ptr %a28) br label %endif8629 endif8629: call void @finch.drop.S_docs_Doc(ptr %a13) ret void } define internal %S.gen.Val @finch.gen.method(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a10 = alloca %S.ast.Node, align 16 %a11 = alloca %S.ast.Node, align 16 %a13 = alloca %S.ast.Node, align 16 %a17 = alloca i64, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca i64, align 16 %a36 = alloca %S.ast.Node, align 16 %a37 = alloca %S.ast.Node, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca i64, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca i64, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca i64, align 16 %a165 = alloca i64, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca i64, align 16 %a184 = alloca %S.ast.Node, align 16 %a185 = alloca %S.ast.Node, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca i64, align 16 %a247 = alloca i64, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca %S.gen.Ref, align 16 %a266 = alloca i64, align 16 %a270 = alloca %S.ast.Type, align 16 %a271 = alloca %S.ast.Type, align 16 %a273 = alloca %S.ast.Type, align 16 %a279 = alloca %S.ast.Type, align 16 %a280 = alloca %S.ast.Type, align 16 %a283 = alloca %S.ast.Type, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca i64, align 16 %a307 = alloca i64, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca %S.gen.Val, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca %S.gen.Val, align 16 %a372 = alloca %S.gen.Val, align 16 %a374 = alloca %S.gen.Val, align 16 %a384 = alloca %S.ast.Type, align 16 %a385 = alloca %S.ast.Type, align 16 %a389 = alloca %S.gen.Val, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca { ptr, i64, i64 }, align 16 %a406 = alloca %S.gen.Val, align 16 %a417 = alloca { ptr, i64, i64 }, align 16 %a418 = alloca { ptr, i64, i64 }, align 16 %a421 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a435 = alloca i64, align 16 %a438 = alloca i64, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a444 = alloca { ptr, i64, i64 }, align 16 %a454 = alloca { ptr, i64, i64 }, align 16 %a455 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a458 = alloca { ptr, i64, i64 }, align 16 %a464 = alloca { ptr, i64, i64 }, align 16 %a474 = alloca { ptr, i64, i64 }, align 16 %a480 = alloca %S.gen.Val, align 16 %a497 = alloca %S.ast.Type, align 16 %a498 = alloca %S.ast.Type, align 16 %a500 = alloca %S.ast.Type, align 16 %a501 = alloca { ptr, i64, i64 }, align 16 %a502 = alloca i1, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca { ptr, i64, i64 }, align 16 %a523 = alloca { ptr, i64, i64 }, align 16 %a530 = alloca { ptr, i64, i64 }, align 16 %a531 = alloca { ptr, i64, i64 }, align 16 %a533 = alloca { ptr, i64, i64 }, align 16 %a542 = alloca { ptr, i64, i64 }, align 16 %a546 = alloca { ptr, i64, i64 }, align 16 %a547 = alloca { ptr, i64, i64 }, align 16 %a548 = alloca { ptr, i64, i64 }, align 16 %a550 = alloca { ptr, i64, i64 }, align 16 %a551 = alloca { ptr, i64, i64 }, align 16 %a552 = alloca { ptr, i64, i64 }, align 16 %a553 = alloca { ptr, i64, i64 }, align 16 %a556 = alloca { ptr, i64, i64 }, align 16 %a559 = alloca { ptr, i64, i64 }, align 16 %a560 = alloca { ptr, i64, i64 }, align 16 %a561 = alloca { ptr, i64, i64 }, align 16 %a563 = alloca { ptr, i64, i64 }, align 16 %a564 = alloca { ptr, i64, i64 }, align 16 %a565 = alloca { ptr, i64, i64 }, align 16 %a566 = alloca { ptr, i64, i64 }, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a570 = alloca { ptr, i64, i64 }, align 16 %a578 = alloca %S.ast.Type, align 16 %a579 = alloca %S.ast.Type, align 16 %a582 = alloca %S.ast.Type, align 16 %a584 = alloca { ptr, i64, i64 }, align 16 %a585 = alloca { ptr, i64, i64 }, align 16 %a588 = alloca { ptr, i64, i64 }, align 16 %a591 = alloca { ptr, i64, i64 }, align 16 %a592 = alloca { ptr, i64, i64 }, align 16 %a597 = alloca { ptr, i64, i64 }, align 16 %a598 = alloca { ptr, i64, i64 }, align 16 %a607 = alloca { ptr, i64, i64 }, align 16 %a608 = alloca { ptr, i64, i64 }, align 16 %a611 = alloca { ptr, i64, i64 }, align 16 %a617 = alloca { ptr, i64, i64 }, align 16 %a620 = alloca { ptr, i64, i64 }, align 16 %a621 = alloca { ptr, i64, i64 }, align 16 %a626 = alloca { ptr, i64, i64 }, align 16 %a627 = alloca { ptr, i64, i64 }, align 16 %a639 = alloca i64, align 16 %a644 = alloca { ptr, i64, i64 }, align 16 %a645 = alloca { ptr, i64, i64 }, align 16 %a655 = alloca i64, align 16 %a686 = alloca i64, align 16 %a707 = alloca { ptr, i64, i64 }, align 16 %a711 = alloca i64, align 16 %a719 = alloca %S.gen.FnSig, align 16 %a724 = alloca { ptr, i64, i64 }, align 16 %a725 = alloca { ptr, i64, i64 }, align 16 %a732 = alloca { ptr, i64, i64 }, align 16 %a733 = alloca { ptr, i64, i64 }, align 16 %a740 = alloca { ptr, i64, i64 }, align 16 %a741 = alloca { ptr, i64, i64 }, align 16 %a756 = alloca { ptr, i64, i64 }, align 16 %a757 = alloca { ptr, i64, i64 }, align 16 %a758 = alloca { ptr, i64, i64 }, align 16 %a760 = alloca { ptr, i64, i64 }, align 16 %a761 = alloca { ptr, i64, i64 }, align 16 %a762 = alloca { ptr, i64, i64 }, align 16 %a763 = alloca { ptr, i64, i64 }, align 16 %a767 = alloca { ptr, i64, i64 }, align 16 %a768 = alloca { ptr, i64, i64 }, align 16 %a769 = alloca { ptr, i64, i64 }, align 16 %a770 = alloca { ptr, i64, i64 }, align 16 %a771 = alloca { ptr, i64, i64 }, align 16 %a773 = alloca { ptr, i64, i64 }, align 16 %a774 = alloca { ptr, i64, i64 }, align 16 %a775 = alloca { ptr, i64, i64 }, align 16 %a776 = alloca { ptr, i64, i64 }, align 16 %a780 = alloca { ptr, i64, i64 }, align 16 %a781 = alloca { ptr, i64, i64 }, align 16 %a782 = alloca { ptr, i64, i64 }, align 16 %a783 = alloca { ptr, i64, i64 }, align 16 %a785 = alloca { ptr, i64, i64 }, align 16 %a786 = alloca { ptr, i64, i64 }, align 16 %a787 = alloca { ptr, i64, i64 }, align 16 %a788 = alloca { ptr, i64, i64 }, align 16 %a792 = alloca { ptr, i64, i64 }, align 16 %a793 = alloca { ptr, i64, i64 }, align 16 %a794 = alloca { ptr, i64, i64 }, align 16 %a795 = alloca { ptr, i64, i64 }, align 16 %a797 = alloca { ptr, i64, i64 }, align 16 %a798 = alloca { ptr, i64, i64 }, align 16 %a799 = alloca { ptr, i64, i64 }, align 16 %a800 = alloca { ptr, i64, i64 }, align 16 %a802 = alloca { ptr, i64, i64 }, align 16 %a807 = alloca { ptr, i64, i64 }, align 16 %a808 = alloca { ptr, i64, i64 }, align 16 %a809 = alloca { ptr, i64, i64 }, align 16 %a811 = alloca { ptr, i64, i64 }, align 16 %a812 = alloca { ptr, i64, i64 }, align 16 %a813 = alloca { ptr, i64, i64 }, align 16 %a814 = alloca { ptr, i64, i64 }, align 16 %a818 = alloca { ptr, i64, i64 }, align 16 %a819 = alloca { ptr, i64, i64 }, align 16 %a820 = alloca { ptr, i64, i64 }, align 16 %a821 = alloca { ptr, i64, i64 }, align 16 %a822 = alloca { ptr, i64, i64 }, align 16 %a824 = alloca { ptr, i64, i64 }, align 16 %a825 = alloca { ptr, i64, i64 }, align 16 %a826 = alloca { ptr, i64, i64 }, align 16 %a827 = alloca { ptr, i64, i64 }, align 16 %a831 = alloca { ptr, i64, i64 }, align 16 %a832 = alloca { ptr, i64, i64 }, align 16 %a833 = alloca { ptr, i64, i64 }, align 16 %a834 = alloca { ptr, i64, i64 }, align 16 %a836 = alloca { ptr, i64, i64 }, align 16 %a837 = alloca { ptr, i64, i64 }, align 16 %a838 = alloca { ptr, i64, i64 }, align 16 %a839 = alloca { ptr, i64, i64 }, align 16 %a842 = alloca { ptr, i64, i64 }, align 16 %a843 = alloca { ptr, i64, i64 }, align 16 %a845 = alloca { ptr, i64, i64 }, align 16 %a846 = alloca { ptr, i64, i64 }, align 16 %a847 = alloca { ptr, i64, i64 }, align 16 %a848 = alloca { ptr, i64, i64 }, align 16 %a849 = alloca { ptr, i64, i64 }, align 16 %a851 = alloca { ptr, i64, i64 }, align 16 %a852 = alloca { ptr, i64, i64 }, align 16 %a853 = alloca { ptr, i64, i64 }, align 16 %a854 = alloca { ptr, i64, i64 }, align 16 %a856 = alloca { ptr, i64, i64 }, align 16 %a870 = alloca { ptr, i64, i64 }, align 16 %a871 = alloca { ptr, i64, i64 }, align 16 %a876 = alloca { ptr, i64, i64 }, align 16 %a877 = alloca { ptr, i64, i64 }, align 16 %a889 = alloca { ptr, i64, i64 }, align 16 %a890 = alloca { ptr, i64, i64 }, align 16 %a891 = alloca { ptr, i64, i64 }, align 16 %a895 = alloca { ptr, i64, i64 }, align 16 %a896 = alloca { ptr, i64, i64 }, align 16 %a897 = alloca { ptr, i64, i64 }, align 16 %a898 = alloca { ptr, i64, i64 }, align 16 %a899 = alloca { ptr, i64, i64 }, align 16 %a901 = alloca { ptr, i64, i64 }, align 16 %a902 = alloca { ptr, i64, i64 }, align 16 %a903 = alloca { ptr, i64, i64 }, align 16 %a904 = alloca { ptr, i64, i64 }, align 16 %a906 = alloca { ptr, i64, i64 }, align 16 %a909 = alloca { ptr, i64, i64 }, align 16 %a916 = alloca i64, align 16 %a923 = alloca %S.gen.Var, align 16 %a928 = alloca { ptr, i64, i64 }, align 16 %a929 = alloca { ptr, i64, i64 }, align 16 %a930 = alloca { ptr, i64, i64 }, align 16 %a932 = alloca { ptr, i64, i64 }, align 16 %a933 = alloca { ptr, i64, i64 }, align 16 %a934 = alloca { ptr, i64, i64 }, align 16 %a935 = alloca { ptr, i64, i64 }, align 16 %a937 = alloca { ptr, i64, i64 }, align 16 %a951 = alloca { ptr, i64, i64 }, align 16 %a952 = alloca { ptr, i64, i64 }, align 16 %a953 = alloca { ptr, i64, i64 }, align 16 %a954 = alloca { ptr, i64, i64 }, align 16 %a958 = alloca { ptr, i64, i64 }, align 16 %a959 = alloca { ptr, i64, i64 }, align 16 %a960 = alloca { ptr, i64, i64 }, align 16 %a961 = alloca { ptr, i64, i64 }, align 16 %a967 = alloca { ptr, i64, i64 }, align 16 %a968 = alloca { ptr, i64, i64 }, align 16 %a969 = alloca %S.gen.Val, align 16 %a989 = alloca { ptr, i64, i64 }, align 16 %a990 = alloca { ptr, i64, i64 }, align 16 %a991 = alloca { ptr, i64, i64 }, align 16 %a992 = alloca { ptr, i64, i64 }, align 16 %a994 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t4 = load { ptr, i64, i64 }, ptr %t3 %t5 = extractvalue { ptr, i64, i64 } %t4, 1 %t6 = icmp uge i64 0, %t5 br i1 %t6, label %range8630, label %inrange8631 range8630: call void @finch_panic_index(ptr @.str.5587, i64 5228, i64 0, i64 %t5) unreachable inrange8631: %t7 = extractvalue { ptr, i64, i64 } %t4, 0 %t8 = getelementptr inbounds %S.ast.Node, ptr %t7, i64 0 %t9 = load %S.ast.Node, ptr %t8 store %S.ast.Node %t9, ptr %a10 call void @finch.copy.S_ast_Node(ptr %a11, ptr %a10) %t12 = load %S.ast.Node, ptr %a11 store %S.ast.Node %t12, ptr %a13 %t14 = load ptr, ptr %a1 %t15 = load %S.ast.Node, ptr %a13 %t16 = call i64 @finch.gen.sumNamed(ptr %t14, %S.ast.Node %t15) store i64 %t16, ptr %a17 %t18 = load i64, ptr %a17 %t19 = icmp sge i64 %t18, 0 br i1 %t19, label %then8632, label %endif8634 then8632: store { ptr, i64, i64 } zeroinitializer, ptr %a20 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 %t23 = load i64, ptr %t22 store i64 1, ptr %a24 br label %for.cond8635 for.cond8635: %t25 = load i64, ptr %a24 %t26 = icmp slt i64 %t25, %t23 br i1 %t26, label %for.body8636, label %for.end8638 for.body8636: %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 %t28 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t29 = load i64, ptr %a24 %t30 = load { ptr, i64, i64 }, ptr %t28 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 %t29, %t31 br i1 %t32, label %range8639, label %inrange8640 range8639: call void @finch_panic_index(ptr @.str.5588, i64 5233, i64 %t29, i64 %t31) unreachable inrange8640: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 %t29 %t35 = load %S.ast.Node, ptr %t34 store %S.ast.Node %t35, ptr %a36 call void @finch.copy.S_ast_Node(ptr %a37, ptr %a36) %t38 = load %S.ast.Node, ptr %a37 %t39 = load i64, ptr %t27 %t40 = add i64 %t39, 1 call void @finch_arr_reserve(ptr %a20, i64 %t40, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t41 = load ptr, ptr %a20 %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 %t39 store %S.ast.Node %t38, ptr %t42 store i64 %t40, ptr %t27 br label %for.step8637 for.step8637: %t43 = load i64, ptr %a24 %t44 = add i64 %t43, 1 store i64 %t44, ptr %a24 br label %for.cond8635 for.end8638: %t45 = load ptr, ptr %a1 %t46 = load i64, ptr %a17 %t47 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t48 = load { ptr, i64, i64 }, ptr %t47 %t49 = load { ptr, i64, i64 }, ptr %a20 %t50 = load %S.ast.Node, ptr %a2 %t51 = call %S.gen.Val @finch.gen.sumMake(ptr %t45, i64 %t46, { ptr, i64, i64 } %t48, { ptr, i64, i64 } %t49, %S.ast.Node %t50) call void @finch.drop.arr_S_ast_Node(ptr %a20) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t51 endif8634: %t52 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 %t53 = load { ptr, i64, i64 }, ptr %t52 store { ptr, i64, i64 } %t53, ptr %a54 store { ptr, i64, i64 } { ptr @.str.5589, i64 3, i64 0 }, ptr %a55 %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) %t57 = icmp ne i32 %t56, 0 br label %logic.from8641 logic.from8641: br i1 %t57, label %logic.rhs8642, label %logic.end8643 logic.rhs8642: %t58 = load ptr, ptr %a1 %t59 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 1 %t60 = load { ptr, i64, i64 }, ptr %t59 %t61 = call i64 @finch.gen.lookup(ptr %t58, { ptr, i64, i64 } %t60) %t62 = icmp slt i64 %t61, 0 br label %logic.rend8644 logic.rend8644: br label %logic.end8643 logic.end8643: %t63 = phi i1 [ false, %logic.from8641 ], [ %t62, %logic.rend8644 ] br i1 %t63, label %then8645, label %endif8647 then8645: %t64 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 1 %t65 = load { ptr, i64, i64 }, ptr %t64 store { ptr, i64, i64 } %t65, ptr %a66 call void @finch_str_copy(ptr %a67, ptr %a66) %t68 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t68, ptr %a69 %t70 = load ptr, ptr %a1 %t71 = load { ptr, i64, i64 }, ptr %a69 %t72 = call i1 @finch.gen.imports(ptr %t70, { ptr, i64, i64 } %t71) %t73 = xor i1 %t72, true br i1 %t73, label %then8648, label %endif8650 then8648: %t74 = load ptr, ptr %a1 %t75 = load %S.ast.Node, ptr %a13 %t76 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } { ptr @.str.5590, i64 38, i64 0 }, ptr %a78 store { ptr, i64, i64 } %t76, ptr %a79 call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) %t80 = load { ptr, i64, i64 }, ptr %a77 store { ptr, i64, i64 } %t80, ptr %a82 store { ptr, i64, i64 } { ptr @.str.5591, i64 32, i64 0 }, ptr %a83 call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) store { ptr, i64, i64 } %t80, ptr %a84 call void @finch_str_drop(ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a81 %t86 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t85, ptr %a88 store { ptr, i64, i64 } %t86, ptr %a89 call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) store { ptr, i64, i64 } %t85, ptr %a90 call void @finch_str_drop(ptr %a90) %t91 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t91, ptr %a93 store { ptr, i64, i64 } { ptr @.str.5592, i64 13, i64 0 }, ptr %a94 call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) store { ptr, i64, i64 } %t91, ptr %a95 call void @finch_str_drop(ptr %a95) %t96 = load { ptr, i64, i64 }, ptr %a92 call void @finch.gen.fail(ptr %t74, %S.ast.Node %t75, { ptr, i64, i64 } %t96) store { ptr, i64, i64 } %t96, ptr %a97 call void @finch_str_drop(ptr %a97) br label %endif8650 endif8650: %t98 = load ptr, ptr %a1 %t99 = load { ptr, i64, i64 }, ptr %a69 %t100 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t101 = load { ptr, i64, i64 }, ptr %t100 %t102 = call i64 @finch.gen.findFn(ptr %t98, { ptr, i64, i64 } %t99, { ptr, i64, i64 } %t101) store i64 %t102, ptr %a103 %t104 = load i64, ptr %a103 %t105 = icmp sge i64 %t104, 0 br i1 %t105, label %then8651, label %endif8653 then8651: %t106 = load ptr, ptr %a1 %t107 = load i64, ptr %a103 %t108 = load %S.ast.Node, ptr %a2 %t109 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t109, ptr %a111 store { ptr, i64, i64 } { ptr @.str.5593, i64 1, i64 0 }, ptr %a112 call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) %t113 = load { ptr, i64, i64 }, ptr %a110 %t114 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t115 = load { ptr, i64, i64 }, ptr %t114 store { ptr, i64, i64 } %t113, ptr %a117 store { ptr, i64, i64 } %t115, ptr %a118 call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) store { ptr, i64, i64 } %t113, ptr %a119 call void @finch_str_drop(ptr %a119) %t120 = load { ptr, i64, i64 }, ptr %a116 %t121 = call %S.gen.Val @finch.gen.callFn(ptr %t106, i64 %t107, %S.ast.Node %t108, i64 1, { ptr, i64, i64 } %t120, { ptr, i64, i64 } { ptr @.str.5594, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.5595, i64 0, i64 0 }) store { ptr, i64, i64 } %t120, ptr %a122 call void @finch_str_drop(ptr %a122) call void @finch_str_drop(ptr %a69) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t121 endif8653: %t123 = load ptr, ptr %a1 %t124 = load { ptr, i64, i64 }, ptr %a69 %t125 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t126 = load { ptr, i64, i64 }, ptr %t125 %t127 = call i64 @finch.gen.findTemplate(ptr %t123, { ptr, i64, i64 } %t124, { ptr, i64, i64 } %t126, { ptr, i64, i64 } { ptr @.str.5596, i64 0, i64 0 }, i1 false) store i64 %t127, ptr %a128 %t129 = load i64, ptr %a128 %t130 = icmp sge i64 %t129, 0 br i1 %t130, label %then8654, label %endif8656 then8654: %t131 = load ptr, ptr %a1 %t132 = load %S.ast.Node, ptr %a2 %t133 = load i64, ptr %a128 %t134 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t134, ptr %a136 store { ptr, i64, i64 } { ptr @.str.5597, i64 1, i64 0 }, ptr %a137 call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) %t138 = load { ptr, i64, i64 }, ptr %a135 %t139 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t140 = load { ptr, i64, i64 }, ptr %t139 store { ptr, i64, i64 } %t138, ptr %a142 store { ptr, i64, i64 } %t140, ptr %a143 call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143) store { ptr, i64, i64 } %t138, ptr %a144 call void @finch_str_drop(ptr %a144) %t145 = load { ptr, i64, i64 }, ptr %a141 %t146 = call %S.gen.Val @finch.gen.genericCall(ptr %t131, %S.ast.Node %t132, i64 %t133, i64 1, { ptr, i64, i64 } %t145) store { ptr, i64, i64 } %t145, ptr %a147 call void @finch_str_drop(ptr %a147) call void @finch_str_drop(ptr %a69) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t146 endif8656: %t148 = load ptr, ptr %a1 %t149 = load { ptr, i64, i64 }, ptr %a69 %t150 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t151 = load { ptr, i64, i64 }, ptr %t150 %t152 = call i64 @finch.gen.findEnum(ptr %t148, { ptr, i64, i64 } %t149, { ptr, i64, i64 } %t151) store i64 %t152, ptr %a153 %t154 = load i64, ptr %a153 %t155 = icmp sge i64 %t154, 0 br i1 %t155, label %then8657, label %endif8659 then8657: %t156 = load ptr, ptr %a1 %t157 = load %S.ast.Node, ptr %a2 %t158 = load i64, ptr %a153 %t159 = call %S.gen.Val @finch.gen.enumFrom(ptr %t156, %S.ast.Node %t157, i64 %t158) call void @finch_str_drop(ptr %a69) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t159 endif8659: %t160 = load ptr, ptr %a1 %t161 = load { ptr, i64, i64 }, ptr %a69 %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t163 = load { ptr, i64, i64 }, ptr %t162 %t164 = call i64 @finch.gen.findStruct(ptr %t160, { ptr, i64, i64 } %t161, { ptr, i64, i64 } %t163) store i64 %t164, ptr %a165 %t166 = load i64, ptr %a165 %t167 = icmp sge i64 %t166, 0 br i1 %t167, label %then8660, label %endif8662 then8660: store { ptr, i64, i64 } zeroinitializer, ptr %a168 %t169 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %t169, i32 0, i32 1 %t171 = load i64, ptr %t170 store i64 1, ptr %a172 br label %for.cond8663 for.cond8663: %t173 = load i64, ptr %a172 %t174 = icmp slt i64 %t173, %t171 br i1 %t174, label %for.body8664, label %for.end8666 for.body8664: %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %a168, i32 0, i32 1 %t176 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t177 = load i64, ptr %a172 %t178 = load { ptr, i64, i64 }, ptr %t176 %t179 = extractvalue { ptr, i64, i64 } %t178, 1 %t180 = icmp uge i64 %t177, %t179 br i1 %t180, label %range8667, label %inrange8668 range8667: call void @finch_panic_index(ptr @.str.5598, i64 5258, i64 %t177, i64 %t179) unreachable inrange8668: %t181 = extractvalue { ptr, i64, i64 } %t178, 0 %t182 = getelementptr inbounds %S.ast.Node, ptr %t181, i64 %t177 %t183 = load %S.ast.Node, ptr %t182 store %S.ast.Node %t183, ptr %a184 call void @finch.copy.S_ast_Node(ptr %a185, ptr %a184) %t186 = load %S.ast.Node, ptr %a185 %t187 = load i64, ptr %t175 %t188 = add i64 %t187, 1 call void @finch_arr_reserve(ptr %a168, i64 %t188, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t189 = load ptr, ptr %a168 %t190 = getelementptr inbounds %S.ast.Node, ptr %t189, i64 %t187 store %S.ast.Node %t186, ptr %t190 store i64 %t188, ptr %t175 br label %for.step8665 for.step8665: %t191 = load i64, ptr %a172 %t192 = add i64 %t191, 1 store i64 %t192, ptr %a172 br label %for.cond8663 for.end8666: %t193 = load ptr, ptr %a1 %t194 = load i64, ptr %a165 %t195 = load { ptr, i64, i64 }, ptr %a168 %t196 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 %t197 = load { ptr, i64, i64 }, ptr %t196 %t198 = load %S.ast.Node, ptr %a2 %t199 = call %S.gen.Val @finch.gen.construct(ptr %t193, i64 %t194, { ptr, i64, i64 } %t195, { ptr, i64, i64 } %t197, %S.ast.Node %t198) call void @finch.drop.arr_S_ast_Node(ptr %a168) call void @finch_str_drop(ptr %a69) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t199 endif8662: %t200 = load ptr, ptr %a1 %t201 = load %S.ast.Node, ptr %a2 %t202 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } { ptr @.str.5599, i64 12, i64 0 }, ptr %a204 store { ptr, i64, i64 } %t202, ptr %a205 call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) %t206 = load { ptr, i64, i64 }, ptr %a203 store { ptr, i64, i64 } %t206, ptr %a208 store { ptr, i64, i64 } { ptr @.str.5600, i64 35, i64 0 }, ptr %a209 call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) store { ptr, i64, i64 } %t206, ptr %a210 call void @finch_str_drop(ptr %a210) %t211 = load { ptr, i64, i64 }, ptr %a207 %t212 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t213 = load { ptr, i64, i64 }, ptr %t212 store { ptr, i64, i64 } %t211, ptr %a215 store { ptr, i64, i64 } %t213, ptr %a216 call void @finch_str_concat(ptr %a214, ptr %a215, ptr %a216) store { ptr, i64, i64 } %t211, ptr %a217 call void @finch_str_drop(ptr %a217) %t218 = load { ptr, i64, i64 }, ptr %a214 store { ptr, i64, i64 } %t218, ptr %a220 store { ptr, i64, i64 } { ptr @.str.5601, i64 1, i64 0 }, ptr %a221 call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) store { ptr, i64, i64 } %t218, ptr %a222 call void @finch_str_drop(ptr %a222) %t223 = load { ptr, i64, i64 }, ptr %a219 call void @finch.gen.fail(ptr %t200, %S.ast.Node %t201, { ptr, i64, i64 } %t223) store { ptr, i64, i64 } %t223, ptr %a224 call void @finch_str_drop(ptr %a224) call void @finch_str_drop(ptr %a69) br label %endif8647 endif8647: %t225 = mul i64 8, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t226 = call ptr @finch_alloc(i64 %t225) %t227 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 0 store { ptr, i64, i64 } { ptr @.str.5602, i64 4, i64 0 }, ptr %t227 %t228 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 1 store { ptr, i64, i64 } { ptr @.str.5603, i64 3, i64 0 }, ptr %t228 %t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 2 store { ptr, i64, i64 } { ptr @.str.5604, i64 6, i64 0 }, ptr %t229 %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 3 store { ptr, i64, i64 } { ptr @.str.5605, i64 6, i64 0 }, ptr %t230 %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 4 store { ptr, i64, i64 } { ptr @.str.5606, i64 5, i64 0 }, ptr %t231 %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 5 store { ptr, i64, i64 } { ptr @.str.5607, i64 6, i64 0 }, ptr %t232 %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 6 store { ptr, i64, i64 } { ptr @.str.5608, i64 4, i64 0 }, ptr %t233 %t234 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 7 store { ptr, i64, i64 } { ptr @.str.5609, i64 7, i64 0 }, ptr %t234 %t235 = insertvalue { ptr, i64, i64 } undef, ptr %t226, 0 %t236 = insertvalue { ptr, i64, i64 } %t235, i64 8, 1 %t237 = insertvalue { ptr, i64, i64 } %t236, i64 8, 2 store { ptr, i64, i64 } %t237, ptr %a238 %t239 = load ptr, ptr %a1 %t240 = load %S.ast.Node, ptr %a13 %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %a238, i32 0, i32 1 %t242 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t243 = load { ptr, i64, i64 }, ptr %t242 store i64 -1, ptr %a244 %t245 = load i64, ptr %t241 %t246 = load ptr, ptr %a238 store i64 0, ptr %a247 br label %find.cond8669 find.cond8669: %t248 = load i64, ptr %a247 %t249 = icmp slt i64 %t248, %t245 br i1 %t249, label %find.body8670, label %find.end8673 find.body8670: %t250 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i64 %t248 %t251 = load { ptr, i64, i64 }, ptr %t250 store { ptr, i64, i64 } %t251, ptr %a252 store { ptr, i64, i64 } %t243, ptr %a253 %t254 = call i32 @finch_str_eq(ptr %a252, ptr %a253) %t255 = icmp ne i32 %t254, 0 br i1 %t255, label %find.hit8671, label %find.next8672 find.hit8671: store i64 %t248, ptr %a244 br label %find.end8673 find.next8672: %t256 = add i64 %t248, 1 store i64 %t256, ptr %a247 br label %find.cond8669 find.end8673: %t257 = load i64, ptr %a244 %t258 = icmp sge i64 %t257, 0 %t259 = call %S.gen.Ref @finch.gen.ref(ptr %t239, %S.ast.Node %t240, i1 %t258) store %S.gen.Ref %t259, ptr %a260 %t261 = load ptr, ptr %a1 %t262 = icmp eq ptr %t261, null br i1 %t262, label %panic8674, label %ok8675 panic8674: call void @finch_panic(ptr @.str.5610, i64 5266, ptr @.str.5611) unreachable ok8675: %t263 = getelementptr inbounds %S.gen.Gen, ptr %t261, i32 0, i32 11 %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 %t265 = load i64, ptr %t264 store i64 %t265, ptr %a266 %t267 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t268 = getelementptr inbounds %S.gen.Val, ptr %t267, i32 0, i32 1 %t269 = load %S.ast.Type, ptr %t268 store %S.ast.Type %t269, ptr %a270 call void @finch.copy.S_ast_Type(ptr %a271, ptr %a270) %t272 = load %S.ast.Type, ptr %a271 store %S.ast.Type %t272, ptr %a273 %t274 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t275 = load i1, ptr %t274 br i1 %t275, label %then8676, label %endif8678 then8676: %t276 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t277 = getelementptr inbounds %S.gen.Place, ptr %t276, i32 0, i32 1 %t278 = load %S.ast.Type, ptr %t277 store %S.ast.Type %t278, ptr %a279 call void @finch.copy.S_ast_Type(ptr %a280, ptr %a279) %t281 = load %S.ast.Type, ptr %a280 %t282 = load %S.ast.Type, ptr %a273 store %S.ast.Type %t281, ptr %a273 store %S.ast.Type %t282, ptr %a283 call void @finch.drop.S_ast_Type(ptr %a283) br label %endif8678 endif8678: %t284 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t285 = load { ptr, i64, i64 }, ptr %t284 store { ptr, i64, i64 } %t285, ptr %a286 store { ptr, i64, i64 } { ptr @.str.5612, i64 5, i64 0 }, ptr %a287 %t288 = call i32 @finch_str_eq(ptr %a286, ptr %a287) %t289 = icmp ne i32 %t288, 0 br i1 %t289, label %then8679, label %endif8681 then8679: store { ptr, i64, i64 } { ptr @.str.5613, i64 0, i64 0 }, ptr %a290 %t291 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t292 = load i1, ptr %t291 br i1 %t292, label %then8682, label %else8683 then8682: %t293 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t294 = getelementptr inbounds %S.gen.Place, ptr %t293, i32 0, i32 0 %t295 = load { ptr, i64, i64 }, ptr %t294 store { ptr, i64, i64 } %t295, ptr %a296 call void @finch_str_copy(ptr %a297, ptr %a296) %t298 = load { ptr, i64, i64 }, ptr %a297 %t299 = load { ptr, i64, i64 }, ptr %a290 store { ptr, i64, i64 } %t298, ptr %a290 store { ptr, i64, i64 } %t299, ptr %a300 call void @finch_str_drop(ptr %a300) br label %endif8684 else8683: %t301 = getelementptr inbounds { ptr, i64, i64 }, ptr %a238, i32 0, i32 1 %t302 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t303 = load { ptr, i64, i64 }, ptr %t302 store i64 -1, ptr %a304 %t305 = load i64, ptr %t301 %t306 = load ptr, ptr %a238 store i64 0, ptr %a307 br label %find.cond8685 find.cond8685: %t308 = load i64, ptr %a307 %t309 = icmp slt i64 %t308, %t305 br i1 %t309, label %find.body8686, label %find.end8689 find.body8686: %t310 = getelementptr inbounds { ptr, i64, i64 }, ptr %t306, i64 %t308 %t311 = load { ptr, i64, i64 }, ptr %t310 store { ptr, i64, i64 } %t311, ptr %a312 store { ptr, i64, i64 } %t303, ptr %a313 %t314 = call i32 @finch_str_eq(ptr %a312, ptr %a313) %t315 = icmp ne i32 %t314, 0 br i1 %t315, label %find.hit8687, label %find.next8688 find.hit8687: store i64 %t308, ptr %a304 br label %find.end8689 find.next8688: %t316 = add i64 %t308, 1 store i64 %t316, ptr %a307 br label %find.cond8685 find.end8689: %t317 = load i64, ptr %a304 %t318 = icmp sge i64 %t317, 0 br i1 %t318, label %then8690, label %endif8692 then8690: %t319 = load ptr, ptr %a1 %t320 = load %S.ast.Node, ptr %a2 %t321 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t322 = load { ptr, i64, i64 }, ptr %t321 store { ptr, i64, i64 } %t322, ptr %a324 store { ptr, i64, i64 } { ptr @.str.5614, i64 63, i64 0 }, ptr %a325 call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325) %t326 = load { ptr, i64, i64 }, ptr %a323 call void @finch.gen.fail(ptr %t319, %S.ast.Node %t320, { ptr, i64, i64 } %t326) store { ptr, i64, i64 } %t326, ptr %a327 call void @finch_str_drop(ptr %a327) br label %endif8692 endif8692: %t328 = load ptr, ptr %a1 %t329 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t330 = load %S.gen.Val, ptr %t329 %t331 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t328, %S.gen.Val %t330) %t332 = load { ptr, i64, i64 }, ptr %a290 store { ptr, i64, i64 } %t331, ptr %a290 store { ptr, i64, i64 } %t332, ptr %a333 call void @finch_str_drop(ptr %a333) %t334 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t335 = getelementptr inbounds %S.gen.Val, ptr %t334, i32 0, i32 2 %t336 = load i1, ptr %t335 br i1 %t336, label %then8693, label %endif8695 then8693: %t337 = load ptr, ptr %a1 %t338 = load { ptr, i64, i64 }, ptr %a290 %t339 = load %S.ast.Type, ptr %a273 call void @finch.gen.holdAddr(ptr %t337, { ptr, i64, i64 } %t338, %S.ast.Type %t339) br label %endif8695 endif8695: br label %endif8684 endif8684: %t340 = load ptr, ptr %a1 %t341 = load %S.ast.Node, ptr %a2 %t342 = call { ptr, i64, i64 } @finch.docs.arrayMethods() call void @finch.gen.noteMethod(ptr %t340, %S.ast.Node %t341, { ptr, i64, i64 } %t342) store { ptr, i64, i64 } %t342, ptr %a343 call void @finch.drop.arr_S_docs_Doc(ptr %a343) %t344 = load ptr, ptr %a1 %t345 = load %S.ast.Node, ptr %a2 %t346 = load { ptr, i64, i64 }, ptr %a290 %t347 = load %S.ast.Type, ptr %a273 %t348 = call %S.gen.Val @finch.gen.arrayMethod(ptr %t344, %S.ast.Node %t345, { ptr, i64, i64 } %t346, %S.ast.Type %t347) store %S.gen.Val %t348, ptr %a349 %t350 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t351 = load i1, ptr %t350 %t352 = xor i1 %t351, true br label %logic.from8696 logic.from8696: br i1 %t352, label %logic.rhs8697, label %logic.end8698 logic.rhs8697: %t353 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t354 = getelementptr inbounds %S.gen.Val, ptr %t353, i32 0, i32 2 %t355 = load i1, ptr %t354 br label %logic.rend8699 logic.rend8699: br label %logic.end8698 logic.end8698: %t356 = phi i1 [ false, %logic.from8696 ], [ %t355, %logic.rend8699 ] br i1 %t356, label %then8700, label %endif8702 then8700: %t357 = load ptr, ptr %a1 %t358 = load { ptr, i64, i64 }, ptr %a290 %t359 = load %S.ast.Type, ptr %a273 call void @finch.gen.dropAt(ptr %t357, { ptr, i64, i64 } %t358, %S.ast.Type %t359) br label %endif8702 endif8702: %t360 = load ptr, ptr %a1 %t361 = load i64, ptr %a266 call void @finch.gen.heldEnd(ptr %t360, i64 %t361) %t362 = load %S.gen.Val, ptr %a349 call void @finch_str_drop(ptr %a290) call void @finch.drop.S_ast_Type(ptr %a273) call void @finch.drop.S_gen_Ref(ptr %a260) call void @finch.drop.arr_str(ptr %a238) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t362 endif8681: %t363 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t364 = load { ptr, i64, i64 }, ptr %t363 store { ptr, i64, i64 } %t364, ptr %a365 store { ptr, i64, i64 } { ptr @.str.5615, i64 3, i64 0 }, ptr %a366 %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) %t368 = icmp ne i32 %t367, 0 br i1 %t368, label %then8703, label %endif8705 then8703: %t369 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t370 = load %S.gen.Val, ptr %t369 store %S.gen.Val %t370, ptr %a371 call void @finch.copy.S_gen_Val(ptr %a372, ptr %a371) %t373 = load %S.gen.Val, ptr %a372 store %S.gen.Val %t373, ptr %a374 %t375 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t376 = load i1, ptr %t375 br i1 %t376, label %then8706, label %endif8708 then8706: %t377 = load ptr, ptr %a1 %t378 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t379 = getelementptr inbounds %S.gen.Place, ptr %t378, i32 0, i32 0 %t380 = load { ptr, i64, i64 }, ptr %t379 %t381 = call { ptr, i64, i64 } @finch.gen.load(ptr %t377, { ptr, i64, i64 } { ptr @.str.5616, i64 17, i64 0 }, { ptr, i64, i64 } %t380) %t382 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t381, 0 %t383 = load %S.ast.Type, ptr %a273 store %S.ast.Type %t383, ptr %a384 call void @finch.copy.S_ast_Type(ptr %a385, ptr %a384) %t386 = load %S.ast.Type, ptr %a385 %t387 = insertvalue %S.gen.Val %t382, %S.ast.Type %t386, 1 %t388 = load %S.gen.Val, ptr %a374 store %S.gen.Val %t387, ptr %a374 store %S.gen.Val %t388, ptr %a389 call void @finch.drop.S_gen_Val(ptr %a389) br label %endif8708 endif8708: %t390 = load ptr, ptr %a1 %t391 = load %S.ast.Node, ptr %a2 %t392 = call { ptr, i64, i64 } @finch.docs.strMethods() call void @finch.gen.noteMethod(ptr %t390, %S.ast.Node %t391, { ptr, i64, i64 } %t392) store { ptr, i64, i64 } %t392, ptr %a393 call void @finch.drop.arr_S_docs_Doc(ptr %a393) %t394 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t395 = load i1, ptr %t394 %t396 = xor i1 %t395, true br i1 %t396, label %then8709, label %endif8711 then8709: %t397 = load ptr, ptr %a1 %t398 = load %S.gen.Val, ptr %a374 call void @finch.gen.hold(ptr %t397, %S.gen.Val %t398) br label %endif8711 endif8711: %t399 = load ptr, ptr %a1 %t400 = load %S.ast.Node, ptr %a2 %t401 = load ptr, ptr %a1 %t402 = load %S.gen.Val, ptr %a374 %t403 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t401, %S.gen.Val %t402) %t404 = call %S.gen.Val @finch.gen.strMethod(ptr %t399, %S.ast.Node %t400, { ptr, i64, i64 } %t403) store { ptr, i64, i64 } %t403, ptr %a405 call void @finch_str_drop(ptr %a405) store %S.gen.Val %t404, ptr %a406 %t407 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t408 = load i1, ptr %t407 %t409 = xor i1 %t408, true br i1 %t409, label %then8712, label %endif8714 then8712: %t410 = load ptr, ptr %a1 %t411 = load %S.gen.Val, ptr %a374 call void @finch.gen.release(ptr %t410, %S.gen.Val %t411) br label %endif8714 endif8714: %t412 = load ptr, ptr %a1 %t413 = load i64, ptr %a266 call void @finch.gen.heldEnd(ptr %t412, i64 %t413) %t414 = load %S.gen.Val, ptr %a406 call void @finch.drop.S_gen_Val(ptr %a374) call void @finch.drop.S_ast_Type(ptr %a273) call void @finch.drop.S_gen_Ref(ptr %a260) call void @finch.drop.arr_str(ptr %a238) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t414 endif8705: %t415 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t416 = load { ptr, i64, i64 }, ptr %t415 store { ptr, i64, i64 } %t416, ptr %a417 store { ptr, i64, i64 } { ptr @.str.5617, i64 3, i64 0 }, ptr %a418 %t419 = call i32 @finch_str_eq(ptr %a417, ptr %a418) %t420 = icmp ne i32 %t419, 0 br i1 %t420, label %then8715, label %endif8717 then8715: store { ptr, i64, i64 } { ptr @.str.5618, i64 0, i64 0 }, ptr %a421 %t422 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t423 = load i1, ptr %t422 br i1 %t423, label %then8718, label %else8719 then8718: %t424 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t425 = getelementptr inbounds %S.gen.Place, ptr %t424, i32 0, i32 0 %t426 = load { ptr, i64, i64 }, ptr %t425 store { ptr, i64, i64 } %t426, ptr %a427 call void @finch_str_copy(ptr %a428, ptr %a427) %t429 = load { ptr, i64, i64 }, ptr %a428 %t430 = load { ptr, i64, i64 }, ptr %a421 store { ptr, i64, i64 } %t429, ptr %a421 store { ptr, i64, i64 } %t430, ptr %a431 call void @finch_str_drop(ptr %a431) br label %endif8720 else8719: %t432 = getelementptr inbounds { ptr, i64, i64 }, ptr %a238, i32 0, i32 1 %t433 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t434 = load { ptr, i64, i64 }, ptr %t433 store i64 -1, ptr %a435 %t436 = load i64, ptr %t432 %t437 = load ptr, ptr %a238 store i64 0, ptr %a438 br label %find.cond8721 find.cond8721: %t439 = load i64, ptr %a438 %t440 = icmp slt i64 %t439, %t436 br i1 %t440, label %find.body8722, label %find.end8725 find.body8722: %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t437, i64 %t439 %t442 = load { ptr, i64, i64 }, ptr %t441 store { ptr, i64, i64 } %t442, ptr %a443 store { ptr, i64, i64 } %t434, ptr %a444 %t445 = call i32 @finch_str_eq(ptr %a443, ptr %a444) %t446 = icmp ne i32 %t445, 0 br i1 %t446, label %find.hit8723, label %find.next8724 find.hit8723: store i64 %t439, ptr %a435 br label %find.end8725 find.next8724: %t447 = add i64 %t439, 1 store i64 %t447, ptr %a438 br label %find.cond8721 find.end8725: %t448 = load i64, ptr %a435 %t449 = icmp sge i64 %t448, 0 br i1 %t449, label %then8726, label %endif8728 then8726: %t450 = load ptr, ptr %a1 %t451 = load %S.ast.Node, ptr %a2 %t452 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t453 = load { ptr, i64, i64 }, ptr %t452 store { ptr, i64, i64 } %t453, ptr %a455 store { ptr, i64, i64 } { ptr @.str.5619, i64 61, i64 0 }, ptr %a456 call void @finch_str_concat(ptr %a454, ptr %a455, ptr %a456) %t457 = load { ptr, i64, i64 }, ptr %a454 call void @finch.gen.fail(ptr %t450, %S.ast.Node %t451, { ptr, i64, i64 } %t457) store { ptr, i64, i64 } %t457, ptr %a458 call void @finch_str_drop(ptr %a458) br label %endif8728 endif8728: %t459 = load ptr, ptr %a1 %t460 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t461 = load %S.gen.Val, ptr %t460 %t462 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t459, %S.gen.Val %t461) %t463 = load { ptr, i64, i64 }, ptr %a421 store { ptr, i64, i64 } %t462, ptr %a421 store { ptr, i64, i64 } %t463, ptr %a464 call void @finch_str_drop(ptr %a464) %t465 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t466 = getelementptr inbounds %S.gen.Val, ptr %t465, i32 0, i32 2 %t467 = load i1, ptr %t466 br i1 %t467, label %then8729, label %endif8731 then8729: %t468 = load ptr, ptr %a1 %t469 = load { ptr, i64, i64 }, ptr %a421 %t470 = load %S.ast.Type, ptr %a273 call void @finch.gen.holdAddr(ptr %t468, { ptr, i64, i64 } %t469, %S.ast.Type %t470) br label %endif8731 endif8731: br label %endif8720 endif8720: %t471 = load ptr, ptr %a1 %t472 = load %S.ast.Node, ptr %a2 %t473 = call { ptr, i64, i64 } @finch.docs.mapMethods() call void @finch.gen.noteMethod(ptr %t471, %S.ast.Node %t472, { ptr, i64, i64 } %t473) store { ptr, i64, i64 } %t473, ptr %a474 call void @finch.drop.arr_S_docs_Doc(ptr %a474) %t475 = load ptr, ptr %a1 %t476 = load %S.ast.Node, ptr %a2 %t477 = load { ptr, i64, i64 }, ptr %a421 %t478 = load %S.ast.Type, ptr %a273 %t479 = call %S.gen.Val @finch.gen.mapMethod(ptr %t475, %S.ast.Node %t476, { ptr, i64, i64 } %t477, %S.ast.Type %t478) store %S.gen.Val %t479, ptr %a480 %t481 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t482 = load i1, ptr %t481 %t483 = xor i1 %t482, true br label %logic.from8732 logic.from8732: br i1 %t483, label %logic.rhs8733, label %logic.end8734 logic.rhs8733: %t484 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t485 = getelementptr inbounds %S.gen.Val, ptr %t484, i32 0, i32 2 %t486 = load i1, ptr %t485 br label %logic.rend8735 logic.rend8735: br label %logic.end8734 logic.end8734: %t487 = phi i1 [ false, %logic.from8732 ], [ %t486, %logic.rend8735 ] br i1 %t487, label %then8736, label %endif8738 then8736: %t488 = load ptr, ptr %a1 %t489 = load { ptr, i64, i64 }, ptr %a421 %t490 = load %S.ast.Type, ptr %a273 call void @finch.gen.dropAt(ptr %t488, { ptr, i64, i64 } %t489, %S.ast.Type %t490) br label %endif8738 endif8738: %t491 = load ptr, ptr %a1 %t492 = load i64, ptr %a266 call void @finch.gen.heldEnd(ptr %t491, i64 %t492) %t493 = load %S.gen.Val, ptr %a480 call void @finch_str_drop(ptr %a421) call void @finch.drop.S_ast_Type(ptr %a273) call void @finch.drop.S_gen_Ref(ptr %a260) call void @finch.drop.arr_str(ptr %a238) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t493 endif8717: %t494 = load ptr, ptr %a1 %t495 = load i64, ptr %a266 call void @finch.gen.heldEnd(ptr %t494, i64 %t495) %t496 = load %S.ast.Type, ptr %a273 store %S.ast.Type %t496, ptr %a497 call void @finch.copy.S_ast_Type(ptr %a498, ptr %a497) %t499 = load %S.ast.Type, ptr %a498 store %S.ast.Type %t499, ptr %a500 store { ptr, i64, i64 } { ptr @.str.5620, i64 0, i64 0 }, ptr %a501 store i1 false, ptr %a502 %t503 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t504 = load { ptr, i64, i64 }, ptr %t503 store { ptr, i64, i64 } %t504, ptr %a505 store { ptr, i64, i64 } { ptr @.str.5621, i64 3, i64 0 }, ptr %a506 %t507 = call i32 @finch_str_eq(ptr %a505, ptr %a506) %t508 = icmp ne i32 %t507, 0 br label %logic.from8739 logic.from8739: br i1 %t508, label %logic.rhs8740, label %logic.end8741 logic.rhs8740: %t509 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 1 %t510 = getelementptr inbounds { ptr, i64, i64 }, ptr %t509, i32 0, i32 1 %t511 = load i64, ptr %t510 %t512 = icmp sgt i64 %t511, 0 br label %logic.rend8742 logic.rend8742: br label %logic.end8741 logic.end8741: %t513 = phi i1 [ false, %logic.from8739 ], [ %t512, %logic.rend8742 ] br label %logic.from8743 logic.from8743: br i1 %t513, label %logic.rhs8744, label %logic.end8745 logic.rhs8744: %t514 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 1 %t515 = load { ptr, i64, i64 }, ptr %t514 %t516 = extractvalue { ptr, i64, i64 } %t515, 1 %t517 = icmp uge i64 0, %t516 br i1 %t517, label %range8746, label %inrange8747 range8746: call void @finch_panic_index(ptr @.str.5622, i64 5333, i64 0, i64 %t516) unreachable inrange8747: %t518 = extractvalue { ptr, i64, i64 } %t515, 0 %t519 = getelementptr inbounds %S.ast.Type, ptr %t518, i64 0 %t520 = getelementptr inbounds %S.ast.Type, ptr %t519, i32 0, i32 0 %t521 = load { ptr, i64, i64 }, ptr %t520 store { ptr, i64, i64 } %t521, ptr %a522 store { ptr, i64, i64 } { ptr @.str.5623, i64 6, i64 0 }, ptr %a523 %t524 = call i32 @finch_str_eq(ptr %a522, ptr %a523) %t525 = icmp ne i32 %t524, 0 br label %logic.rend8748 logic.rend8748: br label %logic.end8745 logic.end8745: %t526 = phi i1 [ false, %logic.from8743 ], [ %t525, %logic.rend8748 ] br i1 %t526, label %then8749, label %else8750 then8749: %t527 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t528 = getelementptr inbounds %S.gen.Val, ptr %t527, i32 0, i32 0 %t529 = load { ptr, i64, i64 }, ptr %t528 store { ptr, i64, i64 } %t529, ptr %a530 call void @finch_str_copy(ptr %a531, ptr %a530) %t532 = load { ptr, i64, i64 }, ptr %a531 store { ptr, i64, i64 } %t532, ptr %a533 %t534 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t535 = load i1, ptr %t534 br i1 %t535, label %then8752, label %endif8754 then8752: %t536 = load ptr, ptr %a1 %t537 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t538 = getelementptr inbounds %S.gen.Place, ptr %t537, i32 0, i32 0 %t539 = load { ptr, i64, i64 }, ptr %t538 %t540 = call { ptr, i64, i64 } @finch.gen.load(ptr %t536, { ptr, i64, i64 } { ptr @.str.5624, i64 3, i64 0 }, { ptr, i64, i64 } %t539) %t541 = load { ptr, i64, i64 }, ptr %a533 store { ptr, i64, i64 } %t540, ptr %a533 store { ptr, i64, i64 } %t541, ptr %a542 call void @finch_str_drop(ptr %a542) br label %endif8754 endif8754: %t543 = load ptr, ptr %a1 %t544 = load ptr, ptr %a1 %t545 = load { ptr, i64, i64 }, ptr %a533 store { ptr, i64, i64 } { ptr @.str.5625, i64 12, i64 0 }, ptr %a547 store { ptr, i64, i64 } %t545, ptr %a548 call void @finch_str_concat(ptr %a546, ptr %a547, ptr %a548) %t549 = load { ptr, i64, i64 }, ptr %a546 store { ptr, i64, i64 } %t549, ptr %a551 store { ptr, i64, i64 } { ptr @.str.5626, i64 6, i64 0 }, ptr %a552 call void @finch_str_concat(ptr %a550, ptr %a551, ptr %a552) store { ptr, i64, i64 } %t549, ptr %a553 call void @finch_str_drop(ptr %a553) %t554 = load { ptr, i64, i64 }, ptr %a550 %t555 = call { ptr, i64, i64 } @finch.gen.op(ptr %t544, { ptr, i64, i64 } %t554) store { ptr, i64, i64 } %t554, ptr %a556 call void @finch_str_drop(ptr %a556) %t557 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t558 = load { ptr, i64, i64 }, ptr %t557 store { ptr, i64, i64 } { ptr @.str.5627, i64 8, i64 0 }, ptr %a560 store { ptr, i64, i64 } %t558, ptr %a561 call void @finch_str_concat(ptr %a559, ptr %a560, ptr %a561) %t562 = load { ptr, i64, i64 }, ptr %a559 store { ptr, i64, i64 } %t562, ptr %a564 store { ptr, i64, i64 } { ptr @.str.5628, i64 20, i64 0 }, ptr %a565 call void @finch_str_concat(ptr %a563, ptr %a564, ptr %a565) store { ptr, i64, i64 } %t562, ptr %a566 call void @finch_str_drop(ptr %a566) %t567 = load { ptr, i64, i64 }, ptr %a563 %t568 = load %S.ast.Node, ptr %a2 call void @finch.gen.panicIf(ptr %t543, { ptr, i64, i64 } %t555, { ptr, i64, i64 } %t567, %S.ast.Node %t568) store { ptr, i64, i64 } %t555, ptr %a569 call void @finch_str_drop(ptr %a569) store { ptr, i64, i64 } %t567, ptr %a570 call void @finch_str_drop(ptr %a570) %t571 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 1 %t572 = load { ptr, i64, i64 }, ptr %t571 %t573 = extractvalue { ptr, i64, i64 } %t572, 1 %t574 = icmp uge i64 0, %t573 br i1 %t574, label %range8755, label %inrange8756 range8755: call void @finch_panic_index(ptr @.str.5629, i64 5339, i64 0, i64 %t573) unreachable inrange8756: %t575 = extractvalue { ptr, i64, i64 } %t572, 0 %t576 = getelementptr inbounds %S.ast.Type, ptr %t575, i64 0 %t577 = load %S.ast.Type, ptr %t576 store %S.ast.Type %t577, ptr %a578 call void @finch.copy.S_ast_Type(ptr %a579, ptr %a578) %t580 = load %S.ast.Type, ptr %a579 %t581 = load %S.ast.Type, ptr %a500 store %S.ast.Type %t580, ptr %a500 store %S.ast.Type %t581, ptr %a582 call void @finch.drop.S_ast_Type(ptr %a582) %t583 = load { ptr, i64, i64 }, ptr %a533 store { ptr, i64, i64 } %t583, ptr %a584 call void @finch_str_copy(ptr %a585, ptr %a584) %t586 = load { ptr, i64, i64 }, ptr %a585 %t587 = load { ptr, i64, i64 }, ptr %a501 store { ptr, i64, i64 } %t586, ptr %a501 store { ptr, i64, i64 } %t587, ptr %a588 call void @finch_str_drop(ptr %a588) call void @finch_str_drop(ptr %a533) br label %endif8751 else8750: %t589 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t590 = load { ptr, i64, i64 }, ptr %t589 store { ptr, i64, i64 } %t590, ptr %a591 store { ptr, i64, i64 } { ptr @.str.5630, i64 6, i64 0 }, ptr %a592 %t593 = call i32 @finch_str_eq(ptr %a591, ptr %a592) %t594 = icmp ne i32 %t593, 0 br label %logic.from8757 logic.from8757: br i1 %t594, label %logic.end8759, label %logic.rhs8758 logic.rhs8758: %t595 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t596 = load { ptr, i64, i64 }, ptr %t595 store { ptr, i64, i64 } %t596, ptr %a597 store { ptr, i64, i64 } { ptr @.str.5631, i64 4, i64 0 }, ptr %a598 %t599 = call i32 @finch_str_eq(ptr %a597, ptr %a598) %t600 = icmp ne i32 %t599, 0 br label %logic.rend8760 logic.rend8760: br label %logic.end8759 logic.end8759: %t601 = phi i1 [ true, %logic.from8757 ], [ %t600, %logic.rend8760 ] br i1 %t601, label %then8761, label %endif8763 then8761: %t602 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t603 = load i1, ptr %t602 br i1 %t603, label %then8764, label %else8765 then8764: %t604 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t605 = getelementptr inbounds %S.gen.Place, ptr %t604, i32 0, i32 0 %t606 = load { ptr, i64, i64 }, ptr %t605 store { ptr, i64, i64 } %t606, ptr %a607 call void @finch_str_copy(ptr %a608, ptr %a607) %t609 = load { ptr, i64, i64 }, ptr %a608 %t610 = load { ptr, i64, i64 }, ptr %a501 store { ptr, i64, i64 } %t609, ptr %a501 store { ptr, i64, i64 } %t610, ptr %a611 call void @finch_str_drop(ptr %a611) br label %endif8766 else8765: %t612 = load ptr, ptr %a1 %t613 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t614 = load %S.gen.Val, ptr %t613 %t615 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t612, %S.gen.Val %t614) %t616 = load { ptr, i64, i64 }, ptr %a501 store { ptr, i64, i64 } %t615, ptr %a501 store { ptr, i64, i64 } %t616, ptr %a617 call void @finch_str_drop(ptr %a617) store i1 true, ptr %a502 br label %endif8766 endif8766: br label %endif8763 endif8763: br label %endif8751 endif8751: %t618 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 %t619 = load { ptr, i64, i64 }, ptr %t618 store { ptr, i64, i64 } %t619, ptr %a620 store { ptr, i64, i64 } { ptr @.str.5632, i64 6, i64 0 }, ptr %a621 %t622 = call i32 @finch_str_eq(ptr %a620, ptr %a621) %t623 = icmp ne i32 %t622, 0 br label %logic.from8767 logic.from8767: br i1 %t623, label %logic.end8769, label %logic.rhs8768 logic.rhs8768: %t624 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 %t625 = load { ptr, i64, i64 }, ptr %t624 store { ptr, i64, i64 } %t625, ptr %a626 store { ptr, i64, i64 } { ptr @.str.5633, i64 4, i64 0 }, ptr %a627 %t628 = call i32 @finch_str_eq(ptr %a626, ptr %a627) %t629 = icmp ne i32 %t628, 0 br label %logic.rend8770 logic.rend8770: br label %logic.end8769 logic.end8769: %t630 = phi i1 [ true, %logic.from8767 ], [ %t629, %logic.rend8770 ] br i1 %t630, label %then8771, label %endif8773 then8771: %t631 = load ptr, ptr %a1 %t632 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 %t633 = load { ptr, i64, i64 }, ptr %t632 %t634 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 2 %t635 = load { ptr, i64, i64 }, ptr %t634 %t636 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t637 = load { ptr, i64, i64 }, ptr %t636 %t638 = call i64 @finch.gen.findMethod(ptr %t631, { ptr, i64, i64 } %t633, { ptr, i64, i64 } %t635, { ptr, i64, i64 } %t637) store i64 %t638, ptr %a639 %t640 = load i64, ptr %a639 %t641 = icmp slt i64 %t640, 0 br label %logic.from8774 logic.from8774: br i1 %t641, label %logic.rhs8775, label %logic.end8776 logic.rhs8775: %t642 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 %t643 = load { ptr, i64, i64 }, ptr %t642 store { ptr, i64, i64 } %t643, ptr %a644 store { ptr, i64, i64 } { ptr @.str.5634, i64 6, i64 0 }, ptr %a645 %t646 = call i32 @finch_str_eq(ptr %a644, ptr %a645) %t647 = icmp ne i32 %t646, 0 br label %logic.rend8777 logic.rend8777: br label %logic.end8776 logic.end8776: %t648 = phi i1 [ false, %logic.from8774 ], [ %t647, %logic.rend8777 ] br i1 %t648, label %then8778, label %endif8780 then8778: %t649 = load ptr, ptr %a1 %t650 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 %t651 = load { ptr, i64, i64 }, ptr %t650 %t652 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 2 %t653 = load { ptr, i64, i64 }, ptr %t652 %t654 = call i64 @finch.gen.findStruct(ptr %t649, { ptr, i64, i64 } %t651, { ptr, i64, i64 } %t653) store i64 %t654, ptr %a655 %t656 = load ptr, ptr %a1 %t657 = icmp eq ptr %t656, null br i1 %t657, label %panic8781, label %ok8782 panic8781: call void @finch_panic(ptr @.str.5635, i64 5353, ptr @.str.5636) unreachable ok8782: %t658 = getelementptr inbounds %S.gen.Gen, ptr %t656, i32 0, i32 16 %t659 = load i64, ptr %a655 %t660 = load { ptr, i64, i64 }, ptr %t658 %t661 = extractvalue { ptr, i64, i64 } %t660, 1 %t662 = icmp uge i64 %t659, %t661 br i1 %t662, label %range8783, label %inrange8784 range8783: call void @finch_panic_index(ptr @.str.5637, i64 5353, i64 %t659, i64 %t661) unreachable inrange8784: %t663 = extractvalue { ptr, i64, i64 } %t660, 0 %t664 = getelementptr inbounds %S.gen.StructDef, ptr %t663, i64 %t659 %t665 = getelementptr inbounds %S.gen.StructDef, ptr %t664, i32 0, i32 5 %t666 = getelementptr inbounds { ptr, i64, i64 }, ptr %t665, i32 0, i32 1 %t667 = load i64, ptr %t666 %t668 = icmp sgt i64 %t667, 0 br i1 %t668, label %then8785, label %endif8787 then8785: %t669 = load ptr, ptr %a1 %t670 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 %t671 = load { ptr, i64, i64 }, ptr %t670 %t672 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t673 = load { ptr, i64, i64 }, ptr %t672 %t674 = load ptr, ptr %a1 %t675 = icmp eq ptr %t674, null br i1 %t675, label %panic8788, label %ok8789 panic8788: call void @finch_panic(ptr @.str.5638, i64 5354, ptr @.str.5639) unreachable ok8789: %t676 = getelementptr inbounds %S.gen.Gen, ptr %t674, i32 0, i32 16 %t677 = load i64, ptr %a655 %t678 = load { ptr, i64, i64 }, ptr %t676 %t679 = extractvalue { ptr, i64, i64 } %t678, 1 %t680 = icmp uge i64 %t677, %t679 br i1 %t680, label %range8790, label %inrange8791 range8790: call void @finch_panic_index(ptr @.str.5640, i64 5354, i64 %t677, i64 %t679) unreachable inrange8791: %t681 = extractvalue { ptr, i64, i64 } %t678, 0 %t682 = getelementptr inbounds %S.gen.StructDef, ptr %t681, i64 %t677 %t683 = getelementptr inbounds %S.gen.StructDef, ptr %t682, i32 0, i32 5 %t684 = load { ptr, i64, i64 }, ptr %t683 %t685 = call i64 @finch.gen.findTemplate(ptr %t669, { ptr, i64, i64 } %t671, { ptr, i64, i64 } %t673, { ptr, i64, i64 } %t684, i1 false) store i64 %t685, ptr %a686 %t687 = load i64, ptr %a686 %t688 = icmp sge i64 %t687, 0 br i1 %t688, label %then8792, label %endif8794 then8792: %t689 = load ptr, ptr %a1 %t690 = load i64, ptr %a686 %t691 = load ptr, ptr %a1 %t692 = icmp eq ptr %t691, null br i1 %t692, label %panic8795, label %ok8796 panic8795: call void @finch_panic(ptr @.str.5641, i64 5356, ptr @.str.5642) unreachable ok8796: %t693 = getelementptr inbounds %S.gen.Gen, ptr %t691, i32 0, i32 16 %t694 = load i64, ptr %a655 %t695 = load { ptr, i64, i64 }, ptr %t693 %t696 = extractvalue { ptr, i64, i64 } %t695, 1 %t697 = icmp uge i64 %t694, %t696 br i1 %t697, label %range8797, label %inrange8798 range8797: call void @finch_panic_index(ptr @.str.5643, i64 5356, i64 %t694, i64 %t696) unreachable inrange8798: %t698 = extractvalue { ptr, i64, i64 } %t695, 0 %t699 = getelementptr inbounds %S.gen.StructDef, ptr %t698, i64 %t694 %t700 = getelementptr inbounds %S.gen.StructDef, ptr %t699, i32 0, i32 7 %t701 = load { ptr, i64, i64 }, ptr %t700 %t702 = load %S.ast.Type, ptr %a500 %t703 = load %S.ast.Node, ptr %a2 %t704 = call i64 @finch.gen.instFn(ptr %t689, i64 %t690, { ptr, i64, i64 } %t701, %S.ast.Type %t702, %S.ast.Node %t703) store i64 %t704, ptr %a639 br label %endif8794 endif8794: br label %endif8787 endif8787: br label %endif8780 endif8780: %t705 = load i64, ptr %a639 %t706 = icmp slt i64 %t705, 0 br i1 %t706, label %then8799, label %endif8801 then8799: store { ptr, i64, i64 } zeroinitializer, ptr %a707 %t708 = load ptr, ptr %a1 %t709 = icmp eq ptr %t708, null br i1 %t709, label %panic8802, label %ok8803 panic8802: call void @finch_panic(ptr @.str.5644, i64 5362, ptr @.str.5645) unreachable ok8803: %t710 = getelementptr inbounds %S.gen.Gen, ptr %t708, i32 0, i32 15 store i64 0, ptr %a711 br label %each.cond8804 each.cond8804: %t712 = getelementptr inbounds { ptr, i64, i64 }, ptr %t710, i32 0, i32 1 %t713 = load i64, ptr %t712 %t714 = load i64, ptr %a711 %t715 = icmp slt i64 %t714, %t713 br i1 %t715, label %each.body8805, label %each.end8807 each.body8805: %t716 = load ptr, ptr %t710 %t717 = getelementptr inbounds %S.gen.FnSig, ptr %t716, i64 %t714 %t718 = load %S.gen.FnSig, ptr %t717 store %S.gen.FnSig %t718, ptr %a719 %t720 = getelementptr inbounds %S.gen.FnSig, ptr %a719, i32 0, i32 2 %t721 = load { ptr, i64, i64 }, ptr %t720 %t722 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 2 %t723 = load { ptr, i64, i64 }, ptr %t722 store { ptr, i64, i64 } %t721, ptr %a724 store { ptr, i64, i64 } %t723, ptr %a725 %t726 = call i32 @finch_str_eq(ptr %a724, ptr %a725) %t727 = icmp ne i32 %t726, 0 br label %logic.from8808 logic.from8808: br i1 %t727, label %logic.rhs8809, label %logic.end8810 logic.rhs8809: %t728 = getelementptr inbounds %S.gen.FnSig, ptr %a719, i32 0, i32 3 %t729 = load { ptr, i64, i64 }, ptr %t728 %t730 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 %t731 = load { ptr, i64, i64 }, ptr %t730 store { ptr, i64, i64 } %t729, ptr %a732 store { ptr, i64, i64 } %t731, ptr %a733 %t734 = call i32 @finch_str_eq(ptr %a732, ptr %a733) %t735 = icmp ne i32 %t734, 0 br label %logic.rend8811 logic.rend8811: br label %logic.end8810 logic.end8810: %t736 = phi i1 [ false, %logic.from8808 ], [ %t735, %logic.rend8811 ] br i1 %t736, label %then8812, label %endif8814 then8812: %t737 = getelementptr inbounds { ptr, i64, i64 }, ptr %a707, i32 0, i32 1 %t738 = getelementptr inbounds %S.gen.FnSig, ptr %a719, i32 0, i32 1 %t739 = load { ptr, i64, i64 }, ptr %t738 store { ptr, i64, i64 } %t739, ptr %a740 call void @finch_str_copy(ptr %a741, ptr %a740) %t742 = load { ptr, i64, i64 }, ptr %a741 %t743 = load i64, ptr %t737 %t744 = add i64 %t743, 1 call void @finch_arr_reserve(ptr %a707, i64 %t744, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t745 = load ptr, ptr %a707 %t746 = getelementptr inbounds { ptr, i64, i64 }, ptr %t745, i64 %t743 store { ptr, i64, i64 } %t742, ptr %t746 store i64 %t744, ptr %t737 br label %endif8814 endif8814: br label %each.step8806 each.step8806: %t747 = load i64, ptr %a711 %t748 = add i64 %t747, 1 store i64 %t748, ptr %a711 br label %each.cond8804 each.end8807: %t749 = getelementptr inbounds { ptr, i64, i64 }, ptr %a707, i32 0, i32 1 %t750 = load i64, ptr %t749 %t751 = icmp eq i64 %t750, 0 br i1 %t751, label %then8815, label %endif8817 then8815: %t752 = load ptr, ptr %a1 %t753 = load %S.ast.Node, ptr %a2 %t754 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 %t755 = load { ptr, i64, i64 }, ptr %t754 store { ptr, i64, i64 } { ptr @.str.5646, i64 4, i64 0 }, ptr %a757 store { ptr, i64, i64 } %t755, ptr %a758 call void @finch_str_concat(ptr %a756, ptr %a757, ptr %a758) %t759 = load { ptr, i64, i64 }, ptr %a756 store { ptr, i64, i64 } %t759, ptr %a761 store { ptr, i64, i64 } { ptr @.str.5647, i64 1, i64 0 }, ptr %a762 call void @finch_str_concat(ptr %a760, ptr %a761, ptr %a762) store { ptr, i64, i64 } %t759, ptr %a763 call void @finch_str_drop(ptr %a763) %t764 = load { ptr, i64, i64 }, ptr %a760 %t765 = load %S.ast.Type, ptr %a500 %t766 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t765) store { ptr, i64, i64 } %t764, ptr %a768 store { ptr, i64, i64 } %t766, ptr %a769 call void @finch_str_concat(ptr %a767, ptr %a768, ptr %a769) store { ptr, i64, i64 } %t764, ptr %a770 call void @finch_str_drop(ptr %a770) store { ptr, i64, i64 } %t766, ptr %a771 call void @finch_str_drop(ptr %a771) %t772 = load { ptr, i64, i64 }, ptr %a767 store { ptr, i64, i64 } %t772, ptr %a774 store { ptr, i64, i64 } { ptr @.str.5648, i64 34, i64 0 }, ptr %a775 call void @finch_str_concat(ptr %a773, ptr %a774, ptr %a775) store { ptr, i64, i64 } %t772, ptr %a776 call void @finch_str_drop(ptr %a776) %t777 = load { ptr, i64, i64 }, ptr %a773 %t778 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 2 %t779 = load { ptr, i64, i64 }, ptr %t778 store { ptr, i64, i64 } %t777, ptr %a781 store { ptr, i64, i64 } %t779, ptr %a782 call void @finch_str_concat(ptr %a780, ptr %a781, ptr %a782) store { ptr, i64, i64 } %t777, ptr %a783 call void @finch_str_drop(ptr %a783) %t784 = load { ptr, i64, i64 }, ptr %a780 store { ptr, i64, i64 } %t784, ptr %a786 store { ptr, i64, i64 } { ptr @.str.5649, i64 1, i64 0 }, ptr %a787 call void @finch_str_concat(ptr %a785, ptr %a786, ptr %a787) store { ptr, i64, i64 } %t784, ptr %a788 call void @finch_str_drop(ptr %a788) %t789 = load { ptr, i64, i64 }, ptr %a785 %t790 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t791 = load { ptr, i64, i64 }, ptr %t790 store { ptr, i64, i64 } %t789, ptr %a793 store { ptr, i64, i64 } %t791, ptr %a794 call void @finch_str_concat(ptr %a792, ptr %a793, ptr %a794) store { ptr, i64, i64 } %t789, ptr %a795 call void @finch_str_drop(ptr %a795) %t796 = load { ptr, i64, i64 }, ptr %a792 store { ptr, i64, i64 } %t796, ptr %a798 store { ptr, i64, i64 } { ptr @.str.5650, i64 13, i64 0 }, ptr %a799 call void @finch_str_concat(ptr %a797, ptr %a798, ptr %a799) store { ptr, i64, i64 } %t796, ptr %a800 call void @finch_str_drop(ptr %a800) %t801 = load { ptr, i64, i64 }, ptr %a797 call void @finch.gen.fail(ptr %t752, %S.ast.Node %t753, { ptr, i64, i64 } %t801) store { ptr, i64, i64 } %t801, ptr %a802 call void @finch_str_drop(ptr %a802) br label %endif8817 endif8817: %t803 = load ptr, ptr %a1 %t804 = load %S.ast.Node, ptr %a2 %t805 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 %t806 = load { ptr, i64, i64 }, ptr %t805 store { ptr, i64, i64 } { ptr @.str.5651, i64 4, i64 0 }, ptr %a808 store { ptr, i64, i64 } %t806, ptr %a809 call void @finch_str_concat(ptr %a807, ptr %a808, ptr %a809) %t810 = load { ptr, i64, i64 }, ptr %a807 store { ptr, i64, i64 } %t810, ptr %a812 store { ptr, i64, i64 } { ptr @.str.5652, i64 1, i64 0 }, ptr %a813 call void @finch_str_concat(ptr %a811, ptr %a812, ptr %a813) store { ptr, i64, i64 } %t810, ptr %a814 call void @finch_str_drop(ptr %a814) %t815 = load { ptr, i64, i64 }, ptr %a811 %t816 = load %S.ast.Type, ptr %a500 %t817 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t816) store { ptr, i64, i64 } %t815, ptr %a819 store { ptr, i64, i64 } %t817, ptr %a820 call void @finch_str_concat(ptr %a818, ptr %a819, ptr %a820) store { ptr, i64, i64 } %t815, ptr %a821 call void @finch_str_drop(ptr %a821) store { ptr, i64, i64 } %t817, ptr %a822 call void @finch_str_drop(ptr %a822) %t823 = load { ptr, i64, i64 }, ptr %a818 store { ptr, i64, i64 } %t823, ptr %a825 store { ptr, i64, i64 } { ptr @.str.5653, i64 16, i64 0 }, ptr %a826 call void @finch_str_concat(ptr %a824, ptr %a825, ptr %a826) store { ptr, i64, i64 } %t823, ptr %a827 call void @finch_str_drop(ptr %a827) %t828 = load { ptr, i64, i64 }, ptr %a824 %t829 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t830 = load { ptr, i64, i64 }, ptr %t829 store { ptr, i64, i64 } %t828, ptr %a832 store { ptr, i64, i64 } %t830, ptr %a833 call void @finch_str_concat(ptr %a831, ptr %a832, ptr %a833) store { ptr, i64, i64 } %t828, ptr %a834 call void @finch_str_drop(ptr %a834) %t835 = load { ptr, i64, i64 }, ptr %a831 store { ptr, i64, i64 } %t835, ptr %a837 store { ptr, i64, i64 } { ptr @.str.5654, i64 11, i64 0 }, ptr %a838 call void @finch_str_concat(ptr %a836, ptr %a837, ptr %a838) store { ptr, i64, i64 } %t835, ptr %a839 call void @finch_str_drop(ptr %a839) %t840 = load { ptr, i64, i64 }, ptr %a836 %t841 = getelementptr inbounds { ptr, i64, i64 }, ptr %a707, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.5655, i64 2, i64 0 }, ptr %a842 call void @finch_str_join(ptr %a843, ptr %a707, ptr %a842) %t844 = load { ptr, i64, i64 }, ptr %a843 store { ptr, i64, i64 } %t840, ptr %a846 store { ptr, i64, i64 } %t844, ptr %a847 call void @finch_str_concat(ptr %a845, ptr %a846, ptr %a847) store { ptr, i64, i64 } %t840, ptr %a848 call void @finch_str_drop(ptr %a848) store { ptr, i64, i64 } %t844, ptr %a849 call void @finch_str_drop(ptr %a849) %t850 = load { ptr, i64, i64 }, ptr %a845 store { ptr, i64, i64 } %t850, ptr %a852 store { ptr, i64, i64 } { ptr @.str.5656, i64 1, i64 0 }, ptr %a853 call void @finch_str_concat(ptr %a851, ptr %a852, ptr %a853) store { ptr, i64, i64 } %t850, ptr %a854 call void @finch_str_drop(ptr %a854) %t855 = load { ptr, i64, i64 }, ptr %a851 call void @finch.gen.fail(ptr %t803, %S.ast.Node %t804, { ptr, i64, i64 } %t855) store { ptr, i64, i64 } %t855, ptr %a856 call void @finch_str_drop(ptr %a856) call void @finch.drop.arr_str(ptr %a707) br label %endif8801 endif8801: %t857 = load ptr, ptr %a1 %t858 = icmp eq ptr %t857, null br i1 %t858, label %panic8818, label %ok8819 panic8818: call void @finch_panic(ptr @.str.5657, i64 5373, ptr @.str.5658) unreachable ok8819: %t859 = getelementptr inbounds %S.gen.Gen, ptr %t857, i32 0, i32 15 %t860 = load i64, ptr %a639 %t861 = load { ptr, i64, i64 }, ptr %t859 %t862 = extractvalue { ptr, i64, i64 } %t861, 1 %t863 = icmp uge i64 %t860, %t862 br i1 %t863, label %range8820, label %inrange8821 range8820: call void @finch_panic_index(ptr @.str.5659, i64 5373, i64 %t860, i64 %t862) unreachable inrange8821: %t864 = extractvalue { ptr, i64, i64 } %t861, 0 %t865 = getelementptr inbounds %S.gen.FnSig, ptr %t864, i64 %t860 %t866 = getelementptr inbounds %S.gen.FnSig, ptr %t865, i32 0, i32 10 %t867 = load i1, ptr %t866 br label %logic.from8822 logic.from8822: br i1 %t867, label %logic.rhs8823, label %logic.end8824 logic.rhs8823: %t868 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t869 = load { ptr, i64, i64 }, ptr %t868 store { ptr, i64, i64 } %t869, ptr %a870 store { ptr, i64, i64 } { ptr @.str.5660, i64 6, i64 0 }, ptr %a871 %t872 = call i32 @finch_str_eq(ptr %a870, ptr %a871) %t873 = icmp ne i32 %t872, 0 br label %logic.from8825 logic.from8825: br i1 %t873, label %logic.end8827, label %logic.rhs8826 logic.rhs8826: %t874 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t875 = load { ptr, i64, i64 }, ptr %t874 store { ptr, i64, i64 } %t875, ptr %a876 store { ptr, i64, i64 } { ptr @.str.5661, i64 4, i64 0 }, ptr %a877 %t878 = call i32 @finch_str_eq(ptr %a876, ptr %a877) %t879 = icmp ne i32 %t878, 0 br label %logic.rend8828 logic.rend8828: br label %logic.end8827 logic.end8827: %t880 = phi i1 [ true, %logic.from8825 ], [ %t879, %logic.rend8828 ] br label %logic.rend8829 logic.rend8829: br label %logic.end8824 logic.end8824: %t881 = phi i1 [ false, %logic.from8822 ], [ %t880, %logic.rend8829 ] br i1 %t881, label %then8830, label %endif8832 then8830: %t882 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t883 = load i1, ptr %t882 %t884 = xor i1 %t883, true br i1 %t884, label %then8833, label %endif8835 then8833: %t885 = load ptr, ptr %a1 %t886 = load %S.ast.Node, ptr %a2 %t887 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t888 = load { ptr, i64, i64 }, ptr %t887 store { ptr, i64, i64 } %t888, ptr %a890 store { ptr, i64, i64 } { ptr @.str.5662, i64 28, i64 0 }, ptr %a891 call void @finch_str_concat(ptr %a889, ptr %a890, ptr %a891) %t892 = load { ptr, i64, i64 }, ptr %a889 %t893 = load %S.ast.Type, ptr %a500 %t894 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t893) store { ptr, i64, i64 } %t892, ptr %a896 store { ptr, i64, i64 } %t894, ptr %a897 call void @finch_str_concat(ptr %a895, ptr %a896, ptr %a897) store { ptr, i64, i64 } %t892, ptr %a898 call void @finch_str_drop(ptr %a898) store { ptr, i64, i64 } %t894, ptr %a899 call void @finch_str_drop(ptr %a899) %t900 = load { ptr, i64, i64 }, ptr %a895 store { ptr, i64, i64 } %t900, ptr %a902 store { ptr, i64, i64 } { ptr @.str.5663, i64 30, i64 0 }, ptr %a903 call void @finch_str_concat(ptr %a901, ptr %a902, ptr %a903) store { ptr, i64, i64 } %t900, ptr %a904 call void @finch_str_drop(ptr %a904) %t905 = load { ptr, i64, i64 }, ptr %a901 call void @finch.gen.fail(ptr %t885, %S.ast.Node %t886, { ptr, i64, i64 } %t905) store { ptr, i64, i64 } %t905, ptr %a906 call void @finch_str_drop(ptr %a906) br label %endif8835 endif8835: %t907 = load %S.ast.Node, ptr %a13 %t908 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t907) store { ptr, i64, i64 } %t908, ptr %a909 %t910 = getelementptr inbounds { ptr, i64, i64 }, ptr %a909, i32 0, i32 1 %t911 = load i64, ptr %t910 %t912 = icmp sgt i64 %t911, 0 br i1 %t912, label %then8836, label %endif8838 then8836: %t913 = load ptr, ptr %a1 %t914 = load { ptr, i64, i64 }, ptr %a909 %t915 = call i64 @finch.gen.lookup(ptr %t913, { ptr, i64, i64 } %t914) store i64 %t915, ptr %a916 %t917 = load i64, ptr %a916 %t918 = icmp sge i64 %t917, 0 br label %logic.from8839 logic.from8839: br i1 %t918, label %logic.rhs8840, label %logic.end8841 logic.rhs8840: %t919 = load ptr, ptr %a1 %t920 = load i64, ptr %a916 %t921 = call %S.gen.Var @finch.gen.varAt(ptr %t919, i64 %t920) %t922 = extractvalue %S.gen.Var %t921, 3 store %S.gen.Var %t921, ptr %a923 call void @finch.drop.S_gen_Var(ptr %a923) br label %logic.rend8842 logic.rend8842: br label %logic.end8841 logic.end8841: %t924 = phi i1 [ false, %logic.from8839 ], [ %t922, %logic.rend8842 ] br i1 %t924, label %then8843, label %endif8845 then8843: %t925 = load ptr, ptr %a1 %t926 = load %S.ast.Node, ptr %a2 %t927 = load { ptr, i64, i64 }, ptr %a909 store { ptr, i64, i64 } { ptr @.str.5664, i64 19, i64 0 }, ptr %a929 store { ptr, i64, i64 } %t927, ptr %a930 call void @finch_str_concat(ptr %a928, ptr %a929, ptr %a930) %t931 = load { ptr, i64, i64 }, ptr %a928 store { ptr, i64, i64 } %t931, ptr %a933 store { ptr, i64, i64 } { ptr @.str.5665, i64 18, i64 0 }, ptr %a934 call void @finch_str_concat(ptr %a932, ptr %a933, ptr %a934) store { ptr, i64, i64 } %t931, ptr %a935 call void @finch_str_drop(ptr %a935) %t936 = load { ptr, i64, i64 }, ptr %a932 call void @finch.gen.fail(ptr %t925, %S.ast.Node %t926, { ptr, i64, i64 } %t936) store { ptr, i64, i64 } %t936, ptr %a937 call void @finch_str_drop(ptr %a937) br label %endif8845 endif8845: br label %endif8838 endif8838: call void @finch_str_drop(ptr %a909) br label %endif8832 endif8832: %t938 = load i1, ptr %a502 br label %logic.from8846 logic.from8846: br i1 %t938, label %logic.rhs8847, label %logic.end8848 logic.rhs8847: %t939 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t940 = getelementptr inbounds %S.gen.Val, ptr %t939, i32 0, i32 2 %t941 = load i1, ptr %t940 br label %logic.rend8849 logic.rend8849: br label %logic.end8848 logic.end8848: %t942 = phi i1 [ false, %logic.from8846 ], [ %t941, %logic.rend8849 ] br i1 %t942, label %then8850, label %endif8852 then8850: %t943 = load ptr, ptr %a1 %t944 = load { ptr, i64, i64 }, ptr %a501 %t945 = load %S.ast.Type, ptr %a500 call void @finch.gen.holdAddr(ptr %t943, { ptr, i64, i64 } %t944, %S.ast.Type %t945) br label %endif8852 endif8852: %t946 = load ptr, ptr %a1 %t947 = load i64, ptr %a639 %t948 = load %S.ast.Node, ptr %a2 %t949 = load %S.ast.Type, ptr %a500 %t950 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t949) store { ptr, i64, i64 } %t950, ptr %a952 store { ptr, i64, i64 } { ptr @.str.5666, i64 1, i64 0 }, ptr %a953 call void @finch_str_concat(ptr %a951, ptr %a952, ptr %a953) store { ptr, i64, i64 } %t950, ptr %a954 call void @finch_str_drop(ptr %a954) %t955 = load { ptr, i64, i64 }, ptr %a951 %t956 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t957 = load { ptr, i64, i64 }, ptr %t956 store { ptr, i64, i64 } %t955, ptr %a959 store { ptr, i64, i64 } %t957, ptr %a960 call void @finch_str_concat(ptr %a958, ptr %a959, ptr %a960) store { ptr, i64, i64 } %t955, ptr %a961 call void @finch_str_drop(ptr %a961) %t962 = load { ptr, i64, i64 }, ptr %a958 %t963 = load { ptr, i64, i64 }, ptr %a501 %t964 = load %S.ast.Node, ptr %a13 %t965 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t964) %t966 = call %S.gen.Val @finch.gen.callFn(ptr %t946, i64 %t947, %S.ast.Node %t948, i64 1, { ptr, i64, i64 } %t962, { ptr, i64, i64 } %t963, { ptr, i64, i64 } %t965) store { ptr, i64, i64 } %t962, ptr %a967 call void @finch_str_drop(ptr %a967) store { ptr, i64, i64 } %t965, ptr %a968 call void @finch_str_drop(ptr %a968) store %S.gen.Val %t966, ptr %a969 %t970 = load i1, ptr %a502 br label %logic.from8853 logic.from8853: br i1 %t970, label %logic.rhs8854, label %logic.end8855 logic.rhs8854: %t971 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t972 = getelementptr inbounds %S.gen.Val, ptr %t971, i32 0, i32 2 %t973 = load i1, ptr %t972 br label %logic.rend8856 logic.rend8856: br label %logic.end8855 logic.end8855: %t974 = phi i1 [ false, %logic.from8853 ], [ %t973, %logic.rend8856 ] br label %logic.from8857 logic.from8857: br i1 %t974, label %logic.rhs8858, label %logic.end8859 logic.rhs8858: %t975 = load ptr, ptr %a1 %t976 = load %S.ast.Type, ptr %a500 %t977 = call i1 @finch.gen.owning(ptr %t975, %S.ast.Type %t976) br label %logic.rend8860 logic.rend8860: br label %logic.end8859 logic.end8859: %t978 = phi i1 [ false, %logic.from8857 ], [ %t977, %logic.rend8860 ] br i1 %t978, label %then8861, label %endif8863 then8861: %t979 = load ptr, ptr %a1 %t980 = load { ptr, i64, i64 }, ptr %a501 %t981 = load %S.ast.Type, ptr %a500 call void @finch.gen.dropAt(ptr %t979, { ptr, i64, i64 } %t980, %S.ast.Type %t981) br label %endif8863 endif8863: %t982 = load ptr, ptr %a1 %t983 = load i64, ptr %a266 call void @finch.gen.heldEnd(ptr %t982, i64 %t983) %t984 = load %S.gen.Val, ptr %a969 call void @finch_str_drop(ptr %a501) call void @finch.drop.S_ast_Type(ptr %a500) call void @finch.drop.S_ast_Type(ptr %a273) call void @finch.drop.S_gen_Ref(ptr %a260) call void @finch.drop.arr_str(ptr %a238) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t984 endif8773: %t985 = load ptr, ptr %a1 %t986 = load %S.ast.Node, ptr %a2 %t987 = load %S.ast.Type, ptr %a273 %t988 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t987) store { ptr, i64, i64 } %t988, ptr %a990 store { ptr, i64, i64 } { ptr @.str.5667, i64 15, i64 0 }, ptr %a991 call void @finch_str_concat(ptr %a989, ptr %a990, ptr %a991) store { ptr, i64, i64 } %t988, ptr %a992 call void @finch_str_drop(ptr %a992) %t993 = load { ptr, i64, i64 }, ptr %a989 call void @finch.gen.fail(ptr %t985, %S.ast.Node %t986, { ptr, i64, i64 } %t993) store { ptr, i64, i64 } %t993, ptr %a994 call void @finch_str_drop(ptr %a994) call void @finch_str_drop(ptr %a501) call void @finch.drop.S_ast_Type(ptr %a500) call void @finch.drop.S_ast_Type(ptr %a273) call void @finch.drop.S_gen_Ref(ptr %a260) call void @finch.drop.arr_str(ptr %a238) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val zeroinitializer } define internal void @finch.gen.need(ptr %p0, %S.ast.Node %p1, i64 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i64, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i64 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = load %S.ast.Node, ptr %a2 %t6 = load i64, ptr %a3 %t7 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t8 = load { ptr, i64, i64 }, ptr %t7 call void @finch.gen.checkArgs(ptr %t4, %S.ast.Node %t5, i64 1, i64 %t6, { ptr, i64, i64 } %t8) ret void } define internal %S.gen.Val @finch.gen.arrayMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a12 = alloca %S.ast.Type, align 16 %a13 = alloca %S.ast.Type, align 16 %a15 = alloca %S.ast.Type, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca %S.gen.Val, align 16 %a70 = alloca %S.gen.Val, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca %S.ast.Type, align 16 %a260 = alloca %S.ast.Type, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca %S.gen.Val, align 16 %a315 = alloca %S.gen.Val, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a369 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a399 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a403 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a410 = alloca { ptr, i64, i64 }, align 16 %a411 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a416 = alloca { ptr, i64, i64 }, align 16 %a419 = alloca %S.ast.Type, align 16 %a420 = alloca %S.ast.Type, align 16 %a423 = alloca %S.gen.Val, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a434 = alloca %S.ast.Type, align 16 %a435 = alloca %S.ast.Type, align 16 %a440 = alloca %S.gen.Val, align 16 %a442 = alloca { ptr, i64, i64 }, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a445 = alloca %S.gen.Val, align 16 %a446 = alloca { ptr, i64, i64 }, align 16 %a463 = alloca { ptr, i64, i64 }, align 16 %a464 = alloca { ptr, i64, i64 }, align 16 %a465 = alloca { ptr, i64, i64 }, align 16 %a467 = alloca { ptr, i64, i64 }, align 16 %a468 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a470 = alloca { ptr, i64, i64 }, align 16 %a473 = alloca { ptr, i64, i64 }, align 16 %a475 = alloca { ptr, i64, i64 }, align 16 %a485 = alloca { ptr, i64, i64 }, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a488 = alloca { ptr, i64, i64 }, align 16 %a492 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a501 = alloca { ptr, i64, i64 }, align 16 %a502 = alloca { ptr, i64, i64 }, align 16 %a504 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca { ptr, i64, i64 }, align 16 %a515 = alloca { ptr, i64, i64 }, align 16 %a516 = alloca { ptr, i64, i64 }, align 16 %a523 = alloca { ptr, i64, i64 }, align 16 %a524 = alloca { ptr, i64, i64 }, align 16 %a538 = alloca %S.gen.Val, align 16 %a542 = alloca { ptr, i64, i64 }, align 16 %a545 = alloca { ptr, i64, i64 }, align 16 %a548 = alloca { ptr, i64, i64 }, align 16 %a549 = alloca { ptr, i64, i64 }, align 16 %a550 = alloca { ptr, i64, i64 }, align 16 %a552 = alloca { ptr, i64, i64 }, align 16 %a553 = alloca { ptr, i64, i64 }, align 16 %a554 = alloca { ptr, i64, i64 }, align 16 %a555 = alloca { ptr, i64, i64 }, align 16 %a558 = alloca { ptr, i64, i64 }, align 16 %a559 = alloca { ptr, i64, i64 }, align 16 %a560 = alloca { ptr, i64, i64 }, align 16 %a561 = alloca { ptr, i64, i64 }, align 16 %a563 = alloca { ptr, i64, i64 }, align 16 %a564 = alloca { ptr, i64, i64 }, align 16 %a565 = alloca { ptr, i64, i64 }, align 16 %a566 = alloca { ptr, i64, i64 }, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a570 = alloca { ptr, i64, i64 }, align 16 %a571 = alloca { ptr, i64, i64 }, align 16 %a572 = alloca { ptr, i64, i64 }, align 16 %a574 = alloca { ptr, i64, i64 }, align 16 %a575 = alloca { ptr, i64, i64 }, align 16 %a576 = alloca { ptr, i64, i64 }, align 16 %a577 = alloca { ptr, i64, i64 }, align 16 %a579 = alloca { ptr, i64, i64 }, align 16 %a590 = alloca { ptr, i64, i64 }, align 16 %a591 = alloca { ptr, i64, i64 }, align 16 %a615 = alloca %S.gen.Val, align 16 %a616 = alloca %S.ast.Type, align 16 %a618 = alloca { ptr, i64, i64 }, align 16 %a619 = alloca { ptr, i64, i64 }, align 16 %a621 = alloca %S.gen.Val, align 16 %a622 = alloca { ptr, i64, i64 }, align 16 %a644 = alloca %S.gen.Val, align 16 %a646 = alloca %S.gen.Val, align 16 %a647 = alloca { ptr, i64, i64 }, align 16 %a661 = alloca { ptr, i64, i64 }, align 16 %a664 = alloca { ptr, i64, i64 }, align 16 %a665 = alloca { ptr, i64, i64 }, align 16 %a666 = alloca { ptr, i64, i64 }, align 16 %a668 = alloca { ptr, i64, i64 }, align 16 %a669 = alloca { ptr, i64, i64 }, align 16 %a670 = alloca { ptr, i64, i64 }, align 16 %a671 = alloca { ptr, i64, i64 }, align 16 %a674 = alloca { ptr, i64, i64 }, align 16 %a675 = alloca { ptr, i64, i64 }, align 16 %a676 = alloca { ptr, i64, i64 }, align 16 %a677 = alloca { ptr, i64, i64 }, align 16 %a679 = alloca { ptr, i64, i64 }, align 16 %a680 = alloca { ptr, i64, i64 }, align 16 %a681 = alloca { ptr, i64, i64 }, align 16 %a682 = alloca { ptr, i64, i64 }, align 16 %a687 = alloca { ptr, i64, i64 }, align 16 %a688 = alloca { ptr, i64, i64 }, align 16 %a689 = alloca { ptr, i64, i64 }, align 16 %a690 = alloca { ptr, i64, i64 }, align 16 %a691 = alloca { ptr, i64, i64 }, align 16 %a693 = alloca { ptr, i64, i64 }, align 16 %a694 = alloca { ptr, i64, i64 }, align 16 %a695 = alloca { ptr, i64, i64 }, align 16 %a696 = alloca { ptr, i64, i64 }, align 16 %a699 = alloca { ptr, i64, i64 }, align 16 %a700 = alloca { ptr, i64, i64 }, align 16 %a701 = alloca { ptr, i64, i64 }, align 16 %a702 = alloca { ptr, i64, i64 }, align 16 %a704 = alloca { ptr, i64, i64 }, align 16 %a705 = alloca { ptr, i64, i64 }, align 16 %a706 = alloca { ptr, i64, i64 }, align 16 %a707 = alloca { ptr, i64, i64 }, align 16 %a711 = alloca { ptr, i64, i64 }, align 16 %a713 = alloca { ptr, i64, i64 }, align 16 %a714 = alloca { ptr, i64, i64 }, align 16 %a715 = alloca { ptr, i64, i64 }, align 16 %a716 = alloca { ptr, i64, i64 }, align 16 %a717 = alloca { ptr, i64, i64 }, align 16 %a719 = alloca { ptr, i64, i64 }, align 16 %a720 = alloca { ptr, i64, i64 }, align 16 %a721 = alloca { ptr, i64, i64 }, align 16 %a722 = alloca { ptr, i64, i64 }, align 16 %a724 = alloca { ptr, i64, i64 }, align 16 %a728 = alloca { ptr, i64, i64 }, align 16 %a734 = alloca { ptr, i64, i64 }, align 16 %a735 = alloca { ptr, i64, i64 }, align 16 %a736 = alloca { ptr, i64, i64 }, align 16 %a738 = alloca { ptr, i64, i64 }, align 16 %a739 = alloca { ptr, i64, i64 }, align 16 %a740 = alloca { ptr, i64, i64 }, align 16 %a741 = alloca { ptr, i64, i64 }, align 16 %a744 = alloca { ptr, i64, i64 }, align 16 %a745 = alloca { ptr, i64, i64 }, align 16 %a746 = alloca { ptr, i64, i64 }, align 16 %a747 = alloca { ptr, i64, i64 }, align 16 %a749 = alloca { ptr, i64, i64 }, align 16 %a750 = alloca { ptr, i64, i64 }, align 16 %a751 = alloca { ptr, i64, i64 }, align 16 %a752 = alloca { ptr, i64, i64 }, align 16 %a755 = alloca { ptr, i64, i64 }, align 16 %a756 = alloca { ptr, i64, i64 }, align 16 %a757 = alloca { ptr, i64, i64 }, align 16 %a758 = alloca { ptr, i64, i64 }, align 16 %a761 = alloca { ptr, i64, i64 }, align 16 %a762 = alloca { ptr, i64, i64 }, align 16 %a766 = alloca { ptr, i64, i64 }, align 16 %a767 = alloca { ptr, i64, i64 }, align 16 %a791 = alloca %S.gen.Val, align 16 %a792 = alloca %S.ast.Type, align 16 %a794 = alloca { ptr, i64, i64 }, align 16 %a795 = alloca { ptr, i64, i64 }, align 16 %a797 = alloca %S.gen.Val, align 16 %a798 = alloca { ptr, i64, i64 }, align 16 %a805 = alloca { ptr, i64, i64 }, align 16 %a809 = alloca { ptr, i64, i64 }, align 16 %a814 = alloca { ptr, i64, i64 }, align 16 %a815 = alloca { ptr, i64, i64 }, align 16 %a816 = alloca { ptr, i64, i64 }, align 16 %a818 = alloca { ptr, i64, i64 }, align 16 %a819 = alloca { ptr, i64, i64 }, align 16 %a820 = alloca { ptr, i64, i64 }, align 16 %a821 = alloca { ptr, i64, i64 }, align 16 %a824 = alloca { ptr, i64, i64 }, align 16 %a825 = alloca { ptr, i64, i64 }, align 16 %a826 = alloca { ptr, i64, i64 }, align 16 %a827 = alloca { ptr, i64, i64 }, align 16 %a829 = alloca { ptr, i64, i64 }, align 16 %a830 = alloca { ptr, i64, i64 }, align 16 %a831 = alloca { ptr, i64, i64 }, align 16 %a832 = alloca { ptr, i64, i64 }, align 16 %a835 = alloca { ptr, i64, i64 }, align 16 %a836 = alloca { ptr, i64, i64 }, align 16 %a837 = alloca { ptr, i64, i64 }, align 16 %a838 = alloca { ptr, i64, i64 }, align 16 %a841 = alloca { ptr, i64, i64 }, align 16 %a843 = alloca { ptr, i64, i64 }, align 16 %a844 = alloca { ptr, i64, i64 }, align 16 %a847 = alloca { ptr, i64, i64 }, align 16 %a848 = alloca { ptr, i64, i64 }, align 16 %a849 = alloca { ptr, i64, i64 }, align 16 %a851 = alloca { ptr, i64, i64 }, align 16 %a852 = alloca { ptr, i64, i64 }, align 16 %a853 = alloca { ptr, i64, i64 }, align 16 %a854 = alloca { ptr, i64, i64 }, align 16 %a857 = alloca { ptr, i64, i64 }, align 16 %a858 = alloca { ptr, i64, i64 }, align 16 %a859 = alloca { ptr, i64, i64 }, align 16 %a860 = alloca { ptr, i64, i64 }, align 16 %a862 = alloca { ptr, i64, i64 }, align 16 %a863 = alloca { ptr, i64, i64 }, align 16 %a864 = alloca { ptr, i64, i64 }, align 16 %a865 = alloca { ptr, i64, i64 }, align 16 %a870 = alloca { ptr, i64, i64 }, align 16 %a871 = alloca { ptr, i64, i64 }, align 16 %a872 = alloca { ptr, i64, i64 }, align 16 %a873 = alloca { ptr, i64, i64 }, align 16 %a874 = alloca { ptr, i64, i64 }, align 16 %a876 = alloca { ptr, i64, i64 }, align 16 %a877 = alloca { ptr, i64, i64 }, align 16 %a878 = alloca { ptr, i64, i64 }, align 16 %a879 = alloca { ptr, i64, i64 }, align 16 %a881 = alloca { ptr, i64, i64 }, align 16 %a883 = alloca { ptr, i64, i64 }, align 16 %a884 = alloca { ptr, i64, i64 }, align 16 %a888 = alloca %S.ast.Type, align 16 %a889 = alloca %S.ast.Type, align 16 %a897 = alloca { ptr, i64, i64 }, align 16 %a898 = alloca { ptr, i64, i64 }, align 16 %a922 = alloca %S.gen.Val, align 16 %a923 = alloca %S.ast.Type, align 16 %a925 = alloca { ptr, i64, i64 }, align 16 %a926 = alloca { ptr, i64, i64 }, align 16 %a928 = alloca %S.gen.Val, align 16 %a929 = alloca { ptr, i64, i64 }, align 16 %a936 = alloca { ptr, i64, i64 }, align 16 %a937 = alloca { ptr, i64, i64 }, align 16 %a938 = alloca { ptr, i64, i64 }, align 16 %a940 = alloca { ptr, i64, i64 }, align 16 %a941 = alloca { ptr, i64, i64 }, align 16 %a942 = alloca { ptr, i64, i64 }, align 16 %a943 = alloca { ptr, i64, i64 }, align 16 %a946 = alloca { ptr, i64, i64 }, align 16 %a947 = alloca { ptr, i64, i64 }, align 16 %a948 = alloca { ptr, i64, i64 }, align 16 %a949 = alloca { ptr, i64, i64 }, align 16 %a951 = alloca { ptr, i64, i64 }, align 16 %a952 = alloca { ptr, i64, i64 }, align 16 %a953 = alloca { ptr, i64, i64 }, align 16 %a954 = alloca { ptr, i64, i64 }, align 16 %a959 = alloca { ptr, i64, i64 }, align 16 %a960 = alloca { ptr, i64, i64 }, align 16 %a961 = alloca { ptr, i64, i64 }, align 16 %a962 = alloca { ptr, i64, i64 }, align 16 %a963 = alloca { ptr, i64, i64 }, align 16 %a965 = alloca { ptr, i64, i64 }, align 16 %a966 = alloca { ptr, i64, i64 }, align 16 %a967 = alloca { ptr, i64, i64 }, align 16 %a968 = alloca { ptr, i64, i64 }, align 16 %a970 = alloca { ptr, i64, i64 }, align 16 %a974 = alloca { ptr, i64, i64 }, align 16 %a975 = alloca { ptr, i64, i64 }, align 16 %a983 = alloca { ptr, i64, i64 }, align 16 %a987 = alloca { ptr, i64, i64 }, align 16 %a990 = alloca { ptr, i64, i64 }, align 16 %a991 = alloca { ptr, i64, i64 }, align 16 %a992 = alloca { ptr, i64, i64 }, align 16 %a994 = alloca { ptr, i64, i64 }, align 16 %a995 = alloca { ptr, i64, i64 }, align 16 %a996 = alloca { ptr, i64, i64 }, align 16 %a997 = alloca { ptr, i64, i64 }, align 16 %a1000 = alloca { ptr, i64, i64 }, align 16 %a1001 = alloca { ptr, i64, i64 }, align 16 %a1005 = alloca { ptr, i64, i64 }, align 16 %a1008 = alloca { ptr, i64, i64 }, align 16 %a1009 = alloca { ptr, i64, i64 }, align 16 %a1010 = alloca { ptr, i64, i64 }, align 16 %a1012 = alloca { ptr, i64, i64 }, align 16 %a1013 = alloca { ptr, i64, i64 }, align 16 %a1014 = alloca { ptr, i64, i64 }, align 16 %a1015 = alloca { ptr, i64, i64 }, align 16 %a1018 = alloca { ptr, i64, i64 }, align 16 %a1019 = alloca { ptr, i64, i64 }, align 16 %a1020 = alloca { ptr, i64, i64 }, align 16 %a1021 = alloca { ptr, i64, i64 }, align 16 %a1023 = alloca { ptr, i64, i64 }, align 16 %a1024 = alloca { ptr, i64, i64 }, align 16 %a1025 = alloca { ptr, i64, i64 }, align 16 %a1026 = alloca { ptr, i64, i64 }, align 16 %a1034 = alloca { ptr, i64, i64 }, align 16 %a1035 = alloca { ptr, i64, i64 }, align 16 %a1036 = alloca { ptr, i64, i64 }, align 16 %a1037 = alloca { ptr, i64, i64 }, align 16 %a1040 = alloca { ptr, i64, i64 }, align 16 %a1041 = alloca { ptr, i64, i64 }, align 16 %a1045 = alloca { ptr, i64, i64 }, align 16 %a1046 = alloca { ptr, i64, i64 }, align 16 %a1047 = alloca { ptr, i64, i64 }, align 16 %a1049 = alloca { ptr, i64, i64 }, align 16 %a1050 = alloca { ptr, i64, i64 }, align 16 %a1051 = alloca { ptr, i64, i64 }, align 16 %a1052 = alloca { ptr, i64, i64 }, align 16 %a1055 = alloca { ptr, i64, i64 }, align 16 %a1056 = alloca { ptr, i64, i64 }, align 16 %a1057 = alloca { ptr, i64, i64 }, align 16 %a1058 = alloca { ptr, i64, i64 }, align 16 %a1059 = alloca { ptr, i64, i64 }, align 16 %a1061 = alloca { ptr, i64, i64 }, align 16 %a1062 = alloca { ptr, i64, i64 }, align 16 %a1063 = alloca { ptr, i64, i64 }, align 16 %a1064 = alloca { ptr, i64, i64 }, align 16 %a1072 = alloca { ptr, i64, i64 }, align 16 %a1073 = alloca { ptr, i64, i64 }, align 16 %a1074 = alloca { ptr, i64, i64 }, align 16 %a1075 = alloca { ptr, i64, i64 }, align 16 %a1078 = alloca { ptr, i64, i64 }, align 16 %a1079 = alloca { ptr, i64, i64 }, align 16 %a1082 = alloca { ptr, i64, i64 }, align 16 %a1083 = alloca { ptr, i64, i64 }, align 16 %a1084 = alloca { ptr, i64, i64 }, align 16 %a1086 = alloca { ptr, i64, i64 }, align 16 %a1087 = alloca { ptr, i64, i64 }, align 16 %a1088 = alloca { ptr, i64, i64 }, align 16 %a1089 = alloca { ptr, i64, i64 }, align 16 %a1092 = alloca { ptr, i64, i64 }, align 16 %a1093 = alloca { ptr, i64, i64 }, align 16 %a1094 = alloca { ptr, i64, i64 }, align 16 %a1095 = alloca { ptr, i64, i64 }, align 16 %a1097 = alloca { ptr, i64, i64 }, align 16 %a1098 = alloca { ptr, i64, i64 }, align 16 %a1099 = alloca { ptr, i64, i64 }, align 16 %a1100 = alloca { ptr, i64, i64 }, align 16 %a1103 = alloca { ptr, i64, i64 }, align 16 %a1104 = alloca { ptr, i64, i64 }, align 16 %a1105 = alloca { ptr, i64, i64 }, align 16 %a1106 = alloca { ptr, i64, i64 }, align 16 %a1109 = alloca { ptr, i64, i64 }, align 16 %a1110 = alloca { ptr, i64, i64 }, align 16 %a1115 = alloca { ptr, i64, i64 }, align 16 %a1120 = alloca { ptr, i64, i64 }, align 16 %a1134 = alloca { ptr, i64, i64 }, align 16 %a1135 = alloca { ptr, i64, i64 }, align 16 %a1159 = alloca %S.gen.Val, align 16 %a1160 = alloca %S.ast.Type, align 16 %a1162 = alloca { ptr, i64, i64 }, align 16 %a1163 = alloca { ptr, i64, i64 }, align 16 %a1165 = alloca %S.gen.Val, align 16 %a1166 = alloca { ptr, i64, i64 }, align 16 %a1186 = alloca %S.gen.Val, align 16 %a1187 = alloca %S.ast.Type, align 16 %a1189 = alloca { ptr, i64, i64 }, align 16 %a1190 = alloca { ptr, i64, i64 }, align 16 %a1192 = alloca %S.gen.Val, align 16 %a1193 = alloca { ptr, i64, i64 }, align 16 %a1197 = alloca { ptr, i64, i64 }, align 16 %a1200 = alloca { ptr, i64, i64 }, align 16 %a1201 = alloca { ptr, i64, i64 }, align 16 %a1202 = alloca { ptr, i64, i64 }, align 16 %a1204 = alloca { ptr, i64, i64 }, align 16 %a1205 = alloca { ptr, i64, i64 }, align 16 %a1206 = alloca { ptr, i64, i64 }, align 16 %a1207 = alloca { ptr, i64, i64 }, align 16 %a1210 = alloca { ptr, i64, i64 }, align 16 %a1211 = alloca { ptr, i64, i64 }, align 16 %a1214 = alloca { ptr, i64, i64 }, align 16 %a1215 = alloca { ptr, i64, i64 }, align 16 %a1216 = alloca { ptr, i64, i64 }, align 16 %a1218 = alloca { ptr, i64, i64 }, align 16 %a1219 = alloca { ptr, i64, i64 }, align 16 %a1220 = alloca { ptr, i64, i64 }, align 16 %a1221 = alloca { ptr, i64, i64 }, align 16 %a1224 = alloca { ptr, i64, i64 }, align 16 %a1225 = alloca { ptr, i64, i64 }, align 16 %a1226 = alloca { ptr, i64, i64 }, align 16 %a1227 = alloca { ptr, i64, i64 }, align 16 %a1230 = alloca { ptr, i64, i64 }, align 16 %a1231 = alloca { ptr, i64, i64 }, align 16 %a1234 = alloca { ptr, i64, i64 }, align 16 %a1235 = alloca { ptr, i64, i64 }, align 16 %a1236 = alloca { ptr, i64, i64 }, align 16 %a1238 = alloca { ptr, i64, i64 }, align 16 %a1239 = alloca { ptr, i64, i64 }, align 16 %a1240 = alloca { ptr, i64, i64 }, align 16 %a1241 = alloca { ptr, i64, i64 }, align 16 %a1244 = alloca { ptr, i64, i64 }, align 16 %a1245 = alloca { ptr, i64, i64 }, align 16 %a1246 = alloca { ptr, i64, i64 }, align 16 %a1247 = alloca { ptr, i64, i64 }, align 16 %a1250 = alloca { ptr, i64, i64 }, align 16 %a1251 = alloca { ptr, i64, i64 }, align 16 %a1256 = alloca { ptr, i64, i64 }, align 16 %a1257 = alloca { ptr, i64, i64 }, align 16 %a1258 = alloca { ptr, i64, i64 }, align 16 %a1260 = alloca { ptr, i64, i64 }, align 16 %a1261 = alloca { ptr, i64, i64 }, align 16 %a1262 = alloca { ptr, i64, i64 }, align 16 %a1263 = alloca { ptr, i64, i64 }, align 16 %a1266 = alloca { ptr, i64, i64 }, align 16 %a1267 = alloca { ptr, i64, i64 }, align 16 %a1268 = alloca { ptr, i64, i64 }, align 16 %a1269 = alloca { ptr, i64, i64 }, align 16 %a1272 = alloca { ptr, i64, i64 }, align 16 %a1273 = alloca { ptr, i64, i64 }, align 16 %a1274 = alloca { ptr, i64, i64 }, align 16 %a1275 = alloca { ptr, i64, i64 }, align 16 %a1276 = alloca { ptr, i64, i64 }, align 16 %a1278 = alloca { ptr, i64, i64 }, align 16 %a1279 = alloca { ptr, i64, i64 }, align 16 %a1280 = alloca { ptr, i64, i64 }, align 16 %a1281 = alloca { ptr, i64, i64 }, align 16 %a1284 = alloca { ptr, i64, i64 }, align 16 %a1285 = alloca { ptr, i64, i64 }, align 16 %a1286 = alloca { ptr, i64, i64 }, align 16 %a1287 = alloca { ptr, i64, i64 }, align 16 %a1290 = alloca { ptr, i64, i64 }, align 16 %a1292 = alloca { ptr, i64, i64 }, align 16 %a1295 = alloca { ptr, i64, i64 }, align 16 %a1296 = alloca { ptr, i64, i64 }, align 16 %a1297 = alloca { ptr, i64, i64 }, align 16 %a1299 = alloca { ptr, i64, i64 }, align 16 %a1300 = alloca { ptr, i64, i64 }, align 16 %a1301 = alloca { ptr, i64, i64 }, align 16 %a1302 = alloca { ptr, i64, i64 }, align 16 %a1305 = alloca { ptr, i64, i64 }, align 16 %a1306 = alloca { ptr, i64, i64 }, align 16 %a1307 = alloca { ptr, i64, i64 }, align 16 %a1308 = alloca { ptr, i64, i64 }, align 16 %a1311 = alloca { ptr, i64, i64 }, align 16 %a1312 = alloca { ptr, i64, i64 }, align 16 %a1315 = alloca { ptr, i64, i64 }, align 16 %a1318 = alloca { ptr, i64, i64 }, align 16 %a1319 = alloca { ptr, i64, i64 }, align 16 %a1320 = alloca { ptr, i64, i64 }, align 16 %a1322 = alloca { ptr, i64, i64 }, align 16 %a1323 = alloca { ptr, i64, i64 }, align 16 %a1324 = alloca { ptr, i64, i64 }, align 16 %a1325 = alloca { ptr, i64, i64 }, align 16 %a1328 = alloca { ptr, i64, i64 }, align 16 %a1329 = alloca { ptr, i64, i64 }, align 16 %a1330 = alloca { ptr, i64, i64 }, align 16 %a1331 = alloca { ptr, i64, i64 }, align 16 %a1333 = alloca { ptr, i64, i64 }, align 16 %a1334 = alloca { ptr, i64, i64 }, align 16 %a1335 = alloca { ptr, i64, i64 }, align 16 %a1336 = alloca { ptr, i64, i64 }, align 16 %a1341 = alloca { ptr, i64, i64 }, align 16 %a1342 = alloca { ptr, i64, i64 }, align 16 %a1343 = alloca { ptr, i64, i64 }, align 16 %a1344 = alloca { ptr, i64, i64 }, align 16 %a1345 = alloca { ptr, i64, i64 }, align 16 %a1347 = alloca { ptr, i64, i64 }, align 16 %a1348 = alloca { ptr, i64, i64 }, align 16 %a1349 = alloca { ptr, i64, i64 }, align 16 %a1350 = alloca { ptr, i64, i64 }, align 16 %a1352 = alloca { ptr, i64, i64 }, align 16 %a1356 = alloca { ptr, i64, i64 }, align 16 %a1360 = alloca { ptr, i64, i64 }, align 16 %a1364 = alloca { ptr, i64, i64 }, align 16 %a1367 = alloca { ptr, i64, i64 }, align 16 %a1368 = alloca { ptr, i64, i64 }, align 16 %a1369 = alloca { ptr, i64, i64 }, align 16 %a1371 = alloca { ptr, i64, i64 }, align 16 %a1372 = alloca { ptr, i64, i64 }, align 16 %a1373 = alloca { ptr, i64, i64 }, align 16 %a1374 = alloca { ptr, i64, i64 }, align 16 %a1377 = alloca { ptr, i64, i64 }, align 16 %a1378 = alloca { ptr, i64, i64 }, align 16 %a1379 = alloca { ptr, i64, i64 }, align 16 %a1380 = alloca { ptr, i64, i64 }, align 16 %a1382 = alloca { ptr, i64, i64 }, align 16 %a1383 = alloca { ptr, i64, i64 }, align 16 %a1384 = alloca { ptr, i64, i64 }, align 16 %a1385 = alloca { ptr, i64, i64 }, align 16 %a1393 = alloca { ptr, i64, i64 }, align 16 %a1394 = alloca { ptr, i64, i64 }, align 16 %a1395 = alloca { ptr, i64, i64 }, align 16 %a1396 = alloca { ptr, i64, i64 }, align 16 %a1399 = alloca { ptr, i64, i64 }, align 16 %a1400 = alloca { ptr, i64, i64 }, align 16 %a1403 = alloca { ptr, i64, i64 }, align 16 %a1404 = alloca { ptr, i64, i64 }, align 16 %a1405 = alloca { ptr, i64, i64 }, align 16 %a1407 = alloca { ptr, i64, i64 }, align 16 %a1408 = alloca { ptr, i64, i64 }, align 16 %a1409 = alloca { ptr, i64, i64 }, align 16 %a1410 = alloca { ptr, i64, i64 }, align 16 %a1413 = alloca { ptr, i64, i64 }, align 16 %a1414 = alloca { ptr, i64, i64 }, align 16 %a1415 = alloca { ptr, i64, i64 }, align 16 %a1416 = alloca { ptr, i64, i64 }, align 16 %a1418 = alloca { ptr, i64, i64 }, align 16 %a1419 = alloca { ptr, i64, i64 }, align 16 %a1420 = alloca { ptr, i64, i64 }, align 16 %a1421 = alloca { ptr, i64, i64 }, align 16 %a1425 = alloca { ptr, i64, i64 }, align 16 %a1426 = alloca { ptr, i64, i64 }, align 16 %a1427 = alloca { ptr, i64, i64 }, align 16 %a1429 = alloca { ptr, i64, i64 }, align 16 %a1430 = alloca { ptr, i64, i64 }, align 16 %a1431 = alloca { ptr, i64, i64 }, align 16 %a1432 = alloca { ptr, i64, i64 }, align 16 %a1440 = alloca { ptr, i64, i64 }, align 16 %a1441 = alloca { ptr, i64, i64 }, align 16 %a1442 = alloca { ptr, i64, i64 }, align 16 %a1443 = alloca { ptr, i64, i64 }, align 16 %a1446 = alloca { ptr, i64, i64 }, align 16 %a1447 = alloca { ptr, i64, i64 }, align 16 %a1448 = alloca { ptr, i64, i64 }, align 16 %a1449 = alloca { ptr, i64, i64 }, align 16 %a1450 = alloca { ptr, i64, i64 }, align 16 %a1451 = alloca { ptr, i64, i64 }, align 16 %a1454 = alloca { ptr, i64, i64 }, align 16 %a1455 = alloca { ptr, i64, i64 }, align 16 %a1467 = alloca %S.ast.Type, align 16 %a1468 = alloca %S.ast.Type, align 16 %a1473 = alloca { ptr, i64, i64 }, align 16 %a1474 = alloca { ptr, i64, i64 }, align 16 %a1481 = alloca { ptr, i64, i64 }, align 16 %a1482 = alloca { ptr, i64, i64 }, align 16 %a1484 = alloca { ptr, i64, i64 }, align 16 %a1489 = alloca { ptr, i64, i64 }, align 16 %a1490 = alloca { ptr, i64, i64 }, align 16 %a1495 = alloca { ptr, i64, i64 }, align 16 %a1496 = alloca { ptr, i64, i64 }, align 16 %a1505 = alloca { ptr, i64, i64 }, align 16 %a1509 = alloca { ptr, i64, i64 }, align 16 %a1513 = alloca { ptr, i64, i64 }, align 16 %a1516 = alloca { ptr, i64, i64 }, align 16 %a1517 = alloca { ptr, i64, i64 }, align 16 %a1518 = alloca { ptr, i64, i64 }, align 16 %a1520 = alloca { ptr, i64, i64 }, align 16 %a1521 = alloca { ptr, i64, i64 }, align 16 %a1522 = alloca { ptr, i64, i64 }, align 16 %a1523 = alloca { ptr, i64, i64 }, align 16 %a1526 = alloca { ptr, i64, i64 }, align 16 %a1527 = alloca { ptr, i64, i64 }, align 16 %a1528 = alloca { ptr, i64, i64 }, align 16 %a1529 = alloca { ptr, i64, i64 }, align 16 %a1531 = alloca { ptr, i64, i64 }, align 16 %a1532 = alloca { ptr, i64, i64 }, align 16 %a1533 = alloca { ptr, i64, i64 }, align 16 %a1534 = alloca { ptr, i64, i64 }, align 16 %a1539 = alloca { ptr, i64, i64 }, align 16 %a1540 = alloca { ptr, i64, i64 }, align 16 %a1541 = alloca { ptr, i64, i64 }, align 16 %a1542 = alloca { ptr, i64, i64 }, align 16 %a1543 = alloca { ptr, i64, i64 }, align 16 %a1545 = alloca { ptr, i64, i64 }, align 16 %a1546 = alloca { ptr, i64, i64 }, align 16 %a1547 = alloca { ptr, i64, i64 }, align 16 %a1548 = alloca { ptr, i64, i64 }, align 16 %a1551 = alloca { ptr, i64, i64 }, align 16 %a1552 = alloca { ptr, i64, i64 }, align 16 %a1553 = alloca { ptr, i64, i64 }, align 16 %a1554 = alloca { ptr, i64, i64 }, align 16 %a1556 = alloca { ptr, i64, i64 }, align 16 %a1557 = alloca { ptr, i64, i64 }, align 16 %a1558 = alloca { ptr, i64, i64 }, align 16 %a1559 = alloca { ptr, i64, i64 }, align 16 %a1561 = alloca { ptr, i64, i64 }, align 16 %a1567 = alloca { ptr, i64, i64 }, align 16 %a1568 = alloca { ptr, i64, i64 }, align 16 %a1569 = alloca { ptr, i64, i64 }, align 16 %a1571 = alloca { ptr, i64, i64 }, align 16 %a1572 = alloca { ptr, i64, i64 }, align 16 %a1573 = alloca { ptr, i64, i64 }, align 16 %a1574 = alloca { ptr, i64, i64 }, align 16 %a1576 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 %t5 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 br i1 %t8, label %range8864, label %inrange8865 range8864: call void @finch_panic_index(ptr @.str.5668, i64 5404, i64 0, i64 %t7) unreachable inrange8865: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Type, ptr %t9, i64 0 %t11 = load %S.ast.Type, ptr %t10 store %S.ast.Type %t11, ptr %a12 call void @finch.copy.S_ast_Type(ptr %a13, ptr %a12) %t14 = load %S.ast.Type, ptr %a13 store %S.ast.Type %t14, ptr %a15 %t16 = load ptr, ptr %a1 %t17 = load %S.ast.Type, ptr %a15 %t18 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t16, %S.ast.Type %t17) store { ptr, i64, i64 } %t18, ptr %a19 %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a22 call void @finch_str_copy(ptr %a23, ptr %a22) %t24 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t24, ptr %a25 %t26 = load ptr, ptr %a1 %t27 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5669, i64 46, i64 0 }, ptr %a29 store { ptr, i64, i64 } %t27, ptr %a30 call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) %t31 = load { ptr, i64, i64 }, ptr %a28 store { ptr, i64, i64 } %t31, ptr %a33 store { ptr, i64, i64 } { ptr @.str.5670, i64 14, i64 0 }, ptr %a34 call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) store { ptr, i64, i64 } %t31, ptr %a35 call void @finch_str_drop(ptr %a35) %t36 = load { ptr, i64, i64 }, ptr %a32 %t37 = call { ptr, i64, i64 } @finch.gen.op(ptr %t26, { ptr, i64, i64 } %t36) store { ptr, i64, i64 } %t36, ptr %a38 call void @finch_str_drop(ptr %a38) store { ptr, i64, i64 } %t37, ptr %a39 %t40 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } { ptr @.str.5671, i64 4, i64 0 }, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 br i1 %t44, label %then8866, label %endif8868 then8866: %t45 = load ptr, ptr %a1 %t46 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t45, %S.ast.Node %t46, i64 1) %t47 = load ptr, ptr %a1 %t48 = load ptr, ptr %a1 %t49 = load ptr, ptr %a1 %t50 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t51 = load { ptr, i64, i64 }, ptr %t50 %t52 = extractvalue { ptr, i64, i64 } %t51, 1 %t53 = icmp uge i64 1, %t52 br i1 %t53, label %range8869, label %inrange8870 range8869: call void @finch_panic_index(ptr @.str.5672, i64 5410, i64 1, i64 %t52) unreachable inrange8870: %t54 = extractvalue { ptr, i64, i64 } %t51, 0 %t55 = getelementptr inbounds %S.ast.Node, ptr %t54, i64 1 %t56 = load %S.ast.Node, ptr %t55 %t57 = load %S.ast.Type, ptr %a15 %t58 = call %S.gen.Val @finch.gen.exprWant(ptr %t49, %S.ast.Node %t56, %S.ast.Type %t57) %t59 = load %S.ast.Type, ptr %a15 %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t61 = load { ptr, i64, i64 }, ptr %t60 %t62 = extractvalue { ptr, i64, i64 } %t61, 1 %t63 = icmp uge i64 1, %t62 br i1 %t63, label %range8871, label %inrange8872 range8871: call void @finch_panic_index(ptr @.str.5673, i64 5410, i64 1, i64 %t62) unreachable inrange8872: %t64 = extractvalue { ptr, i64, i64 } %t61, 0 %t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 1 %t66 = load %S.ast.Node, ptr %t65 %t67 = call %S.gen.Val @finch.gen.coerce(ptr %t48, %S.gen.Val %t58, %S.ast.Type %t59, %S.ast.Node %t66, { ptr, i64, i64 } { ptr @.str.5674, i64 11, i64 0 }) store %S.gen.Val %t58, ptr %a68 call void @finch.drop.S_gen_Val(ptr %a68) %t69 = call { ptr, i64, i64 } @finch.gen.own(ptr %t47, %S.gen.Val %t67) store %S.gen.Val %t67, ptr %a70 call void @finch.drop.S_gen_Val(ptr %a70) store { ptr, i64, i64 } %t69, ptr %a71 %t72 = load ptr, ptr %a1 %t73 = load { ptr, i64, i64 }, ptr %a39 %t74 = call { ptr, i64, i64 } @finch.gen.load(ptr %t72, { ptr, i64, i64 } { ptr @.str.5675, i64 3, i64 0 }, { ptr, i64, i64 } %t73) store { ptr, i64, i64 } %t74, ptr %a75 %t76 = load ptr, ptr %a1 %t77 = load { ptr, i64, i64 }, ptr %a75 store { ptr, i64, i64 } { ptr @.str.5676, i64 8, i64 0 }, ptr %a79 store { ptr, i64, i64 } %t77, ptr %a80 call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) %t81 = load { ptr, i64, i64 }, ptr %a78 store { ptr, i64, i64 } %t81, ptr %a83 store { ptr, i64, i64 } { ptr @.str.5677, i64 3, i64 0 }, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) store { ptr, i64, i64 } %t81, ptr %a85 call void @finch_str_drop(ptr %a85) %t86 = load { ptr, i64, i64 }, ptr %a82 %t87 = call { ptr, i64, i64 } @finch.gen.op(ptr %t76, { ptr, i64, i64 } %t86) store { ptr, i64, i64 } %t86, ptr %a88 call void @finch_str_drop(ptr %a88) store { ptr, i64, i64 } %t87, ptr %a89 %t90 = load ptr, ptr %a1 %t91 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5678, i64 33, i64 0 }, ptr %a93 store { ptr, i64, i64 } %t91, ptr %a94 call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) %t95 = load { ptr, i64, i64 }, ptr %a92 store { ptr, i64, i64 } %t95, ptr %a97 store { ptr, i64, i64 } { ptr @.str.5679, i64 6, i64 0 }, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) store { ptr, i64, i64 } %t95, ptr %a99 call void @finch_str_drop(ptr %a99) %t100 = load { ptr, i64, i64 }, ptr %a96 %t101 = load { ptr, i64, i64 }, ptr %a89 store { ptr, i64, i64 } %t100, ptr %a103 store { ptr, i64, i64 } %t101, ptr %a104 call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) store { ptr, i64, i64 } %t100, ptr %a105 call void @finch_str_drop(ptr %a105) %t106 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t106, ptr %a108 store { ptr, i64, i64 } { ptr @.str.5680, i64 6, i64 0 }, ptr %a109 call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) store { ptr, i64, i64 } %t106, ptr %a110 call void @finch_str_drop(ptr %a110) %t111 = load { ptr, i64, i64 }, ptr %a107 %t112 = load ptr, ptr %a1 %t113 = load %S.ast.Type, ptr %a15 %t114 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t112, %S.ast.Type %t113) store { ptr, i64, i64 } %t111, ptr %a116 store { ptr, i64, i64 } %t114, ptr %a117 call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) store { ptr, i64, i64 } %t111, ptr %a118 call void @finch_str_drop(ptr %a118) store { ptr, i64, i64 } %t114, ptr %a119 call void @finch_str_drop(ptr %a119) %t120 = load { ptr, i64, i64 }, ptr %a115 store { ptr, i64, i64 } %t120, ptr %a122 store { ptr, i64, i64 } { ptr @.str.5681, i64 1, i64 0 }, ptr %a123 call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) store { ptr, i64, i64 } %t120, ptr %a124 call void @finch_str_drop(ptr %a124) %t125 = load { ptr, i64, i64 }, ptr %a121 call void @finch.gen.emit(ptr %t90, { ptr, i64, i64 } %t125) store { ptr, i64, i64 } %t125, ptr %a126 call void @finch_str_drop(ptr %a126) %t127 = load ptr, ptr %a1 %t128 = load { ptr, i64, i64 }, ptr %a3 %t129 = call { ptr, i64, i64 } @finch.gen.load(ptr %t127, { ptr, i64, i64 } { ptr @.str.5682, i64 3, i64 0 }, { ptr, i64, i64 } %t128) store { ptr, i64, i64 } %t129, ptr %a130 %t131 = load ptr, ptr %a1 %t132 = load { ptr, i64, i64 }, ptr %a19 %t133 = load { ptr, i64, i64 }, ptr %a71 %t134 = load ptr, ptr %a1 %t135 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5683, i64 23, i64 0 }, ptr %a137 store { ptr, i64, i64 } %t135, ptr %a138 call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) %t139 = load { ptr, i64, i64 }, ptr %a136 store { ptr, i64, i64 } %t139, ptr %a141 store { ptr, i64, i64 } { ptr @.str.5684, i64 6, i64 0 }, ptr %a142 call void @finch_str_concat(ptr %a140, ptr %a141, ptr %a142) store { ptr, i64, i64 } %t139, ptr %a143 call void @finch_str_drop(ptr %a143) %t144 = load { ptr, i64, i64 }, ptr %a140 %t145 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t144, ptr %a147 store { ptr, i64, i64 } %t145, ptr %a148 call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) store { ptr, i64, i64 } %t144, ptr %a149 call void @finch_str_drop(ptr %a149) %t150 = load { ptr, i64, i64 }, ptr %a146 store { ptr, i64, i64 } %t150, ptr %a152 store { ptr, i64, i64 } { ptr @.str.5685, i64 6, i64 0 }, ptr %a153 call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) store { ptr, i64, i64 } %t150, ptr %a154 call void @finch_str_drop(ptr %a154) %t155 = load { ptr, i64, i64 }, ptr %a151 %t156 = load { ptr, i64, i64 }, ptr %a75 store { ptr, i64, i64 } %t155, ptr %a158 store { ptr, i64, i64 } %t156, ptr %a159 call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159) store { ptr, i64, i64 } %t155, ptr %a160 call void @finch_str_drop(ptr %a160) %t161 = load { ptr, i64, i64 }, ptr %a157 %t162 = call { ptr, i64, i64 } @finch.gen.op(ptr %t134, { ptr, i64, i64 } %t161) store { ptr, i64, i64 } %t161, ptr %a163 call void @finch_str_drop(ptr %a163) call void @finch.gen.store(ptr %t131, { ptr, i64, i64 } %t132, { ptr, i64, i64 } %t133, { ptr, i64, i64 } %t162) store { ptr, i64, i64 } %t162, ptr %a164 call void @finch_str_drop(ptr %a164) %t165 = load ptr, ptr %a1 %t166 = load { ptr, i64, i64 }, ptr %a89 %t167 = load { ptr, i64, i64 }, ptr %a39 call void @finch.gen.store(ptr %t165, { ptr, i64, i64 } { ptr @.str.5686, i64 3, i64 0 }, { ptr, i64, i64 } %t166, { ptr, i64, i64 } %t167) %t168 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5687, i64 4, i64 0 }) %t169 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t168, 1 call void @finch_str_drop(ptr %a130) call void @finch_str_drop(ptr %a89) call void @finch_str_drop(ptr %a75) call void @finch_str_drop(ptr %a71) call void @finch_str_drop(ptr %a39) call void @finch_str_drop(ptr %a25) call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t169 endif8868: %t170 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t170, ptr %a171 store { ptr, i64, i64 } { ptr @.str.5688, i64 3, i64 0 }, ptr %a172 %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) %t174 = icmp ne i32 %t173, 0 br i1 %t174, label %then8873, label %endif8875 then8873: %t175 = load ptr, ptr %a1 %t176 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t175, %S.ast.Node %t176, i64 0) %t177 = load ptr, ptr %a1 %t178 = load { ptr, i64, i64 }, ptr %a39 %t179 = call { ptr, i64, i64 } @finch.gen.load(ptr %t177, { ptr, i64, i64 } { ptr @.str.5689, i64 3, i64 0 }, { ptr, i64, i64 } %t178) store { ptr, i64, i64 } %t179, ptr %a180 %t181 = load ptr, ptr %a1 %t182 = load ptr, ptr %a1 %t183 = load { ptr, i64, i64 }, ptr %a180 store { ptr, i64, i64 } { ptr @.str.5690, i64 12, i64 0 }, ptr %a185 store { ptr, i64, i64 } %t183, ptr %a186 call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186) %t187 = load { ptr, i64, i64 }, ptr %a184 store { ptr, i64, i64 } %t187, ptr %a189 store { ptr, i64, i64 } { ptr @.str.5691, i64 3, i64 0 }, ptr %a190 call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) store { ptr, i64, i64 } %t187, ptr %a191 call void @finch_str_drop(ptr %a191) %t192 = load { ptr, i64, i64 }, ptr %a188 %t193 = call { ptr, i64, i64 } @finch.gen.op(ptr %t182, { ptr, i64, i64 } %t192) store { ptr, i64, i64 } %t192, ptr %a194 call void @finch_str_drop(ptr %a194) %t195 = load %S.ast.Node, ptr %a2 call void @finch.gen.panicIf(ptr %t181, { ptr, i64, i64 } %t193, { ptr, i64, i64 } { ptr @.str.5692, i64 23, i64 0 }, %S.ast.Node %t195) store { ptr, i64, i64 } %t193, ptr %a196 call void @finch_str_drop(ptr %a196) %t197 = load ptr, ptr %a1 %t198 = load { ptr, i64, i64 }, ptr %a180 store { ptr, i64, i64 } { ptr @.str.5693, i64 8, i64 0 }, ptr %a200 store { ptr, i64, i64 } %t198, ptr %a201 call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) %t202 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } %t202, ptr %a204 store { ptr, i64, i64 } { ptr @.str.5694, i64 3, i64 0 }, ptr %a205 call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) store { ptr, i64, i64 } %t202, ptr %a206 call void @finch_str_drop(ptr %a206) %t207 = load { ptr, i64, i64 }, ptr %a203 %t208 = call { ptr, i64, i64 } @finch.gen.op(ptr %t197, { ptr, i64, i64 } %t207) store { ptr, i64, i64 } %t207, ptr %a209 call void @finch_str_drop(ptr %a209) store { ptr, i64, i64 } %t208, ptr %a210 %t211 = load ptr, ptr %a1 %t212 = load { ptr, i64, i64 }, ptr %a3 %t213 = call { ptr, i64, i64 } @finch.gen.load(ptr %t211, { ptr, i64, i64 } { ptr @.str.5695, i64 3, i64 0 }, { ptr, i64, i64 } %t212) store { ptr, i64, i64 } %t213, ptr %a214 %t215 = load ptr, ptr %a1 %t216 = load { ptr, i64, i64 }, ptr %a19 %t217 = load ptr, ptr %a1 %t218 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5696, i64 23, i64 0 }, ptr %a220 store { ptr, i64, i64 } %t218, ptr %a221 call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) %t222 = load { ptr, i64, i64 }, ptr %a219 store { ptr, i64, i64 } %t222, ptr %a224 store { ptr, i64, i64 } { ptr @.str.5697, i64 6, i64 0 }, ptr %a225 call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) store { ptr, i64, i64 } %t222, ptr %a226 call void @finch_str_drop(ptr %a226) %t227 = load { ptr, i64, i64 }, ptr %a223 %t228 = load { ptr, i64, i64 }, ptr %a214 store { ptr, i64, i64 } %t227, ptr %a230 store { ptr, i64, i64 } %t228, ptr %a231 call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) store { ptr, i64, i64 } %t227, ptr %a232 call void @finch_str_drop(ptr %a232) %t233 = load { ptr, i64, i64 }, ptr %a229 store { ptr, i64, i64 } %t233, ptr %a235 store { ptr, i64, i64 } { ptr @.str.5698, i64 6, i64 0 }, ptr %a236 call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) store { ptr, i64, i64 } %t233, ptr %a237 call void @finch_str_drop(ptr %a237) %t238 = load { ptr, i64, i64 }, ptr %a234 %t239 = load { ptr, i64, i64 }, ptr %a210 store { ptr, i64, i64 } %t238, ptr %a241 store { ptr, i64, i64 } %t239, ptr %a242 call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) store { ptr, i64, i64 } %t238, ptr %a243 call void @finch_str_drop(ptr %a243) %t244 = load { ptr, i64, i64 }, ptr %a240 %t245 = call { ptr, i64, i64 } @finch.gen.op(ptr %t217, { ptr, i64, i64 } %t244) store { ptr, i64, i64 } %t244, ptr %a246 call void @finch_str_drop(ptr %a246) %t247 = call { ptr, i64, i64 } @finch.gen.load(ptr %t215, { ptr, i64, i64 } %t216, { ptr, i64, i64 } %t245) store { ptr, i64, i64 } %t245, ptr %a248 call void @finch_str_drop(ptr %a248) store { ptr, i64, i64 } %t247, ptr %a249 %t250 = load ptr, ptr %a1 %t251 = load { ptr, i64, i64 }, ptr %a210 %t252 = load { ptr, i64, i64 }, ptr %a39 call void @finch.gen.store(ptr %t250, { ptr, i64, i64 } { ptr @.str.5699, i64 3, i64 0 }, { ptr, i64, i64 } %t251, { ptr, i64, i64 } %t252) %t253 = load { ptr, i64, i64 }, ptr %a249 store { ptr, i64, i64 } %t253, ptr %a254 call void @finch_str_copy(ptr %a255, ptr %a254) %t256 = load { ptr, i64, i64 }, ptr %a255 %t257 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t256, 0 %t258 = load %S.ast.Type, ptr %a15 store %S.ast.Type %t258, ptr %a259 call void @finch.copy.S_ast_Type(ptr %a260, ptr %a259) %t261 = load %S.ast.Type, ptr %a260 %t262 = insertvalue %S.gen.Val %t257, %S.ast.Type %t261, 1 %t263 = load ptr, ptr %a1 %t264 = load %S.ast.Type, ptr %a15 %t265 = call i1 @finch.gen.owning(ptr %t263, %S.ast.Type %t264) %t266 = insertvalue %S.gen.Val %t262, i1 %t265, 2 call void @finch_str_drop(ptr %a249) call void @finch_str_drop(ptr %a214) call void @finch_str_drop(ptr %a210) call void @finch_str_drop(ptr %a180) call void @finch_str_drop(ptr %a39) call void @finch_str_drop(ptr %a25) call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t266 endif8875: %t267 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t267, ptr %a268 store { ptr, i64, i64 } { ptr @.str.5700, i64 5, i64 0 }, ptr %a269 %t270 = call i32 @finch_str_eq(ptr %a268, ptr %a269) %t271 = icmp ne i32 %t270, 0 br i1 %t271, label %then8876, label %endif8878 then8876: %t272 = load ptr, ptr %a1 %t273 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t272, %S.ast.Node %t273, i64 0) %t274 = load ptr, ptr %a1 %t275 = load { ptr, i64, i64 }, ptr %a3 %t276 = load %S.ast.Type, ptr %a4 call void @finch.gen.dropFrom(ptr %t274, { ptr, i64, i64 } %t275, %S.ast.Type %t276, { ptr, i64, i64 } { ptr @.str.5701, i64 1, i64 0 }) %t277 = load ptr, ptr %a1 %t278 = load { ptr, i64, i64 }, ptr %a39 call void @finch.gen.store(ptr %t277, { ptr, i64, i64 } { ptr @.str.5702, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5703, i64 1, i64 0 }, { ptr, i64, i64 } %t278) %t279 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5704, i64 4, i64 0 }) %t280 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t279, 1 call void @finch_str_drop(ptr %a39) call void @finch_str_drop(ptr %a25) call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t280 endif8878: %t281 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t281, ptr %a282 store { ptr, i64, i64 } { ptr @.str.5705, i64 4, i64 0 }, ptr %a283 %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) %t285 = icmp ne i32 %t284, 0 br label %logic.from8879 logic.from8879: br i1 %t285, label %logic.end8881, label %logic.rhs8880 logic.rhs8880: %t286 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t286, ptr %a287 store { ptr, i64, i64 } { ptr @.str.5706, i64 8, i64 0 }, ptr %a288 %t289 = call i32 @finch_str_eq(ptr %a287, ptr %a288) %t290 = icmp ne i32 %t289, 0 br label %logic.rend8882 logic.rend8882: br label %logic.end8881 logic.end8881: %t291 = phi i1 [ true, %logic.from8879 ], [ %t290, %logic.rend8882 ] br i1 %t291, label %then8883, label %endif8885 then8883: %t292 = load ptr, ptr %a1 %t293 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t292, %S.ast.Node %t293, i64 1) %t294 = load ptr, ptr %a1 %t295 = load ptr, ptr %a1 %t296 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t297 = load { ptr, i64, i64 }, ptr %t296 %t298 = extractvalue { ptr, i64, i64 } %t297, 1 %t299 = icmp uge i64 1, %t298 br i1 %t299, label %range8886, label %inrange8887 range8886: call void @finch_panic_index(ptr @.str.5707, i64 5437, i64 1, i64 %t298) unreachable inrange8887: %t300 = extractvalue { ptr, i64, i64 } %t297, 0 %t301 = getelementptr inbounds %S.ast.Node, ptr %t300, i64 1 %t302 = load %S.ast.Node, ptr %t301 %t303 = load %S.ast.Type, ptr %a15 %t304 = call %S.gen.Val @finch.gen.exprWant(ptr %t295, %S.ast.Node %t302, %S.ast.Type %t303) %t305 = load %S.ast.Type, ptr %a15 %t306 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t307 = load { ptr, i64, i64 }, ptr %t306 %t308 = extractvalue { ptr, i64, i64 } %t307, 1 %t309 = icmp uge i64 1, %t308 br i1 %t309, label %range8888, label %inrange8889 range8888: call void @finch_panic_index(ptr @.str.5708, i64 5437, i64 1, i64 %t308) unreachable inrange8889: %t310 = extractvalue { ptr, i64, i64 } %t307, 0 %t311 = getelementptr inbounds %S.ast.Node, ptr %t310, i64 1 %t312 = load %S.ast.Node, ptr %t311 %t313 = call %S.gen.Val @finch.gen.coerce(ptr %t294, %S.gen.Val %t304, %S.ast.Type %t305, %S.ast.Node %t312, { ptr, i64, i64 } { ptr @.str.5709, i64 21, i64 0 }) store %S.gen.Val %t304, ptr %a314 call void @finch.drop.S_gen_Val(ptr %a314) store %S.gen.Val %t313, ptr %a315 %t316 = load ptr, ptr %a1 %t317 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t316, { ptr, i64, i64 } { ptr @.str.5710, i64 3, i64 0 }) store { ptr, i64, i64 } %t317, ptr %a318 %t319 = load ptr, ptr %a1 %t320 = load { ptr, i64, i64 }, ptr %a318 call void @finch.gen.store(ptr %t319, { ptr, i64, i64 } { ptr @.str.5711, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5712, i64 2, i64 0 }, { ptr, i64, i64 } %t320) %t321 = load ptr, ptr %a1 %t322 = load { ptr, i64, i64 }, ptr %a39 %t323 = call { ptr, i64, i64 } @finch.gen.load(ptr %t321, { ptr, i64, i64 } { ptr @.str.5713, i64 3, i64 0 }, { ptr, i64, i64 } %t322) store { ptr, i64, i64 } %t323, ptr %a324 %t325 = load ptr, ptr %a1 %t326 = load { ptr, i64, i64 }, ptr %a3 %t327 = call { ptr, i64, i64 } @finch.gen.load(ptr %t325, { ptr, i64, i64 } { ptr @.str.5714, i64 3, i64 0 }, { ptr, i64, i64 } %t326) store { ptr, i64, i64 } %t327, ptr %a328 %t329 = load ptr, ptr %a1 %t330 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t329, { ptr, i64, i64 } { ptr @.str.5715, i64 3, i64 0 }) store { ptr, i64, i64 } %t330, ptr %a331 %t332 = load ptr, ptr %a1 %t333 = load { ptr, i64, i64 }, ptr %a331 call void @finch.gen.store(ptr %t332, { ptr, i64, i64 } { ptr @.str.5716, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5717, i64 1, i64 0 }, { ptr, i64, i64 } %t333) %t334 = load ptr, ptr %a1 %t335 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t334, { ptr, i64, i64 } { ptr @.str.5718, i64 9, i64 0 }) store { ptr, i64, i64 } %t335, ptr %a336 %t337 = load ptr, ptr %a1 %t338 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t337, { ptr, i64, i64 } { ptr @.str.5719, i64 9, i64 0 }) store { ptr, i64, i64 } %t338, ptr %a339 %t340 = load ptr, ptr %a1 %t341 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t340, { ptr, i64, i64 } { ptr @.str.5720, i64 8, i64 0 }) store { ptr, i64, i64 } %t341, ptr %a342 %t343 = load ptr, ptr %a1 %t344 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t343, { ptr, i64, i64 } { ptr @.str.5721, i64 9, i64 0 }) store { ptr, i64, i64 } %t344, ptr %a345 %t346 = load ptr, ptr %a1 %t347 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t346, { ptr, i64, i64 } { ptr @.str.5722, i64 8, i64 0 }) store { ptr, i64, i64 } %t347, ptr %a348 %t349 = load ptr, ptr %a1 %t350 = load { ptr, i64, i64 }, ptr %a336 call void @finch.gen.br(ptr %t349, { ptr, i64, i64 } %t350) %t351 = load ptr, ptr %a1 %t352 = load { ptr, i64, i64 }, ptr %a336 call void @finch.gen.label(ptr %t351, { ptr, i64, i64 } %t352) %t353 = load ptr, ptr %a1 %t354 = load { ptr, i64, i64 }, ptr %a331 %t355 = call { ptr, i64, i64 } @finch.gen.load(ptr %t353, { ptr, i64, i64 } { ptr @.str.5723, i64 3, i64 0 }, { ptr, i64, i64 } %t354) store { ptr, i64, i64 } %t355, ptr %a356 %t357 = load ptr, ptr %a1 %t358 = load { ptr, i64, i64 }, ptr %a356 store { ptr, i64, i64 } { ptr @.str.5724, i64 13, i64 0 }, ptr %a360 store { ptr, i64, i64 } %t358, ptr %a361 call void @finch_str_concat(ptr %a359, ptr %a360, ptr %a361) %t362 = load { ptr, i64, i64 }, ptr %a359 store { ptr, i64, i64 } %t362, ptr %a364 store { ptr, i64, i64 } { ptr @.str.5725, i64 2, i64 0 }, ptr %a365 call void @finch_str_concat(ptr %a363, ptr %a364, ptr %a365) store { ptr, i64, i64 } %t362, ptr %a366 call void @finch_str_drop(ptr %a366) %t367 = load { ptr, i64, i64 }, ptr %a363 %t368 = load { ptr, i64, i64 }, ptr %a324 store { ptr, i64, i64 } %t367, ptr %a370 store { ptr, i64, i64 } %t368, ptr %a371 call void @finch_str_concat(ptr %a369, ptr %a370, ptr %a371) store { ptr, i64, i64 } %t367, ptr %a372 call void @finch_str_drop(ptr %a372) %t373 = load { ptr, i64, i64 }, ptr %a369 %t374 = call { ptr, i64, i64 } @finch.gen.op(ptr %t357, { ptr, i64, i64 } %t373) store { ptr, i64, i64 } %t373, ptr %a375 call void @finch_str_drop(ptr %a375) store { ptr, i64, i64 } %t374, ptr %a376 %t377 = load ptr, ptr %a1 %t378 = load { ptr, i64, i64 }, ptr %a376 %t379 = load { ptr, i64, i64 }, ptr %a339 %t380 = load { ptr, i64, i64 }, ptr %a348 call void @finch.gen.condBr(ptr %t377, { ptr, i64, i64 } %t378, { ptr, i64, i64 } %t379, { ptr, i64, i64 } %t380) %t381 = load ptr, ptr %a1 %t382 = load { ptr, i64, i64 }, ptr %a339 call void @finch.gen.label(ptr %t381, { ptr, i64, i64 } %t382) %t383 = load ptr, ptr %a1 %t384 = load { ptr, i64, i64 }, ptr %a19 %t385 = load ptr, ptr %a1 %t386 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5726, i64 23, i64 0 }, ptr %a388 store { ptr, i64, i64 } %t386, ptr %a389 call void @finch_str_concat(ptr %a387, ptr %a388, ptr %a389) %t390 = load { ptr, i64, i64 }, ptr %a387 store { ptr, i64, i64 } %t390, ptr %a392 store { ptr, i64, i64 } { ptr @.str.5727, i64 6, i64 0 }, ptr %a393 call void @finch_str_concat(ptr %a391, ptr %a392, ptr %a393) store { ptr, i64, i64 } %t390, ptr %a394 call void @finch_str_drop(ptr %a394) %t395 = load { ptr, i64, i64 }, ptr %a391 %t396 = load { ptr, i64, i64 }, ptr %a328 store { ptr, i64, i64 } %t395, ptr %a398 store { ptr, i64, i64 } %t396, ptr %a399 call void @finch_str_concat(ptr %a397, ptr %a398, ptr %a399) store { ptr, i64, i64 } %t395, ptr %a400 call void @finch_str_drop(ptr %a400) %t401 = load { ptr, i64, i64 }, ptr %a397 store { ptr, i64, i64 } %t401, ptr %a403 store { ptr, i64, i64 } { ptr @.str.5728, i64 6, i64 0 }, ptr %a404 call void @finch_str_concat(ptr %a402, ptr %a403, ptr %a404) store { ptr, i64, i64 } %t401, ptr %a405 call void @finch_str_drop(ptr %a405) %t406 = load { ptr, i64, i64 }, ptr %a402 %t407 = load { ptr, i64, i64 }, ptr %a356 store { ptr, i64, i64 } %t406, ptr %a409 store { ptr, i64, i64 } %t407, ptr %a410 call void @finch_str_concat(ptr %a408, ptr %a409, ptr %a410) store { ptr, i64, i64 } %t406, ptr %a411 call void @finch_str_drop(ptr %a411) %t412 = load { ptr, i64, i64 }, ptr %a408 %t413 = call { ptr, i64, i64 } @finch.gen.op(ptr %t385, { ptr, i64, i64 } %t412) store { ptr, i64, i64 } %t412, ptr %a414 call void @finch_str_drop(ptr %a414) %t415 = call { ptr, i64, i64 } @finch.gen.load(ptr %t383, { ptr, i64, i64 } %t384, { ptr, i64, i64 } %t413) store { ptr, i64, i64 } %t413, ptr %a416 call void @finch_str_drop(ptr %a416) %t417 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t415, 0 %t418 = load %S.ast.Type, ptr %a15 store %S.ast.Type %t418, ptr %a419 call void @finch.copy.S_ast_Type(ptr %a420, ptr %a419) %t421 = load %S.ast.Type, ptr %a420 %t422 = insertvalue %S.gen.Val %t417, %S.ast.Type %t421, 1 store %S.gen.Val %t422, ptr %a423 %t424 = load ptr, ptr %a1 %t425 = load %S.gen.Val, ptr %a423 %t426 = getelementptr inbounds %S.gen.Val, ptr %a315, i32 0, i32 0 %t427 = load { ptr, i64, i64 }, ptr %t426 store { ptr, i64, i64 } %t427, ptr %a428 call void @finch_str_copy(ptr %a429, ptr %a428) %t430 = load { ptr, i64, i64 }, ptr %a429 %t431 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t430, 0 %t432 = getelementptr inbounds %S.gen.Val, ptr %a315, i32 0, i32 1 %t433 = load %S.ast.Type, ptr %t432 store %S.ast.Type %t433, ptr %a434 call void @finch.copy.S_ast_Type(ptr %a435, ptr %a434) %t436 = load %S.ast.Type, ptr %a435 %t437 = insertvalue %S.gen.Val %t431, %S.ast.Type %t436, 1 %t438 = load %S.ast.Node, ptr %a2 %t439 = call %S.gen.Val @finch.gen.compare(ptr %t424, { ptr, i64, i64 } { ptr @.str.5729, i64 2, i64 0 }, %S.gen.Val %t425, %S.gen.Val %t437, %S.ast.Node %t438) store %S.gen.Val %t437, ptr %a440 call void @finch.drop.S_gen_Val(ptr %a440) %t441 = extractvalue %S.gen.Val %t439, 0 store { ptr, i64, i64 } %t441, ptr %a442 call void @finch_str_copy(ptr %a443, ptr %a442) %t444 = load { ptr, i64, i64 }, ptr %a443 store %S.gen.Val %t439, ptr %a445 call void @finch.drop.S_gen_Val(ptr %a445) store { ptr, i64, i64 } %t444, ptr %a446 %t447 = load ptr, ptr %a1 %t448 = load { ptr, i64, i64 }, ptr %a446 %t449 = load { ptr, i64, i64 }, ptr %a342 %t450 = load { ptr, i64, i64 }, ptr %a345 call void @finch.gen.condBr(ptr %t447, { ptr, i64, i64 } %t448, { ptr, i64, i64 } %t449, { ptr, i64, i64 } %t450) %t451 = load ptr, ptr %a1 %t452 = load { ptr, i64, i64 }, ptr %a342 call void @finch.gen.label(ptr %t451, { ptr, i64, i64 } %t452) %t453 = load ptr, ptr %a1 %t454 = load { ptr, i64, i64 }, ptr %a356 %t455 = load { ptr, i64, i64 }, ptr %a318 call void @finch.gen.store(ptr %t453, { ptr, i64, i64 } { ptr @.str.5730, i64 3, i64 0 }, { ptr, i64, i64 } %t454, { ptr, i64, i64 } %t455) %t456 = load ptr, ptr %a1 %t457 = load { ptr, i64, i64 }, ptr %a348 call void @finch.gen.br(ptr %t456, { ptr, i64, i64 } %t457) %t458 = load ptr, ptr %a1 %t459 = load { ptr, i64, i64 }, ptr %a345 call void @finch.gen.label(ptr %t458, { ptr, i64, i64 } %t459) %t460 = load ptr, ptr %a1 %t461 = load ptr, ptr %a1 %t462 = load { ptr, i64, i64 }, ptr %a356 store { ptr, i64, i64 } { ptr @.str.5732, i64 8, i64 0 }, ptr %a464 store { ptr, i64, i64 } %t462, ptr %a465 call void @finch_str_concat(ptr %a463, ptr %a464, ptr %a465) %t466 = load { ptr, i64, i64 }, ptr %a463 store { ptr, i64, i64 } %t466, ptr %a468 store { ptr, i64, i64 } { ptr @.str.5733, i64 3, i64 0 }, ptr %a469 call void @finch_str_concat(ptr %a467, ptr %a468, ptr %a469) store { ptr, i64, i64 } %t466, ptr %a470 call void @finch_str_drop(ptr %a470) %t471 = load { ptr, i64, i64 }, ptr %a467 %t472 = call { ptr, i64, i64 } @finch.gen.op(ptr %t461, { ptr, i64, i64 } %t471) store { ptr, i64, i64 } %t471, ptr %a473 call void @finch_str_drop(ptr %a473) %t474 = load { ptr, i64, i64 }, ptr %a331 call void @finch.gen.store(ptr %t460, { ptr, i64, i64 } { ptr @.str.5731, i64 3, i64 0 }, { ptr, i64, i64 } %t472, { ptr, i64, i64 } %t474) store { ptr, i64, i64 } %t472, ptr %a475 call void @finch_str_drop(ptr %a475) %t476 = load ptr, ptr %a1 %t477 = load { ptr, i64, i64 }, ptr %a336 call void @finch.gen.br(ptr %t476, { ptr, i64, i64 } %t477) %t478 = load ptr, ptr %a1 %t479 = load { ptr, i64, i64 }, ptr %a348 call void @finch.gen.label(ptr %t478, { ptr, i64, i64 } %t479) %t480 = load ptr, ptr %a1 %t481 = load %S.gen.Val, ptr %a315 call void @finch.gen.release(ptr %t480, %S.gen.Val %t481) %t482 = load ptr, ptr %a1 %t483 = load { ptr, i64, i64 }, ptr %a318 %t484 = call { ptr, i64, i64 } @finch.gen.load(ptr %t482, { ptr, i64, i64 } { ptr @.str.5734, i64 3, i64 0 }, { ptr, i64, i64 } %t483) store { ptr, i64, i64 } %t484, ptr %a485 %t486 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t486, ptr %a487 store { ptr, i64, i64 } { ptr @.str.5735, i64 4, i64 0 }, ptr %a488 %t489 = call i32 @finch_str_eq(ptr %a487, ptr %a488) %t490 = icmp ne i32 %t489, 0 br i1 %t490, label %then8890, label %endif8892 then8890: %t491 = load { ptr, i64, i64 }, ptr %a485 store { ptr, i64, i64 } %t491, ptr %a492 call void @finch_str_copy(ptr %a493, ptr %a492) %t494 = load { ptr, i64, i64 }, ptr %a493 %t495 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t494, 0 %t496 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5736, i64 3, i64 0 }) %t497 = insertvalue %S.gen.Val %t495, %S.ast.Type %t496, 1 call void @finch_str_drop(ptr %a485) call void @finch_str_drop(ptr %a446) call void @finch.drop.S_gen_Val(ptr %a423) call void @finch_str_drop(ptr %a376) call void @finch_str_drop(ptr %a356) call void @finch_str_drop(ptr %a348) call void @finch_str_drop(ptr %a345) call void @finch_str_drop(ptr %a342) call void @finch_str_drop(ptr %a339) call void @finch_str_drop(ptr %a336) call void @finch_str_drop(ptr %a331) call void @finch_str_drop(ptr %a328) call void @finch_str_drop(ptr %a324) call void @finch_str_drop(ptr %a318) call void @finch.drop.S_gen_Val(ptr %a315) call void @finch_str_drop(ptr %a39) call void @finch_str_drop(ptr %a25) call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t497 endif8892: %t498 = load ptr, ptr %a1 %t499 = load { ptr, i64, i64 }, ptr %a485 store { ptr, i64, i64 } { ptr @.str.5737, i64 13, i64 0 }, ptr %a501 store { ptr, i64, i64 } %t499, ptr %a502 call void @finch_str_concat(ptr %a500, ptr %a501, ptr %a502) %t503 = load { ptr, i64, i64 }, ptr %a500 store { ptr, i64, i64 } %t503, ptr %a505 store { ptr, i64, i64 } { ptr @.str.5738, i64 3, i64 0 }, ptr %a506 call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506) store { ptr, i64, i64 } %t503, ptr %a507 call void @finch_str_drop(ptr %a507) %t508 = load { ptr, i64, i64 }, ptr %a504 %t509 = call { ptr, i64, i64 } @finch.gen.op(ptr %t498, { ptr, i64, i64 } %t508) store { ptr, i64, i64 } %t508, ptr %a510 call void @finch_str_drop(ptr %a510) %t511 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t509, 0 %t512 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5739, i64 4, i64 0 }) %t513 = insertvalue %S.gen.Val %t511, %S.ast.Type %t512, 1 call void @finch_str_drop(ptr %a485) call void @finch_str_drop(ptr %a446) call void @finch.drop.S_gen_Val(ptr %a423) call void @finch_str_drop(ptr %a376) call void @finch_str_drop(ptr %a356) call void @finch_str_drop(ptr %a348) call void @finch_str_drop(ptr %a345) call void @finch_str_drop(ptr %a342) call void @finch_str_drop(ptr %a339) call void @finch_str_drop(ptr %a336) call void @finch_str_drop(ptr %a331) call void @finch_str_drop(ptr %a328) call void @finch_str_drop(ptr %a324) call void @finch_str_drop(ptr %a318) call void @finch.drop.S_gen_Val(ptr %a315) call void @finch_str_drop(ptr %a39) call void @finch_str_drop(ptr %a25) call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t513 endif8885: %t514 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t514, ptr %a515 store { ptr, i64, i64 } { ptr @.str.5740, i64 4, i64 0 }, ptr %a516 %t517 = call i32 @finch_str_eq(ptr %a515, ptr %a516) %t518 = icmp ne i32 %t517, 0 br i1 %t518, label %then8893, label %endif8895 then8893: %t519 = load ptr, ptr %a1 %t520 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t519, %S.ast.Node %t520, i64 1) %t521 = getelementptr inbounds %S.ast.Type, ptr %a15, i32 0, i32 0 %t522 = load { ptr, i64, i64 }, ptr %t521 store { ptr, i64, i64 } %t522, ptr %a523 store { ptr, i64, i64 } { ptr @.str.5741, i64 3, i64 0 }, ptr %a524 %t525 = call i32 @finch_str_eq(ptr %a523, ptr %a524) %t526 = icmp eq i32 %t525, 0 br i1 %t526, label %then8896, label %endif8898 then8896: %t527 = load ptr, ptr %a1 %t528 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t527, %S.ast.Node %t528, { ptr, i64, i64 } { ptr @.str.5742, i64 31, i64 0 }) br label %endif8898 endif8898: %t529 = load ptr, ptr %a1 %t530 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t531 = load { ptr, i64, i64 }, ptr %t530 %t532 = extractvalue { ptr, i64, i64 } %t531, 1 %t533 = icmp uge i64 1, %t532 br i1 %t533, label %range8899, label %inrange8900 range8899: call void @finch_panic_index(ptr @.str.5743, i64 5477, i64 1, i64 %t532) unreachable inrange8900: %t534 = extractvalue { ptr, i64, i64 } %t531, 0 %t535 = getelementptr inbounds %S.ast.Node, ptr %t534, i64 1 %t536 = load %S.ast.Node, ptr %t535 %t537 = call %S.gen.Val @finch.gen.strArg(ptr %t529, %S.ast.Node %t536, { ptr, i64, i64 } { ptr @.str.5744, i64 13, i64 0 }) store %S.gen.Val %t537, ptr %a538 %t539 = load ptr, ptr %a1 %t540 = load %S.gen.Val, ptr %a538 %t541 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t539, %S.gen.Val %t540) store { ptr, i64, i64 } %t541, ptr %a542 %t543 = load ptr, ptr %a1 %t544 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t543) store { ptr, i64, i64 } %t544, ptr %a545 %t546 = load ptr, ptr %a1 %t547 = load { ptr, i64, i64 }, ptr %a545 store { ptr, i64, i64 } { ptr @.str.5745, i64 30, i64 0 }, ptr %a549 store { ptr, i64, i64 } %t547, ptr %a550 call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) %t551 = load { ptr, i64, i64 }, ptr %a548 store { ptr, i64, i64 } %t551, ptr %a553 store { ptr, i64, i64 } { ptr @.str.5746, i64 6, i64 0 }, ptr %a554 call void @finch_str_concat(ptr %a552, ptr %a553, ptr %a554) store { ptr, i64, i64 } %t551, ptr %a555 call void @finch_str_drop(ptr %a555) %t556 = load { ptr, i64, i64 }, ptr %a552 %t557 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t556, ptr %a559 store { ptr, i64, i64 } %t557, ptr %a560 call void @finch_str_concat(ptr %a558, ptr %a559, ptr %a560) store { ptr, i64, i64 } %t556, ptr %a561 call void @finch_str_drop(ptr %a561) %t562 = load { ptr, i64, i64 }, ptr %a558 store { ptr, i64, i64 } %t562, ptr %a564 store { ptr, i64, i64 } { ptr @.str.5747, i64 6, i64 0 }, ptr %a565 call void @finch_str_concat(ptr %a563, ptr %a564, ptr %a565) store { ptr, i64, i64 } %t562, ptr %a566 call void @finch_str_drop(ptr %a566) %t567 = load { ptr, i64, i64 }, ptr %a563 %t568 = load { ptr, i64, i64 }, ptr %a542 store { ptr, i64, i64 } %t567, ptr %a570 store { ptr, i64, i64 } %t568, ptr %a571 call void @finch_str_concat(ptr %a569, ptr %a570, ptr %a571) store { ptr, i64, i64 } %t567, ptr %a572 call void @finch_str_drop(ptr %a572) %t573 = load { ptr, i64, i64 }, ptr %a569 store { ptr, i64, i64 } %t573, ptr %a575 store { ptr, i64, i64 } { ptr @.str.5748, i64 1, i64 0 }, ptr %a576 call void @finch_str_concat(ptr %a574, ptr %a575, ptr %a576) store { ptr, i64, i64 } %t573, ptr %a577 call void @finch_str_drop(ptr %a577) %t578 = load { ptr, i64, i64 }, ptr %a574 call void @finch.gen.emit(ptr %t546, { ptr, i64, i64 } %t578) store { ptr, i64, i64 } %t578, ptr %a579 call void @finch_str_drop(ptr %a579) %t580 = load ptr, ptr %a1 %t581 = load %S.gen.Val, ptr %a538 call void @finch.gen.release(ptr %t580, %S.gen.Val %t581) %t582 = load ptr, ptr %a1 %t583 = load { ptr, i64, i64 }, ptr %a545 %t584 = call { ptr, i64, i64 } @finch.gen.load(ptr %t582, { ptr, i64, i64 } { ptr @.str.5749, i64 17, i64 0 }, { ptr, i64, i64 } %t583) %t585 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t584, 0 %t586 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5750, i64 3, i64 0 }) %t587 = insertvalue %S.gen.Val %t585, %S.ast.Type %t586, 1 %t588 = insertvalue %S.gen.Val %t587, i1 true, 2 call void @finch_str_drop(ptr %a545) call void @finch_str_drop(ptr %a542) call void @finch.drop.S_gen_Val(ptr %a538) call void @finch_str_drop(ptr %a39) call void @finch_str_drop(ptr %a25) call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t588 endif8895: %t589 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t589, ptr %a590 store { ptr, i64, i64 } { ptr @.str.5751, i64 6, i64 0 }, ptr %a591 %t592 = call i32 @finch_str_eq(ptr %a590, ptr %a591) %t593 = icmp ne i32 %t592, 0 br i1 %t593, label %then8901, label %endif8903 then8901: %t594 = load ptr, ptr %a1 %t595 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t594, %S.ast.Node %t595, i64 2) %t596 = load ptr, ptr %a1 %t597 = load ptr, ptr %a1 %t598 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t599 = load { ptr, i64, i64 }, ptr %t598 %t600 = extractvalue { ptr, i64, i64 } %t599, 1 %t601 = icmp uge i64 1, %t600 br i1 %t601, label %range8904, label %inrange8905 range8904: call void @finch_panic_index(ptr @.str.5752, i64 5486, i64 1, i64 %t600) unreachable inrange8905: %t602 = extractvalue { ptr, i64, i64 } %t599, 0 %t603 = getelementptr inbounds %S.ast.Node, ptr %t602, i64 1 %t604 = load %S.ast.Node, ptr %t603 %t605 = call %S.gen.Val @finch.gen.expr(ptr %t597, %S.ast.Node %t604) %t606 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5753, i64 3, i64 0 }) %t607 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t608 = load { ptr, i64, i64 }, ptr %t607 %t609 = extractvalue { ptr, i64, i64 } %t608, 1 %t610 = icmp uge i64 1, %t609 br i1 %t610, label %range8906, label %inrange8907 range8906: call void @finch_panic_index(ptr @.str.5754, i64 5486, i64 1, i64 %t609) unreachable inrange8907: %t611 = extractvalue { ptr, i64, i64 } %t608, 0 %t612 = getelementptr inbounds %S.ast.Node, ptr %t611, i64 1 %t613 = load %S.ast.Node, ptr %t612 %t614 = call %S.gen.Val @finch.gen.coerce(ptr %t596, %S.gen.Val %t605, %S.ast.Type %t606, %S.ast.Node %t613, { ptr, i64, i64 } { ptr @.str.5755, i64 12, i64 0 }) store %S.gen.Val %t605, ptr %a615 call void @finch.drop.S_gen_Val(ptr %a615) store %S.ast.Type %t606, ptr %a616 call void @finch.drop.S_ast_Type(ptr %a616) %t617 = extractvalue %S.gen.Val %t614, 0 store { ptr, i64, i64 } %t617, ptr %a618 call void @finch_str_copy(ptr %a619, ptr %a618) %t620 = load { ptr, i64, i64 }, ptr %a619 store %S.gen.Val %t614, ptr %a621 call void @finch.drop.S_gen_Val(ptr %a621) store { ptr, i64, i64 } %t620, ptr %a622 %t623 = load ptr, ptr %a1 %t624 = load ptr, ptr %a1 %t625 = load ptr, ptr %a1 %t626 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t627 = load { ptr, i64, i64 }, ptr %t626 %t628 = extractvalue { ptr, i64, i64 } %t627, 1 %t629 = icmp uge i64 2, %t628 br i1 %t629, label %range8908, label %inrange8909 range8908: call void @finch_panic_index(ptr @.str.5756, i64 5487, i64 2, i64 %t628) unreachable inrange8909: %t630 = extractvalue { ptr, i64, i64 } %t627, 0 %t631 = getelementptr inbounds %S.ast.Node, ptr %t630, i64 2 %t632 = load %S.ast.Node, ptr %t631 %t633 = load %S.ast.Type, ptr %a15 %t634 = call %S.gen.Val @finch.gen.exprWant(ptr %t625, %S.ast.Node %t632, %S.ast.Type %t633) %t635 = load %S.ast.Type, ptr %a15 %t636 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t637 = load { ptr, i64, i64 }, ptr %t636 %t638 = extractvalue { ptr, i64, i64 } %t637, 1 %t639 = icmp uge i64 2, %t638 br i1 %t639, label %range8910, label %inrange8911 range8910: call void @finch_panic_index(ptr @.str.5757, i64 5487, i64 2, i64 %t638) unreachable inrange8911: %t640 = extractvalue { ptr, i64, i64 } %t637, 0 %t641 = getelementptr inbounds %S.ast.Node, ptr %t640, i64 2 %t642 = load %S.ast.Node, ptr %t641 %t643 = call %S.gen.Val @finch.gen.coerce(ptr %t624, %S.gen.Val %t634, %S.ast.Type %t635, %S.ast.Node %t642, { ptr, i64, i64 } { ptr @.str.5758, i64 11, i64 0 }) store %S.gen.Val %t634, ptr %a644 call void @finch.drop.S_gen_Val(ptr %a644) %t645 = call { ptr, i64, i64 } @finch.gen.own(ptr %t623, %S.gen.Val %t643) store %S.gen.Val %t643, ptr %a646 call void @finch.drop.S_gen_Val(ptr %a646) store { ptr, i64, i64 } %t645, ptr %a647 %t648 = load ptr, ptr %a1 %t649 = load ptr, ptr %a1 %t650 = icmp eq ptr %t649, null br i1 %t650, label %panic8912, label %ok8913 panic8912: call void @finch_panic(ptr @.str.5759, i64 5488, ptr @.str.5760) unreachable ok8913: %t651 = getelementptr inbounds %S.gen.Gen, ptr %t649, i32 0, i32 1 %t652 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t653 = load i64, ptr %t652 %t654 = load { ptr, i64, i64 }, ptr %t651 %t655 = extractvalue { ptr, i64, i64 } %t654, 1 %t656 = icmp uge i64 %t653, %t655 br i1 %t656, label %range8914, label %inrange8915 range8914: call void @finch_panic_index(ptr @.str.5761, i64 5488, i64 %t653, i64 %t655) unreachable inrange8915: %t657 = extractvalue { ptr, i64, i64 } %t654, 0 %t658 = getelementptr inbounds { ptr, i64, i64 }, ptr %t657, i64 %t653 %t659 = load { ptr, i64, i64 }, ptr %t658 %t660 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t648, { ptr, i64, i64 } %t659) store { ptr, i64, i64 } %t660, ptr %a661 %t662 = load ptr, ptr %a1 %t663 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5762, i64 36, i64 0 }, ptr %a665 store { ptr, i64, i64 } %t663, ptr %a666 call void @finch_str_concat(ptr %a664, ptr %a665, ptr %a666) %t667 = load { ptr, i64, i64 }, ptr %a664 store { ptr, i64, i64 } %t667, ptr %a669 store { ptr, i64, i64 } { ptr @.str.5763, i64 6, i64 0 }, ptr %a670 call void @finch_str_concat(ptr %a668, ptr %a669, ptr %a670) store { ptr, i64, i64 } %t667, ptr %a671 call void @finch_str_drop(ptr %a671) %t672 = load { ptr, i64, i64 }, ptr %a668 %t673 = load { ptr, i64, i64 }, ptr %a622 store { ptr, i64, i64 } %t672, ptr %a675 store { ptr, i64, i64 } %t673, ptr %a676 call void @finch_str_concat(ptr %a674, ptr %a675, ptr %a676) store { ptr, i64, i64 } %t672, ptr %a677 call void @finch_str_drop(ptr %a677) %t678 = load { ptr, i64, i64 }, ptr %a674 store { ptr, i64, i64 } %t678, ptr %a680 store { ptr, i64, i64 } { ptr @.str.5764, i64 6, i64 0 }, ptr %a681 call void @finch_str_concat(ptr %a679, ptr %a680, ptr %a681) store { ptr, i64, i64 } %t678, ptr %a682 call void @finch_str_drop(ptr %a682) %t683 = load { ptr, i64, i64 }, ptr %a679 %t684 = load ptr, ptr %a1 %t685 = load %S.ast.Type, ptr %a15 %t686 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t684, %S.ast.Type %t685) store { ptr, i64, i64 } %t683, ptr %a688 store { ptr, i64, i64 } %t686, ptr %a689 call void @finch_str_concat(ptr %a687, ptr %a688, ptr %a689) store { ptr, i64, i64 } %t683, ptr %a690 call void @finch_str_drop(ptr %a690) store { ptr, i64, i64 } %t686, ptr %a691 call void @finch_str_drop(ptr %a691) %t692 = load { ptr, i64, i64 }, ptr %a687 store { ptr, i64, i64 } %t692, ptr %a694 store { ptr, i64, i64 } { ptr @.str.5765, i64 6, i64 0 }, ptr %a695 call void @finch_str_concat(ptr %a693, ptr %a694, ptr %a695) store { ptr, i64, i64 } %t692, ptr %a696 call void @finch_str_drop(ptr %a696) %t697 = load { ptr, i64, i64 }, ptr %a693 %t698 = load { ptr, i64, i64 }, ptr %a661 store { ptr, i64, i64 } %t697, ptr %a700 store { ptr, i64, i64 } %t698, ptr %a701 call void @finch_str_concat(ptr %a699, ptr %a700, ptr %a701) store { ptr, i64, i64 } %t697, ptr %a702 call void @finch_str_drop(ptr %a702) %t703 = load { ptr, i64, i64 }, ptr %a699 store { ptr, i64, i64 } %t703, ptr %a705 store { ptr, i64, i64 } { ptr @.str.5766, i64 6, i64 0 }, ptr %a706 call void @finch_str_concat(ptr %a704, ptr %a705, ptr %a706) store { ptr, i64, i64 } %t703, ptr %a707 call void @finch_str_drop(ptr %a707) %t708 = load { ptr, i64, i64 }, ptr %a704 %t709 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t710 = load i64, ptr %t709 call void @finch_str_from_int(ptr %a711, i64 %t710) %t712 = load { ptr, i64, i64 }, ptr %a711 store { ptr, i64, i64 } %t708, ptr %a714 store { ptr, i64, i64 } %t712, ptr %a715 call void @finch_str_concat(ptr %a713, ptr %a714, ptr %a715) store { ptr, i64, i64 } %t708, ptr %a716 call void @finch_str_drop(ptr %a716) store { ptr, i64, i64 } %t712, ptr %a717 call void @finch_str_drop(ptr %a717) %t718 = load { ptr, i64, i64 }, ptr %a713 store { ptr, i64, i64 } %t718, ptr %a720 store { ptr, i64, i64 } { ptr @.str.5767, i64 1, i64 0 }, ptr %a721 call void @finch_str_concat(ptr %a719, ptr %a720, ptr %a721) store { ptr, i64, i64 } %t718, ptr %a722 call void @finch_str_drop(ptr %a722) %t723 = load { ptr, i64, i64 }, ptr %a719 call void @finch.gen.emit(ptr %t662, { ptr, i64, i64 } %t723) store { ptr, i64, i64 } %t723, ptr %a724 call void @finch_str_drop(ptr %a724) %t725 = load ptr, ptr %a1 %t726 = load { ptr, i64, i64 }, ptr %a3 %t727 = call { ptr, i64, i64 } @finch.gen.load(ptr %t725, { ptr, i64, i64 } { ptr @.str.5768, i64 3, i64 0 }, { ptr, i64, i64 } %t726) store { ptr, i64, i64 } %t727, ptr %a728 %t729 = load ptr, ptr %a1 %t730 = load { ptr, i64, i64 }, ptr %a19 %t731 = load { ptr, i64, i64 }, ptr %a647 %t732 = load ptr, ptr %a1 %t733 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5769, i64 23, i64 0 }, ptr %a735 store { ptr, i64, i64 } %t733, ptr %a736 call void @finch_str_concat(ptr %a734, ptr %a735, ptr %a736) %t737 = load { ptr, i64, i64 }, ptr %a734 store { ptr, i64, i64 } %t737, ptr %a739 store { ptr, i64, i64 } { ptr @.str.5770, i64 6, i64 0 }, ptr %a740 call void @finch_str_concat(ptr %a738, ptr %a739, ptr %a740) store { ptr, i64, i64 } %t737, ptr %a741 call void @finch_str_drop(ptr %a741) %t742 = load { ptr, i64, i64 }, ptr %a738 %t743 = load { ptr, i64, i64 }, ptr %a728 store { ptr, i64, i64 } %t742, ptr %a745 store { ptr, i64, i64 } %t743, ptr %a746 call void @finch_str_concat(ptr %a744, ptr %a745, ptr %a746) store { ptr, i64, i64 } %t742, ptr %a747 call void @finch_str_drop(ptr %a747) %t748 = load { ptr, i64, i64 }, ptr %a744 store { ptr, i64, i64 } %t748, ptr %a750 store { ptr, i64, i64 } { ptr @.str.5771, i64 6, i64 0 }, ptr %a751 call void @finch_str_concat(ptr %a749, ptr %a750, ptr %a751) store { ptr, i64, i64 } %t748, ptr %a752 call void @finch_str_drop(ptr %a752) %t753 = load { ptr, i64, i64 }, ptr %a749 %t754 = load { ptr, i64, i64 }, ptr %a622 store { ptr, i64, i64 } %t753, ptr %a756 store { ptr, i64, i64 } %t754, ptr %a757 call void @finch_str_concat(ptr %a755, ptr %a756, ptr %a757) store { ptr, i64, i64 } %t753, ptr %a758 call void @finch_str_drop(ptr %a758) %t759 = load { ptr, i64, i64 }, ptr %a755 %t760 = call { ptr, i64, i64 } @finch.gen.op(ptr %t732, { ptr, i64, i64 } %t759) store { ptr, i64, i64 } %t759, ptr %a761 call void @finch_str_drop(ptr %a761) call void @finch.gen.store(ptr %t729, { ptr, i64, i64 } %t730, { ptr, i64, i64 } %t731, { ptr, i64, i64 } %t760) store { ptr, i64, i64 } %t760, ptr %a762 call void @finch_str_drop(ptr %a762) %t763 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5772, i64 4, i64 0 }) %t764 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t763, 1 call void @finch_str_drop(ptr %a728) call void @finch_str_drop(ptr %a661) call void @finch_str_drop(ptr %a647) call void @finch_str_drop(ptr %a622) call void @finch_str_drop(ptr %a39) call void @finch_str_drop(ptr %a25) call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t764 endif8903: %t765 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t765, ptr %a766 store { ptr, i64, i64 } { ptr @.str.5773, i64 6, i64 0 }, ptr %a767 %t768 = call i32 @finch_str_eq(ptr %a766, ptr %a767) %t769 = icmp ne i32 %t768, 0 br i1 %t769, label %then8916, label %endif8918 then8916: %t770 = load ptr, ptr %a1 %t771 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t770, %S.ast.Node %t771, i64 1) %t772 = load ptr, ptr %a1 %t773 = load ptr, ptr %a1 %t774 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t775 = load { ptr, i64, i64 }, ptr %t774 %t776 = extractvalue { ptr, i64, i64 } %t775, 1 %t777 = icmp uge i64 1, %t776 br i1 %t777, label %range8919, label %inrange8920 range8919: call void @finch_panic_index(ptr @.str.5774, i64 5496, i64 1, i64 %t776) unreachable inrange8920: %t778 = extractvalue { ptr, i64, i64 } %t775, 0 %t779 = getelementptr inbounds %S.ast.Node, ptr %t778, i64 1 %t780 = load %S.ast.Node, ptr %t779 %t781 = call %S.gen.Val @finch.gen.expr(ptr %t773, %S.ast.Node %t780) %t782 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5775, i64 3, i64 0 }) %t783 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t784 = load { ptr, i64, i64 }, ptr %t783 %t785 = extractvalue { ptr, i64, i64 } %t784, 1 %t786 = icmp uge i64 1, %t785 br i1 %t786, label %range8921, label %inrange8922 range8921: call void @finch_panic_index(ptr @.str.5776, i64 5496, i64 1, i64 %t785) unreachable inrange8922: %t787 = extractvalue { ptr, i64, i64 } %t784, 0 %t788 = getelementptr inbounds %S.ast.Node, ptr %t787, i64 1 %t789 = load %S.ast.Node, ptr %t788 %t790 = call %S.gen.Val @finch.gen.coerce(ptr %t772, %S.gen.Val %t781, %S.ast.Type %t782, %S.ast.Node %t789, { ptr, i64, i64 } { ptr @.str.5777, i64 12, i64 0 }) store %S.gen.Val %t781, ptr %a791 call void @finch.drop.S_gen_Val(ptr %a791) store %S.ast.Type %t782, ptr %a792 call void @finch.drop.S_ast_Type(ptr %a792) %t793 = extractvalue %S.gen.Val %t790, 0 store { ptr, i64, i64 } %t793, ptr %a794 call void @finch_str_copy(ptr %a795, ptr %a794) %t796 = load { ptr, i64, i64 }, ptr %a795 store %S.gen.Val %t790, ptr %a797 call void @finch.drop.S_gen_Val(ptr %a797) store { ptr, i64, i64 } %t796, ptr %a798 %t799 = load ptr, ptr %a1 %t800 = load { ptr, i64, i64 }, ptr %a798 %t801 = load ptr, ptr %a1 %t802 = load { ptr, i64, i64 }, ptr %a39 %t803 = call { ptr, i64, i64 } @finch.gen.load(ptr %t801, { ptr, i64, i64 } { ptr @.str.5778, i64 3, i64 0 }, { ptr, i64, i64 } %t802) %t804 = load %S.ast.Node, ptr %a2 call void @finch.gen.boundsCheck(ptr %t799, { ptr, i64, i64 } %t800, { ptr, i64, i64 } %t803, %S.ast.Node %t804) store { ptr, i64, i64 } %t803, ptr %a805 call void @finch_str_drop(ptr %a805) %t806 = load ptr, ptr %a1 %t807 = load { ptr, i64, i64 }, ptr %a3 %t808 = call { ptr, i64, i64 } @finch.gen.load(ptr %t806, { ptr, i64, i64 } { ptr @.str.5779, i64 3, i64 0 }, { ptr, i64, i64 } %t807) store { ptr, i64, i64 } %t808, ptr %a809 %t810 = load ptr, ptr %a1 %t811 = load { ptr, i64, i64 }, ptr %a19 %t812 = load ptr, ptr %a1 %t813 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5780, i64 23, i64 0 }, ptr %a815 store { ptr, i64, i64 } %t813, ptr %a816 call void @finch_str_concat(ptr %a814, ptr %a815, ptr %a816) %t817 = load { ptr, i64, i64 }, ptr %a814 store { ptr, i64, i64 } %t817, ptr %a819 store { ptr, i64, i64 } { ptr @.str.5781, i64 6, i64 0 }, ptr %a820 call void @finch_str_concat(ptr %a818, ptr %a819, ptr %a820) store { ptr, i64, i64 } %t817, ptr %a821 call void @finch_str_drop(ptr %a821) %t822 = load { ptr, i64, i64 }, ptr %a818 %t823 = load { ptr, i64, i64 }, ptr %a809 store { ptr, i64, i64 } %t822, ptr %a825 store { ptr, i64, i64 } %t823, ptr %a826 call void @finch_str_concat(ptr %a824, ptr %a825, ptr %a826) store { ptr, i64, i64 } %t822, ptr %a827 call void @finch_str_drop(ptr %a827) %t828 = load { ptr, i64, i64 }, ptr %a824 store { ptr, i64, i64 } %t828, ptr %a830 store { ptr, i64, i64 } { ptr @.str.5782, i64 6, i64 0 }, ptr %a831 call void @finch_str_concat(ptr %a829, ptr %a830, ptr %a831) store { ptr, i64, i64 } %t828, ptr %a832 call void @finch_str_drop(ptr %a832) %t833 = load { ptr, i64, i64 }, ptr %a829 %t834 = load { ptr, i64, i64 }, ptr %a798 store { ptr, i64, i64 } %t833, ptr %a836 store { ptr, i64, i64 } %t834, ptr %a837 call void @finch_str_concat(ptr %a835, ptr %a836, ptr %a837) store { ptr, i64, i64 } %t833, ptr %a838 call void @finch_str_drop(ptr %a838) %t839 = load { ptr, i64, i64 }, ptr %a835 %t840 = call { ptr, i64, i64 } @finch.gen.op(ptr %t812, { ptr, i64, i64 } %t839) store { ptr, i64, i64 } %t839, ptr %a841 call void @finch_str_drop(ptr %a841) %t842 = call { ptr, i64, i64 } @finch.gen.load(ptr %t810, { ptr, i64, i64 } %t811, { ptr, i64, i64 } %t840) store { ptr, i64, i64 } %t840, ptr %a843 call void @finch_str_drop(ptr %a843) store { ptr, i64, i64 } %t842, ptr %a844 %t845 = load ptr, ptr %a1 %t846 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5783, i64 36, i64 0 }, ptr %a848 store { ptr, i64, i64 } %t846, ptr %a849 call void @finch_str_concat(ptr %a847, ptr %a848, ptr %a849) %t850 = load { ptr, i64, i64 }, ptr %a847 store { ptr, i64, i64 } %t850, ptr %a852 store { ptr, i64, i64 } { ptr @.str.5784, i64 6, i64 0 }, ptr %a853 call void @finch_str_concat(ptr %a851, ptr %a852, ptr %a853) store { ptr, i64, i64 } %t850, ptr %a854 call void @finch_str_drop(ptr %a854) %t855 = load { ptr, i64, i64 }, ptr %a851 %t856 = load { ptr, i64, i64 }, ptr %a798 store { ptr, i64, i64 } %t855, ptr %a858 store { ptr, i64, i64 } %t856, ptr %a859 call void @finch_str_concat(ptr %a857, ptr %a858, ptr %a859) store { ptr, i64, i64 } %t855, ptr %a860 call void @finch_str_drop(ptr %a860) %t861 = load { ptr, i64, i64 }, ptr %a857 store { ptr, i64, i64 } %t861, ptr %a863 store { ptr, i64, i64 } { ptr @.str.5785, i64 6, i64 0 }, ptr %a864 call void @finch_str_concat(ptr %a862, ptr %a863, ptr %a864) store { ptr, i64, i64 } %t861, ptr %a865 call void @finch_str_drop(ptr %a865) %t866 = load { ptr, i64, i64 }, ptr %a862 %t867 = load ptr, ptr %a1 %t868 = load %S.ast.Type, ptr %a15 %t869 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t867, %S.ast.Type %t868) store { ptr, i64, i64 } %t866, ptr %a871 store { ptr, i64, i64 } %t869, ptr %a872 call void @finch_str_concat(ptr %a870, ptr %a871, ptr %a872) store { ptr, i64, i64 } %t866, ptr %a873 call void @finch_str_drop(ptr %a873) store { ptr, i64, i64 } %t869, ptr %a874 call void @finch_str_drop(ptr %a874) %t875 = load { ptr, i64, i64 }, ptr %a870 store { ptr, i64, i64 } %t875, ptr %a877 store { ptr, i64, i64 } { ptr @.str.5786, i64 1, i64 0 }, ptr %a878 call void @finch_str_concat(ptr %a876, ptr %a877, ptr %a878) store { ptr, i64, i64 } %t875, ptr %a879 call void @finch_str_drop(ptr %a879) %t880 = load { ptr, i64, i64 }, ptr %a876 call void @finch.gen.emit(ptr %t845, { ptr, i64, i64 } %t880) store { ptr, i64, i64 } %t880, ptr %a881 call void @finch_str_drop(ptr %a881) %t882 = load { ptr, i64, i64 }, ptr %a844 store { ptr, i64, i64 } %t882, ptr %a883 call void @finch_str_copy(ptr %a884, ptr %a883) %t885 = load { ptr, i64, i64 }, ptr %a884 %t886 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t885, 0 %t887 = load %S.ast.Type, ptr %a15 store %S.ast.Type %t887, ptr %a888 call void @finch.copy.S_ast_Type(ptr %a889, ptr %a888) %t890 = load %S.ast.Type, ptr %a889 %t891 = insertvalue %S.gen.Val %t886, %S.ast.Type %t890, 1 %t892 = load ptr, ptr %a1 %t893 = load %S.ast.Type, ptr %a15 %t894 = call i1 @finch.gen.owning(ptr %t892, %S.ast.Type %t893) %t895 = insertvalue %S.gen.Val %t891, i1 %t894, 2 call void @finch_str_drop(ptr %a844) call void @finch_str_drop(ptr %a809) call void @finch_str_drop(ptr %a798) call void @finch_str_drop(ptr %a39) call void @finch_str_drop(ptr %a25) call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t895 endif8918: %t896 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t896, ptr %a897 store { ptr, i64, i64 } { ptr @.str.5787, i64 6, i64 0 }, ptr %a898 %t899 = call i32 @finch_str_eq(ptr %a897, ptr %a898) %t900 = icmp ne i32 %t899, 0 br i1 %t900, label %then8923, label %endif8925 then8923: %t901 = load ptr, ptr %a1 %t902 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t901, %S.ast.Node %t902, i64 1) %t903 = load ptr, ptr %a1 %t904 = load ptr, ptr %a1 %t905 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t906 = load { ptr, i64, i64 }, ptr %t905 %t907 = extractvalue { ptr, i64, i64 } %t906, 1 %t908 = icmp uge i64 1, %t907 br i1 %t908, label %range8926, label %inrange8927 range8926: call void @finch_panic_index(ptr @.str.5788, i64 5505, i64 1, i64 %t907) unreachable inrange8927: %t909 = extractvalue { ptr, i64, i64 } %t906, 0 %t910 = getelementptr inbounds %S.ast.Node, ptr %t909, i64 1 %t911 = load %S.ast.Node, ptr %t910 %t912 = call %S.gen.Val @finch.gen.expr(ptr %t904, %S.ast.Node %t911) %t913 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5789, i64 3, i64 0 }) %t914 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t915 = load { ptr, i64, i64 }, ptr %t914 %t916 = extractvalue { ptr, i64, i64 } %t915, 1 %t917 = icmp uge i64 1, %t916 br i1 %t917, label %range8928, label %inrange8929 range8928: call void @finch_panic_index(ptr @.str.5790, i64 5505, i64 1, i64 %t916) unreachable inrange8929: %t918 = extractvalue { ptr, i64, i64 } %t915, 0 %t919 = getelementptr inbounds %S.ast.Node, ptr %t918, i64 1 %t920 = load %S.ast.Node, ptr %t919 %t921 = call %S.gen.Val @finch.gen.coerce(ptr %t903, %S.gen.Val %t912, %S.ast.Type %t913, %S.ast.Node %t920, { ptr, i64, i64 } { ptr @.str.5791, i64 14, i64 0 }) store %S.gen.Val %t912, ptr %a922 call void @finch.drop.S_gen_Val(ptr %a922) store %S.ast.Type %t913, ptr %a923 call void @finch.drop.S_ast_Type(ptr %a923) %t924 = extractvalue %S.gen.Val %t921, 0 store { ptr, i64, i64 } %t924, ptr %a925 call void @finch_str_copy(ptr %a926, ptr %a925) %t927 = load { ptr, i64, i64 }, ptr %a926 store %S.gen.Val %t921, ptr %a928 call void @finch.drop.S_gen_Val(ptr %a928) store { ptr, i64, i64 } %t927, ptr %a929 %t930 = load ptr, ptr %a1 %t931 = load { ptr, i64, i64 }, ptr %a3 %t932 = load %S.ast.Type, ptr %a4 %t933 = load { ptr, i64, i64 }, ptr %a929 call void @finch.gen.dropFrom(ptr %t930, { ptr, i64, i64 } %t931, %S.ast.Type %t932, { ptr, i64, i64 } %t933) %t934 = load ptr, ptr %a1 %t935 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5792, i64 32, i64 0 }, ptr %a937 store { ptr, i64, i64 } %t935, ptr %a938 call void @finch_str_concat(ptr %a936, ptr %a937, ptr %a938) %t939 = load { ptr, i64, i64 }, ptr %a936 store { ptr, i64, i64 } %t939, ptr %a941 store { ptr, i64, i64 } { ptr @.str.5793, i64 6, i64 0 }, ptr %a942 call void @finch_str_concat(ptr %a940, ptr %a941, ptr %a942) store { ptr, i64, i64 } %t939, ptr %a943 call void @finch_str_drop(ptr %a943) %t944 = load { ptr, i64, i64 }, ptr %a940 %t945 = load { ptr, i64, i64 }, ptr %a929 store { ptr, i64, i64 } %t944, ptr %a947 store { ptr, i64, i64 } %t945, ptr %a948 call void @finch_str_concat(ptr %a946, ptr %a947, ptr %a948) store { ptr, i64, i64 } %t944, ptr %a949 call void @finch_str_drop(ptr %a949) %t950 = load { ptr, i64, i64 }, ptr %a946 store { ptr, i64, i64 } %t950, ptr %a952 store { ptr, i64, i64 } { ptr @.str.5794, i64 6, i64 0 }, ptr %a953 call void @finch_str_concat(ptr %a951, ptr %a952, ptr %a953) store { ptr, i64, i64 } %t950, ptr %a954 call void @finch_str_drop(ptr %a954) %t955 = load { ptr, i64, i64 }, ptr %a951 %t956 = load ptr, ptr %a1 %t957 = load %S.ast.Type, ptr %a15 %t958 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t956, %S.ast.Type %t957) store { ptr, i64, i64 } %t955, ptr %a960 store { ptr, i64, i64 } %t958, ptr %a961 call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) store { ptr, i64, i64 } %t955, ptr %a962 call void @finch_str_drop(ptr %a962) store { ptr, i64, i64 } %t958, ptr %a963 call void @finch_str_drop(ptr %a963) %t964 = load { ptr, i64, i64 }, ptr %a959 store { ptr, i64, i64 } %t964, ptr %a966 store { ptr, i64, i64 } { ptr @.str.5795, i64 1, i64 0 }, ptr %a967 call void @finch_str_concat(ptr %a965, ptr %a966, ptr %a967) store { ptr, i64, i64 } %t964, ptr %a968 call void @finch_str_drop(ptr %a968) %t969 = load { ptr, i64, i64 }, ptr %a965 call void @finch.gen.emit(ptr %t934, { ptr, i64, i64 } %t969) store { ptr, i64, i64 } %t969, ptr %a970 call void @finch_str_drop(ptr %a970) %t971 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5796, i64 4, i64 0 }) %t972 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t971, 1 call void @finch_str_drop(ptr %a929) call void @finch_str_drop(ptr %a39) call void @finch_str_drop(ptr %a25) call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t972 endif8925: %t973 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t973, ptr %a974 store { ptr, i64, i64 } { ptr @.str.5797, i64 7, i64 0 }, ptr %a975 %t976 = call i32 @finch_str_eq(ptr %a974, ptr %a975) %t977 = icmp ne i32 %t976, 0 br i1 %t977, label %then8930, label %endif8932 then8930: %t978 = load ptr, ptr %a1 %t979 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t978, %S.ast.Node %t979, i64 0) %t980 = load ptr, ptr %a1 %t981 = load { ptr, i64, i64 }, ptr %a39 %t982 = call { ptr, i64, i64 } @finch.gen.load(ptr %t980, { ptr, i64, i64 } { ptr @.str.5798, i64 3, i64 0 }, { ptr, i64, i64 } %t981) store { ptr, i64, i64 } %t982, ptr %a983 %t984 = load ptr, ptr %a1 %t985 = load { ptr, i64, i64 }, ptr %a3 %t986 = call { ptr, i64, i64 } @finch.gen.load(ptr %t984, { ptr, i64, i64 } { ptr @.str.5799, i64 3, i64 0 }, { ptr, i64, i64 } %t985) store { ptr, i64, i64 } %t986, ptr %a987 %t988 = load ptr, ptr %a1 %t989 = load { ptr, i64, i64 }, ptr %a983 store { ptr, i64, i64 } { ptr @.str.5800, i64 9, i64 0 }, ptr %a991 store { ptr, i64, i64 } %t989, ptr %a992 call void @finch_str_concat(ptr %a990, ptr %a991, ptr %a992) %t993 = load { ptr, i64, i64 }, ptr %a990 store { ptr, i64, i64 } %t993, ptr %a995 store { ptr, i64, i64 } { ptr @.str.5801, i64 3, i64 0 }, ptr %a996 call void @finch_str_concat(ptr %a994, ptr %a995, ptr %a996) store { ptr, i64, i64 } %t993, ptr %a997 call void @finch_str_drop(ptr %a997) %t998 = load { ptr, i64, i64 }, ptr %a994 %t999 = call { ptr, i64, i64 } @finch.gen.op(ptr %t988, { ptr, i64, i64 } %t998) store { ptr, i64, i64 } %t998, ptr %a1000 call void @finch_str_drop(ptr %a1000) store { ptr, i64, i64 } %t999, ptr %a1001 %t1002 = load ptr, ptr %a1 %t1003 = load { ptr, i64, i64 }, ptr %a1001 %t1004 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t1002, { ptr, i64, i64 } %t1003) store { ptr, i64, i64 } %t1004, ptr %a1005 %t1006 = load ptr, ptr %a1 %t1007 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5802, i64 23, i64 0 }, ptr %a1009 store { ptr, i64, i64 } %t1007, ptr %a1010 call void @finch_str_concat(ptr %a1008, ptr %a1009, ptr %a1010) %t1011 = load { ptr, i64, i64 }, ptr %a1008 store { ptr, i64, i64 } %t1011, ptr %a1013 store { ptr, i64, i64 } { ptr @.str.5803, i64 6, i64 0 }, ptr %a1014 call void @finch_str_concat(ptr %a1012, ptr %a1013, ptr %a1014) store { ptr, i64, i64 } %t1011, ptr %a1015 call void @finch_str_drop(ptr %a1015) %t1016 = load { ptr, i64, i64 }, ptr %a1012 %t1017 = load { ptr, i64, i64 }, ptr %a987 store { ptr, i64, i64 } %t1016, ptr %a1019 store { ptr, i64, i64 } %t1017, ptr %a1020 call void @finch_str_concat(ptr %a1018, ptr %a1019, ptr %a1020) store { ptr, i64, i64 } %t1016, ptr %a1021 call void @finch_str_drop(ptr %a1021) %t1022 = load { ptr, i64, i64 }, ptr %a1018 store { ptr, i64, i64 } %t1022, ptr %a1024 store { ptr, i64, i64 } { ptr @.str.5804, i64 6, i64 0 }, ptr %a1025 call void @finch_str_concat(ptr %a1023, ptr %a1024, ptr %a1025) store { ptr, i64, i64 } %t1022, ptr %a1026 call void @finch_str_drop(ptr %a1026) %t1027 = load { ptr, i64, i64 }, ptr %a1023 %t1028 = load { ptr, i64, i64 }, ptr %a1005 %t1029 = extractvalue { ptr, i64, i64 } %t1028, 1 %t1030 = icmp uge i64 3, %t1029 br i1 %t1030, label %range8933, label %inrange8934 range8933: call void @finch_panic_index(ptr @.str.5805, i64 5516, i64 3, i64 %t1029) unreachable inrange8934: %t1031 = extractvalue { ptr, i64, i64 } %t1028, 0 %t1032 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1031, i64 3 %t1033 = load { ptr, i64, i64 }, ptr %t1032 store { ptr, i64, i64 } %t1027, ptr %a1035 store { ptr, i64, i64 } %t1033, ptr %a1036 call void @finch_str_concat(ptr %a1034, ptr %a1035, ptr %a1036) store { ptr, i64, i64 } %t1027, ptr %a1037 call void @finch_str_drop(ptr %a1037) %t1038 = load { ptr, i64, i64 }, ptr %a1034 %t1039 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1006, { ptr, i64, i64 } %t1038) store { ptr, i64, i64 } %t1038, ptr %a1040 call void @finch_str_drop(ptr %a1040) store { ptr, i64, i64 } %t1039, ptr %a1041 %t1042 = load ptr, ptr %a1 %t1043 = load ptr, ptr %a1 %t1044 = load { ptr, i64, i64 }, ptr %a983 store { ptr, i64, i64 } { ptr @.str.5807, i64 8, i64 0 }, ptr %a1046 store { ptr, i64, i64 } %t1044, ptr %a1047 call void @finch_str_concat(ptr %a1045, ptr %a1046, ptr %a1047) %t1048 = load { ptr, i64, i64 }, ptr %a1045 store { ptr, i64, i64 } %t1048, ptr %a1050 store { ptr, i64, i64 } { ptr @.str.5808, i64 3, i64 0 }, ptr %a1051 call void @finch_str_concat(ptr %a1049, ptr %a1050, ptr %a1051) store { ptr, i64, i64 } %t1048, ptr %a1052 call void @finch_str_drop(ptr %a1052) %t1053 = load { ptr, i64, i64 }, ptr %a1049 %t1054 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1043, { ptr, i64, i64 } %t1053) store { ptr, i64, i64 } %t1053, ptr %a1055 call void @finch_str_drop(ptr %a1055) store { ptr, i64, i64 } { ptr @.str.5806, i64 8, i64 0 }, ptr %a1057 store { ptr, i64, i64 } %t1054, ptr %a1058 call void @finch_str_concat(ptr %a1056, ptr %a1057, ptr %a1058) store { ptr, i64, i64 } %t1054, ptr %a1059 call void @finch_str_drop(ptr %a1059) %t1060 = load { ptr, i64, i64 }, ptr %a1056 store { ptr, i64, i64 } %t1060, ptr %a1062 store { ptr, i64, i64 } { ptr @.str.5809, i64 2, i64 0 }, ptr %a1063 call void @finch_str_concat(ptr %a1061, ptr %a1062, ptr %a1063) store { ptr, i64, i64 } %t1060, ptr %a1064 call void @finch_str_drop(ptr %a1064) %t1065 = load { ptr, i64, i64 }, ptr %a1061 %t1066 = load { ptr, i64, i64 }, ptr %a1005 %t1067 = extractvalue { ptr, i64, i64 } %t1066, 1 %t1068 = icmp uge i64 3, %t1067 br i1 %t1068, label %range8935, label %inrange8936 range8935: call void @finch_panic_index(ptr @.str.5810, i64 5517, i64 3, i64 %t1067) unreachable inrange8936: %t1069 = extractvalue { ptr, i64, i64 } %t1066, 0 %t1070 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1069, i64 3 %t1071 = load { ptr, i64, i64 }, ptr %t1070 store { ptr, i64, i64 } %t1065, ptr %a1073 store { ptr, i64, i64 } %t1071, ptr %a1074 call void @finch_str_concat(ptr %a1072, ptr %a1073, ptr %a1074) store { ptr, i64, i64 } %t1065, ptr %a1075 call void @finch_str_drop(ptr %a1075) %t1076 = load { ptr, i64, i64 }, ptr %a1072 %t1077 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1042, { ptr, i64, i64 } %t1076) store { ptr, i64, i64 } %t1076, ptr %a1078 call void @finch_str_drop(ptr %a1078) store { ptr, i64, i64 } %t1077, ptr %a1079 %t1080 = load ptr, ptr %a1 %t1081 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5811, i64 23, i64 0 }, ptr %a1083 store { ptr, i64, i64 } %t1081, ptr %a1084 call void @finch_str_concat(ptr %a1082, ptr %a1083, ptr %a1084) %t1085 = load { ptr, i64, i64 }, ptr %a1082 store { ptr, i64, i64 } %t1085, ptr %a1087 store { ptr, i64, i64 } { ptr @.str.5812, i64 6, i64 0 }, ptr %a1088 call void @finch_str_concat(ptr %a1086, ptr %a1087, ptr %a1088) store { ptr, i64, i64 } %t1085, ptr %a1089 call void @finch_str_drop(ptr %a1089) %t1090 = load { ptr, i64, i64 }, ptr %a1086 %t1091 = load { ptr, i64, i64 }, ptr %a987 store { ptr, i64, i64 } %t1090, ptr %a1093 store { ptr, i64, i64 } %t1091, ptr %a1094 call void @finch_str_concat(ptr %a1092, ptr %a1093, ptr %a1094) store { ptr, i64, i64 } %t1090, ptr %a1095 call void @finch_str_drop(ptr %a1095) %t1096 = load { ptr, i64, i64 }, ptr %a1092 store { ptr, i64, i64 } %t1096, ptr %a1098 store { ptr, i64, i64 } { ptr @.str.5813, i64 6, i64 0 }, ptr %a1099 call void @finch_str_concat(ptr %a1097, ptr %a1098, ptr %a1099) store { ptr, i64, i64 } %t1096, ptr %a1100 call void @finch_str_drop(ptr %a1100) %t1101 = load { ptr, i64, i64 }, ptr %a1097 %t1102 = load { ptr, i64, i64 }, ptr %a1079 store { ptr, i64, i64 } %t1101, ptr %a1104 store { ptr, i64, i64 } %t1102, ptr %a1105 call void @finch_str_concat(ptr %a1103, ptr %a1104, ptr %a1105) store { ptr, i64, i64 } %t1101, ptr %a1106 call void @finch_str_drop(ptr %a1106) %t1107 = load { ptr, i64, i64 }, ptr %a1103 %t1108 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1080, { ptr, i64, i64 } %t1107) store { ptr, i64, i64 } %t1107, ptr %a1109 call void @finch_str_drop(ptr %a1109) store { ptr, i64, i64 } %t1108, ptr %a1110 %t1111 = load ptr, ptr %a1 %t1112 = load { ptr, i64, i64 }, ptr %a19 %t1113 = load { ptr, i64, i64 }, ptr %a1041 %t1114 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1111, { ptr, i64, i64 } %t1112, { ptr, i64, i64 } %t1113) store { ptr, i64, i64 } %t1114, ptr %a1115 %t1116 = load ptr, ptr %a1 %t1117 = load { ptr, i64, i64 }, ptr %a19 %t1118 = load { ptr, i64, i64 }, ptr %a1110 %t1119 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1116, { ptr, i64, i64 } %t1117, { ptr, i64, i64 } %t1118) store { ptr, i64, i64 } %t1119, ptr %a1120 %t1121 = load ptr, ptr %a1 %t1122 = load { ptr, i64, i64 }, ptr %a19 %t1123 = load { ptr, i64, i64 }, ptr %a1120 %t1124 = load { ptr, i64, i64 }, ptr %a1041 call void @finch.gen.store(ptr %t1121, { ptr, i64, i64 } %t1122, { ptr, i64, i64 } %t1123, { ptr, i64, i64 } %t1124) %t1125 = load ptr, ptr %a1 %t1126 = load { ptr, i64, i64 }, ptr %a19 %t1127 = load { ptr, i64, i64 }, ptr %a1115 %t1128 = load { ptr, i64, i64 }, ptr %a1110 call void @finch.gen.store(ptr %t1125, { ptr, i64, i64 } %t1126, { ptr, i64, i64 } %t1127, { ptr, i64, i64 } %t1128) %t1129 = load ptr, ptr %a1 %t1130 = load { ptr, i64, i64 }, ptr %a1005 call void @finch.gen.loopEnd(ptr %t1129, { ptr, i64, i64 } %t1130) %t1131 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5814, i64 4, i64 0 }) %t1132 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1131, 1 call void @finch_str_drop(ptr %a1120) call void @finch_str_drop(ptr %a1115) call void @finch_str_drop(ptr %a1110) call void @finch_str_drop(ptr %a1079) call void @finch_str_drop(ptr %a1041) call void @finch.drop.arr_str(ptr %a1005) call void @finch_str_drop(ptr %a1001) call void @finch_str_drop(ptr %a987) call void @finch_str_drop(ptr %a983) call void @finch_str_drop(ptr %a39) call void @finch_str_drop(ptr %a25) call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t1132 endif8932: %t1133 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t1133, ptr %a1134 store { ptr, i64, i64 } { ptr @.str.5815, i64 5, i64 0 }, ptr %a1135 %t1136 = call i32 @finch_str_eq(ptr %a1134, ptr %a1135) %t1137 = icmp ne i32 %t1136, 0 br i1 %t1137, label %then8937, label %endif8939 then8937: %t1138 = load ptr, ptr %a1 %t1139 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t1138, %S.ast.Node %t1139, i64 2) %t1140 = load ptr, ptr %a1 %t1141 = load ptr, ptr %a1 %t1142 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1143 = load { ptr, i64, i64 }, ptr %t1142 %t1144 = extractvalue { ptr, i64, i64 } %t1143, 1 %t1145 = icmp uge i64 1, %t1144 br i1 %t1145, label %range8940, label %inrange8941 range8940: call void @finch_panic_index(ptr @.str.5816, i64 5528, i64 1, i64 %t1144) unreachable inrange8941: %t1146 = extractvalue { ptr, i64, i64 } %t1143, 0 %t1147 = getelementptr inbounds %S.ast.Node, ptr %t1146, i64 1 %t1148 = load %S.ast.Node, ptr %t1147 %t1149 = call %S.gen.Val @finch.gen.expr(ptr %t1141, %S.ast.Node %t1148) %t1150 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5817, i64 3, i64 0 }) %t1151 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1152 = load { ptr, i64, i64 }, ptr %t1151 %t1153 = extractvalue { ptr, i64, i64 } %t1152, 1 %t1154 = icmp uge i64 1, %t1153 br i1 %t1154, label %range8942, label %inrange8943 range8942: call void @finch_panic_index(ptr @.str.5818, i64 5528, i64 1, i64 %t1153) unreachable inrange8943: %t1155 = extractvalue { ptr, i64, i64 } %t1152, 0 %t1156 = getelementptr inbounds %S.ast.Node, ptr %t1155, i64 1 %t1157 = load %S.ast.Node, ptr %t1156 %t1158 = call %S.gen.Val @finch.gen.coerce(ptr %t1140, %S.gen.Val %t1149, %S.ast.Type %t1150, %S.ast.Node %t1157, { ptr, i64, i64 } { ptr @.str.5819, i64 9, i64 0 }) store %S.gen.Val %t1149, ptr %a1159 call void @finch.drop.S_gen_Val(ptr %a1159) store %S.ast.Type %t1150, ptr %a1160 call void @finch.drop.S_ast_Type(ptr %a1160) %t1161 = extractvalue %S.gen.Val %t1158, 0 store { ptr, i64, i64 } %t1161, ptr %a1162 call void @finch_str_copy(ptr %a1163, ptr %a1162) %t1164 = load { ptr, i64, i64 }, ptr %a1163 store %S.gen.Val %t1158, ptr %a1165 call void @finch.drop.S_gen_Val(ptr %a1165) store { ptr, i64, i64 } %t1164, ptr %a1166 %t1167 = load ptr, ptr %a1 %t1168 = load ptr, ptr %a1 %t1169 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1170 = load { ptr, i64, i64 }, ptr %t1169 %t1171 = extractvalue { ptr, i64, i64 } %t1170, 1 %t1172 = icmp uge i64 2, %t1171 br i1 %t1172, label %range8944, label %inrange8945 range8944: call void @finch_panic_index(ptr @.str.5820, i64 5529, i64 2, i64 %t1171) unreachable inrange8945: %t1173 = extractvalue { ptr, i64, i64 } %t1170, 0 %t1174 = getelementptr inbounds %S.ast.Node, ptr %t1173, i64 2 %t1175 = load %S.ast.Node, ptr %t1174 %t1176 = call %S.gen.Val @finch.gen.expr(ptr %t1168, %S.ast.Node %t1175) %t1177 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5821, i64 3, i64 0 }) %t1178 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1179 = load { ptr, i64, i64 }, ptr %t1178 %t1180 = extractvalue { ptr, i64, i64 } %t1179, 1 %t1181 = icmp uge i64 2, %t1180 br i1 %t1181, label %range8946, label %inrange8947 range8946: call void @finch_panic_index(ptr @.str.5822, i64 5529, i64 2, i64 %t1180) unreachable inrange8947: %t1182 = extractvalue { ptr, i64, i64 } %t1179, 0 %t1183 = getelementptr inbounds %S.ast.Node, ptr %t1182, i64 2 %t1184 = load %S.ast.Node, ptr %t1183 %t1185 = call %S.gen.Val @finch.gen.coerce(ptr %t1167, %S.gen.Val %t1176, %S.ast.Type %t1177, %S.ast.Node %t1184, { ptr, i64, i64 } { ptr @.str.5823, i64 7, i64 0 }) store %S.gen.Val %t1176, ptr %a1186 call void @finch.drop.S_gen_Val(ptr %a1186) store %S.ast.Type %t1177, ptr %a1187 call void @finch.drop.S_ast_Type(ptr %a1187) %t1188 = extractvalue %S.gen.Val %t1185, 0 store { ptr, i64, i64 } %t1188, ptr %a1189 call void @finch_str_copy(ptr %a1190, ptr %a1189) %t1191 = load { ptr, i64, i64 }, ptr %a1190 store %S.gen.Val %t1185, ptr %a1192 call void @finch.drop.S_gen_Val(ptr %a1192) store { ptr, i64, i64 } %t1191, ptr %a1193 %t1194 = load ptr, ptr %a1 %t1195 = load { ptr, i64, i64 }, ptr %a39 %t1196 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1194, { ptr, i64, i64 } { ptr @.str.5824, i64 3, i64 0 }, { ptr, i64, i64 } %t1195) store { ptr, i64, i64 } %t1196, ptr %a1197 %t1198 = load ptr, ptr %a1 %t1199 = load { ptr, i64, i64 }, ptr %a1166 store { ptr, i64, i64 } { ptr @.str.5825, i64 13, i64 0 }, ptr %a1201 store { ptr, i64, i64 } %t1199, ptr %a1202 call void @finch_str_concat(ptr %a1200, ptr %a1201, ptr %a1202) %t1203 = load { ptr, i64, i64 }, ptr %a1200 store { ptr, i64, i64 } %t1203, ptr %a1205 store { ptr, i64, i64 } { ptr @.str.5826, i64 3, i64 0 }, ptr %a1206 call void @finch_str_concat(ptr %a1204, ptr %a1205, ptr %a1206) store { ptr, i64, i64 } %t1203, ptr %a1207 call void @finch_str_drop(ptr %a1207) %t1208 = load { ptr, i64, i64 }, ptr %a1204 %t1209 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1198, { ptr, i64, i64 } %t1208) store { ptr, i64, i64 } %t1208, ptr %a1210 call void @finch_str_drop(ptr %a1210) store { ptr, i64, i64 } %t1209, ptr %a1211 %t1212 = load ptr, ptr %a1 %t1213 = load { ptr, i64, i64 }, ptr %a1193 store { ptr, i64, i64 } { ptr @.str.5827, i64 13, i64 0 }, ptr %a1215 store { ptr, i64, i64 } %t1213, ptr %a1216 call void @finch_str_concat(ptr %a1214, ptr %a1215, ptr %a1216) %t1217 = load { ptr, i64, i64 }, ptr %a1214 store { ptr, i64, i64 } %t1217, ptr %a1219 store { ptr, i64, i64 } { ptr @.str.5828, i64 2, i64 0 }, ptr %a1220 call void @finch_str_concat(ptr %a1218, ptr %a1219, ptr %a1220) store { ptr, i64, i64 } %t1217, ptr %a1221 call void @finch_str_drop(ptr %a1221) %t1222 = load { ptr, i64, i64 }, ptr %a1218 %t1223 = load { ptr, i64, i64 }, ptr %a1197 store { ptr, i64, i64 } %t1222, ptr %a1225 store { ptr, i64, i64 } %t1223, ptr %a1226 call void @finch_str_concat(ptr %a1224, ptr %a1225, ptr %a1226) store { ptr, i64, i64 } %t1222, ptr %a1227 call void @finch_str_drop(ptr %a1227) %t1228 = load { ptr, i64, i64 }, ptr %a1224 %t1229 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1212, { ptr, i64, i64 } %t1228) store { ptr, i64, i64 } %t1228, ptr %a1230 call void @finch_str_drop(ptr %a1230) store { ptr, i64, i64 } %t1229, ptr %a1231 %t1232 = load ptr, ptr %a1 %t1233 = load { ptr, i64, i64 }, ptr %a1166 store { ptr, i64, i64 } { ptr @.str.5829, i64 13, i64 0 }, ptr %a1235 store { ptr, i64, i64 } %t1233, ptr %a1236 call void @finch_str_concat(ptr %a1234, ptr %a1235, ptr %a1236) %t1237 = load { ptr, i64, i64 }, ptr %a1234 store { ptr, i64, i64 } %t1237, ptr %a1239 store { ptr, i64, i64 } { ptr @.str.5830, i64 2, i64 0 }, ptr %a1240 call void @finch_str_concat(ptr %a1238, ptr %a1239, ptr %a1240) store { ptr, i64, i64 } %t1237, ptr %a1241 call void @finch_str_drop(ptr %a1241) %t1242 = load { ptr, i64, i64 }, ptr %a1238 %t1243 = load { ptr, i64, i64 }, ptr %a1193 store { ptr, i64, i64 } %t1242, ptr %a1245 store { ptr, i64, i64 } %t1243, ptr %a1246 call void @finch_str_concat(ptr %a1244, ptr %a1245, ptr %a1246) store { ptr, i64, i64 } %t1242, ptr %a1247 call void @finch_str_drop(ptr %a1247) %t1248 = load { ptr, i64, i64 }, ptr %a1244 %t1249 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1232, { ptr, i64, i64 } %t1248) store { ptr, i64, i64 } %t1248, ptr %a1250 call void @finch_str_drop(ptr %a1250) store { ptr, i64, i64 } %t1249, ptr %a1251 %t1252 = load ptr, ptr %a1 %t1253 = load ptr, ptr %a1 %t1254 = load ptr, ptr %a1 %t1255 = load { ptr, i64, i64 }, ptr %a1211 store { ptr, i64, i64 } { ptr @.str.5832, i64 6, i64 0 }, ptr %a1257 store { ptr, i64, i64 } %t1255, ptr %a1258 call void @finch_str_concat(ptr %a1256, ptr %a1257, ptr %a1258) %t1259 = load { ptr, i64, i64 }, ptr %a1256 store { ptr, i64, i64 } %t1259, ptr %a1261 store { ptr, i64, i64 } { ptr @.str.5833, i64 2, i64 0 }, ptr %a1262 call void @finch_str_concat(ptr %a1260, ptr %a1261, ptr %a1262) store { ptr, i64, i64 } %t1259, ptr %a1263 call void @finch_str_drop(ptr %a1263) %t1264 = load { ptr, i64, i64 }, ptr %a1260 %t1265 = load { ptr, i64, i64 }, ptr %a1231 store { ptr, i64, i64 } %t1264, ptr %a1267 store { ptr, i64, i64 } %t1265, ptr %a1268 call void @finch_str_concat(ptr %a1266, ptr %a1267, ptr %a1268) store { ptr, i64, i64 } %t1264, ptr %a1269 call void @finch_str_drop(ptr %a1269) %t1270 = load { ptr, i64, i64 }, ptr %a1266 %t1271 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1254, { ptr, i64, i64 } %t1270) store { ptr, i64, i64 } %t1270, ptr %a1272 call void @finch_str_drop(ptr %a1272) store { ptr, i64, i64 } { ptr @.str.5831, i64 6, i64 0 }, ptr %a1274 store { ptr, i64, i64 } %t1271, ptr %a1275 call void @finch_str_concat(ptr %a1273, ptr %a1274, ptr %a1275) store { ptr, i64, i64 } %t1271, ptr %a1276 call void @finch_str_drop(ptr %a1276) %t1277 = load { ptr, i64, i64 }, ptr %a1273 store { ptr, i64, i64 } %t1277, ptr %a1279 store { ptr, i64, i64 } { ptr @.str.5834, i64 2, i64 0 }, ptr %a1280 call void @finch_str_concat(ptr %a1278, ptr %a1279, ptr %a1280) store { ptr, i64, i64 } %t1277, ptr %a1281 call void @finch_str_drop(ptr %a1281) %t1282 = load { ptr, i64, i64 }, ptr %a1278 %t1283 = load { ptr, i64, i64 }, ptr %a1251 store { ptr, i64, i64 } %t1282, ptr %a1285 store { ptr, i64, i64 } %t1283, ptr %a1286 call void @finch_str_concat(ptr %a1284, ptr %a1285, ptr %a1286) store { ptr, i64, i64 } %t1282, ptr %a1287 call void @finch_str_drop(ptr %a1287) %t1288 = load { ptr, i64, i64 }, ptr %a1284 %t1289 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1253, { ptr, i64, i64 } %t1288) store { ptr, i64, i64 } %t1288, ptr %a1290 call void @finch_str_drop(ptr %a1290) %t1291 = load %S.ast.Node, ptr %a2 call void @finch.gen.panicIf(ptr %t1252, { ptr, i64, i64 } %t1289, { ptr, i64, i64 } { ptr @.str.5835, i64 33, i64 0 }, %S.ast.Node %t1291) store { ptr, i64, i64 } %t1289, ptr %a1292 call void @finch_str_drop(ptr %a1292) %t1293 = load ptr, ptr %a1 %t1294 = load { ptr, i64, i64 }, ptr %a1193 store { ptr, i64, i64 } { ptr @.str.5836, i64 8, i64 0 }, ptr %a1296 store { ptr, i64, i64 } %t1294, ptr %a1297 call void @finch_str_concat(ptr %a1295, ptr %a1296, ptr %a1297) %t1298 = load { ptr, i64, i64 }, ptr %a1295 store { ptr, i64, i64 } %t1298, ptr %a1300 store { ptr, i64, i64 } { ptr @.str.5837, i64 2, i64 0 }, ptr %a1301 call void @finch_str_concat(ptr %a1299, ptr %a1300, ptr %a1301) store { ptr, i64, i64 } %t1298, ptr %a1302 call void @finch_str_drop(ptr %a1302) %t1303 = load { ptr, i64, i64 }, ptr %a1299 %t1304 = load { ptr, i64, i64 }, ptr %a1166 store { ptr, i64, i64 } %t1303, ptr %a1306 store { ptr, i64, i64 } %t1304, ptr %a1307 call void @finch_str_concat(ptr %a1305, ptr %a1306, ptr %a1307) store { ptr, i64, i64 } %t1303, ptr %a1308 call void @finch_str_drop(ptr %a1308) %t1309 = load { ptr, i64, i64 }, ptr %a1305 %t1310 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1293, { ptr, i64, i64 } %t1309) store { ptr, i64, i64 } %t1309, ptr %a1311 call void @finch_str_drop(ptr %a1311) store { ptr, i64, i64 } %t1310, ptr %a1312 %t1313 = load ptr, ptr %a1 %t1314 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1313, { ptr, i64, i64 } { ptr @.str.5838, i64 17, i64 0 }) store { ptr, i64, i64 } %t1314, ptr %a1315 %t1316 = load ptr, ptr %a1 %t1317 = load { ptr, i64, i64 }, ptr %a1315 store { ptr, i64, i64 } { ptr @.str.5839, i64 30, i64 0 }, ptr %a1319 store { ptr, i64, i64 } %t1317, ptr %a1320 call void @finch_str_concat(ptr %a1318, ptr %a1319, ptr %a1320) %t1321 = load { ptr, i64, i64 }, ptr %a1318 store { ptr, i64, i64 } %t1321, ptr %a1323 store { ptr, i64, i64 } { ptr @.str.5840, i64 6, i64 0 }, ptr %a1324 call void @finch_str_concat(ptr %a1322, ptr %a1323, ptr %a1324) store { ptr, i64, i64 } %t1321, ptr %a1325 call void @finch_str_drop(ptr %a1325) %t1326 = load { ptr, i64, i64 }, ptr %a1322 %t1327 = load { ptr, i64, i64 }, ptr %a1312 store { ptr, i64, i64 } %t1326, ptr %a1329 store { ptr, i64, i64 } %t1327, ptr %a1330 call void @finch_str_concat(ptr %a1328, ptr %a1329, ptr %a1330) store { ptr, i64, i64 } %t1326, ptr %a1331 call void @finch_str_drop(ptr %a1331) %t1332 = load { ptr, i64, i64 }, ptr %a1328 store { ptr, i64, i64 } %t1332, ptr %a1334 store { ptr, i64, i64 } { ptr @.str.5841, i64 6, i64 0 }, ptr %a1335 call void @finch_str_concat(ptr %a1333, ptr %a1334, ptr %a1335) store { ptr, i64, i64 } %t1332, ptr %a1336 call void @finch_str_drop(ptr %a1336) %t1337 = load { ptr, i64, i64 }, ptr %a1333 %t1338 = load ptr, ptr %a1 %t1339 = load %S.ast.Type, ptr %a15 %t1340 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1338, %S.ast.Type %t1339) store { ptr, i64, i64 } %t1337, ptr %a1342 store { ptr, i64, i64 } %t1340, ptr %a1343 call void @finch_str_concat(ptr %a1341, ptr %a1342, ptr %a1343) store { ptr, i64, i64 } %t1337, ptr %a1344 call void @finch_str_drop(ptr %a1344) store { ptr, i64, i64 } %t1340, ptr %a1345 call void @finch_str_drop(ptr %a1345) %t1346 = load { ptr, i64, i64 }, ptr %a1341 store { ptr, i64, i64 } %t1346, ptr %a1348 store { ptr, i64, i64 } { ptr @.str.5842, i64 1, i64 0 }, ptr %a1349 call void @finch_str_concat(ptr %a1347, ptr %a1348, ptr %a1349) store { ptr, i64, i64 } %t1346, ptr %a1350 call void @finch_str_drop(ptr %a1350) %t1351 = load { ptr, i64, i64 }, ptr %a1347 call void @finch.gen.emit(ptr %t1316, { ptr, i64, i64 } %t1351) store { ptr, i64, i64 } %t1351, ptr %a1352 call void @finch_str_drop(ptr %a1352) %t1353 = load ptr, ptr %a1 %t1354 = load { ptr, i64, i64 }, ptr %a3 %t1355 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1353, { ptr, i64, i64 } { ptr @.str.5843, i64 3, i64 0 }, { ptr, i64, i64 } %t1354) store { ptr, i64, i64 } %t1355, ptr %a1356 %t1357 = load ptr, ptr %a1 %t1358 = load { ptr, i64, i64 }, ptr %a1315 %t1359 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1357, { ptr, i64, i64 } { ptr @.str.5844, i64 3, i64 0 }, { ptr, i64, i64 } %t1358) store { ptr, i64, i64 } %t1359, ptr %a1360 %t1361 = load ptr, ptr %a1 %t1362 = load { ptr, i64, i64 }, ptr %a1312 %t1363 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t1361, { ptr, i64, i64 } %t1362) store { ptr, i64, i64 } %t1363, ptr %a1364 %t1365 = load ptr, ptr %a1 %t1366 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5845, i64 23, i64 0 }, ptr %a1368 store { ptr, i64, i64 } %t1366, ptr %a1369 call void @finch_str_concat(ptr %a1367, ptr %a1368, ptr %a1369) %t1370 = load { ptr, i64, i64 }, ptr %a1367 store { ptr, i64, i64 } %t1370, ptr %a1372 store { ptr, i64, i64 } { ptr @.str.5846, i64 6, i64 0 }, ptr %a1373 call void @finch_str_concat(ptr %a1371, ptr %a1372, ptr %a1373) store { ptr, i64, i64 } %t1370, ptr %a1374 call void @finch_str_drop(ptr %a1374) %t1375 = load { ptr, i64, i64 }, ptr %a1371 %t1376 = load { ptr, i64, i64 }, ptr %a1360 store { ptr, i64, i64 } %t1375, ptr %a1378 store { ptr, i64, i64 } %t1376, ptr %a1379 call void @finch_str_concat(ptr %a1377, ptr %a1378, ptr %a1379) store { ptr, i64, i64 } %t1375, ptr %a1380 call void @finch_str_drop(ptr %a1380) %t1381 = load { ptr, i64, i64 }, ptr %a1377 store { ptr, i64, i64 } %t1381, ptr %a1383 store { ptr, i64, i64 } { ptr @.str.5847, i64 6, i64 0 }, ptr %a1384 call void @finch_str_concat(ptr %a1382, ptr %a1383, ptr %a1384) store { ptr, i64, i64 } %t1381, ptr %a1385 call void @finch_str_drop(ptr %a1385) %t1386 = load { ptr, i64, i64 }, ptr %a1382 %t1387 = load { ptr, i64, i64 }, ptr %a1364 %t1388 = extractvalue { ptr, i64, i64 } %t1387, 1 %t1389 = icmp uge i64 3, %t1388 br i1 %t1389, label %range8948, label %inrange8949 range8948: call void @finch_panic_index(ptr @.str.5848, i64 5541, i64 3, i64 %t1388) unreachable inrange8949: %t1390 = extractvalue { ptr, i64, i64 } %t1387, 0 %t1391 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1390, i64 3 %t1392 = load { ptr, i64, i64 }, ptr %t1391 store { ptr, i64, i64 } %t1386, ptr %a1394 store { ptr, i64, i64 } %t1392, ptr %a1395 call void @finch_str_concat(ptr %a1393, ptr %a1394, ptr %a1395) store { ptr, i64, i64 } %t1386, ptr %a1396 call void @finch_str_drop(ptr %a1396) %t1397 = load { ptr, i64, i64 }, ptr %a1393 %t1398 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1365, { ptr, i64, i64 } %t1397) store { ptr, i64, i64 } %t1397, ptr %a1399 call void @finch_str_drop(ptr %a1399) store { ptr, i64, i64 } %t1398, ptr %a1400 %t1401 = load ptr, ptr %a1 %t1402 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5849, i64 23, i64 0 }, ptr %a1404 store { ptr, i64, i64 } %t1402, ptr %a1405 call void @finch_str_concat(ptr %a1403, ptr %a1404, ptr %a1405) %t1406 = load { ptr, i64, i64 }, ptr %a1403 store { ptr, i64, i64 } %t1406, ptr %a1408 store { ptr, i64, i64 } { ptr @.str.5850, i64 6, i64 0 }, ptr %a1409 call void @finch_str_concat(ptr %a1407, ptr %a1408, ptr %a1409) store { ptr, i64, i64 } %t1406, ptr %a1410 call void @finch_str_drop(ptr %a1410) %t1411 = load { ptr, i64, i64 }, ptr %a1407 %t1412 = load { ptr, i64, i64 }, ptr %a1356 store { ptr, i64, i64 } %t1411, ptr %a1414 store { ptr, i64, i64 } %t1412, ptr %a1415 call void @finch_str_concat(ptr %a1413, ptr %a1414, ptr %a1415) store { ptr, i64, i64 } %t1411, ptr %a1416 call void @finch_str_drop(ptr %a1416) %t1417 = load { ptr, i64, i64 }, ptr %a1413 store { ptr, i64, i64 } %t1417, ptr %a1419 store { ptr, i64, i64 } { ptr @.str.5851, i64 6, i64 0 }, ptr %a1420 call void @finch_str_concat(ptr %a1418, ptr %a1419, ptr %a1420) store { ptr, i64, i64 } %t1417, ptr %a1421 call void @finch_str_drop(ptr %a1421) %t1422 = load { ptr, i64, i64 }, ptr %a1418 %t1423 = load ptr, ptr %a1 %t1424 = load { ptr, i64, i64 }, ptr %a1166 store { ptr, i64, i64 } { ptr @.str.5852, i64 8, i64 0 }, ptr %a1426 store { ptr, i64, i64 } %t1424, ptr %a1427 call void @finch_str_concat(ptr %a1425, ptr %a1426, ptr %a1427) %t1428 = load { ptr, i64, i64 }, ptr %a1425 store { ptr, i64, i64 } %t1428, ptr %a1430 store { ptr, i64, i64 } { ptr @.str.5853, i64 2, i64 0 }, ptr %a1431 call void @finch_str_concat(ptr %a1429, ptr %a1430, ptr %a1431) store { ptr, i64, i64 } %t1428, ptr %a1432 call void @finch_str_drop(ptr %a1432) %t1433 = load { ptr, i64, i64 }, ptr %a1429 %t1434 = load { ptr, i64, i64 }, ptr %a1364 %t1435 = extractvalue { ptr, i64, i64 } %t1434, 1 %t1436 = icmp uge i64 3, %t1435 br i1 %t1436, label %range8950, label %inrange8951 range8950: call void @finch_panic_index(ptr @.str.5854, i64 5542, i64 3, i64 %t1435) unreachable inrange8951: %t1437 = extractvalue { ptr, i64, i64 } %t1434, 0 %t1438 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1437, i64 3 %t1439 = load { ptr, i64, i64 }, ptr %t1438 store { ptr, i64, i64 } %t1433, ptr %a1441 store { ptr, i64, i64 } %t1439, ptr %a1442 call void @finch_str_concat(ptr %a1440, ptr %a1441, ptr %a1442) store { ptr, i64, i64 } %t1433, ptr %a1443 call void @finch_str_drop(ptr %a1443) %t1444 = load { ptr, i64, i64 }, ptr %a1440 %t1445 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1423, { ptr, i64, i64 } %t1444) store { ptr, i64, i64 } %t1444, ptr %a1446 call void @finch_str_drop(ptr %a1446) store { ptr, i64, i64 } %t1422, ptr %a1448 store { ptr, i64, i64 } %t1445, ptr %a1449 call void @finch_str_concat(ptr %a1447, ptr %a1448, ptr %a1449) store { ptr, i64, i64 } %t1422, ptr %a1450 call void @finch_str_drop(ptr %a1450) store { ptr, i64, i64 } %t1445, ptr %a1451 call void @finch_str_drop(ptr %a1451) %t1452 = load { ptr, i64, i64 }, ptr %a1447 %t1453 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1401, { ptr, i64, i64 } %t1452) store { ptr, i64, i64 } %t1452, ptr %a1454 call void @finch_str_drop(ptr %a1454) store { ptr, i64, i64 } %t1453, ptr %a1455 %t1456 = load ptr, ptr %a1 %t1457 = load { ptr, i64, i64 }, ptr %a1400 %t1458 = load { ptr, i64, i64 }, ptr %a1455 %t1459 = load %S.ast.Type, ptr %a15 call void @finch.gen.copyAt(ptr %t1456, { ptr, i64, i64 } %t1457, { ptr, i64, i64 } %t1458, %S.ast.Type %t1459) %t1460 = load ptr, ptr %a1 %t1461 = load { ptr, i64, i64 }, ptr %a1364 call void @finch.gen.loopEnd(ptr %t1460, { ptr, i64, i64 } %t1461) %t1462 = load ptr, ptr %a1 %t1463 = load { ptr, i64, i64 }, ptr %a1315 %t1464 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1462, { ptr, i64, i64 } { ptr @.str.5855, i64 17, i64 0 }, { ptr, i64, i64 } %t1463) %t1465 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1464, 0 %t1466 = load %S.ast.Type, ptr %a4 store %S.ast.Type %t1466, ptr %a1467 call void @finch.copy.S_ast_Type(ptr %a1468, ptr %a1467) %t1469 = load %S.ast.Type, ptr %a1468 %t1470 = insertvalue %S.gen.Val %t1465, %S.ast.Type %t1469, 1 %t1471 = insertvalue %S.gen.Val %t1470, i1 true, 2 call void @finch_str_drop(ptr %a1455) call void @finch_str_drop(ptr %a1400) call void @finch.drop.arr_str(ptr %a1364) call void @finch_str_drop(ptr %a1360) call void @finch_str_drop(ptr %a1356) call void @finch_str_drop(ptr %a1315) call void @finch_str_drop(ptr %a1312) call void @finch_str_drop(ptr %a1251) call void @finch_str_drop(ptr %a1231) call void @finch_str_drop(ptr %a1211) call void @finch_str_drop(ptr %a1197) call void @finch_str_drop(ptr %a1193) call void @finch_str_drop(ptr %a1166) call void @finch_str_drop(ptr %a39) call void @finch_str_drop(ptr %a25) call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t1471 endif8939: %t1472 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t1472, ptr %a1473 store { ptr, i64, i64 } { ptr @.str.5856, i64 4, i64 0 }, ptr %a1474 %t1475 = call i32 @finch_str_eq(ptr %a1473, ptr %a1474) %t1476 = icmp ne i32 %t1475, 0 br i1 %t1476, label %then8952, label %endif8954 then8952: %t1477 = load ptr, ptr %a1 %t1478 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t1477, %S.ast.Node %t1478, i64 0) %t1479 = getelementptr inbounds %S.ast.Type, ptr %a15, i32 0, i32 0 %t1480 = load { ptr, i64, i64 }, ptr %t1479 store { ptr, i64, i64 } %t1480, ptr %a1481 call void @finch_str_copy(ptr %a1482, ptr %a1481) %t1483 = load { ptr, i64, i64 }, ptr %a1482 store { ptr, i64, i64 } %t1483, ptr %a1484 %t1485 = load %S.ast.Type, ptr %a15 %t1486 = call i1 @finch.gen.isNumber(%S.ast.Type %t1485) %t1487 = xor i1 %t1486, true br label %logic.from8955 logic.from8955: br i1 %t1487, label %logic.rhs8956, label %logic.end8957 logic.rhs8956: %t1488 = load { ptr, i64, i64 }, ptr %a1484 store { ptr, i64, i64 } %t1488, ptr %a1489 store { ptr, i64, i64 } { ptr @.str.5857, i64 4, i64 0 }, ptr %a1490 %t1491 = call i32 @finch_str_eq(ptr %a1489, ptr %a1490) %t1492 = icmp eq i32 %t1491, 0 br label %logic.rend8958 logic.rend8958: br label %logic.end8957 logic.end8957: %t1493 = phi i1 [ false, %logic.from8955 ], [ %t1492, %logic.rend8958 ] br label %logic.from8959 logic.from8959: br i1 %t1493, label %logic.rhs8960, label %logic.end8961 logic.rhs8960: %t1494 = load { ptr, i64, i64 }, ptr %a1484 store { ptr, i64, i64 } %t1494, ptr %a1495 store { ptr, i64, i64 } { ptr @.str.5858, i64 3, i64 0 }, ptr %a1496 %t1497 = call i32 @finch_str_eq(ptr %a1495, ptr %a1496) %t1498 = icmp eq i32 %t1497, 0 br label %logic.rend8962 logic.rend8962: br label %logic.end8961 logic.end8961: %t1499 = phi i1 [ false, %logic.from8959 ], [ %t1498, %logic.rend8962 ] br i1 %t1499, label %then8963, label %endif8965 then8963: %t1500 = load ptr, ptr %a1 %t1501 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t1500, %S.ast.Node %t1501, { ptr, i64, i64 } { ptr @.str.5859, i64 47, i64 0 }) br label %endif8965 endif8965: %t1502 = load ptr, ptr %a1 %t1503 = load %S.ast.Type, ptr %a15 %t1504 = call { ptr, i64, i64 } @finch.gen.cmpFn(ptr %t1502, %S.ast.Type %t1503) store { ptr, i64, i64 } %t1504, ptr %a1505 %t1506 = load ptr, ptr %a1 %t1507 = load { ptr, i64, i64 }, ptr %a39 %t1508 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1506, { ptr, i64, i64 } { ptr @.str.5860, i64 3, i64 0 }, { ptr, i64, i64 } %t1507) store { ptr, i64, i64 } %t1508, ptr %a1509 %t1510 = load ptr, ptr %a1 %t1511 = load { ptr, i64, i64 }, ptr %a3 %t1512 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1510, { ptr, i64, i64 } { ptr @.str.5861, i64 3, i64 0 }, { ptr, i64, i64 } %t1511) store { ptr, i64, i64 } %t1512, ptr %a1513 %t1514 = load ptr, ptr %a1 %t1515 = load { ptr, i64, i64 }, ptr %a1513 store { ptr, i64, i64 } { ptr @.str.5862, i64 21, i64 0 }, ptr %a1517 store { ptr, i64, i64 } %t1515, ptr %a1518 call void @finch_str_concat(ptr %a1516, ptr %a1517, ptr %a1518) %t1519 = load { ptr, i64, i64 }, ptr %a1516 store { ptr, i64, i64 } %t1519, ptr %a1521 store { ptr, i64, i64 } { ptr @.str.5863, i64 6, i64 0 }, ptr %a1522 call void @finch_str_concat(ptr %a1520, ptr %a1521, ptr %a1522) store { ptr, i64, i64 } %t1519, ptr %a1523 call void @finch_str_drop(ptr %a1523) %t1524 = load { ptr, i64, i64 }, ptr %a1520 %t1525 = load { ptr, i64, i64 }, ptr %a1509 store { ptr, i64, i64 } %t1524, ptr %a1527 store { ptr, i64, i64 } %t1525, ptr %a1528 call void @finch_str_concat(ptr %a1526, ptr %a1527, ptr %a1528) store { ptr, i64, i64 } %t1524, ptr %a1529 call void @finch_str_drop(ptr %a1529) %t1530 = load { ptr, i64, i64 }, ptr %a1526 store { ptr, i64, i64 } %t1530, ptr %a1532 store { ptr, i64, i64 } { ptr @.str.5864, i64 6, i64 0 }, ptr %a1533 call void @finch_str_concat(ptr %a1531, ptr %a1532, ptr %a1533) store { ptr, i64, i64 } %t1530, ptr %a1534 call void @finch_str_drop(ptr %a1534) %t1535 = load { ptr, i64, i64 }, ptr %a1531 %t1536 = load ptr, ptr %a1 %t1537 = load %S.ast.Type, ptr %a15 %t1538 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1536, %S.ast.Type %t1537) store { ptr, i64, i64 } %t1535, ptr %a1540 store { ptr, i64, i64 } %t1538, ptr %a1541 call void @finch_str_concat(ptr %a1539, ptr %a1540, ptr %a1541) store { ptr, i64, i64 } %t1535, ptr %a1542 call void @finch_str_drop(ptr %a1542) store { ptr, i64, i64 } %t1538, ptr %a1543 call void @finch_str_drop(ptr %a1543) %t1544 = load { ptr, i64, i64 }, ptr %a1539 store { ptr, i64, i64 } %t1544, ptr %a1546 store { ptr, i64, i64 } { ptr @.str.5865, i64 6, i64 0 }, ptr %a1547 call void @finch_str_concat(ptr %a1545, ptr %a1546, ptr %a1547) store { ptr, i64, i64 } %t1544, ptr %a1548 call void @finch_str_drop(ptr %a1548) %t1549 = load { ptr, i64, i64 }, ptr %a1545 %t1550 = load { ptr, i64, i64 }, ptr %a1505 store { ptr, i64, i64 } %t1549, ptr %a1552 store { ptr, i64, i64 } %t1550, ptr %a1553 call void @finch_str_concat(ptr %a1551, ptr %a1552, ptr %a1553) store { ptr, i64, i64 } %t1549, ptr %a1554 call void @finch_str_drop(ptr %a1554) %t1555 = load { ptr, i64, i64 }, ptr %a1551 store { ptr, i64, i64 } %t1555, ptr %a1557 store { ptr, i64, i64 } { ptr @.str.5866, i64 1, i64 0 }, ptr %a1558 call void @finch_str_concat(ptr %a1556, ptr %a1557, ptr %a1558) store { ptr, i64, i64 } %t1555, ptr %a1559 call void @finch_str_drop(ptr %a1559) %t1560 = load { ptr, i64, i64 }, ptr %a1556 call void @finch.gen.emit(ptr %t1514, { ptr, i64, i64 } %t1560) store { ptr, i64, i64 } %t1560, ptr %a1561 call void @finch_str_drop(ptr %a1561) %t1562 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5867, i64 4, i64 0 }) %t1563 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1562, 1 call void @finch_str_drop(ptr %a1513) call void @finch_str_drop(ptr %a1509) call void @finch_str_drop(ptr %a1505) call void @finch_str_drop(ptr %a1484) call void @finch_str_drop(ptr %a39) call void @finch_str_drop(ptr %a25) call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t1563 endif8954: %t1564 = load ptr, ptr %a1 %t1565 = load %S.ast.Node, ptr %a2 %t1566 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } { ptr @.str.5868, i64 24, i64 0 }, ptr %a1568 store { ptr, i64, i64 } %t1566, ptr %a1569 call void @finch_str_concat(ptr %a1567, ptr %a1568, ptr %a1569) %t1570 = load { ptr, i64, i64 }, ptr %a1567 store { ptr, i64, i64 } %t1570, ptr %a1572 store { ptr, i64, i64 } { ptr @.str.5869, i64 96, i64 0 }, ptr %a1573 call void @finch_str_concat(ptr %a1571, ptr %a1572, ptr %a1573) store { ptr, i64, i64 } %t1570, ptr %a1574 call void @finch_str_drop(ptr %a1574) %t1575 = load { ptr, i64, i64 }, ptr %a1571 call void @finch.gen.fail(ptr %t1564, %S.ast.Node %t1565, { ptr, i64, i64 } %t1575) store { ptr, i64, i64 } %t1575, ptr %a1576 call void @finch_str_drop(ptr %a1576) call void @finch_str_drop(ptr %a39) call void @finch_str_drop(ptr %a25) call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val zeroinitializer } define internal void @finch.gen.dropFrom(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, { ptr, i64, i64 } %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca %S.ast.Type, align 16 %a13 = alloca %S.ast.Type, align 16 %a15 = alloca %S.ast.Type, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 %t5 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 br i1 %t8, label %range8966, label %inrange8967 range8966: call void @finch_panic_index(ptr @.str.5870, i64 5565, i64 0, i64 %t7) unreachable inrange8967: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Type, ptr %t9, i64 0 %t11 = load %S.ast.Type, ptr %t10 store %S.ast.Type %t11, ptr %a12 call void @finch.copy.S_ast_Type(ptr %a13, ptr %a12) %t14 = load %S.ast.Type, ptr %a13 store %S.ast.Type %t14, ptr %a15 %t16 = load ptr, ptr %a1 %t17 = load %S.ast.Type, ptr %a15 %t18 = call i1 @finch.gen.owning(ptr %t16, %S.ast.Type %t17) %t19 = xor i1 %t18, true br i1 %t19, label %then8968, label %endif8970 then8968: call void @finch.drop.S_ast_Type(ptr %a15) ret void endif8970: %t20 = load ptr, ptr %a1 %t21 = load %S.ast.Type, ptr %a15 %t22 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t20, %S.ast.Type %t21) store { ptr, i64, i64 } %t22, ptr %a23 %t24 = load ptr, ptr %a1 %t25 = load ptr, ptr %a1 %t26 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.5872, i64 46, i64 0 }, ptr %a28 store { ptr, i64, i64 } %t26, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t30, ptr %a32 store { ptr, i64, i64 } { ptr @.str.5873, i64 14, i64 0 }, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) store { ptr, i64, i64 } %t30, ptr %a34 call void @finch_str_drop(ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a31 %t36 = call { ptr, i64, i64 } @finch.gen.op(ptr %t25, { ptr, i64, i64 } %t35) store { ptr, i64, i64 } %t35, ptr %a37 call void @finch_str_drop(ptr %a37) %t38 = call { ptr, i64, i64 } @finch.gen.load(ptr %t24, { ptr, i64, i64 } { ptr @.str.5871, i64 3, i64 0 }, { ptr, i64, i64 } %t36) store { ptr, i64, i64 } %t36, ptr %a39 call void @finch_str_drop(ptr %a39) store { ptr, i64, i64 } %t38, ptr %a40 %t41 = load ptr, ptr %a1 %t42 = load { ptr, i64, i64 }, ptr %a2 %t43 = call { ptr, i64, i64 } @finch.gen.load(ptr %t41, { ptr, i64, i64 } { ptr @.str.5874, i64 3, i64 0 }, { ptr, i64, i64 } %t42) store { ptr, i64, i64 } %t43, ptr %a44 %t45 = load ptr, ptr %a1 %t46 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } { ptr @.str.5875, i64 13, i64 0 }, ptr %a48 store { ptr, i64, i64 } %t46, ptr %a49 call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) %t50 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t50, ptr %a52 store { ptr, i64, i64 } { ptr @.str.5876, i64 2, i64 0 }, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) store { ptr, i64, i64 } %t50, ptr %a54 call void @finch_str_drop(ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a51 %t56 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t55, ptr %a58 store { ptr, i64, i64 } %t56, ptr %a59 call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) store { ptr, i64, i64 } %t55, ptr %a60 call void @finch_str_drop(ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a57 %t62 = call { ptr, i64, i64 } @finch.gen.op(ptr %t45, { ptr, i64, i64 } %t61) store { ptr, i64, i64 } %t61, ptr %a63 call void @finch_str_drop(ptr %a63) store { ptr, i64, i64 } %t62, ptr %a64 %t65 = load ptr, ptr %a1 %t66 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } { ptr @.str.5877, i64 13, i64 0 }, ptr %a68 store { ptr, i64, i64 } %t66, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) %t70 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t70, ptr %a72 store { ptr, i64, i64 } { ptr @.str.5878, i64 3, i64 0 }, ptr %a73 call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) store { ptr, i64, i64 } %t70, ptr %a74 call void @finch_str_drop(ptr %a74) %t75 = load { ptr, i64, i64 }, ptr %a71 %t76 = call { ptr, i64, i64 } @finch.gen.op(ptr %t65, { ptr, i64, i64 } %t75) store { ptr, i64, i64 } %t75, ptr %a77 call void @finch_str_drop(ptr %a77) store { ptr, i64, i64 } %t76, ptr %a78 %t79 = load ptr, ptr %a1 %t80 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } { ptr @.str.5879, i64 10, i64 0 }, ptr %a82 store { ptr, i64, i64 } %t80, ptr %a83 call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) %t84 = load { ptr, i64, i64 }, ptr %a81 store { ptr, i64, i64 } %t84, ptr %a86 store { ptr, i64, i64 } { ptr @.str.5880, i64 6, i64 0 }, ptr %a87 call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) store { ptr, i64, i64 } %t84, ptr %a88 call void @finch_str_drop(ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a85 %t90 = load ptr, ptr %a1 %t91 = load { ptr, i64, i64 }, ptr %a78 store { ptr, i64, i64 } { ptr @.str.5881, i64 10, i64 0 }, ptr %a93 store { ptr, i64, i64 } %t91, ptr %a94 call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) %t95 = load { ptr, i64, i64 }, ptr %a92 store { ptr, i64, i64 } %t95, ptr %a97 store { ptr, i64, i64 } { ptr @.str.5882, i64 13, i64 0 }, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) store { ptr, i64, i64 } %t95, ptr %a99 call void @finch_str_drop(ptr %a99) %t100 = load { ptr, i64, i64 }, ptr %a96 %t101 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t100, ptr %a103 store { ptr, i64, i64 } %t101, ptr %a104 call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) store { ptr, i64, i64 } %t100, ptr %a105 call void @finch_str_drop(ptr %a105) %t106 = load { ptr, i64, i64 }, ptr %a102 %t107 = call { ptr, i64, i64 } @finch.gen.op(ptr %t90, { ptr, i64, i64 } %t106) store { ptr, i64, i64 } %t106, ptr %a108 call void @finch_str_drop(ptr %a108) store { ptr, i64, i64 } %t89, ptr %a110 store { ptr, i64, i64 } %t107, ptr %a111 call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) store { ptr, i64, i64 } %t89, ptr %a112 call void @finch_str_drop(ptr %a112) store { ptr, i64, i64 } %t107, ptr %a113 call void @finch_str_drop(ptr %a113) %t114 = load { ptr, i64, i64 }, ptr %a109 store { ptr, i64, i64 } %t114, ptr %a116 store { ptr, i64, i64 } { ptr @.str.5883, i64 6, i64 0 }, ptr %a117 call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) store { ptr, i64, i64 } %t114, ptr %a118 call void @finch_str_drop(ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a115 %t120 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t119, ptr %a122 store { ptr, i64, i64 } %t120, ptr %a123 call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) store { ptr, i64, i64 } %t119, ptr %a124 call void @finch_str_drop(ptr %a124) %t125 = load { ptr, i64, i64 }, ptr %a121 %t126 = call { ptr, i64, i64 } @finch.gen.op(ptr %t79, { ptr, i64, i64 } %t125) store { ptr, i64, i64 } %t125, ptr %a127 call void @finch_str_drop(ptr %a127) store { ptr, i64, i64 } %t126, ptr %a128 %t129 = load ptr, ptr %a1 %t130 = load ptr, ptr %a1 %t131 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } { ptr @.str.5884, i64 8, i64 0 }, ptr %a133 store { ptr, i64, i64 } %t131, ptr %a134 call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) %t135 = load { ptr, i64, i64 }, ptr %a132 store { ptr, i64, i64 } %t135, ptr %a137 store { ptr, i64, i64 } { ptr @.str.5885, i64 2, i64 0 }, ptr %a138 call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) store { ptr, i64, i64 } %t135, ptr %a139 call void @finch_str_drop(ptr %a139) %t140 = load { ptr, i64, i64 }, ptr %a136 %t141 = load { ptr, i64, i64 }, ptr %a128 store { ptr, i64, i64 } %t140, ptr %a143 store { ptr, i64, i64 } %t141, ptr %a144 call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) store { ptr, i64, i64 } %t140, ptr %a145 call void @finch_str_drop(ptr %a145) %t146 = load { ptr, i64, i64 }, ptr %a142 %t147 = call { ptr, i64, i64 } @finch.gen.op(ptr %t130, { ptr, i64, i64 } %t146) store { ptr, i64, i64 } %t146, ptr %a148 call void @finch_str_drop(ptr %a148) %t149 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t129, { ptr, i64, i64 } %t147) store { ptr, i64, i64 } %t147, ptr %a150 call void @finch_str_drop(ptr %a150) store { ptr, i64, i64 } %t149, ptr %a151 %t152 = load ptr, ptr %a1 %t153 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } { ptr @.str.5886, i64 23, i64 0 }, ptr %a155 store { ptr, i64, i64 } %t153, ptr %a156 call void @finch_str_concat(ptr %a154, ptr %a155, ptr %a156) %t157 = load { ptr, i64, i64 }, ptr %a154 store { ptr, i64, i64 } %t157, ptr %a159 store { ptr, i64, i64 } { ptr @.str.5887, i64 6, i64 0 }, ptr %a160 call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) store { ptr, i64, i64 } %t157, ptr %a161 call void @finch_str_drop(ptr %a161) %t162 = load { ptr, i64, i64 }, ptr %a158 %t163 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } %t162, ptr %a165 store { ptr, i64, i64 } %t163, ptr %a166 call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) store { ptr, i64, i64 } %t162, ptr %a167 call void @finch_str_drop(ptr %a167) %t168 = load { ptr, i64, i64 }, ptr %a164 store { ptr, i64, i64 } %t168, ptr %a170 store { ptr, i64, i64 } { ptr @.str.5888, i64 6, i64 0 }, ptr %a171 call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) store { ptr, i64, i64 } %t168, ptr %a172 call void @finch_str_drop(ptr %a172) %t173 = load { ptr, i64, i64 }, ptr %a169 %t174 = load ptr, ptr %a1 %t175 = load { ptr, i64, i64 }, ptr %a128 store { ptr, i64, i64 } { ptr @.str.5889, i64 8, i64 0 }, ptr %a177 store { ptr, i64, i64 } %t175, ptr %a178 call void @finch_str_concat(ptr %a176, ptr %a177, ptr %a178) %t179 = load { ptr, i64, i64 }, ptr %a176 store { ptr, i64, i64 } %t179, ptr %a181 store { ptr, i64, i64 } { ptr @.str.5890, i64 2, i64 0 }, ptr %a182 call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) store { ptr, i64, i64 } %t179, ptr %a183 call void @finch_str_drop(ptr %a183) %t184 = load { ptr, i64, i64 }, ptr %a180 %t185 = load { ptr, i64, i64 }, ptr %a151 %t186 = extractvalue { ptr, i64, i64 } %t185, 1 %t187 = icmp uge i64 3, %t186 br i1 %t187, label %range8971, label %inrange8972 range8971: call void @finch_panic_index(ptr @.str.5891, i64 5576, i64 3, i64 %t186) unreachable inrange8972: %t188 = extractvalue { ptr, i64, i64 } %t185, 0 %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t188, i64 3 %t190 = load { ptr, i64, i64 }, ptr %t189 store { ptr, i64, i64 } %t184, ptr %a192 store { ptr, i64, i64 } %t190, ptr %a193 call void @finch_str_concat(ptr %a191, ptr %a192, ptr %a193) store { ptr, i64, i64 } %t184, ptr %a194 call void @finch_str_drop(ptr %a194) %t195 = load { ptr, i64, i64 }, ptr %a191 %t196 = call { ptr, i64, i64 } @finch.gen.op(ptr %t174, { ptr, i64, i64 } %t195) store { ptr, i64, i64 } %t195, ptr %a197 call void @finch_str_drop(ptr %a197) store { ptr, i64, i64 } %t173, ptr %a199 store { ptr, i64, i64 } %t196, ptr %a200 call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200) store { ptr, i64, i64 } %t173, ptr %a201 call void @finch_str_drop(ptr %a201) store { ptr, i64, i64 } %t196, ptr %a202 call void @finch_str_drop(ptr %a202) %t203 = load { ptr, i64, i64 }, ptr %a198 %t204 = call { ptr, i64, i64 } @finch.gen.op(ptr %t152, { ptr, i64, i64 } %t203) store { ptr, i64, i64 } %t203, ptr %a205 call void @finch_str_drop(ptr %a205) store { ptr, i64, i64 } %t204, ptr %a206 %t207 = load ptr, ptr %a1 %t208 = load { ptr, i64, i64 }, ptr %a206 %t209 = load %S.ast.Type, ptr %a15 call void @finch.gen.dropAt(ptr %t207, { ptr, i64, i64 } %t208, %S.ast.Type %t209) %t210 = load ptr, ptr %a1 %t211 = load { ptr, i64, i64 }, ptr %a151 call void @finch.gen.loopEnd(ptr %t210, { ptr, i64, i64 } %t211) call void @finch_str_drop(ptr %a206) call void @finch.drop.arr_str(ptr %a151) call void @finch_str_drop(ptr %a128) call void @finch_str_drop(ptr %a78) call void @finch_str_drop(ptr %a64) call void @finch_str_drop(ptr %a44) call void @finch_str_drop(ptr %a40) call void @finch_str_drop(ptr %a23) call void @finch.drop.S_ast_Type(ptr %a15) ret void } define internal { ptr, i64, i64 } @finch.gen.cmpFn(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca %S.gen.Saved, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = load %S.ast.Type, ptr %a2 %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) store { ptr, i64, i64 } { ptr @.str.5892, i64 11, i64 0 }, ptr %a6 store { ptr, i64, i64 } %t4, ptr %a7 call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) store { ptr, i64, i64 } %t4, ptr %a8 call void @finch_str_drop(ptr %a8) %t9 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null br i1 %t12, label %panic8973, label %ok8974 panic8973: call void @finch_panic(ptr @.str.5893, i64 5584, ptr @.str.5894) unreachable ok8974: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 %t14 = load { ptr, i64, i64 }, ptr %t13 %t15 = load { ptr, i64, i64 }, ptr %a10 %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) br i1 %t16, label %then8975, label %endif8977 then8975: %t17 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t17 endif8977: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic8978, label %ok8979 panic8978: call void @finch_panic(ptr @.str.5895, i64 5587, ptr @.str.5896) unreachable ok8979: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t22, ptr %a23 call void @finch_str_copy(ptr %a24, ptr %a23) %t25 = load { ptr, i64, i64 }, ptr %a24 %t26 = load i64, ptr %t21 %t27 = add i64 %t26, 1 call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t28 = load ptr, ptr %t20 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 store { ptr, i64, i64 } %t25, ptr %t29 store i64 %t27, ptr %t21 %t30 = load ptr, ptr %a1 %t31 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t30) store %S.gen.Saved %t31, ptr %a32 store { ptr, i64, i64 } { ptr @.str.5897, i64 0, i64 0 }, ptr %a33 %t34 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t35 = load { ptr, i64, i64 }, ptr %t34 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.5898, i64 3, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 br i1 %t39, label %then8980, label %else8981 then8980: %t40 = load ptr, ptr %a1 %t41 = call { ptr, i64, i64 } @finch.gen.op(ptr %t40, { ptr, i64, i64 } { ptr @.str.5899, i64 39, i64 0 }) store { ptr, i64, i64 } %t41, ptr %a42 %t43 = load ptr, ptr %a1 %t44 = load { ptr, i64, i64 }, ptr %a42 store { ptr, i64, i64 } { ptr @.str.5900, i64 10, i64 0 }, ptr %a46 store { ptr, i64, i64 } %t44, ptr %a47 call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) %t48 = load { ptr, i64, i64 }, ptr %a45 store { ptr, i64, i64 } %t48, ptr %a50 store { ptr, i64, i64 } { ptr @.str.5901, i64 7, i64 0 }, ptr %a51 call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) store { ptr, i64, i64 } %t48, ptr %a52 call void @finch_str_drop(ptr %a52) %t53 = load { ptr, i64, i64 }, ptr %a49 %t54 = call { ptr, i64, i64 } @finch.gen.op(ptr %t43, { ptr, i64, i64 } %t53) store { ptr, i64, i64 } %t53, ptr %a55 call void @finch_str_drop(ptr %a55) %t56 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t54, ptr %a33 store { ptr, i64, i64 } %t56, ptr %a57 call void @finch_str_drop(ptr %a57) call void @finch_str_drop(ptr %a42) br label %endif8982 else8981: %t58 = load ptr, ptr %a1 %t59 = load %S.ast.Type, ptr %a2 %t60 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t58, %S.ast.Type %t59) store { ptr, i64, i64 } %t60, ptr %a61 %t62 = load ptr, ptr %a1 %t63 = load { ptr, i64, i64 }, ptr %a61 %t64 = call { ptr, i64, i64 } @finch.gen.load(ptr %t62, { ptr, i64, i64 } %t63, { ptr, i64, i64 } { ptr @.str.5902, i64 2, i64 0 }) store { ptr, i64, i64 } %t64, ptr %a65 %t66 = load ptr, ptr %a1 %t67 = load { ptr, i64, i64 }, ptr %a61 %t68 = call { ptr, i64, i64 } @finch.gen.load(ptr %t66, { ptr, i64, i64 } %t67, { ptr, i64, i64 } { ptr @.str.5903, i64 2, i64 0 }) store { ptr, i64, i64 } %t68, ptr %a69 store { ptr, i64, i64 } { ptr @.str.5904, i64 0, i64 0 }, ptr %a70 store { ptr, i64, i64 } { ptr @.str.5905, i64 0, i64 0 }, ptr %a71 %t72 = load %S.ast.Type, ptr %a2 %t73 = call i1 @finch.gen.isFloat(%S.ast.Type %t72) br i1 %t73, label %then8983, label %else8984 then8983: %t74 = load ptr, ptr %a1 %t75 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } { ptr @.str.5906, i64 9, i64 0 }, ptr %a77 store { ptr, i64, i64 } %t75, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) %t79 = load { ptr, i64, i64 }, ptr %a76 store { ptr, i64, i64 } %t79, ptr %a81 store { ptr, i64, i64 } { ptr @.str.5907, i64 1, i64 0 }, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) store { ptr, i64, i64 } %t79, ptr %a83 call void @finch_str_drop(ptr %a83) %t84 = load { ptr, i64, i64 }, ptr %a80 %t85 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } %t84, ptr %a87 store { ptr, i64, i64 } %t85, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) store { ptr, i64, i64 } %t84, ptr %a89 call void @finch_str_drop(ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a86 store { ptr, i64, i64 } %t90, ptr %a92 store { ptr, i64, i64 } { ptr @.str.5908, i64 2, i64 0 }, ptr %a93 call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) store { ptr, i64, i64 } %t90, ptr %a94 call void @finch_str_drop(ptr %a94) %t95 = load { ptr, i64, i64 }, ptr %a91 %t96 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t95, ptr %a98 store { ptr, i64, i64 } %t96, ptr %a99 call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) store { ptr, i64, i64 } %t95, ptr %a100 call void @finch_str_drop(ptr %a100) %t101 = load { ptr, i64, i64 }, ptr %a97 %t102 = call { ptr, i64, i64 } @finch.gen.op(ptr %t74, { ptr, i64, i64 } %t101) store { ptr, i64, i64 } %t101, ptr %a103 call void @finch_str_drop(ptr %a103) %t104 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } %t102, ptr %a70 store { ptr, i64, i64 } %t104, ptr %a105 call void @finch_str_drop(ptr %a105) %t106 = load ptr, ptr %a1 %t107 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } { ptr @.str.5909, i64 9, i64 0 }, ptr %a109 store { ptr, i64, i64 } %t107, ptr %a110 call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) %t111 = load { ptr, i64, i64 }, ptr %a108 store { ptr, i64, i64 } %t111, ptr %a113 store { ptr, i64, i64 } { ptr @.str.5910, i64 1, i64 0 }, ptr %a114 call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) store { ptr, i64, i64 } %t111, ptr %a115 call void @finch_str_drop(ptr %a115) %t116 = load { ptr, i64, i64 }, ptr %a112 %t117 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } %t116, ptr %a119 store { ptr, i64, i64 } %t117, ptr %a120 call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) store { ptr, i64, i64 } %t116, ptr %a121 call void @finch_str_drop(ptr %a121) %t122 = load { ptr, i64, i64 }, ptr %a118 store { ptr, i64, i64 } %t122, ptr %a124 store { ptr, i64, i64 } { ptr @.str.5911, i64 2, i64 0 }, ptr %a125 call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) store { ptr, i64, i64 } %t122, ptr %a126 call void @finch_str_drop(ptr %a126) %t127 = load { ptr, i64, i64 }, ptr %a123 %t128 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t127, ptr %a130 store { ptr, i64, i64 } %t128, ptr %a131 call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) store { ptr, i64, i64 } %t127, ptr %a132 call void @finch_str_drop(ptr %a132) %t133 = load { ptr, i64, i64 }, ptr %a129 %t134 = call { ptr, i64, i64 } @finch.gen.op(ptr %t106, { ptr, i64, i64 } %t133) store { ptr, i64, i64 } %t133, ptr %a135 call void @finch_str_drop(ptr %a135) %t136 = load { ptr, i64, i64 }, ptr %a71 store { ptr, i64, i64 } %t134, ptr %a71 store { ptr, i64, i64 } %t136, ptr %a137 call void @finch_str_drop(ptr %a137) br label %endif8985 else8984: %t138 = load ptr, ptr %a1 %t139 = load %S.ast.Type, ptr %a2 %t140 = call i1 @finch.gen.isSigned(%S.ast.Type %t139) %t141 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } { ptr @.str.5913, i64 1, i64 0 }, i1 %t140) store { ptr, i64, i64 } { ptr @.str.5912, i64 5, i64 0 }, ptr %a143 store { ptr, i64, i64 } %t141, ptr %a144 call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) store { ptr, i64, i64 } %t141, ptr %a145 call void @finch_str_drop(ptr %a145) %t146 = load { ptr, i64, i64 }, ptr %a142 store { ptr, i64, i64 } %t146, ptr %a148 store { ptr, i64, i64 } { ptr @.str.5914, i64 1, i64 0 }, ptr %a149 call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) store { ptr, i64, i64 } %t146, ptr %a150 call void @finch_str_drop(ptr %a150) %t151 = load { ptr, i64, i64 }, ptr %a147 %t152 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } %t151, ptr %a154 store { ptr, i64, i64 } %t152, ptr %a155 call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) store { ptr, i64, i64 } %t151, ptr %a156 call void @finch_str_drop(ptr %a156) %t157 = load { ptr, i64, i64 }, ptr %a153 store { ptr, i64, i64 } %t157, ptr %a159 store { ptr, i64, i64 } { ptr @.str.5915, i64 1, i64 0 }, ptr %a160 call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) store { ptr, i64, i64 } %t157, ptr %a161 call void @finch_str_drop(ptr %a161) %t162 = load { ptr, i64, i64 }, ptr %a158 %t163 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } %t162, ptr %a165 store { ptr, i64, i64 } %t163, ptr %a166 call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) store { ptr, i64, i64 } %t162, ptr %a167 call void @finch_str_drop(ptr %a167) %t168 = load { ptr, i64, i64 }, ptr %a164 store { ptr, i64, i64 } %t168, ptr %a170 store { ptr, i64, i64 } { ptr @.str.5916, i64 2, i64 0 }, ptr %a171 call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) store { ptr, i64, i64 } %t168, ptr %a172 call void @finch_str_drop(ptr %a172) %t173 = load { ptr, i64, i64 }, ptr %a169 %t174 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t173, ptr %a176 store { ptr, i64, i64 } %t174, ptr %a177 call void @finch_str_concat(ptr %a175, ptr %a176, ptr %a177) store { ptr, i64, i64 } %t173, ptr %a178 call void @finch_str_drop(ptr %a178) %t179 = load { ptr, i64, i64 }, ptr %a175 %t180 = call { ptr, i64, i64 } @finch.gen.op(ptr %t138, { ptr, i64, i64 } %t179) store { ptr, i64, i64 } %t179, ptr %a181 call void @finch_str_drop(ptr %a181) %t182 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } %t180, ptr %a70 store { ptr, i64, i64 } %t182, ptr %a183 call void @finch_str_drop(ptr %a183) %t184 = load ptr, ptr %a1 %t185 = load %S.ast.Type, ptr %a2 %t186 = call i1 @finch.gen.isSigned(%S.ast.Type %t185) %t187 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } { ptr @.str.5918, i64 1, i64 0 }, i1 %t186) store { ptr, i64, i64 } { ptr @.str.5917, i64 5, i64 0 }, ptr %a189 store { ptr, i64, i64 } %t187, ptr %a190 call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) store { ptr, i64, i64 } %t187, ptr %a191 call void @finch_str_drop(ptr %a191) %t192 = load { ptr, i64, i64 }, ptr %a188 store { ptr, i64, i64 } %t192, ptr %a194 store { ptr, i64, i64 } { ptr @.str.5919, i64 1, i64 0 }, ptr %a195 call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) store { ptr, i64, i64 } %t192, ptr %a196 call void @finch_str_drop(ptr %a196) %t197 = load { ptr, i64, i64 }, ptr %a193 %t198 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } %t197, ptr %a200 store { ptr, i64, i64 } %t198, ptr %a201 call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) store { ptr, i64, i64 } %t197, ptr %a202 call void @finch_str_drop(ptr %a202) %t203 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } %t203, ptr %a205 store { ptr, i64, i64 } { ptr @.str.5920, i64 1, i64 0 }, ptr %a206 call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206) store { ptr, i64, i64 } %t203, ptr %a207 call void @finch_str_drop(ptr %a207) %t208 = load { ptr, i64, i64 }, ptr %a204 %t209 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } %t208, ptr %a211 store { ptr, i64, i64 } %t209, ptr %a212 call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) store { ptr, i64, i64 } %t208, ptr %a213 call void @finch_str_drop(ptr %a213) %t214 = load { ptr, i64, i64 }, ptr %a210 store { ptr, i64, i64 } %t214, ptr %a216 store { ptr, i64, i64 } { ptr @.str.5921, i64 2, i64 0 }, ptr %a217 call void @finch_str_concat(ptr %a215, ptr %a216, ptr %a217) store { ptr, i64, i64 } %t214, ptr %a218 call void @finch_str_drop(ptr %a218) %t219 = load { ptr, i64, i64 }, ptr %a215 %t220 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t219, ptr %a222 store { ptr, i64, i64 } %t220, ptr %a223 call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223) store { ptr, i64, i64 } %t219, ptr %a224 call void @finch_str_drop(ptr %a224) %t225 = load { ptr, i64, i64 }, ptr %a221 %t226 = call { ptr, i64, i64 } @finch.gen.op(ptr %t184, { ptr, i64, i64 } %t225) store { ptr, i64, i64 } %t225, ptr %a227 call void @finch_str_drop(ptr %a227) %t228 = load { ptr, i64, i64 }, ptr %a71 store { ptr, i64, i64 } %t226, ptr %a71 store { ptr, i64, i64 } %t228, ptr %a229 call void @finch_str_drop(ptr %a229) br label %endif8985 endif8985: %t230 = load ptr, ptr %a1 %t231 = load ptr, ptr %a1 %t232 = load { ptr, i64, i64 }, ptr %a71 store { ptr, i64, i64 } { ptr @.str.5923, i64 8, i64 0 }, ptr %a234 store { ptr, i64, i64 } %t232, ptr %a235 call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) %t236 = load { ptr, i64, i64 }, ptr %a233 store { ptr, i64, i64 } %t236, ptr %a238 store { ptr, i64, i64 } { ptr @.str.5924, i64 7, i64 0 }, ptr %a239 call void @finch_str_concat(ptr %a237, ptr %a238, ptr %a239) store { ptr, i64, i64 } %t236, ptr %a240 call void @finch_str_drop(ptr %a240) %t241 = load { ptr, i64, i64 }, ptr %a237 %t242 = call { ptr, i64, i64 } @finch.gen.op(ptr %t231, { ptr, i64, i64 } %t241) store { ptr, i64, i64 } %t241, ptr %a243 call void @finch_str_drop(ptr %a243) store { ptr, i64, i64 } { ptr @.str.5922, i64 8, i64 0 }, ptr %a245 store { ptr, i64, i64 } %t242, ptr %a246 call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) store { ptr, i64, i64 } %t242, ptr %a247 call void @finch_str_drop(ptr %a247) %t248 = load { ptr, i64, i64 }, ptr %a244 store { ptr, i64, i64 } %t248, ptr %a250 store { ptr, i64, i64 } { ptr @.str.5925, i64 2, i64 0 }, ptr %a251 call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) store { ptr, i64, i64 } %t248, ptr %a252 call void @finch_str_drop(ptr %a252) %t253 = load { ptr, i64, i64 }, ptr %a249 %t254 = load ptr, ptr %a1 %t255 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } { ptr @.str.5926, i64 8, i64 0 }, ptr %a257 store { ptr, i64, i64 } %t255, ptr %a258 call void @finch_str_concat(ptr %a256, ptr %a257, ptr %a258) %t259 = load { ptr, i64, i64 }, ptr %a256 store { ptr, i64, i64 } %t259, ptr %a261 store { ptr, i64, i64 } { ptr @.str.5927, i64 7, i64 0 }, ptr %a262 call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) store { ptr, i64, i64 } %t259, ptr %a263 call void @finch_str_drop(ptr %a263) %t264 = load { ptr, i64, i64 }, ptr %a260 %t265 = call { ptr, i64, i64 } @finch.gen.op(ptr %t254, { ptr, i64, i64 } %t264) store { ptr, i64, i64 } %t264, ptr %a266 call void @finch_str_drop(ptr %a266) store { ptr, i64, i64 } %t253, ptr %a268 store { ptr, i64, i64 } %t265, ptr %a269 call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269) store { ptr, i64, i64 } %t253, ptr %a270 call void @finch_str_drop(ptr %a270) store { ptr, i64, i64 } %t265, ptr %a271 call void @finch_str_drop(ptr %a271) %t272 = load { ptr, i64, i64 }, ptr %a267 %t273 = call { ptr, i64, i64 } @finch.gen.op(ptr %t230, { ptr, i64, i64 } %t272) store { ptr, i64, i64 } %t272, ptr %a274 call void @finch_str_drop(ptr %a274) %t275 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t273, ptr %a33 store { ptr, i64, i64 } %t275, ptr %a276 call void @finch_str_drop(ptr %a276) call void @finch_str_drop(ptr %a71) call void @finch_str_drop(ptr %a70) call void @finch_str_drop(ptr %a69) call void @finch_str_drop(ptr %a65) call void @finch_str_drop(ptr %a61) br label %endif8982 endif8982: %t277 = load ptr, ptr %a1 %t278 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } { ptr @.str.5928, i64 8, i64 0 }, ptr %a280 store { ptr, i64, i64 } %t278, ptr %a281 call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) %t282 = load { ptr, i64, i64 }, ptr %a279 call void @finch.gen.emit(ptr %t277, { ptr, i64, i64 } %t282) store { ptr, i64, i64 } %t282, ptr %a283 call void @finch_str_drop(ptr %a283) %t284 = load ptr, ptr %a1 %t285 = load %S.gen.Saved, ptr %a32 %t286 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } { ptr @.str.5929, i64 20, i64 0 }, ptr %a288 store { ptr, i64, i64 } %t286, ptr %a289 call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) %t290 = load { ptr, i64, i64 }, ptr %a287 store { ptr, i64, i64 } %t290, ptr %a292 store { ptr, i64, i64 } { ptr @.str.5930, i64 16, i64 0 }, ptr %a293 call void @finch_str_concat(ptr %a291, ptr %a292, ptr %a293) store { ptr, i64, i64 } %t290, ptr %a294 call void @finch_str_drop(ptr %a294) %t295 = load { ptr, i64, i64 }, ptr %a291 call void @finch.gen.endHelper(ptr %t284, %S.gen.Saved %t285, { ptr, i64, i64 } %t295) store { ptr, i64, i64 } %t295, ptr %a296 call void @finch_str_drop(ptr %a296) %t297 = load { ptr, i64, i64 }, ptr %a10 call void @finch_str_drop(ptr %a33) call void @finch.drop.S_gen_Saved(ptr %a32) ret { ptr, i64, i64 } %t297 } define internal %S.gen.Val @finch.gen.strMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca %S.gen.Val, align 16 %a54 = alloca %S.ast.Type, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca %S.gen.Val, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca %S.gen.Val, align 16 %a81 = alloca %S.ast.Type, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca %S.gen.Val, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca %S.gen.Val, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca { ptr, i64, i64 }, align 16 %a308 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca { ptr, i64, i64 }, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a377 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a401 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a403 = alloca { ptr, i64, i64 }, align 16 %a406 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a411 = alloca { ptr, i64, i64 }, align 16 %a412 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a416 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca %S.gen.Val, align 16 %a446 = alloca i64, align 16 %a458 = alloca %S.gen.Val, align 16 %a464 = alloca { ptr, i64, i64 }, align 16 %a468 = alloca { ptr, i64, i64 }, align 16 %a471 = alloca { ptr, i64, i64 }, align 16 %a472 = alloca { ptr, i64, i64 }, align 16 %a473 = alloca { ptr, i64, i64 }, align 16 %a475 = alloca { ptr, i64, i64 }, align 16 %a476 = alloca { ptr, i64, i64 }, align 16 %a477 = alloca { ptr, i64, i64 }, align 16 %a478 = alloca { ptr, i64, i64 }, align 16 %a481 = alloca { ptr, i64, i64 }, align 16 %a482 = alloca { ptr, i64, i64 }, align 16 %a483 = alloca { ptr, i64, i64 }, align 16 %a484 = alloca { ptr, i64, i64 }, align 16 %a486 = alloca { ptr, i64, i64 }, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a488 = alloca { ptr, i64, i64 }, align 16 %a489 = alloca { ptr, i64, i64 }, align 16 %a492 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a494 = alloca { ptr, i64, i64 }, align 16 %a495 = alloca { ptr, i64, i64 }, align 16 %a497 = alloca { ptr, i64, i64 }, align 16 %a498 = alloca { ptr, i64, i64 }, align 16 %a499 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a503 = alloca { ptr, i64, i64 }, align 16 %a504 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a508 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca { ptr, i64, i64 }, align 16 %a511 = alloca { ptr, i64, i64 }, align 16 %a513 = alloca { ptr, i64, i64 }, align 16 %a526 = alloca { ptr, i64, i64 }, align 16 %a527 = alloca { ptr, i64, i64 }, align 16 %a541 = alloca %S.gen.Val, align 16 %a545 = alloca { ptr, i64, i64 }, align 16 %a548 = alloca { ptr, i64, i64 }, align 16 %a551 = alloca { ptr, i64, i64 }, align 16 %a552 = alloca { ptr, i64, i64 }, align 16 %a553 = alloca { ptr, i64, i64 }, align 16 %a555 = alloca { ptr, i64, i64 }, align 16 %a556 = alloca { ptr, i64, i64 }, align 16 %a557 = alloca { ptr, i64, i64 }, align 16 %a558 = alloca { ptr, i64, i64 }, align 16 %a561 = alloca { ptr, i64, i64 }, align 16 %a562 = alloca { ptr, i64, i64 }, align 16 %a563 = alloca { ptr, i64, i64 }, align 16 %a564 = alloca { ptr, i64, i64 }, align 16 %a566 = alloca { ptr, i64, i64 }, align 16 %a567 = alloca { ptr, i64, i64 }, align 16 %a568 = alloca { ptr, i64, i64 }, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a572 = alloca { ptr, i64, i64 }, align 16 %a573 = alloca { ptr, i64, i64 }, align 16 %a574 = alloca { ptr, i64, i64 }, align 16 %a575 = alloca { ptr, i64, i64 }, align 16 %a577 = alloca { ptr, i64, i64 }, align 16 %a578 = alloca { ptr, i64, i64 }, align 16 %a579 = alloca { ptr, i64, i64 }, align 16 %a580 = alloca { ptr, i64, i64 }, align 16 %a582 = alloca { ptr, i64, i64 }, align 16 %a591 = alloca %S.ast.Type, align 16 %a595 = alloca { ptr, i64, i64 }, align 16 %a596 = alloca { ptr, i64, i64 }, align 16 %a620 = alloca %S.gen.Val, align 16 %a621 = alloca %S.ast.Type, align 16 %a623 = alloca { ptr, i64, i64 }, align 16 %a624 = alloca { ptr, i64, i64 }, align 16 %a626 = alloca %S.gen.Val, align 16 %a627 = alloca { ptr, i64, i64 }, align 16 %a630 = alloca { ptr, i64, i64 }, align 16 %a631 = alloca { ptr, i64, i64 }, align 16 %a632 = alloca { ptr, i64, i64 }, align 16 %a634 = alloca { ptr, i64, i64 }, align 16 %a635 = alloca { ptr, i64, i64 }, align 16 %a636 = alloca { ptr, i64, i64 }, align 16 %a637 = alloca { ptr, i64, i64 }, align 16 %a640 = alloca { ptr, i64, i64 }, align 16 %a641 = alloca { ptr, i64, i64 }, align 16 %a642 = alloca { ptr, i64, i64 }, align 16 %a643 = alloca { ptr, i64, i64 }, align 16 %a645 = alloca { ptr, i64, i64 }, align 16 %a646 = alloca { ptr, i64, i64 }, align 16 %a647 = alloca { ptr, i64, i64 }, align 16 %a648 = alloca { ptr, i64, i64 }, align 16 %a651 = alloca { ptr, i64, i64 }, align 16 %a652 = alloca { ptr, i64, i64 }, align 16 %a653 = alloca { ptr, i64, i64 }, align 16 %a654 = alloca { ptr, i64, i64 }, align 16 %a656 = alloca { ptr, i64, i64 }, align 16 %a657 = alloca { ptr, i64, i64 }, align 16 %a658 = alloca { ptr, i64, i64 }, align 16 %a659 = alloca { ptr, i64, i64 }, align 16 %a661 = alloca { ptr, i64, i64 }, align 16 %a670 = alloca { ptr, i64, i64 }, align 16 %a671 = alloca { ptr, i64, i64 }, align 16 %a678 = alloca { ptr, i64, i64 }, align 16 %a681 = alloca { ptr, i64, i64 }, align 16 %a682 = alloca { ptr, i64, i64 }, align 16 %a683 = alloca { ptr, i64, i64 }, align 16 %a685 = alloca { ptr, i64, i64 }, align 16 %a686 = alloca { ptr, i64, i64 }, align 16 %a687 = alloca { ptr, i64, i64 }, align 16 %a688 = alloca { ptr, i64, i64 }, align 16 %a691 = alloca { ptr, i64, i64 }, align 16 %a692 = alloca { ptr, i64, i64 }, align 16 %a693 = alloca { ptr, i64, i64 }, align 16 %a694 = alloca { ptr, i64, i64 }, align 16 %a696 = alloca { ptr, i64, i64 }, align 16 %a697 = alloca { ptr, i64, i64 }, align 16 %a698 = alloca { ptr, i64, i64 }, align 16 %a699 = alloca { ptr, i64, i64 }, align 16 %a701 = alloca { ptr, i64, i64 }, align 16 %a708 = alloca %S.ast.Type, align 16 %a714 = alloca { ptr, i64, i64 }, align 16 %a715 = alloca { ptr, i64, i64 }, align 16 %a716 = alloca { ptr, i64, i64 }, align 16 %a718 = alloca { ptr, i64, i64 }, align 16 %a719 = alloca { ptr, i64, i64 }, align 16 %a720 = alloca { ptr, i64, i64 }, align 16 %a721 = alloca { ptr, i64, i64 }, align 16 %a723 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 call void @finch_str_copy(ptr %a7, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load ptr, ptr %a1 %t11 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t10) store { ptr, i64, i64 } %t11, ptr %a12 %t13 = load ptr, ptr %a1 %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null br i1 %t15, label %panic8986, label %ok8987 panic8986: call void @finch_panic(ptr @.str.5931, i64 5616, ptr @.str.5932) unreachable ok8987: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 1 %t17 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t18 = load i64, ptr %t17 %t19 = load { ptr, i64, i64 }, ptr %t16 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 br i1 %t21, label %range8988, label %inrange8989 range8988: call void @finch_panic_index(ptr @.str.5933, i64 5616, i64 %t18, i64 %t20) unreachable inrange8989: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t18 %t24 = load { ptr, i64, i64 }, ptr %t23 %t25 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t13, { ptr, i64, i64 } %t24) store { ptr, i64, i64 } %t25, ptr %a26 %t27 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.5934, i64 3, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 br i1 %t31, label %then8990, label %endif8992 then8990: %t32 = load ptr, ptr %a1 %t33 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t32, %S.ast.Node %t33, i64 2) %t34 = load ptr, ptr %a1 %t35 = load ptr, ptr %a1 %t36 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t37 = load { ptr, i64, i64 }, ptr %t36 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 1, %t38 br i1 %t39, label %range8993, label %inrange8994 range8993: call void @finch_panic_index(ptr @.str.5935, i64 5619, i64 1, i64 %t38) unreachable inrange8994: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 1 %t42 = load %S.ast.Node, ptr %t41 %t43 = call %S.gen.Val @finch.gen.expr(ptr %t35, %S.ast.Node %t42) %t44 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5936, i64 3, i64 0 }) %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 1, %t47 br i1 %t48, label %range8995, label %inrange8996 range8995: call void @finch_panic_index(ptr @.str.5937, i64 5619, i64 1, i64 %t47) unreachable inrange8996: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 %t51 = load %S.ast.Node, ptr %t50 %t52 = call %S.gen.Val @finch.gen.coerce(ptr %t34, %S.gen.Val %t43, %S.ast.Type %t44, %S.ast.Node %t51, { ptr, i64, i64 } { ptr @.str.5938, i64 9, i64 0 }) store %S.gen.Val %t43, ptr %a53 call void @finch.drop.S_gen_Val(ptr %a53) store %S.ast.Type %t44, ptr %a54 call void @finch.drop.S_ast_Type(ptr %a54) %t55 = extractvalue %S.gen.Val %t52, 0 store { ptr, i64, i64 } %t55, ptr %a56 call void @finch_str_copy(ptr %a57, ptr %a56) %t58 = load { ptr, i64, i64 }, ptr %a57 store %S.gen.Val %t52, ptr %a59 call void @finch.drop.S_gen_Val(ptr %a59) store { ptr, i64, i64 } %t58, ptr %a60 %t61 = load ptr, ptr %a1 %t62 = load ptr, ptr %a1 %t63 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t64 = load { ptr, i64, i64 }, ptr %t63 %t65 = extractvalue { ptr, i64, i64 } %t64, 1 %t66 = icmp uge i64 2, %t65 br i1 %t66, label %range8997, label %inrange8998 range8997: call void @finch_panic_index(ptr @.str.5939, i64 5620, i64 2, i64 %t65) unreachable inrange8998: %t67 = extractvalue { ptr, i64, i64 } %t64, 0 %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 2 %t69 = load %S.ast.Node, ptr %t68 %t70 = call %S.gen.Val @finch.gen.expr(ptr %t62, %S.ast.Node %t69) %t71 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5940, i64 3, i64 0 }) %t72 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t73 = load { ptr, i64, i64 }, ptr %t72 %t74 = extractvalue { ptr, i64, i64 } %t73, 1 %t75 = icmp uge i64 2, %t74 br i1 %t75, label %range8999, label %inrange9000 range8999: call void @finch_panic_index(ptr @.str.5941, i64 5620, i64 2, i64 %t74) unreachable inrange9000: %t76 = extractvalue { ptr, i64, i64 } %t73, 0 %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 2 %t78 = load %S.ast.Node, ptr %t77 %t79 = call %S.gen.Val @finch.gen.coerce(ptr %t61, %S.gen.Val %t70, %S.ast.Type %t71, %S.ast.Node %t78, { ptr, i64, i64 } { ptr @.str.5942, i64 7, i64 0 }) store %S.gen.Val %t70, ptr %a80 call void @finch.drop.S_gen_Val(ptr %a80) store %S.ast.Type %t71, ptr %a81 call void @finch.drop.S_ast_Type(ptr %a81) %t82 = extractvalue %S.gen.Val %t79, 0 store { ptr, i64, i64 } %t82, ptr %a83 call void @finch_str_copy(ptr %a84, ptr %a83) %t85 = load { ptr, i64, i64 }, ptr %a84 store %S.gen.Val %t79, ptr %a86 call void @finch.drop.S_gen_Val(ptr %a86) store { ptr, i64, i64 } %t85, ptr %a87 %t88 = load ptr, ptr %a1 %t89 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } { ptr @.str.5943, i64 29, i64 0 }, ptr %a91 store { ptr, i64, i64 } %t89, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a90 store { ptr, i64, i64 } %t93, ptr %a95 store { ptr, i64, i64 } { ptr @.str.5944, i64 6, i64 0 }, ptr %a96 call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) store { ptr, i64, i64 } %t93, ptr %a97 call void @finch_str_drop(ptr %a97) %t98 = load { ptr, i64, i64 }, ptr %a94 %t99 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t98, ptr %a101 store { ptr, i64, i64 } %t99, ptr %a102 call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) store { ptr, i64, i64 } %t98, ptr %a103 call void @finch_str_drop(ptr %a103) %t104 = load { ptr, i64, i64 }, ptr %a100 store { ptr, i64, i64 } %t104, ptr %a106 store { ptr, i64, i64 } { ptr @.str.5945, i64 6, i64 0 }, ptr %a107 call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) store { ptr, i64, i64 } %t104, ptr %a108 call void @finch_str_drop(ptr %a108) %t109 = load { ptr, i64, i64 }, ptr %a105 %t110 = load { ptr, i64, i64 }, ptr %a60 store { ptr, i64, i64 } %t109, ptr %a112 store { ptr, i64, i64 } %t110, ptr %a113 call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) store { ptr, i64, i64 } %t109, ptr %a114 call void @finch_str_drop(ptr %a114) %t115 = load { ptr, i64, i64 }, ptr %a111 store { ptr, i64, i64 } %t115, ptr %a117 store { ptr, i64, i64 } { ptr @.str.5946, i64 6, i64 0 }, ptr %a118 call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) store { ptr, i64, i64 } %t115, ptr %a119 call void @finch_str_drop(ptr %a119) %t120 = load { ptr, i64, i64 }, ptr %a116 %t121 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t120, ptr %a123 store { ptr, i64, i64 } %t121, ptr %a124 call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) store { ptr, i64, i64 } %t120, ptr %a125 call void @finch_str_drop(ptr %a125) %t126 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t126, ptr %a128 store { ptr, i64, i64 } { ptr @.str.5947, i64 6, i64 0 }, ptr %a129 call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) store { ptr, i64, i64 } %t126, ptr %a130 call void @finch_str_drop(ptr %a130) %t131 = load { ptr, i64, i64 }, ptr %a127 %t132 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t131, ptr %a134 store { ptr, i64, i64 } %t132, ptr %a135 call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) store { ptr, i64, i64 } %t131, ptr %a136 call void @finch_str_drop(ptr %a136) %t137 = load { ptr, i64, i64 }, ptr %a133 store { ptr, i64, i64 } %t137, ptr %a139 store { ptr, i64, i64 } { ptr @.str.5948, i64 6, i64 0 }, ptr %a140 call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) store { ptr, i64, i64 } %t137, ptr %a141 call void @finch_str_drop(ptr %a141) %t142 = load { ptr, i64, i64 }, ptr %a138 %t143 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t144 = load i64, ptr %t143 call void @finch_str_from_int(ptr %a145, i64 %t144) %t146 = load { ptr, i64, i64 }, ptr %a145 store { ptr, i64, i64 } %t142, ptr %a148 store { ptr, i64, i64 } %t146, ptr %a149 call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) store { ptr, i64, i64 } %t142, ptr %a150 call void @finch_str_drop(ptr %a150) store { ptr, i64, i64 } %t146, ptr %a151 call void @finch_str_drop(ptr %a151) %t152 = load { ptr, i64, i64 }, ptr %a147 store { ptr, i64, i64 } %t152, ptr %a154 store { ptr, i64, i64 } { ptr @.str.5949, i64 1, i64 0 }, ptr %a155 call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) store { ptr, i64, i64 } %t152, ptr %a156 call void @finch_str_drop(ptr %a156) %t157 = load { ptr, i64, i64 }, ptr %a153 call void @finch.gen.emit(ptr %t88, { ptr, i64, i64 } %t157) store { ptr, i64, i64 } %t157, ptr %a158 call void @finch_str_drop(ptr %a158) %t159 = load ptr, ptr %a1 %t160 = load { ptr, i64, i64 }, ptr %a12 %t161 = call { ptr, i64, i64 } @finch.gen.load(ptr %t159, { ptr, i64, i64 } { ptr @.str.5950, i64 17, i64 0 }, { ptr, i64, i64 } %t160) %t162 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t161, 0 %t163 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5951, i64 3, i64 0 }) %t164 = insertvalue %S.gen.Val %t162, %S.ast.Type %t163, 1 %t165 = insertvalue %S.gen.Val %t164, i1 true, 2 call void @finch_str_drop(ptr %a87) call void @finch_str_drop(ptr %a60) call void @finch_str_drop(ptr %a26) call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t165 endif8992: %t166 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t166, ptr %a167 store { ptr, i64, i64 } { ptr @.str.5952, i64 4, i64 0 }, ptr %a168 %t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168) %t170 = icmp ne i32 %t169, 0 br label %logic.from9001 logic.from9001: br i1 %t170, label %logic.end9003, label %logic.rhs9002 logic.rhs9002: %t171 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t171, ptr %a172 store { ptr, i64, i64 } { ptr @.str.5953, i64 8, i64 0 }, ptr %a173 %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) %t175 = icmp ne i32 %t174, 0 br label %logic.rend9004 logic.rend9004: br label %logic.end9003 logic.end9003: %t176 = phi i1 [ true, %logic.from9001 ], [ %t175, %logic.rend9004 ] br label %logic.from9005 logic.from9005: br i1 %t176, label %logic.end9007, label %logic.rhs9006 logic.rhs9006: %t177 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t177, ptr %a178 store { ptr, i64, i64 } { ptr @.str.5954, i64 11, i64 0 }, ptr %a179 %t180 = call i32 @finch_str_eq(ptr %a178, ptr %a179) %t181 = icmp ne i32 %t180, 0 br label %logic.rend9008 logic.rend9008: br label %logic.end9007 logic.end9007: %t182 = phi i1 [ true, %logic.from9005 ], [ %t181, %logic.rend9008 ] br label %logic.from9009 logic.from9009: br i1 %t182, label %logic.end9011, label %logic.rhs9010 logic.rhs9010: %t183 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t183, ptr %a184 store { ptr, i64, i64 } { ptr @.str.5955, i64 9, i64 0 }, ptr %a185 %t186 = call i32 @finch_str_eq(ptr %a184, ptr %a185) %t187 = icmp ne i32 %t186, 0 br label %logic.rend9012 logic.rend9012: br label %logic.end9011 logic.end9011: %t188 = phi i1 [ true, %logic.from9009 ], [ %t187, %logic.rend9012 ] br i1 %t188, label %then9013, label %endif9015 then9013: %t189 = load ptr, ptr %a1 %t190 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t189, %S.ast.Node %t190, i64 1) %t191 = load ptr, ptr %a1 %t192 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t193 = load { ptr, i64, i64 }, ptr %t192 %t194 = extractvalue { ptr, i64, i64 } %t193, 1 %t195 = icmp uge i64 1, %t194 br i1 %t195, label %range9016, label %inrange9017 range9016: call void @finch_panic_index(ptr @.str.5956, i64 5626, i64 1, i64 %t194) unreachable inrange9017: %t196 = extractvalue { ptr, i64, i64 } %t193, 0 %t197 = getelementptr inbounds %S.ast.Node, ptr %t196, i64 1 %t198 = load %S.ast.Node, ptr %t197 %t199 = call %S.gen.Val @finch.gen.strArg(ptr %t191, %S.ast.Node %t198, { ptr, i64, i64 } { ptr @.str.5957, i64 20, i64 0 }) store %S.gen.Val %t199, ptr %a200 %t201 = load ptr, ptr %a1 %t202 = load %S.gen.Val, ptr %a200 %t203 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t201, %S.gen.Val %t202) store { ptr, i64, i64 } %t203, ptr %a204 %t205 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t205, ptr %a206 store { ptr, i64, i64 } { ptr @.str.5958, i64 4, i64 0 }, ptr %a207 %t208 = call i32 @finch_str_eq(ptr %a206, ptr %a207) %t209 = icmp ne i32 %t208, 0 br i1 %t209, label %then9018, label %endif9020 then9018: %t210 = load ptr, ptr %a1 %t211 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5959, i64 29, i64 0 }, ptr %a213 store { ptr, i64, i64 } %t211, ptr %a214 call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) %t215 = load { ptr, i64, i64 }, ptr %a212 store { ptr, i64, i64 } %t215, ptr %a217 store { ptr, i64, i64 } { ptr @.str.5960, i64 6, i64 0 }, ptr %a218 call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) store { ptr, i64, i64 } %t215, ptr %a219 call void @finch_str_drop(ptr %a219) %t220 = load { ptr, i64, i64 }, ptr %a216 %t221 = load { ptr, i64, i64 }, ptr %a204 store { ptr, i64, i64 } %t220, ptr %a223 store { ptr, i64, i64 } %t221, ptr %a224 call void @finch_str_concat(ptr %a222, ptr %a223, ptr %a224) store { ptr, i64, i64 } %t220, ptr %a225 call void @finch_str_drop(ptr %a225) %t226 = load { ptr, i64, i64 }, ptr %a222 store { ptr, i64, i64 } %t226, ptr %a228 store { ptr, i64, i64 } { ptr @.str.5961, i64 1, i64 0 }, ptr %a229 call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229) store { ptr, i64, i64 } %t226, ptr %a230 call void @finch_str_drop(ptr %a230) %t231 = load { ptr, i64, i64 }, ptr %a227 %t232 = call { ptr, i64, i64 } @finch.gen.op(ptr %t210, { ptr, i64, i64 } %t231) store { ptr, i64, i64 } %t231, ptr %a233 call void @finch_str_drop(ptr %a233) store { ptr, i64, i64 } %t232, ptr %a234 %t235 = load ptr, ptr %a1 %t236 = load %S.gen.Val, ptr %a200 call void @finch.gen.release(ptr %t235, %S.gen.Val %t236) %t237 = load { ptr, i64, i64 }, ptr %a234 store { ptr, i64, i64 } %t237, ptr %a238 call void @finch_str_copy(ptr %a239, ptr %a238) %t240 = load { ptr, i64, i64 }, ptr %a239 %t241 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t240, 0 %t242 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5962, i64 3, i64 0 }) %t243 = insertvalue %S.gen.Val %t241, %S.ast.Type %t242, 1 call void @finch_str_drop(ptr %a234) call void @finch_str_drop(ptr %a204) call void @finch.drop.S_gen_Val(ptr %a200) call void @finch_str_drop(ptr %a26) call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t243 endif9020: %t244 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t244, ptr %a245 store { ptr, i64, i64 } { ptr @.str.5963, i64 8, i64 0 }, ptr %a246 %t247 = call i32 @finch_str_eq(ptr %a245, ptr %a246) %t248 = icmp ne i32 %t247, 0 br i1 %t248, label %then9021, label %endif9023 then9021: %t249 = load ptr, ptr %a1 %t250 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5964, i64 29, i64 0 }, ptr %a252 store { ptr, i64, i64 } %t250, ptr %a253 call void @finch_str_concat(ptr %a251, ptr %a252, ptr %a253) %t254 = load { ptr, i64, i64 }, ptr %a251 store { ptr, i64, i64 } %t254, ptr %a256 store { ptr, i64, i64 } { ptr @.str.5965, i64 6, i64 0 }, ptr %a257 call void @finch_str_concat(ptr %a255, ptr %a256, ptr %a257) store { ptr, i64, i64 } %t254, ptr %a258 call void @finch_str_drop(ptr %a258) %t259 = load { ptr, i64, i64 }, ptr %a255 %t260 = load { ptr, i64, i64 }, ptr %a204 store { ptr, i64, i64 } %t259, ptr %a262 store { ptr, i64, i64 } %t260, ptr %a263 call void @finch_str_concat(ptr %a261, ptr %a262, ptr %a263) store { ptr, i64, i64 } %t259, ptr %a264 call void @finch_str_drop(ptr %a264) %t265 = load { ptr, i64, i64 }, ptr %a261 store { ptr, i64, i64 } %t265, ptr %a267 store { ptr, i64, i64 } { ptr @.str.5966, i64 1, i64 0 }, ptr %a268 call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) store { ptr, i64, i64 } %t265, ptr %a269 call void @finch_str_drop(ptr %a269) %t270 = load { ptr, i64, i64 }, ptr %a266 %t271 = call { ptr, i64, i64 } @finch.gen.op(ptr %t249, { ptr, i64, i64 } %t270) store { ptr, i64, i64 } %t270, ptr %a272 call void @finch_str_drop(ptr %a272) store { ptr, i64, i64 } %t271, ptr %a273 %t274 = load ptr, ptr %a1 %t275 = load { ptr, i64, i64 }, ptr %a273 store { ptr, i64, i64 } { ptr @.str.5967, i64 13, i64 0 }, ptr %a277 store { ptr, i64, i64 } %t275, ptr %a278 call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) %t279 = load { ptr, i64, i64 }, ptr %a276 store { ptr, i64, i64 } %t279, ptr %a281 store { ptr, i64, i64 } { ptr @.str.5968, i64 3, i64 0 }, ptr %a282 call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282) store { ptr, i64, i64 } %t279, ptr %a283 call void @finch_str_drop(ptr %a283) %t284 = load { ptr, i64, i64 }, ptr %a280 %t285 = call { ptr, i64, i64 } @finch.gen.op(ptr %t274, { ptr, i64, i64 } %t284) store { ptr, i64, i64 } %t284, ptr %a286 call void @finch_str_drop(ptr %a286) store { ptr, i64, i64 } %t285, ptr %a287 %t288 = load ptr, ptr %a1 %t289 = load %S.gen.Val, ptr %a200 call void @finch.gen.release(ptr %t288, %S.gen.Val %t289) %t290 = load { ptr, i64, i64 }, ptr %a287 store { ptr, i64, i64 } %t290, ptr %a291 call void @finch_str_copy(ptr %a292, ptr %a291) %t293 = load { ptr, i64, i64 }, ptr %a292 %t294 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t293, 0 %t295 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5969, i64 4, i64 0 }) %t296 = insertvalue %S.gen.Val %t294, %S.ast.Type %t295, 1 call void @finch_str_drop(ptr %a287) call void @finch_str_drop(ptr %a273) call void @finch_str_drop(ptr %a204) call void @finch.drop.S_gen_Val(ptr %a200) call void @finch_str_drop(ptr %a26) call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t296 endif9023: store { ptr, i64, i64 } { ptr @.str.5970, i64 17, i64 0 }, ptr %a297 %t298 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t298, ptr %a299 store { ptr, i64, i64 } { ptr @.str.5971, i64 9, i64 0 }, ptr %a300 %t301 = call i32 @finch_str_eq(ptr %a299, ptr %a300) %t302 = icmp ne i32 %t301, 0 br i1 %t302, label %then9024, label %endif9026 then9024: %t303 = load { ptr, i64, i64 }, ptr %a297 store { ptr, i64, i64 } { ptr @.str.5972, i64 15, i64 0 }, ptr %a297 store { ptr, i64, i64 } %t303, ptr %a304 call void @finch_str_drop(ptr %a304) br label %endif9026 endif9026: %t305 = load ptr, ptr %a1 %t306 = load { ptr, i64, i64 }, ptr %a297 store { ptr, i64, i64 } { ptr @.str.5973, i64 9, i64 0 }, ptr %a308 store { ptr, i64, i64 } %t306, ptr %a309 call void @finch_str_concat(ptr %a307, ptr %a308, ptr %a309) %t310 = load { ptr, i64, i64 }, ptr %a307 store { ptr, i64, i64 } %t310, ptr %a312 store { ptr, i64, i64 } { ptr @.str.5974, i64 5, i64 0 }, ptr %a313 call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313) store { ptr, i64, i64 } %t310, ptr %a314 call void @finch_str_drop(ptr %a314) %t315 = load { ptr, i64, i64 }, ptr %a311 %t316 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t315, ptr %a318 store { ptr, i64, i64 } %t316, ptr %a319 call void @finch_str_concat(ptr %a317, ptr %a318, ptr %a319) store { ptr, i64, i64 } %t315, ptr %a320 call void @finch_str_drop(ptr %a320) %t321 = load { ptr, i64, i64 }, ptr %a317 store { ptr, i64, i64 } %t321, ptr %a323 store { ptr, i64, i64 } { ptr @.str.5975, i64 6, i64 0 }, ptr %a324 call void @finch_str_concat(ptr %a322, ptr %a323, ptr %a324) store { ptr, i64, i64 } %t321, ptr %a325 call void @finch_str_drop(ptr %a325) %t326 = load { ptr, i64, i64 }, ptr %a322 %t327 = load { ptr, i64, i64 }, ptr %a204 store { ptr, i64, i64 } %t326, ptr %a329 store { ptr, i64, i64 } %t327, ptr %a330 call void @finch_str_concat(ptr %a328, ptr %a329, ptr %a330) store { ptr, i64, i64 } %t326, ptr %a331 call void @finch_str_drop(ptr %a331) %t332 = load { ptr, i64, i64 }, ptr %a328 store { ptr, i64, i64 } %t332, ptr %a334 store { ptr, i64, i64 } { ptr @.str.5976, i64 1, i64 0 }, ptr %a335 call void @finch_str_concat(ptr %a333, ptr %a334, ptr %a335) store { ptr, i64, i64 } %t332, ptr %a336 call void @finch_str_drop(ptr %a336) %t337 = load { ptr, i64, i64 }, ptr %a333 %t338 = call { ptr, i64, i64 } @finch.gen.op(ptr %t305, { ptr, i64, i64 } %t337) store { ptr, i64, i64 } %t337, ptr %a339 call void @finch_str_drop(ptr %a339) store { ptr, i64, i64 } %t338, ptr %a340 %t341 = load ptr, ptr %a1 %t342 = load { ptr, i64, i64 }, ptr %a340 store { ptr, i64, i64 } { ptr @.str.5977, i64 12, i64 0 }, ptr %a344 store { ptr, i64, i64 } %t342, ptr %a345 call void @finch_str_concat(ptr %a343, ptr %a344, ptr %a345) %t346 = load { ptr, i64, i64 }, ptr %a343 store { ptr, i64, i64 } %t346, ptr %a348 store { ptr, i64, i64 } { ptr @.str.5978, i64 3, i64 0 }, ptr %a349 call void @finch_str_concat(ptr %a347, ptr %a348, ptr %a349) store { ptr, i64, i64 } %t346, ptr %a350 call void @finch_str_drop(ptr %a350) %t351 = load { ptr, i64, i64 }, ptr %a347 %t352 = call { ptr, i64, i64 } @finch.gen.op(ptr %t341, { ptr, i64, i64 } %t351) store { ptr, i64, i64 } %t351, ptr %a353 call void @finch_str_drop(ptr %a353) store { ptr, i64, i64 } %t352, ptr %a354 %t355 = load ptr, ptr %a1 %t356 = load %S.gen.Val, ptr %a200 call void @finch.gen.release(ptr %t355, %S.gen.Val %t356) %t357 = load { ptr, i64, i64 }, ptr %a354 store { ptr, i64, i64 } %t357, ptr %a358 call void @finch_str_copy(ptr %a359, ptr %a358) %t360 = load { ptr, i64, i64 }, ptr %a359 %t361 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t360, 0 %t362 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5979, i64 4, i64 0 }) %t363 = insertvalue %S.gen.Val %t361, %S.ast.Type %t362, 1 call void @finch_str_drop(ptr %a354) call void @finch_str_drop(ptr %a340) call void @finch_str_drop(ptr %a297) call void @finch_str_drop(ptr %a204) call void @finch.drop.S_gen_Val(ptr %a200) call void @finch_str_drop(ptr %a26) call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t363 endif9015: %t364 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t364, ptr %a365 store { ptr, i64, i64 } { ptr @.str.5980, i64 4, i64 0 }, ptr %a366 %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) %t368 = icmp ne i32 %t367, 0 br label %logic.from9027 logic.from9027: br i1 %t368, label %logic.end9029, label %logic.rhs9028 logic.rhs9028: %t369 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t369, ptr %a370 store { ptr, i64, i64 } { ptr @.str.5981, i64 5, i64 0 }, ptr %a371 %t372 = call i32 @finch_str_eq(ptr %a370, ptr %a371) %t373 = icmp ne i32 %t372, 0 br label %logic.rend9030 logic.rend9030: br label %logic.end9029 logic.end9029: %t374 = phi i1 [ true, %logic.from9027 ], [ %t373, %logic.rend9030 ] br label %logic.from9031 logic.from9031: br i1 %t374, label %logic.end9033, label %logic.rhs9032 logic.rhs9032: %t375 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t375, ptr %a376 store { ptr, i64, i64 } { ptr @.str.5982, i64 5, i64 0 }, ptr %a377 %t378 = call i32 @finch_str_eq(ptr %a376, ptr %a377) %t379 = icmp ne i32 %t378, 0 br label %logic.rend9034 logic.rend9034: br label %logic.end9033 logic.end9033: %t380 = phi i1 [ true, %logic.from9031 ], [ %t379, %logic.rend9034 ] br i1 %t380, label %then9035, label %endif9037 then9035: %t381 = load ptr, ptr %a1 %t382 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t381, %S.ast.Node %t382, i64 0) %t383 = load ptr, ptr %a1 %t384 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } { ptr @.str.5983, i64 21, i64 0 }, ptr %a386 store { ptr, i64, i64 } %t384, ptr %a387 call void @finch_str_concat(ptr %a385, ptr %a386, ptr %a387) %t388 = load { ptr, i64, i64 }, ptr %a385 store { ptr, i64, i64 } %t388, ptr %a390 store { ptr, i64, i64 } { ptr @.str.5984, i64 5, i64 0 }, ptr %a391 call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) store { ptr, i64, i64 } %t388, ptr %a392 call void @finch_str_drop(ptr %a392) %t393 = load { ptr, i64, i64 }, ptr %a389 %t394 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t393, ptr %a396 store { ptr, i64, i64 } %t394, ptr %a397 call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397) store { ptr, i64, i64 } %t393, ptr %a398 call void @finch_str_drop(ptr %a398) %t399 = load { ptr, i64, i64 }, ptr %a395 store { ptr, i64, i64 } %t399, ptr %a401 store { ptr, i64, i64 } { ptr @.str.5985, i64 6, i64 0 }, ptr %a402 call void @finch_str_concat(ptr %a400, ptr %a401, ptr %a402) store { ptr, i64, i64 } %t399, ptr %a403 call void @finch_str_drop(ptr %a403) %t404 = load { ptr, i64, i64 }, ptr %a400 %t405 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t404, ptr %a407 store { ptr, i64, i64 } %t405, ptr %a408 call void @finch_str_concat(ptr %a406, ptr %a407, ptr %a408) store { ptr, i64, i64 } %t404, ptr %a409 call void @finch_str_drop(ptr %a409) %t410 = load { ptr, i64, i64 }, ptr %a406 store { ptr, i64, i64 } %t410, ptr %a412 store { ptr, i64, i64 } { ptr @.str.5986, i64 1, i64 0 }, ptr %a413 call void @finch_str_concat(ptr %a411, ptr %a412, ptr %a413) store { ptr, i64, i64 } %t410, ptr %a414 call void @finch_str_drop(ptr %a414) %t415 = load { ptr, i64, i64 }, ptr %a411 call void @finch.gen.emit(ptr %t383, { ptr, i64, i64 } %t415) store { ptr, i64, i64 } %t415, ptr %a416 call void @finch_str_drop(ptr %a416) %t417 = load ptr, ptr %a1 %t418 = load { ptr, i64, i64 }, ptr %a12 %t419 = call { ptr, i64, i64 } @finch.gen.load(ptr %t417, { ptr, i64, i64 } { ptr @.str.5987, i64 17, i64 0 }, { ptr, i64, i64 } %t418) %t420 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t419, 0 %t421 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5988, i64 3, i64 0 }) %t422 = insertvalue %S.gen.Val %t420, %S.ast.Type %t421, 1 %t423 = insertvalue %S.gen.Val %t422, i1 true, 2 call void @finch_str_drop(ptr %a26) call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t423 endif9037: %t424 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t424, ptr %a425 store { ptr, i64, i64 } { ptr @.str.5989, i64 7, i64 0 }, ptr %a426 %t427 = call i32 @finch_str_eq(ptr %a425, ptr %a426) %t428 = icmp ne i32 %t427, 0 br i1 %t428, label %then9038, label %endif9040 then9038: %t429 = load ptr, ptr %a1 %t430 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t429, %S.ast.Node %t430, i64 2) %t431 = load ptr, ptr %a1 %t432 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t433 = load { ptr, i64, i64 }, ptr %t432 %t434 = extractvalue { ptr, i64, i64 } %t433, 1 %t435 = icmp uge i64 1, %t434 br i1 %t435, label %range9041, label %inrange9042 range9041: call void @finch_panic_index(ptr @.str.5990, i64 5655, i64 1, i64 %t434) unreachable inrange9042: %t436 = extractvalue { ptr, i64, i64 } %t433, 0 %t437 = getelementptr inbounds %S.ast.Node, ptr %t436, i64 1 %t438 = load %S.ast.Node, ptr %t437 %t439 = call %S.gen.Val @finch.gen.strArg(ptr %t431, %S.ast.Node %t438, { ptr, i64, i64 } { ptr @.str.5991, i64 19, i64 0 }) store %S.gen.Val %t439, ptr %a440 %t441 = load ptr, ptr %a1 %t442 = icmp eq ptr %t441, null br i1 %t442, label %panic9043, label %ok9044 panic9043: call void @finch_panic(ptr @.str.5992, i64 5656, ptr @.str.5993) unreachable ok9044: %t443 = getelementptr inbounds %S.gen.Gen, ptr %t441, i32 0, i32 11 %t444 = getelementptr inbounds { ptr, i64, i64 }, ptr %t443, i32 0, i32 1 %t445 = load i64, ptr %t444 store i64 %t445, ptr %a446 %t447 = load ptr, ptr %a1 %t448 = load %S.gen.Val, ptr %a440 call void @finch.gen.hold(ptr %t447, %S.gen.Val %t448) %t449 = load ptr, ptr %a1 %t450 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t451 = load { ptr, i64, i64 }, ptr %t450 %t452 = extractvalue { ptr, i64, i64 } %t451, 1 %t453 = icmp uge i64 2, %t452 br i1 %t453, label %range9045, label %inrange9046 range9045: call void @finch_panic_index(ptr @.str.5994, i64 5658, i64 2, i64 %t452) unreachable inrange9046: %t454 = extractvalue { ptr, i64, i64 } %t451, 0 %t455 = getelementptr inbounds %S.ast.Node, ptr %t454, i64 2 %t456 = load %S.ast.Node, ptr %t455 %t457 = call %S.gen.Val @finch.gen.strArg(ptr %t449, %S.ast.Node %t456, { ptr, i64, i64 } { ptr @.str.5995, i64 12, i64 0 }) store %S.gen.Val %t457, ptr %a458 %t459 = load ptr, ptr %a1 %t460 = load i64, ptr %a446 call void @finch.gen.heldEnd(ptr %t459, i64 %t460) %t461 = load ptr, ptr %a1 %t462 = load %S.gen.Val, ptr %a440 %t463 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t461, %S.gen.Val %t462) store { ptr, i64, i64 } %t463, ptr %a464 %t465 = load ptr, ptr %a1 %t466 = load %S.gen.Val, ptr %a458 %t467 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t465, %S.gen.Val %t466) store { ptr, i64, i64 } %t467, ptr %a468 %t469 = load ptr, ptr %a1 %t470 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } { ptr @.str.5996, i64 33, i64 0 }, ptr %a472 store { ptr, i64, i64 } %t470, ptr %a473 call void @finch_str_concat(ptr %a471, ptr %a472, ptr %a473) %t474 = load { ptr, i64, i64 }, ptr %a471 store { ptr, i64, i64 } %t474, ptr %a476 store { ptr, i64, i64 } { ptr @.str.5997, i64 6, i64 0 }, ptr %a477 call void @finch_str_concat(ptr %a475, ptr %a476, ptr %a477) store { ptr, i64, i64 } %t474, ptr %a478 call void @finch_str_drop(ptr %a478) %t479 = load { ptr, i64, i64 }, ptr %a475 %t480 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t479, ptr %a482 store { ptr, i64, i64 } %t480, ptr %a483 call void @finch_str_concat(ptr %a481, ptr %a482, ptr %a483) store { ptr, i64, i64 } %t479, ptr %a484 call void @finch_str_drop(ptr %a484) %t485 = load { ptr, i64, i64 }, ptr %a481 store { ptr, i64, i64 } %t485, ptr %a487 store { ptr, i64, i64 } { ptr @.str.5998, i64 6, i64 0 }, ptr %a488 call void @finch_str_concat(ptr %a486, ptr %a487, ptr %a488) store { ptr, i64, i64 } %t485, ptr %a489 call void @finch_str_drop(ptr %a489) %t490 = load { ptr, i64, i64 }, ptr %a486 %t491 = load { ptr, i64, i64 }, ptr %a464 store { ptr, i64, i64 } %t490, ptr %a493 store { ptr, i64, i64 } %t491, ptr %a494 call void @finch_str_concat(ptr %a492, ptr %a493, ptr %a494) store { ptr, i64, i64 } %t490, ptr %a495 call void @finch_str_drop(ptr %a495) %t496 = load { ptr, i64, i64 }, ptr %a492 store { ptr, i64, i64 } %t496, ptr %a498 store { ptr, i64, i64 } { ptr @.str.5999, i64 6, i64 0 }, ptr %a499 call void @finch_str_concat(ptr %a497, ptr %a498, ptr %a499) store { ptr, i64, i64 } %t496, ptr %a500 call void @finch_str_drop(ptr %a500) %t501 = load { ptr, i64, i64 }, ptr %a497 %t502 = load { ptr, i64, i64 }, ptr %a468 store { ptr, i64, i64 } %t501, ptr %a504 store { ptr, i64, i64 } %t502, ptr %a505 call void @finch_str_concat(ptr %a503, ptr %a504, ptr %a505) store { ptr, i64, i64 } %t501, ptr %a506 call void @finch_str_drop(ptr %a506) %t507 = load { ptr, i64, i64 }, ptr %a503 store { ptr, i64, i64 } %t507, ptr %a509 store { ptr, i64, i64 } { ptr @.str.6000, i64 1, i64 0 }, ptr %a510 call void @finch_str_concat(ptr %a508, ptr %a509, ptr %a510) store { ptr, i64, i64 } %t507, ptr %a511 call void @finch_str_drop(ptr %a511) %t512 = load { ptr, i64, i64 }, ptr %a508 call void @finch.gen.emit(ptr %t469, { ptr, i64, i64 } %t512) store { ptr, i64, i64 } %t512, ptr %a513 call void @finch_str_drop(ptr %a513) %t514 = load ptr, ptr %a1 %t515 = load %S.gen.Val, ptr %a440 call void @finch.gen.release(ptr %t514, %S.gen.Val %t515) %t516 = load ptr, ptr %a1 %t517 = load %S.gen.Val, ptr %a458 call void @finch.gen.release(ptr %t516, %S.gen.Val %t517) %t518 = load ptr, ptr %a1 %t519 = load { ptr, i64, i64 }, ptr %a12 %t520 = call { ptr, i64, i64 } @finch.gen.load(ptr %t518, { ptr, i64, i64 } { ptr @.str.6001, i64 17, i64 0 }, { ptr, i64, i64 } %t519) %t521 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t520, 0 %t522 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6002, i64 3, i64 0 }) %t523 = insertvalue %S.gen.Val %t521, %S.ast.Type %t522, 1 %t524 = insertvalue %S.gen.Val %t523, i1 true, 2 call void @finch_str_drop(ptr %a468) call void @finch_str_drop(ptr %a464) call void @finch.drop.S_gen_Val(ptr %a458) call void @finch.drop.S_gen_Val(ptr %a440) call void @finch_str_drop(ptr %a26) call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t524 endif9040: %t525 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t525, ptr %a526 store { ptr, i64, i64 } { ptr @.str.6003, i64 5, i64 0 }, ptr %a527 %t528 = call i32 @finch_str_eq(ptr %a526, ptr %a527) %t529 = icmp ne i32 %t528, 0 br i1 %t529, label %then9047, label %endif9049 then9047: %t530 = load ptr, ptr %a1 %t531 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t530, %S.ast.Node %t531, i64 1) %t532 = load ptr, ptr %a1 %t533 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t534 = load { ptr, i64, i64 }, ptr %t533 %t535 = extractvalue { ptr, i64, i64 } %t534, 1 %t536 = icmp uge i64 1, %t535 br i1 %t536, label %range9050, label %inrange9051 range9050: call void @finch_panic_index(ptr @.str.6004, i64 5669, i64 1, i64 %t535) unreachable inrange9051: %t537 = extractvalue { ptr, i64, i64 } %t534, 0 %t538 = getelementptr inbounds %S.ast.Node, ptr %t537, i64 1 %t539 = load %S.ast.Node, ptr %t538 %t540 = call %S.gen.Val @finch.gen.strArg(ptr %t532, %S.ast.Node %t539, { ptr, i64, i64 } { ptr @.str.6005, i64 13, i64 0 }) store %S.gen.Val %t540, ptr %a541 %t542 = load ptr, ptr %a1 %t543 = load %S.gen.Val, ptr %a541 %t544 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t542, %S.gen.Val %t543) store { ptr, i64, i64 } %t544, ptr %a545 %t546 = load ptr, ptr %a1 %t547 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t546) store { ptr, i64, i64 } %t547, ptr %a548 %t549 = load ptr, ptr %a1 %t550 = load { ptr, i64, i64 }, ptr %a548 store { ptr, i64, i64 } { ptr @.str.6006, i64 31, i64 0 }, ptr %a552 store { ptr, i64, i64 } %t550, ptr %a553 call void @finch_str_concat(ptr %a551, ptr %a552, ptr %a553) %t554 = load { ptr, i64, i64 }, ptr %a551 store { ptr, i64, i64 } %t554, ptr %a556 store { ptr, i64, i64 } { ptr @.str.6007, i64 6, i64 0 }, ptr %a557 call void @finch_str_concat(ptr %a555, ptr %a556, ptr %a557) store { ptr, i64, i64 } %t554, ptr %a558 call void @finch_str_drop(ptr %a558) %t559 = load { ptr, i64, i64 }, ptr %a555 %t560 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t559, ptr %a562 store { ptr, i64, i64 } %t560, ptr %a563 call void @finch_str_concat(ptr %a561, ptr %a562, ptr %a563) store { ptr, i64, i64 } %t559, ptr %a564 call void @finch_str_drop(ptr %a564) %t565 = load { ptr, i64, i64 }, ptr %a561 store { ptr, i64, i64 } %t565, ptr %a567 store { ptr, i64, i64 } { ptr @.str.6008, i64 6, i64 0 }, ptr %a568 call void @finch_str_concat(ptr %a566, ptr %a567, ptr %a568) store { ptr, i64, i64 } %t565, ptr %a569 call void @finch_str_drop(ptr %a569) %t570 = load { ptr, i64, i64 }, ptr %a566 %t571 = load { ptr, i64, i64 }, ptr %a545 store { ptr, i64, i64 } %t570, ptr %a573 store { ptr, i64, i64 } %t571, ptr %a574 call void @finch_str_concat(ptr %a572, ptr %a573, ptr %a574) store { ptr, i64, i64 } %t570, ptr %a575 call void @finch_str_drop(ptr %a575) %t576 = load { ptr, i64, i64 }, ptr %a572 store { ptr, i64, i64 } %t576, ptr %a578 store { ptr, i64, i64 } { ptr @.str.6009, i64 1, i64 0 }, ptr %a579 call void @finch_str_concat(ptr %a577, ptr %a578, ptr %a579) store { ptr, i64, i64 } %t576, ptr %a580 call void @finch_str_drop(ptr %a580) %t581 = load { ptr, i64, i64 }, ptr %a577 call void @finch.gen.emit(ptr %t549, { ptr, i64, i64 } %t581) store { ptr, i64, i64 } %t581, ptr %a582 call void @finch_str_drop(ptr %a582) %t583 = load ptr, ptr %a1 %t584 = load %S.gen.Val, ptr %a541 call void @finch.gen.release(ptr %t583, %S.gen.Val %t584) %t585 = load ptr, ptr %a1 %t586 = load { ptr, i64, i64 }, ptr %a548 %t587 = call { ptr, i64, i64 } @finch.gen.load(ptr %t585, { ptr, i64, i64 } { ptr @.str.6010, i64 17, i64 0 }, { ptr, i64, i64 } %t586) %t588 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t587, 0 %t589 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6011, i64 3, i64 0 }) %t590 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t589) store %S.ast.Type %t589, ptr %a591 call void @finch.drop.S_ast_Type(ptr %a591) %t592 = insertvalue %S.gen.Val %t588, %S.ast.Type %t590, 1 %t593 = insertvalue %S.gen.Val %t592, i1 true, 2 call void @finch_str_drop(ptr %a548) call void @finch_str_drop(ptr %a545) call void @finch.drop.S_gen_Val(ptr %a541) call void @finch_str_drop(ptr %a26) call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t593 endif9049: %t594 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t594, ptr %a595 store { ptr, i64, i64 } { ptr @.str.6012, i64 6, i64 0 }, ptr %a596 %t597 = call i32 @finch_str_eq(ptr %a595, ptr %a596) %t598 = icmp ne i32 %t597, 0 br i1 %t598, label %then9052, label %endif9054 then9052: %t599 = load ptr, ptr %a1 %t600 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t599, %S.ast.Node %t600, i64 1) %t601 = load ptr, ptr %a1 %t602 = load ptr, ptr %a1 %t603 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t604 = load { ptr, i64, i64 }, ptr %t603 %t605 = extractvalue { ptr, i64, i64 } %t604, 1 %t606 = icmp uge i64 1, %t605 br i1 %t606, label %range9055, label %inrange9056 range9055: call void @finch_panic_index(ptr @.str.6013, i64 5678, i64 1, i64 %t605) unreachable inrange9056: %t607 = extractvalue { ptr, i64, i64 } %t604, 0 %t608 = getelementptr inbounds %S.ast.Node, ptr %t607, i64 1 %t609 = load %S.ast.Node, ptr %t608 %t610 = call %S.gen.Val @finch.gen.expr(ptr %t602, %S.ast.Node %t609) %t611 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6014, i64 3, i64 0 }) %t612 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t613 = load { ptr, i64, i64 }, ptr %t612 %t614 = extractvalue { ptr, i64, i64 } %t613, 1 %t615 = icmp uge i64 1, %t614 br i1 %t615, label %range9057, label %inrange9058 range9057: call void @finch_panic_index(ptr @.str.6015, i64 5678, i64 1, i64 %t614) unreachable inrange9058: %t616 = extractvalue { ptr, i64, i64 } %t613, 0 %t617 = getelementptr inbounds %S.ast.Node, ptr %t616, i64 1 %t618 = load %S.ast.Node, ptr %t617 %t619 = call %S.gen.Val @finch.gen.coerce(ptr %t601, %S.gen.Val %t610, %S.ast.Type %t611, %S.ast.Node %t618, { ptr, i64, i64 } { ptr @.str.6016, i64 9, i64 0 }) store %S.gen.Val %t610, ptr %a620 call void @finch.drop.S_gen_Val(ptr %a620) store %S.ast.Type %t611, ptr %a621 call void @finch.drop.S_ast_Type(ptr %a621) %t622 = extractvalue %S.gen.Val %t619, 0 store { ptr, i64, i64 } %t622, ptr %a623 call void @finch_str_copy(ptr %a624, ptr %a623) %t625 = load { ptr, i64, i64 }, ptr %a624 store %S.gen.Val %t619, ptr %a626 call void @finch.drop.S_gen_Val(ptr %a626) store { ptr, i64, i64 } %t625, ptr %a627 %t628 = load ptr, ptr %a1 %t629 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } { ptr @.str.6017, i64 32, i64 0 }, ptr %a631 store { ptr, i64, i64 } %t629, ptr %a632 call void @finch_str_concat(ptr %a630, ptr %a631, ptr %a632) %t633 = load { ptr, i64, i64 }, ptr %a630 store { ptr, i64, i64 } %t633, ptr %a635 store { ptr, i64, i64 } { ptr @.str.6018, i64 6, i64 0 }, ptr %a636 call void @finch_str_concat(ptr %a634, ptr %a635, ptr %a636) store { ptr, i64, i64 } %t633, ptr %a637 call void @finch_str_drop(ptr %a637) %t638 = load { ptr, i64, i64 }, ptr %a634 %t639 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t638, ptr %a641 store { ptr, i64, i64 } %t639, ptr %a642 call void @finch_str_concat(ptr %a640, ptr %a641, ptr %a642) store { ptr, i64, i64 } %t638, ptr %a643 call void @finch_str_drop(ptr %a643) %t644 = load { ptr, i64, i64 }, ptr %a640 store { ptr, i64, i64 } %t644, ptr %a646 store { ptr, i64, i64 } { ptr @.str.6019, i64 6, i64 0 }, ptr %a647 call void @finch_str_concat(ptr %a645, ptr %a646, ptr %a647) store { ptr, i64, i64 } %t644, ptr %a648 call void @finch_str_drop(ptr %a648) %t649 = load { ptr, i64, i64 }, ptr %a645 %t650 = load { ptr, i64, i64 }, ptr %a627 store { ptr, i64, i64 } %t649, ptr %a652 store { ptr, i64, i64 } %t650, ptr %a653 call void @finch_str_concat(ptr %a651, ptr %a652, ptr %a653) store { ptr, i64, i64 } %t649, ptr %a654 call void @finch_str_drop(ptr %a654) %t655 = load { ptr, i64, i64 }, ptr %a651 store { ptr, i64, i64 } %t655, ptr %a657 store { ptr, i64, i64 } { ptr @.str.6020, i64 1, i64 0 }, ptr %a658 call void @finch_str_concat(ptr %a656, ptr %a657, ptr %a658) store { ptr, i64, i64 } %t655, ptr %a659 call void @finch_str_drop(ptr %a659) %t660 = load { ptr, i64, i64 }, ptr %a656 call void @finch.gen.emit(ptr %t628, { ptr, i64, i64 } %t660) store { ptr, i64, i64 } %t660, ptr %a661 call void @finch_str_drop(ptr %a661) %t662 = load ptr, ptr %a1 %t663 = load { ptr, i64, i64 }, ptr %a12 %t664 = call { ptr, i64, i64 } @finch.gen.load(ptr %t662, { ptr, i64, i64 } { ptr @.str.6021, i64 17, i64 0 }, { ptr, i64, i64 } %t663) %t665 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t664, 0 %t666 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6022, i64 3, i64 0 }) %t667 = insertvalue %S.gen.Val %t665, %S.ast.Type %t666, 1 %t668 = insertvalue %S.gen.Val %t667, i1 true, 2 call void @finch_str_drop(ptr %a627) call void @finch_str_drop(ptr %a26) call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t668 endif9054: %t669 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t669, ptr %a670 store { ptr, i64, i64 } { ptr @.str.6023, i64 5, i64 0 }, ptr %a671 %t672 = call i32 @finch_str_eq(ptr %a670, ptr %a671) %t673 = icmp ne i32 %t672, 0 br i1 %t673, label %then9059, label %endif9061 then9059: %t674 = load ptr, ptr %a1 %t675 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t674, %S.ast.Node %t675, i64 0) %t676 = load ptr, ptr %a1 %t677 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t676) store { ptr, i64, i64 } %t677, ptr %a678 %t679 = load ptr, ptr %a1 %t680 = load { ptr, i64, i64 }, ptr %a678 store { ptr, i64, i64 } { ptr @.str.6024, i64 36, i64 0 }, ptr %a682 store { ptr, i64, i64 } %t680, ptr %a683 call void @finch_str_concat(ptr %a681, ptr %a682, ptr %a683) %t684 = load { ptr, i64, i64 }, ptr %a681 store { ptr, i64, i64 } %t684, ptr %a686 store { ptr, i64, i64 } { ptr @.str.6025, i64 6, i64 0 }, ptr %a687 call void @finch_str_concat(ptr %a685, ptr %a686, ptr %a687) store { ptr, i64, i64 } %t684, ptr %a688 call void @finch_str_drop(ptr %a688) %t689 = load { ptr, i64, i64 }, ptr %a685 %t690 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t689, ptr %a692 store { ptr, i64, i64 } %t690, ptr %a693 call void @finch_str_concat(ptr %a691, ptr %a692, ptr %a693) store { ptr, i64, i64 } %t689, ptr %a694 call void @finch_str_drop(ptr %a694) %t695 = load { ptr, i64, i64 }, ptr %a691 store { ptr, i64, i64 } %t695, ptr %a697 store { ptr, i64, i64 } { ptr @.str.6026, i64 1, i64 0 }, ptr %a698 call void @finch_str_concat(ptr %a696, ptr %a697, ptr %a698) store { ptr, i64, i64 } %t695, ptr %a699 call void @finch_str_drop(ptr %a699) %t700 = load { ptr, i64, i64 }, ptr %a696 call void @finch.gen.emit(ptr %t679, { ptr, i64, i64 } %t700) store { ptr, i64, i64 } %t700, ptr %a701 call void @finch_str_drop(ptr %a701) %t702 = load ptr, ptr %a1 %t703 = load { ptr, i64, i64 }, ptr %a678 %t704 = call { ptr, i64, i64 } @finch.gen.load(ptr %t702, { ptr, i64, i64 } { ptr @.str.6027, i64 17, i64 0 }, { ptr, i64, i64 } %t703) %t705 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t704, 0 %t706 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6028, i64 2, i64 0 }) %t707 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t706) store %S.ast.Type %t706, ptr %a708 call void @finch.drop.S_ast_Type(ptr %a708) %t709 = insertvalue %S.gen.Val %t705, %S.ast.Type %t707, 1 %t710 = insertvalue %S.gen.Val %t709, i1 true, 2 call void @finch_str_drop(ptr %a678) call void @finch_str_drop(ptr %a26) call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t710 endif9061: %t711 = load ptr, ptr %a1 %t712 = load %S.ast.Node, ptr %a2 %t713 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } { ptr @.str.6029, i64 21, i64 0 }, ptr %a715 store { ptr, i64, i64 } %t713, ptr %a716 call void @finch_str_concat(ptr %a714, ptr %a715, ptr %a716) %t717 = load { ptr, i64, i64 }, ptr %a714 store { ptr, i64, i64 } %t717, ptr %a719 store { ptr, i64, i64 } { ptr @.str.6030, i64 106, i64 0 }, ptr %a720 call void @finch_str_concat(ptr %a718, ptr %a719, ptr %a720) store { ptr, i64, i64 } %t717, ptr %a721 call void @finch_str_drop(ptr %a721) %t722 = load { ptr, i64, i64 }, ptr %a718 call void @finch.gen.fail(ptr %t711, %S.ast.Node %t712, { ptr, i64, i64 } %t722) store { ptr, i64, i64 } %t722, ptr %a723 call void @finch_str_drop(ptr %a723) call void @finch_str_drop(ptr %a26) call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val zeroinitializer } define internal { ptr, i64, i64 } @finch.gen.runtimeDecls() { entry: %a80 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %t1 = mul i64 74, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t2 = call ptr @finch_alloc(i64 %t1) %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 store { ptr, i64, i64 } { ptr @.str.6031, i64 54, i64 0 }, ptr %t3 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 store { ptr, i64, i64 } { ptr @.str.6032, i64 65, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 store { ptr, i64, i64 } { ptr @.str.6033, i64 29, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 store { ptr, i64, i64 } { ptr @.str.6034, i64 38, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 store { ptr, i64, i64 } { ptr @.str.6035, i64 33, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 store { ptr, i64, i64 } { ptr @.str.6036, i64 33, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 store { ptr, i64, i64 } { ptr @.str.6037, i64 33, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 store { ptr, i64, i64 } { ptr @.str.6038, i64 32, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 store { ptr, i64, i64 } { ptr @.str.6039, i64 45, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 store { ptr, i64, i64 } { ptr @.str.6040, i64 35, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 store { ptr, i64, i64 } { ptr @.str.6041, i64 36, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 store { ptr, i64, i64 } { ptr @.str.6042, i64 42, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 store { ptr, i64, i64 } { ptr @.str.6043, i64 37, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 store { ptr, i64, i64 } { ptr @.str.6044, i64 38, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 store { ptr, i64, i64 } { ptr @.str.6045, i64 42, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 store { ptr, i64, i64 } { ptr @.str.6046, i64 38, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 store { ptr, i64, i64 } { ptr @.str.6047, i64 37, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 17 store { ptr, i64, i64 } { ptr @.str.6048, i64 42, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 18 store { ptr, i64, i64 } { ptr @.str.6049, i64 42, i64 0 }, ptr %t21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 19 store { ptr, i64, i64 } { ptr @.str.6050, i64 34, i64 0 }, ptr %t22 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 20 store { ptr, i64, i64 } { ptr @.str.6051, i64 42, i64 0 }, ptr %t23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 21 store { ptr, i64, i64 } { ptr @.str.6052, i64 43, i64 0 }, ptr %t24 %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 22 store { ptr, i64, i64 } { ptr @.str.6053, i64 47, i64 0 }, ptr %t25 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 23 store { ptr, i64, i64 } { ptr @.str.6054, i64 50, i64 0 }, ptr %t26 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 24 store { ptr, i64, i64 } { ptr @.str.6055, i64 43, i64 0 }, ptr %t27 %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 25 store { ptr, i64, i64 } { ptr @.str.6056, i64 44, i64 0 }, ptr %t28 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 26 store { ptr, i64, i64 } { ptr @.str.6057, i64 49, i64 0 }, ptr %t29 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 27 store { ptr, i64, i64 } { ptr @.str.6058, i64 57, i64 0 }, ptr %t30 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 28 store { ptr, i64, i64 } { ptr @.str.6059, i64 37, i64 0 }, ptr %t31 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 29 store { ptr, i64, i64 } { ptr @.str.6060, i64 39, i64 0 }, ptr %t32 %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 30 store { ptr, i64, i64 } { ptr @.str.6061, i64 37, i64 0 }, ptr %t33 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 31 store { ptr, i64, i64 } { ptr @.str.6062, i64 38, i64 0 }, ptr %t34 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 32 store { ptr, i64, i64 } { ptr @.str.6063, i64 39, i64 0 }, ptr %t35 %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 33 store { ptr, i64, i64 } { ptr @.str.6064, i64 39, i64 0 }, ptr %t36 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 34 store { ptr, i64, i64 } { ptr @.str.6065, i64 51, i64 0 }, ptr %t37 %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 35 store { ptr, i64, i64 } { ptr @.str.6066, i64 44, i64 0 }, ptr %t38 %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 36 store { ptr, i64, i64 } { ptr @.str.6067, i64 43, i64 0 }, ptr %t39 %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 37 store { ptr, i64, i64 } { ptr @.str.6068, i64 45, i64 0 }, ptr %t40 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 38 store { ptr, i64, i64 } { ptr @.str.6069, i64 44, i64 0 }, ptr %t41 %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 39 store { ptr, i64, i64 } { ptr @.str.6070, i64 52, i64 0 }, ptr %t42 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 40 store { ptr, i64, i64 } { ptr @.str.6071, i64 57, i64 0 }, ptr %t43 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 41 store { ptr, i64, i64 } { ptr @.str.6072, i64 48, i64 0 }, ptr %t44 %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 42 store { ptr, i64, i64 } { ptr @.str.6073, i64 34, i64 0 }, ptr %t45 %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 43 store { ptr, i64, i64 } { ptr @.str.6074, i64 48, i64 0 }, ptr %t46 %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 44 store { ptr, i64, i64 } { ptr @.str.6075, i64 60, i64 0 }, ptr %t47 %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 45 store { ptr, i64, i64 } { ptr @.str.6076, i64 55, i64 0 }, ptr %t48 %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 46 store { ptr, i64, i64 } { ptr @.str.6077, i64 46, i64 0 }, ptr %t49 %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 47 store { ptr, i64, i64 } { ptr @.str.6078, i64 48, i64 0 }, ptr %t50 %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 48 store { ptr, i64, i64 } { ptr @.str.6079, i64 43, i64 0 }, ptr %t51 %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 49 store { ptr, i64, i64 } { ptr @.str.6080, i64 45, i64 0 }, ptr %t52 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 50 store { ptr, i64, i64 } { ptr @.str.6081, i64 59, i64 0 }, ptr %t53 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 51 store { ptr, i64, i64 } { ptr @.str.6082, i64 49, i64 0 }, ptr %t54 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 52 store { ptr, i64, i64 } { ptr @.str.6083, i64 39, i64 0 }, ptr %t55 %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 53 store { ptr, i64, i64 } { ptr @.str.6084, i64 39, i64 0 }, ptr %t56 %t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 54 store { ptr, i64, i64 } { ptr @.str.6085, i64 35, i64 0 }, ptr %t57 %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 55 store { ptr, i64, i64 } { ptr @.str.6086, i64 35, i64 0 }, ptr %t58 %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 56 store { ptr, i64, i64 } { ptr @.str.6087, i64 45, i64 0 }, ptr %t59 %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 57 store { ptr, i64, i64 } { ptr @.str.6088, i64 47, i64 0 }, ptr %t60 %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 58 store { ptr, i64, i64 } { ptr @.str.6089, i64 47, i64 0 }, ptr %t61 %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 59 store { ptr, i64, i64 } { ptr @.str.6090, i64 48, i64 0 }, ptr %t62 %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 60 store { ptr, i64, i64 } { ptr @.str.6091, i64 44, i64 0 }, ptr %t63 %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 61 store { ptr, i64, i64 } { ptr @.str.6092, i64 37, i64 0 }, ptr %t64 %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 62 store { ptr, i64, i64 } { ptr @.str.6093, i64 49, i64 0 }, ptr %t65 %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 63 store { ptr, i64, i64 } { ptr @.str.6094, i64 39, i64 0 }, ptr %t66 %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 64 store { ptr, i64, i64 } { ptr @.str.6095, i64 29, i64 0 }, ptr %t67 %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 65 store { ptr, i64, i64 } { ptr @.str.6096, i64 35, i64 0 }, ptr %t68 %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 66 store { ptr, i64, i64 } { ptr @.str.6097, i64 29, i64 0 }, ptr %t69 %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 67 store { ptr, i64, i64 } { ptr @.str.6098, i64 24, i64 0 }, ptr %t70 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 68 store { ptr, i64, i64 } { ptr @.str.6099, i64 40, i64 0 }, ptr %t71 %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 69 store { ptr, i64, i64 } { ptr @.str.6100, i64 33, i64 0 }, ptr %t72 %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 70 store { ptr, i64, i64 } { ptr @.str.6101, i64 34, i64 0 }, ptr %t73 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 71 store { ptr, i64, i64 } { ptr @.str.6102, i64 44, i64 0 }, ptr %t74 %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 72 store { ptr, i64, i64 } { ptr @.str.6103, i64 32, i64 0 }, ptr %t75 %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 73 store { ptr, i64, i64 } { ptr @.str.6104, i64 23, i64 0 }, ptr %t76 %t77 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 %t78 = insertvalue { ptr, i64, i64 } %t77, i64 74, 1 %t79 = insertvalue { ptr, i64, i64 } %t78, i64 74, 2 store { ptr, i64, i64 } %t79, ptr %a80 %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %a80, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.6105, i64 1, i64 0 }, ptr %a82 call void @finch_str_join(ptr %a83, ptr %a80, ptr %a82) %t84 = load { ptr, i64, i64 }, ptr %a83 store { ptr, i64, i64 } %t84, ptr %a86 store { ptr, i64, i64 } { ptr @.str.6106, i64 1, i64 0 }, ptr %a87 call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) store { ptr, i64, i64 } %t84, ptr %a88 call void @finch_str_drop(ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a85 call void @finch.drop.arr_str(ptr %a80) ret { ptr, i64, i64 } %t89 } define internal { ptr, i64, i64 } @finch.gen.assemble(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } { ptr @.str.6107, i64 52, i64 0 }, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic9062, label %ok9063 panic9062: call void @finch_panic(ptr @.str.6108, i64 5776, ptr @.str.6109) unreachable ok9063: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 31 %t6 = getelementptr inbounds %S.platform.Target, ptr %t5, i32 0, i32 5 %t7 = load i1, ptr %t6 br label %logic.from9064 logic.from9064: br i1 %t7, label %logic.end9066, label %logic.rhs9065 logic.rhs9065: %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic9067, label %ok9068 panic9067: call void @finch_panic(ptr @.str.6110, i64 5776, ptr @.str.6111) unreachable ok9068: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 31 %t11 = getelementptr inbounds %S.platform.Target, ptr %t10, i32 0, i32 1 %t12 = load i1, ptr %t11 br label %logic.rend9069 logic.rend9069: br label %logic.end9066 logic.end9066: %t13 = phi i1 [ true, %logic.from9064 ], [ %t12, %logic.rend9069 ] br i1 %t13, label %then9070, label %endif9072 then9070: %t14 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t14, ptr %a16 store { ptr, i64, i64 } { ptr @.str.6112, i64 17, i64 0 }, ptr %a17 call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a15 %t19 = load ptr, ptr %a1 %t20 = icmp eq ptr %t19, null br i1 %t20, label %panic9073, label %ok9074 panic9073: call void @finch_panic(ptr @.str.6113, i64 5777, ptr @.str.6114) unreachable ok9074: %t21 = getelementptr inbounds %S.gen.Gen, ptr %t19, i32 0, i32 31 %t22 = getelementptr inbounds %S.platform.Target, ptr %t21, i32 0, i32 0 %t23 = load { ptr, i64, i64 }, ptr %t22 store { ptr, i64, i64 } %t18, ptr %a25 store { ptr, i64, i64 } %t23, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) store { ptr, i64, i64 } %t18, ptr %a27 call void @finch_str_drop(ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t28, ptr %a30 store { ptr, i64, i64 } { ptr @.str.6115, i64 3, i64 0 }, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) store { ptr, i64, i64 } %t28, ptr %a32 call void @finch_str_drop(ptr %a32) %t33 = load { ptr, i64, i64 }, ptr %a29 %t34 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t33, ptr %a2 store { ptr, i64, i64 } %t34, ptr %a35 call void @finch_str_drop(ptr %a35) br label %endif9072 endif9072: %t36 = load { ptr, i64, i64 }, ptr %a2 %t37 = load ptr, ptr %a1 %t38 = icmp eq ptr %t37, null br i1 %t38, label %panic9075, label %ok9076 panic9075: call void @finch_panic(ptr @.str.6116, i64 5779, ptr @.str.6117) unreachable ok9076: %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 2 %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.6118, i64 1, i64 0 }, ptr %a41 call void @finch_str_join(ptr %a42, ptr %t39, ptr %a41) %t43 = load { ptr, i64, i64 }, ptr %a42 store { ptr, i64, i64 } %t36, ptr %a45 store { ptr, i64, i64 } %t43, ptr %a46 call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) store { ptr, i64, i64 } %t43, ptr %a47 call void @finch_str_drop(ptr %a47) %t48 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } %t48, ptr %a50 store { ptr, i64, i64 } { ptr @.str.6119, i64 2, i64 0 }, ptr %a51 call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) store { ptr, i64, i64 } %t48, ptr %a52 call void @finch_str_drop(ptr %a52) %t53 = load { ptr, i64, i64 }, ptr %a49 %t54 = call { ptr, i64, i64 } @finch.gen.runtimeDecls() store { ptr, i64, i64 } %t53, ptr %a56 store { ptr, i64, i64 } %t54, ptr %a57 call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) store { ptr, i64, i64 } %t53, ptr %a58 call void @finch_str_drop(ptr %a58) store { ptr, i64, i64 } %t54, ptr %a59 call void @finch_str_drop(ptr %a59) %t60 = load { ptr, i64, i64 }, ptr %a55 store { ptr, i64, i64 } %t60, ptr %a62 store { ptr, i64, i64 } { ptr @.str.6120, i64 1, i64 0 }, ptr %a63 call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) store { ptr, i64, i64 } %t60, ptr %a64 call void @finch_str_drop(ptr %a64) %t65 = load { ptr, i64, i64 }, ptr %a61 %t66 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t65, ptr %a2 store { ptr, i64, i64 } %t66, ptr %a67 call void @finch_str_drop(ptr %a67) %t68 = load ptr, ptr %a1 %t69 = icmp eq ptr %t68, null br i1 %t69, label %panic9077, label %ok9078 panic9077: call void @finch_panic(ptr @.str.6121, i64 5780, ptr @.str.6122) unreachable ok9078: %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 30 %t71 = load i1, ptr %t70 br i1 %t71, label %then9079, label %endif9081 then9079: %t72 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t72, ptr %a74 store { ptr, i64, i64 } { ptr @.str.6123, i64 62, i64 0 }, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a73 %t77 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t76, ptr %a2 store { ptr, i64, i64 } %t77, ptr %a78 call void @finch_str_drop(ptr %a78) br label %endif9081 endif9081: %t79 = load { ptr, i64, i64 }, ptr %a2 %t80 = load ptr, ptr %a1 %t81 = icmp eq ptr %t80, null br i1 %t81, label %panic9082, label %ok9083 panic9082: call void @finch_panic(ptr @.str.6124, i64 5783, ptr @.str.6125) unreachable ok9083: %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 3 %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.6126, i64 1, i64 0 }, ptr %a84 call void @finch_str_join(ptr %a85, ptr %t82, ptr %a84) %t86 = load { ptr, i64, i64 }, ptr %a85 store { ptr, i64, i64 } %t79, ptr %a88 store { ptr, i64, i64 } %t86, ptr %a89 call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) store { ptr, i64, i64 } %t86, ptr %a90 call void @finch_str_drop(ptr %a90) %t91 = load { ptr, i64, i64 }, ptr %a87 %t92 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t91, ptr %a2 store { ptr, i64, i64 } %t92, ptr %a93 call void @finch_str_drop(ptr %a93) %t94 = load ptr, ptr %a1 %t95 = icmp eq ptr %t94, null br i1 %t95, label %panic9084, label %ok9085 panic9084: call void @finch_panic(ptr @.str.6127, i64 5784, ptr @.str.6128) unreachable ok9085: %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 30 %t97 = load i1, ptr %t96 br i1 %t97, label %then9086, label %endif9088 then9086: %t98 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t98, ptr %a100 store { ptr, i64, i64 } { ptr @.str.6129, i64 1, i64 0 }, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) %t102 = load { ptr, i64, i64 }, ptr %a99 %t103 = load ptr, ptr %a1 %t104 = call { ptr, i64, i64 } @finch.gen.dbgModule(ptr %t103) store { ptr, i64, i64 } %t102, ptr %a106 store { ptr, i64, i64 } %t104, ptr %a107 call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) store { ptr, i64, i64 } %t102, ptr %a108 call void @finch_str_drop(ptr %a108) store { ptr, i64, i64 } %t104, ptr %a109 call void @finch_str_drop(ptr %a109) %t110 = load { ptr, i64, i64 }, ptr %a105 %t111 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t110, ptr %a2 store { ptr, i64, i64 } %t111, ptr %a112 call void @finch_str_drop(ptr %a112) br label %endif9088 endif9088: %t113 = load { ptr, i64, i64 }, ptr %a2 ret { ptr, i64, i64 } %t113 } define internal void @finch.copy.arr_S_ast_Program(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.ast.Program, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond9089 n.cond9089: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body9090, label %n.end9091 n.body9090: %t8 = getelementptr inbounds %S.ast.Program, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.ast.Program, ptr %t2, i64 %t6 call void @finch.copy.S_ast_Program(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond9089 n.end9091: ret void } define internal void @finch.copy.S_cimport_CFunc(ptr %dst, ptr %src) { entry: %t1 = load %S.cimport.CFunc, ptr %src store %S.cimport.CFunc %t1, ptr %dst %t2 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 2 call void @finch.copy.S_ast_Type(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 3 call void @finch.copy.arr_S_ast_Type(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 5 %t11 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 5 call void @finch_str_copy(ptr %t10, ptr %t11) ret void } define internal void @finch.copy.map_str_S_cimport_CFunc(ptr %dst, ptr %src) { entry: %a3 = alloca i64, align 16 call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64)) %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 br label %n.cond9092 n.cond9092: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 br i1 %t5, label %n.body9093, label %n.end9094 n.body9093: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 %t10 = load ptr, ptr %t9 %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t10, i64 %t4 %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 0 %t13 = load i64, ptr %t12 %t14 = icmp ne i64 %t13, 0 br i1 %t14, label %entry.live9095, label %entry.next9096 entry.live9095: %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t11, i32 0, i32 1 %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 1 call void @finch_str_copy(ptr %t15, ptr %t16) %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t11, i32 0, i32 2 %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 2 call void @finch.copy.S_cimport_CFunc(ptr %t17, ptr %t18) br label %entry.next9096 entry.next9096: %t19 = load i64, ptr %a3 %t20 = add i64 %t19, 1 store i64 %t20, ptr %a3 br label %n.cond9092 n.end9094: ret void } define internal void @finch.copy.map_str_S_cimport_CConst(ptr %dst, ptr %src) { entry: %a3 = alloca i64, align 16 call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64)) %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 br label %n.cond9097 n.cond9097: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 br i1 %t5, label %n.body9098, label %n.end9099 n.body9098: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 %t10 = load ptr, ptr %t9 %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t10, i64 %t4 %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 0 %t13 = load i64, ptr %t12 %t14 = icmp ne i64 %t13, 0 br i1 %t14, label %entry.live9100, label %entry.next9101 entry.live9100: %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 1 %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 1 call void @finch_str_copy(ptr %t15, ptr %t16) %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 2 %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 2 call void @finch.copy.S_cimport_CConst(ptr %t17, ptr %t18) br label %entry.next9101 entry.next9101: %t19 = load i64, ptr %a3 %t20 = add i64 %t19, 1 store i64 %t20, ptr %a3 br label %n.cond9097 n.end9099: ret void } define internal void @finch.copy.map_str_S_ast_Type(ptr %dst, ptr %src) { entry: %a3 = alloca i64, align 16 call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64)) %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 br label %n.cond9102 n.cond9102: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 br i1 %t5, label %n.body9103, label %n.end9104 n.body9103: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 %t10 = load ptr, ptr %t9 %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t10, i64 %t4 %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 0 %t13 = load i64, ptr %t12 %t14 = icmp ne i64 %t13, 0 br i1 %t14, label %entry.live9105, label %entry.next9106 entry.live9105: %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 1 %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 1 call void @finch_str_copy(ptr %t15, ptr %t16) %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 2 %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 2 call void @finch.copy.S_ast_Type(ptr %t17, ptr %t18) br label %entry.next9106 entry.next9106: %t19 = load i64, ptr %a3 %t20 = add i64 %t19, 1 store i64 %t20, ptr %a3 br label %n.cond9102 n.end9104: ret void } define internal void @finch.copy.map_str_S_cimport_CStruct(ptr %dst, ptr %src) { entry: %a3 = alloca i64, align 16 call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64)) %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 br label %n.cond9107 n.cond9107: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 br i1 %t5, label %n.body9108, label %n.end9109 n.body9108: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 %t10 = load ptr, ptr %t9 %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t10, i64 %t4 %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 0 %t13 = load i64, ptr %t12 %t14 = icmp ne i64 %t13, 0 br i1 %t14, label %entry.live9110, label %entry.next9111 entry.live9110: %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 1 %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 1 call void @finch_str_copy(ptr %t15, ptr %t16) %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 2 %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 2 call void @finch.copy.S_cimport_CStruct(ptr %t17, ptr %t18) br label %entry.next9111 entry.next9111: %t19 = load i64, ptr %a3 %t20 = add i64 %t19, 1 store i64 %t20, ptr %a3 br label %n.cond9107 n.end9109: ret void } define internal void @finch.copy.S_cimport_CImports(ptr %dst, ptr %src) { entry: %t1 = load %S.cimport.CImports, ptr %src store %S.cimport.CImports %t1, ptr %dst %t2 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 0 call void @finch.copy.map_str_S_cimport_CFunc(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 1 call void @finch.copy.map_str_S_cimport_CConst(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 2 call void @finch.copy.map_str_S_ast_Type(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 3 call void @finch.copy.map_str_S_cimport_CStruct(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 4 %t11 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 4 call void @finch.copy.arr_str(ptr %t10, ptr %t11) ret void } define internal void @finch.drop.arr_S_gen_Pending(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond9180 n.cond9180: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body9181, label %n.end9182 n.body9181: %t7 = getelementptr inbounds %S.gen.Pending, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Pending(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond9180 n.end9182: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.arr_S_gen_Loop(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond9183 n.cond9183: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body9184, label %n.end9185 n.body9184: %t7 = getelementptr inbounds %S.gen.Loop, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Loop(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond9183 n.end9185: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.arr_S_gen_FnSig(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond9186 n.cond9186: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body9187, label %n.end9188 n.body9187: %t7 = getelementptr inbounds %S.gen.FnSig, ptr %t1, i64 %t5 call void @finch.drop.S_gen_FnSig(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond9186 n.end9188: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.arr_S_gen_StructDef(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond9189 n.cond9189: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body9190, label %n.end9191 n.body9190: %t7 = getelementptr inbounds %S.gen.StructDef, ptr %t1, i64 %t5 call void @finch.drop.S_gen_StructDef(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond9189 n.end9191: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.arr_S_gen_Template(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond9192 n.cond9192: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body9193, label %n.end9194 n.body9193: %t7 = getelementptr inbounds %S.gen.Template, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Template(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond9192 n.end9194: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.arr_S_gen_EnumDef(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond9195 n.cond9195: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body9196, label %n.end9197 n.body9196: %t7 = getelementptr inbounds %S.gen.EnumDef, ptr %t1, i64 %t5 call void @finch.drop.S_gen_EnumDef(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond9195 n.end9197: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.arr_S_gen_SumDef(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond9198 n.cond9198: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body9199, label %n.end9200 n.body9199: %t7 = getelementptr inbounds %S.gen.SumDef, ptr %t1, i64 %t5 call void @finch.drop.S_gen_SumDef(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond9198 n.end9200: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.map_str_int(ptr %a) { entry: %a3 = alloca i64, align 16 %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 br label %n.cond9201 n.cond9201: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 br i1 %t5, label %n.body9202, label %n.end9203 n.body9202: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 br i1 %t11, label %entry.live9204, label %entry.next9205 entry.live9204: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 2 br label %entry.next9205 entry.next9205: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 br label %n.cond9201 n.end9203: call void @finch_map_free(ptr %a) ret void } define internal void @finch.drop.S_gen_Gen(ptr %a) { entry: %t1 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 0 call void @finch.drop.arr_S_ast_Program(ptr %t1) %t2 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 1 call void @finch.drop.arr_str(ptr %t2) %t3 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 2 call void @finch.drop.arr_str(ptr %t3) %t4 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 3 call void @finch.drop.arr_str(ptr %t4) %t5 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 4 call void @finch.drop.arr_str(ptr %t5) %t6 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 5 call void @finch.drop.arr_str(ptr %t6) %t7 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 10 call void @finch.drop.arr_S_gen_Scope(ptr %t7) %t8 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 11 call void @finch.drop.arr_S_gen_Pending(ptr %t8) %t9 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 12 call void @finch.drop.arr_S_gen_Loop(ptr %t9) %t10 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 13 call void @finch.drop.S_gen_FnSig(ptr %t10) %t11 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 14 call void @finch_str_drop(ptr %t11) %t12 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 15 call void @finch.drop.arr_S_gen_FnSig(ptr %t12) %t13 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 16 call void @finch.drop.arr_S_gen_StructDef(ptr %t13) %t14 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 17 call void @finch.drop.arr_S_gen_Template(ptr %t14) %t15 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 18 call void @finch.drop.arr_str(ptr %t15) %t16 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 19 call void @finch.drop.arr_S_ast_Type(ptr %t16) %t17 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 20 call void @finch_str_drop(ptr %t17) %t18 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 21 call void @finch.drop.arr_S_gen_EnumDef(ptr %t18) %t19 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 22 call void @finch.drop.arr_S_gen_SumDef(ptr %t19) %t20 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 23 call void @finch.drop.arr_str(ptr %t20) %t21 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 24 call void @finch.drop.arr_str(ptr %t21) %t22 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 26 call void @finch.drop.S_cimport_CImports(ptr %t22) %t23 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 29 call void @finch.drop.arr_str(ptr %t23) %t24 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 31 call void @finch.drop.S_platform_Target(ptr %t24) %t25 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 32 call void @finch_str_drop(ptr %t25) %t26 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 33 call void @finch.drop.arr_str(ptr %t26) %t27 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 34 call void @finch.drop.map_str_int(ptr %t27) %t28 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 35 call void @finch.drop.arr_int(ptr %t28) %t29 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 40 call void @finch.drop.arr_str(ptr %t29) %t30 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 41 call void @finch_str_drop(ptr %t30) %t31 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 42 call void @finch_str_drop(ptr %t31) %t32 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 43 call void @finch_str_drop(ptr %t32) ret void } define internal { ptr, i64, i64 } @finch.gen.generate({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, %S.cimport.CImports %p2, %S.gen.Options %p3) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.cimport.CImports, align 16 %a4 = alloca %S.gen.Options, align 16 %a7 = alloca i1, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca %S.cimport.CImports, align 16 %a20 = alloca %S.cimport.CImports, align 16 %a34 = alloca %S.platform.Target, align 16 %a35 = alloca %S.platform.Target, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca %S.gen.Gen, align 16 %a46 = alloca ptr, align 16 %a75 = alloca i64, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca i64, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca i64, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca i64, align 16 %a269 = alloca %S.gen.FnSig, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca %S.gen.FnSig, align 16 %a318 = alloca %S.gen.FnSig, align 16 %a320 = alloca %S.gen.FnSig, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a346 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a355 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a373 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a377 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a384 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a401 = alloca { ptr, i64, i64 }, align 16 %a403 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a410 = alloca { ptr, i64, i64 }, align 16 %a411 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a415 = alloca { ptr, i64, i64 }, align 16 %a416 = alloca { ptr, i64, i64 }, align 16 %a419 = alloca { ptr, i64, i64 }, align 16 %a421 = alloca { ptr, i64, i64 }, align 16 %a422 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a432 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a434 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 %a439 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca { ptr, i64, i64 }, align 16 %a441 = alloca { ptr, i64, i64 }, align 16 %a444 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 %a453 = alloca { ptr, i64, i64 }, align 16 %a454 = alloca { ptr, i64, i64 }, align 16 %a455 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a458 = alloca { ptr, i64, i64 }, align 16 %a459 = alloca { ptr, i64, i64 }, align 16 %a460 = alloca { ptr, i64, i64 }, align 16 %a463 = alloca { ptr, i64, i64 }, align 16 %a467 = alloca { ptr, i64, i64 }, align 16 %a468 = alloca { ptr, i64, i64 }, align 16 %a472 = alloca { ptr, i64, i64 }, align 16 %a473 = alloca { ptr, i64, i64 }, align 16 %a474 = alloca { ptr, i64, i64 }, align 16 %a477 = alloca { ptr, i64, i64 }, align 16 %a479 = alloca { ptr, i64, i64 }, align 16 %a485 = alloca { ptr, i64, i64 }, align 16 %a486 = alloca { ptr, i64, i64 }, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a489 = alloca { ptr, i64, i64 }, align 16 %a490 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca { ptr, i64, i64 }, align 16 %a492 = alloca { ptr, i64, i64 }, align 16 %a495 = alloca { ptr, i64, i64 }, align 16 %a496 = alloca { ptr, i64, i64 }, align 16 %a497 = alloca { ptr, i64, i64 }, align 16 %a498 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a501 = alloca { ptr, i64, i64 }, align 16 %a502 = alloca { ptr, i64, i64 }, align 16 %a503 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a508 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca { ptr, i64, i64 }, align 16 %a511 = alloca { ptr, i64, i64 }, align 16 %a512 = alloca { ptr, i64, i64 }, align 16 %a513 = alloca { ptr, i64, i64 }, align 16 %a514 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.cimport.CImports %p2, ptr %a3 store %S.gen.Options %p3, ptr %a4 %t5 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 0 %t6 = load i1, ptr %t5 store i1 %t6, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t8, ptr %a9 call void @finch.copy.arr_S_ast_Program(ptr %a10, ptr %a9) %t11 = load { ptr, i64, i64 }, ptr %a10 %t12 = insertvalue %S.gen.Gen zeroinitializer, { ptr, i64, i64 } %t11, 0 %t13 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t13, ptr %a14 call void @finch.copy.arr_str(ptr %a15, ptr %a14) %t16 = load { ptr, i64, i64 }, ptr %a15 %t17 = insertvalue %S.gen.Gen %t12, { ptr, i64, i64 } %t16, 1 %t18 = load %S.cimport.CImports, ptr %a3 store %S.cimport.CImports %t18, ptr %a19 call void @finch.copy.S_cimport_CImports(ptr %a20, ptr %a19) %t21 = load %S.cimport.CImports, ptr %a20 %t22 = insertvalue %S.gen.Gen %t17, %S.cimport.CImports %t21, 26 %t23 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 0 %t24 = load i1, ptr %t23 %t25 = insertvalue %S.gen.Gen %t22, i1 %t24, 27 %t26 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 1 %t27 = load i1, ptr %t26 %t28 = insertvalue %S.gen.Gen %t25, i1 %t27, 28 %t29 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 2 %t30 = load i1, ptr %t29 %t31 = insertvalue %S.gen.Gen %t28, i1 %t30, 30 %t32 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 4 %t33 = load %S.platform.Target, ptr %t32 store %S.platform.Target %t33, ptr %a34 call void @finch.copy.S_platform_Target(ptr %a35, ptr %a34) %t36 = load %S.platform.Target, ptr %a35 %t37 = insertvalue %S.gen.Gen %t31, %S.platform.Target %t36, 31 %t38 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 3 %t39 = load { ptr, i64, i64 }, ptr %t38 store { ptr, i64, i64 } %t39, ptr %a40 call void @finch_str_copy(ptr %a41, ptr %a40) %t42 = load { ptr, i64, i64 }, ptr %a41 %t43 = insertvalue %S.gen.Gen %t37, { ptr, i64, i64 } %t42, 32 %t44 = insertvalue %S.gen.Gen %t43, i64 -1, 36 store %S.gen.Gen %t44, ptr %a45 store ptr %a45, ptr %a46 %t47 = load ptr, ptr %a46 %t48 = icmp eq ptr %t47, null br i1 %t48, label %panic9112, label %ok9113 panic9112: call void @finch_panic(ptr @.str.6130, i64 5794, ptr @.str.6131) unreachable ok9113: %t49 = getelementptr inbounds %S.gen.Gen, ptr %t47, i32 0, i32 30 %t50 = load i1, ptr %t49 br i1 %t50, label %then9114, label %endif9116 then9114: %t51 = load ptr, ptr %a46 %t52 = icmp eq ptr %t51, null br i1 %t52, label %panic9117, label %ok9118 panic9117: call void @finch_panic(ptr @.str.6132, i64 5796, ptr @.str.6133) unreachable ok9118: %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 33 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 %t55 = load i64, ptr %t54 %t56 = add i64 %t55, 1 call void @finch_arr_reserve(ptr %t53, i64 %t56, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t57 = load ptr, ptr %t53 %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i64 %t55 store { ptr, i64, i64 } { ptr @.str.6134, i64 0, i64 0 }, ptr %t58 store i64 %t56, ptr %t54 %t59 = load ptr, ptr %a46 %t60 = icmp eq ptr %t59, null br i1 %t60, label %panic9119, label %ok9120 panic9119: call void @finch_panic(ptr @.str.6135, i64 5797, ptr @.str.6136) unreachable ok9120: %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 33 %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t61, i32 0, i32 1 %t63 = load i64, ptr %t62 %t64 = add i64 %t63, 1 call void @finch_arr_reserve(ptr %t61, i64 %t64, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t65 = load ptr, ptr %t61 %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 %t63 store { ptr, i64, i64 } { ptr @.str.6137, i64 33, i64 0 }, ptr %t66 store i64 %t64, ptr %t62 %t67 = load ptr, ptr %a46 %t68 = icmp eq ptr %t67, null br i1 %t68, label %panic9121, label %ok9122 panic9121: call void @finch_panic(ptr @.str.6138, i64 5798, ptr @.str.6139) unreachable ok9122: %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 33 %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i32 0, i32 1 %t71 = load i64, ptr %t70 %t72 = add i64 %t71, 1 call void @finch_arr_reserve(ptr %t69, i64 %t72, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t73 = load ptr, ptr %t69 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i64 %t71 store { ptr, i64, i64 } { ptr @.str.6140, i64 38, i64 0 }, ptr %t74 store i64 %t72, ptr %t70 store i64 0, ptr %a75 br label %each.cond9123 each.cond9123: %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t77 = load i64, ptr %t76 %t78 = load i64, ptr %a75 %t79 = icmp slt i64 %t78, %t77 br i1 %t79, label %each.body9124, label %each.end9126 each.body9124: %t80 = load ptr, ptr %a2 %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %t80, i64 %t78 %t82 = load { ptr, i64, i64 }, ptr %t81 store { ptr, i64, i64 } %t82, ptr %a83 %t84 = load ptr, ptr %a46 %t85 = icmp eq ptr %t84, null br i1 %t85, label %panic9127, label %ok9128 panic9127: call void @finch_panic(ptr @.str.6141, i64 5800, ptr @.str.6142) unreachable ok9128: %t86 = getelementptr inbounds %S.gen.Gen, ptr %t84, i32 0, i32 35 %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 %t88 = load ptr, ptr %a46 %t89 = load { ptr, i64, i64 }, ptr %a83 store { ptr, i64, i64 } { ptr @.str.6143, i64 19, i64 0 }, ptr %a91 store { ptr, i64, i64 } %t89, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a90 store { ptr, i64, i64 } %t93, ptr %a95 store { ptr, i64, i64 } { ptr @.str.6144, i64 15, i64 0 }, ptr %a96 call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) store { ptr, i64, i64 } %t93, ptr %a97 call void @finch_str_drop(ptr %a97) %t98 = load { ptr, i64, i64 }, ptr %a94 %t99 = load ptr, ptr %a46 %t100 = icmp eq ptr %t99, null br i1 %t100, label %panic9129, label %ok9130 panic9129: call void @finch_panic(ptr @.str.6145, i64 5800, ptr @.str.6146) unreachable ok9130: %t101 = getelementptr inbounds %S.gen.Gen, ptr %t99, i32 0, i32 32 %t102 = load { ptr, i64, i64 }, ptr %t101 store { ptr, i64, i64 } %t98, ptr %a104 store { ptr, i64, i64 } %t102, ptr %a105 call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) store { ptr, i64, i64 } %t98, ptr %a106 call void @finch_str_drop(ptr %a106) %t107 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t107, ptr %a109 store { ptr, i64, i64 } { ptr @.str.6147, i64 2, i64 0 }, ptr %a110 call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) store { ptr, i64, i64 } %t107, ptr %a111 call void @finch_str_drop(ptr %a111) %t112 = load { ptr, i64, i64 }, ptr %a108 %t113 = call i64 @finch.gen.md(ptr %t88, { ptr, i64, i64 } %t112) store { ptr, i64, i64 } %t112, ptr %a114 call void @finch_str_drop(ptr %a114) %t115 = load i64, ptr %t87 %t116 = add i64 %t115, 1 call void @finch_arr_reserve(ptr %t86, i64 %t116, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t117 = load ptr, ptr %t86 %t118 = getelementptr inbounds i64, ptr %t117, i64 %t115 store i64 %t113, ptr %t118 store i64 %t116, ptr %t87 br label %each.step9125 each.step9125: %t119 = load i64, ptr %a75 %t120 = add i64 %t119, 1 store i64 %t120, ptr %a75 br label %each.cond9123 each.end9126: %t121 = load ptr, ptr %a46 %t122 = icmp eq ptr %t121, null br i1 %t122, label %panic9131, label %ok9132 panic9131: call void @finch_panic(ptr @.str.6149, i64 5802, ptr @.str.6150) unreachable ok9132: %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 35 %t124 = load { ptr, i64, i64 }, ptr %t123 %t125 = extractvalue { ptr, i64, i64 } %t124, 1 %t126 = icmp uge i64 0, %t125 br i1 %t126, label %range9133, label %inrange9134 range9133: call void @finch_panic_index(ptr @.str.6151, i64 5802, i64 0, i64 %t125) unreachable inrange9134: %t127 = extractvalue { ptr, i64, i64 } %t124, 0 %t128 = getelementptr inbounds i64, ptr %t127, i64 0 %t129 = load i64, ptr %t128 call void @finch_str_from_int(ptr %a130, i64 %t129) %t131 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } { ptr @.str.6148, i64 52, i64 0 }, ptr %a133 store { ptr, i64, i64 } %t131, ptr %a134 call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) store { ptr, i64, i64 } %t131, ptr %a135 call void @finch_str_drop(ptr %a135) %t136 = load { ptr, i64, i64 }, ptr %a132 store { ptr, i64, i64 } %t136, ptr %a138 store { ptr, i64, i64 } { ptr @.str.6152, i64 84, i64 0 }, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) store { ptr, i64, i64 } %t136, ptr %a140 call void @finch_str_drop(ptr %a140) %t141 = load { ptr, i64, i64 }, ptr %a137 %t142 = load ptr, ptr %a46 %t143 = icmp eq ptr %t142, null br i1 %t143, label %panic9135, label %ok9136 panic9135: call void @finch_panic(ptr @.str.6153, i64 5802, ptr @.str.6154) unreachable ok9136: %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 33 %t145 = load { ptr, i64, i64 }, ptr %t144 %t146 = extractvalue { ptr, i64, i64 } %t145, 1 %t147 = icmp uge i64 0, %t146 br i1 %t147, label %range9137, label %inrange9138 range9137: call void @finch_panic_index(ptr @.str.6155, i64 5802, i64 0, i64 %t146) unreachable inrange9138: %t148 = extractvalue { ptr, i64, i64 } %t145, 0 %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %t148, i64 0 %t150 = load { ptr, i64, i64 }, ptr %t149 store { ptr, i64, i64 } %t141, ptr %t149 store { ptr, i64, i64 } %t150, ptr %a151 call void @finch_str_drop(ptr %a151) br label %endif9116 endif9116: %t152 = load ptr, ptr %a46 call void @finch.gen.declare(ptr %t152) %t153 = load ptr, ptr %a46 %t154 = call i64 @finch.gen.findFn(ptr %t153, { ptr, i64, i64 } { ptr @.str.6156, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.6157, i64 4, i64 0 }) store i64 %t154, ptr %a155 %t156 = load i1, ptr %a7 br i1 %t156, label %then9139, label %else9140 then9139: %t157 = load i64, ptr %a155 %t158 = icmp sge i64 %t157, 0 br i1 %t158, label %then9142, label %endif9144 then9142: %t159 = load ptr, ptr %a46 %t160 = load ptr, ptr %a46 %t161 = icmp eq ptr %t160, null br i1 %t161, label %panic9145, label %ok9146 panic9145: call void @finch_panic(ptr @.str.6158, i64 5808, ptr @.str.6159) unreachable ok9146: %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 0 %t163 = load ptr, ptr %a46 %t164 = icmp eq ptr %t163, null br i1 %t164, label %panic9147, label %ok9148 panic9147: call void @finch_panic(ptr @.str.6160, i64 5808, ptr @.str.6161) unreachable ok9148: %t165 = getelementptr inbounds %S.gen.Gen, ptr %t163, i32 0, i32 15 %t166 = load i64, ptr %a155 %t167 = load { ptr, i64, i64 }, ptr %t165 %t168 = extractvalue { ptr, i64, i64 } %t167, 1 %t169 = icmp uge i64 %t166, %t168 br i1 %t169, label %range9149, label %inrange9150 range9149: call void @finch_panic_index(ptr @.str.6162, i64 5808, i64 %t166, i64 %t168) unreachable inrange9150: %t170 = extractvalue { ptr, i64, i64 } %t167, 0 %t171 = getelementptr inbounds %S.gen.FnSig, ptr %t170, i64 %t166 %t172 = getelementptr inbounds %S.gen.FnSig, ptr %t171, i32 0, i32 16 %t173 = load i64, ptr %t172 %t174 = load { ptr, i64, i64 }, ptr %t162 %t175 = extractvalue { ptr, i64, i64 } %t174, 1 %t176 = icmp uge i64 %t173, %t175 br i1 %t176, label %range9151, label %inrange9152 range9151: call void @finch_panic_index(ptr @.str.6163, i64 5808, i64 %t173, i64 %t175) unreachable inrange9152: %t177 = extractvalue { ptr, i64, i64 } %t174, 0 %t178 = getelementptr inbounds %S.ast.Program, ptr %t177, i64 %t173 %t179 = getelementptr inbounds %S.ast.Program, ptr %t178, i32 0, i32 8 %t180 = load ptr, ptr %a46 %t181 = icmp eq ptr %t180, null br i1 %t181, label %panic9153, label %ok9154 panic9153: call void @finch_panic(ptr @.str.6164, i64 5808, ptr @.str.6165) unreachable ok9154: %t182 = getelementptr inbounds %S.gen.Gen, ptr %t180, i32 0, i32 15 %t183 = load i64, ptr %a155 %t184 = load { ptr, i64, i64 }, ptr %t182 %t185 = extractvalue { ptr, i64, i64 } %t184, 1 %t186 = icmp uge i64 %t183, %t185 br i1 %t186, label %range9155, label %inrange9156 range9155: call void @finch_panic_index(ptr @.str.6166, i64 5808, i64 %t183, i64 %t185) unreachable inrange9156: %t187 = extractvalue { ptr, i64, i64 } %t184, 0 %t188 = getelementptr inbounds %S.gen.FnSig, ptr %t187, i64 %t183 %t189 = getelementptr inbounds %S.gen.FnSig, ptr %t188, i32 0, i32 17 %t190 = load i64, ptr %t189 %t191 = load { ptr, i64, i64 }, ptr %t179 %t192 = extractvalue { ptr, i64, i64 } %t191, 1 %t193 = icmp uge i64 %t190, %t192 br i1 %t193, label %range9157, label %inrange9158 range9157: call void @finch_panic_index(ptr @.str.6167, i64 5808, i64 %t190, i64 %t192) unreachable inrange9158: %t194 = extractvalue { ptr, i64, i64 } %t191, 0 %t195 = getelementptr inbounds %S.ast.Node, ptr %t194, i64 %t190 %t196 = load %S.ast.Node, ptr %t195 call void @finch.gen.fail(ptr %t159, %S.ast.Node %t196, { ptr, i64, i64 } { ptr @.str.6168, i64 82, i64 0 }) br label %endif9144 endif9144: br label %endif9141 else9140: %t197 = load i64, ptr %a155 %t198 = icmp slt i64 %t197, 0 br i1 %t198, label %then9159, label %endif9161 then9159: %t199 = load { ptr, i64, i64 }, ptr %a2 %t200 = extractvalue { ptr, i64, i64 } %t199, 1 %t201 = icmp uge i64 0, %t200 br i1 %t201, label %range9162, label %inrange9163 range9162: call void @finch_panic_index(ptr @.str.6169, i64 5811, i64 0, i64 %t200) unreachable inrange9163: %t202 = extractvalue { ptr, i64, i64 } %t199, 0 %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i64 0 %t204 = load { ptr, i64, i64 }, ptr %t203 store { ptr, i64, i64 } %t204, ptr %a206 store { ptr, i64, i64 } { ptr @.str.6170, i64 64, i64 0 }, ptr %a207 call void @finch_str_concat(ptr %a205, ptr %a206, ptr %a207) %t208 = load { ptr, i64, i64 }, ptr %a205 %t209 = extractvalue { ptr, i64, i64 } %t208, 1 %t210 = trunc i64 %t209 to i32 %t211 = extractvalue { ptr, i64, i64 } %t208, 0 %t212 = icmp eq ptr %t211, null %t213 = select i1 %t212, ptr @.str.6171, ptr %t211 %t214 = call i32 (ptr, ...) @printf(ptr @.str.6172, i32 %t210, ptr %t213) store { ptr, i64, i64 } %t208, ptr %a215 call void @finch_str_drop(ptr %a215) %t216 = call i32 (ptr, ...) @printf(ptr @.str.6173) %t217 = trunc i64 1 to i32 %t218 = call i32 @fflush(ptr null) call void @exit(i32 %t217) br label %endif9161 endif9161: br label %endif9141 endif9141: store i64 0, ptr %a219 br label %while.cond9164 while.cond9164: %t220 = load i64, ptr %a219 %t221 = load ptr, ptr %a46 %t222 = icmp eq ptr %t221, null br i1 %t222, label %panic9167, label %ok9168 panic9167: call void @finch_panic(ptr @.str.6174, i64 5816, ptr @.str.6175) unreachable ok9168: %t223 = getelementptr inbounds %S.gen.Gen, ptr %t221, i32 0, i32 15 %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i32 0, i32 1 %t225 = load i64, ptr %t224 %t226 = icmp slt i64 %t220, %t225 br i1 %t226, label %while.body9165, label %while.end9166 while.body9165: %t227 = load ptr, ptr %a46 %t228 = load i64, ptr %a219 call void @finch.gen.define(ptr %t227, i64 %t228) %t229 = load i64, ptr %a219 %t230 = add i64 %t229, 1 store i64 %t230, ptr %a219 br label %while.cond9164 while.end9166: %t231 = load ptr, ptr %a46 %t232 = icmp eq ptr %t231, null br i1 %t232, label %panic9169, label %ok9170 panic9169: call void @finch_panic(ptr @.str.6176, i64 5820, ptr @.str.6177) unreachable ok9170: %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 28 %t234 = load i1, ptr %t233 br i1 %t234, label %then9171, label %endif9173 then9171: %t235 = load ptr, ptr %a46 %t236 = icmp eq ptr %t235, null br i1 %t236, label %panic9174, label %ok9175 panic9174: call void @finch_panic(ptr @.str.6178, i64 5821, ptr @.str.6179) unreachable ok9175: %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 0 %t238 = load { ptr, i64, i64 }, ptr %t237 %t239 = extractvalue { ptr, i64, i64 } %t238, 1 %t240 = icmp uge i64 0, %t239 br i1 %t240, label %range9176, label %inrange9177 range9176: call void @finch_panic_index(ptr @.str.6180, i64 5821, i64 0, i64 %t239) unreachable inrange9177: %t241 = extractvalue { ptr, i64, i64 } %t238, 0 %t242 = getelementptr inbounds %S.ast.Program, ptr %t241, i64 0 %t243 = getelementptr inbounds %S.ast.Program, ptr %t242, i32 0, i32 2 %t244 = load { ptr, i64, i64 }, ptr %t243 store { ptr, i64, i64 } %t244, ptr %a245 call void @finch.copy.arr_str(ptr %a246, ptr %a245) %t247 = load { ptr, i64, i64 }, ptr %a246 store { ptr, i64, i64 } %t247, ptr %a248 %t249 = load ptr, ptr %a46 %t250 = load { ptr, i64, i64 }, ptr %a248 call void @finch.gen.indexAll(ptr %t249, { ptr, i64, i64 } %t250) %t251 = load ptr, ptr %a46 %t252 = icmp eq ptr %t251, null br i1 %t252, label %panic9178, label %ok9179 panic9178: call void @finch_panic(ptr @.str.6181, i64 5823, ptr @.str.6182) unreachable ok9179: %t253 = getelementptr inbounds %S.gen.Gen, ptr %t251, i32 0, i32 29 %t254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.6183, i64 1, i64 0 }, ptr %a255 call void @finch_str_join(ptr %a256, ptr %t253, ptr %a255) %t257 = load { ptr, i64, i64 }, ptr %a256 call void @finch.drop.arr_str(ptr %a248) call void @finch.drop.S_gen_Gen(ptr %a45) ret { ptr, i64, i64 } %t257 endif9173: %t258 = load ptr, ptr %a46 %t259 = icmp eq ptr %t258, null br i1 %t259, label %panic9206, label %ok9207 panic9206: call void @finch_panic(ptr @.str.6184, i64 5825, ptr @.str.6185) unreachable ok9207: %t260 = getelementptr inbounds %S.gen.Gen, ptr %t258, i32 0, i32 15 store i64 0, ptr %a261 br label %each.cond9208 each.cond9208: %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t260, i32 0, i32 1 %t263 = load i64, ptr %t262 %t264 = load i64, ptr %a261 %t265 = icmp slt i64 %t264, %t263 br i1 %t265, label %each.body9209, label %each.end9211 each.body9209: %t266 = load ptr, ptr %t260 %t267 = getelementptr inbounds %S.gen.FnSig, ptr %t266, i64 %t264 %t268 = load %S.gen.FnSig, ptr %t267 store %S.gen.FnSig %t268, ptr %a269 %t270 = getelementptr inbounds %S.gen.FnSig, ptr %a269, i32 0, i32 5 %t271 = load i1, ptr %t270 br i1 %t271, label %then9212, label %endif9214 then9212: %t272 = load ptr, ptr %a46 %t273 = load %S.gen.FnSig, ptr %a269 %t274 = call { ptr, i64, i64 } @finch.gen.exportWrapper(ptr %t272, %S.gen.FnSig %t273) store { ptr, i64, i64 } %t274, ptr %a275 call void @finch_str_drop(ptr %a275) br label %endif9214 endif9214: br label %each.step9210 each.step9210: %t276 = load i64, ptr %a261 %t277 = add i64 %t276, 1 store i64 %t277, ptr %a261 br label %each.cond9208 each.end9211: %t278 = load i1, ptr %a7 br i1 %t278, label %then9215, label %endif9217 then9215: store { ptr, i64, i64 } { ptr @.str.6186, i64 0, i64 0 }, ptr %a279 %t280 = load ptr, ptr %a46 %t281 = icmp eq ptr %t280, null br i1 %t281, label %panic9218, label %ok9219 panic9218: call void @finch_panic(ptr @.str.6187, i64 5833, ptr @.str.6188) unreachable ok9219: %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 31 %t283 = getelementptr inbounds %S.platform.Target, ptr %t282, i32 0, i32 1 %t284 = load i1, ptr %t283 br i1 %t284, label %then9220, label %endif9222 then9220: %t285 = load { ptr, i64, i64 }, ptr %a279 store { ptr, i64, i64 } { ptr @.str.6189, i64 10, i64 0 }, ptr %a279 store { ptr, i64, i64 } %t285, ptr %a286 call void @finch_str_drop(ptr %a286) br label %endif9222 endif9222: %t287 = load ptr, ptr %a46 %t288 = icmp eq ptr %t287, null br i1 %t288, label %panic9223, label %ok9224 panic9223: call void @finch_panic(ptr @.str.6190, i64 5836, ptr @.str.6191) unreachable ok9224: %t289 = getelementptr inbounds %S.gen.Gen, ptr %t287, i32 0, i32 3 %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t289, i32 0, i32 1 %t291 = load { ptr, i64, i64 }, ptr %a279 store { ptr, i64, i64 } { ptr @.str.6192, i64 6, i64 0 }, ptr %a293 store { ptr, i64, i64 } %t291, ptr %a294 call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) %t295 = load { ptr, i64, i64 }, ptr %a292 store { ptr, i64, i64 } %t295, ptr %a297 store { ptr, i64, i64 } { ptr @.str.6193, i64 107, i64 0 }, ptr %a298 call void @finch_str_concat(ptr %a296, ptr %a297, ptr %a298) store { ptr, i64, i64 } %t295, ptr %a299 call void @finch_str_drop(ptr %a299) %t300 = load { ptr, i64, i64 }, ptr %a296 %t301 = load i64, ptr %t290 %t302 = add i64 %t301, 1 call void @finch_arr_reserve(ptr %t289, i64 %t302, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t303 = load ptr, ptr %t289 %t304 = getelementptr inbounds { ptr, i64, i64 }, ptr %t303, i64 %t301 store { ptr, i64, i64 } %t300, ptr %t304 store i64 %t302, ptr %t290 %t305 = load ptr, ptr %a46 %t306 = call { ptr, i64, i64 } @finch.gen.assemble(ptr %t305) call void @finch_str_drop(ptr %a279) call void @finch.drop.S_gen_Gen(ptr %a45) ret { ptr, i64, i64 } %t306 endif9217: %t307 = load ptr, ptr %a46 %t308 = icmp eq ptr %t307, null br i1 %t308, label %panic9225, label %ok9226 panic9225: call void @finch_panic(ptr @.str.6194, i64 5840, ptr @.str.6195) unreachable ok9226: %t309 = getelementptr inbounds %S.gen.Gen, ptr %t307, i32 0, i32 15 %t310 = load i64, ptr %a155 %t311 = load { ptr, i64, i64 }, ptr %t309 %t312 = extractvalue { ptr, i64, i64 } %t311, 1 %t313 = icmp uge i64 %t310, %t312 br i1 %t313, label %range9227, label %inrange9228 range9227: call void @finch_panic_index(ptr @.str.6196, i64 5840, i64 %t310, i64 %t312) unreachable inrange9228: %t314 = extractvalue { ptr, i64, i64 } %t311, 0 %t315 = getelementptr inbounds %S.gen.FnSig, ptr %t314, i64 %t310 %t316 = load %S.gen.FnSig, ptr %t315 store %S.gen.FnSig %t316, ptr %a317 call void @finch.copy.S_gen_FnSig(ptr %a318, ptr %a317) %t319 = load %S.gen.FnSig, ptr %a318 store %S.gen.FnSig %t319, ptr %a320 %t321 = load ptr, ptr %a46 %t322 = load %S.gen.FnSig, ptr %a320 %t323 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t321, %S.gen.FnSig %t322) store { ptr, i64, i64 } { ptr @.str.6197, i64 5, i64 0 }, ptr %a325 store { ptr, i64, i64 } %t323, ptr %a326 call void @finch_str_concat(ptr %a324, ptr %a325, ptr %a326) store { ptr, i64, i64 } %t323, ptr %a327 call void @finch_str_drop(ptr %a327) %t328 = load { ptr, i64, i64 }, ptr %a324 store { ptr, i64, i64 } %t328, ptr %a330 store { ptr, i64, i64 } { ptr @.str.6198, i64 1, i64 0 }, ptr %a331 call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) store { ptr, i64, i64 } %t328, ptr %a332 call void @finch_str_drop(ptr %a332) %t333 = load { ptr, i64, i64 }, ptr %a329 %t334 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 11 %t335 = load { ptr, i64, i64 }, ptr %t334 store { ptr, i64, i64 } %t333, ptr %a337 store { ptr, i64, i64 } %t335, ptr %a338 call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338) store { ptr, i64, i64 } %t333, ptr %a339 call void @finch_str_drop(ptr %a339) %t340 = load { ptr, i64, i64 }, ptr %a336 store { ptr, i64, i64 } %t340, ptr %a342 store { ptr, i64, i64 } { ptr @.str.6199, i64 1, i64 0 }, ptr %a343 call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) store { ptr, i64, i64 } %t340, ptr %a344 call void @finch_str_drop(ptr %a344) %t345 = load { ptr, i64, i64 }, ptr %a341 store { ptr, i64, i64 } %t345, ptr %a346 store { ptr, i64, i64 } { ptr @.str.6200, i64 0, i64 0 }, ptr %a347 %t348 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 13 %t349 = getelementptr inbounds { ptr, i64, i64 }, ptr %t348, i32 0, i32 1 %t350 = load i64, ptr %t349 %t351 = icmp eq i64 %t350, 1 br i1 %t351, label %then9229, label %endif9231 then9229: %t352 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } { ptr @.str.6201, i64 133, i64 0 }, ptr %a347 store { ptr, i64, i64 } %t352, ptr %a353 call void @finch_str_drop(ptr %a353) %t354 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t354, ptr %a356 store { ptr, i64, i64 } { ptr @.str.6202, i64 20, i64 0 }, ptr %a357 call void @finch_str_concat(ptr %a355, ptr %a356, ptr %a357) %t358 = load { ptr, i64, i64 }, ptr %a355 %t359 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t358, ptr %a346 store { ptr, i64, i64 } %t359, ptr %a360 call void @finch_str_drop(ptr %a360) br label %endif9231 endif9231: %t361 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t361, ptr %a363 store { ptr, i64, i64 } { ptr @.str.6203, i64 1, i64 0 }, ptr %a364 call void @finch_str_concat(ptr %a362, ptr %a363, ptr %a364) %t365 = load { ptr, i64, i64 }, ptr %a362 %t366 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t365, ptr %a346 store { ptr, i64, i64 } %t366, ptr %a367 call void @finch_str_drop(ptr %a367) store { ptr, i64, i64 } { ptr @.str.6204, i64 12, i64 0 }, ptr %a368 %t369 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 9 %t370 = load i1, ptr %t369 br i1 %t370, label %then9232, label %else9233 then9232: %t371 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } { ptr @.str.6205, i64 5, i64 0 }, ptr %a373 store { ptr, i64, i64 } %t371, ptr %a374 call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) %t375 = load { ptr, i64, i64 }, ptr %a372 %t376 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t375, ptr %a346 store { ptr, i64, i64 } %t376, ptr %a377 call void @finch_str_drop(ptr %a377) %t378 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t378, ptr %a380 store { ptr, i64, i64 } { ptr @.str.6206, i64 2, i64 0 }, ptr %a381 call void @finch_str_concat(ptr %a379, ptr %a380, ptr %a381) %t382 = load { ptr, i64, i64 }, ptr %a379 %t383 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t382, ptr %a385 store { ptr, i64, i64 } %t383, ptr %a386 call void @finch_str_concat(ptr %a384, ptr %a385, ptr %a386) store { ptr, i64, i64 } %t382, ptr %a387 call void @finch_str_drop(ptr %a387) %t388 = load { ptr, i64, i64 }, ptr %a384 store { ptr, i64, i64 } %t388, ptr %a390 store { ptr, i64, i64 } { ptr @.str.6207, i64 1, i64 0 }, ptr %a391 call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) store { ptr, i64, i64 } %t388, ptr %a392 call void @finch_str_drop(ptr %a392) %t393 = load { ptr, i64, i64 }, ptr %a389 %t394 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t393, ptr %a347 store { ptr, i64, i64 } %t394, ptr %a395 call void @finch_str_drop(ptr %a395) %t396 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } { ptr @.str.6208, i64 0, i64 0 }, ptr %a346 store { ptr, i64, i64 } %t396, ptr %a397 call void @finch_str_drop(ptr %a397) %t398 = load ptr, ptr %a46 %t399 = load %S.gen.FnSig, ptr %a320 %t400 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t398, %S.gen.FnSig %t399) store { ptr, i64, i64 } %t400, ptr %a401 %t402 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t402, ptr %a404 store { ptr, i64, i64 } { ptr @.str.6209, i64 21, i64 0 }, ptr %a405 call void @finch_str_concat(ptr %a403, ptr %a404, ptr %a405) %t406 = load { ptr, i64, i64 }, ptr %a403 %t407 = load { ptr, i64, i64 }, ptr %a401 store { ptr, i64, i64 } %t406, ptr %a409 store { ptr, i64, i64 } %t407, ptr %a410 call void @finch_str_concat(ptr %a408, ptr %a409, ptr %a410) store { ptr, i64, i64 } %t406, ptr %a411 call void @finch_str_drop(ptr %a411) %t412 = load { ptr, i64, i64 }, ptr %a408 store { ptr, i64, i64 } %t412, ptr %a414 store { ptr, i64, i64 } { ptr @.str.6210, i64 62, i64 0 }, ptr %a415 call void @finch_str_concat(ptr %a413, ptr %a414, ptr %a415) store { ptr, i64, i64 } %t412, ptr %a416 call void @finch_str_drop(ptr %a416) %t417 = load { ptr, i64, i64 }, ptr %a413 %t418 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t417, ptr %a347 store { ptr, i64, i64 } %t418, ptr %a419 call void @finch_str_drop(ptr %a419) %t420 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t420, ptr %a422 store { ptr, i64, i64 } { ptr @.str.6211, i64 20, i64 0 }, ptr %a423 call void @finch_str_concat(ptr %a421, ptr %a422, ptr %a423) %t424 = load { ptr, i64, i64 }, ptr %a421 %t425 = load { ptr, i64, i64 }, ptr %a401 store { ptr, i64, i64 } %t424, ptr %a427 store { ptr, i64, i64 } %t425, ptr %a428 call void @finch_str_concat(ptr %a426, ptr %a427, ptr %a428) store { ptr, i64, i64 } %t424, ptr %a429 call void @finch_str_drop(ptr %a429) %t430 = load { ptr, i64, i64 }, ptr %a426 store { ptr, i64, i64 } %t430, ptr %a432 store { ptr, i64, i64 } { ptr @.str.6212, i64 78, i64 0 }, ptr %a433 call void @finch_str_concat(ptr %a431, ptr %a432, ptr %a433) store { ptr, i64, i64 } %t430, ptr %a434 call void @finch_str_drop(ptr %a434) %t435 = load { ptr, i64, i64 }, ptr %a431 %t436 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t435, ptr %a347 store { ptr, i64, i64 } %t436, ptr %a437 call void @finch_str_drop(ptr %a437) %t438 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t438, ptr %a440 store { ptr, i64, i64 } { ptr @.str.6213, i64 62, i64 0 }, ptr %a441 call void @finch_str_concat(ptr %a439, ptr %a440, ptr %a441) %t442 = load { ptr, i64, i64 }, ptr %a439 %t443 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t442, ptr %a347 store { ptr, i64, i64 } %t443, ptr %a444 call void @finch_str_drop(ptr %a444) %t445 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 12 %t446 = getelementptr inbounds %S.ast.Type, ptr %t445, i32 0, i32 0 %t447 = load { ptr, i64, i64 }, ptr %t446 store { ptr, i64, i64 } %t447, ptr %a448 store { ptr, i64, i64 } { ptr @.str.6214, i64 3, i64 0 }, ptr %a449 %t450 = call i32 @finch_str_eq(ptr %a448, ptr %a449) %t451 = icmp ne i32 %t450, 0 br i1 %t451, label %then9235, label %endif9237 then9235: %t452 = load { ptr, i64, i64 }, ptr %a401 store { ptr, i64, i64 } { ptr @.str.6215, i64 20, i64 0 }, ptr %a454 store { ptr, i64, i64 } %t452, ptr %a455 call void @finch_str_concat(ptr %a453, ptr %a454, ptr %a455) %t456 = load { ptr, i64, i64 }, ptr %a453 store { ptr, i64, i64 } %t456, ptr %a458 store { ptr, i64, i64 } { ptr @.str.6216, i64 53, i64 0 }, ptr %a459 call void @finch_str_concat(ptr %a457, ptr %a458, ptr %a459) store { ptr, i64, i64 } %t456, ptr %a460 call void @finch_str_drop(ptr %a460) %t461 = load { ptr, i64, i64 }, ptr %a457 %t462 = load { ptr, i64, i64 }, ptr %a368 store { ptr, i64, i64 } %t461, ptr %a368 store { ptr, i64, i64 } %t462, ptr %a463 call void @finch_str_drop(ptr %a463) br label %endif9237 endif9237: call void @finch_str_drop(ptr %a401) br label %endif9234 else9233: %t464 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 12 %t465 = getelementptr inbounds %S.ast.Type, ptr %t464, i32 0, i32 0 %t466 = load { ptr, i64, i64 }, ptr %t465 store { ptr, i64, i64 } %t466, ptr %a467 store { ptr, i64, i64 } { ptr @.str.6217, i64 3, i64 0 }, ptr %a468 %t469 = call i32 @finch_str_eq(ptr %a467, ptr %a468) %t470 = icmp ne i32 %t469, 0 br i1 %t470, label %then9238, label %endif9240 then9238: %t471 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } { ptr @.str.6218, i64 5, i64 0 }, ptr %a473 store { ptr, i64, i64 } %t471, ptr %a474 call void @finch_str_concat(ptr %a472, ptr %a473, ptr %a474) %t475 = load { ptr, i64, i64 }, ptr %a472 %t476 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t475, ptr %a346 store { ptr, i64, i64 } %t476, ptr %a477 call void @finch_str_drop(ptr %a477) %t478 = load { ptr, i64, i64 }, ptr %a368 store { ptr, i64, i64 } { ptr @.str.6219, i64 46, i64 0 }, ptr %a368 store { ptr, i64, i64 } %t478, ptr %a479 call void @finch_str_drop(ptr %a479) br label %endif9240 endif9240: br label %endif9234 endif9234: %t480 = load ptr, ptr %a46 %t481 = icmp eq ptr %t480, null br i1 %t481, label %panic9241, label %ok9242 panic9241: call void @finch_panic(ptr @.str.6220, i64 5865, ptr @.str.6221) unreachable ok9242: %t482 = getelementptr inbounds %S.gen.Gen, ptr %t480, i32 0, i32 3 %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i32 0, i32 1 %t484 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } { ptr @.str.6222, i64 48, i64 0 }, ptr %a486 store { ptr, i64, i64 } %t484, ptr %a487 call void @finch_str_concat(ptr %a485, ptr %a486, ptr %a487) %t488 = load { ptr, i64, i64 }, ptr %a485 store { ptr, i64, i64 } %t488, ptr %a490 store { ptr, i64, i64 } { ptr @.str.6223, i64 2, i64 0 }, ptr %a491 call void @finch_str_concat(ptr %a489, ptr %a490, ptr %a491) store { ptr, i64, i64 } %t488, ptr %a492 call void @finch_str_drop(ptr %a492) %t493 = load { ptr, i64, i64 }, ptr %a489 %t494 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t493, ptr %a496 store { ptr, i64, i64 } %t494, ptr %a497 call void @finch_str_concat(ptr %a495, ptr %a496, ptr %a497) store { ptr, i64, i64 } %t493, ptr %a498 call void @finch_str_drop(ptr %a498) %t499 = load { ptr, i64, i64 }, ptr %a495 store { ptr, i64, i64 } %t499, ptr %a501 store { ptr, i64, i64 } { ptr @.str.6224, i64 1, i64 0 }, ptr %a502 call void @finch_str_concat(ptr %a500, ptr %a501, ptr %a502) store { ptr, i64, i64 } %t499, ptr %a503 call void @finch_str_drop(ptr %a503) %t504 = load { ptr, i64, i64 }, ptr %a500 %t505 = load { ptr, i64, i64 }, ptr %a368 store { ptr, i64, i64 } %t504, ptr %a507 store { ptr, i64, i64 } %t505, ptr %a508 call void @finch_str_concat(ptr %a506, ptr %a507, ptr %a508) store { ptr, i64, i64 } %t504, ptr %a509 call void @finch_str_drop(ptr %a509) %t510 = load { ptr, i64, i64 }, ptr %a506 store { ptr, i64, i64 } %t510, ptr %a512 store { ptr, i64, i64 } { ptr @.str.6225, i64 2, i64 0 }, ptr %a513 call void @finch_str_concat(ptr %a511, ptr %a512, ptr %a513) store { ptr, i64, i64 } %t510, ptr %a514 call void @finch_str_drop(ptr %a514) %t515 = load { ptr, i64, i64 }, ptr %a511 %t516 = load i64, ptr %t483 %t517 = add i64 %t516, 1 call void @finch_arr_reserve(ptr %t482, i64 %t517, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t518 = load ptr, ptr %t482 %t519 = getelementptr inbounds { ptr, i64, i64 }, ptr %t518, i64 %t516 store { ptr, i64, i64 } %t515, ptr %t519 store i64 %t517, ptr %t483 %t520 = load ptr, ptr %a46 %t521 = call { ptr, i64, i64 } @finch.gen.assemble(ptr %t520) call void @finch_str_drop(ptr %a368) call void @finch_str_drop(ptr %a347) call void @finch_str_drop(ptr %a346) call void @finch.drop.S_gen_FnSig(ptr %a320) call void @finch.drop.S_gen_Gen(ptr %a45) ret { ptr, i64, i64 } %t521 } define internal %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch_str_copy(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 %t8 = insertvalue %S.docs.Doc zeroinitializer, { ptr, i64, i64 } %t7, 0 %t9 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t9, ptr %a10 call void @finch_str_copy(ptr %a11, ptr %a10) %t12 = load { ptr, i64, i64 }, ptr %a11 %t13 = insertvalue %S.docs.Doc %t8, { ptr, i64, i64 } %t12, 1 %t14 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t14, ptr %a15 call void @finch_str_copy(ptr %a16, ptr %a15) %t17 = load { ptr, i64, i64 }, ptr %a16 %t18 = insertvalue %S.docs.Doc %t13, { ptr, i64, i64 } %t17, 2 ret %S.docs.Doc %t18 } define internal { ptr, i64, i64 } @finch.docs.builtins() { entry: %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6226, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6227, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.6228, i64 78, i64 0 }) %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6229, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6230, i64 31, i64 0 }, { ptr, i64, i64 } { ptr @.str.6231, i64 77, i64 0 }) %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6232, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6233, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6234, i64 121, i64 0 }) %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6235, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.6236, i64 38, i64 0 }, { ptr, i64, i64 } { ptr @.str.6237, i64 83, i64 0 }) %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6238, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6239, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.6240, i64 29, i64 0 }) %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6241, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6242, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.6243, i64 73, i64 0 }) %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6244, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6245, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6246, i64 98, i64 0 }) %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6247, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6248, i64 25, i64 0 }, { ptr, i64, i64 } { ptr @.str.6249, i64 66, i64 0 }) %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6250, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6251, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6252, i64 48, i64 0 }) %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6253, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6254, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6255, i64 77, i64 0 }) %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6256, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6257, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6258, i64 66, i64 0 }) %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6259, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6260, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6261, i64 73, i64 0 }) %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6262, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6263, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6264, i64 61, i64 0 }) %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6265, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6266, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6267, i64 130, i64 0 }) %t15 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6268, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6269, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6270, i64 75, i64 0 }) %t16 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6271, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6272, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.6273, i64 29, i64 0 }) %t17 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6274, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6275, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.6276, i64 26, i64 0 }) %t18 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6277, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6278, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6279, i64 88, i64 0 }) %t19 = mul i64 18, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) %t20 = call ptr @finch_alloc(i64 %t19) %t21 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 0 store %S.docs.Doc %t1, ptr %t21 %t22 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 1 store %S.docs.Doc %t2, ptr %t22 %t23 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 2 store %S.docs.Doc %t3, ptr %t23 %t24 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 3 store %S.docs.Doc %t4, ptr %t24 %t25 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 4 store %S.docs.Doc %t5, ptr %t25 %t26 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 5 store %S.docs.Doc %t6, ptr %t26 %t27 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 6 store %S.docs.Doc %t7, ptr %t27 %t28 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 7 store %S.docs.Doc %t8, ptr %t28 %t29 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 8 store %S.docs.Doc %t9, ptr %t29 %t30 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 9 store %S.docs.Doc %t10, ptr %t30 %t31 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 10 store %S.docs.Doc %t11, ptr %t31 %t32 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 11 store %S.docs.Doc %t12, ptr %t32 %t33 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 12 store %S.docs.Doc %t13, ptr %t33 %t34 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 13 store %S.docs.Doc %t14, ptr %t34 %t35 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 14 store %S.docs.Doc %t15, ptr %t35 %t36 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 15 store %S.docs.Doc %t16, ptr %t36 %t37 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 16 store %S.docs.Doc %t17, ptr %t37 %t38 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 17 store %S.docs.Doc %t18, ptr %t38 %t39 = insertvalue { ptr, i64, i64 } undef, ptr %t20, 0 %t40 = insertvalue { ptr, i64, i64 } %t39, i64 18, 1 %t41 = insertvalue { ptr, i64, i64 } %t40, i64 18, 2 ret { ptr, i64, i64 } %t41 } define internal { ptr, i64, i64 } @finch.docs.arrayMethods() { entry: %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6280, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6281, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6282, i64 23, i64 0 }) %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6283, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6284, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6285, i64 40, i64 0 }) %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6286, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6287, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6288, i64 18, i64 0 }) %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6289, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6290, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.6291, i64 43, i64 0 }) %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6292, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6293, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6294, i64 38, i64 0 }) %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6295, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6296, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6297, i64 37, i64 0 }) %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6298, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6299, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6300, i64 19, i64 0 }) %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6301, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6302, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6303, i64 46, i64 0 }) %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6304, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6305, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.6306, i64 22, i64 0 }) %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6307, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.6308, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.6309, i64 18, i64 0 }) %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6310, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6311, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6312, i64 37, i64 0 }) %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6313, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6314, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6315, i64 18, i64 0 }) %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6316, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6317, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.6318, i64 45, i64 0 }) %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6319, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6320, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6321, i64 47, i64 0 }) %t15 = mul i64 14, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) %t16 = call ptr @finch_alloc(i64 %t15) %t17 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 0 store %S.docs.Doc %t1, ptr %t17 %t18 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 1 store %S.docs.Doc %t2, ptr %t18 %t19 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 2 store %S.docs.Doc %t3, ptr %t19 %t20 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 3 store %S.docs.Doc %t4, ptr %t20 %t21 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 4 store %S.docs.Doc %t5, ptr %t21 %t22 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 5 store %S.docs.Doc %t6, ptr %t22 %t23 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 6 store %S.docs.Doc %t7, ptr %t23 %t24 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 7 store %S.docs.Doc %t8, ptr %t24 %t25 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 8 store %S.docs.Doc %t9, ptr %t25 %t26 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 9 store %S.docs.Doc %t10, ptr %t26 %t27 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 10 store %S.docs.Doc %t11, ptr %t27 %t28 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 11 store %S.docs.Doc %t12, ptr %t28 %t29 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 12 store %S.docs.Doc %t13, ptr %t29 %t30 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 13 store %S.docs.Doc %t14, ptr %t30 %t31 = insertvalue { ptr, i64, i64 } undef, ptr %t16, 0 %t32 = insertvalue { ptr, i64, i64 } %t31, i64 14, 1 %t33 = insertvalue { ptr, i64, i64 } %t32, i64 14, 2 ret { ptr, i64, i64 } %t33 } define internal { ptr, i64, i64 } @finch.docs.strMethods() { entry: %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6322, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6323, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6324, i64 20, i64 0 }) %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6325, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6326, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6327, i64 59, i64 0 }) %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6328, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6329, i64 30, i64 0 }, { ptr, i64, i64 } { ptr @.str.6330, i64 29, i64 0 }) %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6331, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6332, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6333, i64 22, i64 0 }) %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6334, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.6335, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.6336, i64 24, i64 0 }) %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6337, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6338, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6339, i64 27, i64 0 }) %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6340, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6341, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6342, i64 25, i64 0 }) %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6343, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6344, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.6345, i64 62, i64 0 }) %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6346, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6347, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6348, i64 41, i64 0 }) %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6349, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6350, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6351, i64 24, i64 0 }) %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6352, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6353, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6354, i64 24, i64 0 }) %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6355, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6356, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.6357, i64 26, i64 0 }) %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6358, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6359, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6360, i64 17, i64 0 }) %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6361, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6362, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.6363, i64 22, i64 0 }) %t15 = mul i64 14, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) %t16 = call ptr @finch_alloc(i64 %t15) %t17 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 0 store %S.docs.Doc %t1, ptr %t17 %t18 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 1 store %S.docs.Doc %t2, ptr %t18 %t19 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 2 store %S.docs.Doc %t3, ptr %t19 %t20 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 3 store %S.docs.Doc %t4, ptr %t20 %t21 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 4 store %S.docs.Doc %t5, ptr %t21 %t22 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 5 store %S.docs.Doc %t6, ptr %t22 %t23 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 6 store %S.docs.Doc %t7, ptr %t23 %t24 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 7 store %S.docs.Doc %t8, ptr %t24 %t25 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 8 store %S.docs.Doc %t9, ptr %t25 %t26 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 9 store %S.docs.Doc %t10, ptr %t26 %t27 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 10 store %S.docs.Doc %t11, ptr %t27 %t28 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 11 store %S.docs.Doc %t12, ptr %t28 %t29 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 12 store %S.docs.Doc %t13, ptr %t29 %t30 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 13 store %S.docs.Doc %t14, ptr %t30 %t31 = insertvalue { ptr, i64, i64 } undef, ptr %t16, 0 %t32 = insertvalue { ptr, i64, i64 } %t31, i64 14, 1 %t33 = insertvalue { ptr, i64, i64 } %t32, i64 14, 2 ret { ptr, i64, i64 } %t33 } define internal { ptr, i64, i64 } @finch.docs.mapMethods() { entry: %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6364, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6365, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6366, i64 19, i64 0 }) %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6367, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6368, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6369, i64 22, i64 0 }) %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6370, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6371, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6372, i64 53, i64 0 }) %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6373, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6374, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.6375, i64 52, i64 0 }) %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6376, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6377, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6378, i64 19, i64 0 }) %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6379, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6380, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6381, i64 39, i64 0 }) %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6382, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6383, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.6384, i64 47, i64 0 }) %t8 = mul i64 7, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) %t9 = call ptr @finch_alloc(i64 %t8) %t10 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 0 store %S.docs.Doc %t1, ptr %t10 %t11 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 1 store %S.docs.Doc %t2, ptr %t11 %t12 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 2 store %S.docs.Doc %t3, ptr %t12 %t13 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 3 store %S.docs.Doc %t4, ptr %t13 %t14 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 4 store %S.docs.Doc %t5, ptr %t14 %t15 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 5 store %S.docs.Doc %t6, ptr %t15 %t16 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 6 store %S.docs.Doc %t7, ptr %t16 %t17 = insertvalue { ptr, i64, i64 } undef, ptr %t9, 0 %t18 = insertvalue { ptr, i64, i64 } %t17, i64 7, 1 %t19 = insertvalue { ptr, i64, i64 } %t18, i64 7, 2 ret { ptr, i64, i64 } %t19 } define internal { ptr, i64, i64 } @finch.docs.keywords() { entry: %t1 = mul i64 22, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t2 = call ptr @finch_alloc(i64 %t1) %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 store { ptr, i64, i64 } { ptr @.str.6385, i64 2, i64 0 }, ptr %t3 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 store { ptr, i64, i64 } { ptr @.str.6386, i64 6, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 store { ptr, i64, i64 } { ptr @.str.6387, i64 2, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 store { ptr, i64, i64 } { ptr @.str.6388, i64 4, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 store { ptr, i64, i64 } { ptr @.str.6389, i64 5, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 store { ptr, i64, i64 } { ptr @.str.6390, i64 3, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 store { ptr, i64, i64 } { ptr @.str.6391, i64 2, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 store { ptr, i64, i64 } { ptr @.str.6392, i64 5, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 store { ptr, i64, i64 } { ptr @.str.6393, i64 8, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 store { ptr, i64, i64 } { ptr @.str.6394, i64 4, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 store { ptr, i64, i64 } { ptr @.str.6395, i64 5, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 store { ptr, i64, i64 } { ptr @.str.6396, i64 4, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 store { ptr, i64, i64 } { ptr @.str.6397, i64 6, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 store { ptr, i64, i64 } { ptr @.str.6398, i64 4, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 store { ptr, i64, i64 } { ptr @.str.6399, i64 6, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 store { ptr, i64, i64 } { ptr @.str.6400, i64 4, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 store { ptr, i64, i64 } { ptr @.str.6401, i64 5, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 17 store { ptr, i64, i64 } { ptr @.str.6402, i64 6, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 18 store { ptr, i64, i64 } { ptr @.str.6403, i64 5, i64 0 }, ptr %t21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 19 store { ptr, i64, i64 } { ptr @.str.6404, i64 2, i64 0 }, ptr %t22 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 20 store { ptr, i64, i64 } { ptr @.str.6405, i64 3, i64 0 }, ptr %t23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 21 store { ptr, i64, i64 } { ptr @.str.6406, i64 4, i64 0 }, ptr %t24 %t25 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 %t26 = insertvalue { ptr, i64, i64 } %t25, i64 22, 1 %t27 = insertvalue { ptr, i64, i64 } %t26, i64 22, 2 ret { ptr, i64, i64 } %t27 } define internal { ptr, i64, i64 } @finch.docs.typeNames() { entry: %t1 = mul i64 17, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t2 = call ptr @finch_alloc(i64 %t1) %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 store { ptr, i64, i64 } { ptr @.str.6407, i64 3, i64 0 }, ptr %t3 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 store { ptr, i64, i64 } { ptr @.str.6408, i64 5, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 store { ptr, i64, i64 } { ptr @.str.6409, i64 4, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 store { ptr, i64, i64 } { ptr @.str.6410, i64 4, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 store { ptr, i64, i64 } { ptr @.str.6411, i64 3, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 store { ptr, i64, i64 } { ptr @.str.6412, i64 3, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 store { ptr, i64, i64 } { ptr @.str.6413, i64 3, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 store { ptr, i64, i64 } { ptr @.str.6414, i64 2, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 store { ptr, i64, i64 } { ptr @.str.6415, i64 3, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 store { ptr, i64, i64 } { ptr @.str.6416, i64 3, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 store { ptr, i64, i64 } { ptr @.str.6417, i64 3, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 store { ptr, i64, i64 } { ptr @.str.6418, i64 2, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 store { ptr, i64, i64 } { ptr @.str.6419, i64 3, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 store { ptr, i64, i64 } { ptr @.str.6420, i64 3, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 store { ptr, i64, i64 } { ptr @.str.6421, i64 3, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 store { ptr, i64, i64 } { ptr @.str.6422, i64 3, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 store { ptr, i64, i64 } { ptr @.str.6423, i64 3, i64 0 }, ptr %t19 %t20 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 %t21 = insertvalue { ptr, i64, i64 } %t20, i64 17, 1 %t22 = insertvalue { ptr, i64, i64 } %t21, i64 17, 2 ret { ptr, i64, i64 } %t22 } define internal void @finch.copy.S_docs_Doc(ptr %dst, ptr %src) { entry: %t1 = load %S.docs.Doc, ptr %src store %S.docs.Doc %t1, ptr %dst %t2 = getelementptr inbounds %S.docs.Doc, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.docs.Doc, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.docs.Doc, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.docs.Doc, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.docs.Doc, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.docs.Doc, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) ret void } define internal %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a11 = alloca %S.docs.Doc, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca %S.docs.Doc, align 16 %a21 = alloca %S.docs.Doc, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 0, ptr %a3 br label %each.cond9243 each.cond9243: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 br i1 %t7, label %each.body9244, label %each.end9246 each.body9244: %t8 = load ptr, ptr %a1 %t9 = getelementptr inbounds %S.docs.Doc, ptr %t8, i64 %t6 %t10 = load %S.docs.Doc, ptr %t9 store %S.docs.Doc %t10, ptr %a11 %t12 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 0 %t13 = load { ptr, i64, i64 }, ptr %t12 %t14 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t13, ptr %a15 store { ptr, i64, i64 } %t14, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 br i1 %t18, label %then9247, label %endif9249 then9247: %t19 = load %S.docs.Doc, ptr %a11 store %S.docs.Doc %t19, ptr %a20 call void @finch.copy.S_docs_Doc(ptr %a21, ptr %a20) %t22 = load %S.docs.Doc, ptr %a21 ret %S.docs.Doc %t22 endif9249: br label %each.step9245 each.step9245: %t23 = load i64, ptr %a3 %t24 = add i64 %t23, 1 store i64 %t24, ptr %a3 br label %each.cond9243 each.end9246: ret %S.docs.Doc zeroinitializer } define internal { ptr, i64, i64 } @finch.docs.hover(%S.docs.Doc %p0) { entry: %a1 = alloca %S.docs.Doc, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 store %S.docs.Doc %p0, ptr %a1 %t2 = getelementptr inbounds %S.docs.Doc, ptr %a1, i32 0, i32 1 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } { ptr @.str.6424, i64 9, i64 0 }, ptr %a5 store { ptr, i64, i64 } %t3, ptr %a6 call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t7, ptr %a9 store { ptr, i64, i64 } { ptr @.str.6425, i64 5, i64 0 }, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) store { ptr, i64, i64 } %t7, ptr %a11 call void @finch_str_drop(ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a8 %t13 = getelementptr inbounds %S.docs.Doc, ptr %a1, i32 0, i32 2 %t14 = load { ptr, i64, i64 }, ptr %t13 store { ptr, i64, i64 } %t12, ptr %a16 store { ptr, i64, i64 } %t14, ptr %a17 call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) store { ptr, i64, i64 } %t12, ptr %a18 call void @finch_str_drop(ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a15 ret { ptr, i64, i64 } %t19 } define internal { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %p0) { entry: %a1 = alloca %S.C.CXString, align 16 %a3 = alloca [32 x i8], align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca [32 x i8], align 16 store %S.C.CXString %p0, ptr %a1 %t2 = load %S.C.CXString, ptr %a1 store %S.C.CXString %t2, ptr %a3 %t4 = getelementptr inbounds i8, ptr %a3, i64 0 %t5 = load [2 x i64], ptr %t4 %t6 = call ptr @clang_getCString([2 x i64] %t5) store { ptr, i64, i64 } zeroinitializer, ptr %a7 call void @finch_str_from_c(ptr %a7, ptr %t6) %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t8, ptr %a9 call void @finch_str_copy(ptr %a10, ptr %a9) %t11 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t11, ptr %a12 %t13 = load %S.C.CXString, ptr %a1 store %S.C.CXString %t13, ptr %a14 %t15 = getelementptr inbounds i8, ptr %a14, i64 0 %t16 = load [2 x i64], ptr %t15 call void @clang_disposeString([2 x i64] %t16) %t17 = load { ptr, i64, i64 }, ptr %a12 ret { ptr, i64, i64 } %t17 } define internal %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = load %S.ast.Type, ptr %a1 store %S.ast.Type %t2, ptr %a3 call void @finch.copy.S_ast_Type(ptr %a4, ptr %a3) %t5 = load %S.ast.Type, ptr %a4 %t6 = insertvalue %S.cimport.Mapped zeroinitializer, %S.ast.Type %t5, 0 %t7 = insertvalue %S.cimport.Mapped %t6, i1 true, 2 ret %S.cimport.Mapped %t7 } define internal %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_copy(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 %t6 = insertvalue %S.cimport.Mapped zeroinitializer, { ptr, i64, i64 } %t5, 1 %t7 = insertvalue %S.cimport.Mapped %t6, i1 false, 2 ret %S.cimport.Mapped %t7 } define internal %S.ast.Type @finch.cimport.fixed(%S.ast.Type %p0, i64 %p1) { entry: %a1 = alloca %S.ast.Type, align 16 %a2 = alloca i64, align 16 %a6 = alloca %S.ast.Type, align 16 %a10 = alloca %S.ast.Type, align 16 %a11 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6426, i64 5, i64 0 }, 0 %t4 = load i64, ptr %a2 %t5 = insertvalue %S.ast.Type %t3, i64 %t4, 4 store %S.ast.Type %t5, ptr %a6 %t7 = getelementptr inbounds %S.ast.Type, ptr %a6, i32 0, i32 1 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i32 0, i32 1 %t9 = load %S.ast.Type, ptr %a1 store %S.ast.Type %t9, ptr %a10 call void @finch.copy.S_ast_Type(ptr %a11, ptr %a10) %t12 = load %S.ast.Type, ptr %a11 %t13 = load i64, ptr %t8 %t14 = add i64 %t13, 1 call void @finch_arr_reserve(ptr %t7, i64 %t14, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t15 = load ptr, ptr %t7 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t13 store %S.ast.Type %t12, ptr %t16 store i64 %t14, ptr %t8 %t17 = load %S.ast.Type, ptr %a6 ret %S.ast.Type %t17 } define internal { ptr, i64, i64 } @finch.cimport.systemIncludeArgs({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca i1, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca i64, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a2 %t3 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t3, ptr %a5 store { ptr, i64, i64 } { ptr @.str.6427, i64 15, i64 0 }, ptr %a6 call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) store { ptr, i64, i64 } %t3, ptr %a7 call void @finch_str_drop(ptr %a7) %t8 = load { ptr, i64, i64 }, ptr %a4 %t9 = call i64 @finch.host.pid() call void @finch_str_from_int(ptr %a10, i64 %t9) %t11 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t8, ptr %a13 store { ptr, i64, i64 } %t11, ptr %a14 call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) store { ptr, i64, i64 } %t8, ptr %a15 call void @finch_str_drop(ptr %a15) store { ptr, i64, i64 } %t11, ptr %a16 call void @finch_str_drop(ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t17, ptr %a19 store { ptr, i64, i64 } { ptr @.str.6428, i64 4, i64 0 }, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) store { ptr, i64, i64 } %t17, ptr %a21 call void @finch_str_drop(ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t22, ptr %a23 %t24 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t24, ptr %a26 store { ptr, i64, i64 } { ptr @.str.6429, i64 13, i64 0 }, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) store { ptr, i64, i64 } %t24, ptr %a28 call void @finch_str_drop(ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a25 %t30 = call i64 @finch.host.pid() call void @finch_str_from_int(ptr %a31, i64 %t30) %t32 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t29, ptr %a34 store { ptr, i64, i64 } %t32, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) store { ptr, i64, i64 } %t29, ptr %a36 call void @finch_str_drop(ptr %a36) store { ptr, i64, i64 } %t32, ptr %a37 call void @finch_str_drop(ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t38, ptr %a40 store { ptr, i64, i64 } { ptr @.str.6430, i64 2, i64 0 }, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) store { ptr, i64, i64 } %t38, ptr %a42 call void @finch_str_drop(ptr %a42) %t43 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t43, ptr %a44 %t45 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } %t45, ptr %a46 store { ptr, i64, i64 } { ptr @.str.6431, i64 0, i64 0 }, ptr %a47 %t48 = call i32 @finch_write_file(ptr %a46, ptr %a47) %t49 = icmp ne i32 %t48, 0 %t50 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t50, ptr %a52 store { ptr, i64, i64 } { ptr @.str.6432, i64 12, i64 0 }, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a51 %t55 = load { ptr, i64, i64 }, ptr %a44 %t56 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t55) store { ptr, i64, i64 } %t54, ptr %a58 store { ptr, i64, i64 } %t56, ptr %a59 call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) store { ptr, i64, i64 } %t54, ptr %a60 call void @finch_str_drop(ptr %a60) store { ptr, i64, i64 } %t56, ptr %a61 call void @finch_str_drop(ptr %a61) %t62 = load { ptr, i64, i64 }, ptr %a57 store { ptr, i64, i64 } %t62, ptr %a64 store { ptr, i64, i64 } { ptr @.str.6433, i64 4, i64 0 }, ptr %a65 call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) store { ptr, i64, i64 } %t62, ptr %a66 call void @finch_str_drop(ptr %a66) %t67 = load { ptr, i64, i64 }, ptr %a63 %t68 = load { ptr, i64, i64 }, ptr %a23 %t69 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t68) store { ptr, i64, i64 } %t67, ptr %a71 store { ptr, i64, i64 } %t69, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) store { ptr, i64, i64 } %t67, ptr %a73 call void @finch_str_drop(ptr %a73) store { ptr, i64, i64 } %t69, ptr %a74 call void @finch_str_drop(ptr %a74) %t75 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } %t75, ptr %a77 store { ptr, i64, i64 } { ptr @.str.6434, i64 3, i64 0 }, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) store { ptr, i64, i64 } %t75, ptr %a79 call void @finch_str_drop(ptr %a79) %t80 = load { ptr, i64, i64 }, ptr %a76 %t81 = call { ptr, i64, i64 } @finch.host.nullDevice() store { ptr, i64, i64 } %t80, ptr %a83 store { ptr, i64, i64 } %t81, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) store { ptr, i64, i64 } %t80, ptr %a85 call void @finch_str_drop(ptr %a85) store { ptr, i64, i64 } %t81, ptr %a86 call void @finch_str_drop(ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a82 %t88 = call i64 @finch.host.run({ ptr, i64, i64 } %t87) store { ptr, i64, i64 } %t87, ptr %a89 call void @finch_str_drop(ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a44 call void @finch.host.remove({ ptr, i64, i64 } %t90) %t91 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t91, ptr %a92 %t93 = call i32 @finch_file_exists(ptr %a92) %t94 = icmp ne i32 %t93, 0 %t95 = xor i1 %t94, true br i1 %t95, label %then9250, label %endif9252 then9250: %t96 = load { ptr, i64, i64 }, ptr %a2 call void @finch_str_drop(ptr %a44) call void @finch_str_drop(ptr %a23) ret { ptr, i64, i64 } %t96 endif9252: store i1 false, ptr %a97 %t98 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t98, ptr %a99 call void @finch_read_file(ptr %a100, ptr %a99, ptr @.str.6435, i64 114) %t101 = load { ptr, i64, i64 }, ptr %a100 store { ptr, i64, i64 } %t101, ptr %a102 store { ptr, i64, i64 } { ptr @.str.6437, i64 1, i64 0 }, ptr %a104 call void @finch_str_split(ptr %a105, ptr %a102, ptr %a104) %t106 = load { ptr, i64, i64 }, ptr %a105 store { ptr, i64, i64 } %t101, ptr %a107 call void @finch_str_drop(ptr %a107) store { ptr, i64, i64 } %t106, ptr %a108 store i64 0, ptr %a109 br label %each.cond9253 each.cond9253: %t110 = getelementptr inbounds { ptr, i64, i64 }, ptr %a108, i32 0, i32 1 %t111 = load i64, ptr %t110 %t112 = load i64, ptr %a109 %t113 = icmp slt i64 %t112, %t111 br i1 %t113, label %each.body9254, label %each.end9256 each.body9254: %t114 = load ptr, ptr %a108 %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i64 %t112 %t116 = load { ptr, i64, i64 }, ptr %t115 store { ptr, i64, i64 } %t116, ptr %a117 %t118 = load { ptr, i64, i64 }, ptr %a117 store { ptr, i64, i64 } %t118, ptr %a119 call void @finch_str_trim(ptr %a120, ptr %a119) %t121 = load { ptr, i64, i64 }, ptr %a120 store { ptr, i64, i64 } %t121, ptr %a122 %t123 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t123, ptr %a124 store { ptr, i64, i64 } { ptr @.str.6440, i64 34, i64 0 }, ptr %a126 %t127 = call i32 @finch_str_starts(ptr %a124, ptr %a126) %t128 = icmp ne i32 %t127, 0 br i1 %t128, label %then9257, label %endif9259 then9257: store i1 true, ptr %a97 call void @finch_str_drop(ptr %a122) br label %each.step9255 endif9259: %t129 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t129, ptr %a130 store { ptr, i64, i64 } { ptr @.str.6442, i64 19, i64 0 }, ptr %a132 %t133 = call i32 @finch_str_starts(ptr %a130, ptr %a132) %t134 = icmp ne i32 %t133, 0 br i1 %t134, label %then9260, label %endif9262 then9260: call void @finch_str_drop(ptr %a122) br label %each.end9256 endif9262: %t135 = load i1, ptr %a97 %t136 = xor i1 %t135, true br label %logic.from9263 logic.from9263: br i1 %t136, label %logic.end9265, label %logic.rhs9264 logic.rhs9264: %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %a122, i32 0, i32 1 %t138 = load i64, ptr %t137 %t139 = icmp eq i64 %t138, 0 br label %logic.rend9266 logic.rend9266: br label %logic.end9265 logic.end9265: %t140 = phi i1 [ true, %logic.from9263 ], [ %t139, %logic.rend9266 ] br i1 %t140, label %then9267, label %endif9269 then9267: call void @finch_str_drop(ptr %a122) br label %each.step9255 endif9269: %t141 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t141, ptr %a142 store { ptr, i64, i64 } { ptr @.str.6444, i64 22, i64 0 }, ptr %a144 %t145 = call i32 @finch_str_ends(ptr %a142, ptr %a144) %t146 = icmp ne i32 %t145, 0 br i1 %t146, label %then9270, label %else9271 then9270: %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t148 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t148, ptr %a149 %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %a122, i32 0, i32 1 %t152 = load i64, ptr %t151 %t153 = sub i64 %t152, 22 call void @finch_str_sub(ptr %a150, ptr %a149, i64 0, i64 %t153, ptr @.str.6446, i64 128) %t154 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } { ptr @.str.6445, i64 11, i64 0 }, ptr %a156 store { ptr, i64, i64 } %t154, ptr %a157 call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) store { ptr, i64, i64 } %t154, ptr %a158 call void @finch_str_drop(ptr %a158) %t159 = load { ptr, i64, i64 }, ptr %a155 %t160 = load i64, ptr %t147 %t161 = add i64 %t160, 1 call void @finch_arr_reserve(ptr %a2, i64 %t161, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t162 = load ptr, ptr %a2 %t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i64 %t160 store { ptr, i64, i64 } %t159, ptr %t163 store i64 %t161, ptr %t147 br label %endif9272 else9271: %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t165 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } { ptr @.str.6447, i64 8, i64 0 }, ptr %a167 store { ptr, i64, i64 } %t165, ptr %a168 call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) %t169 = load { ptr, i64, i64 }, ptr %a166 %t170 = load i64, ptr %t164 %t171 = add i64 %t170, 1 call void @finch_arr_reserve(ptr %a2, i64 %t171, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t172 = load ptr, ptr %a2 %t173 = getelementptr inbounds { ptr, i64, i64 }, ptr %t172, i64 %t170 store { ptr, i64, i64 } %t169, ptr %t173 store i64 %t171, ptr %t164 br label %endif9272 endif9272: call void @finch_str_drop(ptr %a122) br label %each.step9255 each.step9255: %t174 = load i64, ptr %a109 %t175 = add i64 %t174, 1 store i64 %t175, ptr %a109 br label %each.cond9253 each.end9256: call void @finch.drop.arr_str(ptr %a108) %t176 = load { ptr, i64, i64 }, ptr %a23 call void @finch.host.remove({ ptr, i64, i64 } %t176) %t177 = load { ptr, i64, i64 }, ptr %a2 call void @finch_str_drop(ptr %a44) call void @finch_str_drop(ptr %a23) ret { ptr, i64, i64 } %t177 } define internal { ptr, i64, i64 } @finch.cimport.recordName(ptr %p0, %S.C.CXType %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.C.CXType, align 16 %a3 = alloca %S.C.CXCursor, align 16 %a5 = alloca %S.C.CXType, align 16 %a7 = alloca %S.C.CXCursor, align 16 %a9 = alloca %S.C.CXCursor, align 16 %a11 = alloca [32 x i8], align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca %S.C.CXCursor, align 16 %a42 = alloca [32 x i8], align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca i32, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.C.CXType %p1, ptr %a2 %t4 = load %S.C.CXType, ptr %a2 store %S.C.CXType %t4, ptr %a5 call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a3, ptr %a5) %t6 = load %S.C.CXCursor, ptr %a3 store %S.C.CXCursor %t6, ptr %a7 %t8 = load %S.C.CXCursor, ptr %a7 store %S.C.CXCursor %t8, ptr %a9 %t10 = call [2 x i64] @clang_getCursorUSR(ptr %a9) store [2 x i64] %t10, ptr %a11 %t12 = load %S.C.CXString, ptr %a11 %t13 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t12) store { ptr, i64, i64 } %t13, ptr %a14 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic9273, label %ok9274 panic9273: call void @finch_panic(ptr @.str.6448, i64 143, ptr @.str.6449) unreachable ok9274: %t17 = getelementptr inbounds %S.cimport.Importer, ptr %t15, i32 0, i32 3 %t18 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t18, ptr %a19 %t20 = call i64 @finch_map_find(ptr %t17, ptr %a19, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t21 = icmp sge i64 %t20, 0 br i1 %t21, label %then9275, label %endif9277 then9275: %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null br i1 %t23, label %panic9278, label %ok9279 panic9278: call void @finch_panic(ptr @.str.6450, i64 144, ptr @.str.6451) unreachable ok9279: %t24 = getelementptr inbounds %S.cimport.Importer, ptr %t22, i32 0, i32 3 %t25 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t25, ptr %a26 %t27 = call i64 @finch_map_find(ptr %t24, ptr %a26, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t28 = icmp slt i64 %t27, 0 br i1 %t28, label %map.missing9280, label %map.found9281 map.missing9280: store { ptr, i64, i64 } zeroinitializer, ptr %a29 store { ptr, i64, i64 } %t25, ptr %a30 call void @finch_buf_str(ptr %a29, ptr %a30, i32 1) call void @finch_map_missing(ptr @.str.6452, i64 144, ptr %a29) unreachable map.found9281: %t31 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t24, i32 0, i32 0 %t32 = load ptr, ptr %t31 %t33 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t32, i64 %t27 %t34 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t33, i32 0, i32 2 %t35 = load { ptr, i64, i64 }, ptr %t34 store { ptr, i64, i64 } %t35, ptr %a36 call void @finch_str_copy(ptr %a37, ptr %a36) %t38 = load { ptr, i64, i64 }, ptr %a37 call void @finch_str_drop(ptr %a14) ret { ptr, i64, i64 } %t38 endif9277: %t39 = load %S.C.CXCursor, ptr %a7 store %S.C.CXCursor %t39, ptr %a40 %t41 = call [2 x i64] @clang_getCursorSpelling(ptr %a40) store [2 x i64] %t41, ptr %a42 %t43 = load %S.C.CXString, ptr %a42 %t44 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t43) store { ptr, i64, i64 } %t44, ptr %a45 %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = icmp eq i64 %t47, 0 br label %logic.from9282 logic.from9282: br i1 %t48, label %logic.end9284, label %logic.rhs9283 logic.rhs9283: %t49 = load { ptr, i64, i64 }, ptr %a45 store { ptr, i64, i64 } %t49, ptr %a50 store { ptr, i64, i64 } { ptr @.str.6454, i64 1, i64 0 }, ptr %a52 %t53 = call i64 @finch_str_find(ptr %a50, ptr %a52) %t54 = icmp sge i64 %t53, 0 br label %logic.rend9285 logic.rend9285: br label %logic.end9284 logic.end9284: %t55 = phi i1 [ true, %logic.from9282 ], [ %t54, %logic.rend9285 ] br i1 %t55, label %then9286, label %endif9288 then9286: %t56 = load ptr, ptr %a1 %t57 = icmp eq ptr %t56, null br i1 %t57, label %panic9289, label %ok9290 panic9289: call void @finch_panic(ptr @.str.6455, i64 148, ptr @.str.6456) unreachable ok9290: %t58 = getelementptr inbounds %S.cimport.Importer, ptr %t56, i32 0, i32 5 %t59 = load i64, ptr %t58 %t60 = add i64 %t59, 1 store i64 %t60, ptr %t58 %t61 = load ptr, ptr %a1 %t62 = icmp eq ptr %t61, null br i1 %t62, label %panic9291, label %ok9292 panic9291: call void @finch_panic(ptr @.str.6458, i64 149, ptr @.str.6459) unreachable ok9292: %t63 = getelementptr inbounds %S.cimport.Importer, ptr %t61, i32 0, i32 5 %t64 = load i64, ptr %t63 call void @finch_str_from_int(ptr %a65, i64 %t64) %t66 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } { ptr @.str.6457, i64 12, i64 0 }, ptr %a68 store { ptr, i64, i64 } %t66, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) store { ptr, i64, i64 } %t66, ptr %a70 call void @finch_str_drop(ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a67 %t72 = load { ptr, i64, i64 }, ptr %a45 store { ptr, i64, i64 } %t71, ptr %a45 store { ptr, i64, i64 } %t72, ptr %a73 call void @finch_str_drop(ptr %a73) br label %endif9288 endif9288: %t74 = load { ptr, i64, i64 }, ptr %a45 %t75 = load ptr, ptr %a1 %t76 = icmp eq ptr %t75, null br i1 %t76, label %panic9293, label %ok9294 panic9293: call void @finch_panic(ptr @.str.6460, i64 151, ptr @.str.6461) unreachable ok9294: %t77 = getelementptr inbounds %S.cimport.Importer, ptr %t75, i32 0, i32 3 %t78 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t78, ptr %a79 store i32 0, ptr %a80 %t81 = call i64 @finch_map_slot(ptr %t77, ptr %a79, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a80) %t82 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t77, i32 0, i32 0 %t83 = load ptr, ptr %t82 %t84 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i64 %t81 %t85 = load i32, ptr %a80 %t86 = icmp ne i32 %t85, 0 br i1 %t86, label %map.new9295, label %map.have9296 map.new9295: %t87 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t84, i32 0, i32 1 call void @finch_str_copy(ptr %t87, ptr %a79) %t88 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t84, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t88 br label %map.have9296 map.have9296: %t89 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t84, i32 0, i32 2 store { ptr, i64, i64 } %t74, ptr %a90 call void @finch_str_copy(ptr %a91, ptr %a90) %t92 = load { ptr, i64, i64 }, ptr %a91 %t93 = load { ptr, i64, i64 }, ptr %t89 store { ptr, i64, i64 } %t92, ptr %t89 store { ptr, i64, i64 } %t93, ptr %a94 call void @finch_str_drop(ptr %a94) %t95 = load { ptr, i64, i64 }, ptr %a45 call void @finch_str_drop(ptr %a14) ret { ptr, i64, i64 } %t95 } define internal i32 @finch.c.cimport.visitField(ptr %c0, ptr %c1) { entry: %t1 = load %S.C.CXCursor, ptr %c0 %t2 = call i32 @finch.cimport.visitField(%S.C.CXCursor %t1, ptr %c1) ret i32 %t2 } define internal { ptr, i64, i64 } @finch.cimport.defineRecord(ptr %p0, %S.C.CXType %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.C.CXType, align 16 %a3 = alloca %S.C.CXType, align 16 %a5 = alloca %S.C.CXType, align 16 %a7 = alloca %S.C.CXType, align 16 %a8 = alloca %S.C.CXCursor, align 16 %a10 = alloca %S.C.CXType, align 16 %a12 = alloca %S.C.CXCursor, align 16 %a14 = alloca %S.C.CXCursor, align 16 %a16 = alloca [32 x i8], align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca %S.C.CXType, align 16 %a44 = alloca i64, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca i32, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca %S.C.CXType, align 16 %a73 = alloca %S.cimport.CStruct, align 16 %a75 = alloca %S.C.CXCursor, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca %S.cimport.FieldCtx, align 16 %a86 = alloca %S.C.CXType, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca i32, align 16 %a117 = alloca %S.cimport.CStruct, align 16 %a118 = alloca %S.cimport.CStruct, align 16 %a121 = alloca %S.cimport.CStruct, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.C.CXType %p1, ptr %a2 %t4 = load %S.C.CXType, ptr %a2 store %S.C.CXType %t4, ptr %a5 call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a3, ptr %a5) %t6 = load %S.C.CXType, ptr %a3 store %S.C.CXType %t6, ptr %a7 %t9 = load %S.C.CXType, ptr %a7 store %S.C.CXType %t9, ptr %a10 call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a8, ptr %a10) %t11 = load %S.C.CXCursor, ptr %a8 store %S.C.CXCursor %t11, ptr %a12 %t13 = load %S.C.CXCursor, ptr %a12 store %S.C.CXCursor %t13, ptr %a14 %t15 = call [2 x i64] @clang_getCursorUSR(ptr %a14) store [2 x i64] %t15, ptr %a16 %t17 = load %S.C.CXString, ptr %a16 %t18 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t17) store { ptr, i64, i64 } %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = load %S.C.CXType, ptr %a7 %t22 = call { ptr, i64, i64 } @finch.cimport.recordName(ptr %t20, %S.C.CXType %t21) store { ptr, i64, i64 } %t22, ptr %a23 %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null br i1 %t25, label %panic9297, label %ok9298 panic9297: call void @finch_panic(ptr @.str.6462, i64 161, ptr @.str.6463) unreachable ok9298: %t26 = getelementptr inbounds %S.cimport.Importer, ptr %t24, i32 0, i32 0 %t27 = getelementptr inbounds %S.cimport.CImports, ptr %t26, i32 0, i32 3 %t28 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t28, ptr %a29 %t30 = call i64 @finch_map_find(ptr %t27, ptr %a29, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t31 = icmp sge i64 %t30, 0 br label %logic.from9299 logic.from9299: br i1 %t31, label %logic.end9301, label %logic.rhs9300 logic.rhs9300: %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null br i1 %t33, label %panic9302, label %ok9303 panic9302: call void @finch_panic(ptr @.str.6464, i64 161, ptr @.str.6465) unreachable ok9303: %t34 = getelementptr inbounds %S.cimport.Importer, ptr %t32, i32 0, i32 4 %t35 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t35, ptr %a36 %t37 = call i64 @finch_map_find(ptr %t34, ptr %a36, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t38 = icmp sge i64 %t37, 0 br label %logic.rend9304 logic.rend9304: br label %logic.end9301 logic.end9301: %t39 = phi i1 [ true, %logic.from9299 ], [ %t38, %logic.rend9304 ] br i1 %t39, label %then9305, label %endif9307 then9305: %t40 = load { ptr, i64, i64 }, ptr %a23 call void @finch_str_drop(ptr %a19) ret { ptr, i64, i64 } %t40 endif9307: %t41 = load %S.C.CXType, ptr %a7 store %S.C.CXType %t41, ptr %a42 %t43 = call i64 @clang_Type_getSizeOf(ptr %a42) store i64 %t43, ptr %a44 %t45 = load i64, ptr %a44 %t46 = icmp slt i64 %t45, 0 br i1 %t46, label %then9308, label %endif9310 then9308: call void @finch_str_drop(ptr %a23) call void @finch_str_drop(ptr %a19) ret { ptr, i64, i64 } { ptr @.str.6466, i64 0, i64 0 } endif9310: %t47 = load ptr, ptr %a1 %t48 = icmp eq ptr %t47, null br i1 %t48, label %panic9311, label %ok9312 panic9311: call void @finch_panic(ptr @.str.6467, i64 168, ptr @.str.6468) unreachable ok9312: %t49 = getelementptr inbounds %S.cimport.Importer, ptr %t47, i32 0, i32 4 %t50 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t50, ptr %a51 store i32 0, ptr %a52 %t53 = call i64 @finch_map_slot(ptr %t49, ptr %a51, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a52) %t54 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t49, i32 0, i32 0 %t55 = load ptr, ptr %t54 %t56 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t55, i64 %t53 %t57 = load i32, ptr %a52 %t58 = icmp ne i32 %t57, 0 br i1 %t58, label %map.new9313, label %map.have9314 map.new9313: %t59 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t56, i32 0, i32 1 call void @finch_str_copy(ptr %t59, ptr %a51) %t60 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t56, i32 0, i32 2 store i1 false, ptr %t60 br label %map.have9314 map.have9314: %t61 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t56, i32 0, i32 2 store i1 true, ptr %t61 %t62 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t62, ptr %a63 call void @finch_str_copy(ptr %a64, ptr %a63) %t65 = load { ptr, i64, i64 }, ptr %a64 %t66 = insertvalue %S.cimport.CStruct zeroinitializer, { ptr, i64, i64 } %t65, 0 %t67 = load i64, ptr %a44 %t68 = insertvalue %S.cimport.CStruct %t66, i64 %t67, 2 %t69 = load %S.C.CXType, ptr %a7 store %S.C.CXType %t69, ptr %a70 %t71 = call i64 @clang_Type_getAlignOf(ptr %a70) %t72 = insertvalue %S.cimport.CStruct %t68, i64 %t71, 3 store %S.cimport.CStruct %t72, ptr %a73 %t74 = load %S.C.CXCursor, ptr %a12 store %S.C.CXCursor %t74, ptr %a75 %t76 = call i32 @clang_getCursorKind(ptr %a75) %t77 = icmp eq i32 %t76, 3 br i1 %t77, label %then9315, label %endif9317 then9315: %t78 = getelementptr inbounds %S.cimport.CStruct, ptr %a73, i32 0, i32 4 %t79 = load { ptr, i64, i64 }, ptr %t78 store { ptr, i64, i64 } { ptr @.str.6469, i64 12, i64 0 }, ptr %t78 store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_drop(ptr %a80) br label %endif9317 endif9317: %t81 = load ptr, ptr %a1 %t82 = insertvalue %S.cimport.FieldCtx zeroinitializer, ptr %t81, 0 %t83 = insertvalue %S.cimport.FieldCtx %t82, ptr %a73, 1 store %S.cimport.FieldCtx %t83, ptr %a84 %t85 = load %S.C.CXType, ptr %a7 store %S.C.CXType %t85, ptr %a86 %t87 = call i32 @clang_Type_visitFields(ptr %a86, ptr @finch.c.cimport.visitField, ptr %a84) %t88 = load ptr, ptr %a1 %t89 = icmp eq ptr %t88, null br i1 %t89, label %panic9318, label %ok9319 panic9318: call void @finch_panic(ptr @.str.6470, i64 176, ptr @.str.6471) unreachable ok9319: %t90 = getelementptr inbounds %S.cimport.Importer, ptr %t88, i32 0, i32 4 %t91 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t91, ptr %a92 %t93 = call i64 @finch_map_find(ptr %t90, ptr %a92, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t94 = icmp sge i64 %t93, 0 br i1 %t94, label %remove.hit9320, label %remove.end9321 remove.hit9320: %t95 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t90, i32 0, i32 0 %t96 = load ptr, ptr %t95 %t97 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t96, i64 %t93 %t98 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t97, i32 0, i32 1 call void @finch_str_drop(ptr %t98) %t99 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t97, i32 0, i32 2 call void @finch_map_remove_at(ptr %t90, i64 %t93, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64)) br label %remove.end9321 remove.end9321: %t100 = load %S.cimport.CStruct, ptr %a73 %t101 = load ptr, ptr %a1 %t102 = icmp eq ptr %t101, null br i1 %t102, label %panic9322, label %ok9323 panic9322: call void @finch_panic(ptr @.str.6472, i64 177, ptr @.str.6473) unreachable ok9323: %t103 = getelementptr inbounds %S.cimport.Importer, ptr %t101, i32 0, i32 0 %t104 = getelementptr inbounds %S.cimport.CImports, ptr %t103, i32 0, i32 3 %t105 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t105, ptr %a106 store i32 0, ptr %a107 %t108 = call i64 @finch_map_slot(ptr %t104, ptr %a106, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a107) %t109 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t104, i32 0, i32 0 %t110 = load ptr, ptr %t109 %t111 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t110, i64 %t108 %t112 = load i32, ptr %a107 %t113 = icmp ne i32 %t112, 0 br i1 %t113, label %map.new9324, label %map.have9325 map.new9324: %t114 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t111, i32 0, i32 1 call void @finch_str_copy(ptr %t114, ptr %a106) %t115 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t111, i32 0, i32 2 store %S.cimport.CStruct zeroinitializer, ptr %t115 br label %map.have9325 map.have9325: %t116 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t111, i32 0, i32 2 store %S.cimport.CStruct %t100, ptr %a117 call void @finch.copy.S_cimport_CStruct(ptr %a118, ptr %a117) %t119 = load %S.cimport.CStruct, ptr %a118 %t120 = load %S.cimport.CStruct, ptr %t116 store %S.cimport.CStruct %t119, ptr %t116 store %S.cimport.CStruct %t120, ptr %a121 call void @finch.drop.S_cimport_CStruct(ptr %a121) %t122 = load ptr, ptr %a1 %t123 = icmp eq ptr %t122, null br i1 %t123, label %panic9326, label %ok9327 panic9326: call void @finch_panic(ptr @.str.6474, i64 178, ptr @.str.6475) unreachable ok9327: %t124 = getelementptr inbounds %S.cimport.Importer, ptr %t122, i32 0, i32 0 %t125 = getelementptr inbounds %S.cimport.CImports, ptr %t124, i32 0, i32 4 %t126 = getelementptr inbounds { ptr, i64, i64 }, ptr %t125, i32 0, i32 1 %t127 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t127, ptr %a128 call void @finch_str_copy(ptr %a129, ptr %a128) %t130 = load { ptr, i64, i64 }, ptr %a129 %t131 = load i64, ptr %t126 %t132 = add i64 %t131, 1 call void @finch_arr_reserve(ptr %t125, i64 %t132, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t133 = load ptr, ptr %t125 %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i64 %t131 store { ptr, i64, i64 } %t130, ptr %t134 store i64 %t132, ptr %t126 %t135 = load { ptr, i64, i64 }, ptr %a23 call void @finch.drop.S_cimport_CStruct(ptr %a73) call void @finch_str_drop(ptr %a19) ret { ptr, i64, i64 } %t135 } define internal void @finch.drop.S_cimport_Mapped(ptr %a) { entry: %t1 = getelementptr inbounds %S.cimport.Mapped, ptr %a, i32 0, i32 0 call void @finch.drop.S_ast_Type(ptr %t1) %t2 = getelementptr inbounds %S.cimport.Mapped, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) ret void } define internal i32 @finch.cimport.visitField(%S.C.CXCursor %p0, ptr %p1) { entry: %a1 = alloca %S.C.CXCursor, align 16 %a2 = alloca ptr, align 16 %a4 = alloca ptr, align 16 %a6 = alloca %S.C.CXCursor, align 16 %a8 = alloca [32 x i8], align 16 %a12 = alloca %S.cimport.CField, align 16 %a13 = alloca %S.C.CXType, align 16 %a14 = alloca %S.C.CXType, align 16 %a16 = alloca %S.C.CXCursor, align 16 %a18 = alloca %S.C.CXType, align 16 %a20 = alloca %S.C.CXType, align 16 %a22 = alloca %S.C.CXCursor, align 16 %a27 = alloca %S.C.CXType, align 16 %a31 = alloca %S.C.CXType, align 16 %a35 = alloca %S.C.CXCursor, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca %S.C.CXCursor, align 16 %a52 = alloca %S.C.CXType, align 16 %a54 = alloca %S.C.CXCursor, align 16 %a65 = alloca %S.cimport.Mapped, align 16 %a71 = alloca %S.ast.Type, align 16 %a72 = alloca %S.ast.Type, align 16 %a75 = alloca %S.ast.Type, align 16 %a98 = alloca %S.cimport.CField, align 16 %a99 = alloca %S.cimport.CField, align 16 store %S.C.CXCursor %p0, ptr %a1 store ptr %p1, ptr %a2 %t3 = load ptr, ptr %a2 store ptr %t3, ptr %a4 %t5 = load %S.C.CXCursor, ptr %a1 store %S.C.CXCursor %t5, ptr %a6 %t7 = call [2 x i64] @clang_getCursorSpelling(ptr %a6) store [2 x i64] %t7, ptr %a8 %t9 = load %S.C.CXString, ptr %a8 %t10 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t9) %t11 = insertvalue %S.cimport.CField zeroinitializer, { ptr, i64, i64 } %t10, 0 store %S.cimport.CField %t11, ptr %a12 %t15 = load %S.C.CXCursor, ptr %a1 store %S.C.CXCursor %t15, ptr %a16 call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a14, ptr %a16) %t17 = load %S.C.CXType, ptr %a14 store %S.C.CXType %t17, ptr %a18 call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a13, ptr %a18) %t19 = load %S.C.CXType, ptr %a13 store %S.C.CXType %t19, ptr %a20 %t21 = load %S.C.CXCursor, ptr %a1 store %S.C.CXCursor %t21, ptr %a22 %t23 = call i64 @clang_Cursor_getOffsetOfField(ptr %a22) %t24 = sdiv i64 %t23, 8 %t25 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 2 store i64 %t24, ptr %t25 %t26 = load %S.C.CXType, ptr %a20 store %S.C.CXType %t26, ptr %a27 %t28 = call i64 @clang_Type_getSizeOf(ptr %a27) %t29 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 3 store i64 %t28, ptr %t29 %t30 = load %S.C.CXType, ptr %a20 store %S.C.CXType %t30, ptr %a31 %t32 = call i64 @clang_Type_getAlignOf(ptr %a31) %t33 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 4 store i64 %t32, ptr %t33 %t34 = load %S.C.CXCursor, ptr %a1 store %S.C.CXCursor %t34, ptr %a35 %t36 = call i32 @clang_Cursor_isBitField(ptr %a35) %t37 = icmp ne i32 %t36, 0 br i1 %t37, label %then9328, label %else9329 then9328: %t38 = load ptr, ptr %a4 %t39 = icmp eq ptr %t38, null br i1 %t39, label %panic9331, label %ok9332 panic9331: call void @finch_panic(ptr @.str.6477, i64 195, ptr @.str.6478) unreachable ok9332: %t40 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t38, i32 0, i32 1 %t41 = load ptr, ptr %t40 %t42 = icmp eq ptr %t41, null br i1 %t42, label %panic9333, label %ok9334 panic9333: call void @finch_panic(ptr @.str.6479, i64 195, ptr @.str.6480) unreachable ok9334: %t43 = getelementptr inbounds %S.cimport.CStruct, ptr %t41, i32 0, i32 4 %t44 = load { ptr, i64, i64 }, ptr %t43 store { ptr, i64, i64 } { ptr @.str.6476, i64 14, i64 0 }, ptr %t43 store { ptr, i64, i64 } %t44, ptr %a45 call void @finch_str_drop(ptr %a45) %t46 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 store i1 true, ptr %t46 br label %endif9330 else9329: %t47 = getelementptr inbounds %S.C.CXType, ptr %a20, i32 0, i32 0 %t48 = load i32, ptr %t47 %t49 = icmp eq i32 %t48, 105 br label %logic.from9335 logic.from9335: br i1 %t49, label %logic.rhs9336, label %logic.end9337 logic.rhs9336: %t51 = load %S.C.CXType, ptr %a20 store %S.C.CXType %t51, ptr %a52 call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a50, ptr %a52) %t53 = load %S.C.CXCursor, ptr %a50 store %S.C.CXCursor %t53, ptr %a54 %t55 = call i32 @clang_getCursorKind(ptr %a54) %t56 = icmp eq i32 %t55, 3 br label %logic.rend9338 logic.rend9338: br label %logic.end9337 logic.end9337: %t57 = phi i1 [ false, %logic.from9335 ], [ %t56, %logic.rend9338 ] br i1 %t57, label %then9339, label %else9340 then9339: %t58 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 store i1 true, ptr %t58 br label %endif9341 else9340: %t59 = load ptr, ptr %a4 %t60 = icmp eq ptr %t59, null br i1 %t60, label %panic9342, label %ok9343 panic9342: call void @finch_panic(ptr @.str.6481, i64 200, ptr @.str.6482) unreachable ok9343: %t61 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t59, i32 0, i32 0 %t62 = load ptr, ptr %t61 %t63 = load %S.C.CXType, ptr %a20 %t64 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t62, %S.C.CXType %t63, i1 false, i1 false) store %S.cimport.Mapped %t64, ptr %a65 %t66 = getelementptr inbounds %S.cimport.Mapped, ptr %a65, i32 0, i32 2 %t67 = load i1, ptr %t66 br i1 %t67, label %then9344, label %else9345 then9344: %t68 = getelementptr inbounds %S.cimport.Mapped, ptr %a65, i32 0, i32 0 %t69 = load %S.ast.Type, ptr %t68 %t70 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 1 store %S.ast.Type %t69, ptr %a71 call void @finch.copy.S_ast_Type(ptr %a72, ptr %a71) %t73 = load %S.ast.Type, ptr %a72 %t74 = load %S.ast.Type, ptr %t70 store %S.ast.Type %t73, ptr %t70 store %S.ast.Type %t74, ptr %a75 call void @finch.drop.S_ast_Type(ptr %a75) br label %endif9346 else9345: %t76 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 store i1 true, ptr %t76 br label %endif9346 endif9346: call void @finch.drop.S_cimport_Mapped(ptr %a65) br label %endif9341 endif9341: br label %endif9330 endif9330: %t77 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 %t78 = load i1, ptr %t77 br i1 %t78, label %then9347, label %endif9349 then9347: %t79 = load ptr, ptr %a4 %t80 = icmp eq ptr %t79, null br i1 %t80, label %panic9350, label %ok9351 panic9350: call void @finch_panic(ptr @.str.6483, i64 208, ptr @.str.6484) unreachable ok9351: %t81 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t79, i32 0, i32 1 %t82 = load ptr, ptr %t81 %t83 = icmp eq ptr %t82, null br i1 %t83, label %panic9352, label %ok9353 panic9352: call void @finch_panic(ptr @.str.6485, i64 208, ptr @.str.6486) unreachable ok9353: %t84 = getelementptr inbounds %S.cimport.CStruct, ptr %t82, i32 0, i32 5 store i1 true, ptr %t84 br label %endif9349 endif9349: %t85 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 0 %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1 %t87 = load i64, ptr %t86 %t88 = icmp eq i64 %t87, 0 br i1 %t88, label %then9354, label %endif9356 then9354: %t89 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 store i1 true, ptr %t89 br label %endif9356 endif9356: %t90 = load ptr, ptr %a4 %t91 = icmp eq ptr %t90, null br i1 %t91, label %panic9357, label %ok9358 panic9357: call void @finch_panic(ptr @.str.6487, i64 213, ptr @.str.6488) unreachable ok9358: %t92 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t90, i32 0, i32 1 %t93 = load ptr, ptr %t92 %t94 = icmp eq ptr %t93, null br i1 %t94, label %panic9359, label %ok9360 panic9359: call void @finch_panic(ptr @.str.6489, i64 213, ptr @.str.6490) unreachable ok9360: %t95 = getelementptr inbounds %S.cimport.CStruct, ptr %t93, i32 0, i32 1 %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i32 0, i32 1 %t97 = load %S.cimport.CField, ptr %a12 store %S.cimport.CField %t97, ptr %a98 call void @finch.copy.S_cimport_CField(ptr %a99, ptr %a98) %t100 = load %S.cimport.CField, ptr %a99 %t101 = load i64, ptr %t96 %t102 = add i64 %t101, 1 call void @finch_arr_reserve(ptr %t95, i64 %t102, i64 ptrtoint (ptr getelementptr (%S.cimport.CField, ptr null, i32 1) to i64)) %t103 = load ptr, ptr %t95 %t104 = getelementptr inbounds %S.cimport.CField, ptr %t103, i64 %t101 store %S.cimport.CField %t100, ptr %t104 store i64 %t102, ptr %t96 call void @finch.drop.S_cimport_CField(ptr %a12) ret i32 1 } define internal %S.cimport.Mapped @finch.cimport.sized(i64 %p0, i1 %p1) { entry: %a1 = alloca i64, align 16 %a2 = alloca i1, align 16 %a8 = alloca %S.ast.Type, align 16 %a11 = alloca %S.ast.Type, align 16 %a17 = alloca %S.ast.Type, align 16 %a20 = alloca %S.ast.Type, align 16 %a26 = alloca %S.ast.Type, align 16 %a29 = alloca %S.ast.Type, align 16 %a35 = alloca %S.ast.Type, align 16 %a38 = alloca %S.ast.Type, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 store i64 %p0, ptr %a1 store i1 %p1, ptr %a2 %t3 = load i64, ptr %a1 %t4 = icmp eq i64 %t3, 1 br i1 %t4, label %then9361, label %endif9363 then9361: %t5 = load i1, ptr %a2 br i1 %t5, label %then9364, label %endif9366 then9364: %t6 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6491, i64 2, i64 0 }) %t7 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t6) store %S.ast.Type %t6, ptr %a8 call void @finch.drop.S_ast_Type(ptr %a8) ret %S.cimport.Mapped %t7 endif9366: %t9 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6492, i64 2, i64 0 }) %t10 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t9) store %S.ast.Type %t9, ptr %a11 call void @finch.drop.S_ast_Type(ptr %a11) ret %S.cimport.Mapped %t10 endif9363: %t12 = load i64, ptr %a1 %t13 = icmp eq i64 %t12, 2 br i1 %t13, label %then9367, label %endif9369 then9367: %t14 = load i1, ptr %a2 br i1 %t14, label %then9370, label %endif9372 then9370: %t15 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6493, i64 3, i64 0 }) %t16 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t15) store %S.ast.Type %t15, ptr %a17 call void @finch.drop.S_ast_Type(ptr %a17) ret %S.cimport.Mapped %t16 endif9372: %t18 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6494, i64 3, i64 0 }) %t19 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t18) store %S.ast.Type %t18, ptr %a20 call void @finch.drop.S_ast_Type(ptr %a20) ret %S.cimport.Mapped %t19 endif9369: %t21 = load i64, ptr %a1 %t22 = icmp eq i64 %t21, 4 br i1 %t22, label %then9373, label %endif9375 then9373: %t23 = load i1, ptr %a2 br i1 %t23, label %then9376, label %endif9378 then9376: %t24 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6495, i64 3, i64 0 }) %t25 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t24) store %S.ast.Type %t24, ptr %a26 call void @finch.drop.S_ast_Type(ptr %a26) ret %S.cimport.Mapped %t25 endif9378: %t27 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6496, i64 3, i64 0 }) %t28 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t27) store %S.ast.Type %t27, ptr %a29 call void @finch.drop.S_ast_Type(ptr %a29) ret %S.cimport.Mapped %t28 endif9375: %t30 = load i64, ptr %a1 %t31 = icmp eq i64 %t30, 8 br i1 %t31, label %then9379, label %endif9381 then9379: %t32 = load i1, ptr %a2 br i1 %t32, label %then9382, label %endif9384 then9382: %t33 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6497, i64 3, i64 0 }) %t34 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t33) store %S.ast.Type %t33, ptr %a35 call void @finch.drop.S_ast_Type(ptr %a35) ret %S.cimport.Mapped %t34 endif9384: %t36 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6498, i64 3, i64 0 }) %t37 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t36) store %S.ast.Type %t36, ptr %a38 call void @finch.drop.S_ast_Type(ptr %a38) ret %S.cimport.Mapped %t37 endif9381: %t39 = load i64, ptr %a1 %t40 = mul i64 %t39, 8 call void @finch_str_from_int(ptr %a41, i64 %t40) %t42 = load { ptr, i64, i64 }, ptr %a41 store { ptr, i64, i64 } { ptr @.str.6499, i64 7, i64 0 }, ptr %a44 store { ptr, i64, i64 } %t42, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) store { ptr, i64, i64 } %t42, ptr %a46 call void @finch_str_drop(ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a43 store { ptr, i64, i64 } %t47, ptr %a49 store { ptr, i64, i64 } { ptr @.str.6500, i64 11, i64 0 }, ptr %a50 call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) store { ptr, i64, i64 } %t47, ptr %a51 call void @finch_str_drop(ptr %a51) %t52 = load { ptr, i64, i64 }, ptr %a48 %t53 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } %t52) store { ptr, i64, i64 } %t52, ptr %a54 call void @finch_str_drop(ptr %a54) ret %S.cimport.Mapped %t53 } define internal %S.cimport.Mapped @finch.cimport.mapType(ptr %p0, %S.C.CXType %p1, i1 %p2, i1 %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.C.CXType, align 16 %a3 = alloca i1, align 16 %a4 = alloca i1, align 16 %a5 = alloca %S.C.CXType, align 16 %a7 = alloca %S.C.CXType, align 16 %a9 = alloca %S.C.CXType, align 16 %a11 = alloca %S.C.CXType, align 16 %a13 = alloca i64, align 16 %a16 = alloca i32, align 16 %a21 = alloca %S.ast.Type, align 16 %a26 = alloca %S.ast.Type, align 16 %a34 = alloca %S.ast.Type, align 16 %a75 = alloca %S.ast.Type, align 16 %a80 = alloca %S.ast.Type, align 16 %a83 = alloca %S.C.CXType, align 16 %a84 = alloca %S.C.CXType, align 16 %a86 = alloca %S.C.CXType, align 16 %a88 = alloca %S.C.CXType, align 16 %a90 = alloca %S.C.CXType, align 16 %a103 = alloca %S.C.CXType, align 16 %a109 = alloca %S.ast.Type, align 16 %a123 = alloca %S.ast.Type, align 16 %a127 = alloca %S.cimport.Mapped, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca %S.ast.Type, align 16 %a154 = alloca %S.ast.Type, align 16 %a157 = alloca %S.C.CXCursor, align 16 %a159 = alloca %S.C.CXType, align 16 %a161 = alloca %S.C.CXCursor, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca %S.ast.Type, align 16 %a185 = alloca %S.C.CXType, align 16 %a187 = alloca %S.C.CXType, align 16 %a190 = alloca %S.cimport.Mapped, align 16 %a198 = alloca %S.C.CXType, align 16 %a202 = alloca %S.ast.Type, align 16 %a207 = alloca %S.C.CXType, align 16 %a209 = alloca [32 x i8], align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.C.CXType %p1, ptr %a2 store i1 %p2, ptr %a3 store i1 %p3, ptr %a4 %t6 = load %S.C.CXType, ptr %a2 store %S.C.CXType %t6, ptr %a7 call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a5, ptr %a7) %t8 = load %S.C.CXType, ptr %a5 store %S.C.CXType %t8, ptr %a9 %t10 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t10, ptr %a11 %t12 = call i64 @clang_Type_getSizeOf(ptr %a11) store i64 %t12, ptr %a13 %t14 = getelementptr inbounds %S.C.CXType, ptr %a9, i32 0, i32 0 %t15 = load i32, ptr %t14 store i32 %t15, ptr %a16 %t17 = load i32, ptr %a16 %t18 = icmp eq i32 %t17, 2 br i1 %t18, label %then9385, label %endif9387 then9385: %t19 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6501, i64 4, i64 0 }) %t20 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t19) store %S.ast.Type %t19, ptr %a21 call void @finch.drop.S_ast_Type(ptr %a21) ret %S.cimport.Mapped %t20 endif9387: %t22 = load i32, ptr %a16 %t23 = icmp eq i32 %t22, 3 br i1 %t23, label %then9388, label %endif9390 then9388: %t24 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6502, i64 4, i64 0 }) %t25 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t24) store %S.ast.Type %t24, ptr %a26 call void @finch.drop.S_ast_Type(ptr %a26) ret %S.cimport.Mapped %t25 endif9390: %t27 = load i32, ptr %a16 %t28 = icmp eq i32 %t27, 13 br label %logic.from9391 logic.from9391: br i1 %t28, label %logic.end9393, label %logic.rhs9392 logic.rhs9392: %t29 = load i32, ptr %a16 %t30 = icmp eq i32 %t29, 4 br label %logic.rend9394 logic.rend9394: br label %logic.end9393 logic.end9393: %t31 = phi i1 [ true, %logic.from9391 ], [ %t30, %logic.rend9394 ] br i1 %t31, label %then9395, label %endif9397 then9395: %t32 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6503, i64 4, i64 0 }) %t33 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t32) store %S.ast.Type %t32, ptr %a34 call void @finch.drop.S_ast_Type(ptr %a34) ret %S.cimport.Mapped %t33 endif9397: %t35 = load i32, ptr %a16 %t36 = icmp eq i32 %t35, 14 br label %logic.from9398 logic.from9398: br i1 %t36, label %logic.end9400, label %logic.rhs9399 logic.rhs9399: %t37 = load i32, ptr %a16 %t38 = icmp eq i32 %t37, 16 br label %logic.rend9401 logic.rend9401: br label %logic.end9400 logic.end9400: %t39 = phi i1 [ true, %logic.from9398 ], [ %t38, %logic.rend9401 ] br label %logic.from9402 logic.from9402: br i1 %t39, label %logic.end9404, label %logic.rhs9403 logic.rhs9403: %t40 = load i32, ptr %a16 %t41 = icmp eq i32 %t40, 17 br label %logic.rend9405 logic.rend9405: br label %logic.end9404 logic.end9404: %t42 = phi i1 [ true, %logic.from9402 ], [ %t41, %logic.rend9405 ] br label %logic.from9406 logic.from9406: br i1 %t42, label %logic.end9408, label %logic.rhs9407 logic.rhs9407: %t43 = load i32, ptr %a16 %t44 = icmp eq i32 %t43, 18 br label %logic.rend9409 logic.rend9409: br label %logic.end9408 logic.end9408: %t45 = phi i1 [ true, %logic.from9406 ], [ %t44, %logic.rend9409 ] br label %logic.from9410 logic.from9410: br i1 %t45, label %logic.end9412, label %logic.rhs9411 logic.rhs9411: %t46 = load i32, ptr %a16 %t47 = icmp eq i32 %t46, 19 br label %logic.rend9413 logic.rend9413: br label %logic.end9412 logic.end9412: %t48 = phi i1 [ true, %logic.from9410 ], [ %t47, %logic.rend9413 ] br i1 %t48, label %then9414, label %endif9416 then9414: %t49 = load i64, ptr %a13 %t50 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t49, i1 true) ret %S.cimport.Mapped %t50 endif9416: %t51 = load i32, ptr %a16 %t52 = icmp eq i32 %t51, 5 br label %logic.from9417 logic.from9417: br i1 %t52, label %logic.end9419, label %logic.rhs9418 logic.rhs9418: %t53 = load i32, ptr %a16 %t54 = icmp eq i32 %t53, 8 br label %logic.rend9420 logic.rend9420: br label %logic.end9419 logic.end9419: %t55 = phi i1 [ true, %logic.from9417 ], [ %t54, %logic.rend9420 ] br label %logic.from9421 logic.from9421: br i1 %t55, label %logic.end9423, label %logic.rhs9422 logic.rhs9422: %t56 = load i32, ptr %a16 %t57 = icmp eq i32 %t56, 9 br label %logic.rend9424 logic.rend9424: br label %logic.end9423 logic.end9423: %t58 = phi i1 [ true, %logic.from9421 ], [ %t57, %logic.rend9424 ] br label %logic.from9425 logic.from9425: br i1 %t58, label %logic.end9427, label %logic.rhs9426 logic.rhs9426: %t59 = load i32, ptr %a16 %t60 = icmp eq i32 %t59, 10 br label %logic.rend9428 logic.rend9428: br label %logic.end9427 logic.end9427: %t61 = phi i1 [ true, %logic.from9425 ], [ %t60, %logic.rend9428 ] br label %logic.from9429 logic.from9429: br i1 %t61, label %logic.end9431, label %logic.rhs9430 logic.rhs9430: %t62 = load i32, ptr %a16 %t63 = icmp eq i32 %t62, 11 br label %logic.rend9432 logic.rend9432: br label %logic.end9431 logic.end9431: %t64 = phi i1 [ true, %logic.from9429 ], [ %t63, %logic.rend9432 ] br i1 %t64, label %then9433, label %endif9435 then9433: %t65 = load i64, ptr %a13 %t66 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t65, i1 false) ret %S.cimport.Mapped %t66 endif9435: %t67 = load i32, ptr %a16 %t68 = icmp eq i32 %t67, 106 br i1 %t68, label %then9436, label %endif9438 then9436: %t69 = load i64, ptr %a13 %t70 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t69, i1 true) ret %S.cimport.Mapped %t70 endif9438: %t71 = load i32, ptr %a16 %t72 = icmp eq i32 %t71, 21 br i1 %t72, label %then9439, label %endif9441 then9439: %t73 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6504, i64 3, i64 0 }) %t74 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t73) store %S.ast.Type %t73, ptr %a75 call void @finch.drop.S_ast_Type(ptr %a75) ret %S.cimport.Mapped %t74 endif9441: %t76 = load i32, ptr %a16 %t77 = icmp eq i32 %t76, 22 br i1 %t77, label %then9442, label %endif9444 then9442: %t78 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6505, i64 5, i64 0 }) %t79 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t78) store %S.ast.Type %t78, ptr %a80 call void @finch.drop.S_ast_Type(ptr %a80) ret %S.cimport.Mapped %t79 endif9444: %t81 = load i32, ptr %a16 %t82 = icmp eq i32 %t81, 101 br i1 %t82, label %then9445, label %endif9447 then9445: %t85 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t85, ptr %a86 call void @clang_getPointeeType(ptr sret(%S.C.CXType) align 16 %a84, ptr %a86) %t87 = load %S.C.CXType, ptr %a84 store %S.C.CXType %t87, ptr %a88 call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a83, ptr %a88) %t89 = load %S.C.CXType, ptr %a83 store %S.C.CXType %t89, ptr %a90 %t91 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 %t92 = load i32, ptr %t91 %t93 = icmp eq i32 %t92, 13 br label %logic.from9448 logic.from9448: br i1 %t93, label %logic.end9450, label %logic.rhs9449 logic.rhs9449: %t94 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 %t95 = load i32, ptr %t94 %t96 = icmp eq i32 %t95, 4 br label %logic.rend9451 logic.rend9451: br label %logic.end9450 logic.end9450: %t97 = phi i1 [ true, %logic.from9448 ], [ %t96, %logic.rend9451 ] br label %logic.from9452 logic.from9452: br i1 %t97, label %logic.rhs9453, label %logic.end9454 logic.rhs9453: %t98 = load i1, ptr %a3 br label %logic.rend9455 logic.rend9455: br label %logic.end9454 logic.end9454: %t99 = phi i1 [ false, %logic.from9452 ], [ %t98, %logic.rend9455 ] br i1 %t99, label %then9456, label %endif9458 then9456: %t100 = load i1, ptr %a4 %t101 = xor i1 %t100, true br label %logic.from9459 logic.from9459: br i1 %t101, label %logic.end9461, label %logic.rhs9460 logic.rhs9460: %t102 = load %S.C.CXType, ptr %a90 store %S.C.CXType %t102, ptr %a103 %t104 = call i32 @clang_isConstQualifiedType(ptr %a103) %t105 = icmp ne i32 %t104, 0 br label %logic.rend9462 logic.rend9462: br label %logic.end9461 logic.end9461: %t106 = phi i1 [ true, %logic.from9459 ], [ %t105, %logic.rend9462 ] br i1 %t106, label %then9463, label %endif9465 then9463: %t107 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6506, i64 3, i64 0 }) %t108 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t107) store %S.ast.Type %t107, ptr %a109 call void @finch.drop.S_ast_Type(ptr %a109) ret %S.cimport.Mapped %t108 endif9465: br label %endif9458 endif9458: %t110 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 %t111 = load i32, ptr %t110 %t112 = icmp eq i32 %t111, 2 br label %logic.from9466 logic.from9466: br i1 %t112, label %logic.end9468, label %logic.rhs9467 logic.rhs9467: %t113 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 %t114 = load i32, ptr %t113 %t115 = icmp eq i32 %t114, 111 br label %logic.rend9469 logic.rend9469: br label %logic.end9468 logic.end9468: %t116 = phi i1 [ true, %logic.from9466 ], [ %t115, %logic.rend9469 ] br label %logic.from9470 logic.from9470: br i1 %t116, label %logic.end9472, label %logic.rhs9471 logic.rhs9471: %t117 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 %t118 = load i32, ptr %t117 %t119 = icmp eq i32 %t118, 110 br label %logic.rend9473 logic.rend9473: br label %logic.end9472 logic.end9472: %t120 = phi i1 [ true, %logic.from9470 ], [ %t119, %logic.rend9473 ] br i1 %t120, label %then9474, label %endif9476 then9474: %t121 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6507, i64 3, i64 0 }) %t122 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t121) store %S.ast.Type %t121, ptr %a123 call void @finch.drop.S_ast_Type(ptr %a123) ret %S.cimport.Mapped %t122 endif9476: %t124 = load ptr, ptr %a1 %t125 = load %S.C.CXType, ptr %a90 %t126 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t124, %S.C.CXType %t125, i1 false, i1 false) store %S.cimport.Mapped %t126, ptr %a127 %t128 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 2 %t129 = load i1, ptr %t128 %t130 = xor i1 %t129, true br label %logic.from9477 logic.from9477: br i1 %t130, label %logic.end9479, label %logic.rhs9478 logic.rhs9478: %t131 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 %t133 = load { ptr, i64, i64 }, ptr %t132 store { ptr, i64, i64 } %t133, ptr %a134 store { ptr, i64, i64 } { ptr @.str.6508, i64 4, i64 0 }, ptr %a135 %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) %t137 = icmp ne i32 %t136, 0 br label %logic.rend9480 logic.rend9480: br label %logic.end9479 logic.end9479: %t138 = phi i1 [ true, %logic.from9477 ], [ %t137, %logic.rend9480 ] br label %logic.from9481 logic.from9481: br i1 %t138, label %logic.end9483, label %logic.rhs9482 logic.rhs9482: %t139 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 %t140 = getelementptr inbounds %S.ast.Type, ptr %t139, i32 0, i32 0 %t141 = load { ptr, i64, i64 }, ptr %t140 store { ptr, i64, i64 } %t141, ptr %a142 store { ptr, i64, i64 } { ptr @.str.6509, i64 5, i64 0 }, ptr %a143 %t144 = call i32 @finch_str_eq(ptr %a142, ptr %a143) %t145 = icmp ne i32 %t144, 0 br label %logic.rend9484 logic.rend9484: br label %logic.end9483 logic.end9483: %t146 = phi i1 [ true, %logic.from9481 ], [ %t145, %logic.rend9484 ] br i1 %t146, label %then9485, label %endif9487 then9485: %t147 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6510, i64 3, i64 0 }) %t148 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t147) store %S.ast.Type %t147, ptr %a149 call void @finch.drop.S_ast_Type(ptr %a149) call void @finch.drop.S_cimport_Mapped(ptr %a127) ret %S.cimport.Mapped %t148 endif9487: %t150 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 %t151 = load %S.ast.Type, ptr %t150 %t152 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t151) %t153 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t152) store %S.ast.Type %t152, ptr %a154 call void @finch.drop.S_ast_Type(ptr %a154) call void @finch.drop.S_cimport_Mapped(ptr %a127) ret %S.cimport.Mapped %t153 endif9447: %t155 = load i32, ptr %a16 %t156 = icmp eq i32 %t155, 105 br i1 %t156, label %then9488, label %endif9490 then9488: %t158 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t158, ptr %a159 call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a157, ptr %a159) %t160 = load %S.C.CXCursor, ptr %a157 store %S.C.CXCursor %t160, ptr %a161 %t162 = call i32 @clang_getCursorKind(ptr %a161) %t163 = icmp eq i32 %t162, 3 br i1 %t163, label %then9491, label %endif9493 then9491: %t164 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6511, i64 23, i64 0 }) ret %S.cimport.Mapped %t164 endif9493: %t165 = load ptr, ptr %a1 %t166 = load %S.C.CXType, ptr %a9 %t167 = call { ptr, i64, i64 } @finch.cimport.defineRecord(ptr %t165, %S.C.CXType %t166) store { ptr, i64, i64 } %t167, ptr %a168 %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %a168, i32 0, i32 1 %t170 = load i64, ptr %t169 %t171 = icmp eq i64 %t170, 0 br i1 %t171, label %then9494, label %endif9496 then9494: %t172 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6512, i64 36, i64 0 }) call void @finch_str_drop(ptr %a168) ret %S.cimport.Mapped %t172 endif9496: %t173 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6513, i64 5, i64 0 }, 0 %t174 = load { ptr, i64, i64 }, ptr %a168 store { ptr, i64, i64 } %t174, ptr %a175 call void @finch_str_copy(ptr %a176, ptr %a175) %t177 = load { ptr, i64, i64 }, ptr %a176 %t178 = insertvalue %S.ast.Type %t173, { ptr, i64, i64 } %t177, 2 %t179 = insertvalue %S.ast.Type %t178, { ptr, i64, i64 } { ptr @.str.6514, i64 1, i64 0 }, 3 %t180 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t179) store %S.ast.Type %t179, ptr %a181 call void @finch.drop.S_ast_Type(ptr %a181) call void @finch_str_drop(ptr %a168) ret %S.cimport.Mapped %t180 endif9490: %t182 = load i32, ptr %a16 %t183 = icmp eq i32 %t182, 112 br i1 %t183, label %then9497, label %endif9499 then9497: %t184 = load ptr, ptr %a1 %t186 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t186, ptr %a187 call void @clang_getArrayElementType(ptr sret(%S.C.CXType) align 16 %a185, ptr %a187) %t188 = load %S.C.CXType, ptr %a185 %t189 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t184, %S.C.CXType %t188, i1 false, i1 false) store %S.cimport.Mapped %t189, ptr %a190 %t191 = getelementptr inbounds %S.cimport.Mapped, ptr %a190, i32 0, i32 2 %t192 = load i1, ptr %t191 %t193 = xor i1 %t192, true br i1 %t193, label %then9500, label %endif9502 then9500: %t194 = load %S.cimport.Mapped, ptr %a190 ret %S.cimport.Mapped %t194 endif9502: %t195 = getelementptr inbounds %S.cimport.Mapped, ptr %a190, i32 0, i32 0 %t196 = load %S.ast.Type, ptr %t195 %t197 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t197, ptr %a198 %t199 = call i64 @clang_getArraySize(ptr %a198) %t200 = call %S.ast.Type @finch.cimport.fixed(%S.ast.Type %t196, i64 %t199) %t201 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t200) store %S.ast.Type %t200, ptr %a202 call void @finch.drop.S_ast_Type(ptr %a202) call void @finch.drop.S_cimport_Mapped(ptr %a190) ret %S.cimport.Mapped %t201 endif9499: %t203 = load i32, ptr %a16 %t204 = icmp eq i32 %t203, 23 br i1 %t204, label %then9503, label %endif9505 then9503: %t205 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6515, i64 16, i64 0 }) ret %S.cimport.Mapped %t205 endif9505: %t206 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t206, ptr %a207 %t208 = call [2 x i64] @clang_getTypeSpelling(ptr %a207) store [2 x i64] %t208, ptr %a209 %t210 = load %S.C.CXString, ptr %a209 %t211 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t210) store { ptr, i64, i64 } { ptr @.str.6516, i64 17, i64 0 }, ptr %a213 store { ptr, i64, i64 } %t211, ptr %a214 call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) store { ptr, i64, i64 } %t211, ptr %a215 call void @finch_str_drop(ptr %a215) %t216 = load { ptr, i64, i64 }, ptr %a212 store { ptr, i64, i64 } %t216, ptr %a218 store { ptr, i64, i64 } { ptr @.str.6517, i64 1, i64 0 }, ptr %a219 call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) store { ptr, i64, i64 } %t216, ptr %a220 call void @finch_str_drop(ptr %a220) %t221 = load { ptr, i64, i64 }, ptr %a217 %t222 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } %t221) store { ptr, i64, i64 } %t221, ptr %a223 call void @finch_str_drop(ptr %a223) ret %S.cimport.Mapped %t222 } define internal %S.cimport.Number @finch.cimport.parseInt({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca i64, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca i64, align 16 %a49 = alloca i1, align 16 %a50 = alloca i64, align 16 %a62 = alloca i8, align 16 %a63 = alloca i64, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_copy(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t5, ptr %a6 store i64 10, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t8, ptr %a9 store { ptr, i64, i64 } { ptr @.str.6519, i64 2, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_starts(ptr %a9, ptr %a11) %t13 = icmp ne i32 %t12, 0 br label %logic.from9506 logic.from9506: br i1 %t13, label %logic.end9508, label %logic.rhs9507 logic.rhs9507: %t14 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.6521, i64 2, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_starts(ptr %a15, ptr %a17) %t19 = icmp ne i32 %t18, 0 br label %logic.rend9509 logic.rend9509: br label %logic.end9508 logic.end9508: %t20 = phi i1 [ true, %logic.from9506 ], [ %t19, %logic.rend9509 ] br i1 %t20, label %then9510, label %else9511 then9510: store i64 16, ptr %a7 %t21 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t21, ptr %a22 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t25 = load i64, ptr %t24 call void @finch_str_sub(ptr %a23, ptr %a22, i64 2, i64 %t25, ptr @.str.6522, i64 331) %t26 = load { ptr, i64, i64 }, ptr %a23 %t27 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t26, ptr %a6 store { ptr, i64, i64 } %t27, ptr %a28 call void @finch_str_drop(ptr %a28) br label %endif9512 else9511: %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t30 = load i64, ptr %t29 %t31 = icmp sgt i64 %t30, 1 br label %logic.from9513 logic.from9513: br i1 %t31, label %logic.rhs9514, label %logic.end9515 logic.rhs9514: %t32 = load { ptr, i64, i64 }, ptr %a6 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 0, %t33 br i1 %t34, label %range9516, label %inrange9517 range9516: call void @finch_panic_index(ptr @.str.6523, i64 332, i64 0, i64 %t33) unreachable inrange9517: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds i8, ptr %t35, i64 0 %t37 = load i8, ptr %t36 %t38 = icmp eq i8 %t37, 48 br label %logic.rend9518 logic.rend9518: br label %logic.end9515 logic.end9515: %t39 = phi i1 [ false, %logic.from9513 ], [ %t38, %logic.rend9518 ] br i1 %t39, label %then9519, label %endif9521 then9519: store i64 8, ptr %a7 %t40 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t40, ptr %a41 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t44 = load i64, ptr %t43 call void @finch_str_sub(ptr %a42, ptr %a41, i64 1, i64 %t44, ptr @.str.6524, i64 334) %t45 = load { ptr, i64, i64 }, ptr %a42 %t46 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t45, ptr %a6 store { ptr, i64, i64 } %t46, ptr %a47 call void @finch_str_drop(ptr %a47) br label %endif9521 endif9521: br label %endif9512 endif9512: store i64 0, ptr %a48 store i1 false, ptr %a49 store i64 0, ptr %a50 br label %while.cond9522 while.cond9522: %t51 = load i64, ptr %a50 %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t53 = load i64, ptr %t52 %t54 = icmp slt i64 %t51, %t53 br i1 %t54, label %while.body9523, label %while.end9524 while.body9523: %t55 = load i64, ptr %a50 %t56 = load { ptr, i64, i64 }, ptr %a6 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = icmp uge i64 %t55, %t57 br i1 %t58, label %range9525, label %inrange9526 range9525: call void @finch_panic_index(ptr @.str.6525, i64 340, i64 %t55, i64 %t57) unreachable inrange9526: %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = getelementptr inbounds i8, ptr %t59, i64 %t55 %t61 = load i8, ptr %t60 store i8 %t61, ptr %a62 store i64 99, ptr %a63 %t64 = load i8, ptr %a62 %t65 = icmp uge i8 %t64, 48 br label %logic.from9527 logic.from9527: br i1 %t65, label %logic.rhs9528, label %logic.end9529 logic.rhs9528: %t66 = load i8, ptr %a62 %t67 = icmp ule i8 %t66, 57 br label %logic.rend9530 logic.rend9530: br label %logic.end9529 logic.end9529: %t68 = phi i1 [ false, %logic.from9527 ], [ %t67, %logic.rend9530 ] br i1 %t68, label %then9531, label %else9532 then9531: %t69 = load i8, ptr %a62 %t70 = zext i8 %t69 to i64 %t71 = zext i8 48 to i64 %t72 = sub i64 %t70, %t71 store i64 %t72, ptr %a63 br label %endif9533 else9532: %t73 = load i8, ptr %a62 %t74 = icmp uge i8 %t73, 97 br label %logic.from9534 logic.from9534: br i1 %t74, label %logic.rhs9535, label %logic.end9536 logic.rhs9535: %t75 = load i8, ptr %a62 %t76 = icmp ule i8 %t75, 102 br label %logic.rend9537 logic.rend9537: br label %logic.end9536 logic.end9536: %t77 = phi i1 [ false, %logic.from9534 ], [ %t76, %logic.rend9537 ] br i1 %t77, label %then9538, label %else9539 then9538: %t78 = load i8, ptr %a62 %t79 = zext i8 %t78 to i64 %t80 = zext i8 97 to i64 %t81 = sub i64 %t79, %t80 %t82 = add i64 %t81, 10 store i64 %t82, ptr %a63 br label %endif9540 else9539: %t83 = load i8, ptr %a62 %t84 = icmp uge i8 %t83, 65 br label %logic.from9541 logic.from9541: br i1 %t84, label %logic.rhs9542, label %logic.end9543 logic.rhs9542: %t85 = load i8, ptr %a62 %t86 = icmp ule i8 %t85, 70 br label %logic.rend9544 logic.rend9544: br label %logic.end9543 logic.end9543: %t87 = phi i1 [ false, %logic.from9541 ], [ %t86, %logic.rend9544 ] br i1 %t87, label %then9545, label %endif9547 then9545: %t88 = load i8, ptr %a62 %t89 = zext i8 %t88 to i64 %t90 = zext i8 65 to i64 %t91 = sub i64 %t89, %t90 %t92 = add i64 %t91, 10 store i64 %t92, ptr %a63 br label %endif9547 endif9547: br label %endif9540 endif9540: br label %endif9533 endif9533: %t93 = load i64, ptr %a63 %t94 = load i64, ptr %a7 %t95 = icmp sge i64 %t93, %t94 br i1 %t95, label %then9548, label %endif9550 then9548: br label %while.end9524 endif9550: %t96 = load i64, ptr %a48 %t97 = load i64, ptr %a7 %t98 = mul i64 %t96, %t97 %t99 = load i64, ptr %a63 %t100 = add i64 %t98, %t99 store i64 %t100, ptr %a48 store i1 true, ptr %a49 %t101 = load i64, ptr %a50 %t102 = add i64 %t101, 1 store i64 %t102, ptr %a50 br label %while.cond9522 while.end9524: br label %while.cond9551 while.cond9551: %t103 = load i64, ptr %a50 %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t105 = load i64, ptr %t104 %t106 = icmp slt i64 %t103, %t105 br i1 %t106, label %while.body9552, label %while.end9553 while.body9552: store { ptr, i64, i64 } { ptr @.str.6526, i64 4, i64 0 }, ptr %a107 %t109 = load i64, ptr %a50 %t110 = load { ptr, i64, i64 }, ptr %a6 %t111 = extractvalue { ptr, i64, i64 } %t110, 1 %t112 = icmp uge i64 %t109, %t111 br i1 %t112, label %range9554, label %inrange9555 range9554: call void @finch_panic_index(ptr @.str.6528, i64 358, i64 %t109, i64 %t111) unreachable inrange9555: %t113 = extractvalue { ptr, i64, i64 } %t110, 0 %t114 = getelementptr inbounds i8, ptr %t113, i64 %t109 %t115 = load i8, ptr %t114 call void @finch_str_from_char(ptr %a116, i8 signext %t115) %t117 = load { ptr, i64, i64 }, ptr %a116 store { ptr, i64, i64 } %t117, ptr %a118 %t119 = call i64 @finch_str_find(ptr %a107, ptr %a118) %t120 = icmp sge i64 %t119, 0 store { ptr, i64, i64 } %t117, ptr %a121 call void @finch_str_drop(ptr %a121) %t122 = xor i1 %t120, true br i1 %t122, label %then9556, label %endif9558 then9556: call void @finch_str_drop(ptr %a6) ret %S.cimport.Number zeroinitializer endif9558: %t123 = load i64, ptr %a50 %t124 = add i64 %t123, 1 store i64 %t124, ptr %a50 br label %while.cond9551 while.end9553: %t125 = load i1, ptr %a49 %t126 = xor i1 %t125, true br label %logic.from9559 logic.from9559: br i1 %t126, label %logic.rhs9560, label %logic.end9561 logic.rhs9560: %t127 = load i64, ptr %a7 %t128 = icmp ne i64 %t127, 8 br label %logic.rend9562 logic.rend9562: br label %logic.end9561 logic.end9561: %t129 = phi i1 [ false, %logic.from9559 ], [ %t128, %logic.rend9562 ] br i1 %t129, label %then9563, label %endif9565 then9563: call void @finch_str_drop(ptr %a6) ret %S.cimport.Number zeroinitializer endif9565: %t130 = load i64, ptr %a48 %t131 = insertvalue %S.cimport.CConst zeroinitializer, i64 %t130, 1 %t132 = insertvalue %S.cimport.Number zeroinitializer, %S.cimport.CConst %t131, 0 %t133 = insertvalue %S.cimport.Number %t132, i1 true, 1 call void @finch_str_drop(ptr %a6) ret %S.cimport.Number %t133 } define internal %S.cimport.Number @finch.cimport.macroValue(ptr %p0, %S.C.CXCursor %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.C.CXCursor, align 16 %a3 = alloca ptr, align 16 %a4 = alloca i32, align 16 %a9 = alloca %S.C.CXSourceRange, align 16 %a11 = alloca %S.C.CXCursor, align 16 %a13 = alloca %S.C.CXSourceRange, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca i64, align 16 %a24 = alloca %S.C.CXToken, align 16 %a36 = alloca %S.C.CXToken, align 16 %a38 = alloca [32 x i8], align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca i1, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca i1, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca double, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca double, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca %S.cimport.Number, align 16 store ptr %p0, ptr %a1 store %S.C.CXCursor %p1, ptr %a2 store ptr null, ptr %a3 store i32 0, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic9566, label %ok9567 panic9566: call void @finch_panic(ptr @.str.6529, i64 373, ptr @.str.6530) unreachable ok9567: %t7 = getelementptr inbounds %S.cimport.Importer, ptr %t5, i32 0, i32 1 %t8 = load ptr, ptr %t7 %t10 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t10, ptr %a11 call void @clang_getCursorExtent(ptr sret(%S.C.CXSourceRange) align 16 %a9, ptr %a11) %t12 = load %S.C.CXSourceRange, ptr %a9 store %S.C.CXSourceRange %t12, ptr %a13 call void @clang_tokenize(ptr %t8, ptr %a13, ptr %a3, ptr %a4) store { ptr, i64, i64 } zeroinitializer, ptr %a14 %t15 = load i32, ptr %a4 %t16 = zext i32 %t15 to i64 store i64 1, ptr %a17 br label %for.cond9568 for.cond9568: %t18 = load i64, ptr %a17 %t19 = icmp slt i64 %t18, %t16 br i1 %t19, label %for.body9569, label %for.end9571 for.body9569: %t20 = load i64, ptr %a17 %t21 = load ptr, ptr %a3 %t22 = getelementptr inbounds %S.C.CXToken, ptr %t21, i64 %t20 %t23 = load %S.C.CXToken, ptr %t22 store %S.C.CXToken %t23, ptr %a24 %t25 = call i32 @clang_getTokenKind(ptr %a24) %t26 = icmp eq i32 %t25, 4 br i1 %t26, label %then9572, label %endif9574 then9572: br label %for.step9570 endif9574: %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic9575, label %ok9576 panic9575: call void @finch_panic(ptr @.str.6531, i64 379, ptr @.str.6532) unreachable ok9576: %t30 = getelementptr inbounds %S.cimport.Importer, ptr %t28, i32 0, i32 1 %t31 = load ptr, ptr %t30 %t32 = load i64, ptr %a17 %t33 = load ptr, ptr %a3 %t34 = getelementptr inbounds %S.C.CXToken, ptr %t33, i64 %t32 %t35 = load %S.C.CXToken, ptr %t34 store %S.C.CXToken %t35, ptr %a36 %t37 = call [2 x i64] @clang_getTokenSpelling(ptr %t31, ptr %a36) store [2 x i64] %t37, ptr %a38 %t39 = load %S.C.CXString, ptr %a38 %t40 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t39) %t41 = load i64, ptr %t27 %t42 = add i64 %t41, 1 call void @finch_arr_reserve(ptr %a14, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t43 = load ptr, ptr %a14 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 store { ptr, i64, i64 } %t40, ptr %t44 store i64 %t42, ptr %t27 br label %for.step9570 for.step9570: %t45 = load i64, ptr %a17 %t46 = add i64 %t45, 1 store i64 %t46, ptr %a17 br label %for.cond9568 for.end9571: %t47 = load ptr, ptr %a1 %t48 = icmp eq ptr %t47, null br i1 %t48, label %panic9577, label %ok9578 panic9577: call void @finch_panic(ptr @.str.6533, i64 381, ptr @.str.6534) unreachable ok9578: %t49 = getelementptr inbounds %S.cimport.Importer, ptr %t47, i32 0, i32 1 %t50 = load ptr, ptr %t49 %t51 = load ptr, ptr %a3 %t52 = load i32, ptr %a4 call void @clang_disposeTokens(ptr %t50, ptr %t51, i32 %t52) br label %while.cond9579 while.cond9579: %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t54 = load i64, ptr %t53 %t55 = icmp sge i64 %t54, 2 br label %logic.from9582 logic.from9582: br i1 %t55, label %logic.rhs9583, label %logic.end9584 logic.rhs9583: %t56 = load { ptr, i64, i64 }, ptr %a14 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = icmp uge i64 0, %t57 br i1 %t58, label %range9585, label %inrange9586 range9585: call void @finch_panic_index(ptr @.str.6535, i64 383, i64 0, i64 %t57) unreachable inrange9586: %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i64 0 %t61 = load { ptr, i64, i64 }, ptr %t60 store { ptr, i64, i64 } %t61, ptr %a62 store { ptr, i64, i64 } { ptr @.str.6536, i64 1, i64 0 }, ptr %a63 %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) %t65 = icmp ne i32 %t64, 0 br label %logic.rend9587 logic.rend9587: br label %logic.end9584 logic.end9584: %t66 = phi i1 [ false, %logic.from9582 ], [ %t65, %logic.rend9587 ] br label %logic.from9588 logic.from9588: br i1 %t66, label %logic.rhs9589, label %logic.end9590 logic.rhs9589: %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t68 = load i64, ptr %t67 %t69 = sub i64 %t68, 1 %t70 = load { ptr, i64, i64 }, ptr %a14 %t71 = extractvalue { ptr, i64, i64 } %t70, 1 %t72 = icmp uge i64 %t69, %t71 br i1 %t72, label %range9591, label %inrange9592 range9591: call void @finch_panic_index(ptr @.str.6537, i64 383, i64 %t69, i64 %t71) unreachable inrange9592: %t73 = extractvalue { ptr, i64, i64 } %t70, 0 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i64 %t69 %t75 = load { ptr, i64, i64 }, ptr %t74 store { ptr, i64, i64 } %t75, ptr %a76 store { ptr, i64, i64 } { ptr @.str.6538, i64 1, i64 0 }, ptr %a77 %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) %t79 = icmp ne i32 %t78, 0 br label %logic.rend9593 logic.rend9593: br label %logic.end9590 logic.end9590: %t80 = phi i1 [ false, %logic.from9588 ], [ %t79, %logic.rend9593 ] br i1 %t80, label %while.body9580, label %while.end9581 while.body9580: %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t82 = load i64, ptr %t81 %t83 = icmp uge i64 0, %t82 br i1 %t83, label %range9594, label %inrange9595 range9594: call void @finch_panic_index(ptr @.str.6539, i64 384, i64 0, i64 %t82) unreachable inrange9595: %t84 = load ptr, ptr %a14 %t85 = getelementptr inbounds { ptr, i64, i64 }, ptr %t84, i64 0 %t86 = load { ptr, i64, i64 }, ptr %t85 call void @finch_arr_remove_gap(ptr %a14, i64 0, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) store { ptr, i64, i64 } %t86, ptr %a87 call void @finch_str_drop(ptr %a87) %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t89 = load i64, ptr %t88 %t90 = icmp eq i64 %t89, 0 br i1 %t90, label %panic9596, label %ok9597 panic9596: call void @finch_panic(ptr @.str.6540, i64 385, ptr @.str.6541) unreachable ok9597: %t91 = sub i64 %t89, 1 %t92 = load ptr, ptr %a14 %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %t92, i64 %t91 %t94 = load { ptr, i64, i64 }, ptr %t93 store i64 %t91, ptr %t88 store { ptr, i64, i64 } %t94, ptr %a95 call void @finch_str_drop(ptr %a95) br label %while.cond9579 while.end9581: store i1 false, ptr %a96 %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t98 = load i64, ptr %t97 %t99 = icmp eq i64 %t98, 2 br label %logic.from9598 logic.from9598: br i1 %t99, label %logic.rhs9599, label %logic.end9600 logic.rhs9599: %t100 = load { ptr, i64, i64 }, ptr %a14 %t101 = extractvalue { ptr, i64, i64 } %t100, 1 %t102 = icmp uge i64 0, %t101 br i1 %t102, label %range9601, label %inrange9602 range9601: call void @finch_panic_index(ptr @.str.6542, i64 388, i64 0, i64 %t101) unreachable inrange9602: %t103 = extractvalue { ptr, i64, i64 } %t100, 0 %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 0 %t105 = load { ptr, i64, i64 }, ptr %t104 store { ptr, i64, i64 } %t105, ptr %a106 store { ptr, i64, i64 } { ptr @.str.6543, i64 1, i64 0 }, ptr %a107 %t108 = call i32 @finch_str_eq(ptr %a106, ptr %a107) %t109 = icmp ne i32 %t108, 0 br label %logic.rend9603 logic.rend9603: br label %logic.end9600 logic.end9600: %t110 = phi i1 [ false, %logic.from9598 ], [ %t109, %logic.rend9603 ] br i1 %t110, label %then9604, label %endif9606 then9604: store i1 true, ptr %a96 %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t112 = load i64, ptr %t111 %t113 = icmp uge i64 0, %t112 br i1 %t113, label %range9607, label %inrange9608 range9607: call void @finch_panic_index(ptr @.str.6544, i64 390, i64 0, i64 %t112) unreachable inrange9608: %t114 = load ptr, ptr %a14 %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i64 0 %t116 = load { ptr, i64, i64 }, ptr %t115 call void @finch_arr_remove_gap(ptr %a14, i64 0, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) store { ptr, i64, i64 } %t116, ptr %a117 call void @finch_str_drop(ptr %a117) br label %endif9606 endif9606: %t118 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t119 = load i64, ptr %t118 %t120 = icmp ne i64 %t119, 1 br i1 %t120, label %then9609, label %endif9611 then9609: call void @finch.drop.arr_str(ptr %a14) ret %S.cimport.Number zeroinitializer endif9611: %t121 = load { ptr, i64, i64 }, ptr %a14 %t122 = extractvalue { ptr, i64, i64 } %t121, 1 %t123 = icmp uge i64 0, %t122 br i1 %t123, label %range9612, label %inrange9613 range9612: call void @finch_panic_index(ptr @.str.6545, i64 395, i64 0, i64 %t122) unreachable inrange9613: %t124 = extractvalue { ptr, i64, i64 } %t121, 0 %t125 = getelementptr inbounds { ptr, i64, i64 }, ptr %t124, i64 0 %t126 = load { ptr, i64, i64 }, ptr %t125 store { ptr, i64, i64 } %t126, ptr %a127 call void @finch_str_copy(ptr %a128, ptr %a127) %t129 = load { ptr, i64, i64 }, ptr %a128 store { ptr, i64, i64 } %t129, ptr %a130 %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %a130, i32 0, i32 1 %t132 = load i64, ptr %t131 %t133 = icmp eq i64 %t132, 0 br label %logic.from9614 logic.from9614: br i1 %t133, label %logic.end9616, label %logic.rhs9615 logic.rhs9615: %t134 = load { ptr, i64, i64 }, ptr %a130 %t135 = extractvalue { ptr, i64, i64 } %t134, 1 %t136 = icmp uge i64 0, %t135 br i1 %t136, label %range9617, label %inrange9618 range9617: call void @finch_panic_index(ptr @.str.6546, i64 396, i64 0, i64 %t135) unreachable inrange9618: %t137 = extractvalue { ptr, i64, i64 } %t134, 0 %t138 = getelementptr inbounds i8, ptr %t137, i64 0 %t139 = load i8, ptr %t138 %t140 = icmp uge i8 %t139, 48 br label %logic.from9619 logic.from9619: br i1 %t140, label %logic.rhs9620, label %logic.end9621 logic.rhs9620: %t141 = load { ptr, i64, i64 }, ptr %a130 %t142 = extractvalue { ptr, i64, i64 } %t141, 1 %t143 = icmp uge i64 0, %t142 br i1 %t143, label %range9622, label %inrange9623 range9622: call void @finch_panic_index(ptr @.str.6547, i64 396, i64 0, i64 %t142) unreachable inrange9623: %t144 = extractvalue { ptr, i64, i64 } %t141, 0 %t145 = getelementptr inbounds i8, ptr %t144, i64 0 %t146 = load i8, ptr %t145 %t147 = icmp ule i8 %t146, 57 br label %logic.rend9624 logic.rend9624: br label %logic.end9621 logic.end9621: %t148 = phi i1 [ false, %logic.from9619 ], [ %t147, %logic.rend9624 ] br label %logic.from9625 logic.from9625: br i1 %t148, label %logic.end9627, label %logic.rhs9626 logic.rhs9626: %t149 = load { ptr, i64, i64 }, ptr %a130 %t150 = extractvalue { ptr, i64, i64 } %t149, 1 %t151 = icmp uge i64 0, %t150 br i1 %t151, label %range9628, label %inrange9629 range9628: call void @finch_panic_index(ptr @.str.6548, i64 396, i64 0, i64 %t150) unreachable inrange9629: %t152 = extractvalue { ptr, i64, i64 } %t149, 0 %t153 = getelementptr inbounds i8, ptr %t152, i64 0 %t154 = load i8, ptr %t153 %t155 = icmp eq i8 %t154, 46 br label %logic.rend9630 logic.rend9630: br label %logic.end9627 logic.end9627: %t156 = phi i1 [ true, %logic.from9625 ], [ %t155, %logic.rend9630 ] %t157 = xor i1 %t156, true br label %logic.rend9631 logic.rend9631: br label %logic.end9616 logic.end9616: %t158 = phi i1 [ true, %logic.from9614 ], [ %t157, %logic.rend9631 ] br i1 %t158, label %then9632, label %endif9634 then9632: call void @finch_str_drop(ptr %a130) call void @finch.drop.arr_str(ptr %a14) ret %S.cimport.Number zeroinitializer endif9634: %t159 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t159, ptr %a160 store { ptr, i64, i64 } { ptr @.str.6550, i64 1, i64 0 }, ptr %a162 %t163 = call i64 @finch_str_find(ptr %a160, ptr %a162) %t164 = icmp sge i64 %t163, 0 br label %logic.from9635 logic.from9635: br i1 %t164, label %logic.end9637, label %logic.rhs9636 logic.rhs9636: %t165 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t165, ptr %a166 store { ptr, i64, i64 } { ptr @.str.6552, i64 1, i64 0 }, ptr %a168 %t169 = call i64 @finch_str_find(ptr %a166, ptr %a168) %t170 = icmp sge i64 %t169, 0 br label %logic.rend9638 logic.rend9638: br label %logic.end9637 logic.end9637: %t171 = phi i1 [ true, %logic.from9635 ], [ %t170, %logic.rend9638 ] br label %logic.from9639 logic.from9639: br i1 %t171, label %logic.end9641, label %logic.rhs9640 logic.rhs9640: %t172 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t172, ptr %a173 store { ptr, i64, i64 } { ptr @.str.6554, i64 1, i64 0 }, ptr %a175 %t176 = call i64 @finch_str_find(ptr %a173, ptr %a175) %t177 = icmp sge i64 %t176, 0 br label %logic.rend9642 logic.rend9642: br label %logic.end9641 logic.end9641: %t178 = phi i1 [ true, %logic.from9639 ], [ %t177, %logic.rend9642 ] br label %logic.from9643 logic.from9643: br i1 %t178, label %logic.rhs9644, label %logic.end9645 logic.rhs9644: %t179 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t179, ptr %a180 store { ptr, i64, i64 } { ptr @.str.6556, i64 2, i64 0 }, ptr %a182 %t183 = call i32 @finch_str_starts(ptr %a180, ptr %a182) %t184 = icmp ne i32 %t183, 0 %t185 = xor i1 %t184, true br label %logic.rend9646 logic.rend9646: br label %logic.end9645 logic.end9645: %t186 = phi i1 [ false, %logic.from9643 ], [ %t185, %logic.rend9646 ] store i1 %t186, ptr %a187 %t188 = load i1, ptr %a187 br i1 %t188, label %then9647, label %endif9649 then9647: %t189 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t189, ptr %a190 call void @finch_str_copy(ptr %a191, ptr %a190) %t192 = load { ptr, i64, i64 }, ptr %a191 store { ptr, i64, i64 } %t192, ptr %a193 br label %while.cond9650 while.cond9650: %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %a193, i32 0, i32 1 %t195 = load i64, ptr %t194 %t196 = icmp sgt i64 %t195, 0 br label %logic.from9653 logic.from9653: br i1 %t196, label %logic.rhs9654, label %logic.end9655 logic.rhs9654: store { ptr, i64, i64 } { ptr @.str.6557, i64 4, i64 0 }, ptr %a197 %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %a193, i32 0, i32 1 %t200 = load i64, ptr %t199 %t201 = sub i64 %t200, 1 %t202 = load { ptr, i64, i64 }, ptr %a193 %t203 = extractvalue { ptr, i64, i64 } %t202, 1 %t204 = icmp uge i64 %t201, %t203 br i1 %t204, label %range9656, label %inrange9657 range9656: call void @finch_panic_index(ptr @.str.6559, i64 402, i64 %t201, i64 %t203) unreachable inrange9657: %t205 = extractvalue { ptr, i64, i64 } %t202, 0 %t206 = getelementptr inbounds i8, ptr %t205, i64 %t201 %t207 = load i8, ptr %t206 call void @finch_str_from_char(ptr %a208, i8 signext %t207) %t209 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t209, ptr %a210 %t211 = call i64 @finch_str_find(ptr %a197, ptr %a210) %t212 = icmp sge i64 %t211, 0 store { ptr, i64, i64 } %t209, ptr %a213 call void @finch_str_drop(ptr %a213) br label %logic.rend9658 logic.rend9658: br label %logic.end9655 logic.end9655: %t214 = phi i1 [ false, %logic.from9653 ], [ %t212, %logic.rend9658 ] br i1 %t214, label %while.body9651, label %while.end9652 while.body9651: %t215 = load { ptr, i64, i64 }, ptr %a193 store { ptr, i64, i64 } %t215, ptr %a216 %t218 = getelementptr inbounds { ptr, i64, i64 }, ptr %a193, i32 0, i32 1 %t219 = load i64, ptr %t218 %t220 = sub i64 %t219, 1 call void @finch_str_sub(ptr %a217, ptr %a216, i64 0, i64 %t220, ptr @.str.6560, i64 403) %t221 = load { ptr, i64, i64 }, ptr %a217 %t222 = load { ptr, i64, i64 }, ptr %a193 store { ptr, i64, i64 } %t221, ptr %a193 store { ptr, i64, i64 } %t222, ptr %a223 call void @finch_str_drop(ptr %a223) br label %while.cond9650 while.end9652: %t224 = load { ptr, i64, i64 }, ptr %a193 store { ptr, i64, i64 } zeroinitializer, ptr %a225 store double 0.0, ptr %a226 store { ptr, i64, i64 } %t224, ptr %a227 %t228 = call i32 @finch_str_try_float(ptr %a227, ptr %a226, ptr %a225) %t229 = icmp eq i32 %t228, 0 %t230 = load { ptr, i64, i64 }, ptr %a225 %t231 = load double, ptr %a226 br i1 %t229, label %or.failed9659, label %or.ok9660 or.failed9659: store { ptr, i64, i64 } %t230, ptr %a232 call void @finch_str_drop(ptr %a232) call void @finch_str_drop(ptr %a193) call void @finch_str_drop(ptr %a130) call void @finch.drop.arr_str(ptr %a14) ret %S.cimport.Number zeroinitializer or.ok9660: store double %t231, ptr %a233 %t234 = load i1, ptr %a96 br i1 %t234, label %then9661, label %endif9663 then9661: %t235 = load double, ptr %a233 %t236 = fsub double 0.0, %t235 store double %t236, ptr %a233 br label %endif9663 endif9663: %t237 = insertvalue %S.cimport.CConst zeroinitializer, i1 true, 0 %t238 = load double, ptr %a233 %t239 = insertvalue %S.cimport.CConst %t237, double %t238, 2 %t240 = load { ptr, i64, i64 }, ptr %a193 store { ptr, i64, i64 } %t240, ptr %a241 call void @finch_str_copy(ptr %a242, ptr %a241) %t243 = load { ptr, i64, i64 }, ptr %a242 %t244 = insertvalue %S.cimport.CConst %t239, { ptr, i64, i64 } %t243, 3 %t245 = insertvalue %S.cimport.Number zeroinitializer, %S.cimport.CConst %t244, 0 %t246 = insertvalue %S.cimport.Number %t245, i1 true, 1 call void @finch_str_drop(ptr %a193) call void @finch_str_drop(ptr %a130) call void @finch.drop.arr_str(ptr %a14) ret %S.cimport.Number %t246 endif9649: %t247 = load { ptr, i64, i64 }, ptr %a130 %t248 = call %S.cimport.Number @finch.cimport.parseInt({ ptr, i64, i64 } %t247) store %S.cimport.Number %t248, ptr %a249 %t250 = getelementptr inbounds %S.cimport.Number, ptr %a249, i32 0, i32 1 %t251 = load i1, ptr %t250 br label %logic.from9664 logic.from9664: br i1 %t251, label %logic.rhs9665, label %logic.end9666 logic.rhs9665: %t252 = load i1, ptr %a96 br label %logic.rend9667 logic.rend9667: br label %logic.end9666 logic.end9666: %t253 = phi i1 [ false, %logic.from9664 ], [ %t252, %logic.rend9667 ] br i1 %t253, label %then9668, label %endif9670 then9668: %t254 = getelementptr inbounds %S.cimport.Number, ptr %a249, i32 0, i32 0 %t255 = getelementptr inbounds %S.cimport.CConst, ptr %t254, i32 0, i32 1 %t256 = load i64, ptr %t255 %t257 = sub i64 0, %t256 %t258 = getelementptr inbounds %S.cimport.Number, ptr %a249, i32 0, i32 0 %t259 = getelementptr inbounds %S.cimport.CConst, ptr %t258, i32 0, i32 1 store i64 %t257, ptr %t259 br label %endif9670 endif9670: %t260 = load %S.cimport.Number, ptr %a249 call void @finch_str_drop(ptr %a130) call void @finch.drop.arr_str(ptr %a14) ret %S.cimport.Number %t260 } define internal i32 @finch.cimport.visitTop(%S.C.CXCursor %p0, %S.C.CXCursor %p1, ptr %p2) { entry: %a1 = alloca %S.C.CXCursor, align 16 %a2 = alloca %S.C.CXCursor, align 16 %a3 = alloca ptr, align 16 %a5 = alloca ptr, align 16 store %S.C.CXCursor %p0, ptr %a1 store %S.C.CXCursor %p1, ptr %a2 store ptr %p2, ptr %a3 %t4 = load ptr, ptr %a3 store ptr %t4, ptr %a5 %t6 = load ptr, ptr %a5 %t7 = load %S.C.CXCursor, ptr %a1 call void @finch.cimport.visit(ptr %t6, %S.C.CXCursor %t7) ret i32 1 } define internal i32 @finch.c.cimport.visitTop(ptr %c0, ptr %c1, ptr %c2) { entry: %t1 = load %S.C.CXCursor, ptr %c0 %t2 = load %S.C.CXCursor, ptr %c1 %t3 = call i32 @finch.cimport.visitTop(%S.C.CXCursor %t1, %S.C.CXCursor %t2, ptr %c2) ret i32 %t3 } define internal void @finch.drop.S_cimport_Number(ptr %a) { entry: %t1 = getelementptr inbounds %S.cimport.Number, ptr %a, i32 0, i32 0 call void @finch.drop.S_cimport_CConst(ptr %t1) ret void } define internal void @finch.cimport.visit(ptr %p0, %S.C.CXCursor %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.C.CXCursor, align 16 %a4 = alloca %S.C.CXCursor, align 16 %a6 = alloca [32 x i8], align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca %S.C.CXCursor, align 16 %a13 = alloca i32, align 16 %a16 = alloca %S.C.CXType, align 16 %a17 = alloca %S.C.CXType, align 16 %a19 = alloca %S.C.CXCursor, align 16 %a21 = alloca %S.C.CXType, align 16 %a23 = alloca %S.C.CXType, align 16 %a27 = alloca %S.C.CXCursor, align 16 %a29 = alloca %S.C.CXType, align 16 %a31 = alloca %S.C.CXCursor, align 16 %a33 = alloca [32 x i8], align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca i1, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca i32, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca %S.cimport.CFunc, align 16 %a125 = alloca %S.C.CXCursor, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca i32, align 16 %a148 = alloca %S.cimport.CFunc, align 16 %a149 = alloca %S.cimport.CFunc, align 16 %a152 = alloca %S.cimport.CFunc, align 16 %a153 = alloca %S.C.CXType, align 16 %a154 = alloca %S.C.CXType, align 16 %a156 = alloca %S.C.CXCursor, align 16 %a158 = alloca %S.C.CXType, align 16 %a160 = alloca %S.C.CXType, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca i32, align 16 %a184 = alloca %S.cimport.CFunc, align 16 %a185 = alloca %S.cimport.CFunc, align 16 %a188 = alloca %S.cimport.CFunc, align 16 %a190 = alloca %S.C.CXType, align 16 %a192 = alloca %S.C.CXType, align 16 %a195 = alloca %S.cimport.Mapped, align 16 %a201 = alloca %S.ast.Type, align 16 %a202 = alloca %S.ast.Type, align 16 %a205 = alloca %S.ast.Type, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca %S.C.CXType, align 16 %a218 = alloca i64, align 16 %a220 = alloca i64, align 16 %a228 = alloca %S.C.CXType, align 16 %a230 = alloca %S.C.CXType, align 16 %a235 = alloca %S.cimport.Mapped, align 16 %a242 = alloca %S.ast.Type, align 16 %a243 = alloca %S.ast.Type, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca %S.C.CXType, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca i32, align 16 %a281 = alloca %S.cimport.CFunc, align 16 %a282 = alloca %S.cimport.CFunc, align 16 %a285 = alloca %S.cimport.CFunc, align 16 %a289 = alloca %S.C.CXCursor, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca %S.C.CXType, align 16 %a304 = alloca %S.C.CXCursor, align 16 %a307 = alloca %S.cimport.Mapped, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca i32, align 16 %a328 = alloca %S.ast.Type, align 16 %a329 = alloca %S.ast.Type, align 16 %a332 = alloca %S.ast.Type, align 16 %a336 = alloca %S.C.CXCursor, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a346 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca %S.C.CXCursor, align 16 %a354 = alloca [32 x i8], align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca i32, align 16 %a382 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca %S.C.CXCursor, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca %S.C.CXCursor, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca i32, align 16 %a425 = alloca %S.cimport.CConst, align 16 %a429 = alloca %S.C.CXCursor, align 16 %a433 = alloca %S.C.CXCursor, align 16 %a440 = alloca %S.cimport.Number, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a460 = alloca { ptr, i64, i64 }, align 16 %a461 = alloca i32, align 16 %a471 = alloca %S.cimport.CConst, align 16 %a472 = alloca %S.cimport.CConst, align 16 %a475 = alloca %S.cimport.CConst, align 16 store ptr %p0, ptr %a1 store %S.C.CXCursor %p1, ptr %a2 %t3 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t3, ptr %a4 %t5 = call [2 x i64] @clang_getCursorSpelling(ptr %a4) store [2 x i64] %t5, ptr %a6 %t7 = load %S.C.CXString, ptr %a6 %t8 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t7) store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t10, ptr %a11 %t12 = call i32 @clang_getCursorKind(ptr %a11) store i32 %t12, ptr %a13 %t14 = load i32, ptr %a13 %t15 = icmp eq i32 %t14, 20 br i1 %t15, label %then9671, label %else9672 then9671: %t18 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t18, ptr %a19 call void @clang_getTypedefDeclUnderlyingType(ptr sret(%S.C.CXType) align 16 %a17, ptr %a19) %t20 = load %S.C.CXType, ptr %a17 store %S.C.CXType %t20, ptr %a21 call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a16, ptr %a21) %t22 = load %S.C.CXType, ptr %a16 store %S.C.CXType %t22, ptr %a23 %t24 = getelementptr inbounds %S.C.CXType, ptr %a23, i32 0, i32 0 %t25 = load i32, ptr %t24 %t26 = icmp eq i32 %t25, 105 br i1 %t26, label %then9674, label %endif9676 then9674: %t28 = load %S.C.CXType, ptr %a23 store %S.C.CXType %t28, ptr %a29 call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a27, ptr %a29) %t30 = load %S.C.CXCursor, ptr %a27 store %S.C.CXCursor %t30, ptr %a31 %t32 = call [2 x i64] @clang_getCursorUSR(ptr %a31) store [2 x i64] %t32, ptr %a33 %t34 = load %S.C.CXString, ptr %a33 %t35 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t34) store { ptr, i64, i64 } %t35, ptr %a36 %t37 = load ptr, ptr %a1 %t38 = icmp eq ptr %t37, null br i1 %t38, label %panic9677, label %ok9678 panic9677: call void @finch_panic(ptr @.str.6561, i64 437, ptr @.str.6562) unreachable ok9678: %t39 = getelementptr inbounds %S.cimport.Importer, ptr %t37, i32 0, i32 3 %t40 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t40, ptr %a41 %t42 = call i64 @finch_map_find(ptr %t39, ptr %a41, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t43 = icmp sge i64 %t42, 0 br label %logic.from9679 logic.from9679: br i1 %t43, label %logic.rhs9680, label %logic.end9681 logic.rhs9680: %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null br i1 %t45, label %panic9682, label %ok9683 panic9682: call void @finch_panic(ptr @.str.6563, i64 437, ptr @.str.6564) unreachable ok9683: %t46 = getelementptr inbounds %S.cimport.Importer, ptr %t44, i32 0, i32 0 %t47 = getelementptr inbounds %S.cimport.CImports, ptr %t46, i32 0, i32 3 %t48 = load ptr, ptr %a1 %t49 = icmp eq ptr %t48, null br i1 %t49, label %panic9684, label %ok9685 panic9684: call void @finch_panic(ptr @.str.6565, i64 437, ptr @.str.6566) unreachable ok9685: %t50 = getelementptr inbounds %S.cimport.Importer, ptr %t48, i32 0, i32 3 %t51 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t51, ptr %a52 %t53 = call i64 @finch_map_find(ptr %t50, ptr %a52, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t54 = icmp slt i64 %t53, 0 br i1 %t54, label %map.missing9686, label %map.found9687 map.missing9686: store { ptr, i64, i64 } zeroinitializer, ptr %a55 store { ptr, i64, i64 } %t51, ptr %a56 call void @finch_buf_str(ptr %a55, ptr %a56, i32 1) call void @finch_map_missing(ptr @.str.6567, i64 437, ptr %a55) unreachable map.found9687: %t57 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t50, i32 0, i32 0 %t58 = load ptr, ptr %t57 %t59 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t58, i64 %t53 %t60 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t59, i32 0, i32 2 %t61 = load { ptr, i64, i64 }, ptr %t60 store { ptr, i64, i64 } %t61, ptr %a62 %t63 = call i64 @finch_map_find(ptr %t47, ptr %a62, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t64 = icmp sge i64 %t63, 0 br label %logic.rend9688 logic.rend9688: br label %logic.end9681 logic.end9681: %t65 = phi i1 [ false, %logic.from9679 ], [ %t64, %logic.rend9688 ] store i1 %t65, ptr %a66 %t67 = load i1, ptr %a66 %t68 = xor i1 %t67, true br label %logic.from9689 logic.from9689: br i1 %t68, label %logic.rhs9690, label %logic.end9691 logic.rhs9690: %t69 = load ptr, ptr %a1 %t70 = icmp eq ptr %t69, null br i1 %t70, label %panic9692, label %ok9693 panic9692: call void @finch_panic(ptr @.str.6568, i64 438, ptr @.str.6569) unreachable ok9693: %t71 = getelementptr inbounds %S.cimport.Importer, ptr %t69, i32 0, i32 0 %t72 = getelementptr inbounds %S.cimport.CImports, ptr %t71, i32 0, i32 3 %t73 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t73, ptr %a74 %t75 = call i64 @finch_map_find(ptr %t72, ptr %a74, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t76 = icmp sge i64 %t75, 0 %t77 = xor i1 %t76, true br label %logic.rend9694 logic.rend9694: br label %logic.end9691 logic.end9691: %t78 = phi i1 [ false, %logic.from9689 ], [ %t77, %logic.rend9694 ] br i1 %t78, label %then9695, label %endif9697 then9695: %t79 = load { ptr, i64, i64 }, ptr %a9 %t80 = load ptr, ptr %a1 %t81 = icmp eq ptr %t80, null br i1 %t81, label %panic9698, label %ok9699 panic9698: call void @finch_panic(ptr @.str.6570, i64 439, ptr @.str.6571) unreachable ok9699: %t82 = getelementptr inbounds %S.cimport.Importer, ptr %t80, i32 0, i32 3 %t83 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t83, ptr %a84 store i32 0, ptr %a85 %t86 = call i64 @finch_map_slot(ptr %t82, ptr %a84, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a85) %t87 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t82, i32 0, i32 0 %t88 = load ptr, ptr %t87 %t89 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t88, i64 %t86 %t90 = load i32, ptr %a85 %t91 = icmp ne i32 %t90, 0 br i1 %t91, label %map.new9700, label %map.have9701 map.new9700: %t92 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 1 call void @finch_str_copy(ptr %t92, ptr %a84) %t93 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t93 br label %map.have9701 map.have9701: %t94 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 2 store { ptr, i64, i64 } %t79, ptr %a95 call void @finch_str_copy(ptr %a96, ptr %a95) %t97 = load { ptr, i64, i64 }, ptr %a96 %t98 = load { ptr, i64, i64 }, ptr %t94 store { ptr, i64, i64 } %t97, ptr %t94 store { ptr, i64, i64 } %t98, ptr %a99 call void @finch_str_drop(ptr %a99) br label %endif9697 endif9697: call void @finch_str_drop(ptr %a36) br label %endif9676 endif9676: br label %endif9673 else9672: %t100 = load i32, ptr %a13 %t101 = icmp eq i32 %t100, 8 br i1 %t101, label %then9702, label %else9703 then9702: %t102 = load ptr, ptr %a1 %t103 = icmp eq ptr %t102, null br i1 %t103, label %panic9705, label %ok9706 panic9705: call void @finch_panic(ptr @.str.6572, i64 443, ptr @.str.6573) unreachable ok9706: %t104 = getelementptr inbounds %S.cimport.Importer, ptr %t102, i32 0, i32 0 %t105 = getelementptr inbounds %S.cimport.CImports, ptr %t104, i32 0, i32 0 %t106 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t106, ptr %a107 %t108 = call i64 @finch_map_find(ptr %t105, ptr %a107, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t109 = icmp sge i64 %t108, 0 br i1 %t109, label %then9707, label %endif9709 then9707: call void @finch_str_drop(ptr %a9) ret void endif9709: %t110 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t110, ptr %a111 call void @finch_str_copy(ptr %a112, ptr %a111) %t113 = load { ptr, i64, i64 }, ptr %a112 %t114 = insertvalue %S.cimport.CFunc zeroinitializer, { ptr, i64, i64 } %t113, 0 %t115 = load ptr, ptr %a1 %t116 = icmp eq ptr %t115, null br i1 %t116, label %panic9710, label %ok9711 panic9710: call void @finch_panic(ptr @.str.6574, i64 446, ptr @.str.6575) unreachable ok9711: %t117 = getelementptr inbounds %S.cimport.Importer, ptr %t115, i32 0, i32 2 %t118 = load { ptr, i64, i64 }, ptr %t117 store { ptr, i64, i64 } %t118, ptr %a119 call void @finch_str_copy(ptr %a120, ptr %a119) %t121 = load { ptr, i64, i64 }, ptr %a120 %t122 = insertvalue %S.cimport.CFunc %t114, { ptr, i64, i64 } %t121, 1 store %S.cimport.CFunc %t122, ptr %a123 %t124 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t124, ptr %a125 %t126 = call i32 @clang_Cursor_getStorageClass(ptr %a125) %t127 = icmp eq i32 %t126, 3 br i1 %t127, label %then9712, label %endif9714 then9712: %t128 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 %t129 = load { ptr, i64, i64 }, ptr %t128 store { ptr, i64, i64 } { ptr @.str.6576, i64 62, i64 0 }, ptr %t128 store { ptr, i64, i64 } %t129, ptr %a130 call void @finch_str_drop(ptr %a130) %t131 = load %S.cimport.CFunc, ptr %a123 %t132 = load ptr, ptr %a1 %t133 = icmp eq ptr %t132, null br i1 %t133, label %panic9715, label %ok9716 panic9715: call void @finch_panic(ptr @.str.6577, i64 449, ptr @.str.6578) unreachable ok9716: %t134 = getelementptr inbounds %S.cimport.Importer, ptr %t132, i32 0, i32 0 %t135 = getelementptr inbounds %S.cimport.CImports, ptr %t134, i32 0, i32 0 %t136 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t136, ptr %a137 store i32 0, ptr %a138 %t139 = call i64 @finch_map_slot(ptr %t135, ptr %a137, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a138) %t140 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t135, i32 0, i32 0 %t141 = load ptr, ptr %t140 %t142 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t141, i64 %t139 %t143 = load i32, ptr %a138 %t144 = icmp ne i32 %t143, 0 br i1 %t144, label %map.new9717, label %map.have9718 map.new9717: %t145 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t142, i32 0, i32 1 call void @finch_str_copy(ptr %t145, ptr %a137) %t146 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t142, i32 0, i32 2 store %S.cimport.CFunc zeroinitializer, ptr %t146 br label %map.have9718 map.have9718: %t147 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t142, i32 0, i32 2 store %S.cimport.CFunc %t131, ptr %a148 call void @finch.copy.S_cimport_CFunc(ptr %a149, ptr %a148) %t150 = load %S.cimport.CFunc, ptr %a149 %t151 = load %S.cimport.CFunc, ptr %t147 store %S.cimport.CFunc %t150, ptr %t147 store %S.cimport.CFunc %t151, ptr %a152 call void @finch.drop.S_cimport_CFunc(ptr %a152) call void @finch.drop.S_cimport_CFunc(ptr %a123) call void @finch_str_drop(ptr %a9) ret void endif9714: %t155 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t155, ptr %a156 call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a154, ptr %a156) %t157 = load %S.C.CXType, ptr %a154 store %S.C.CXType %t157, ptr %a158 call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a153, ptr %a158) %t159 = load %S.C.CXType, ptr %a153 store %S.C.CXType %t159, ptr %a160 %t161 = getelementptr inbounds %S.C.CXType, ptr %a160, i32 0, i32 0 %t162 = load i32, ptr %t161 %t163 = icmp eq i32 %t162, 110 br i1 %t163, label %then9719, label %endif9721 then9719: %t164 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 %t165 = load { ptr, i64, i64 }, ptr %t164 store { ptr, i64, i64 } { ptr @.str.6579, i64 42, i64 0 }, ptr %t164 store { ptr, i64, i64 } %t165, ptr %a166 call void @finch_str_drop(ptr %a166) %t167 = load %S.cimport.CFunc, ptr %a123 %t168 = load ptr, ptr %a1 %t169 = icmp eq ptr %t168, null br i1 %t169, label %panic9722, label %ok9723 panic9722: call void @finch_panic(ptr @.str.6580, i64 455, ptr @.str.6581) unreachable ok9723: %t170 = getelementptr inbounds %S.cimport.Importer, ptr %t168, i32 0, i32 0 %t171 = getelementptr inbounds %S.cimport.CImports, ptr %t170, i32 0, i32 0 %t172 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t172, ptr %a173 store i32 0, ptr %a174 %t175 = call i64 @finch_map_slot(ptr %t171, ptr %a173, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a174) %t176 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t171, i32 0, i32 0 %t177 = load ptr, ptr %t176 %t178 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t177, i64 %t175 %t179 = load i32, ptr %a174 %t180 = icmp ne i32 %t179, 0 br i1 %t180, label %map.new9724, label %map.have9725 map.new9724: %t181 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t178, i32 0, i32 1 call void @finch_str_copy(ptr %t181, ptr %a173) %t182 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t178, i32 0, i32 2 store %S.cimport.CFunc zeroinitializer, ptr %t182 br label %map.have9725 map.have9725: %t183 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t178, i32 0, i32 2 store %S.cimport.CFunc %t167, ptr %a184 call void @finch.copy.S_cimport_CFunc(ptr %a185, ptr %a184) %t186 = load %S.cimport.CFunc, ptr %a185 %t187 = load %S.cimport.CFunc, ptr %t183 store %S.cimport.CFunc %t186, ptr %t183 store %S.cimport.CFunc %t187, ptr %a188 call void @finch.drop.S_cimport_CFunc(ptr %a188) call void @finch.drop.S_cimport_CFunc(ptr %a123) call void @finch_str_drop(ptr %a9) ret void endif9721: %t189 = load ptr, ptr %a1 %t191 = load %S.C.CXType, ptr %a160 store %S.C.CXType %t191, ptr %a192 call void @clang_getResultType(ptr sret(%S.C.CXType) align 16 %a190, ptr %a192) %t193 = load %S.C.CXType, ptr %a190 %t194 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t189, %S.C.CXType %t193, i1 true, i1 false) store %S.cimport.Mapped %t194, ptr %a195 %t196 = getelementptr inbounds %S.cimport.Mapped, ptr %a195, i32 0, i32 2 %t197 = load i1, ptr %t196 br i1 %t197, label %then9726, label %else9727 then9726: %t198 = getelementptr inbounds %S.cimport.Mapped, ptr %a195, i32 0, i32 0 %t199 = load %S.ast.Type, ptr %t198 %t200 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 2 store %S.ast.Type %t199, ptr %a201 call void @finch.copy.S_ast_Type(ptr %a202, ptr %a201) %t203 = load %S.ast.Type, ptr %a202 %t204 = load %S.ast.Type, ptr %t200 store %S.ast.Type %t203, ptr %t200 store %S.ast.Type %t204, ptr %a205 call void @finch.drop.S_ast_Type(ptr %a205) br label %endif9728 else9727: %t206 = getelementptr inbounds %S.cimport.Mapped, ptr %a195, i32 0, i32 1 %t207 = load { ptr, i64, i64 }, ptr %t206 %t208 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 store { ptr, i64, i64 } %t207, ptr %a209 call void @finch_str_copy(ptr %a210, ptr %a209) %t211 = load { ptr, i64, i64 }, ptr %a210 %t212 = load { ptr, i64, i64 }, ptr %t208 store { ptr, i64, i64 } %t211, ptr %t208 store { ptr, i64, i64 } %t212, ptr %a213 call void @finch_str_drop(ptr %a213) br label %endif9728 endif9728: %t214 = load %S.C.CXType, ptr %a160 store %S.C.CXType %t214, ptr %a215 %t216 = call i32 @clang_getNumArgTypes(ptr %a215) %t217 = sext i32 %t216 to i64 store i64 %t217, ptr %a218 %t219 = load i64, ptr %a218 store i64 0, ptr %a220 br label %for.cond9729 for.cond9729: %t221 = load i64, ptr %a220 %t222 = icmp slt i64 %t221, %t219 br i1 %t222, label %for.body9730, label %for.end9732 for.body9730: %t223 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i32 0, i32 1 %t225 = load i64, ptr %t224 %t226 = icmp sgt i64 %t225, 0 br i1 %t226, label %then9733, label %endif9735 then9733: br label %for.end9732 endif9735: %t227 = load ptr, ptr %a1 %t229 = load %S.C.CXType, ptr %a160 store %S.C.CXType %t229, ptr %a230 %t231 = load i64, ptr %a220 %t232 = trunc i64 %t231 to i32 call void @clang_getArgType(ptr sret(%S.C.CXType) align 16 %a228, ptr %a230, i32 %t232) %t233 = load %S.C.CXType, ptr %a228 %t234 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t227, %S.C.CXType %t233, i1 true, i1 true) store %S.cimport.Mapped %t234, ptr %a235 %t236 = getelementptr inbounds %S.cimport.Mapped, ptr %a235, i32 0, i32 2 %t237 = load i1, ptr %t236 br i1 %t237, label %then9736, label %else9737 then9736: %t238 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 3 %t239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t238, i32 0, i32 1 %t240 = getelementptr inbounds %S.cimport.Mapped, ptr %a235, i32 0, i32 0 %t241 = load %S.ast.Type, ptr %t240 store %S.ast.Type %t241, ptr %a242 call void @finch.copy.S_ast_Type(ptr %a243, ptr %a242) %t244 = load %S.ast.Type, ptr %a243 %t245 = load i64, ptr %t239 %t246 = add i64 %t245, 1 call void @finch_arr_reserve(ptr %t238, i64 %t246, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t247 = load ptr, ptr %t238 %t248 = getelementptr inbounds %S.ast.Type, ptr %t247, i64 %t245 store %S.ast.Type %t244, ptr %t248 store i64 %t246, ptr %t239 br label %endif9738 else9737: %t249 = getelementptr inbounds %S.cimport.Mapped, ptr %a235, i32 0, i32 1 %t250 = load { ptr, i64, i64 }, ptr %t249 %t251 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 store { ptr, i64, i64 } %t250, ptr %a252 call void @finch_str_copy(ptr %a253, ptr %a252) %t254 = load { ptr, i64, i64 }, ptr %a253 %t255 = load { ptr, i64, i64 }, ptr %t251 store { ptr, i64, i64 } %t254, ptr %t251 store { ptr, i64, i64 } %t255, ptr %a256 call void @finch_str_drop(ptr %a256) br label %endif9738 endif9738: call void @finch.drop.S_cimport_Mapped(ptr %a235) br label %for.step9731 for.step9731: %t257 = load i64, ptr %a220 %t258 = add i64 %t257, 1 store i64 %t258, ptr %a220 br label %for.cond9729 for.end9732: %t259 = load %S.C.CXType, ptr %a160 store %S.C.CXType %t259, ptr %a260 %t261 = call i32 @clang_isFunctionTypeVariadic(ptr %a260) %t262 = icmp ne i32 %t261, 0 %t263 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 4 store i1 %t262, ptr %t263 %t264 = load %S.cimport.CFunc, ptr %a123 %t265 = load ptr, ptr %a1 %t266 = icmp eq ptr %t265, null br i1 %t266, label %panic9739, label %ok9740 panic9739: call void @finch_panic(ptr @.str.6582, i64 477, ptr @.str.6583) unreachable ok9740: %t267 = getelementptr inbounds %S.cimport.Importer, ptr %t265, i32 0, i32 0 %t268 = getelementptr inbounds %S.cimport.CImports, ptr %t267, i32 0, i32 0 %t269 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t269, ptr %a270 store i32 0, ptr %a271 %t272 = call i64 @finch_map_slot(ptr %t268, ptr %a270, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a271) %t273 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t268, i32 0, i32 0 %t274 = load ptr, ptr %t273 %t275 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t274, i64 %t272 %t276 = load i32, ptr %a271 %t277 = icmp ne i32 %t276, 0 br i1 %t277, label %map.new9741, label %map.have9742 map.new9741: %t278 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t275, i32 0, i32 1 call void @finch_str_copy(ptr %t278, ptr %a270) %t279 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t275, i32 0, i32 2 store %S.cimport.CFunc zeroinitializer, ptr %t279 br label %map.have9742 map.have9742: %t280 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t275, i32 0, i32 2 store %S.cimport.CFunc %t264, ptr %a281 call void @finch.copy.S_cimport_CFunc(ptr %a282, ptr %a281) %t283 = load %S.cimport.CFunc, ptr %a282 %t284 = load %S.cimport.CFunc, ptr %t280 store %S.cimport.CFunc %t283, ptr %t280 store %S.cimport.CFunc %t284, ptr %a285 call void @finch.drop.S_cimport_CFunc(ptr %a285) call void @finch.drop.S_cimport_Mapped(ptr %a195) call void @finch.drop.S_cimport_CFunc(ptr %a123) br label %endif9704 else9703: %t286 = load i32, ptr %a13 %t287 = icmp eq i32 %t286, 9 br i1 %t287, label %then9743, label %else9744 then9743: %t288 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t288, ptr %a289 %t290 = call i32 @clang_Cursor_getStorageClass(ptr %a289) %t291 = icmp ne i32 %t290, 2 br label %logic.from9746 logic.from9746: br i1 %t291, label %logic.end9748, label %logic.rhs9747 logic.rhs9747: %t292 = load ptr, ptr %a1 %t293 = icmp eq ptr %t292, null br i1 %t293, label %panic9749, label %ok9750 panic9749: call void @finch_panic(ptr @.str.6584, i64 479, ptr @.str.6585) unreachable ok9750: %t294 = getelementptr inbounds %S.cimport.Importer, ptr %t292, i32 0, i32 0 %t295 = getelementptr inbounds %S.cimport.CImports, ptr %t294, i32 0, i32 2 %t296 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t296, ptr %a297 %t298 = call i64 @finch_map_find(ptr %t295, ptr %a297, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t299 = icmp sge i64 %t298, 0 br label %logic.rend9751 logic.rend9751: br label %logic.end9748 logic.end9748: %t300 = phi i1 [ true, %logic.from9746 ], [ %t299, %logic.rend9751 ] br i1 %t300, label %then9752, label %endif9754 then9752: call void @finch_str_drop(ptr %a9) ret void endif9754: %t301 = load ptr, ptr %a1 %t303 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t303, ptr %a304 call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a302, ptr %a304) %t305 = load %S.C.CXType, ptr %a302 %t306 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t301, %S.C.CXType %t305, i1 false, i1 false) store %S.cimport.Mapped %t306, ptr %a307 %t308 = getelementptr inbounds %S.cimport.Mapped, ptr %a307, i32 0, i32 2 %t309 = load i1, ptr %t308 br i1 %t309, label %then9755, label %endif9757 then9755: %t310 = getelementptr inbounds %S.cimport.Mapped, ptr %a307, i32 0, i32 0 %t311 = load %S.ast.Type, ptr %t310 %t312 = load ptr, ptr %a1 %t313 = icmp eq ptr %t312, null br i1 %t313, label %panic9758, label %ok9759 panic9758: call void @finch_panic(ptr @.str.6586, i64 484, ptr @.str.6587) unreachable ok9759: %t314 = getelementptr inbounds %S.cimport.Importer, ptr %t312, i32 0, i32 0 %t315 = getelementptr inbounds %S.cimport.CImports, ptr %t314, i32 0, i32 2 %t316 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t316, ptr %a317 store i32 0, ptr %a318 %t319 = call i64 @finch_map_slot(ptr %t315, ptr %a317, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a318) %t320 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t315, i32 0, i32 0 %t321 = load ptr, ptr %t320 %t322 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t321, i64 %t319 %t323 = load i32, ptr %a318 %t324 = icmp ne i32 %t323, 0 br i1 %t324, label %map.new9760, label %map.have9761 map.new9760: %t325 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t322, i32 0, i32 1 call void @finch_str_copy(ptr %t325, ptr %a317) %t326 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t322, i32 0, i32 2 store %S.ast.Type zeroinitializer, ptr %t326 br label %map.have9761 map.have9761: %t327 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t322, i32 0, i32 2 store %S.ast.Type %t311, ptr %a328 call void @finch.copy.S_ast_Type(ptr %a329, ptr %a328) %t330 = load %S.ast.Type, ptr %a329 %t331 = load %S.ast.Type, ptr %t327 store %S.ast.Type %t330, ptr %t327 store %S.ast.Type %t331, ptr %a332 call void @finch.drop.S_ast_Type(ptr %a332) br label %endif9757 endif9757: call void @finch.drop.S_cimport_Mapped(ptr %a307) br label %endif9745 else9744: %t333 = load i32, ptr %a13 %t334 = icmp eq i32 %t333, 2 br i1 %t334, label %then9762, label %else9763 then9762: %t335 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t335, ptr %a336 %t337 = call i32 @clang_isCursorDefinition(ptr %a336) %t338 = icmp ne i32 %t337, 0 br label %logic.from9765 logic.from9765: br i1 %t338, label %logic.rhs9766, label %logic.end9767 logic.rhs9766: %t339 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t340 = load i64, ptr %t339 %t341 = icmp sgt i64 %t340, 0 br label %logic.rend9768 logic.rend9768: br label %logic.end9767 logic.end9767: %t342 = phi i1 [ false, %logic.from9765 ], [ %t341, %logic.rend9768 ] br label %logic.from9769 logic.from9769: br i1 %t342, label %logic.rhs9770, label %logic.end9771 logic.rhs9770: %t343 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t343, ptr %a344 store { ptr, i64, i64 } { ptr @.str.6589, i64 1, i64 0 }, ptr %a346 %t347 = call i64 @finch_str_find(ptr %a344, ptr %a346) %t348 = icmp sge i64 %t347, 0 %t349 = xor i1 %t348, true br label %logic.rend9772 logic.rend9772: br label %logic.end9771 logic.end9771: %t350 = phi i1 [ false, %logic.from9769 ], [ %t349, %logic.rend9772 ] br i1 %t350, label %then9773, label %endif9775 then9773: %t351 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t351, ptr %a352 %t353 = call [2 x i64] @clang_getCursorUSR(ptr %a352) store [2 x i64] %t353, ptr %a354 %t355 = load %S.C.CXString, ptr %a354 %t356 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t355) store { ptr, i64, i64 } %t356, ptr %a357 %t358 = load ptr, ptr %a1 %t359 = icmp eq ptr %t358, null br i1 %t359, label %panic9776, label %ok9777 panic9776: call void @finch_panic(ptr @.str.6590, i64 489, ptr @.str.6591) unreachable ok9777: %t360 = getelementptr inbounds %S.cimport.Importer, ptr %t358, i32 0, i32 3 %t361 = load { ptr, i64, i64 }, ptr %a357 store { ptr, i64, i64 } %t361, ptr %a362 %t363 = call i64 @finch_map_find(ptr %t360, ptr %a362, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t364 = icmp sge i64 %t363, 0 %t365 = xor i1 %t364, true br i1 %t365, label %then9778, label %endif9780 then9778: %t366 = load { ptr, i64, i64 }, ptr %a9 %t367 = load ptr, ptr %a1 %t368 = icmp eq ptr %t367, null br i1 %t368, label %panic9781, label %ok9782 panic9781: call void @finch_panic(ptr @.str.6592, i64 490, ptr @.str.6593) unreachable ok9782: %t369 = getelementptr inbounds %S.cimport.Importer, ptr %t367, i32 0, i32 3 %t370 = load { ptr, i64, i64 }, ptr %a357 store { ptr, i64, i64 } %t370, ptr %a371 store i32 0, ptr %a372 %t373 = call i64 @finch_map_slot(ptr %t369, ptr %a371, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a372) %t374 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t369, i32 0, i32 0 %t375 = load ptr, ptr %t374 %t376 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t375, i64 %t373 %t377 = load i32, ptr %a372 %t378 = icmp ne i32 %t377, 0 br i1 %t378, label %map.new9783, label %map.have9784 map.new9783: %t379 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t376, i32 0, i32 1 call void @finch_str_copy(ptr %t379, ptr %a371) %t380 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t376, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t380 br label %map.have9784 map.have9784: %t381 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t376, i32 0, i32 2 store { ptr, i64, i64 } %t366, ptr %a382 call void @finch_str_copy(ptr %a383, ptr %a382) %t384 = load { ptr, i64, i64 }, ptr %a383 %t385 = load { ptr, i64, i64 }, ptr %t381 store { ptr, i64, i64 } %t384, ptr %t381 store { ptr, i64, i64 } %t385, ptr %a386 call void @finch_str_drop(ptr %a386) br label %endif9780 endif9780: call void @finch_str_drop(ptr %a357) br label %endif9775 endif9775: br label %endif9764 else9763: %t387 = load i32, ptr %a13 %t388 = icmp eq i32 %t387, 5 br i1 %t388, label %then9785, label %else9786 then9785: %t389 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t389, ptr %a390 %t391 = load ptr, ptr %a1 %t392 = call i32 @clang_visitChildren(ptr %a390, ptr @finch.c.cimport.visitTop, ptr %t391) br label %endif9787 else9786: %t393 = load i32, ptr %a13 %t394 = icmp eq i32 %t393, 7 br i1 %t394, label %then9788, label %else9789 then9788: %t395 = load ptr, ptr %a1 %t396 = icmp eq ptr %t395, null br i1 %t396, label %panic9791, label %ok9792 panic9791: call void @finch_panic(ptr @.str.6594, i64 496, ptr @.str.6595) unreachable ok9792: %t397 = getelementptr inbounds %S.cimport.Importer, ptr %t395, i32 0, i32 0 %t398 = getelementptr inbounds %S.cimport.CImports, ptr %t397, i32 0, i32 1 %t399 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t399, ptr %a400 %t401 = call i64 @finch_map_find(ptr %t398, ptr %a400, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t402 = icmp sge i64 %t401, 0 %t403 = xor i1 %t402, true br i1 %t403, label %then9793, label %endif9795 then9793: %t404 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t404, ptr %a405 %t406 = call i64 @clang_getEnumConstantDeclValue(ptr %a405) %t407 = insertvalue %S.cimport.CConst zeroinitializer, i64 %t406, 1 %t408 = load ptr, ptr %a1 %t409 = icmp eq ptr %t408, null br i1 %t409, label %panic9796, label %ok9797 panic9796: call void @finch_panic(ptr @.str.6596, i64 497, ptr @.str.6597) unreachable ok9797: %t410 = getelementptr inbounds %S.cimport.Importer, ptr %t408, i32 0, i32 0 %t411 = getelementptr inbounds %S.cimport.CImports, ptr %t410, i32 0, i32 1 %t412 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t412, ptr %a413 store i32 0, ptr %a414 %t415 = call i64 @finch_map_slot(ptr %t411, ptr %a413, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a414) %t416 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t411, i32 0, i32 0 %t417 = load ptr, ptr %t416 %t418 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t417, i64 %t415 %t419 = load i32, ptr %a414 %t420 = icmp ne i32 %t419, 0 br i1 %t420, label %map.new9798, label %map.have9799 map.new9798: %t421 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t418, i32 0, i32 1 call void @finch_str_copy(ptr %t421, ptr %a413) %t422 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t418, i32 0, i32 2 store %S.cimport.CConst zeroinitializer, ptr %t422 br label %map.have9799 map.have9799: %t423 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t418, i32 0, i32 2 %t424 = load %S.cimport.CConst, ptr %t423 store %S.cimport.CConst %t407, ptr %t423 store %S.cimport.CConst %t424, ptr %a425 call void @finch.drop.S_cimport_CConst(ptr %a425) br label %endif9795 endif9795: br label %endif9790 else9789: %t426 = load i32, ptr %a13 %t427 = icmp eq i32 %t426, 501 br i1 %t427, label %then9800, label %endif9802 then9800: %t428 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t428, ptr %a429 %t430 = call i32 @clang_Cursor_isMacroBuiltin(ptr %a429) %t431 = icmp ne i32 %t430, 0 br label %logic.from9803 logic.from9803: br i1 %t431, label %logic.end9805, label %logic.rhs9804 logic.rhs9804: %t432 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t432, ptr %a433 %t434 = call i32 @clang_Cursor_isMacroFunctionLike(ptr %a433) %t435 = icmp ne i32 %t434, 0 br label %logic.rend9806 logic.rend9806: br label %logic.end9805 logic.end9805: %t436 = phi i1 [ true, %logic.from9803 ], [ %t435, %logic.rend9806 ] br i1 %t436, label %then9807, label %endif9809 then9807: call void @finch_str_drop(ptr %a9) ret void endif9809: %t437 = load ptr, ptr %a1 %t438 = load %S.C.CXCursor, ptr %a2 %t439 = call %S.cimport.Number @finch.cimport.macroValue(ptr %t437, %S.C.CXCursor %t438) store %S.cimport.Number %t439, ptr %a440 %t441 = getelementptr inbounds %S.cimport.Number, ptr %a440, i32 0, i32 1 %t442 = load i1, ptr %t441 br label %logic.from9810 logic.from9810: br i1 %t442, label %logic.rhs9811, label %logic.end9812 logic.rhs9811: %t443 = load ptr, ptr %a1 %t444 = icmp eq ptr %t443, null br i1 %t444, label %panic9813, label %ok9814 panic9813: call void @finch_panic(ptr @.str.6598, i64 504, ptr @.str.6599) unreachable ok9814: %t445 = getelementptr inbounds %S.cimport.Importer, ptr %t443, i32 0, i32 0 %t446 = getelementptr inbounds %S.cimport.CImports, ptr %t445, i32 0, i32 1 %t447 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t447, ptr %a448 %t449 = call i64 @finch_map_find(ptr %t446, ptr %a448, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t450 = icmp sge i64 %t449, 0 %t451 = xor i1 %t450, true br label %logic.rend9815 logic.rend9815: br label %logic.end9812 logic.end9812: %t452 = phi i1 [ false, %logic.from9810 ], [ %t451, %logic.rend9815 ] br i1 %t452, label %then9816, label %endif9818 then9816: %t453 = getelementptr inbounds %S.cimport.Number, ptr %a440, i32 0, i32 0 %t454 = load %S.cimport.CConst, ptr %t453 %t455 = load ptr, ptr %a1 %t456 = icmp eq ptr %t455, null br i1 %t456, label %panic9819, label %ok9820 panic9819: call void @finch_panic(ptr @.str.6600, i64 505, ptr @.str.6601) unreachable ok9820: %t457 = getelementptr inbounds %S.cimport.Importer, ptr %t455, i32 0, i32 0 %t458 = getelementptr inbounds %S.cimport.CImports, ptr %t457, i32 0, i32 1 %t459 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t459, ptr %a460 store i32 0, ptr %a461 %t462 = call i64 @finch_map_slot(ptr %t458, ptr %a460, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a461) %t463 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t458, i32 0, i32 0 %t464 = load ptr, ptr %t463 %t465 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t464, i64 %t462 %t466 = load i32, ptr %a461 %t467 = icmp ne i32 %t466, 0 br i1 %t467, label %map.new9821, label %map.have9822 map.new9821: %t468 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t465, i32 0, i32 1 call void @finch_str_copy(ptr %t468, ptr %a460) %t469 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t465, i32 0, i32 2 store %S.cimport.CConst zeroinitializer, ptr %t469 br label %map.have9822 map.have9822: %t470 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t465, i32 0, i32 2 store %S.cimport.CConst %t454, ptr %a471 call void @finch.copy.S_cimport_CConst(ptr %a472, ptr %a471) %t473 = load %S.cimport.CConst, ptr %a472 %t474 = load %S.cimport.CConst, ptr %t470 store %S.cimport.CConst %t473, ptr %t470 store %S.cimport.CConst %t474, ptr %a475 call void @finch.drop.S_cimport_CConst(ptr %a475) br label %endif9818 endif9818: call void @finch.drop.S_cimport_Number(ptr %a440) br label %endif9802 endif9802: br label %endif9790 endif9790: br label %endif9787 endif9787: br label %endif9764 endif9764: br label %endif9745 endif9745: br label %endif9704 endif9704: br label %endif9673 endif9673: call void @finch_str_drop(ptr %a9) ret void } define internal void @finch.drop.map_str_str(ptr %a) { entry: %a3 = alloca i64, align 16 %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 br label %n.cond9826 n.cond9826: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 br i1 %t5, label %n.body9827, label %n.end9828 n.body9827: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 br i1 %t11, label %entry.live9829, label %entry.next9830 entry.live9829: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 2 call void @finch_str_drop(ptr %t13) br label %entry.next9830 entry.next9830: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 br label %n.cond9826 n.end9828: call void @finch_map_free(ptr %a) ret void } define internal void @finch.drop.map_str_bool(ptr %a) { entry: %a3 = alloca i64, align 16 %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 br label %n.cond9831 n.cond9831: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 br i1 %t5, label %n.body9832, label %n.end9833 n.body9832: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 br i1 %t11, label %entry.live9834, label %entry.next9835 entry.live9834: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 2 br label %entry.next9835 entry.next9835: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 br label %n.cond9831 n.end9833: call void @finch_map_free(ptr %a) ret void } define internal void @finch.drop.S_cimport_Importer(ptr %a) { entry: %t1 = getelementptr inbounds %S.cimport.Importer, ptr %a, i32 0, i32 0 call void @finch.drop.S_cimport_CImports(ptr %t1) %t2 = getelementptr inbounds %S.cimport.Importer, ptr %a, i32 0, i32 2 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.cimport.Importer, ptr %a, i32 0, i32 3 call void @finch.drop.map_str_str(ptr %t3) %t4 = getelementptr inbounds %S.cimport.Importer, ptr %a, i32 0, i32 4 call void @finch.drop.map_str_bool(ptr %t4) ret void } define internal void @finch.drop.arr_ptr(ptr %a) { entry: call void @finch_arr_free(ptr %a) ret void } define internal { i1, %S.cimport.CImports, { ptr, i64, i64 } } @finch.cimport.importHeaders({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i1 %p3, { ptr, i64, i64 } %p4) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca i1, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca %S.cimport.Importer, align 16 %a12 = alloca %S.cimport.CImports, align 16 %a13 = alloca %S.cimport.CImports, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca i64, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca i64, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca i64, align 16 %a113 = alloca ptr, align 16 %a114 = alloca i64, align 16 %a122 = alloca %S.cimport.Header, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca %S.C.CXUnsavedFile, align 16 %a138 = alloca ptr, align 16 %a140 = alloca i64, align 16 %a153 = alloca i32, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca i64, align 16 %a183 = alloca i64, align 16 %a190 = alloca ptr, align 16 %a196 = alloca [32 x i8], align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca %S.C.CXCursor, align 16 %a321 = alloca %S.C.CXCursor, align 16 %a329 = alloca %S.cimport.CImports, align 16 %a330 = alloca %S.cimport.CImports, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store i1 %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 store %S.cimport.Importer zeroinitializer, ptr %a6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = icmp eq i64 %t8, 0 br i1 %t9, label %then9823, label %endif9825 then9823: %t10 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 0 %t11 = load %S.cimport.CImports, ptr %t10 store %S.cimport.CImports %t11, ptr %a12 call void @finch.copy.S_cimport_CImports(ptr %a13, ptr %a12) %t14 = load %S.cimport.CImports, ptr %a13 call void @finch.drop.S_cimport_Importer(ptr %a6) %t15 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t16 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t15, %S.cimport.CImports %t14, 1 ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t16 endif9825: %t17 = mul i64 3, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t18 = call ptr @finch_alloc(i64 %t17) %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 0 store { ptr, i64, i64 } { ptr @.str.6602, i64 2, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 1 store { ptr, i64, i64 } { ptr @.str.6603, i64 1, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 2 store { ptr, i64, i64 } { ptr @.str.6604, i64 10, i64 0 }, ptr %t21 %t22 = insertvalue { ptr, i64, i64 } undef, ptr %t18, 0 %t23 = insertvalue { ptr, i64, i64 } %t22, i64 3, 1 %t24 = insertvalue { ptr, i64, i64 } %t23, i64 3, 2 store { ptr, i64, i64 } %t24, ptr %a25 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t27 = load i64, ptr %t26 %t28 = icmp sgt i64 %t27, 0 br i1 %t28, label %then9836, label %endif9838 then9836: %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t30 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.6605, i64 9, i64 0 }, ptr %a32 store { ptr, i64, i64 } %t30, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 %t35 = load i64, ptr %t29 %t36 = add i64 %t35, 1 call void @finch_arr_reserve(ptr %a25, i64 %t36, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t37 = load ptr, ptr %a25 %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 %t35 store { ptr, i64, i64 } %t34, ptr %t38 store i64 %t36, ptr %t29 br label %endif9838 endif9838: %t39 = load i1, ptr %a4 br i1 %t39, label %then9839, label %endif9841 then9839: %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t41 = load i64, ptr %t40 %t42 = add i64 %t41, 1 call void @finch_arr_reserve(ptr %a25, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t43 = load ptr, ptr %a25 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 store { ptr, i64, i64 } { ptr @.str.6606, i64 19, i64 0 }, ptr %t44 store i64 %t42, ptr %t40 br label %endif9841 endif9841: store i64 0, ptr %a45 br label %each.cond9842 each.cond9842: %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = load i64, ptr %a45 %t49 = icmp slt i64 %t48, %t47 br i1 %t49, label %each.body9843, label %each.end9845 each.body9843: %t50 = load ptr, ptr %a2 %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t48 %t52 = load { ptr, i64, i64 }, ptr %t51 store { ptr, i64, i64 } %t52, ptr %a53 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t55 = load { ptr, i64, i64 }, ptr %a53 store { ptr, i64, i64 } { ptr @.str.6607, i64 2, i64 0 }, ptr %a57 store { ptr, i64, i64 } %t55, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a56 %t60 = load i64, ptr %t54 %t61 = add i64 %t60, 1 call void @finch_arr_reserve(ptr %a25, i64 %t61, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t62 = load ptr, ptr %a25 %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i64 %t60 store { ptr, i64, i64 } %t59, ptr %t63 store i64 %t61, ptr %t54 br label %each.step9844 each.step9844: %t64 = load i64, ptr %a45 %t65 = add i64 %t64, 1 store i64 %t65, ptr %a45 br label %each.cond9842 each.end9845: %t66 = load { ptr, i64, i64 }, ptr %a5 %t67 = call { ptr, i64, i64 } @finch.cimport.systemIncludeArgs({ ptr, i64, i64 } %t66) store { ptr, i64, i64 } %t67, ptr %a68 store i64 0, ptr %a69 br label %each.cond9846 each.cond9846: %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %a68, i32 0, i32 1 %t71 = load i64, ptr %t70 %t72 = load i64, ptr %a69 %t73 = icmp slt i64 %t72, %t71 br i1 %t73, label %each.body9847, label %each.end9849 each.body9847: %t74 = load ptr, ptr %a68 %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i64 %t72 %t76 = load { ptr, i64, i64 }, ptr %t75 store { ptr, i64, i64 } %t76, ptr %a77 %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t79 = load { ptr, i64, i64 }, ptr %a77 store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_copy(ptr %a81, ptr %a80) %t82 = load { ptr, i64, i64 }, ptr %a81 %t83 = load i64, ptr %t78 %t84 = add i64 %t83, 1 call void @finch_arr_reserve(ptr %a25, i64 %t84, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t85 = load ptr, ptr %a25 %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i64 %t83 store { ptr, i64, i64 } %t82, ptr %t86 store i64 %t84, ptr %t78 br label %each.step9848 each.step9848: %t87 = load i64, ptr %a69 %t88 = add i64 %t87, 1 store i64 %t88, ptr %a69 br label %each.cond9846 each.end9849: call void @finch.drop.arr_str(ptr %a68) store { ptr, i64, i64 } zeroinitializer, ptr %a89 %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t91 = load i64, ptr %t90 store i64 0, ptr %a92 br label %for.cond9850 for.cond9850: %t93 = load i64, ptr %a92 %t94 = icmp slt i64 %t93, %t91 br i1 %t94, label %for.body9851, label %for.end9853 for.body9851: %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a89, i32 0, i32 1 %t96 = load i64, ptr %a92 %t97 = load { ptr, i64, i64 }, ptr %a25 %t98 = extractvalue { ptr, i64, i64 } %t97, 1 %t99 = icmp uge i64 %t96, %t98 br i1 %t99, label %range9854, label %inrange9855 range9854: call void @finch_panic_index(ptr @.str.6608, i64 532, i64 %t96, i64 %t98) unreachable inrange9855: %t100 = extractvalue { ptr, i64, i64 } %t97, 0 %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t100, i64 %t96 %t102 = load { ptr, i64, i64 }, ptr %t101 %t103 = extractvalue { ptr, i64, i64 } %t102, 0 %t104 = icmp eq ptr %t103, null %t105 = select i1 %t104, ptr @.str.6609, ptr %t103 %t106 = load i64, ptr %t95 %t107 = add i64 %t106, 1 call void @finch_arr_reserve(ptr %a89, i64 %t107, i64 ptrtoint (ptr getelementptr (ptr, ptr null, i32 1) to i64)) %t108 = load ptr, ptr %a89 %t109 = getelementptr inbounds ptr, ptr %t108, i64 %t106 store ptr %t105, ptr %t109 store i64 %t107, ptr %t95 br label %for.step9852 for.step9852: %t110 = load i64, ptr %a92 %t111 = add i64 %t110, 1 store i64 %t111, ptr %a92 br label %for.cond9850 for.end9853: %t112 = call ptr @clang_createIndex(i32 0, i32 0) store ptr %t112, ptr %a113 store i64 0, ptr %a114 br label %each.cond9856 each.cond9856: %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t116 = load i64, ptr %t115 %t117 = load i64, ptr %a114 %t118 = icmp slt i64 %t117, %t116 br i1 %t118, label %each.body9857, label %each.end9859 each.body9857: %t119 = load ptr, ptr %a1 %t120 = getelementptr inbounds %S.cimport.Header, ptr %t119, i64 %t117 %t121 = load %S.cimport.Header, ptr %t120 store %S.cimport.Header %t121, ptr %a122 %t123 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 %t124 = load { ptr, i64, i64 }, ptr %t123 store { ptr, i64, i64 } { ptr @.str.6610, i64 10, i64 0 }, ptr %a126 store { ptr, i64, i64 } %t124, ptr %a127 call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) %t128 = load { ptr, i64, i64 }, ptr %a125 store { ptr, i64, i64 } %t128, ptr %a130 store { ptr, i64, i64 } { ptr @.str.6611, i64 2, i64 0 }, ptr %a131 call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) store { ptr, i64, i64 } %t128, ptr %a132 call void @finch_str_drop(ptr %a132) %t133 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t133, ptr %a134 %t135 = load { ptr, i64, i64 }, ptr %a134 %t136 = call %S.C.CXUnsavedFile @finch.host.unsavedFile({ ptr, i64, i64 } { ptr @.str.6612, i64 14, i64 0 }, { ptr, i64, i64 } %t135) store %S.C.CXUnsavedFile %t136, ptr %a137 store ptr null, ptr %a138 %t139 = or i64 1, 64 store i64 %t139, ptr %a140 %t141 = load ptr, ptr %a113 %t142 = extractvalue { ptr, i64, i64 } { ptr @.str.6613, i64 14, i64 0 }, 0 %t143 = icmp eq ptr %t142, null %t144 = select i1 %t143, ptr @.str.6614, ptr %t142 %t145 = load { ptr, i64, i64 }, ptr %a89 %t146 = extractvalue { ptr, i64, i64 } %t145, 0 %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %a89, i32 0, i32 1 %t148 = load i64, ptr %t147 %t149 = trunc i64 %t148 to i32 %t150 = load i64, ptr %a140 %t151 = trunc i64 %t150 to i32 %t152 = call i32 @clang_parseTranslationUnit2(ptr %t141, ptr %t144, ptr %t146, i32 %t149, ptr %a137, i32 1, i32 %t151, ptr %a138) store i32 %t152, ptr %a153 %t154 = load i32, ptr %a153 %t155 = icmp ne i32 %t154, 0 br label %logic.from9860 logic.from9860: br i1 %t155, label %logic.end9862, label %logic.rhs9861 logic.rhs9861: %t156 = load ptr, ptr %a138 %t157 = icmp eq ptr %t156, null br label %logic.rend9863 logic.rend9863: br label %logic.end9862 logic.end9862: %t158 = phi i1 [ true, %logic.from9860 ], [ %t157, %logic.rend9863 ] br i1 %t158, label %then9864, label %endif9866 then9864: %t159 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 %t160 = load { ptr, i64, i64 }, ptr %t159 store { ptr, i64, i64 } %t160, ptr %a162 store { ptr, i64, i64 } { ptr @.str.6615, i64 33, i64 0 }, ptr %a163 call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) %t164 = load { ptr, i64, i64 }, ptr %a161 %t165 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 %t166 = load { ptr, i64, i64 }, ptr %t165 store { ptr, i64, i64 } %t164, ptr %a168 store { ptr, i64, i64 } %t166, ptr %a169 call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) store { ptr, i64, i64 } %t164, ptr %a170 call void @finch_str_drop(ptr %a170) %t171 = load { ptr, i64, i64 }, ptr %a167 store { ptr, i64, i64 } %t171, ptr %a173 store { ptr, i64, i64 } { ptr @.str.6616, i64 1, i64 0 }, ptr %a174 call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174) store { ptr, i64, i64 } %t171, ptr %a175 call void @finch_str_drop(ptr %a175) %t176 = load { ptr, i64, i64 }, ptr %a172 call void @finch_str_drop(ptr %a134) call void @finch.drop.arr_ptr(ptr %a89) call void @finch.drop.arr_str(ptr %a25) call void @finch.drop.S_cimport_Importer(ptr %a6) %t177 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t176, 2 ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t177 endif9866: %t178 = load ptr, ptr %a138 %t179 = call i32 @clang_getNumDiagnostics(ptr %t178) %t180 = zext i32 %t179 to i64 store i64 %t180, ptr %a181 %t182 = load i64, ptr %a181 store i64 0, ptr %a183 br label %for.cond9867 for.cond9867: %t184 = load i64, ptr %a183 %t185 = icmp slt i64 %t184, %t182 br i1 %t185, label %for.body9868, label %for.end9870 for.body9868: %t186 = load ptr, ptr %a138 %t187 = load i64, ptr %a183 %t188 = trunc i64 %t187 to i32 %t189 = call ptr @clang_getDiagnostic(ptr %t186, i32 %t188) store ptr %t189, ptr %a190 %t191 = load ptr, ptr %a190 %t192 = call i32 @clang_getDiagnosticSeverity(ptr %t191) %t193 = icmp sge i32 %t192, 3 br i1 %t193, label %then9871, label %endif9873 then9871: %t194 = load ptr, ptr %a190 %t195 = call [2 x i64] @clang_getDiagnosticSpelling(ptr %t194) store [2 x i64] %t195, ptr %a196 %t197 = load %S.C.CXString, ptr %a196 %t198 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t197) store { ptr, i64, i64 } %t198, ptr %a199 %t200 = load ptr, ptr %a190 call void @clang_disposeDiagnostic(ptr %t200) %t201 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } %t201, ptr %a202 store { ptr, i64, i64 } { ptr @.str.6618, i64 14, i64 0 }, ptr %a204 %t205 = call i64 @finch_str_find(ptr %a202, ptr %a204) %t206 = icmp sge i64 %t205, 0 br i1 %t206, label %then9874, label %endif9876 then9874: %t207 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } %t207, ptr %a208 %t210 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } %t210, ptr %a211 %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %a199, i32 0, i32 1 %t214 = load i64, ptr %t213 call void @finch_str_sub(ptr %a212, ptr %a211, i64 1, i64 %t214, ptr @.str.6620, i64 552) %t215 = load { ptr, i64, i64 }, ptr %a212 store { ptr, i64, i64 } %t215, ptr %a216 store { ptr, i64, i64 } { ptr @.str.6622, i64 1, i64 0 }, ptr %a218 %t219 = call i64 @finch_str_find(ptr %a216, ptr %a218) store { ptr, i64, i64 } %t215, ptr %a220 call void @finch_str_drop(ptr %a220) %t221 = add i64 %t219, 1 call void @finch_str_sub(ptr %a209, ptr %a208, i64 1, i64 %t221, ptr @.str.6619, i64 552) %t222 = load { ptr, i64, i64 }, ptr %a209 store { ptr, i64, i64 } %t222, ptr %a223 %t224 = load { ptr, i64, i64 }, ptr %a223 %t225 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 %t226 = load { ptr, i64, i64 }, ptr %t225 store { ptr, i64, i64 } %t224, ptr %a227 store { ptr, i64, i64 } %t226, ptr %a228 %t229 = call i32 @finch_str_eq(ptr %a227, ptr %a228) %t230 = icmp ne i32 %t229, 0 br i1 %t230, label %then9877, label %endif9879 then9877: %t231 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 %t232 = load { ptr, i64, i64 }, ptr %t231 store { ptr, i64, i64 } %t232, ptr %a234 store { ptr, i64, i64 } { ptr @.str.6623, i64 34, i64 0 }, ptr %a235 call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) %t236 = load { ptr, i64, i64 }, ptr %a233 %t237 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 %t238 = load { ptr, i64, i64 }, ptr %t237 store { ptr, i64, i64 } %t236, ptr %a240 store { ptr, i64, i64 } %t238, ptr %a241 call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) store { ptr, i64, i64 } %t236, ptr %a242 call void @finch_str_drop(ptr %a242) %t243 = load { ptr, i64, i64 }, ptr %a239 store { ptr, i64, i64 } %t243, ptr %a245 store { ptr, i64, i64 } { ptr @.str.6624, i64 1, i64 0 }, ptr %a246 call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) store { ptr, i64, i64 } %t243, ptr %a247 call void @finch_str_drop(ptr %a247) %t248 = load { ptr, i64, i64 }, ptr %a244 call void @finch_str_drop(ptr %a223) call void @finch_str_drop(ptr %a199) call void @finch_str_drop(ptr %a134) call void @finch.drop.arr_ptr(ptr %a89) call void @finch.drop.arr_str(ptr %a25) call void @finch.drop.S_cimport_Importer(ptr %a6) %t249 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t248, 2 ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t249 endif9879: %t250 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 %t251 = load { ptr, i64, i64 }, ptr %t250 store { ptr, i64, i64 } %t251, ptr %a253 store { ptr, i64, i64 } { ptr @.str.6625, i64 34, i64 0 }, ptr %a254 call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) %t255 = load { ptr, i64, i64 }, ptr %a252 %t256 = load { ptr, i64, i64 }, ptr %a223 store { ptr, i64, i64 } %t255, ptr %a258 store { ptr, i64, i64 } %t256, ptr %a259 call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) store { ptr, i64, i64 } %t255, ptr %a260 call void @finch_str_drop(ptr %a260) %t261 = load { ptr, i64, i64 }, ptr %a257 store { ptr, i64, i64 } %t261, ptr %a263 store { ptr, i64, i64 } { ptr @.str.6626, i64 10, i64 0 }, ptr %a264 call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) store { ptr, i64, i64 } %t261, ptr %a265 call void @finch_str_drop(ptr %a265) %t266 = load { ptr, i64, i64 }, ptr %a262 %t267 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 %t268 = load { ptr, i64, i64 }, ptr %t267 store { ptr, i64, i64 } %t266, ptr %a270 store { ptr, i64, i64 } %t268, ptr %a271 call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) store { ptr, i64, i64 } %t266, ptr %a272 call void @finch_str_drop(ptr %a272) %t273 = load { ptr, i64, i64 }, ptr %a269 store { ptr, i64, i64 } %t273, ptr %a275 store { ptr, i64, i64 } { ptr @.str.6627, i64 60, i64 0 }, ptr %a276 call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276) store { ptr, i64, i64 } %t273, ptr %a277 call void @finch_str_drop(ptr %a277) %t278 = load { ptr, i64, i64 }, ptr %a274 call void @finch_str_drop(ptr %a223) call void @finch_str_drop(ptr %a199) call void @finch_str_drop(ptr %a134) call void @finch.drop.arr_ptr(ptr %a89) call void @finch.drop.arr_str(ptr %a25) call void @finch.drop.S_cimport_Importer(ptr %a6) %t279 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t278, 2 ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t279 endif9876: %t280 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 %t281 = load { ptr, i64, i64 }, ptr %t280 store { ptr, i64, i64 } %t281, ptr %a283 store { ptr, i64, i64 } { ptr @.str.6628, i64 19, i64 0 }, ptr %a284 call void @finch_str_concat(ptr %a282, ptr %a283, ptr %a284) %t285 = load { ptr, i64, i64 }, ptr %a282 %t286 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 %t287 = load { ptr, i64, i64 }, ptr %t286 store { ptr, i64, i64 } %t285, ptr %a289 store { ptr, i64, i64 } %t287, ptr %a290 call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) store { ptr, i64, i64 } %t285, ptr %a291 call void @finch_str_drop(ptr %a291) %t292 = load { ptr, i64, i64 }, ptr %a288 store { ptr, i64, i64 } %t292, ptr %a294 store { ptr, i64, i64 } { ptr @.str.6629, i64 16, i64 0 }, ptr %a295 call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295) store { ptr, i64, i64 } %t292, ptr %a296 call void @finch_str_drop(ptr %a296) %t297 = load { ptr, i64, i64 }, ptr %a293 %t298 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } %t297, ptr %a300 store { ptr, i64, i64 } %t298, ptr %a301 call void @finch_str_concat(ptr %a299, ptr %a300, ptr %a301) store { ptr, i64, i64 } %t297, ptr %a302 call void @finch_str_drop(ptr %a302) %t303 = load { ptr, i64, i64 }, ptr %a299 call void @finch_str_drop(ptr %a199) call void @finch_str_drop(ptr %a134) call void @finch.drop.arr_ptr(ptr %a89) call void @finch.drop.arr_str(ptr %a25) call void @finch.drop.S_cimport_Importer(ptr %a6) %t304 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t303, 2 ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t304 endif9873: %t305 = load ptr, ptr %a190 call void @clang_disposeDiagnostic(ptr %t305) br label %for.step9869 for.step9869: %t306 = load i64, ptr %a183 %t307 = add i64 %t306, 1 store i64 %t307, ptr %a183 br label %for.cond9867 for.end9870: %t308 = load ptr, ptr %a138 %t309 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 1 store ptr %t308, ptr %t309 %t310 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 %t311 = load { ptr, i64, i64 }, ptr %t310 %t312 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 2 store { ptr, i64, i64 } %t311, ptr %a313 call void @finch_str_copy(ptr %a314, ptr %a313) %t315 = load { ptr, i64, i64 }, ptr %a314 %t316 = load { ptr, i64, i64 }, ptr %t312 store { ptr, i64, i64 } %t315, ptr %t312 store { ptr, i64, i64 } %t316, ptr %a317 call void @finch_str_drop(ptr %a317) %t319 = load ptr, ptr %a138 call void @clang_getTranslationUnitCursor(ptr sret(%S.C.CXCursor) align 16 %a318, ptr %t319) %t320 = load %S.C.CXCursor, ptr %a318 store %S.C.CXCursor %t320, ptr %a321 %t322 = call i32 @clang_visitChildren(ptr %a321, ptr @finch.c.cimport.visitTop, ptr %a6) %t323 = load ptr, ptr %a138 call void @clang_disposeTranslationUnit(ptr %t323) call void @finch_str_drop(ptr %a134) br label %each.step9858 each.step9858: %t324 = load i64, ptr %a114 %t325 = add i64 %t324, 1 store i64 %t325, ptr %a114 br label %each.cond9856 each.end9859: %t326 = load ptr, ptr %a113 call void @clang_disposeIndex(ptr %t326) %t327 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 0 %t328 = load %S.cimport.CImports, ptr %t327 store %S.cimport.CImports %t328, ptr %a329 call void @finch.copy.S_cimport_CImports(ptr %a330, ptr %a329) %t331 = load %S.cimport.CImports, ptr %a330 call void @finch.drop.arr_ptr(ptr %a89) call void @finch.drop.arr_str(ptr %a25) call void @finch.drop.S_cimport_Importer(ptr %a6) %t332 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t333 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t332, %S.cimport.CImports %t331, 1 ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t333 } define internal %S.C.CXUnsavedFile @finch.host.unsavedFile({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 %t4 = extractvalue { ptr, i64, i64 } %t3, 0 %t5 = icmp eq ptr %t4, null %t6 = select i1 %t5, ptr @.str.6630, ptr %t4 %t7 = insertvalue %S.C.CXUnsavedFile zeroinitializer, ptr %t6, 0 %t8 = load { ptr, i64, i64 }, ptr %a2 %t9 = extractvalue { ptr, i64, i64 } %t8, 0 %t10 = icmp eq ptr %t9, null %t11 = select i1 %t10, ptr @.str.6631, ptr %t9 %t12 = insertvalue %S.C.CXUnsavedFile %t7, ptr %t11, 1 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = insertvalue %S.C.CXUnsavedFile %t12, i64 %t14, 2 ret %S.C.CXUnsavedFile %t15 } define internal { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 store { ptr, i64, i64 } { ptr @.str.6634, i64 1, i64 0 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.6635, i64 4, i64 0 }, ptr %a6 call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } { ptr @.str.6632, i64 1, i64 0 }, ptr %a9 store { ptr, i64, i64 } %t7, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) store { ptr, i64, i64 } %t7, ptr %a11 call void @finch_str_drop(ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t12, ptr %a14 store { ptr, i64, i64 } { ptr @.str.6636, i64 1, i64 0 }, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) store { ptr, i64, i64 } %t12, ptr %a16 call void @finch_str_drop(ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a13 ret { ptr, i64, i64 } %t17 } define internal i64 @finch.host.run({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a4 call void @finch_str_copy(ptr %a3, ptr %a4) %t5 = call i64 @finch_shell(ptr %a3) call void @finch_str_drop(ptr %a3) ret i64 %t5 } define internal { ptr, i64, i64 } @finch.host.nullDevice() { entry: ret { ptr, i64, i64 } { ptr @.str.6637, i64 9, i64 0 } } define internal { ptr, i64, i64 } @finch.host.tempDir() { entry: %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6638, i64 6, i64 0 }, 0 %t2 = icmp eq ptr %t1, null %t3 = select i1 %t2, ptr @.str.6639, ptr %t1 %t4 = call ptr @getenv(ptr %t3) store { ptr, i64, i64 } zeroinitializer, ptr %a5 call void @finch_str_from_c(ptr %a5, ptr %t4) %t6 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t6, ptr %a7 call void @finch_str_copy(ptr %a8, ptr %a7) %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = icmp sgt i64 %t12, 0 br i1 %t13, label %then9880, label %endif9882 then9880: %t14 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.6641, i64 1, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_ends(ptr %a15, ptr %a17) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %then9883, label %endif9885 then9883: %t20 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t20, ptr %a21 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = sub i64 %t24, 1 call void @finch_str_sub(ptr %a22, ptr %a21, i64 0, i64 %t25, ptr @.str.6642, i64 31) %t26 = load { ptr, i64, i64 }, ptr %a22 call void @finch_str_drop(ptr %a10) ret { ptr, i64, i64 } %t26 endif9885: %t27 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t27 endif9882: call void @finch_str_drop(ptr %a10) ret { ptr, i64, i64 } { ptr @.str.6643, i64 4, i64 0 } } define internal { ptr, i64, i64 } @finch.host.pathSeparator() { entry: ret { ptr, i64, i64 } { ptr @.str.6644, i64 1, i64 0 } } define internal i64 @finch.host.pid() { entry: %t1 = call i32 @getpid() %t2 = sext i32 %t1 to i64 ret i64 %t2 } define internal { ptr, i64, i64 } @finch.host.cwd() { entry: %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6645, i64 3, i64 0 }, 0 %t2 = icmp eq ptr %t1, null %t3 = select i1 %t2, ptr @.str.6646, ptr %t1 %t4 = call ptr @getenv(ptr %t3) store { ptr, i64, i64 } zeroinitializer, ptr %a5 call void @finch_str_from_c(ptr %a5, ptr %t4) %t6 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t6, ptr %a7 call void @finch_str_copy(ptr %a8, ptr %a7) %t9 = load { ptr, i64, i64 }, ptr %a8 ret { ptr, i64, i64 } %t9 } define internal { ptr, i64, i64 } @finch.host.cacheDir() { entry: %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6647, i64 14, i64 0 }, 0 %t2 = icmp eq ptr %t1, null %t3 = select i1 %t2, ptr @.str.6648, ptr %t1 %t4 = call ptr @getenv(ptr %t3) store { ptr, i64, i64 } zeroinitializer, ptr %a5 call void @finch_str_from_c(ptr %a5, ptr %t4) %t6 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t6, ptr %a7 call void @finch_str_copy(ptr %a8, ptr %a7) %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = icmp sgt i64 %t12, 0 br i1 %t13, label %then9886, label %endif9888 then9886: %t14 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t14, ptr %a16 store { ptr, i64, i64 } { ptr @.str.6649, i64 6, i64 0 }, ptr %a17 call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a15 call void @finch_str_drop(ptr %a10) ret { ptr, i64, i64 } %t18 endif9888: %t19 = extractvalue { ptr, i64, i64 } { ptr @.str.6650, i64 4, i64 0 }, 0 %t20 = icmp eq ptr %t19, null %t21 = select i1 %t20, ptr @.str.6651, ptr %t19 %t22 = call ptr @getenv(ptr %t21) store { ptr, i64, i64 } zeroinitializer, ptr %a23 call void @finch_str_from_c(ptr %a23, ptr %t22) %t24 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_copy(ptr %a26, ptr %a25) %t27 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t27, ptr %a28 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1 %t30 = load i64, ptr %t29 %t31 = icmp sgt i64 %t30, 0 br i1 %t31, label %then9889, label %endif9891 then9889: %t32 = load { ptr, i64, i64 }, ptr %a28 store { ptr, i64, i64 } %t32, ptr %a34 store { ptr, i64, i64 } { ptr @.str.6652, i64 13, i64 0 }, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) %t36 = load { ptr, i64, i64 }, ptr %a33 call void @finch_str_drop(ptr %a28) call void @finch_str_drop(ptr %a10) ret { ptr, i64, i64 } %t36 endif9891: %t37 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t37, ptr %a39 store { ptr, i64, i64 } { ptr @.str.6653, i64 12, i64 0 }, ptr %a40 call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) store { ptr, i64, i64 } %t37, ptr %a41 call void @finch_str_drop(ptr %a41) %t42 = load { ptr, i64, i64 }, ptr %a38 call void @finch_str_drop(ptr %a28) call void @finch_str_drop(ptr %a10) ret { ptr, i64, i64 } %t42 } define internal void @finch.host.binaryStdio() { entry: ret void } define internal void @finch.host.makeDirs({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 %t3 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t2) store { ptr, i64, i64 } { ptr @.str.6654, i64 9, i64 0 }, ptr %a5 store { ptr, i64, i64 } %t3, ptr %a6 call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) store { ptr, i64, i64 } %t3, ptr %a7 call void @finch_str_drop(ptr %a7) %t8 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t8, ptr %a10 call void @finch_str_copy(ptr %a9, ptr %a10) %t11 = call i64 @finch_shell(ptr %a9) call void @finch_str_drop(ptr %a9) store { ptr, i64, i64 } %t8, ptr %a12 call void @finch_str_drop(ptr %a12) ret void } define internal void @finch.host.remove({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a4 call void @finch_str_copy(ptr %a3, ptr %a4) %t5 = call i32 @finch_delete_file(ptr %a3) call void @finch_str_drop(ptr %a3) %t6 = icmp ne i32 %t5, 0 ret void } define internal void @finch.host.removeTree({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 %t3 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t2) store { ptr, i64, i64 } { ptr @.str.6655, i64 7, i64 0 }, ptr %a5 store { ptr, i64, i64 } %t3, ptr %a6 call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) store { ptr, i64, i64 } %t3, ptr %a7 call void @finch_str_drop(ptr %a7) %t8 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t8, ptr %a10 call void @finch_str_copy(ptr %a9, ptr %a10) %t11 = call i64 @finch_shell(ptr %a9) call void @finch_str_drop(ptr %a9) store { ptr, i64, i64 } %t8, ptr %a12 call void @finch_str_drop(ptr %a12) ret void } define internal void @finch.host.move({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 %t4 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t3) store { ptr, i64, i64 } { ptr @.str.6656, i64 3, i64 0 }, ptr %a6 store { ptr, i64, i64 } %t4, ptr %a7 call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) store { ptr, i64, i64 } %t4, ptr %a8 call void @finch_str_drop(ptr %a8) %t9 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t9, ptr %a11 store { ptr, i64, i64 } { ptr @.str.6657, i64 1, i64 0 }, ptr %a12 call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) store { ptr, i64, i64 } %t9, ptr %a13 call void @finch_str_drop(ptr %a13) %t14 = load { ptr, i64, i64 }, ptr %a10 %t15 = load { ptr, i64, i64 }, ptr %a2 %t16 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t15) store { ptr, i64, i64 } %t14, ptr %a18 store { ptr, i64, i64 } %t16, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) store { ptr, i64, i64 } %t14, ptr %a20 call void @finch_str_drop(ptr %a20) store { ptr, i64, i64 } %t16, ptr %a21 call void @finch_str_drop(ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a17 store { ptr, i64, i64 } %t22, ptr %a24 call void @finch_str_copy(ptr %a23, ptr %a24) %t25 = call i64 @finch_shell(ptr %a23) call void @finch_str_drop(ptr %a23) store { ptr, i64, i64 } %t22, ptr %a26 call void @finch_str_drop(ptr %a26) ret void } define internal { ptr, i64, i64 } @finch.platform.firstLine({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_trim(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.6660, i64 1, i64 0 }, ptr %a8 call void @finch_str_split(ptr %a9, ptr %a6, ptr %a8) %t10 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t5, ptr %a11 call void @finch_str_drop(ptr %a11) store { ptr, i64, i64 } %t10, ptr %a12 %t13 = load { ptr, i64, i64 }, ptr %a12 %t14 = extractvalue { ptr, i64, i64 } %t13, 1 %t15 = icmp uge i64 0, %t14 br i1 %t15, label %range9892, label %inrange9893 range9892: call void @finch_panic_index(ptr @.str.6661, i64 21, i64 0, i64 %t14) unreachable inrange9893: %t16 = extractvalue { ptr, i64, i64 } %t13, 0 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 0 %t18 = load { ptr, i64, i64 }, ptr %t17 store { ptr, i64, i64 } %t18, ptr %a19 call void @finch_str_trim(ptr %a20, ptr %a19) %t21 = load { ptr, i64, i64 }, ptr %a20 call void @finch.drop.arr_str(ptr %a12) ret { ptr, i64, i64 } %t21 } define internal { ptr, i64, i64 } @finch.platform.hostTriple() { entry: %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %t1 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t1, ptr %a3 store { ptr, i64, i64 } { ptr @.str.6663, i64 14, i64 0 }, ptr %a4 call void @finch_str_concat(ptr %a2, ptr %a3, ptr %a4) store { ptr, i64, i64 } %t1, ptr %a5 call void @finch_str_drop(ptr %a5) %t6 = load { ptr, i64, i64 }, ptr %a2 %t7 = call i64 @finch.host.pid() call void @finch_str_from_int(ptr %a8, i64 %t7) %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t6, ptr %a11 store { ptr, i64, i64 } %t9, ptr %a12 call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) store { ptr, i64, i64 } %t6, ptr %a13 call void @finch_str_drop(ptr %a13) store { ptr, i64, i64 } %t9, ptr %a14 call void @finch_str_drop(ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t15, ptr %a17 store { ptr, i64, i64 } { ptr @.str.6664, i64 4, i64 0 }, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) store { ptr, i64, i64 } %t15, ptr %a19 call void @finch_str_drop(ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t20, ptr %a21 %t22 = load { ptr, i64, i64 }, ptr %a21 %t23 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t22) store { ptr, i64, i64 } { ptr @.str.6665, i64 21, i64 0 }, ptr %a25 store { ptr, i64, i64 } %t23, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) store { ptr, i64, i64 } %t23, ptr %a27 call void @finch_str_drop(ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t28, ptr %a30 store { ptr, i64, i64 } { ptr @.str.6666, i64 4, i64 0 }, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) store { ptr, i64, i64 } %t28, ptr %a32 call void @finch_str_drop(ptr %a32) %t33 = load { ptr, i64, i64 }, ptr %a29 %t34 = call { ptr, i64, i64 } @finch.host.nullDevice() store { ptr, i64, i64 } %t33, ptr %a36 store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) store { ptr, i64, i64 } %t33, ptr %a38 call void @finch_str_drop(ptr %a38) store { ptr, i64, i64 } %t34, ptr %a39 call void @finch_str_drop(ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a35 %t41 = call i64 @finch.host.run({ ptr, i64, i64 } %t40) store { ptr, i64, i64 } %t40, ptr %a42 call void @finch_str_drop(ptr %a42) %t43 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t43, ptr %a44 store { ptr, i64, i64 } zeroinitializer, ptr %a45 store { ptr, i64, i64 } zeroinitializer, ptr %a46 %t47 = call i32 @finch_try_read_file(ptr %a45, ptr %a44, ptr %a46) %t48 = icmp eq i32 %t47, 0 %t49 = load { ptr, i64, i64 }, ptr %a46 %t50 = load { ptr, i64, i64 }, ptr %a45 br i1 %t48, label %or.failed9894, label %or.ok9895 or.failed9894: store { ptr, i64, i64 } %t49, ptr %a51 call void @finch_str_drop(ptr %a51) br label %or.bend9896 or.bend9896: br label %or.end9897 or.ok9895: br label %or.end9897 or.end9897: %t52 = phi { ptr, i64, i64 } [ { ptr @.str.6667, i64 0, i64 0 }, %or.bend9896 ], [ %t50, %or.ok9895 ] store { ptr, i64, i64 } %t52, ptr %a53 %t54 = load { ptr, i64, i64 }, ptr %a21 call void @finch.host.remove({ ptr, i64, i64 } %t54) %t55 = load { ptr, i64, i64 }, ptr %a53 store { ptr, i64, i64 } %t55, ptr %a56 call void @finch_str_trim(ptr %a57, ptr %a56) %t58 = load { ptr, i64, i64 }, ptr %a57 %t59 = extractvalue { ptr, i64, i64 } %t58, 1 store { ptr, i64, i64 } %t58, ptr %a60 call void @finch_str_drop(ptr %a60) %t61 = icmp eq i64 %t59, 0 br i1 %t61, label %then9898, label %endif9900 then9898: call void @finch_str_drop(ptr %a53) call void @finch_str_drop(ptr %a21) ret { ptr, i64, i64 } { ptr @.str.6669, i64 24, i64 0 } endif9900: %t62 = load { ptr, i64, i64 }, ptr %a53 %t63 = call { ptr, i64, i64 } @finch.platform.firstLine({ ptr, i64, i64 } %t62) call void @finch_str_drop(ptr %a53) call void @finch_str_drop(ptr %a21) ret { ptr, i64, i64 } %t63 } define internal %S.platform.Target @finch.platform.select({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca %S.platform.Target, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca i1, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca i1, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca i1, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = call { ptr, i64, i64 } @finch.platform.hostTriple() store { ptr, i64, i64 } %t2, ptr %a3 %t4 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch_str_copy(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t10 = load i64, ptr %t9 %t11 = icmp eq i64 %t10, 0 br i1 %t11, label %then9901, label %else9902 then9901: %t12 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t12, ptr %a13 call void @finch_str_copy(ptr %a14, ptr %a13) %t15 = load { ptr, i64, i64 }, ptr %a14 %t16 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t15, ptr %a8 store { ptr, i64, i64 } %t16, ptr %a17 call void @finch_str_drop(ptr %a17) br label %endif9903 else9902: %t18 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } { ptr @.str.6670, i64 7, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 br i1 %t22, label %then9904, label %else9905 then9904: %t23 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.6671, i64 18, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t23, ptr %a24 call void @finch_str_drop(ptr %a24) br label %endif9906 else9905: %t25 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.6672, i64 5, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 br i1 %t29, label %then9907, label %else9908 then9907: %t30 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.6673, i64 24, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t30, ptr %a31 call void @finch_str_drop(ptr %a31) br label %endif9909 else9908: %t32 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t32, ptr %a33 store { ptr, i64, i64 } { ptr @.str.6674, i64 5, i64 0 }, ptr %a34 %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) %t36 = icmp ne i32 %t35, 0 br label %logic.from9910 logic.from9910: br i1 %t36, label %logic.end9912, label %logic.rhs9911 logic.rhs9911: %t37 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t37, ptr %a38 store { ptr, i64, i64 } { ptr @.str.6675, i64 7, i64 0 }, ptr %a39 %t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39) %t41 = icmp ne i32 %t40, 0 br label %logic.rend9913 logic.rend9913: br label %logic.end9912 logic.end9912: %t42 = phi i1 [ true, %logic.from9910 ], [ %t41, %logic.rend9913 ] br label %logic.from9914 logic.from9914: br i1 %t42, label %logic.end9916, label %logic.rhs9915 logic.rhs9915: %t43 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t43, ptr %a44 store { ptr, i64, i64 } { ptr @.str.6676, i64 11, i64 0 }, ptr %a45 %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) %t47 = icmp ne i32 %t46, 0 br label %logic.rend9917 logic.rend9917: br label %logic.end9916 logic.end9916: %t48 = phi i1 [ true, %logic.from9914 ], [ %t47, %logic.rend9917 ] br i1 %t48, label %then9918, label %else9919 then9918: %t49 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.6677, i64 25, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t49, ptr %a50 call void @finch_str_drop(ptr %a50) br label %endif9920 else9919: %t51 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t51, ptr %a52 store { ptr, i64, i64 } { ptr @.str.6678, i64 5, i64 0 }, ptr %a53 %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) %t55 = icmp ne i32 %t54, 0 br i1 %t55, label %then9921, label %endif9923 then9921: %t56 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t56, ptr %a57 store { ptr, i64, i64 } { ptr @.str.6680, i64 7, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_starts(ptr %a57, ptr %a59) %t61 = icmp ne i32 %t60, 0 br label %logic.from9924 logic.from9924: br i1 %t61, label %logic.end9926, label %logic.rhs9925 logic.rhs9925: %t62 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t62, ptr %a63 store { ptr, i64, i64 } { ptr @.str.6682, i64 5, i64 0 }, ptr %a65 %t66 = call i32 @finch_str_starts(ptr %a63, ptr %a65) %t67 = icmp ne i32 %t66, 0 br label %logic.rend9927 logic.rend9927: br label %logic.end9926 logic.end9926: %t68 = phi i1 [ true, %logic.from9924 ], [ %t67, %logic.rend9927 ] br i1 %t68, label %then9928, label %else9929 then9928: %t69 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.6683, i64 24, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t69, ptr %a70 call void @finch_str_drop(ptr %a70) br label %endif9930 else9929: %t71 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.6684, i64 25, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t71, ptr %a72 call void @finch_str_drop(ptr %a72) br label %endif9930 endif9930: br label %endif9923 endif9923: br label %endif9920 endif9920: br label %endif9909 endif9909: br label %endif9906 endif9906: br label %endif9903 endif9903: %t73 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t73, ptr %a74 store { ptr, i64, i64 } { ptr @.str.6685, i64 22, i64 0 }, ptr %a75 %t76 = call i32 @finch_str_eq(ptr %a74, ptr %a75) %t77 = icmp ne i32 %t76, 0 br i1 %t77, label %then9931, label %endif9933 then9931: %t78 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.6686, i64 18, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t78, ptr %a79 call void @finch_str_drop(ptr %a79) br label %endif9933 endif9933: %t80 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t80, ptr %a81 call void @finch_str_copy(ptr %a82, ptr %a81) %t83 = load { ptr, i64, i64 }, ptr %a82 %t84 = insertvalue %S.platform.Target zeroinitializer, { ptr, i64, i64 } %t83, 0 store %S.platform.Target %t84, ptr %a85 %t86 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t86, ptr %a87 store { ptr, i64, i64 } { ptr @.str.6688, i64 7, i64 0 }, ptr %a89 %t90 = call i64 @finch_str_find(ptr %a87, ptr %a89) %t91 = icmp sge i64 %t90, 0 br label %logic.from9934 logic.from9934: br i1 %t91, label %logic.end9936, label %logic.rhs9935 logic.rhs9935: %t92 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t92, ptr %a93 store { ptr, i64, i64 } { ptr @.str.6690, i64 5, i64 0 }, ptr %a95 %t96 = call i64 @finch_str_find(ptr %a93, ptr %a95) %t97 = icmp sge i64 %t96, 0 br label %logic.rend9937 logic.rend9937: br label %logic.end9936 logic.end9936: %t98 = phi i1 [ true, %logic.from9934 ], [ %t97, %logic.rend9937 ] br label %logic.from9938 logic.from9938: br i1 %t98, label %logic.end9940, label %logic.rhs9939 logic.rhs9939: %t99 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t99, ptr %a100 store { ptr, i64, i64 } { ptr @.str.6692, i64 4, i64 0 }, ptr %a102 %t103 = call i64 @finch_str_find(ptr %a100, ptr %a102) %t104 = icmp sge i64 %t103, 0 br label %logic.rend9941 logic.rend9941: br label %logic.end9940 logic.end9940: %t105 = phi i1 [ true, %logic.from9938 ], [ %t104, %logic.rend9941 ] br label %logic.from9942 logic.from9942: br i1 %t105, label %logic.end9944, label %logic.rhs9943 logic.rhs9943: %t106 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t106, ptr %a107 store { ptr, i64, i64 } { ptr @.str.6694, i64 5, i64 0 }, ptr %a109 %t110 = call i64 @finch_str_find(ptr %a107, ptr %a109) %t111 = icmp sge i64 %t110, 0 br label %logic.rend9945 logic.rend9945: br label %logic.end9944 logic.end9944: %t112 = phi i1 [ true, %logic.from9942 ], [ %t111, %logic.rend9945 ] %t113 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 store i1 %t112, ptr %t113 %t114 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t114, ptr %a115 store { ptr, i64, i64 } { ptr @.str.6696, i64 4, i64 0 }, ptr %a117 %t118 = call i64 @finch_str_find(ptr %a115, ptr %a117) %t119 = icmp sge i64 %t118, 0 %t120 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 2 store i1 %t119, ptr %t120 %t121 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t121, ptr %a122 store { ptr, i64, i64 } { ptr @.str.6698, i64 5, i64 0 }, ptr %a124 %t125 = call i64 @finch_str_find(ptr %a122, ptr %a124) %t126 = icmp sge i64 %t125, 0 br label %logic.from9946 logic.from9946: br i1 %t126, label %logic.end9948, label %logic.rhs9947 logic.rhs9947: %t127 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t127, ptr %a128 store { ptr, i64, i64 } { ptr @.str.6700, i64 6, i64 0 }, ptr %a130 %t131 = call i64 @finch_str_find(ptr %a128, ptr %a130) %t132 = icmp sge i64 %t131, 0 br label %logic.rend9949 logic.rend9949: br label %logic.end9948 logic.end9948: %t133 = phi i1 [ true, %logic.from9946 ], [ %t132, %logic.rend9949 ] br label %logic.from9950 logic.from9950: br i1 %t133, label %logic.end9952, label %logic.rhs9951 logic.rhs9951: %t134 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t134, ptr %a135 store { ptr, i64, i64 } { ptr @.str.6702, i64 5, i64 0 }, ptr %a137 %t138 = call i64 @finch_str_find(ptr %a135, ptr %a137) %t139 = icmp sge i64 %t138, 0 br label %logic.rend9953 logic.rend9953: br label %logic.end9952 logic.end9952: %t140 = phi i1 [ true, %logic.from9950 ], [ %t139, %logic.rend9953 ] %t141 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 store i1 %t140, ptr %t141 %t142 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t142, ptr %a143 store { ptr, i64, i64 } { ptr @.str.6704, i64 7, i64 0 }, ptr %a145 %t146 = call i32 @finch_str_starts(ptr %a143, ptr %a145) %t147 = icmp ne i32 %t146, 0 br label %logic.from9954 logic.from9954: br i1 %t147, label %logic.end9956, label %logic.rhs9955 logic.rhs9955: %t148 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t148, ptr %a149 store { ptr, i64, i64 } { ptr @.str.6706, i64 5, i64 0 }, ptr %a151 %t152 = call i32 @finch_str_starts(ptr %a149, ptr %a151) %t153 = icmp ne i32 %t152, 0 br label %logic.rend9957 logic.rend9957: br label %logic.end9956 logic.end9956: %t154 = phi i1 [ true, %logic.from9954 ], [ %t153, %logic.rend9957 ] %t155 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 store i1 %t154, ptr %t155 %t156 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t156, ptr %a157 store { ptr, i64, i64 } { ptr @.str.6708, i64 7, i64 0 }, ptr %a159 %t160 = call i32 @finch_str_starts(ptr %a157, ptr %a159) %t161 = icmp ne i32 %t160, 0 br label %logic.from9958 logic.from9958: br i1 %t161, label %logic.end9960, label %logic.rhs9959 logic.rhs9959: %t162 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t162, ptr %a163 store { ptr, i64, i64 } { ptr @.str.6710, i64 5, i64 0 }, ptr %a165 %t166 = call i32 @finch_str_starts(ptr %a163, ptr %a165) %t167 = icmp ne i32 %t166, 0 br label %logic.rend9961 logic.rend9961: br label %logic.end9960 logic.end9960: %t168 = phi i1 [ true, %logic.from9958 ], [ %t167, %logic.rend9961 ] store i1 %t168, ptr %a169 %t170 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t170, ptr %a171 store { ptr, i64, i64 } { ptr @.str.6712, i64 5, i64 0 }, ptr %a173 %t174 = call i64 @finch_str_find(ptr %a171, ptr %a173) %t175 = icmp sge i64 %t174, 0 br label %logic.from9962 logic.from9962: br i1 %t175, label %logic.end9964, label %logic.rhs9963 logic.rhs9963: %t176 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t176, ptr %a177 store { ptr, i64, i64 } { ptr @.str.6714, i64 6, i64 0 }, ptr %a179 %t180 = call i64 @finch_str_find(ptr %a177, ptr %a179) %t181 = icmp sge i64 %t180, 0 br label %logic.rend9965 logic.rend9965: br label %logic.end9964 logic.end9964: %t182 = phi i1 [ true, %logic.from9962 ], [ %t181, %logic.rend9965 ] store i1 %t182, ptr %a183 %t184 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t184, ptr %a185 store { ptr, i64, i64 } { ptr @.str.6716, i64 7, i64 0 }, ptr %a187 %t188 = call i64 @finch_str_find(ptr %a185, ptr %a187) %t189 = icmp sge i64 %t188, 0 br label %logic.from9966 logic.from9966: br i1 %t189, label %logic.end9968, label %logic.rhs9967 logic.rhs9967: %t190 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t190, ptr %a191 store { ptr, i64, i64 } { ptr @.str.6718, i64 5, i64 0 }, ptr %a193 %t194 = call i64 @finch_str_find(ptr %a191, ptr %a193) %t195 = icmp sge i64 %t194, 0 br label %logic.rend9969 logic.rend9969: br label %logic.end9968 logic.end9968: %t196 = phi i1 [ true, %logic.from9966 ], [ %t195, %logic.rend9969 ] br label %logic.from9970 logic.from9970: br i1 %t196, label %logic.end9972, label %logic.rhs9971 logic.rhs9971: %t197 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t197, ptr %a198 store { ptr, i64, i64 } { ptr @.str.6720, i64 4, i64 0 }, ptr %a200 %t201 = call i64 @finch_str_find(ptr %a198, ptr %a200) %t202 = icmp sge i64 %t201, 0 br label %logic.rend9973 logic.rend9973: br label %logic.end9972 logic.end9972: %t203 = phi i1 [ true, %logic.from9970 ], [ %t202, %logic.rend9973 ] store i1 %t203, ptr %a204 %t205 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 %t206 = load i1, ptr %t205 %t207 = load i1, ptr %a204 %t208 = icmp ne i1 %t206, %t207 br label %logic.from9974 logic.from9974: br i1 %t208, label %logic.end9976, label %logic.rhs9975 logic.rhs9975: %t209 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 %t210 = load i1, ptr %t209 %t211 = load i1, ptr %a183 %t212 = icmp ne i1 %t210, %t211 br label %logic.rend9977 logic.rend9977: br label %logic.end9976 logic.end9976: %t213 = phi i1 [ true, %logic.from9974 ], [ %t212, %logic.rend9977 ] br label %logic.from9978 logic.from9978: br i1 %t213, label %logic.end9980, label %logic.rhs9979 logic.rhs9979: %t214 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 %t215 = load i1, ptr %t214 %t216 = load i1, ptr %a169 %t217 = icmp ne i1 %t215, %t216 br label %logic.rend9981 logic.rend9981: br label %logic.end9980 logic.end9980: %t218 = phi i1 [ true, %logic.from9978 ], [ %t217, %logic.rend9981 ] %t219 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 store i1 %t218, ptr %t219 %t220 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 6 %t221 = load { ptr, i64, i64 }, ptr %t220 store { ptr, i64, i64 } { ptr @.str.6721, i64 0, i64 0 }, ptr %t220 store { ptr, i64, i64 } %t221, ptr %a222 call void @finch_str_drop(ptr %a222) %t223 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 %t224 = load i1, ptr %t223 br i1 %t224, label %then9982, label %endif9984 then9982: %t225 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 6 %t226 = load { ptr, i64, i64 }, ptr %t225 store { ptr, i64, i64 } { ptr @.str.6722, i64 4, i64 0 }, ptr %t225 store { ptr, i64, i64 } %t226, ptr %a227 call void @finch_str_drop(ptr %a227) br label %endif9984 endif9984: %t228 = extractvalue { ptr, i64, i64 } { ptr @.str.6723, i64 8, i64 0 }, 0 %t229 = icmp eq ptr %t228, null %t230 = select i1 %t229, ptr @.str.6724, ptr %t228 %t231 = call ptr @getenv(ptr %t230) store { ptr, i64, i64 } zeroinitializer, ptr %a232 call void @finch_str_from_c(ptr %a232, ptr %t231) %t233 = load { ptr, i64, i64 }, ptr %a232 store { ptr, i64, i64 } %t233, ptr %a234 call void @finch_str_copy(ptr %a235, ptr %a234) %t236 = load { ptr, i64, i64 }, ptr %a235 store { ptr, i64, i64 } %t236, ptr %a237 %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %a237, i32 0, i32 1 %t239 = load i64, ptr %t238 %t240 = icmp sgt i64 %t239, 0 br i1 %t240, label %then9985, label %else9986 then9985: %t241 = load { ptr, i64, i64 }, ptr %a237 %t242 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 store { ptr, i64, i64 } %t241, ptr %a243 call void @finch_str_copy(ptr %a244, ptr %a243) %t245 = load { ptr, i64, i64 }, ptr %a244 %t246 = load { ptr, i64, i64 }, ptr %t242 store { ptr, i64, i64 } %t245, ptr %t242 store { ptr, i64, i64 } %t246, ptr %a247 call void @finch_str_drop(ptr %a247) br label %endif9987 else9986: %t248 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 %t249 = load i1, ptr %t248 br label %logic.from9988 logic.from9988: br i1 %t249, label %logic.rhs9989, label %logic.end9990 logic.rhs9989: %t250 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 %t251 = load i1, ptr %t250 br label %logic.rend9991 logic.rend9991: br label %logic.end9990 logic.end9990: %t252 = phi i1 [ false, %logic.from9988 ], [ %t251, %logic.rend9991 ] br i1 %t252, label %then9992, label %else9993 then9992: %t253 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 %t254 = load { ptr, i64, i64 }, ptr %t253 store { ptr, i64, i64 } { ptr @.str.6725, i64 22, i64 0 }, ptr %t253 store { ptr, i64, i64 } %t254, ptr %a255 call void @finch_str_drop(ptr %a255) br label %endif9994 else9993: %t256 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 %t257 = load i1, ptr %t256 br label %logic.from9995 logic.from9995: br i1 %t257, label %logic.rhs9996, label %logic.end9997 logic.rhs9996: %t258 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 %t259 = load i1, ptr %t258 br label %logic.rend9998 logic.rend9998: br label %logic.end9997 logic.end9997: %t260 = phi i1 [ false, %logic.from9995 ], [ %t259, %logic.rend9998 ] br label %logic.from9999 logic.from9999: br i1 %t260, label %logic.rhs10000, label %logic.end10001 logic.rhs10000: %t261 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 %t262 = load i1, ptr %t261 %t263 = xor i1 %t262, true br label %logic.rend10002 logic.rend10002: br label %logic.end10001 logic.end10001: %t264 = phi i1 [ false, %logic.from9999 ], [ %t263, %logic.rend10002 ] br i1 %t264, label %then10003, label %else10004 then10003: %t265 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 %t266 = load { ptr, i64, i64 }, ptr %t265 store { ptr, i64, i64 } { ptr @.str.6726, i64 21, i64 0 }, ptr %t265 store { ptr, i64, i64 } %t266, ptr %a267 call void @finch_str_drop(ptr %a267) br label %endif10005 else10004: %t268 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 %t269 = load i1, ptr %t268 br i1 %t269, label %then10006, label %else10007 then10006: %t270 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.6727, i64 15, i64 0 }, ptr %a272 store { ptr, i64, i64 } %t270, ptr %a273 call void @finch_str_concat(ptr %a271, ptr %a272, ptr %a273) %t274 = load { ptr, i64, i64 }, ptr %a271 %t275 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 %t276 = load { ptr, i64, i64 }, ptr %t275 store { ptr, i64, i64 } %t274, ptr %t275 store { ptr, i64, i64 } %t276, ptr %a277 call void @finch_str_drop(ptr %a277) br label %endif10008 else10007: %t278 = call { ptr, i64, i64 } @finch.host.pathSeparator() store { ptr, i64, i64 } %t278, ptr %a279 store { ptr, i64, i64 } { ptr @.str.6728, i64 1, i64 0 }, ptr %a280 %t281 = call i32 @finch_str_eq(ptr %a279, ptr %a280) %t282 = icmp ne i32 %t281, 0 store { ptr, i64, i64 } %t278, ptr %a283 call void @finch_str_drop(ptr %a283) br i1 %t282, label %then10009, label %else10010 then10009: %t284 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 %t285 = load { ptr, i64, i64 }, ptr %t284 store { ptr, i64, i64 } { ptr @.str.6729, i64 5, i64 0 }, ptr %t284 store { ptr, i64, i64 } %t285, ptr %a286 call void @finch_str_drop(ptr %a286) br label %endif10011 else10010: %t287 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 %t288 = load { ptr, i64, i64 }, ptr %t287 store { ptr, i64, i64 } { ptr @.str.6730, i64 2, i64 0 }, ptr %t287 store { ptr, i64, i64 } %t288, ptr %a289 call void @finch_str_drop(ptr %a289) br label %endif10011 endif10011: br label %endif10008 endif10008: br label %endif10005 endif10005: br label %endif9994 endif9994: br label %endif9987 endif9987: %t290 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 %t291 = load i1, ptr %t290 br label %logic.from10012 logic.from10012: br i1 %t291, label %logic.rhs10013, label %logic.end10014 logic.rhs10013: %t292 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 %t293 = load i1, ptr %t292 br label %logic.rend10015 logic.rend10015: br label %logic.end10014 logic.end10014: %t294 = phi i1 [ false, %logic.from10012 ], [ %t293, %logic.rend10015 ] br i1 %t294, label %then10016, label %else10017 then10016: %t295 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 8 %t296 = load { ptr, i64, i64 }, ptr %t295 store { ptr, i64, i64 } { ptr @.str.6731, i64 5, i64 0 }, ptr %t295 store { ptr, i64, i64 } %t296, ptr %a297 call void @finch_str_drop(ptr %a297) br label %endif10018 else10017: %t298 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 %t299 = load i1, ptr %t298 br label %logic.from10019 logic.from10019: br i1 %t299, label %logic.rhs10020, label %logic.end10021 logic.rhs10020: %t300 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 %t301 = load i1, ptr %t300 br label %logic.rend10022 logic.rend10022: br label %logic.end10021 logic.end10021: %t302 = phi i1 [ false, %logic.from10019 ], [ %t301, %logic.rend10022 ] br label %logic.from10023 logic.from10023: br i1 %t302, label %logic.rhs10024, label %logic.end10025 logic.rhs10024: %t303 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 %t304 = load i1, ptr %t303 %t305 = xor i1 %t304, true br label %logic.rend10026 logic.rend10026: br label %logic.end10025 logic.end10025: %t306 = phi i1 [ false, %logic.from10023 ], [ %t305, %logic.rend10026 ] br i1 %t306, label %then10027, label %endif10029 then10027: %t307 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 8 %t308 = load { ptr, i64, i64 }, ptr %t307 store { ptr, i64, i64 } { ptr @.str.6732, i64 13, i64 0 }, ptr %t307 store { ptr, i64, i64 } %t308, ptr %a309 call void @finch_str_drop(ptr %a309) br label %endif10029 endif10029: br label %endif10018 endif10018: %t310 = load %S.platform.Target, ptr %a85 call void @finch_str_drop(ptr %a237) call void @finch_str_drop(ptr %a8) call void @finch_str_drop(ptr %a3) ret %S.platform.Target %t310 } define internal i1 @finch.platform.charIsSigned(%S.platform.Target %p0) { entry: %a1 = alloca %S.platform.Target, align 16 store %S.platform.Target %p0, ptr %a1 %t2 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 4 %t3 = load i1, ptr %t2 %t4 = xor i1 %t3, true br label %logic.from10030 logic.from10030: br i1 %t4, label %logic.end10032, label %logic.rhs10031 logic.rhs10031: %t5 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 3 %t6 = load i1, ptr %t5 br label %logic.rend10033 logic.rend10033: br label %logic.end10032 logic.end10032: %t7 = phi i1 [ true, %logic.from10030 ], [ %t6, %logic.rend10033 ] br label %logic.from10034 logic.from10034: br i1 %t7, label %logic.end10036, label %logic.rhs10035 logic.rhs10035: %t8 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 1 %t9 = load i1, ptr %t8 br label %logic.rend10037 logic.rend10037: br label %logic.end10036 logic.end10036: %t10 = phi i1 [ true, %logic.from10034 ], [ %t9, %logic.rend10037 ] ret i1 %t10 } define internal { ptr, i64, i64 } @finch.linker.fingerprint({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca i32, align 16 %a3 = alloca i64, align 16 %a11 = alloca i8, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca i64, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store i32 2166136261, ptr %a2 store i64 0, ptr %a3 br label %each.cond10038 each.cond10038: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 br i1 %t7, label %each.body10039, label %each.end10041 each.body10039: %t8 = load ptr, ptr %a1 %t9 = getelementptr inbounds i8, ptr %t8, i64 %t6 %t10 = load i8, ptr %t9 store i8 %t10, ptr %a11 %t12 = load i32, ptr %a2 %t13 = load i8, ptr %a11 %t14 = zext i8 %t13 to i32 %t15 = xor i32 %t12, %t14 %t16 = mul i32 %t15, 16777619 store i32 %t16, ptr %a2 br label %each.step10040 each.step10040: %t17 = load i64, ptr %a3 %t18 = add i64 %t17, 1 store i64 %t18, ptr %a3 br label %each.cond10038 each.end10041: store { ptr, i64, i64 } { ptr @.str.6733, i64 16, i64 0 }, ptr %a19 store { ptr, i64, i64 } zeroinitializer, ptr %a20 store i64 0, ptr %a21 br label %for.cond10042 for.cond10042: %t22 = load i64, ptr %a21 %t23 = icmp slt i64 %t22, 8 br i1 %t23, label %for.body10043, label %for.end10045 for.body10043: %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 %t25 = load i32, ptr %a2 %t26 = load i64, ptr %a21 %t27 = mul i64 4, %t26 %t28 = sub i64 28, %t27 %t29 = trunc i64 %t28 to i32 %t30 = lshr i32 %t25, %t29 %t31 = and i32 %t30, 15 %t32 = zext i32 %t31 to i64 %t33 = load { ptr, i64, i64 }, ptr %a19 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 br i1 %t35, label %range10046, label %inrange10047 range10046: call void @finch_panic_index(ptr @.str.6734, i64 16, i64 %t32, i64 %t34) unreachable inrange10047: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 %t38 = load i8, ptr %t37 call void @finch_str_from_char(ptr %a39, i8 signext %t38) %t40 = load { ptr, i64, i64 }, ptr %a39 %t41 = load i64, ptr %t24 %t42 = add i64 %t41, 1 call void @finch_arr_reserve(ptr %a20, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t43 = load ptr, ptr %a20 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 store { ptr, i64, i64 } %t40, ptr %t44 store i64 %t42, ptr %t24 br label %for.step10044 for.step10044: %t45 = load i64, ptr %a21 %t46 = add i64 %t45, 1 store i64 %t46, ptr %a21 br label %for.cond10042 for.end10045: %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.6735, i64 0, i64 0 }, ptr %a48 call void @finch_str_join(ptr %a49, ptr %a20, ptr %a48) %t50 = load { ptr, i64, i64 }, ptr %a49 call void @finch.drop.arr_str(ptr %a20) call void @finch_str_drop(ptr %a19) ret { ptr, i64, i64 } %t50 } define internal { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 %t3 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t2) ret { ptr, i64, i64 } %t3 } define internal { ptr, i64, i64 } @finch.linker.libFlags({ ptr, i64, i64 } %p0, %S.platform.Target %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca %S.platform.Target, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca i64, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store %S.platform.Target %p1, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.6737, i64 10, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_ends(ptr %a4, ptr %a6) %t8 = icmp ne i32 %t7, 0 br i1 %t8, label %then10048, label %endif10050 then10048: %t9 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t9, ptr %a10 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = sub i64 %t13, 10 call void @finch_str_sub(ptr %a11, ptr %a10, i64 0, i64 %t14, ptr @.str.6739, i64 28) %t15 = load { ptr, i64, i64 }, ptr %a11 %t16 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t15) store { ptr, i64, i64 } %t15, ptr %a17 call void @finch_str_drop(ptr %a17) store { ptr, i64, i64 } { ptr @.str.6738, i64 11, i64 0 }, ptr %a19 store { ptr, i64, i64 } %t16, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) store { ptr, i64, i64 } %t16, ptr %a21 call void @finch_str_drop(ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a18 ret { ptr, i64, i64 } %t22 endif10050: %t23 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 %t24 = load i1, ptr %t23 %t25 = xor i1 %t24, true br i1 %t25, label %then10051, label %endif10053 then10051: %t26 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t26, ptr %a28 store { ptr, i64, i64 } { ptr @.str.6740, i64 17, i64 0 }, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) store { ptr, i64, i64 } %t26, ptr %a30 call void @finch_str_drop(ptr %a30) %t31 = load { ptr, i64, i64 }, ptr %a27 %t32 = call i64 @finch.host.pid() call void @finch_str_from_int(ptr %a33, i64 %t32) %t34 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t31, ptr %a36 store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) store { ptr, i64, i64 } %t31, ptr %a38 call void @finch_str_drop(ptr %a38) store { ptr, i64, i64 } %t34, ptr %a39 call void @finch_str_drop(ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t40, ptr %a42 store { ptr, i64, i64 } { ptr @.str.6741, i64 4, i64 0 }, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) store { ptr, i64, i64 } %t40, ptr %a44 call void @finch_str_drop(ptr %a44) %t45 = load { ptr, i64, i64 }, ptr %a41 store { ptr, i64, i64 } %t45, ptr %a46 %t47 = load { ptr, i64, i64 }, ptr %a1 %t48 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t47) store { ptr, i64, i64 } { ptr @.str.6742, i64 18, i64 0 }, ptr %a50 store { ptr, i64, i64 } %t48, ptr %a51 call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) store { ptr, i64, i64 } %t48, ptr %a52 call void @finch_str_drop(ptr %a52) %t53 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t53, ptr %a55 store { ptr, i64, i64 } { ptr @.str.6743, i64 3, i64 0 }, ptr %a56 call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) store { ptr, i64, i64 } %t53, ptr %a57 call void @finch_str_drop(ptr %a57) %t58 = load { ptr, i64, i64 }, ptr %a54 %t59 = load { ptr, i64, i64 }, ptr %a46 %t60 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t59) store { ptr, i64, i64 } %t58, ptr %a62 store { ptr, i64, i64 } %t60, ptr %a63 call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) store { ptr, i64, i64 } %t58, ptr %a64 call void @finch_str_drop(ptr %a64) store { ptr, i64, i64 } %t60, ptr %a65 call void @finch_str_drop(ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } %t66, ptr %a68 store { ptr, i64, i64 } { ptr @.str.6744, i64 4, i64 0 }, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) store { ptr, i64, i64 } %t66, ptr %a70 call void @finch_str_drop(ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a67 %t72 = call { ptr, i64, i64 } @finch.host.nullDevice() store { ptr, i64, i64 } %t71, ptr %a74 store { ptr, i64, i64 } %t72, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) store { ptr, i64, i64 } %t71, ptr %a76 call void @finch_str_drop(ptr %a76) store { ptr, i64, i64 } %t72, ptr %a77 call void @finch_str_drop(ptr %a77) %t78 = load { ptr, i64, i64 }, ptr %a73 %t79 = call i64 @finch.host.run({ ptr, i64, i64 } %t78) store { ptr, i64, i64 } %t78, ptr %a80 call void @finch_str_drop(ptr %a80) store i64 %t79, ptr %a81 %t82 = load i64, ptr %a81 %t83 = icmp eq i64 %t82, 0 br label %logic.from10054 logic.from10054: br i1 %t83, label %logic.rhs10055, label %logic.end10056 logic.rhs10055: %t84 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t84, ptr %a85 %t86 = call i32 @finch_file_exists(ptr %a85) %t87 = icmp ne i32 %t86, 0 br label %logic.rend10057 logic.rend10057: br label %logic.end10056 logic.end10056: %t88 = phi i1 [ false, %logic.from10054 ], [ %t87, %logic.rend10057 ] br i1 %t88, label %then10058, label %endif10060 then10058: %t89 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t89, ptr %a90 store { ptr, i64, i64 } zeroinitializer, ptr %a91 store { ptr, i64, i64 } zeroinitializer, ptr %a92 %t93 = call i32 @finch_try_read_file(ptr %a91, ptr %a90, ptr %a92) %t94 = icmp eq i32 %t93, 0 %t95 = load { ptr, i64, i64 }, ptr %a92 %t96 = load { ptr, i64, i64 }, ptr %a91 br i1 %t94, label %or.failed10061, label %or.ok10062 or.failed10061: store { ptr, i64, i64 } %t95, ptr %a97 call void @finch_str_drop(ptr %a97) br label %or.bend10063 or.bend10063: br label %or.end10064 or.ok10062: br label %or.end10064 or.end10064: %t98 = phi { ptr, i64, i64 } [ { ptr @.str.6745, i64 0, i64 0 }, %or.bend10063 ], [ %t96, %or.ok10062 ] store { ptr, i64, i64 } %t98, ptr %a99 call void @finch_str_trim(ptr %a100, ptr %a99) %t101 = load { ptr, i64, i64 }, ptr %a100 store { ptr, i64, i64 } %t98, ptr %a102 call void @finch_str_drop(ptr %a102) store { ptr, i64, i64 } %t101, ptr %a103 %t104 = load { ptr, i64, i64 }, ptr %a46 call void @finch.host.remove({ ptr, i64, i64 } %t104) %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %a103, i32 0, i32 1 %t106 = load i64, ptr %t105 %t107 = icmp sgt i64 %t106, 0 br i1 %t107, label %then10065, label %endif10067 then10065: %t108 = load { ptr, i64, i64 }, ptr %a103 call void @finch_str_drop(ptr %a46) ret { ptr, i64, i64 } %t108 endif10067: call void @finch_str_drop(ptr %a103) br label %endif10060 endif10060: call void @finch_str_drop(ptr %a46) br label %endif10053 endif10053: %t109 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } { ptr @.str.6747, i64 2, i64 0 }, ptr %a111 store { ptr, i64, i64 } %t109, ptr %a112 call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) %t113 = load { ptr, i64, i64 }, ptr %a110 %t114 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t113) store { ptr, i64, i64 } %t113, ptr %a115 call void @finch_str_drop(ptr %a115) ret { ptr, i64, i64 } %t114 } define internal { ptr, i64, i64 } @finch.linker.guessLib({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca i64, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca i64, align 16 %a35 = alloca i64, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_copy(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t5, ptr %a6 %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.6749, i64 1, i64 0 }, ptr %a10 %t11 = call i64 @finch_str_find(ptr %a8, ptr %a10) store i64 %t11, ptr %a12 br label %while.cond10068 while.cond10068: %t13 = load i64, ptr %a12 %t14 = icmp sge i64 %t13, 0 br i1 %t14, label %while.body10069, label %while.end10070 while.body10069: %t15 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t15, ptr %a16 %t18 = load i64, ptr %a12 %t19 = add i64 %t18, 1 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t21 = load i64, ptr %t20 call void @finch_str_sub(ptr %a17, ptr %a16, i64 %t19, i64 %t21, ptr @.str.6750, i64 49) %t22 = load { ptr, i64, i64 }, ptr %a17 %t23 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t22, ptr %a6 store { ptr, i64, i64 } %t23, ptr %a24 call void @finch_str_drop(ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.6752, i64 1, i64 0 }, ptr %a28 %t29 = call i64 @finch_str_find(ptr %a26, ptr %a28) store i64 %t29, ptr %a12 br label %while.cond10068 while.end10070: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t31 = load i64, ptr %t30 store i64 %t31, ptr %a32 %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t34 = load i64, ptr %t33 store i64 0, ptr %a35 br label %for.cond10071 for.cond10071: %t36 = load i64, ptr %a35 %t37 = icmp slt i64 %t36, %t34 br i1 %t37, label %for.body10072, label %for.end10074 for.body10072: %t38 = load i64, ptr %a35 %t39 = load { ptr, i64, i64 }, ptr %a6 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 br i1 %t41, label %range10075, label %inrange10076 range10075: call void @finch_panic_index(ptr @.str.6753, i64 54, i64 %t38, i64 %t40) unreachable inrange10076: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds i8, ptr %t42, i64 %t38 %t44 = load i8, ptr %t43 %t45 = icmp eq i8 %t44, 46 br i1 %t45, label %then10077, label %endif10079 then10077: %t46 = load i64, ptr %a35 store i64 %t46, ptr %a32 br label %endif10079 endif10079: br label %for.step10073 for.step10073: %t47 = load i64, ptr %a35 %t48 = add i64 %t47, 1 store i64 %t48, ptr %a35 br label %for.cond10071 for.end10074: %t49 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t49, ptr %a50 %t52 = load i64, ptr %a32 call void @finch_str_sub(ptr %a51, ptr %a50, i64 0, i64 %t52, ptr @.str.6754, i64 58) %t53 = load { ptr, i64, i64 }, ptr %a51 %t54 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t53, ptr %a6 store { ptr, i64, i64 } %t54, ptr %a55 call void @finch_str_drop(ptr %a55) br label %while.cond10080 while.cond10080: %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t57 = load i64, ptr %t56 %t58 = icmp sgt i64 %t57, 0 br label %logic.from10083 logic.from10083: br i1 %t58, label %logic.rhs10084, label %logic.end10085 logic.rhs10084: %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t60 = load i64, ptr %t59 %t61 = sub i64 %t60, 1 %t62 = load { ptr, i64, i64 }, ptr %a6 %t63 = extractvalue { ptr, i64, i64 } %t62, 1 %t64 = icmp uge i64 %t61, %t63 br i1 %t64, label %range10086, label %inrange10087 range10086: call void @finch_panic_index(ptr @.str.6755, i64 59, i64 %t61, i64 %t63) unreachable inrange10087: %t65 = extractvalue { ptr, i64, i64 } %t62, 0 %t66 = getelementptr inbounds i8, ptr %t65, i64 %t61 %t67 = load i8, ptr %t66 %t68 = icmp uge i8 %t67, 48 br label %logic.rend10088 logic.rend10088: br label %logic.end10085 logic.end10085: %t69 = phi i1 [ false, %logic.from10083 ], [ %t68, %logic.rend10088 ] br label %logic.from10089 logic.from10089: br i1 %t69, label %logic.rhs10090, label %logic.end10091 logic.rhs10090: %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t71 = load i64, ptr %t70 %t72 = sub i64 %t71, 1 %t73 = load { ptr, i64, i64 }, ptr %a6 %t74 = extractvalue { ptr, i64, i64 } %t73, 1 %t75 = icmp uge i64 %t72, %t74 br i1 %t75, label %range10092, label %inrange10093 range10092: call void @finch_panic_index(ptr @.str.6756, i64 59, i64 %t72, i64 %t74) unreachable inrange10093: %t76 = extractvalue { ptr, i64, i64 } %t73, 0 %t77 = getelementptr inbounds i8, ptr %t76, i64 %t72 %t78 = load i8, ptr %t77 %t79 = icmp ule i8 %t78, 57 br label %logic.rend10094 logic.rend10094: br label %logic.end10091 logic.end10091: %t80 = phi i1 [ false, %logic.from10089 ], [ %t79, %logic.rend10094 ] br i1 %t80, label %while.body10081, label %while.end10082 while.body10081: %t81 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t81, ptr %a82 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t85 = load i64, ptr %t84 %t86 = sub i64 %t85, 1 call void @finch_str_sub(ptr %a83, ptr %a82, i64 0, i64 %t86, ptr @.str.6757, i64 60) %t87 = load { ptr, i64, i64 }, ptr %a83 %t88 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t87, ptr %a6 store { ptr, i64, i64 } %t88, ptr %a89 call void @finch_str_drop(ptr %a89) br label %while.cond10080 while.end10082: %t90 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t90, ptr %a91 call void @finch_str_lower(ptr %a92, ptr %a91) %t93 = load { ptr, i64, i64 }, ptr %a92 call void @finch_str_drop(ptr %a6) ret { ptr, i64, i64 } %t93 } define internal void @finch.linker.Names.add(ptr %self, { ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca i64, align 16 %a11 = alloca i64, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t3 = load i64, ptr %t2 %t4 = icmp sgt i64 %t3, 0 br label %logic.from10095 logic.from10095: br i1 %t4, label %logic.rhs10096, label %logic.end10097 logic.rhs10096: %t5 = getelementptr inbounds %S.linker.Names, ptr %self, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a8 %t9 = load i64, ptr %t6 %t10 = load ptr, ptr %t5 store i64 0, ptr %a11 br label %find.cond10098 find.cond10098: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t9 br i1 %t13, label %find.body10099, label %find.end10102 find.body10099: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } %t7, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %find.hit10100, label %find.next10101 find.hit10100: store i64 %t12, ptr %a8 br label %find.end10102 find.next10101: %t20 = add i64 %t12, 1 store i64 %t20, ptr %a11 br label %find.cond10098 find.end10102: %t21 = load i64, ptr %a8 %t22 = icmp sge i64 %t21, 0 %t23 = xor i1 %t22, true br label %logic.rend10103 logic.rend10103: br label %logic.end10097 logic.end10097: %t24 = phi i1 [ false, %logic.from10095 ], [ %t23, %logic.rend10103 ] br i1 %t24, label %then10104, label %endif10106 then10104: %t25 = getelementptr inbounds %S.linker.Names, ptr %self, i32 0, i32 0 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i32 0, i32 1 %t27 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t27, ptr %a28 call void @finch_str_copy(ptr %a29, ptr %a28) %t30 = load { ptr, i64, i64 }, ptr %a29 %t31 = load i64, ptr %t26 %t32 = add i64 %t31, 1 call void @finch_arr_reserve(ptr %t25, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t33 = load ptr, ptr %t25 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 store { ptr, i64, i64 } %t30, ptr %t34 store i64 %t32, ptr %t26 br label %endif10106 endif10106: ret void } define internal { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca i64, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca i64, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t4, ptr %a5 %t7 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = call i64 @finch_str_find(ptr %a5, ptr %a8) store i64 %t9, ptr %a10 %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, 0 br i1 %t12, label %then10107, label %endif10109 then10107: ret { ptr, i64, i64 } { ptr @.str.6760, i64 0, i64 0 } endif10109: %t13 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t13, ptr %a14 %t16 = load i64, ptr %a10 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = add i64 %t16, %t18 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t21 = load i64, ptr %t20 call void @finch_str_sub(ptr %a15, ptr %a14, i64 %t19, i64 %t21, ptr @.str.6761, i64 81) %t22 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t22, ptr %a23 store i64 0, ptr %a24 br label %while.cond10110 while.cond10110: %t25 = load i64, ptr %a24 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a23, i32 0, i32 1 %t27 = load i64, ptr %t26 %t28 = icmp slt i64 %t25, %t27 br label %logic.from10113 logic.from10113: br i1 %t28, label %logic.rhs10114, label %logic.end10115 logic.rhs10114: %t29 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t29, ptr %a30 %t32 = load i64, ptr %a24 %t33 = load { ptr, i64, i64 }, ptr %a23 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 br i1 %t35, label %range10116, label %inrange10117 range10116: call void @finch_panic_index(ptr @.str.6763, i64 83, i64 %t32, i64 %t34) unreachable inrange10117: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 %t38 = load i8, ptr %t37 call void @finch_str_from_char(ptr %a39, i8 signext %t38) %t40 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t40, ptr %a41 %t42 = call i64 @finch_str_find(ptr %a30, ptr %a41) %t43 = icmp sge i64 %t42, 0 store { ptr, i64, i64 } %t40, ptr %a44 call void @finch_str_drop(ptr %a44) %t45 = xor i1 %t43, true br label %logic.rend10118 logic.rend10118: br label %logic.end10115 logic.end10115: %t46 = phi i1 [ false, %logic.from10113 ], [ %t45, %logic.rend10118 ] br i1 %t46, label %while.body10111, label %while.end10112 while.body10111: %t47 = load i64, ptr %a24 %t48 = add i64 %t47, 1 store i64 %t48, ptr %a24 br label %while.cond10110 while.end10112: %t49 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t49, ptr %a50 %t52 = load i64, ptr %a24 call void @finch_str_sub(ptr %a51, ptr %a50, i64 0, i64 %t52, ptr @.str.6764, i64 86) %t53 = load { ptr, i64, i64 }, ptr %a51 call void @finch_str_drop(ptr %a23) ret { ptr, i64, i64 } %t53 } define internal void @finch.drop.S_linker_Names(ptr %a) { entry: %t1 = getelementptr inbounds %S.linker.Names, ptr %a, i32 0, i32 0 call void @finch.drop.arr_str(ptr %t1) ret void } define internal void @finch.drop.arr_S_linker_Names(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond10222 n.cond10222: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body10223, label %n.end10224 n.body10223: %t7 = getelementptr inbounds %S.linker.Names, ptr %t1, i64 %t5 call void @finch.drop.S_linker_Names(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond10222 n.end10224: call void @finch_arr_free(ptr %a) ret void } define internal i64 @finch.linker.linkFailed({ ptr, i64, i64 } %p0, %S.cimport.CImports %p1, %S.platform.Target %p2) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca %S.cimport.CImports, align 16 %a3 = alloca %S.platform.Target, align 16 %a4 = alloca %S.linker.Names, align 16 %a5 = alloca %S.linker.Names, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca i64, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca i64, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca i64, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca i64, align 16 %a238 = alloca i64, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca i64, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca i64, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca i64, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a346 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a373 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a382 = alloca { ptr, i64, i64 }, align 16 %a384 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a410 = alloca { ptr, i64, i64 }, align 16 %a412 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a415 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a454 = alloca { ptr, i64, i64 }, align 16 %a455 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a459 = alloca { ptr, i64, i64 }, align 16 %a460 = alloca { ptr, i64, i64 }, align 16 %a461 = alloca { ptr, i64, i64 }, align 16 %a462 = alloca { ptr, i64, i64 }, align 16 %a470 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store %S.cimport.CImports %p1, ptr %a2 store %S.platform.Target %p2, ptr %a3 store %S.linker.Names zeroinitializer, ptr %a4 store %S.linker.Names zeroinitializer, ptr %a5 %t6 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t6, ptr %a7 store { ptr, i64, i64 } { ptr @.str.6766, i64 1, i64 0 }, ptr %a9 call void @finch_str_split(ptr %a10, ptr %a7, ptr %a9) %t11 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t11, ptr %a12 store i64 0, ptr %a13 br label %each.cond10119 each.cond10119: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a12, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = load i64, ptr %a13 %t17 = icmp slt i64 %t16, %t15 br i1 %t17, label %each.body10120, label %each.end10122 each.body10120: %t18 = load ptr, ptr %a12 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 %t16 %t20 = load { ptr, i64, i64 }, ptr %t19 store { ptr, i64, i64 } %t20, ptr %a21 %t22 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t22, ptr %a23 call void @finch_str_trim(ptr %a24, ptr %a23) %t25 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t25, ptr %a26 %t27 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.6769, i64 24, i64 0 }, ptr %a30 %t31 = call i64 @finch_str_find(ptr %a28, ptr %a30) %t32 = icmp sge i64 %t31, 0 br i1 %t32, label %then10123, label %else10124 then10123: %t33 = load { ptr, i64, i64 }, ptr %a26 %t34 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t33, { ptr, i64, i64 } { ptr @.str.6770, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6771, i64 1, i64 0 }) call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t34) store { ptr, i64, i64 } %t34, ptr %a35 call void @finch_str_drop(ptr %a35) br label %endif10125 else10124: %t36 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t36, ptr %a37 store { ptr, i64, i64 } { ptr @.str.6773, i64 18, i64 0 }, ptr %a39 %t40 = call i64 @finch_str_find(ptr %a37, ptr %a39) %t41 = icmp sge i64 %t40, 0 br i1 %t41, label %then10126, label %else10127 then10126: %t42 = load { ptr, i64, i64 }, ptr %a26 %t43 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t42, { ptr, i64, i64 } { ptr @.str.6774, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6775, i64 2, i64 0 }) call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t43) store { ptr, i64, i64 } %t43, ptr %a44 call void @finch_str_drop(ptr %a44) br label %endif10128 else10127: %t45 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t45, ptr %a46 store { ptr, i64, i64 } { ptr @.str.6777, i64 27, i64 0 }, ptr %a48 %t49 = call i64 @finch_str_find(ptr %a46, ptr %a48) %t50 = icmp sge i64 %t49, 0 br i1 %t50, label %then10129, label %else10130 then10129: %t51 = load { ptr, i64, i64 }, ptr %a26 %t52 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t51, { ptr, i64, i64 } { ptr @.str.6778, i64 27, i64 0 }, { ptr, i64, i64 } { ptr @.str.6779, i64 3, i64 0 }) call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t52) store { ptr, i64, i64 } %t52, ptr %a53 call void @finch_str_drop(ptr %a53) br label %endif10131 else10130: %t54 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t54, ptr %a55 store { ptr, i64, i64 } { ptr @.str.6781, i64 14, i64 0 }, ptr %a57 %t58 = call i64 @finch_str_find(ptr %a55, ptr %a57) %t59 = icmp sge i64 %t58, 0 br i1 %t59, label %then10132, label %else10133 then10132: %t60 = load { ptr, i64, i64 }, ptr %a26 %t61 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t60, { ptr, i64, i64 } { ptr @.str.6782, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6783, i64 4, i64 0 }) call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t61) store { ptr, i64, i64 } %t61, ptr %a62 call void @finch_str_drop(ptr %a62) br label %endif10134 else10133: %t63 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t63, ptr %a64 store { ptr, i64, i64 } { ptr @.str.6785, i64 24, i64 0 }, ptr %a66 %t67 = call i64 @finch_str_find(ptr %a64, ptr %a66) %t68 = icmp sge i64 %t67, 0 br i1 %t68, label %then10135, label %else10136 then10135: %t69 = load { ptr, i64, i64 }, ptr %a26 %t70 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t69, { ptr, i64, i64 } { ptr @.str.6786, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6787, i64 4, i64 0 }) call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t70) store { ptr, i64, i64 } %t70, ptr %a71 call void @finch_str_drop(ptr %a71) br label %endif10137 else10136: %t72 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t72, ptr %a73 store { ptr, i64, i64 } { ptr @.str.6789, i64 13, i64 0 }, ptr %a75 %t76 = call i64 @finch_str_find(ptr %a73, ptr %a75) %t77 = icmp sge i64 %t76, 0 br i1 %t77, label %then10138, label %else10139 then10138: %t78 = load { ptr, i64, i64 }, ptr %a26 %t79 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t78, { ptr, i64, i64 } { ptr @.str.6790, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6791, i64 1, i64 0 }) call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t79) store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_drop(ptr %a80) br label %endif10140 else10139: %t81 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.6793, i64 11, i64 0 }, ptr %a84 %t85 = call i64 @finch_str_find(ptr %a82, ptr %a84) %t86 = icmp sge i64 %t85, 0 br label %logic.from10141 logic.from10141: br i1 %t86, label %logic.rhs10142, label %logic.end10143 logic.rhs10142: %t87 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t87, ptr %a88 store { ptr, i64, i64 } { ptr @.str.6795, i64 9, i64 0 }, ptr %a90 %t91 = call i64 @finch_str_find(ptr %a88, ptr %a90) %t92 = icmp sge i64 %t91, 0 br label %logic.rend10144 logic.rend10144: br label %logic.end10143 logic.end10143: %t93 = phi i1 [ false, %logic.from10141 ], [ %t92, %logic.rend10144 ] br i1 %t93, label %then10145, label %else10146 then10145: %t94 = load { ptr, i64, i64 }, ptr %a26 %t95 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t94, { ptr, i64, i64 } { ptr @.str.6796, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6797, i64 1, i64 0 }) store { ptr, i64, i64 } %t95, ptr %a97 store { ptr, i64, i64 } { ptr @.str.6798, i64 10, i64 0 }, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) store { ptr, i64, i64 } %t95, ptr %a99 call void @finch_str_drop(ptr %a99) %t100 = load { ptr, i64, i64 }, ptr %a96 call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t100) store { ptr, i64, i64 } %t100, ptr %a101 call void @finch_str_drop(ptr %a101) br label %endif10147 else10146: %t102 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t102, ptr %a103 store { ptr, i64, i64 } { ptr @.str.6800, i64 1, i64 0 }, ptr %a105 %t106 = call i32 @finch_str_starts(ptr %a103, ptr %a105) %t107 = icmp ne i32 %t106, 0 br label %logic.from10148 logic.from10148: br i1 %t107, label %logic.rhs10149, label %logic.end10150 logic.rhs10149: %t108 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t108, ptr %a109 store { ptr, i64, i64 } { ptr @.str.6802, i64 19, i64 0 }, ptr %a111 %t112 = call i64 @finch_str_find(ptr %a109, ptr %a111) %t113 = icmp sge i64 %t112, 0 br label %logic.rend10151 logic.rend10151: br label %logic.end10150 logic.end10150: %t114 = phi i1 [ false, %logic.from10148 ], [ %t113, %logic.rend10151 ] br i1 %t114, label %then10152, label %endif10154 then10152: %t115 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t115, ptr %a116 %t118 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t118, ptr %a119 store { ptr, i64, i64 } { ptr @.str.6805, i64 19, i64 0 }, ptr %a121 %t122 = call i64 @finch_str_find(ptr %a119, ptr %a121) call void @finch_str_sub(ptr %a117, ptr %a116, i64 1, i64 %t122, ptr @.str.6803, i64 111) %t123 = load { ptr, i64, i64 }, ptr %a117 store { ptr, i64, i64 } %t123, ptr %a124 %t125 = getelementptr inbounds %S.platform.Target, ptr %a3, i32 0, i32 3 %t126 = load i1, ptr %t125 br label %logic.from10155 logic.from10155: br i1 %t126, label %logic.rhs10156, label %logic.end10157 logic.rhs10156: %t127 = load { ptr, i64, i64 }, ptr %a124 store { ptr, i64, i64 } %t127, ptr %a128 store { ptr, i64, i64 } { ptr @.str.6807, i64 1, i64 0 }, ptr %a130 %t131 = call i32 @finch_str_starts(ptr %a128, ptr %a130) %t132 = icmp ne i32 %t131, 0 br label %logic.rend10158 logic.rend10158: br label %logic.end10157 logic.end10157: %t133 = phi i1 [ false, %logic.from10155 ], [ %t132, %logic.rend10158 ] br i1 %t133, label %then10159, label %endif10161 then10159: %t134 = load { ptr, i64, i64 }, ptr %a124 store { ptr, i64, i64 } %t134, ptr %a135 %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %a124, i32 0, i32 1 %t138 = load i64, ptr %t137 call void @finch_str_sub(ptr %a136, ptr %a135, i64 1, i64 %t138, ptr @.str.6808, i64 113) %t139 = load { ptr, i64, i64 }, ptr %a136 %t140 = load { ptr, i64, i64 }, ptr %a124 store { ptr, i64, i64 } %t139, ptr %a124 store { ptr, i64, i64 } %t140, ptr %a141 call void @finch_str_drop(ptr %a141) br label %endif10161 endif10161: %t142 = load { ptr, i64, i64 }, ptr %a124 call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t142) call void @finch_str_drop(ptr %a124) br label %endif10154 endif10154: br label %endif10147 endif10147: br label %endif10140 endif10140: br label %endif10137 endif10137: br label %endif10134 endif10134: br label %endif10131 endif10131: br label %endif10128 endif10128: br label %endif10125 endif10125: call void @finch_str_drop(ptr %a26) br label %each.step10121 each.step10121: %t143 = load i64, ptr %a13 %t144 = add i64 %t143, 1 store i64 %t144, ptr %a13 br label %each.cond10119 each.end10122: call void @finch.drop.arr_str(ptr %a12) %t145 = getelementptr inbounds %S.linker.Names, ptr %a4, i32 0, i32 0 %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i32 0, i32 1 %t147 = load i64, ptr %t146 %t148 = icmp eq i64 %t147, 0 br label %logic.from10162 logic.from10162: br i1 %t148, label %logic.rhs10163, label %logic.end10164 logic.rhs10163: %t149 = getelementptr inbounds %S.linker.Names, ptr %a5, i32 0, i32 0 %t150 = getelementptr inbounds { ptr, i64, i64 }, ptr %t149, i32 0, i32 1 %t151 = load i64, ptr %t150 %t152 = icmp eq i64 %t151, 0 br label %logic.rend10165 logic.rend10165: br label %logic.end10164 logic.end10164: %t153 = phi i1 [ false, %logic.from10162 ], [ %t152, %logic.rend10165 ] br i1 %t153, label %then10166, label %endif10168 then10166: %t154 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t154, ptr %a156 store { ptr, i64, i64 } { ptr @.str.6809, i64 21, i64 0 }, ptr %a157 call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) %t158 = load { ptr, i64, i64 }, ptr %a155 %t159 = extractvalue { ptr, i64, i64 } %t158, 1 %t160 = trunc i64 %t159 to i32 %t161 = extractvalue { ptr, i64, i64 } %t158, 0 %t162 = icmp eq ptr %t161, null %t163 = select i1 %t162, ptr @.str.6810, ptr %t161 %t164 = call i32 (ptr, ...) @printf(ptr @.str.6811, i32 %t160, ptr %t163) store { ptr, i64, i64 } %t158, ptr %a165 call void @finch_str_drop(ptr %a165) %t166 = call i32 (ptr, ...) @printf(ptr @.str.6812) call void @finch.drop.S_linker_Names(ptr %a5) call void @finch.drop.S_linker_Names(ptr %a4) ret i64 1 endif10168: %t167 = getelementptr inbounds %S.linker.Names, ptr %a5, i32 0, i32 0 store i64 0, ptr %a168 br label %each.cond10169 each.cond10169: %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 %t170 = load i64, ptr %t169 %t171 = load i64, ptr %a168 %t172 = icmp slt i64 %t171, %t170 br i1 %t172, label %each.body10170, label %each.end10172 each.body10170: %t173 = load ptr, ptr %t167 %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i64 %t171 %t175 = load { ptr, i64, i64 }, ptr %t174 store { ptr, i64, i64 } %t175, ptr %a176 %t177 = load { ptr, i64, i64 }, ptr %a176 store { ptr, i64, i64 } { ptr @.str.6813, i64 20, i64 0 }, ptr %a179 store { ptr, i64, i64 } %t177, ptr %a180 call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) %t181 = load { ptr, i64, i64 }, ptr %a178 store { ptr, i64, i64 } %t181, ptr %a183 store { ptr, i64, i64 } { ptr @.str.6814, i64 62, i64 0 }, ptr %a184 call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184) store { ptr, i64, i64 } %t181, ptr %a185 call void @finch_str_drop(ptr %a185) %t186 = load { ptr, i64, i64 }, ptr %a182 %t187 = extractvalue { ptr, i64, i64 } %t186, 1 %t188 = trunc i64 %t187 to i32 %t189 = extractvalue { ptr, i64, i64 } %t186, 0 %t190 = icmp eq ptr %t189, null %t191 = select i1 %t190, ptr @.str.6815, ptr %t189 %t192 = call i32 (ptr, ...) @printf(ptr @.str.6816, i32 %t188, ptr %t191) store { ptr, i64, i64 } %t186, ptr %a193 call void @finch_str_drop(ptr %a193) %t194 = call i32 (ptr, ...) @printf(ptr @.str.6817) br label %each.step10171 each.step10171: %t195 = load i64, ptr %a168 %t196 = add i64 %t195, 1 store i64 %t196, ptr %a168 br label %each.cond10169 each.end10172: store { ptr, i64, i64 } zeroinitializer, ptr %a197 store { ptr, i64, i64 } zeroinitializer, ptr %a198 %t199 = getelementptr inbounds %S.linker.Names, ptr %a4, i32 0, i32 0 store i64 0, ptr %a200 br label %each.cond10173 each.cond10173: %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i32 0, i32 1 %t202 = load i64, ptr %t201 %t203 = load i64, ptr %a200 %t204 = icmp slt i64 %t203, %t202 br i1 %t204, label %each.body10174, label %each.end10176 each.body10174: %t205 = load ptr, ptr %t199 %t206 = getelementptr inbounds { ptr, i64, i64 }, ptr %t205, i64 %t203 %t207 = load { ptr, i64, i64 }, ptr %t206 store { ptr, i64, i64 } %t207, ptr %a208 store { ptr, i64, i64 } { ptr @.str.6818, i64 0, i64 0 }, ptr %a209 %t210 = getelementptr inbounds %S.cimport.CImports, ptr %a2, i32 0, i32 0 %t211 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t211, ptr %a212 %t213 = call i64 @finch_map_find(ptr %t210, ptr %a212, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t214 = icmp sge i64 %t213, 0 br i1 %t214, label %then10177, label %endif10179 then10177: %t215 = getelementptr inbounds %S.cimport.CImports, ptr %a2, i32 0, i32 0 %t216 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t216, ptr %a217 %t218 = call i64 @finch_map_find(ptr %t215, ptr %a217, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t219 = icmp slt i64 %t218, 0 br i1 %t219, label %map.missing10180, label %map.found10181 map.missing10180: store { ptr, i64, i64 } zeroinitializer, ptr %a220 store { ptr, i64, i64 } %t216, ptr %a221 call void @finch_buf_str(ptr %a220, ptr %a221, i32 1) call void @finch_map_missing(ptr @.str.6819, i64 131, ptr %a220) unreachable map.found10181: %t222 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t215, i32 0, i32 0 %t223 = load ptr, ptr %t222 %t224 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t223, i64 %t218 %t225 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t224, i32 0, i32 2 %t226 = getelementptr inbounds %S.cimport.CFunc, ptr %t225, i32 0, i32 1 %t227 = load { ptr, i64, i64 }, ptr %t226 store { ptr, i64, i64 } %t227, ptr %a228 call void @finch_str_copy(ptr %a229, ptr %a228) %t230 = load { ptr, i64, i64 }, ptr %a229 %t231 = load { ptr, i64, i64 }, ptr %a209 store { ptr, i64, i64 } %t230, ptr %a209 store { ptr, i64, i64 } %t231, ptr %a232 call void @finch_str_drop(ptr %a232) br label %endif10179 endif10179: %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 %t234 = load { ptr, i64, i64 }, ptr %a209 store i64 -1, ptr %a235 %t236 = load i64, ptr %t233 %t237 = load ptr, ptr %a197 store i64 0, ptr %a238 br label %find.cond10182 find.cond10182: %t239 = load i64, ptr %a238 %t240 = icmp slt i64 %t239, %t236 br i1 %t240, label %find.body10183, label %find.end10186 find.body10183: %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 %t239 %t242 = load { ptr, i64, i64 }, ptr %t241 store { ptr, i64, i64 } %t242, ptr %a243 store { ptr, i64, i64 } %t234, ptr %a244 %t245 = call i32 @finch_str_eq(ptr %a243, ptr %a244) %t246 = icmp ne i32 %t245, 0 br i1 %t246, label %find.hit10184, label %find.next10185 find.hit10184: store i64 %t239, ptr %a235 br label %find.end10186 find.next10185: %t247 = add i64 %t239, 1 store i64 %t247, ptr %a238 br label %find.cond10182 find.end10186: %t248 = load i64, ptr %a235 store i64 %t248, ptr %a249 %t250 = load i64, ptr %a249 %t251 = icmp slt i64 %t250, 0 br i1 %t251, label %then10187, label %endif10189 then10187: %t252 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 %t253 = load { ptr, i64, i64 }, ptr %a209 store { ptr, i64, i64 } %t253, ptr %a254 call void @finch_str_copy(ptr %a255, ptr %a254) %t256 = load { ptr, i64, i64 }, ptr %a255 %t257 = load i64, ptr %t252 %t258 = add i64 %t257, 1 call void @finch_arr_reserve(ptr %a197, i64 %t258, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t259 = load ptr, ptr %a197 %t260 = getelementptr inbounds { ptr, i64, i64 }, ptr %t259, i64 %t257 store { ptr, i64, i64 } %t256, ptr %t260 store i64 %t258, ptr %t252 %t261 = getelementptr inbounds { ptr, i64, i64 }, ptr %a198, i32 0, i32 1 %t262 = load i64, ptr %t261 %t263 = add i64 %t262, 1 call void @finch_arr_reserve(ptr %a198, i64 %t263, i64 ptrtoint (ptr getelementptr (%S.linker.Names, ptr null, i32 1) to i64)) %t264 = load ptr, ptr %a198 %t265 = getelementptr inbounds %S.linker.Names, ptr %t264, i64 %t262 store %S.linker.Names zeroinitializer, ptr %t265 store i64 %t263, ptr %t261 %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 %t267 = load i64, ptr %t266 %t268 = sub i64 %t267, 1 store i64 %t268, ptr %a249 br label %endif10189 endif10189: %t269 = load i64, ptr %a249 %t270 = load { ptr, i64, i64 }, ptr %a198 %t271 = extractvalue { ptr, i64, i64 } %t270, 1 %t272 = icmp uge i64 %t269, %t271 br i1 %t272, label %range10190, label %inrange10191 range10190: call void @finch_panic_index(ptr @.str.6820, i64 139, i64 %t269, i64 %t271) unreachable inrange10191: %t273 = extractvalue { ptr, i64, i64 } %t270, 0 %t274 = getelementptr inbounds %S.linker.Names, ptr %t273, i64 %t269 %t275 = load { ptr, i64, i64 }, ptr %a208 call void @finch.linker.Names.add(ptr %t274, { ptr, i64, i64 } %t275) call void @finch_str_drop(ptr %a209) br label %each.step10175 each.step10175: %t276 = load i64, ptr %a200 %t277 = add i64 %t276, 1 store i64 %t277, ptr %a200 br label %each.cond10173 each.end10176: %t278 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 %t279 = load i64, ptr %t278 store i64 0, ptr %a280 br label %for.cond10192 for.cond10192: %t281 = load i64, ptr %a280 %t282 = icmp slt i64 %t281, %t279 br i1 %t282, label %for.body10193, label %for.end10195 for.body10193: %t283 = load i64, ptr %a280 %t284 = load { ptr, i64, i64 }, ptr %a198 %t285 = extractvalue { ptr, i64, i64 } %t284, 1 %t286 = icmp uge i64 %t283, %t285 br i1 %t286, label %range10196, label %inrange10197 range10196: call void @finch_panic_index(ptr @.str.6821, i64 142, i64 %t283, i64 %t285) unreachable inrange10197: %t287 = extractvalue { ptr, i64, i64 } %t284, 0 %t288 = getelementptr inbounds %S.linker.Names, ptr %t287, i64 %t283 %t289 = getelementptr inbounds %S.linker.Names, ptr %t288, i32 0, i32 0 %t290 = load { ptr, i64, i64 }, ptr %t289 store { ptr, i64, i64 } %t290, ptr %a291 call void @finch.copy.arr_str(ptr %a292, ptr %a291) %t293 = load { ptr, i64, i64 }, ptr %a292 store { ptr, i64, i64 } %t293, ptr %a294 store { ptr, i64, i64 } zeroinitializer, ptr %a295 %t296 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 %t297 = load i64, ptr %t296 store i64 0, ptr %a298 br label %for.cond10198 for.cond10198: %t299 = load i64, ptr %a298 %t300 = icmp slt i64 %t299, %t297 br i1 %t300, label %for.body10199, label %for.end10201 for.body10199: %t301 = load i64, ptr %a298 %t302 = icmp slt i64 %t301, 3 br i1 %t302, label %then10202, label %endif10204 then10202: %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %a295, i32 0, i32 1 %t304 = load i64, ptr %a298 %t305 = load { ptr, i64, i64 }, ptr %a294 %t306 = extractvalue { ptr, i64, i64 } %t305, 1 %t307 = icmp uge i64 %t304, %t306 br i1 %t307, label %range10205, label %inrange10206 range10205: call void @finch_panic_index(ptr @.str.6822, i64 146, i64 %t304, i64 %t306) unreachable inrange10206: %t308 = extractvalue { ptr, i64, i64 } %t305, 0 %t309 = getelementptr inbounds { ptr, i64, i64 }, ptr %t308, i64 %t304 %t310 = load { ptr, i64, i64 }, ptr %t309 store { ptr, i64, i64 } %t310, ptr %a311 call void @finch_str_copy(ptr %a312, ptr %a311) %t313 = load { ptr, i64, i64 }, ptr %a312 %t314 = load i64, ptr %t303 %t315 = add i64 %t314, 1 call void @finch_arr_reserve(ptr %a295, i64 %t315, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t316 = load ptr, ptr %a295 %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t316, i64 %t314 store { ptr, i64, i64 } %t313, ptr %t317 store i64 %t315, ptr %t303 br label %endif10204 endif10204: br label %for.step10200 for.step10200: %t318 = load i64, ptr %a298 %t319 = add i64 %t318, 1 store i64 %t319, ptr %a298 br label %for.cond10198 for.end10201: %t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %a295, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.6823, i64 2, i64 0 }, ptr %a321 call void @finch_str_join(ptr %a322, ptr %a295, ptr %a321) %t323 = load { ptr, i64, i64 }, ptr %a322 store { ptr, i64, i64 } %t323, ptr %a324 %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 %t326 = load i64, ptr %t325 %t327 = icmp sgt i64 %t326, 3 br i1 %t327, label %then10207, label %endif10209 then10207: %t328 = load { ptr, i64, i64 }, ptr %a324 store { ptr, i64, i64 } %t328, ptr %a330 store { ptr, i64, i64 } { ptr @.str.6824, i64 5, i64 0 }, ptr %a331 call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) %t332 = load { ptr, i64, i64 }, ptr %a329 %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 %t334 = load i64, ptr %t333 %t335 = sub i64 %t334, 3 call void @finch_str_from_int(ptr %a336, i64 %t335) %t337 = load { ptr, i64, i64 }, ptr %a336 store { ptr, i64, i64 } %t332, ptr %a339 store { ptr, i64, i64 } %t337, ptr %a340 call void @finch_str_concat(ptr %a338, ptr %a339, ptr %a340) store { ptr, i64, i64 } %t332, ptr %a341 call void @finch_str_drop(ptr %a341) store { ptr, i64, i64 } %t337, ptr %a342 call void @finch_str_drop(ptr %a342) %t343 = load { ptr, i64, i64 }, ptr %a338 store { ptr, i64, i64 } %t343, ptr %a345 store { ptr, i64, i64 } { ptr @.str.6825, i64 5, i64 0 }, ptr %a346 call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) store { ptr, i64, i64 } %t343, ptr %a347 call void @finch_str_drop(ptr %a347) %t348 = load { ptr, i64, i64 }, ptr %a344 %t349 = load { ptr, i64, i64 }, ptr %a324 store { ptr, i64, i64 } %t348, ptr %a324 store { ptr, i64, i64 } %t349, ptr %a350 call void @finch_str_drop(ptr %a350) br label %endif10209 endif10209: %t351 = load i64, ptr %a280 %t352 = load { ptr, i64, i64 }, ptr %a197 %t353 = extractvalue { ptr, i64, i64 } %t352, 1 %t354 = icmp uge i64 %t351, %t353 br i1 %t354, label %range10210, label %inrange10211 range10210: call void @finch_panic_index(ptr @.str.6826, i64 153, i64 %t351, i64 %t353) unreachable inrange10211: %t355 = extractvalue { ptr, i64, i64 } %t352, 0 %t356 = getelementptr inbounds { ptr, i64, i64 }, ptr %t355, i64 %t351 %t357 = getelementptr inbounds { ptr, i64, i64 }, ptr %t356, i32 0, i32 1 %t358 = load i64, ptr %t357 %t359 = icmp eq i64 %t358, 0 br i1 %t359, label %then10212, label %endif10214 then10212: %t360 = load { ptr, i64, i64 }, ptr %a324 store { ptr, i64, i64 } { ptr @.str.6827, i64 25, i64 0 }, ptr %a362 store { ptr, i64, i64 } %t360, ptr %a363 call void @finch_str_concat(ptr %a361, ptr %a362, ptr %a363) %t364 = load { ptr, i64, i64 }, ptr %a361 %t365 = extractvalue { ptr, i64, i64 } %t364, 1 %t366 = trunc i64 %t365 to i32 %t367 = extractvalue { ptr, i64, i64 } %t364, 0 %t368 = icmp eq ptr %t367, null %t369 = select i1 %t368, ptr @.str.6828, ptr %t367 %t370 = call i32 (ptr, ...) @printf(ptr @.str.6829, i32 %t366, ptr %t369) store { ptr, i64, i64 } %t364, ptr %a371 call void @finch_str_drop(ptr %a371) %t372 = call i32 (ptr, ...) @printf(ptr @.str.6830) call void @finch_str_drop(ptr %a324) call void @finch.drop.arr_str(ptr %a295) call void @finch.drop.arr_str(ptr %a294) br label %for.step10194 endif10214: store { ptr, i64, i64 } { ptr @.str.6831, i64 4, i64 0 }, ptr %a373 %t374 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 %t375 = load i64, ptr %t374 %t376 = icmp eq i64 %t375, 1 br i1 %t376, label %then10215, label %endif10217 then10215: %t377 = load { ptr, i64, i64 }, ptr %a373 store { ptr, i64, i64 } { ptr @.str.6832, i64 5, i64 0 }, ptr %a373 store { ptr, i64, i64 } %t377, ptr %a378 call void @finch_str_drop(ptr %a378) br label %endif10217 endif10217: %t379 = load { ptr, i64, i64 }, ptr %a324 store { ptr, i64, i64 } { ptr @.str.6833, i64 7, i64 0 }, ptr %a381 store { ptr, i64, i64 } %t379, ptr %a382 call void @finch_str_concat(ptr %a380, ptr %a381, ptr %a382) %t383 = load { ptr, i64, i64 }, ptr %a380 store { ptr, i64, i64 } %t383, ptr %a385 store { ptr, i64, i64 } { ptr @.str.6834, i64 1, i64 0 }, ptr %a386 call void @finch_str_concat(ptr %a384, ptr %a385, ptr %a386) store { ptr, i64, i64 } %t383, ptr %a387 call void @finch_str_drop(ptr %a387) %t388 = load { ptr, i64, i64 }, ptr %a384 %t389 = load { ptr, i64, i64 }, ptr %a373 store { ptr, i64, i64 } %t388, ptr %a391 store { ptr, i64, i64 } %t389, ptr %a392 call void @finch_str_concat(ptr %a390, ptr %a391, ptr %a392) store { ptr, i64, i64 } %t388, ptr %a393 call void @finch_str_drop(ptr %a393) %t394 = load { ptr, i64, i64 }, ptr %a390 store { ptr, i64, i64 } %t394, ptr %a396 store { ptr, i64, i64 } { ptr @.str.6835, i64 7, i64 0 }, ptr %a397 call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397) store { ptr, i64, i64 } %t394, ptr %a398 call void @finch_str_drop(ptr %a398) %t399 = load { ptr, i64, i64 }, ptr %a395 %t400 = load i64, ptr %a280 %t401 = load { ptr, i64, i64 }, ptr %a197 %t402 = extractvalue { ptr, i64, i64 } %t401, 1 %t403 = icmp uge i64 %t400, %t402 br i1 %t403, label %range10218, label %inrange10219 range10218: call void @finch_panic_index(ptr @.str.6836, i64 161, i64 %t400, i64 %t402) unreachable inrange10219: %t404 = extractvalue { ptr, i64, i64 } %t401, 0 %t405 = getelementptr inbounds { ptr, i64, i64 }, ptr %t404, i64 %t400 %t406 = load { ptr, i64, i64 }, ptr %t405 store { ptr, i64, i64 } %t399, ptr %a408 store { ptr, i64, i64 } %t406, ptr %a409 call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) store { ptr, i64, i64 } %t399, ptr %a410 call void @finch_str_drop(ptr %a410) %t411 = load { ptr, i64, i64 }, ptr %a407 store { ptr, i64, i64 } %t411, ptr %a413 store { ptr, i64, i64 } { ptr @.str.6837, i64 31, i64 0 }, ptr %a414 call void @finch_str_concat(ptr %a412, ptr %a413, ptr %a414) store { ptr, i64, i64 } %t411, ptr %a415 call void @finch_str_drop(ptr %a415) %t416 = load { ptr, i64, i64 }, ptr %a412 %t417 = extractvalue { ptr, i64, i64 } %t416, 1 %t418 = trunc i64 %t417 to i32 %t419 = extractvalue { ptr, i64, i64 } %t416, 0 %t420 = icmp eq ptr %t419, null %t421 = select i1 %t420, ptr @.str.6838, ptr %t419 %t422 = call i32 (ptr, ...) @printf(ptr @.str.6839, i32 %t418, ptr %t421) store { ptr, i64, i64 } %t416, ptr %a423 call void @finch_str_drop(ptr %a423) %t424 = call i32 (ptr, ...) @printf(ptr @.str.6840) %t425 = extractvalue { ptr, i64, i64 } { ptr @.str.6841, i64 74, i64 0 }, 1 %t426 = trunc i64 %t425 to i32 %t427 = extractvalue { ptr, i64, i64 } { ptr @.str.6841, i64 74, i64 0 }, 0 %t428 = icmp eq ptr %t427, null %t429 = select i1 %t428, ptr @.str.6842, ptr %t427 %t430 = call i32 (ptr, ...) @printf(ptr @.str.6843, i32 %t426, ptr %t429) %t431 = call i32 (ptr, ...) @printf(ptr @.str.6844) %t432 = extractvalue { ptr, i64, i64 } { ptr @.str.6845, i64 66, i64 0 }, 1 %t433 = trunc i64 %t432 to i32 %t434 = extractvalue { ptr, i64, i64 } { ptr @.str.6845, i64 66, i64 0 }, 0 %t435 = icmp eq ptr %t434, null %t436 = select i1 %t435, ptr @.str.6846, ptr %t434 %t437 = call i32 (ptr, ...) @printf(ptr @.str.6847, i32 %t433, ptr %t436) %t438 = call i32 (ptr, ...) @printf(ptr @.str.6848) %t439 = extractvalue { ptr, i64, i64 } { ptr @.str.6849, i64 0, i64 0 }, 1 %t440 = trunc i64 %t439 to i32 %t441 = extractvalue { ptr, i64, i64 } { ptr @.str.6849, i64 0, i64 0 }, 0 %t442 = icmp eq ptr %t441, null %t443 = select i1 %t442, ptr @.str.6850, ptr %t441 %t444 = call i32 (ptr, ...) @printf(ptr @.str.6851, i32 %t440, ptr %t443) %t445 = call i32 (ptr, ...) @printf(ptr @.str.6852) %t446 = load i64, ptr %a280 %t447 = load { ptr, i64, i64 }, ptr %a197 %t448 = extractvalue { ptr, i64, i64 } %t447, 1 %t449 = icmp uge i64 %t446, %t448 br i1 %t449, label %range10220, label %inrange10221 range10220: call void @finch_panic_index(ptr @.str.6854, i64 165, i64 %t446, i64 %t448) unreachable inrange10221: %t450 = extractvalue { ptr, i64, i64 } %t447, 0 %t451 = getelementptr inbounds { ptr, i64, i64 }, ptr %t450, i64 %t446 %t452 = load { ptr, i64, i64 }, ptr %t451 %t453 = call { ptr, i64, i64 } @finch.linker.guessLib({ ptr, i64, i64 } %t452) store { ptr, i64, i64 } { ptr @.str.6853, i64 12, i64 0 }, ptr %a455 store { ptr, i64, i64 } %t453, ptr %a456 call void @finch_str_concat(ptr %a454, ptr %a455, ptr %a456) store { ptr, i64, i64 } %t453, ptr %a457 call void @finch_str_drop(ptr %a457) %t458 = load { ptr, i64, i64 }, ptr %a454 store { ptr, i64, i64 } %t458, ptr %a460 store { ptr, i64, i64 } { ptr @.str.6855, i64 1, i64 0 }, ptr %a461 call void @finch_str_concat(ptr %a459, ptr %a460, ptr %a461) store { ptr, i64, i64 } %t458, ptr %a462 call void @finch_str_drop(ptr %a462) %t463 = load { ptr, i64, i64 }, ptr %a459 %t464 = extractvalue { ptr, i64, i64 } %t463, 1 %t465 = trunc i64 %t464 to i32 %t466 = extractvalue { ptr, i64, i64 } %t463, 0 %t467 = icmp eq ptr %t466, null %t468 = select i1 %t467, ptr @.str.6856, ptr %t466 %t469 = call i32 (ptr, ...) @printf(ptr @.str.6857, i32 %t465, ptr %t468) store { ptr, i64, i64 } %t463, ptr %a470 call void @finch_str_drop(ptr %a470) %t471 = call i32 (ptr, ...) @printf(ptr @.str.6858) %t472 = extractvalue { ptr, i64, i64 } { ptr @.str.6859, i64 0, i64 0 }, 1 %t473 = trunc i64 %t472 to i32 %t474 = extractvalue { ptr, i64, i64 } { ptr @.str.6859, i64 0, i64 0 }, 0 %t475 = icmp eq ptr %t474, null %t476 = select i1 %t475, ptr @.str.6860, ptr %t474 %t477 = call i32 (ptr, ...) @printf(ptr @.str.6861, i32 %t473, ptr %t476) %t478 = call i32 (ptr, ...) @printf(ptr @.str.6862) call void @finch_str_drop(ptr %a373) call void @finch_str_drop(ptr %a324) call void @finch.drop.arr_str(ptr %a295) call void @finch.drop.arr_str(ptr %a294) br label %for.step10194 for.step10194: %t479 = load i64, ptr %a280 %t480 = add i64 %t479, 1 store i64 %t480, ptr %a280 br label %for.cond10192 for.end10195: call void @finch.drop.arr_S_linker_Names(ptr %a198) call void @finch.drop.arr_str(ptr %a197) call void @finch.drop.S_linker_Names(ptr %a5) call void @finch.drop.S_linker_Names(ptr %a4) ret i64 1 } define internal { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.linker.runtimeObject({ ptr, i64, i64 } %p0, %S.platform.Target %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca %S.platform.Target, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca i64, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store %S.platform.Target %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t4, ptr %a5 store { ptr, i64, i64 } zeroinitializer, ptr %a6 store { ptr, i64, i64 } zeroinitializer, ptr %a7 %t8 = call i32 @finch_try_read_file(ptr %a6, ptr %a5, ptr %a7) %t9 = icmp eq i32 %t8, 0 %t10 = load { ptr, i64, i64 }, ptr %a7 %t11 = load { ptr, i64, i64 }, ptr %a6 br i1 %t9, label %try.failed10225, label %try.ok10226 try.failed10225: %t12 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t10, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t12 try.ok10226: store { ptr, i64, i64 } %t11, ptr %a13 %t14 = call { ptr, i64, i64 } @finch.host.cacheDir() store { ptr, i64, i64 } %t14, ptr %a15 %t16 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t16, ptr %a18 store { ptr, i64, i64 } { ptr @.str.6863, i64 4, i64 0 }, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a17 %t21 = load { ptr, i64, i64 }, ptr %a13 %t22 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t21, ptr %a24 store { ptr, i64, i64 } %t22, ptr %a25 call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a23 %t27 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 0 %t28 = load { ptr, i64, i64 }, ptr %t27 store { ptr, i64, i64 } %t26, ptr %a30 store { ptr, i64, i64 } %t28, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) store { ptr, i64, i64 } %t26, ptr %a32 call void @finch_str_drop(ptr %a32) %t33 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t33, ptr %a35 store { ptr, i64, i64 } { ptr @.str.6864, i64 3, i64 0 }, ptr %a36 call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) store { ptr, i64, i64 } %t33, ptr %a37 call void @finch_str_drop(ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a34 %t39 = call { ptr, i64, i64 } @finch.linker.fingerprint({ ptr, i64, i64 } %t38) store { ptr, i64, i64 } %t38, ptr %a40 call void @finch_str_drop(ptr %a40) store { ptr, i64, i64 } %t20, ptr %a42 store { ptr, i64, i64 } %t39, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) store { ptr, i64, i64 } %t20, ptr %a44 call void @finch_str_drop(ptr %a44) store { ptr, i64, i64 } %t39, ptr %a45 call void @finch_str_drop(ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a41 store { ptr, i64, i64 } %t46, ptr %a48 store { ptr, i64, i64 } { ptr @.str.6865, i64 2, i64 0 }, ptr %a49 call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) store { ptr, i64, i64 } %t46, ptr %a50 call void @finch_str_drop(ptr %a50) %t51 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t51, ptr %a52 %t53 = load { ptr, i64, i64 }, ptr %a52 store { ptr, i64, i64 } %t53, ptr %a54 %t55 = call i32 @finch_file_exists(ptr %a54) %t56 = icmp ne i32 %t55, 0 br i1 %t56, label %then10227, label %endif10229 then10227: %t57 = load { ptr, i64, i64 }, ptr %a52 call void @finch_str_drop(ptr %a15) call void @finch_str_drop(ptr %a13) %t58 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t59 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t58, { ptr, i64, i64 } %t57, 1 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t59 endif10229: %t60 = load { ptr, i64, i64 }, ptr %a15 call void @finch.host.makeDirs({ ptr, i64, i64 } %t60) %t61 = load { ptr, i64, i64 }, ptr %a52 store { ptr, i64, i64 } %t61, ptr %a63 store { ptr, i64, i64 } { ptr @.str.6866, i64 5, i64 0 }, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) %t65 = load { ptr, i64, i64 }, ptr %a62 %t66 = call i64 @finch.host.pid() call void @finch_str_from_int(ptr %a67, i64 %t66) %t68 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t65, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) store { ptr, i64, i64 } %t65, ptr %a72 call void @finch_str_drop(ptr %a72) store { ptr, i64, i64 } %t68, ptr %a73 call void @finch_str_drop(ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t74, ptr %a75 store { ptr, i64, i64 } { ptr @.str.6867, i64 6, i64 0 }, ptr %a76 %t77 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 %t78 = load i1, ptr %t77 br i1 %t78, label %then10230, label %endif10232 then10230: %t79 = load { ptr, i64, i64 }, ptr %a76 store { ptr, i64, i64 } { ptr @.str.6868, i64 0, i64 0 }, ptr %a76 store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_drop(ptr %a80) br label %endif10232 endif10232: %t81 = load { ptr, i64, i64 }, ptr %a75 store { ptr, i64, i64 } %t81, ptr %a83 store { ptr, i64, i64 } { ptr @.str.6869, i64 4, i64 0 }, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a82 store { ptr, i64, i64 } %t85, ptr %a86 %t87 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t87, ptr %a89 store { ptr, i64, i64 } { ptr @.str.6870, i64 4, i64 0 }, ptr %a90 call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) %t91 = load { ptr, i64, i64 }, ptr %a88 %t92 = load { ptr, i64, i64 }, ptr %a76 store { ptr, i64, i64 } %t91, ptr %a94 store { ptr, i64, i64 } %t92, ptr %a95 call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) store { ptr, i64, i64 } %t91, ptr %a96 call void @finch_str_drop(ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t97, ptr %a99 store { ptr, i64, i64 } { ptr @.str.6871, i64 4, i64 0 }, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) store { ptr, i64, i64 } %t97, ptr %a101 call void @finch_str_drop(ptr %a101) %t102 = load { ptr, i64, i64 }, ptr %a98 %t103 = load { ptr, i64, i64 }, ptr %a1 %t104 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t103) store { ptr, i64, i64 } %t102, ptr %a106 store { ptr, i64, i64 } %t104, ptr %a107 call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) store { ptr, i64, i64 } %t102, ptr %a108 call void @finch_str_drop(ptr %a108) store { ptr, i64, i64 } %t104, ptr %a109 call void @finch_str_drop(ptr %a109) %t110 = load { ptr, i64, i64 }, ptr %a105 store { ptr, i64, i64 } %t110, ptr %a112 store { ptr, i64, i64 } { ptr @.str.6872, i64 4, i64 0 }, ptr %a113 call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) store { ptr, i64, i64 } %t110, ptr %a114 call void @finch_str_drop(ptr %a114) %t115 = load { ptr, i64, i64 }, ptr %a111 %t116 = load { ptr, i64, i64 }, ptr %a75 %t117 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t116) store { ptr, i64, i64 } %t115, ptr %a119 store { ptr, i64, i64 } %t117, ptr %a120 call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) store { ptr, i64, i64 } %t115, ptr %a121 call void @finch_str_drop(ptr %a121) store { ptr, i64, i64 } %t117, ptr %a122 call void @finch_str_drop(ptr %a122) %t123 = load { ptr, i64, i64 }, ptr %a118 store { ptr, i64, i64 } %t123, ptr %a125 store { ptr, i64, i64 } { ptr @.str.6873, i64 3, i64 0 }, ptr %a126 call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) store { ptr, i64, i64 } %t123, ptr %a127 call void @finch_str_drop(ptr %a127) %t128 = load { ptr, i64, i64 }, ptr %a124 %t129 = load { ptr, i64, i64 }, ptr %a86 %t130 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t129) store { ptr, i64, i64 } %t128, ptr %a132 store { ptr, i64, i64 } %t130, ptr %a133 call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) store { ptr, i64, i64 } %t128, ptr %a134 call void @finch_str_drop(ptr %a134) store { ptr, i64, i64 } %t130, ptr %a135 call void @finch_str_drop(ptr %a135) %t136 = load { ptr, i64, i64 }, ptr %a131 store { ptr, i64, i64 } %t136, ptr %a138 store { ptr, i64, i64 } { ptr @.str.6874, i64 5, i64 0 }, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) store { ptr, i64, i64 } %t136, ptr %a140 call void @finch_str_drop(ptr %a140) %t141 = load { ptr, i64, i64 }, ptr %a137 %t142 = call i64 @finch.host.run({ ptr, i64, i64 } %t141) store { ptr, i64, i64 } %t141, ptr %a143 call void @finch_str_drop(ptr %a143) store i64 %t142, ptr %a144 %t145 = load i64, ptr %a144 %t146 = icmp ne i64 %t145, 0 br i1 %t146, label %then10233, label %endif10235 then10233: %t147 = load { ptr, i64, i64 }, ptr %a86 store { ptr, i64, i64 } %t147, ptr %a148 store { ptr, i64, i64 } zeroinitializer, ptr %a149 store { ptr, i64, i64 } zeroinitializer, ptr %a150 %t151 = call i32 @finch_try_read_file(ptr %a149, ptr %a148, ptr %a150) %t152 = icmp eq i32 %t151, 0 %t153 = load { ptr, i64, i64 }, ptr %a150 %t154 = load { ptr, i64, i64 }, ptr %a149 br i1 %t152, label %or.failed10236, label %or.ok10237 or.failed10236: store { ptr, i64, i64 } %t153, ptr %a155 call void @finch_str_drop(ptr %a155) br label %or.bend10238 or.bend10238: br label %or.end10239 or.ok10237: br label %or.end10239 or.end10239: %t156 = phi { ptr, i64, i64 } [ { ptr @.str.6875, i64 0, i64 0 }, %or.bend10238 ], [ %t154, %or.ok10237 ] store { ptr, i64, i64 } %t156, ptr %a157 %t158 = load { ptr, i64, i64 }, ptr %a75 call void @finch.host.remove({ ptr, i64, i64 } %t158) %t159 = load { ptr, i64, i64 }, ptr %a86 call void @finch.host.remove({ ptr, i64, i64 } %t159) %t160 = load { ptr, i64, i64 }, ptr %a157 store { ptr, i64, i64 } %t160, ptr %a162 store { ptr, i64, i64 } { ptr @.str.6876, i64 46, i64 0 }, ptr %a163 call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) %t164 = load { ptr, i64, i64 }, ptr %a161 %t165 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t164, ptr %a167 store { ptr, i64, i64 } %t165, ptr %a168 call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) store { ptr, i64, i64 } %t164, ptr %a169 call void @finch_str_drop(ptr %a169) %t170 = load { ptr, i64, i64 }, ptr %a166 store { ptr, i64, i64 } %t170, ptr %a172 store { ptr, i64, i64 } { ptr @.str.6877, i64 30, i64 0 }, ptr %a173 call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) store { ptr, i64, i64 } %t170, ptr %a174 call void @finch_str_drop(ptr %a174) %t175 = load { ptr, i64, i64 }, ptr %a171 call void @finch_str_drop(ptr %a157) call void @finch_str_drop(ptr %a86) call void @finch_str_drop(ptr %a76) call void @finch_str_drop(ptr %a75) call void @finch_str_drop(ptr %a52) call void @finch_str_drop(ptr %a15) call void @finch_str_drop(ptr %a13) %t176 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t175, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t176 endif10235: %t177 = load { ptr, i64, i64 }, ptr %a86 call void @finch.host.remove({ ptr, i64, i64 } %t177) %t178 = load { ptr, i64, i64 }, ptr %a75 %t179 = load { ptr, i64, i64 }, ptr %a52 call void @finch.host.move({ ptr, i64, i64 } %t178, { ptr, i64, i64 } %t179) %t180 = load { ptr, i64, i64 }, ptr %a52 call void @finch_str_drop(ptr %a86) call void @finch_str_drop(ptr %a76) call void @finch_str_drop(ptr %a75) call void @finch_str_drop(ptr %a15) call void @finch_str_drop(ptr %a13) %t181 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t182 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t181, { ptr, i64, i64 } %t180, 1 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t182 } define internal i64 @finch.linker.build(%S.linker.Build %p0, %S.platform.Target %p1, %S.cimport.CImports %p2) { entry: %a1 = alloca %S.linker.Build, align 16 %a2 = alloca %S.platform.Target, align 16 %a3 = alloca %S.cimport.CImports, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca i64, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca i64, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a346 = alloca { ptr, i64, i64 }, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a355 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a373 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a399 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a401 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca { ptr, i64, i64 }, align 16 %a406 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a410 = alloca { ptr, i64, i64 }, align 16 %a411 = alloca i64, align 16 %a415 = alloca { ptr, i64, i64 }, align 16 %a416 = alloca { ptr, i64, i64 }, align 16 %a417 = alloca { ptr, i64, i64 }, align 16 %a422 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a432 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a441 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a458 = alloca { ptr, i64, i64 }, align 16 %a462 = alloca { ptr, i64, i64 }, align 16 %a463 = alloca { ptr, i64, i64 }, align 16 %a464 = alloca { ptr, i64, i64 }, align 16 %a465 = alloca { ptr, i64, i64 }, align 16 %a466 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a471 = alloca { ptr, i64, i64 }, align 16 %a472 = alloca { ptr, i64, i64 }, align 16 %a473 = alloca { ptr, i64, i64 }, align 16 %a477 = alloca { ptr, i64, i64 }, align 16 %a478 = alloca { ptr, i64, i64 }, align 16 %a479 = alloca { ptr, i64, i64 }, align 16 %a484 = alloca { ptr, i64, i64 }, align 16 %a485 = alloca { ptr, i64, i64 }, align 16 %a486 = alloca { ptr, i64, i64 }, align 16 %a490 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca { ptr, i64, i64 }, align 16 %a492 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a494 = alloca { ptr, i64, i64 }, align 16 %a497 = alloca { ptr, i64, i64 }, align 16 %a499 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a501 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a508 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca { ptr, i64, i64 }, align 16 %a513 = alloca { ptr, i64, i64 }, align 16 %a517 = alloca { ptr, i64, i64 }, align 16 %a518 = alloca { ptr, i64, i64 }, align 16 %a519 = alloca { ptr, i64, i64 }, align 16 %a523 = alloca { ptr, i64, i64 }, align 16 %a524 = alloca { ptr, i64, i64 }, align 16 %a525 = alloca { ptr, i64, i64 }, align 16 %a526 = alloca { ptr, i64, i64 }, align 16 %a527 = alloca { ptr, i64, i64 }, align 16 %a529 = alloca { ptr, i64, i64 }, align 16 %a530 = alloca { ptr, i64, i64 }, align 16 %a531 = alloca { ptr, i64, i64 }, align 16 %a532 = alloca { ptr, i64, i64 }, align 16 %a535 = alloca { ptr, i64, i64 }, align 16 %a536 = alloca i64, align 16 %a538 = alloca { ptr, i64, i64 }, align 16 %a539 = alloca { ptr, i64, i64 }, align 16 %a540 = alloca { ptr, i64, i64 }, align 16 %a545 = alloca { ptr, i64, i64 }, align 16 %a547 = alloca { ptr, i64, i64 }, align 16 %a550 = alloca i64, align 16 %a558 = alloca { ptr, i64, i64 }, align 16 %a565 = alloca { ptr, i64, i64 }, align 16 %a566 = alloca { ptr, i64, i64 }, align 16 %a567 = alloca { ptr, i64, i64 }, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a570 = alloca { ptr, i64, i64 }, align 16 %a571 = alloca { ptr, i64, i64 }, align 16 %a572 = alloca { ptr, i64, i64 }, align 16 %a580 = alloca { ptr, i64, i64 }, align 16 store %S.linker.Build %p0, ptr %a1 store %S.platform.Target %p1, ptr %a2 store %S.cimport.CImports %p2, ptr %a3 %t4 = extractvalue { ptr, i64, i64 } { ptr @.str.6878, i64 11, i64 0 }, 0 %t5 = icmp eq ptr %t4, null %t6 = select i1 %t5, ptr @.str.6879, ptr %t4 %t7 = call ptr @getenv(ptr %t6) store { ptr, i64, i64 } zeroinitializer, ptr %a8 call void @finch_str_from_c(ptr %a8, ptr %t7) %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 call void @finch_str_copy(ptr %a11, ptr %a10) %t12 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t12, ptr %a13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = icmp eq i64 %t15, 0 br i1 %t16, label %then10240, label %endif10242 then10240: %t17 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } { ptr @.str.6880, i64 5, i64 0 }, ptr %a13 store { ptr, i64, i64 } %t17, ptr %a18 call void @finch_str_drop(ptr %a18) br label %endif10242 endif10242: %t19 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t19, ptr %a20 call void @finch_str_copy(ptr %a21, ptr %a20) %t22 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t22, ptr %a23 %t24 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 %t25 = load i1, ptr %t24 br i1 %t25, label %then10243, label %else10244 then10243: %t26 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 7 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 call void @finch_str_copy(ptr %a29, ptr %a28) %t30 = load { ptr, i64, i64 }, ptr %a29 %t31 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t30, ptr %a23 store { ptr, i64, i64 } %t31, ptr %a32 call void @finch_str_drop(ptr %a32) br label %endif10245 else10244: %t33 = extractvalue { ptr, i64, i64 } { ptr @.str.6881, i64 8, i64 0 }, 0 %t34 = icmp eq ptr %t33, null %t35 = select i1 %t34, ptr @.str.6882, ptr %t33 %t36 = call ptr @getenv(ptr %t35) store { ptr, i64, i64 } zeroinitializer, ptr %a37 call void @finch_str_from_c(ptr %a37, ptr %t36) %t38 = load { ptr, i64, i64 }, ptr %a37 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp sgt i64 %t39, 0 br i1 %t40, label %then10246, label %endif10248 then10246: %t41 = extractvalue { ptr, i64, i64 } { ptr @.str.6883, i64 8, i64 0 }, 0 %t42 = icmp eq ptr %t41, null %t43 = select i1 %t42, ptr @.str.6884, ptr %t41 %t44 = call ptr @getenv(ptr %t43) store { ptr, i64, i64 } zeroinitializer, ptr %a45 call void @finch_str_from_c(ptr %a45, ptr %t44) %t46 = load { ptr, i64, i64 }, ptr %a45 store { ptr, i64, i64 } %t46, ptr %a47 call void @finch_str_copy(ptr %a48, ptr %a47) %t49 = load { ptr, i64, i64 }, ptr %a48 %t50 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t49, ptr %a23 store { ptr, i64, i64 } %t50, ptr %a51 call void @finch_str_drop(ptr %a51) br label %endif10248 endif10248: br label %endif10245 endif10245: %t52 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 2 %t53 = load { ptr, i64, i64 }, ptr %t52 %t54 = load %S.platform.Target, ptr %a2 %t55 = load { ptr, i64, i64 }, ptr %a23 %t56 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.linker.runtimeObject({ ptr, i64, i64 } %t53, %S.platform.Target %t54, { ptr, i64, i64 } %t55) %t57 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56, 0 %t58 = xor i1 %t57, true %t59 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56, 2 %t60 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56, 1 br i1 %t58, label %or.failed10249, label %or.ok10250 or.failed10249: store { ptr, i64, i64 } %t59, ptr %a61 %t62 = load { ptr, i64, i64 }, ptr %a61 %t63 = extractvalue { ptr, i64, i64 } %t62, 1 %t64 = trunc i64 %t63 to i32 %t65 = extractvalue { ptr, i64, i64 } %t62, 0 %t66 = icmp eq ptr %t65, null %t67 = select i1 %t66, ptr @.str.6885, ptr %t65 %t68 = call i32 (ptr, ...) @printf(ptr @.str.6886, i32 %t64, ptr %t67) %t69 = call i32 (ptr, ...) @printf(ptr @.str.6887) call void @finch_str_drop(ptr %a61) call void @finch_str_drop(ptr %a23) call void @finch_str_drop(ptr %a13) ret i64 1 or.ok10250: store { ptr, i64, i64 } %t60, ptr %a70 %t71 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 %t72 = load { ptr, i64, i64 }, ptr %t71 store { ptr, i64, i64 } %t72, ptr %a74 store { ptr, i64, i64 } { ptr @.str.6888, i64 3, i64 0 }, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a73 store { ptr, i64, i64 } %t76, ptr %a77 %t78 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 %t79 = load { ptr, i64, i64 }, ptr %t78 store { ptr, i64, i64 } %t79, ptr %a81 store { ptr, i64, i64 } { ptr @.str.6889, i64 2, i64 0 }, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } %t83, ptr %a84 %t85 = load { ptr, i64, i64 }, ptr %a77 %t86 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 1 %t87 = load { ptr, i64, i64 }, ptr %t86 store { ptr, i64, i64 } %t85, ptr %a88 store { ptr, i64, i64 } %t87, ptr %a89 %t90 = call i32 @finch_write_file(ptr %a88, ptr %a89) %t91 = icmp ne i32 %t90, 0 store { ptr, i64, i64 } { ptr @.str.6890, i64 0, i64 0 }, ptr %a92 %t93 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 %t94 = load i1, ptr %t93 br label %logic.from10251 logic.from10251: br i1 %t94, label %logic.end10253, label %logic.rhs10252 logic.rhs10252: %t95 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 %t96 = load i1, ptr %t95 br label %logic.rend10254 logic.rend10254: br label %logic.end10253 logic.end10253: %t97 = phi i1 [ true, %logic.from10251 ], [ %t96, %logic.rend10254 ] br i1 %t97, label %then10255, label %endif10257 then10255: %t98 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 0 %t99 = load { ptr, i64, i64 }, ptr %t98 store { ptr, i64, i64 } { ptr @.str.6891, i64 10, i64 0 }, ptr %a101 store { ptr, i64, i64 } %t99, ptr %a102 call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) %t103 = load { ptr, i64, i64 }, ptr %a100 %t104 = load { ptr, i64, i64 }, ptr %a92 store { ptr, i64, i64 } %t103, ptr %a92 store { ptr, i64, i64 } %t104, ptr %a105 call void @finch_str_drop(ptr %a105) br label %endif10257 endif10257: %t106 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 %t107 = load { ptr, i64, i64 }, ptr %t106 store { ptr, i64, i64 } %t107, ptr %a109 store { ptr, i64, i64 } { ptr @.str.6892, i64 4, i64 0 }, ptr %a110 call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) %t111 = load { ptr, i64, i64 }, ptr %a108 store { ptr, i64, i64 } %t111, ptr %a112 %t113 = load { ptr, i64, i64 }, ptr %a13 %t114 = load { ptr, i64, i64 }, ptr %a92 store { ptr, i64, i64 } %t113, ptr %a116 store { ptr, i64, i64 } %t114, ptr %a117 call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) %t118 = load { ptr, i64, i64 }, ptr %a115 store { ptr, i64, i64 } %t118, ptr %a120 store { ptr, i64, i64 } { ptr @.str.6893, i64 1, i64 0 }, ptr %a121 call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) store { ptr, i64, i64 } %t118, ptr %a122 call void @finch_str_drop(ptr %a122) %t123 = load { ptr, i64, i64 }, ptr %a119 %t124 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 3 %t125 = load { ptr, i64, i64 }, ptr %t124 store { ptr, i64, i64 } %t123, ptr %a127 store { ptr, i64, i64 } %t125, ptr %a128 call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) store { ptr, i64, i64 } %t123, ptr %a129 call void @finch_str_drop(ptr %a129) %t130 = load { ptr, i64, i64 }, ptr %a126 %t131 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 4 %t132 = load { ptr, i64, i64 }, ptr %t131 store { ptr, i64, i64 } %t130, ptr %a134 store { ptr, i64, i64 } %t132, ptr %a135 call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) store { ptr, i64, i64 } %t130, ptr %a136 call void @finch_str_drop(ptr %a136) %t137 = load { ptr, i64, i64 }, ptr %a133 store { ptr, i64, i64 } %t137, ptr %a139 store { ptr, i64, i64 } { ptr @.str.6894, i64 7, i64 0 }, ptr %a140 call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) store { ptr, i64, i64 } %t137, ptr %a141 call void @finch_str_drop(ptr %a141) %t142 = load { ptr, i64, i64 }, ptr %a138 %t143 = load { ptr, i64, i64 }, ptr %a77 %t144 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t143) store { ptr, i64, i64 } %t142, ptr %a146 store { ptr, i64, i64 } %t144, ptr %a147 call void @finch_str_concat(ptr %a145, ptr %a146, ptr %a147) store { ptr, i64, i64 } %t142, ptr %a148 call void @finch_str_drop(ptr %a148) store { ptr, i64, i64 } %t144, ptr %a149 call void @finch_str_drop(ptr %a149) %t150 = load { ptr, i64, i64 }, ptr %a145 store { ptr, i64, i64 } %t150, ptr %a152 store { ptr, i64, i64 } { ptr @.str.6895, i64 4, i64 0 }, ptr %a153 call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) store { ptr, i64, i64 } %t150, ptr %a154 call void @finch_str_drop(ptr %a154) %t155 = load { ptr, i64, i64 }, ptr %a151 %t156 = load { ptr, i64, i64 }, ptr %a84 %t157 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t156) store { ptr, i64, i64 } %t155, ptr %a159 store { ptr, i64, i64 } %t157, ptr %a160 call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) store { ptr, i64, i64 } %t155, ptr %a161 call void @finch_str_drop(ptr %a161) store { ptr, i64, i64 } %t157, ptr %a162 call void @finch_str_drop(ptr %a162) %t163 = load { ptr, i64, i64 }, ptr %a158 store { ptr, i64, i64 } %t163, ptr %a165 store { ptr, i64, i64 } { ptr @.str.6896, i64 3, i64 0 }, ptr %a166 call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) store { ptr, i64, i64 } %t163, ptr %a167 call void @finch_str_drop(ptr %a167) %t168 = load { ptr, i64, i64 }, ptr %a164 %t169 = load { ptr, i64, i64 }, ptr %a112 %t170 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t169) store { ptr, i64, i64 } %t168, ptr %a172 store { ptr, i64, i64 } %t170, ptr %a173 call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) store { ptr, i64, i64 } %t168, ptr %a174 call void @finch_str_drop(ptr %a174) store { ptr, i64, i64 } %t170, ptr %a175 call void @finch_str_drop(ptr %a175) %t176 = load { ptr, i64, i64 }, ptr %a171 store { ptr, i64, i64 } %t176, ptr %a178 store { ptr, i64, i64 } { ptr @.str.6897, i64 5, i64 0 }, ptr %a179 call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) store { ptr, i64, i64 } %t176, ptr %a180 call void @finch_str_drop(ptr %a180) %t181 = load { ptr, i64, i64 }, ptr %a177 %t182 = call i64 @finch.host.run({ ptr, i64, i64 } %t181) store { ptr, i64, i64 } %t181, ptr %a183 call void @finch_str_drop(ptr %a183) store i64 %t182, ptr %a184 %t185 = load { ptr, i64, i64 }, ptr %a77 call void @finch.host.remove({ ptr, i64, i64 } %t185) %t186 = load i64, ptr %a184 %t187 = icmp ne i64 %t186, 0 br i1 %t187, label %then10258, label %endif10260 then10258: %t188 = load { ptr, i64, i64 }, ptr %a112 store { ptr, i64, i64 } %t188, ptr %a189 store { ptr, i64, i64 } zeroinitializer, ptr %a190 store { ptr, i64, i64 } zeroinitializer, ptr %a191 %t192 = call i32 @finch_try_read_file(ptr %a190, ptr %a189, ptr %a191) %t193 = icmp eq i32 %t192, 0 %t194 = load { ptr, i64, i64 }, ptr %a191 %t195 = load { ptr, i64, i64 }, ptr %a190 br i1 %t193, label %or.failed10261, label %or.ok10262 or.failed10261: store { ptr, i64, i64 } %t194, ptr %a196 call void @finch_str_drop(ptr %a196) br label %or.bend10263 or.bend10263: br label %or.end10264 or.ok10262: br label %or.end10264 or.end10264: %t197 = phi { ptr, i64, i64 } [ { ptr @.str.6898, i64 0, i64 0 }, %or.bend10263 ], [ %t195, %or.ok10262 ] %t198 = extractvalue { ptr, i64, i64 } %t197, 1 %t199 = trunc i64 %t198 to i32 %t200 = extractvalue { ptr, i64, i64 } %t197, 0 %t201 = icmp eq ptr %t200, null %t202 = select i1 %t201, ptr @.str.6899, ptr %t200 %t203 = call i32 (ptr, ...) @printf(ptr @.str.6900, i32 %t199, ptr %t202) store { ptr, i64, i64 } %t197, ptr %a204 call void @finch_str_drop(ptr %a204) %t205 = call i32 (ptr, ...) @printf(ptr @.str.6901) %t206 = extractvalue { ptr, i64, i64 } { ptr @.str.6902, i64 46, i64 0 }, 1 %t207 = trunc i64 %t206 to i32 %t208 = extractvalue { ptr, i64, i64 } { ptr @.str.6902, i64 46, i64 0 }, 0 %t209 = icmp eq ptr %t208, null %t210 = select i1 %t209, ptr @.str.6903, ptr %t208 %t211 = call i32 (ptr, ...) @printf(ptr @.str.6904, i32 %t207, ptr %t210) %t212 = call i32 (ptr, ...) @printf(ptr @.str.6905) %t213 = load { ptr, i64, i64 }, ptr %a84 call void @finch.host.remove({ ptr, i64, i64 } %t213) %t214 = load { ptr, i64, i64 }, ptr %a112 call void @finch.host.remove({ ptr, i64, i64 } %t214) call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a92) call void @finch_str_drop(ptr %a84) call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a70) call void @finch_str_drop(ptr %a23) call void @finch_str_drop(ptr %a13) ret i64 1 endif10260: %t215 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t215, ptr %a217 store { ptr, i64, i64 } { ptr @.str.6906, i64 1, i64 0 }, ptr %a218 call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) %t219 = load { ptr, i64, i64 }, ptr %a216 %t220 = load { ptr, i64, i64 }, ptr %a84 %t221 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t220) store { ptr, i64, i64 } %t219, ptr %a223 store { ptr, i64, i64 } %t221, ptr %a224 call void @finch_str_concat(ptr %a222, ptr %a223, ptr %a224) store { ptr, i64, i64 } %t219, ptr %a225 call void @finch_str_drop(ptr %a225) store { ptr, i64, i64 } %t221, ptr %a226 call void @finch_str_drop(ptr %a226) %t227 = load { ptr, i64, i64 }, ptr %a222 store { ptr, i64, i64 } %t227, ptr %a229 store { ptr, i64, i64 } { ptr @.str.6907, i64 1, i64 0 }, ptr %a230 call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) store { ptr, i64, i64 } %t227, ptr %a231 call void @finch_str_drop(ptr %a231) %t232 = load { ptr, i64, i64 }, ptr %a228 %t233 = load { ptr, i64, i64 }, ptr %a70 %t234 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t233) store { ptr, i64, i64 } %t232, ptr %a236 store { ptr, i64, i64 } %t234, ptr %a237 call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) store { ptr, i64, i64 } %t232, ptr %a238 call void @finch_str_drop(ptr %a238) store { ptr, i64, i64 } %t234, ptr %a239 call void @finch_str_drop(ptr %a239) %t240 = load { ptr, i64, i64 }, ptr %a235 store { ptr, i64, i64 } %t240, ptr %a242 store { ptr, i64, i64 } { ptr @.str.6908, i64 4, i64 0 }, ptr %a243 call void @finch_str_concat(ptr %a241, ptr %a242, ptr %a243) store { ptr, i64, i64 } %t240, ptr %a244 call void @finch_str_drop(ptr %a244) %t245 = load { ptr, i64, i64 }, ptr %a241 %t246 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 %t247 = load { ptr, i64, i64 }, ptr %t246 %t248 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t247) store { ptr, i64, i64 } %t245, ptr %a250 store { ptr, i64, i64 } %t248, ptr %a251 call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) store { ptr, i64, i64 } %t245, ptr %a252 call void @finch_str_drop(ptr %a252) store { ptr, i64, i64 } %t248, ptr %a253 call void @finch_str_drop(ptr %a253) %t254 = load { ptr, i64, i64 }, ptr %a249 store { ptr, i64, i64 } %t254, ptr %a255 %t256 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 2 %t257 = load i1, ptr %t256 %t258 = xor i1 %t257, true br i1 %t258, label %then10265, label %endif10267 then10265: %t259 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t259, ptr %a261 store { ptr, i64, i64 } { ptr @.str.6909, i64 4, i64 0 }, ptr %a262 call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) %t263 = load { ptr, i64, i64 }, ptr %a260 %t264 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t263, ptr %a255 store { ptr, i64, i64 } %t264, ptr %a265 call void @finch_str_drop(ptr %a265) br label %endif10267 endif10267: %t266 = extractvalue { ptr, i64, i64 } { ptr @.str.6910, i64 13, i64 0 }, 0 %t267 = icmp eq ptr %t266, null %t268 = select i1 %t267, ptr @.str.6911, ptr %t266 %t269 = call ptr @getenv(ptr %t268) store { ptr, i64, i64 } zeroinitializer, ptr %a270 call void @finch_str_from_c(ptr %a270, ptr %t269) %t271 = load { ptr, i64, i64 }, ptr %a270 %t272 = extractvalue { ptr, i64, i64 } %t271, 1 %t273 = icmp sgt i64 %t272, 0 br i1 %t273, label %then10268, label %endif10270 then10268: %t274 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t274, ptr %a276 store { ptr, i64, i64 } { ptr @.str.6912, i64 1, i64 0 }, ptr %a277 call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) %t278 = load { ptr, i64, i64 }, ptr %a275 %t279 = extractvalue { ptr, i64, i64 } { ptr @.str.6913, i64 13, i64 0 }, 0 %t280 = icmp eq ptr %t279, null %t281 = select i1 %t280, ptr @.str.6914, ptr %t279 %t282 = call ptr @getenv(ptr %t281) store { ptr, i64, i64 } zeroinitializer, ptr %a283 call void @finch_str_from_c(ptr %a283, ptr %t282) %t284 = load { ptr, i64, i64 }, ptr %a283 store { ptr, i64, i64 } %t278, ptr %a286 store { ptr, i64, i64 } %t284, ptr %a287 call void @finch_str_concat(ptr %a285, ptr %a286, ptr %a287) store { ptr, i64, i64 } %t278, ptr %a288 call void @finch_str_drop(ptr %a288) %t289 = load { ptr, i64, i64 }, ptr %a285 %t290 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t289, ptr %a255 store { ptr, i64, i64 } %t290, ptr %a291 call void @finch_str_drop(ptr %a291) br label %endif10270 endif10270: %t292 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 5 %t293 = load i1, ptr %t292 br i1 %t293, label %then10271, label %endif10273 then10271: %t294 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 3 %t295 = load i1, ptr %t294 br i1 %t295, label %then10274, label %else10275 then10274: %t296 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t296, ptr %a298 store { ptr, i64, i64 } { ptr @.str.6915, i64 12, i64 0 }, ptr %a299 call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) %t300 = load { ptr, i64, i64 }, ptr %a297 %t301 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t300, ptr %a255 store { ptr, i64, i64 } %t301, ptr %a302 call void @finch_str_drop(ptr %a302) br label %endif10276 else10275: %t303 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t303, ptr %a305 store { ptr, i64, i64 } { ptr @.str.6916, i64 8, i64 0 }, ptr %a306 call void @finch_str_concat(ptr %a304, ptr %a305, ptr %a306) %t307 = load { ptr, i64, i64 }, ptr %a304 %t308 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t307, ptr %a255 store { ptr, i64, i64 } %t308, ptr %a309 call void @finch_str_drop(ptr %a309) br label %endif10276 endif10276: br label %endif10273 endif10273: store { ptr, i64, i64 } zeroinitializer, ptr %a310 %t311 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 6 store i64 0, ptr %a312 br label %each.cond10277 each.cond10277: %t313 = getelementptr inbounds { ptr, i64, i64 }, ptr %t311, i32 0, i32 1 %t314 = load i64, ptr %t313 %t315 = load i64, ptr %a312 %t316 = icmp slt i64 %t315, %t314 br i1 %t316, label %each.body10278, label %each.end10280 each.body10278: %t317 = load ptr, ptr %t311 %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t317, i64 %t315 %t319 = load { ptr, i64, i64 }, ptr %t318 store { ptr, i64, i64 } %t319, ptr %a320 %t321 = load { ptr, i64, i64 }, ptr %a320 store { ptr, i64, i64 } %t321, ptr %a322 store { ptr, i64, i64 } { ptr @.str.6918, i64 2, i64 0 }, ptr %a324 %t325 = call i32 @finch_str_ends(ptr %a322, ptr %a324) %t326 = icmp ne i32 %t325, 0 br i1 %t326, label %then10281, label %else10282 then10281: %t327 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 %t328 = load { ptr, i64, i64 }, ptr %t327 store { ptr, i64, i64 } %t328, ptr %a330 store { ptr, i64, i64 } { ptr @.str.6919, i64 1, i64 0 }, ptr %a331 call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) %t332 = load { ptr, i64, i64 }, ptr %a329 %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 %t334 = load i64, ptr %t333 call void @finch_str_from_int(ptr %a335, i64 %t334) %t336 = load { ptr, i64, i64 }, ptr %a335 store { ptr, i64, i64 } %t332, ptr %a338 store { ptr, i64, i64 } %t336, ptr %a339 call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) store { ptr, i64, i64 } %t332, ptr %a340 call void @finch_str_drop(ptr %a340) store { ptr, i64, i64 } %t336, ptr %a341 call void @finch_str_drop(ptr %a341) %t342 = load { ptr, i64, i64 }, ptr %a337 store { ptr, i64, i64 } %t342, ptr %a344 store { ptr, i64, i64 } { ptr @.str.6920, i64 2, i64 0 }, ptr %a345 call void @finch_str_concat(ptr %a343, ptr %a344, ptr %a345) store { ptr, i64, i64 } %t342, ptr %a346 call void @finch_str_drop(ptr %a346) %t347 = load { ptr, i64, i64 }, ptr %a343 store { ptr, i64, i64 } %t347, ptr %a348 store { ptr, i64, i64 } { ptr @.str.6921, i64 6, i64 0 }, ptr %a349 %t350 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 %t351 = load i1, ptr %t350 br i1 %t351, label %then10284, label %endif10286 then10284: %t352 = load { ptr, i64, i64 }, ptr %a349 store { ptr, i64, i64 } { ptr @.str.6922, i64 0, i64 0 }, ptr %a349 store { ptr, i64, i64 } %t352, ptr %a353 call void @finch_str_drop(ptr %a353) br label %endif10286 endif10286: %t354 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t354, ptr %a356 store { ptr, i64, i64 } { ptr @.str.6923, i64 4, i64 0 }, ptr %a357 call void @finch_str_concat(ptr %a355, ptr %a356, ptr %a357) %t358 = load { ptr, i64, i64 }, ptr %a355 %t359 = load { ptr, i64, i64 }, ptr %a349 store { ptr, i64, i64 } %t358, ptr %a361 store { ptr, i64, i64 } %t359, ptr %a362 call void @finch_str_concat(ptr %a360, ptr %a361, ptr %a362) store { ptr, i64, i64 } %t358, ptr %a363 call void @finch_str_drop(ptr %a363) %t364 = load { ptr, i64, i64 }, ptr %a360 store { ptr, i64, i64 } %t364, ptr %a366 store { ptr, i64, i64 } { ptr @.str.6924, i64 4, i64 0 }, ptr %a367 call void @finch_str_concat(ptr %a365, ptr %a366, ptr %a367) store { ptr, i64, i64 } %t364, ptr %a368 call void @finch_str_drop(ptr %a368) %t369 = load { ptr, i64, i64 }, ptr %a365 %t370 = load { ptr, i64, i64 }, ptr %a320 %t371 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t370) store { ptr, i64, i64 } %t369, ptr %a373 store { ptr, i64, i64 } %t371, ptr %a374 call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) store { ptr, i64, i64 } %t369, ptr %a375 call void @finch_str_drop(ptr %a375) store { ptr, i64, i64 } %t371, ptr %a376 call void @finch_str_drop(ptr %a376) %t377 = load { ptr, i64, i64 }, ptr %a372 store { ptr, i64, i64 } %t377, ptr %a379 store { ptr, i64, i64 } { ptr @.str.6925, i64 4, i64 0 }, ptr %a380 call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380) store { ptr, i64, i64 } %t377, ptr %a381 call void @finch_str_drop(ptr %a381) %t382 = load { ptr, i64, i64 }, ptr %a378 %t383 = load { ptr, i64, i64 }, ptr %a348 %t384 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t383) store { ptr, i64, i64 } %t382, ptr %a386 store { ptr, i64, i64 } %t384, ptr %a387 call void @finch_str_concat(ptr %a385, ptr %a386, ptr %a387) store { ptr, i64, i64 } %t382, ptr %a388 call void @finch_str_drop(ptr %a388) store { ptr, i64, i64 } %t384, ptr %a389 call void @finch_str_drop(ptr %a389) %t390 = load { ptr, i64, i64 }, ptr %a385 store { ptr, i64, i64 } %t390, ptr %a392 store { ptr, i64, i64 } { ptr @.str.6926, i64 3, i64 0 }, ptr %a393 call void @finch_str_concat(ptr %a391, ptr %a392, ptr %a393) store { ptr, i64, i64 } %t390, ptr %a394 call void @finch_str_drop(ptr %a394) %t395 = load { ptr, i64, i64 }, ptr %a391 %t396 = load { ptr, i64, i64 }, ptr %a112 %t397 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t396) store { ptr, i64, i64 } %t395, ptr %a399 store { ptr, i64, i64 } %t397, ptr %a400 call void @finch_str_concat(ptr %a398, ptr %a399, ptr %a400) store { ptr, i64, i64 } %t395, ptr %a401 call void @finch_str_drop(ptr %a401) store { ptr, i64, i64 } %t397, ptr %a402 call void @finch_str_drop(ptr %a402) %t403 = load { ptr, i64, i64 }, ptr %a398 store { ptr, i64, i64 } %t403, ptr %a405 store { ptr, i64, i64 } { ptr @.str.6927, i64 5, i64 0 }, ptr %a406 call void @finch_str_concat(ptr %a404, ptr %a405, ptr %a406) store { ptr, i64, i64 } %t403, ptr %a407 call void @finch_str_drop(ptr %a407) %t408 = load { ptr, i64, i64 }, ptr %a404 %t409 = call i64 @finch.host.run({ ptr, i64, i64 } %t408) store { ptr, i64, i64 } %t408, ptr %a410 call void @finch_str_drop(ptr %a410) store i64 %t409, ptr %a411 %t412 = load i64, ptr %a411 %t413 = icmp ne i64 %t412, 0 br i1 %t413, label %then10287, label %endif10289 then10287: %t414 = load { ptr, i64, i64 }, ptr %a112 store { ptr, i64, i64 } %t414, ptr %a415 store { ptr, i64, i64 } zeroinitializer, ptr %a416 store { ptr, i64, i64 } zeroinitializer, ptr %a417 %t418 = call i32 @finch_try_read_file(ptr %a416, ptr %a415, ptr %a417) %t419 = icmp eq i32 %t418, 0 %t420 = load { ptr, i64, i64 }, ptr %a417 %t421 = load { ptr, i64, i64 }, ptr %a416 br i1 %t419, label %or.failed10290, label %or.ok10291 or.failed10290: store { ptr, i64, i64 } %t420, ptr %a422 call void @finch_str_drop(ptr %a422) br label %or.bend10292 or.bend10292: br label %or.end10293 or.ok10291: br label %or.end10293 or.end10293: %t423 = phi { ptr, i64, i64 } [ { ptr @.str.6928, i64 0, i64 0 }, %or.bend10292 ], [ %t421, %or.ok10291 ] store { ptr, i64, i64 } %t423, ptr %a425 store { ptr, i64, i64 } { ptr @.str.6929, i64 24, i64 0 }, ptr %a426 call void @finch_str_concat(ptr %a424, ptr %a425, ptr %a426) store { ptr, i64, i64 } %t423, ptr %a427 call void @finch_str_drop(ptr %a427) %t428 = load { ptr, i64, i64 }, ptr %a424 %t429 = load { ptr, i64, i64 }, ptr %a320 store { ptr, i64, i64 } %t428, ptr %a431 store { ptr, i64, i64 } %t429, ptr %a432 call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) store { ptr, i64, i64 } %t428, ptr %a433 call void @finch_str_drop(ptr %a433) %t434 = load { ptr, i64, i64 }, ptr %a430 %t435 = extractvalue { ptr, i64, i64 } %t434, 1 %t436 = trunc i64 %t435 to i32 %t437 = extractvalue { ptr, i64, i64 } %t434, 0 %t438 = icmp eq ptr %t437, null %t439 = select i1 %t438, ptr @.str.6930, ptr %t437 %t440 = call i32 (ptr, ...) @printf(ptr @.str.6931, i32 %t436, ptr %t439) store { ptr, i64, i64 } %t434, ptr %a441 call void @finch_str_drop(ptr %a441) %t442 = call i32 (ptr, ...) @printf(ptr @.str.6932) %t443 = load { ptr, i64, i64 }, ptr %a84 call void @finch.host.remove({ ptr, i64, i64 } %t443) %t444 = load { ptr, i64, i64 }, ptr %a112 call void @finch.host.remove({ ptr, i64, i64 } %t444) %t445 = load { ptr, i64, i64 }, ptr %a348 call void @finch.host.remove({ ptr, i64, i64 } %t445) call void @finch_str_drop(ptr %a349) call void @finch_str_drop(ptr %a348) call void @finch.drop.arr_str(ptr %a310) call void @finch_str_drop(ptr %a255) call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a92) call void @finch_str_drop(ptr %a84) call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a70) call void @finch_str_drop(ptr %a23) call void @finch_str_drop(ptr %a13) ret i64 1 endif10289: %t446 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 %t447 = load { ptr, i64, i64 }, ptr %a348 store { ptr, i64, i64 } %t447, ptr %a448 call void @finch_str_copy(ptr %a449, ptr %a448) %t450 = load { ptr, i64, i64 }, ptr %a449 %t451 = load i64, ptr %t446 %t452 = add i64 %t451, 1 call void @finch_arr_reserve(ptr %a310, i64 %t452, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t453 = load ptr, ptr %a310 %t454 = getelementptr inbounds { ptr, i64, i64 }, ptr %t453, i64 %t451 store { ptr, i64, i64 } %t450, ptr %t454 store i64 %t452, ptr %t446 %t455 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t455, ptr %a457 store { ptr, i64, i64 } { ptr @.str.6933, i64 1, i64 0 }, ptr %a458 call void @finch_str_concat(ptr %a456, ptr %a457, ptr %a458) %t459 = load { ptr, i64, i64 }, ptr %a456 %t460 = load { ptr, i64, i64 }, ptr %a348 %t461 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t460) store { ptr, i64, i64 } %t459, ptr %a463 store { ptr, i64, i64 } %t461, ptr %a464 call void @finch_str_concat(ptr %a462, ptr %a463, ptr %a464) store { ptr, i64, i64 } %t459, ptr %a465 call void @finch_str_drop(ptr %a465) store { ptr, i64, i64 } %t461, ptr %a466 call void @finch_str_drop(ptr %a466) %t467 = load { ptr, i64, i64 }, ptr %a462 %t468 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t467, ptr %a255 store { ptr, i64, i64 } %t468, ptr %a469 call void @finch_str_drop(ptr %a469) call void @finch_str_drop(ptr %a349) call void @finch_str_drop(ptr %a348) br label %endif10283 else10282: %t470 = load { ptr, i64, i64 }, ptr %a320 store { ptr, i64, i64 } %t470, ptr %a471 store { ptr, i64, i64 } { ptr @.str.6935, i64 2, i64 0 }, ptr %a473 %t474 = call i32 @finch_str_ends(ptr %a471, ptr %a473) %t475 = icmp ne i32 %t474, 0 br label %logic.from10294 logic.from10294: br i1 %t475, label %logic.end10296, label %logic.rhs10295 logic.rhs10295: %t476 = load { ptr, i64, i64 }, ptr %a320 store { ptr, i64, i64 } %t476, ptr %a477 store { ptr, i64, i64 } { ptr @.str.6937, i64 2, i64 0 }, ptr %a479 %t480 = call i32 @finch_str_ends(ptr %a477, ptr %a479) %t481 = icmp ne i32 %t480, 0 br label %logic.rend10297 logic.rend10297: br label %logic.end10296 logic.end10296: %t482 = phi i1 [ true, %logic.from10294 ], [ %t481, %logic.rend10297 ] br i1 %t482, label %then10298, label %else10299 then10298: %t483 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t483, ptr %a485 store { ptr, i64, i64 } { ptr @.str.6938, i64 1, i64 0 }, ptr %a486 call void @finch_str_concat(ptr %a484, ptr %a485, ptr %a486) %t487 = load { ptr, i64, i64 }, ptr %a484 %t488 = load { ptr, i64, i64 }, ptr %a320 %t489 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t488) store { ptr, i64, i64 } %t487, ptr %a491 store { ptr, i64, i64 } %t489, ptr %a492 call void @finch_str_concat(ptr %a490, ptr %a491, ptr %a492) store { ptr, i64, i64 } %t487, ptr %a493 call void @finch_str_drop(ptr %a493) store { ptr, i64, i64 } %t489, ptr %a494 call void @finch_str_drop(ptr %a494) %t495 = load { ptr, i64, i64 }, ptr %a490 %t496 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t495, ptr %a255 store { ptr, i64, i64 } %t496, ptr %a497 call void @finch_str_drop(ptr %a497) br label %endif10300 else10299: %t498 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t498, ptr %a500 store { ptr, i64, i64 } { ptr @.str.6939, i64 1, i64 0 }, ptr %a501 call void @finch_str_concat(ptr %a499, ptr %a500, ptr %a501) %t502 = load { ptr, i64, i64 }, ptr %a499 %t503 = load { ptr, i64, i64 }, ptr %a320 %t504 = load %S.platform.Target, ptr %a2 %t505 = call { ptr, i64, i64 } @finch.linker.libFlags({ ptr, i64, i64 } %t503, %S.platform.Target %t504) store { ptr, i64, i64 } %t502, ptr %a507 store { ptr, i64, i64 } %t505, ptr %a508 call void @finch_str_concat(ptr %a506, ptr %a507, ptr %a508) store { ptr, i64, i64 } %t502, ptr %a509 call void @finch_str_drop(ptr %a509) store { ptr, i64, i64 } %t505, ptr %a510 call void @finch_str_drop(ptr %a510) %t511 = load { ptr, i64, i64 }, ptr %a506 %t512 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t511, ptr %a255 store { ptr, i64, i64 } %t512, ptr %a513 call void @finch_str_drop(ptr %a513) br label %endif10300 endif10300: br label %endif10283 endif10283: br label %each.step10279 each.step10279: %t514 = load i64, ptr %a312 %t515 = add i64 %t514, 1 store i64 %t515, ptr %a312 br label %each.cond10277 each.end10280: %t516 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t516, ptr %a518 store { ptr, i64, i64 } { ptr @.str.6940, i64 3, i64 0 }, ptr %a519 call void @finch_str_concat(ptr %a517, ptr %a518, ptr %a519) %t520 = load { ptr, i64, i64 }, ptr %a517 %t521 = load { ptr, i64, i64 }, ptr %a112 %t522 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t521) store { ptr, i64, i64 } %t520, ptr %a524 store { ptr, i64, i64 } %t522, ptr %a525 call void @finch_str_concat(ptr %a523, ptr %a524, ptr %a525) store { ptr, i64, i64 } %t520, ptr %a526 call void @finch_str_drop(ptr %a526) store { ptr, i64, i64 } %t522, ptr %a527 call void @finch_str_drop(ptr %a527) %t528 = load { ptr, i64, i64 }, ptr %a523 store { ptr, i64, i64 } %t528, ptr %a530 store { ptr, i64, i64 } { ptr @.str.6941, i64 5, i64 0 }, ptr %a531 call void @finch_str_concat(ptr %a529, ptr %a530, ptr %a531) store { ptr, i64, i64 } %t528, ptr %a532 call void @finch_str_drop(ptr %a532) %t533 = load { ptr, i64, i64 }, ptr %a529 %t534 = call i64 @finch.host.run({ ptr, i64, i64 } %t533) store { ptr, i64, i64 } %t533, ptr %a535 call void @finch_str_drop(ptr %a535) store i64 %t534, ptr %a536 %t537 = load { ptr, i64, i64 }, ptr %a112 store { ptr, i64, i64 } %t537, ptr %a538 store { ptr, i64, i64 } zeroinitializer, ptr %a539 store { ptr, i64, i64 } zeroinitializer, ptr %a540 %t541 = call i32 @finch_try_read_file(ptr %a539, ptr %a538, ptr %a540) %t542 = icmp eq i32 %t541, 0 %t543 = load { ptr, i64, i64 }, ptr %a540 %t544 = load { ptr, i64, i64 }, ptr %a539 br i1 %t542, label %or.failed10301, label %or.ok10302 or.failed10301: store { ptr, i64, i64 } %t543, ptr %a545 call void @finch_str_drop(ptr %a545) br label %or.bend10303 or.bend10303: br label %or.end10304 or.ok10302: br label %or.end10304 or.end10304: %t546 = phi { ptr, i64, i64 } [ { ptr @.str.6942, i64 0, i64 0 }, %or.bend10303 ], [ %t544, %or.ok10302 ] store { ptr, i64, i64 } %t546, ptr %a547 %t548 = load { ptr, i64, i64 }, ptr %a84 call void @finch.host.remove({ ptr, i64, i64 } %t548) %t549 = load { ptr, i64, i64 }, ptr %a112 call void @finch.host.remove({ ptr, i64, i64 } %t549) store i64 0, ptr %a550 br label %each.cond10305 each.cond10305: %t551 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 %t552 = load i64, ptr %t551 %t553 = load i64, ptr %a550 %t554 = icmp slt i64 %t553, %t552 br i1 %t554, label %each.body10306, label %each.end10308 each.body10306: %t555 = load ptr, ptr %a310 %t556 = getelementptr inbounds { ptr, i64, i64 }, ptr %t555, i64 %t553 %t557 = load { ptr, i64, i64 }, ptr %t556 store { ptr, i64, i64 } %t557, ptr %a558 %t559 = load { ptr, i64, i64 }, ptr %a558 call void @finch.host.remove({ ptr, i64, i64 } %t559) br label %each.step10307 each.step10307: %t560 = load i64, ptr %a550 %t561 = add i64 %t560, 1 store i64 %t561, ptr %a550 br label %each.cond10305 each.end10308: %t562 = load i64, ptr %a536 %t563 = icmp eq i64 %t562, 127 br i1 %t563, label %then10309, label %endif10311 then10309: %t564 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } { ptr @.str.6943, i64 42, i64 0 }, ptr %a566 store { ptr, i64, i64 } %t564, ptr %a567 call void @finch_str_concat(ptr %a565, ptr %a566, ptr %a567) %t568 = load { ptr, i64, i64 }, ptr %a565 store { ptr, i64, i64 } %t568, ptr %a570 store { ptr, i64, i64 } { ptr @.str.6944, i64 32, i64 0 }, ptr %a571 call void @finch_str_concat(ptr %a569, ptr %a570, ptr %a571) store { ptr, i64, i64 } %t568, ptr %a572 call void @finch_str_drop(ptr %a572) %t573 = load { ptr, i64, i64 }, ptr %a569 %t574 = extractvalue { ptr, i64, i64 } %t573, 1 %t575 = trunc i64 %t574 to i32 %t576 = extractvalue { ptr, i64, i64 } %t573, 0 %t577 = icmp eq ptr %t576, null %t578 = select i1 %t577, ptr @.str.6945, ptr %t576 %t579 = call i32 (ptr, ...) @printf(ptr @.str.6946, i32 %t575, ptr %t578) store { ptr, i64, i64 } %t573, ptr %a580 call void @finch_str_drop(ptr %a580) %t581 = call i32 (ptr, ...) @printf(ptr @.str.6947) call void @finch_str_drop(ptr %a547) call void @finch.drop.arr_str(ptr %a310) call void @finch_str_drop(ptr %a255) call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a92) call void @finch_str_drop(ptr %a84) call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a70) call void @finch_str_drop(ptr %a23) call void @finch_str_drop(ptr %a13) ret i64 1 endif10311: %t582 = load i64, ptr %a536 %t583 = icmp ne i64 %t582, 0 br i1 %t583, label %then10312, label %endif10314 then10312: %t584 = load { ptr, i64, i64 }, ptr %a547 %t585 = load %S.cimport.CImports, ptr %a3 %t586 = load %S.platform.Target, ptr %a2 %t587 = call i64 @finch.linker.linkFailed({ ptr, i64, i64 } %t584, %S.cimport.CImports %t585, %S.platform.Target %t586) call void @finch_str_drop(ptr %a547) call void @finch.drop.arr_str(ptr %a310) call void @finch_str_drop(ptr %a255) call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a92) call void @finch_str_drop(ptr %a84) call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a70) call void @finch_str_drop(ptr %a23) call void @finch_str_drop(ptr %a13) ret i64 %t587 endif10314: %t588 = getelementptr inbounds { ptr, i64, i64 }, ptr %a547, i32 0, i32 1 %t589 = load i64, ptr %t588 %t590 = icmp sgt i64 %t589, 0 br i1 %t590, label %then10315, label %endif10317 then10315: %t591 = load { ptr, i64, i64 }, ptr %a547 %t592 = extractvalue { ptr, i64, i64 } %t591, 1 %t593 = trunc i64 %t592 to i32 %t594 = extractvalue { ptr, i64, i64 } %t591, 0 %t595 = icmp eq ptr %t594, null %t596 = select i1 %t595, ptr @.str.6948, ptr %t594 %t597 = call i32 (ptr, ...) @printf(ptr @.str.6949, i32 %t593, ptr %t596) %t598 = call i32 (ptr, ...) @printf(ptr @.str.6950) br label %endif10317 endif10317: call void @finch_str_drop(ptr %a547) call void @finch.drop.arr_str(ptr %a310) call void @finch_str_drop(ptr %a255) call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a92) call void @finch_str_drop(ptr %a84) call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a70) call void @finch_str_drop(ptr %a23) call void @finch_str_drop(ptr %a13) ret i64 0 } define internal i64 @finch.lsp.hexval(i8 %p0) { entry: %a1 = alloca i8, align 16 store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 48 br label %logic.from10318 logic.from10318: br i1 %t3, label %logic.rhs10319, label %logic.end10320 logic.rhs10319: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 57 br label %logic.rend10321 logic.rend10321: br label %logic.end10320 logic.end10320: %t6 = phi i1 [ false, %logic.from10318 ], [ %t5, %logic.rend10321 ] br i1 %t6, label %then10322, label %endif10324 then10322: %t7 = load i8, ptr %a1 %t8 = zext i8 %t7 to i64 %t9 = zext i8 48 to i64 %t10 = sub i64 %t8, %t9 ret i64 %t10 endif10324: %t11 = load i8, ptr %a1 %t12 = icmp uge i8 %t11, 97 br label %logic.from10325 logic.from10325: br i1 %t12, label %logic.rhs10326, label %logic.end10327 logic.rhs10326: %t13 = load i8, ptr %a1 %t14 = icmp ule i8 %t13, 102 br label %logic.rend10328 logic.rend10328: br label %logic.end10327 logic.end10327: %t15 = phi i1 [ false, %logic.from10325 ], [ %t14, %logic.rend10328 ] br i1 %t15, label %then10329, label %endif10331 then10329: %t16 = load i8, ptr %a1 %t17 = zext i8 %t16 to i64 %t18 = zext i8 97 to i64 %t19 = sub i64 %t17, %t18 %t20 = add i64 %t19, 10 ret i64 %t20 endif10331: %t21 = load i8, ptr %a1 %t22 = icmp uge i8 %t21, 65 br label %logic.from10332 logic.from10332: br i1 %t22, label %logic.rhs10333, label %logic.end10334 logic.rhs10333: %t23 = load i8, ptr %a1 %t24 = icmp ule i8 %t23, 70 br label %logic.rend10335 logic.rend10335: br label %logic.end10334 logic.end10334: %t25 = phi i1 [ false, %logic.from10332 ], [ %t24, %logic.rend10335 ] br i1 %t25, label %then10336, label %endif10338 then10336: %t26 = load i8, ptr %a1 %t27 = zext i8 %t26 to i64 %t28 = zext i8 65 to i64 %t29 = sub i64 %t27, %t28 %t30 = add i64 %t29, 10 ret i64 %t30 endif10338: ret i64 -1 } define internal void @finch.drop.arr_u8(ptr %a) { entry: call void @finch_arr_free(ptr %a) ret void } define internal { ptr, i64, i64 } @finch.lsp.uriToPath({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca i64, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_copy(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t5, ptr %a6 %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.6952, i64 7, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_starts(ptr %a8, ptr %a10) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then10339, label %endif10341 then10339: %t13 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t13, ptr %a14 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t17 = load i64, ptr %t16 call void @finch_str_sub(ptr %a15, ptr %a14, i64 7, i64 %t17, ptr @.str.6953, i64 114) %t18 = load { ptr, i64, i64 }, ptr %a15 %t19 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t18, ptr %a6 store { ptr, i64, i64 } %t19, ptr %a20 call void @finch_str_drop(ptr %a20) br label %endif10341 endif10341: store { ptr, i64, i64 } zeroinitializer, ptr %a21 store i64 0, ptr %a22 br label %while.cond10342 while.cond10342: %t23 = load i64, ptr %a22 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t25 = load i64, ptr %t24 %t26 = icmp slt i64 %t23, %t25 br i1 %t26, label %while.body10343, label %while.end10344 while.body10343: %t27 = load i64, ptr %a22 %t28 = load { ptr, i64, i64 }, ptr %a6 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 %t27, %t29 br i1 %t30, label %range10345, label %inrange10346 range10345: call void @finch_panic_index(ptr @.str.6954, i64 119, i64 %t27, i64 %t29) unreachable inrange10346: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds i8, ptr %t31, i64 %t27 %t33 = load i8, ptr %t32 %t34 = icmp eq i8 %t33, 37 br label %logic.from10347 logic.from10347: br i1 %t34, label %logic.rhs10348, label %logic.end10349 logic.rhs10348: %t35 = load i64, ptr %a22 %t36 = add i64 %t35, 2 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t38 = load i64, ptr %t37 %t39 = add i64 %t38, 0 %t40 = icmp slt i64 %t36, %t39 br label %logic.rend10350 logic.rend10350: br label %logic.end10349 logic.end10349: %t41 = phi i1 [ false, %logic.from10347 ], [ %t40, %logic.rend10350 ] br label %logic.from10351 logic.from10351: br i1 %t41, label %logic.rhs10352, label %logic.end10353 logic.rhs10352: %t42 = load i64, ptr %a22 %t43 = add i64 %t42, 1 %t44 = load { ptr, i64, i64 }, ptr %a6 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 %t43, %t45 br i1 %t46, label %range10354, label %inrange10355 range10354: call void @finch_panic_index(ptr @.str.6955, i64 119, i64 %t43, i64 %t45) unreachable inrange10355: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds i8, ptr %t47, i64 %t43 %t49 = load i8, ptr %t48 %t50 = call i64 @finch.lsp.hexval(i8 %t49) %t51 = icmp sge i64 %t50, 0 br label %logic.rend10356 logic.rend10356: br label %logic.end10353 logic.end10353: %t52 = phi i1 [ false, %logic.from10351 ], [ %t51, %logic.rend10356 ] br label %logic.from10357 logic.from10357: br i1 %t52, label %logic.rhs10358, label %logic.end10359 logic.rhs10358: %t53 = load i64, ptr %a22 %t54 = add i64 %t53, 2 %t55 = load { ptr, i64, i64 }, ptr %a6 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 br i1 %t57, label %range10360, label %inrange10361 range10360: call void @finch_panic_index(ptr @.str.6956, i64 119, i64 %t54, i64 %t56) unreachable inrange10361: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds i8, ptr %t58, i64 %t54 %t60 = load i8, ptr %t59 %t61 = call i64 @finch.lsp.hexval(i8 %t60) %t62 = icmp sge i64 %t61, 0 br label %logic.rend10362 logic.rend10362: br label %logic.end10359 logic.end10359: %t63 = phi i1 [ false, %logic.from10357 ], [ %t62, %logic.rend10362 ] br i1 %t63, label %then10363, label %else10364 then10363: %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 %t65 = load i64, ptr %a22 %t66 = add i64 %t65, 1 %t67 = load { ptr, i64, i64 }, ptr %a6 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 %t66, %t68 br i1 %t69, label %range10366, label %inrange10367 range10366: call void @finch_panic_index(ptr @.str.6957, i64 120, i64 %t66, i64 %t68) unreachable inrange10367: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds i8, ptr %t70, i64 %t66 %t72 = load i8, ptr %t71 %t73 = call i64 @finch.lsp.hexval(i8 %t72) %t74 = mul i64 %t73, 16 %t75 = load i64, ptr %a22 %t76 = add i64 %t75, 2 %t77 = load { ptr, i64, i64 }, ptr %a6 %t78 = extractvalue { ptr, i64, i64 } %t77, 1 %t79 = icmp uge i64 %t76, %t78 br i1 %t79, label %range10368, label %inrange10369 range10368: call void @finch_panic_index(ptr @.str.6958, i64 120, i64 %t76, i64 %t78) unreachable inrange10369: %t80 = extractvalue { ptr, i64, i64 } %t77, 0 %t81 = getelementptr inbounds i8, ptr %t80, i64 %t76 %t82 = load i8, ptr %t81 %t83 = call i64 @finch.lsp.hexval(i8 %t82) %t84 = add i64 %t74, %t83 %t85 = trunc i64 %t84 to i8 %t86 = load i64, ptr %t64 %t87 = add i64 %t86, 1 call void @finch_arr_reserve(ptr %a21, i64 %t87, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t88 = load ptr, ptr %a21 %t89 = getelementptr inbounds i8, ptr %t88, i64 %t86 store i8 %t85, ptr %t89 store i64 %t87, ptr %t64 %t90 = load i64, ptr %a22 %t91 = add i64 %t90, 3 store i64 %t91, ptr %a22 br label %endif10365 else10364: %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 %t93 = load i64, ptr %a22 %t94 = load { ptr, i64, i64 }, ptr %a6 %t95 = extractvalue { ptr, i64, i64 } %t94, 1 %t96 = icmp uge i64 %t93, %t95 br i1 %t96, label %range10370, label %inrange10371 range10370: call void @finch_panic_index(ptr @.str.6959, i64 123, i64 %t93, i64 %t95) unreachable inrange10371: %t97 = extractvalue { ptr, i64, i64 } %t94, 0 %t98 = getelementptr inbounds i8, ptr %t97, i64 %t93 %t99 = load i8, ptr %t98 %t100 = load i64, ptr %t92 %t101 = add i64 %t100, 1 call void @finch_arr_reserve(ptr %a21, i64 %t101, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t102 = load ptr, ptr %a21 %t103 = getelementptr inbounds i8, ptr %t102, i64 %t100 store i8 %t99, ptr %t103 store i64 %t101, ptr %t92 %t104 = load i64, ptr %a22 %t105 = add i64 %t104, 1 store i64 %t105, ptr %a22 br label %endif10365 endif10365: br label %while.cond10342 while.end10344: %t106 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } zeroinitializer, ptr %a107 store { ptr, i64, i64 } %t106, ptr %a108 call void @finch_str_from_bytes(ptr %a107, ptr %a108) %t109 = load { ptr, i64, i64 }, ptr %a107 call void @finch.drop.arr_u8(ptr %a21) call void @finch_str_drop(ptr %a6) ret { ptr, i64, i64 } %t109 } define internal { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca i64, align 16 %a18 = alloca i8, align 16 %a21 = alloca i64, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } { ptr @.str.6960, i64 16, i64 0 }, ptr %a2 %t3 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t4 = call ptr @finch_alloc(i64 %t3) %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 0 store { ptr, i64, i64 } { ptr @.str.6961, i64 7, i64 0 }, ptr %t5 %t6 = insertvalue { ptr, i64, i64 } undef, ptr %t4, 0 %t7 = insertvalue { ptr, i64, i64 } %t6, i64 1, 1 %t8 = insertvalue { ptr, i64, i64 } %t7, i64 1, 2 store { ptr, i64, i64 } %t8, ptr %a9 store i64 0, ptr %a10 br label %each.cond10372 each.cond10372: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = load i64, ptr %a10 %t14 = icmp slt i64 %t13, %t12 br i1 %t14, label %each.body10373, label %each.end10375 each.body10373: %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds i8, ptr %t15, i64 %t13 %t17 = load i8, ptr %t16 store i8 %t17, ptr %a18 %t19 = load i8, ptr %a18 %t20 = zext i8 %t19 to i64 store i64 %t20, ptr %a21 %t22 = load i8, ptr %a18 %t23 = icmp uge i8 %t22, 97 br label %logic.from10376 logic.from10376: br i1 %t23, label %logic.rhs10377, label %logic.end10378 logic.rhs10377: %t24 = load i8, ptr %a18 %t25 = icmp ule i8 %t24, 122 br label %logic.rend10379 logic.rend10379: br label %logic.end10378 logic.end10378: %t26 = phi i1 [ false, %logic.from10376 ], [ %t25, %logic.rend10379 ] br label %logic.from10380 logic.from10380: br i1 %t26, label %logic.end10382, label %logic.rhs10381 logic.rhs10381: %t27 = load i8, ptr %a18 %t28 = icmp uge i8 %t27, 65 br label %logic.from10383 logic.from10383: br i1 %t28, label %logic.rhs10384, label %logic.end10385 logic.rhs10384: %t29 = load i8, ptr %a18 %t30 = icmp ule i8 %t29, 90 br label %logic.rend10386 logic.rend10386: br label %logic.end10385 logic.end10385: %t31 = phi i1 [ false, %logic.from10383 ], [ %t30, %logic.rend10386 ] br label %logic.rend10387 logic.rend10387: br label %logic.end10382 logic.end10382: %t32 = phi i1 [ true, %logic.from10380 ], [ %t31, %logic.rend10387 ] br label %logic.from10388 logic.from10388: br i1 %t32, label %logic.end10390, label %logic.rhs10389 logic.rhs10389: %t33 = load i8, ptr %a18 %t34 = icmp uge i8 %t33, 48 br label %logic.from10391 logic.from10391: br i1 %t34, label %logic.rhs10392, label %logic.end10393 logic.rhs10392: %t35 = load i8, ptr %a18 %t36 = icmp ule i8 %t35, 57 br label %logic.rend10394 logic.rend10394: br label %logic.end10393 logic.end10393: %t37 = phi i1 [ false, %logic.from10391 ], [ %t36, %logic.rend10394 ] br label %logic.rend10395 logic.rend10395: br label %logic.end10390 logic.end10390: %t38 = phi i1 [ true, %logic.from10388 ], [ %t37, %logic.rend10395 ] br label %logic.from10396 logic.from10396: br i1 %t38, label %logic.end10398, label %logic.rhs10397 logic.rhs10397: store { ptr, i64, i64 } { ptr @.str.6962, i64 5, i64 0 }, ptr %a39 %t41 = load i8, ptr %a18 call void @finch_str_from_char(ptr %a42, i8 signext %t41) %t43 = load { ptr, i64, i64 }, ptr %a42 store { ptr, i64, i64 } %t43, ptr %a44 %t45 = call i64 @finch_str_find(ptr %a39, ptr %a44) %t46 = icmp sge i64 %t45, 0 store { ptr, i64, i64 } %t43, ptr %a47 call void @finch_str_drop(ptr %a47) br label %logic.rend10399 logic.rend10399: br label %logic.end10398 logic.end10398: %t48 = phi i1 [ true, %logic.from10396 ], [ %t46, %logic.rend10399 ] br i1 %t48, label %then10400, label %else10401 then10400: %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t50 = load i8, ptr %a18 call void @finch_str_from_char(ptr %a51, i8 signext %t50) %t52 = load { ptr, i64, i64 }, ptr %a51 %t53 = load i64, ptr %t49 %t54 = add i64 %t53, 1 call void @finch_arr_reserve(ptr %a9, i64 %t54, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t55 = load ptr, ptr %a9 %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i64 %t53 store { ptr, i64, i64 } %t52, ptr %t56 store i64 %t54, ptr %t49 br label %endif10402 else10401: %t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t58 = load i64, ptr %a21 %t59 = sdiv i64 %t58, 16 %t60 = srem i64 %t59, 16 %t61 = load { ptr, i64, i64 }, ptr %a2 %t62 = extractvalue { ptr, i64, i64 } %t61, 1 %t63 = icmp uge i64 %t60, %t62 br i1 %t63, label %range10403, label %inrange10404 range10403: call void @finch_panic_index(ptr @.str.6965, i64 138, i64 %t60, i64 %t62) unreachable inrange10404: %t64 = extractvalue { ptr, i64, i64 } %t61, 0 %t65 = getelementptr inbounds i8, ptr %t64, i64 %t60 %t66 = load i8, ptr %t65 call void @finch_str_from_char(ptr %a67, i8 signext %t66) %t68 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } { ptr @.str.6964, i64 1, i64 0 }, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) store { ptr, i64, i64 } %t68, ptr %a72 call void @finch_str_drop(ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a69 %t74 = load i64, ptr %a21 %t75 = srem i64 %t74, 16 %t76 = load { ptr, i64, i64 }, ptr %a2 %t77 = extractvalue { ptr, i64, i64 } %t76, 1 %t78 = icmp uge i64 %t75, %t77 br i1 %t78, label %range10405, label %inrange10406 range10405: call void @finch_panic_index(ptr @.str.6966, i64 138, i64 %t75, i64 %t77) unreachable inrange10406: %t79 = extractvalue { ptr, i64, i64 } %t76, 0 %t80 = getelementptr inbounds i8, ptr %t79, i64 %t75 %t81 = load i8, ptr %t80 call void @finch_str_from_char(ptr %a82, i8 signext %t81) %t83 = load { ptr, i64, i64 }, ptr %a82 store { ptr, i64, i64 } %t73, ptr %a85 store { ptr, i64, i64 } %t83, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) store { ptr, i64, i64 } %t73, ptr %a87 call void @finch_str_drop(ptr %a87) store { ptr, i64, i64 } %t83, ptr %a88 call void @finch_str_drop(ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a84 %t90 = load i64, ptr %t57 %t91 = add i64 %t90, 1 call void @finch_arr_reserve(ptr %a9, i64 %t91, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t92 = load ptr, ptr %a9 %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %t92, i64 %t90 store { ptr, i64, i64 } %t89, ptr %t93 store i64 %t91, ptr %t57 br label %endif10402 endif10402: br label %each.step10374 each.step10374: %t94 = load i64, ptr %a10 %t95 = add i64 %t94, 1 store i64 %t95, ptr %a10 br label %each.cond10372 each.end10375: %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.6967, i64 0, i64 0 }, ptr %a97 call void @finch_str_join(ptr %a98, ptr %a9, ptr %a97) %t99 = load { ptr, i64, i64 }, ptr %a98 call void @finch.drop.arr_str(ptr %a9) call void @finch_str_drop(ptr %a2) ret { ptr, i64, i64 } %t99 } define internal { ptr, i64, i64 } @finch.lsp.unesc({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a2 store i64 0, ptr %a3 br label %while.cond10407 while.cond10407: %t4 = load i64, ptr %a3 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = icmp slt i64 %t4, %t6 br i1 %t7, label %while.body10408, label %while.end10409 while.body10408: %t8 = load i64, ptr %a3 %t9 = load { ptr, i64, i64 }, ptr %a1 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 br i1 %t11, label %range10410, label %inrange10411 range10410: call void @finch_panic_index(ptr @.str.6968, i64 149, i64 %t8, i64 %t10) unreachable inrange10411: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 %t14 = load i8, ptr %t13 %t15 = icmp eq i8 %t14, 92 br label %logic.from10412 logic.from10412: br i1 %t15, label %logic.rhs10413, label %logic.end10414 logic.rhs10413: %t16 = load i64, ptr %a3 %t17 = add i64 %t16, 1 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t19 = load i64, ptr %t18 %t20 = icmp slt i64 %t17, %t19 br label %logic.rend10415 logic.rend10415: br label %logic.end10414 logic.end10414: %t21 = phi i1 [ false, %logic.from10412 ], [ %t20, %logic.rend10415 ] br i1 %t21, label %then10416, label %else10417 then10416: %t22 = load i64, ptr %a3 %t23 = add i64 %t22, 1 %t24 = load { ptr, i64, i64 }, ptr %a1 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 %t23, %t25 br i1 %t26, label %range10419, label %inrange10420 range10419: call void @finch_panic_index(ptr @.str.6969, i64 150, i64 %t23, i64 %t25) unreachable inrange10420: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds i8, ptr %t27, i64 %t23 %t29 = load i8, ptr %t28 %t30 = icmp eq i8 %t29, 110 br i1 %t30, label %then10421, label %else10422 then10421: %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = add i64 %t32, 1 call void @finch_arr_reserve(ptr %a2, i64 %t33, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t34 = load ptr, ptr %a2 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i64 %t32 store { ptr, i64, i64 } { ptr @.str.6970, i64 1, i64 0 }, ptr %t35 store i64 %t33, ptr %t31 br label %endif10423 else10422: %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t37 = load i64, ptr %a3 %t38 = add i64 %t37, 1 %t39 = load { ptr, i64, i64 }, ptr %a1 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 br i1 %t41, label %range10424, label %inrange10425 range10424: call void @finch_panic_index(ptr @.str.6971, i64 153, i64 %t38, i64 %t40) unreachable inrange10425: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds i8, ptr %t42, i64 %t38 %t44 = load i8, ptr %t43 call void @finch_str_from_char(ptr %a45, i8 signext %t44) %t46 = load { ptr, i64, i64 }, ptr %a45 %t47 = load i64, ptr %t36 %t48 = add i64 %t47, 1 call void @finch_arr_reserve(ptr %a2, i64 %t48, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t49 = load ptr, ptr %a2 %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 store { ptr, i64, i64 } %t46, ptr %t50 store i64 %t48, ptr %t36 br label %endif10423 endif10423: %t51 = load i64, ptr %a3 %t52 = add i64 %t51, 2 store i64 %t52, ptr %a3 br label %endif10418 else10417: %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t54 = load i64, ptr %a3 %t55 = load { ptr, i64, i64 }, ptr %a1 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 br i1 %t57, label %range10426, label %inrange10427 range10426: call void @finch_panic_index(ptr @.str.6972, i64 157, i64 %t54, i64 %t56) unreachable inrange10427: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds i8, ptr %t58, i64 %t54 %t60 = load i8, ptr %t59 call void @finch_str_from_char(ptr %a61, i8 signext %t60) %t62 = load { ptr, i64, i64 }, ptr %a61 %t63 = load i64, ptr %t53 %t64 = add i64 %t63, 1 call void @finch_arr_reserve(ptr %a2, i64 %t64, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t65 = load ptr, ptr %a2 %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 %t63 store { ptr, i64, i64 } %t62, ptr %t66 store i64 %t64, ptr %t53 %t67 = load i64, ptr %a3 %t68 = add i64 %t67, 1 store i64 %t68, ptr %a3 br label %endif10418 endif10418: br label %while.cond10407 while.end10409: %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.6973, i64 0, i64 0 }, ptr %a70 call void @finch_str_join(ptr %a71, ptr %a2, ptr %a70) %t72 = load { ptr, i64, i64 }, ptr %a71 call void @finch.drop.arr_str(ptr %a2) ret { ptr, i64, i64 } %t72 } define internal { ptr, i64, i64 } @finch.lsp.lineOf({ ptr, i64, i64 } %p0, i64 %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca i64, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.6975, i64 1, i64 0 }, ptr %a6 call void @finch_str_split(ptr %a7, ptr %a4, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load i64, ptr %a2 %t11 = icmp sge i64 %t10, 1 br label %logic.from10428 logic.from10428: br i1 %t11, label %logic.rhs10429, label %logic.end10430 logic.rhs10429: %t12 = load i64, ptr %a2 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sle i64 %t12, %t14 br label %logic.rend10431 logic.rend10431: br label %logic.end10430 logic.end10430: %t16 = phi i1 [ false, %logic.from10428 ], [ %t15, %logic.rend10431 ] br i1 %t16, label %then10432, label %endif10434 then10432: %t17 = load i64, ptr %a2 %t18 = sub i64 %t17, 1 %t19 = load { ptr, i64, i64 }, ptr %a9 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 br i1 %t21, label %range10435, label %inrange10436 range10435: call void @finch_panic_index(ptr @.str.6976, i64 167, i64 %t18, i64 %t20) unreachable inrange10436: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t18 %t24 = load { ptr, i64, i64 }, ptr %t23 store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_copy(ptr %a26, ptr %a25) %t27 = load { ptr, i64, i64 }, ptr %a26 call void @finch.drop.arr_str(ptr %a9) ret { ptr, i64, i64 } %t27 endif10434: call void @finch.drop.arr_str(ptr %a9) ret { ptr, i64, i64 } { ptr @.str.6977, i64 0, i64 0 } } define internal { ptr, i64, i64 } @finch.lsp.readLine() { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i32, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } zeroinitializer, ptr %a1 br label %while.cond10437 while.cond10437: br label %while.body10438 while.body10438: %t2 = call i32 @getchar() store i32 %t2, ptr %a3 %t4 = load i32, ptr %a3 %t5 = icmp slt i32 %t4, 0 br i1 %t5, label %then10440, label %endif10442 then10440: call void @finch.drop.arr_u8(ptr %a1) ret { ptr, i64, i64 } { ptr @.str.6978, i64 0, i64 0 } endif10442: %t6 = load i32, ptr %a3 %t7 = icmp eq i32 %t6, 10 br i1 %t7, label %then10443, label %endif10445 then10443: br label %while.end10439 endif10445: %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t9 = load i32, ptr %a3 %t10 = trunc i32 %t9 to i8 %t11 = load i64, ptr %t8 %t12 = add i64 %t11, 1 call void @finch_arr_reserve(ptr %a1, i64 %t12, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t13 = load ptr, ptr %a1 %t14 = getelementptr inbounds i8, ptr %t13, i64 %t11 store i8 %t10, ptr %t14 store i64 %t12, ptr %t8 br label %while.cond10437 while.end10439: %t15 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a16 store { ptr, i64, i64 } %t15, ptr %a17 call void @finch_str_from_bytes(ptr %a16, ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t18, ptr %a19 %t20 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.6980, i64 1, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_ends(ptr %a21, ptr %a23) %t25 = icmp ne i32 %t24, 0 br i1 %t25, label %then10446, label %endif10448 then10446: %t26 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t26, ptr %a27 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t30 = load i64, ptr %t29 %t31 = sub i64 %t30, 1 call void @finch_str_sub(ptr %a28, ptr %a27, i64 0, i64 %t31, ptr @.str.6981, i64 188) %t32 = load { ptr, i64, i64 }, ptr %a28 %t33 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t32, ptr %a19 store { ptr, i64, i64 } %t33, ptr %a34 call void @finch_str_drop(ptr %a34) br label %endif10448 endif10448: %t35 = load { ptr, i64, i64 }, ptr %a19 call void @finch.drop.arr_u8(ptr %a1) ret { ptr, i64, i64 } %t35 } define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.lsp.readMessage() { entry: %a1 = alloca i64, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca i64, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca i64, align 16 %a45 = alloca i32, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 store i64 0, ptr %a1 br label %while.cond10449 while.cond10449: br label %while.body10450 while.body10450: %t2 = call { ptr, i64, i64 } @finch.lsp.readLine() store { ptr, i64, i64 } %t2, ptr %a3 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = icmp eq i64 %t5, 0 br i1 %t6, label %then10452, label %endif10454 then10452: %t7 = load i64, ptr %a1 %t8 = icmp sgt i64 %t7, 0 br i1 %t8, label %then10455, label %endif10457 then10455: call void @finch_str_drop(ptr %a3) br label %while.end10451 endif10457: %t9 = call ptr @finch_std_stream(i32 0) %t10 = call i32 @feof(ptr %t9) %t11 = icmp ne i32 %t10, 0 br i1 %t11, label %then10458, label %endif10460 then10458: call void @finch_str_drop(ptr %a3) %t12 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6982, i64 32, i64 0 }, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t12 endif10460: call void @finch_str_drop(ptr %a3) br label %while.cond10449 endif10454: %t13 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.6984, i64 15, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_starts(ptr %a14, ptr %a16) %t18 = icmp ne i32 %t17, 0 br i1 %t18, label %then10461, label %endif10463 then10461: %t19 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t19, ptr %a20 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t23 = load i64, ptr %t22 call void @finch_str_sub(ptr %a21, ptr %a20, i64 15, i64 %t23, ptr @.str.6985, i64 208) %t24 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_trim(ptr %a26, ptr %a25) %t27 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t24, ptr %a28 call void @finch_str_drop(ptr %a28) store { ptr, i64, i64 } zeroinitializer, ptr %a29 store i64 0, ptr %a30 store { ptr, i64, i64 } %t27, ptr %a31 %t32 = call i32 @finch_str_try_int(ptr %a31, ptr %a30, ptr %a29) %t33 = icmp eq i32 %t32, 0 %t34 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t27, ptr %a35 call void @finch_str_drop(ptr %a35) %t36 = load i64, ptr %a30 br i1 %t33, label %or.failed10464, label %or.ok10465 or.failed10464: store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_drop(ptr %a37) br label %or.bend10466 or.bend10466: br label %or.end10467 or.ok10465: br label %or.end10467 or.end10467: %t38 = phi i64 [ 0, %or.bend10466 ], [ %t36, %or.ok10465 ] store i64 %t38, ptr %a1 br label %endif10463 endif10463: call void @finch_str_drop(ptr %a3) br label %while.cond10449 while.end10451: store { ptr, i64, i64 } zeroinitializer, ptr %a39 %t40 = load i64, ptr %a1 store i64 0, ptr %a41 br label %for.cond10468 for.cond10468: %t42 = load i64, ptr %a41 %t43 = icmp slt i64 %t42, %t40 br i1 %t43, label %for.body10469, label %for.end10471 for.body10469: %t44 = call i32 @getchar() store i32 %t44, ptr %a45 %t46 = load i32, ptr %a45 %t47 = icmp slt i32 %t46, 0 br i1 %t47, label %then10472, label %endif10474 then10472: call void @finch.drop.arr_u8(ptr %a39) %t48 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6987, i64 25, i64 0 }, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t48 endif10474: %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a39, i32 0, i32 1 %t50 = load i32, ptr %a45 %t51 = trunc i32 %t50 to i8 %t52 = load i64, ptr %t49 %t53 = add i64 %t52, 1 call void @finch_arr_reserve(ptr %a39, i64 %t53, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t54 = load ptr, ptr %a39 %t55 = getelementptr inbounds i8, ptr %t54, i64 %t52 store i8 %t51, ptr %t55 store i64 %t53, ptr %t49 br label %for.step10470 for.step10470: %t56 = load i64, ptr %a41 %t57 = add i64 %t56, 1 store i64 %t57, ptr %a41 br label %for.cond10468 for.end10471: %t58 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } zeroinitializer, ptr %a59 store { ptr, i64, i64 } %t58, ptr %a60 call void @finch_str_from_bytes(ptr %a59, ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a59 %t62 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.parse({ ptr, i64, i64 } %t61) %t63 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t62, 0 %t64 = xor i1 %t63, true %t65 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t62, 2 %t66 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t62, 1 store { ptr, i64, i64 } %t61, ptr %a67 call void @finch_str_drop(ptr %a67) br i1 %t64, label %try.failed10475, label %try.ok10476 try.failed10475: call void @finch.drop.arr_u8(ptr %a39) %t68 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t65, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t68 try.ok10476: call void @finch.drop.arr_u8(ptr %a39) %t69 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t70 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t69, %S.json.Json %t66, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t70 } define internal void @finch.lsp.send(%S.json.Json %p0) { entry: %a1 = alloca %S.json.Json, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 store %S.json.Json %p0, ptr %a1 %t2 = load %S.json.Json, ptr %a1 %t3 = call { ptr, i64, i64 } @finch.json.stringify(%S.json.Json %t2) store { ptr, i64, i64 } %t3, ptr %a4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t6 = load i64, ptr %t5 call void @finch_str_from_int(ptr %a7, i64 %t6) %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } { ptr @.str.6988, i64 16, i64 0 }, ptr %a10 store { ptr, i64, i64 } %t8, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) store { ptr, i64, i64 } %t8, ptr %a12 call void @finch_str_drop(ptr %a12) %t13 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t13, ptr %a15 store { ptr, i64, i64 } { ptr @.str.6989, i64 4, i64 0 }, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) store { ptr, i64, i64 } %t13, ptr %a17 call void @finch_str_drop(ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t18, ptr %a19 %t20 = load { ptr, i64, i64 }, ptr %a19 %t21 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t20, ptr %a23 store { ptr, i64, i64 } %t21, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t25, ptr %a26 %t27 = load { ptr, i64, i64 }, ptr %a26 %t28 = extractvalue { ptr, i64, i64 } %t27, 0 %t29 = icmp eq ptr %t28, null %t30 = select i1 %t29, ptr @.str.6990, ptr %t28 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a26, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = call ptr @finch_std_stream(i32 1) %t34 = call i64 @fwrite(ptr %t30, i64 1, i64 %t32, ptr %t33) %t35 = call ptr @finch_std_stream(i32 1) %t36 = call i32 @fflush(ptr %t35) call void @finch_str_drop(ptr %a26) call void @finch_str_drop(ptr %a19) call void @finch_str_drop(ptr %a4) ret void } define internal void @finch.drop.arr_S_json_Json(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond10477 n.cond10477: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body10478, label %n.end10479 n.body10478: %t7 = getelementptr inbounds %S.json.Json, ptr %t1, i64 %t5 call void @finch.drop.S_json_Json(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond10477 n.end10479: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.S_json_Json(ptr %a) { entry: %t1 = getelementptr inbounds %S.json.Json, ptr %a, i32 0, i32 3 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.json.Json, ptr %a, i32 0, i32 4 call void @finch.drop.arr_S_json_Json(ptr %t2) %t3 = getelementptr inbounds %S.json.Json, ptr %a, i32 0, i32 5 call void @finch.drop.arr_str(ptr %t3) ret void } define internal void @finch.lsp.reply(%S.json.Json %p0, %S.json.Json %p1) { entry: %a1 = alloca %S.json.Json, align 16 %a2 = alloca %S.json.Json, align 16 %a4 = alloca %S.json.Json, align 16 %a6 = alloca %S.json.Json, align 16 store %S.json.Json %p0, ptr %a1 store %S.json.Json %p1, ptr %a2 %t3 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t3, ptr %a4 %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6992, i64 3, i64 0 }) call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6991, i64 7, i64 0 }, %S.json.Json %t5) store %S.json.Json %t5, ptr %a6 call void @finch.drop.S_json_Json(ptr %a6) %t7 = load %S.json.Json, ptr %a1 call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6993, i64 2, i64 0 }, %S.json.Json %t7) %t8 = load %S.json.Json, ptr %a2 call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6994, i64 6, i64 0 }, %S.json.Json %t8) %t9 = load %S.json.Json, ptr %a4 call void @finch.lsp.send(%S.json.Json %t9) call void @finch.drop.S_json_Json(ptr %a4) ret void } define internal void @finch.lsp.notify({ ptr, i64, i64 } %p0, %S.json.Json %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca %S.json.Json, align 16 %a4 = alloca %S.json.Json, align 16 %a6 = alloca %S.json.Json, align 16 %a9 = alloca %S.json.Json, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store %S.json.Json %p1, ptr %a2 %t3 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t3, ptr %a4 %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6996, i64 3, i64 0 }) call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6995, i64 7, i64 0 }, %S.json.Json %t5) store %S.json.Json %t5, ptr %a6 call void @finch.drop.S_json_Json(ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a1 %t8 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t7) call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6997, i64 6, i64 0 }, %S.json.Json %t8) store %S.json.Json %t8, ptr %a9 call void @finch.drop.S_json_Json(ptr %a9) %t10 = load %S.json.Json, ptr %a2 call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6998, i64 6, i64 0 }, %S.json.Json %t10) %t11 = load %S.json.Json, ptr %a4 call void @finch.lsp.send(%S.json.Json %t11) call void @finch.drop.S_json_Json(ptr %a4) ret void } define internal %S.json.Json @finch.lsp.num(i64 %p0) { entry: %a1 = alloca i64, align 16 store i64 %p0, ptr %a1 %t2 = load i64, ptr %a1 %t3 = sitofp i64 %t2 to double %t4 = call %S.json.Json @finch.json.new_number(double %t3) ret %S.json.Json %t4 } define internal %S.json.Json @finch.lsp.position(i64 %p0, i64 %p1) { entry: %a1 = alloca i64, align 16 %a2 = alloca i64, align 16 %a4 = alloca %S.json.Json, align 16 %a7 = alloca %S.json.Json, align 16 %a10 = alloca %S.json.Json, align 16 store i64 %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t3, ptr %a4 %t5 = load i64, ptr %a1 %t6 = call %S.json.Json @finch.lsp.num(i64 %t5) call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6999, i64 4, i64 0 }, %S.json.Json %t6) store %S.json.Json %t6, ptr %a7 call void @finch.drop.S_json_Json(ptr %a7) %t8 = load i64, ptr %a2 %t9 = call %S.json.Json @finch.lsp.num(i64 %t8) call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.7000, i64 9, i64 0 }, %S.json.Json %t9) store %S.json.Json %t9, ptr %a10 call void @finch.drop.S_json_Json(ptr %a10) %t11 = load %S.json.Json, ptr %a4 ret %S.json.Json %t11 } define internal %S.json.Json @finch.lsp.range(i64 %p0, i64 %p1, i64 %p2) { entry: %a1 = alloca i64, align 16 %a2 = alloca i64, align 16 %a3 = alloca i64, align 16 %a5 = alloca %S.json.Json, align 16 %a9 = alloca %S.json.Json, align 16 %a13 = alloca %S.json.Json, align 16 store i64 %p0, ptr %a1 store i64 %p1, ptr %a2 store i64 %p2, ptr %a3 %t4 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t4, ptr %a5 %t6 = load i64, ptr %a1 %t7 = load i64, ptr %a2 %t8 = call %S.json.Json @finch.lsp.position(i64 %t6, i64 %t7) call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.7001, i64 5, i64 0 }, %S.json.Json %t8) store %S.json.Json %t8, ptr %a9 call void @finch.drop.S_json_Json(ptr %a9) %t10 = load i64, ptr %a1 %t11 = load i64, ptr %a3 %t12 = call %S.json.Json @finch.lsp.position(i64 %t10, i64 %t11) call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.7002, i64 3, i64 0 }, %S.json.Json %t12) store %S.json.Json %t12, ptr %a13 call void @finch.drop.S_json_Json(ptr %a13) %t14 = load %S.json.Json, ptr %a5 ret %S.json.Json %t14 } define internal { ptr, i64, i64 } @finch.lsp.splitTabs({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 store { ptr, i64, i64 } { ptr @.str.7004, i64 1, i64 0 }, ptr %a5 call void @finch_str_split(ptr %a6, ptr %a3, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 ret { ptr, i64, i64 } %t7 } define internal i64 @finch.lsp.intOf({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca i64, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a3 store i64 0, ptr %a4 store { ptr, i64, i64 } %t2, ptr %a5 %t6 = call i32 @finch_str_try_int(ptr %a5, ptr %a4, ptr %a3) %t7 = icmp eq i32 %t6, 0 %t8 = load { ptr, i64, i64 }, ptr %a3 %t9 = load i64, ptr %a4 br i1 %t7, label %or.failed10480, label %or.ok10481 or.failed10480: store { ptr, i64, i64 } %t8, ptr %a10 call void @finch_str_drop(ptr %a10) br label %or.bend10482 or.bend10482: br label %or.end10483 or.ok10481: br label %or.end10483 or.end10483: %t11 = phi i64 [ 0, %or.bend10482 ], [ %t9, %or.ok10481 ] ret i64 %t11 } define internal %S.lsp.Diag @finch.lsp.parseDiag({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca i64, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca i64, align 16 %a56 = alloca i64, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca i64, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 store { ptr, i64, i64 } { ptr @.str.7006, i64 9, i64 0 }, ptr %a5 %t6 = call i64 @finch_str_find(ptr %a3, ptr %a5) store i64 %t6, ptr %a7 %t8 = load i64, ptr %a7 %t9 = icmp slt i64 %t8, 0 br i1 %t9, label %then10484, label %endif10486 then10484: ret %S.lsp.Diag zeroinitializer endif10486: %t10 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t10, ptr %a11 %t13 = load i64, ptr %a7 call void @finch_str_sub(ptr %a12, ptr %a11, i64 0, i64 %t13, ptr @.str.7007, i64 280) %t14 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t14, ptr %a15 %t16 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t16, ptr %a17 %t19 = load i64, ptr %a7 %t20 = add i64 %t19, 9 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t22 = load i64, ptr %t21 call void @finch_str_sub(ptr %a18, ptr %a17, i64 %t20, i64 %t22, ptr @.str.7008, i64 281) %t23 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t23, ptr %a24 %t25 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.7010, i64 1, i64 0 }, ptr %a28 call void @finch_str_split(ptr %a29, ptr %a26, ptr %a28) %t30 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t30, ptr %a31 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 %t33 = load i64, ptr %t32 %t34 = icmp slt i64 %t33, 3 br i1 %t34, label %then10487, label %endif10489 then10487: call void @finch.drop.arr_str(ptr %a31) call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a15) ret %S.lsp.Diag zeroinitializer endif10489: %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 %t36 = load i64, ptr %t35 %t37 = sub i64 %t36, 1 %t38 = load { ptr, i64, i64 }, ptr %a31 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp uge i64 %t37, %t39 br i1 %t40, label %range10490, label %inrange10491 range10490: call void @finch_panic_index(ptr @.str.7011, i64 287, i64 %t37, i64 %t39) unreachable inrange10491: %t41 = extractvalue { ptr, i64, i64 } %t38, 0 %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i64 %t37 %t43 = load { ptr, i64, i64 }, ptr %t42 %t44 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t43) store i64 %t44, ptr %a45 %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = sub i64 %t47, 2 %t49 = load { ptr, i64, i64 }, ptr %a31 %t50 = extractvalue { ptr, i64, i64 } %t49, 1 %t51 = icmp uge i64 %t48, %t50 br i1 %t51, label %range10492, label %inrange10493 range10492: call void @finch_panic_index(ptr @.str.7012, i64 288, i64 %t48, i64 %t50) unreachable inrange10493: %t52 = extractvalue { ptr, i64, i64 } %t49, 0 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 %t48 %t54 = load { ptr, i64, i64 }, ptr %t53 %t55 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t54) store i64 %t55, ptr %a56 store { ptr, i64, i64 } zeroinitializer, ptr %a57 %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 %t59 = load i64, ptr %t58 %t60 = sub i64 %t59, 2 store i64 0, ptr %a61 br label %for.cond10494 for.cond10494: %t62 = load i64, ptr %a61 %t63 = icmp slt i64 %t62, %t60 br i1 %t63, label %for.body10495, label %for.end10497 for.body10495: %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a57, i32 0, i32 1 %t65 = load i64, ptr %a61 %t66 = load { ptr, i64, i64 }, ptr %a31 %t67 = extractvalue { ptr, i64, i64 } %t66, 1 %t68 = icmp uge i64 %t65, %t67 br i1 %t68, label %range10498, label %inrange10499 range10498: call void @finch_panic_index(ptr @.str.7013, i64 291, i64 %t65, i64 %t67) unreachable inrange10499: %t69 = extractvalue { ptr, i64, i64 } %t66, 0 %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i64 %t65 %t71 = load { ptr, i64, i64 }, ptr %t70 store { ptr, i64, i64 } %t71, ptr %a72 call void @finch_str_copy(ptr %a73, ptr %a72) %t74 = load { ptr, i64, i64 }, ptr %a73 %t75 = load i64, ptr %t64 %t76 = add i64 %t75, 1 call void @finch_arr_reserve(ptr %a57, i64 %t76, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t77 = load ptr, ptr %a57 %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i64 %t75 store { ptr, i64, i64 } %t74, ptr %t78 store i64 %t76, ptr %t64 br label %for.step10496 for.step10496: %t79 = load i64, ptr %a61 %t80 = add i64 %t79, 1 store i64 %t80, ptr %a61 br label %for.cond10494 for.end10497: %t81 = insertvalue %S.lsp.Diag zeroinitializer, i1 true, 0 %t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %a57, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.7014, i64 1, i64 0 }, ptr %a83 call void @finch_str_join(ptr %a84, ptr %a57, ptr %a83) %t85 = load { ptr, i64, i64 }, ptr %a84 %t86 = insertvalue %S.lsp.Diag %t81, { ptr, i64, i64 } %t85, 1 %t87 = load i64, ptr %a56 %t88 = insertvalue %S.lsp.Diag %t86, i64 %t87, 2 %t89 = load i64, ptr %a45 %t90 = insertvalue %S.lsp.Diag %t88, i64 %t89, 3 %t91 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t91, ptr %a92 call void @finch_str_copy(ptr %a93, ptr %a92) %t94 = load { ptr, i64, i64 }, ptr %a93 %t95 = insertvalue %S.lsp.Diag %t90, { ptr, i64, i64 } %t94, 4 call void @finch.drop.arr_str(ptr %a57) call void @finch.drop.arr_str(ptr %a31) call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a15) ret %S.lsp.Diag %t95 } define internal void @finch.drop.S_lsp_Diag(ptr %a) { entry: %t1 = getelementptr inbounds %S.lsp.Diag, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.lsp.Diag, ptr %a, i32 0, i32 4 call void @finch_str_drop(ptr %t2) ret void } define internal %S.lsp.Analysis @finch.lsp.parseOutput({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca %S.lsp.Analysis, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca i64, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a308 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a369 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca i64, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a403 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a432 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 %a458 = alloca { ptr, i64, i64 }, align 16 %a459 = alloca { ptr, i64, i64 }, align 16 %a468 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a494 = alloca { ptr, i64, i64 }, align 16 %a495 = alloca { ptr, i64, i64 }, align 16 %a496 = alloca { ptr, i64, i64 }, align 16 %a497 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a521 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca { ptr, i64, i64 }, align 16 %a536 = alloca %S.lsp.Diag, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store %S.lsp.Analysis zeroinitializer, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.7016, i64 1, i64 0 }, ptr %a6 call void @finch_str_split(ptr %a7, ptr %a4, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t8, ptr %a9 store i64 0, ptr %a10 br label %each.cond10500 each.cond10500: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = load i64, ptr %a10 %t14 = icmp slt i64 %t13, %t12 br i1 %t14, label %each.body10501, label %each.end10503 each.body10501: %t15 = load ptr, ptr %a9 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 %t17 = load { ptr, i64, i64 }, ptr %t16 store { ptr, i64, i64 } %t17, ptr %a18 %t19 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.7018, i64 1, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_starts(ptr %a20, ptr %a22) %t24 = icmp ne i32 %t23, 0 br i1 %t24, label %then10504, label %else10505 then10504: %t25 = load { ptr, i64, i64 }, ptr %a18 %t26 = call { ptr, i64, i64 } @finch.lsp.splitTabs({ ptr, i64, i64 } %t25) store { ptr, i64, i64 } %t26, ptr %a27 %t28 = load { ptr, i64, i64 }, ptr %a27 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 0, %t29 br i1 %t30, label %range10507, label %inrange10508 range10507: call void @finch_panic_index(ptr @.str.7019, i64 301, i64 0, i64 %t29) unreachable inrange10508: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i64 0 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 call void @finch_str_copy(ptr %a35, ptr %a34) %t36 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t36, ptr %a37 %t38 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t38, ptr %a39 store { ptr, i64, i64 } { ptr @.str.7020, i64 2, i64 0 }, ptr %a40 %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) %t42 = icmp ne i32 %t41, 0 br label %logic.from10509 logic.from10509: br i1 %t42, label %logic.rhs10510, label %logic.end10511 logic.rhs10510: %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t44 = load i64, ptr %t43 %t45 = icmp sge i64 %t44, 9 br label %logic.rend10512 logic.rend10512: br label %logic.end10511 logic.end10511: %t46 = phi i1 [ false, %logic.from10509 ], [ %t45, %logic.rend10512 ] br i1 %t46, label %then10513, label %else10514 then10513: %t47 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 0 %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i32 0, i32 1 %t49 = load { ptr, i64, i64 }, ptr %a27 %t50 = extractvalue { ptr, i64, i64 } %t49, 1 %t51 = icmp uge i64 1, %t50 br i1 %t51, label %range10516, label %inrange10517 range10516: call void @finch_panic_index(ptr @.str.7021, i64 303, i64 1, i64 %t50) unreachable inrange10517: %t52 = extractvalue { ptr, i64, i64 } %t49, 0 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 1 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t54, ptr %a55 call void @finch_str_copy(ptr %a56, ptr %a55) %t57 = load { ptr, i64, i64 }, ptr %a56 %t58 = insertvalue %S.lsp.Ref zeroinitializer, { ptr, i64, i64 } %t57, 0 %t59 = load { ptr, i64, i64 }, ptr %a27 %t60 = extractvalue { ptr, i64, i64 } %t59, 1 %t61 = icmp uge i64 2, %t60 br i1 %t61, label %range10518, label %inrange10519 range10518: call void @finch_panic_index(ptr @.str.7022, i64 303, i64 2, i64 %t60) unreachable inrange10519: %t62 = extractvalue { ptr, i64, i64 } %t59, 0 %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i64 2 %t64 = load { ptr, i64, i64 }, ptr %t63 %t65 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t64) %t66 = insertvalue %S.lsp.Ref %t58, i64 %t65, 1 %t67 = load { ptr, i64, i64 }, ptr %a27 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 3, %t68 br i1 %t69, label %range10520, label %inrange10521 range10520: call void @finch_panic_index(ptr @.str.7023, i64 303, i64 3, i64 %t68) unreachable inrange10521: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i64 3 %t72 = load { ptr, i64, i64 }, ptr %t71 %t73 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t72) %t74 = insertvalue %S.lsp.Ref %t66, i64 %t73, 2 %t75 = load { ptr, i64, i64 }, ptr %a27 %t76 = extractvalue { ptr, i64, i64 } %t75, 1 %t77 = icmp uge i64 4, %t76 br i1 %t77, label %range10522, label %inrange10523 range10522: call void @finch_panic_index(ptr @.str.7024, i64 303, i64 4, i64 %t76) unreachable inrange10523: %t78 = extractvalue { ptr, i64, i64 } %t75, 0 %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i64 4 %t80 = load { ptr, i64, i64 }, ptr %t79 %t81 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t80) %t82 = insertvalue %S.lsp.Ref %t74, i64 %t81, 3 %t83 = load { ptr, i64, i64 }, ptr %a27 %t84 = extractvalue { ptr, i64, i64 } %t83, 1 %t85 = icmp uge i64 5, %t84 br i1 %t85, label %range10524, label %inrange10525 range10524: call void @finch_panic_index(ptr @.str.7025, i64 303, i64 5, i64 %t84) unreachable inrange10525: %t86 = extractvalue { ptr, i64, i64 } %t83, 0 %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i64 5 %t88 = load { ptr, i64, i64 }, ptr %t87 store { ptr, i64, i64 } %t88, ptr %a89 call void @finch_str_copy(ptr %a90, ptr %a89) %t91 = load { ptr, i64, i64 }, ptr %a90 %t92 = insertvalue %S.lsp.Ref %t82, { ptr, i64, i64 } %t91, 4 %t93 = load { ptr, i64, i64 }, ptr %a27 %t94 = extractvalue { ptr, i64, i64 } %t93, 1 %t95 = icmp uge i64 6, %t94 br i1 %t95, label %range10526, label %inrange10527 range10526: call void @finch_panic_index(ptr @.str.7026, i64 303, i64 6, i64 %t94) unreachable inrange10527: %t96 = extractvalue { ptr, i64, i64 } %t93, 0 %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %t96, i64 6 %t98 = load { ptr, i64, i64 }, ptr %t97 %t99 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t98) %t100 = insertvalue %S.lsp.Ref %t92, i64 %t99, 5 %t101 = load { ptr, i64, i64 }, ptr %a27 %t102 = extractvalue { ptr, i64, i64 } %t101, 1 %t103 = icmp uge i64 7, %t102 br i1 %t103, label %range10528, label %inrange10529 range10528: call void @finch_panic_index(ptr @.str.7027, i64 303, i64 7, i64 %t102) unreachable inrange10529: %t104 = extractvalue { ptr, i64, i64 } %t101, 0 %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i64 7 %t106 = load { ptr, i64, i64 }, ptr %t105 %t107 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t106) %t108 = insertvalue %S.lsp.Ref %t100, i64 %t107, 6 %t109 = load { ptr, i64, i64 }, ptr %a27 %t110 = extractvalue { ptr, i64, i64 } %t109, 1 %t111 = icmp uge i64 8, %t110 br i1 %t111, label %range10530, label %inrange10531 range10530: call void @finch_panic_index(ptr @.str.7028, i64 303, i64 8, i64 %t110) unreachable inrange10531: %t112 = extractvalue { ptr, i64, i64 } %t109, 0 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 8 %t114 = load { ptr, i64, i64 }, ptr %t113 %t115 = call { ptr, i64, i64 } @finch.lsp.unesc({ ptr, i64, i64 } %t114) %t116 = insertvalue %S.lsp.Ref %t108, { ptr, i64, i64 } %t115, 7 %t117 = load i64, ptr %t48 %t118 = add i64 %t117, 1 call void @finch_arr_reserve(ptr %t47, i64 %t118, i64 ptrtoint (ptr getelementptr (%S.lsp.Ref, ptr null, i32 1) to i64)) %t119 = load ptr, ptr %t47 %t120 = getelementptr inbounds %S.lsp.Ref, ptr %t119, i64 %t117 store %S.lsp.Ref %t116, ptr %t120 store i64 %t118, ptr %t48 br label %endif10515 else10514: %t121 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t121, ptr %a122 store { ptr, i64, i64 } { ptr @.str.7029, i64 2, i64 0 }, ptr %a123 %t124 = call i32 @finch_str_eq(ptr %a122, ptr %a123) %t125 = icmp ne i32 %t124, 0 br label %logic.from10532 logic.from10532: br i1 %t125, label %logic.rhs10533, label %logic.end10534 logic.rhs10533: %t126 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t127 = load i64, ptr %t126 %t128 = icmp sge i64 %t127, 9 br label %logic.rend10535 logic.rend10535: br label %logic.end10534 logic.end10534: %t129 = phi i1 [ false, %logic.from10532 ], [ %t128, %logic.rend10535 ] br i1 %t129, label %then10536, label %else10537 then10536: %t130 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 1 %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t130, i32 0, i32 1 %t132 = load { ptr, i64, i64 }, ptr %a27 %t133 = extractvalue { ptr, i64, i64 } %t132, 1 %t134 = icmp uge i64 1, %t133 br i1 %t134, label %range10539, label %inrange10540 range10539: call void @finch_panic_index(ptr @.str.7030, i64 305, i64 1, i64 %t133) unreachable inrange10540: %t135 = extractvalue { ptr, i64, i64 } %t132, 0 %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i64 1 %t137 = load { ptr, i64, i64 }, ptr %t136 store { ptr, i64, i64 } %t137, ptr %a138 call void @finch_str_copy(ptr %a139, ptr %a138) %t140 = load { ptr, i64, i64 }, ptr %a139 %t141 = insertvalue %S.lsp.VarRec zeroinitializer, { ptr, i64, i64 } %t140, 0 %t142 = load { ptr, i64, i64 }, ptr %a27 %t143 = extractvalue { ptr, i64, i64 } %t142, 1 %t144 = icmp uge i64 2, %t143 br i1 %t144, label %range10541, label %inrange10542 range10541: call void @finch_panic_index(ptr @.str.7031, i64 305, i64 2, i64 %t143) unreachable inrange10542: %t145 = extractvalue { ptr, i64, i64 } %t142, 0 %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i64 2 %t147 = load { ptr, i64, i64 }, ptr %t146 store { ptr, i64, i64 } %t147, ptr %a148 call void @finch_str_copy(ptr %a149, ptr %a148) %t150 = load { ptr, i64, i64 }, ptr %a149 %t151 = insertvalue %S.lsp.VarRec %t141, { ptr, i64, i64 } %t150, 1 %t152 = load { ptr, i64, i64 }, ptr %a27 %t153 = extractvalue { ptr, i64, i64 } %t152, 1 %t154 = icmp uge i64 3, %t153 br i1 %t154, label %range10543, label %inrange10544 range10543: call void @finch_panic_index(ptr @.str.7032, i64 305, i64 3, i64 %t153) unreachable inrange10544: %t155 = extractvalue { ptr, i64, i64 } %t152, 0 %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %t155, i64 3 %t157 = load { ptr, i64, i64 }, ptr %t156 store { ptr, i64, i64 } %t157, ptr %a158 call void @finch_str_copy(ptr %a159, ptr %a158) %t160 = load { ptr, i64, i64 }, ptr %a159 %t161 = insertvalue %S.lsp.VarRec %t151, { ptr, i64, i64 } %t160, 2 %t162 = load { ptr, i64, i64 }, ptr %a27 %t163 = extractvalue { ptr, i64, i64 } %t162, 1 %t164 = icmp uge i64 4, %t163 br i1 %t164, label %range10545, label %inrange10546 range10545: call void @finch_panic_index(ptr @.str.7033, i64 305, i64 4, i64 %t163) unreachable inrange10546: %t165 = extractvalue { ptr, i64, i64 } %t162, 0 %t166 = getelementptr inbounds { ptr, i64, i64 }, ptr %t165, i64 4 %t167 = load { ptr, i64, i64 }, ptr %t166 %t168 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t167) %t169 = insertvalue %S.lsp.VarRec %t161, i64 %t168, 3 %t170 = load { ptr, i64, i64 }, ptr %a27 %t171 = extractvalue { ptr, i64, i64 } %t170, 1 %t172 = icmp uge i64 5, %t171 br i1 %t172, label %range10547, label %inrange10548 range10547: call void @finch_panic_index(ptr @.str.7034, i64 305, i64 5, i64 %t171) unreachable inrange10548: %t173 = extractvalue { ptr, i64, i64 } %t170, 0 %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i64 5 %t175 = load { ptr, i64, i64 }, ptr %t174 %t176 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t175) %t177 = insertvalue %S.lsp.VarRec %t169, i64 %t176, 4 %t178 = load { ptr, i64, i64 }, ptr %a27 %t179 = extractvalue { ptr, i64, i64 } %t178, 1 %t180 = icmp uge i64 6, %t179 br i1 %t180, label %range10549, label %inrange10550 range10549: call void @finch_panic_index(ptr @.str.7035, i64 305, i64 6, i64 %t179) unreachable inrange10550: %t181 = extractvalue { ptr, i64, i64 } %t178, 0 %t182 = getelementptr inbounds { ptr, i64, i64 }, ptr %t181, i64 6 %t183 = load { ptr, i64, i64 }, ptr %t182 store { ptr, i64, i64 } %t183, ptr %a184 call void @finch_str_copy(ptr %a185, ptr %a184) %t186 = load { ptr, i64, i64 }, ptr %a185 %t187 = insertvalue %S.lsp.VarRec %t177, { ptr, i64, i64 } %t186, 5 %t188 = load { ptr, i64, i64 }, ptr %a27 %t189 = extractvalue { ptr, i64, i64 } %t188, 1 %t190 = icmp uge i64 7, %t189 br i1 %t190, label %range10551, label %inrange10552 range10551: call void @finch_panic_index(ptr @.str.7036, i64 305, i64 7, i64 %t189) unreachable inrange10552: %t191 = extractvalue { ptr, i64, i64 } %t188, 0 %t192 = getelementptr inbounds { ptr, i64, i64 }, ptr %t191, i64 7 %t193 = load { ptr, i64, i64 }, ptr %t192 %t194 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t193) %t195 = insertvalue %S.lsp.VarRec %t187, i64 %t194, 6 %t196 = load { ptr, i64, i64 }, ptr %a27 %t197 = extractvalue { ptr, i64, i64 } %t196, 1 %t198 = icmp uge i64 8, %t197 br i1 %t198, label %range10553, label %inrange10554 range10553: call void @finch_panic_index(ptr @.str.7037, i64 305, i64 8, i64 %t197) unreachable inrange10554: %t199 = extractvalue { ptr, i64, i64 } %t196, 0 %t200 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i64 8 %t201 = load { ptr, i64, i64 }, ptr %t200 %t202 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t201) %t203 = insertvalue %S.lsp.VarRec %t195, i64 %t202, 7 %t204 = load i64, ptr %t131 %t205 = add i64 %t204, 1 call void @finch_arr_reserve(ptr %t130, i64 %t205, i64 ptrtoint (ptr getelementptr (%S.lsp.VarRec, ptr null, i32 1) to i64)) %t206 = load ptr, ptr %t130 %t207 = getelementptr inbounds %S.lsp.VarRec, ptr %t206, i64 %t204 store %S.lsp.VarRec %t203, ptr %t207 store i64 %t205, ptr %t131 br label %endif10538 else10537: %t208 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t208, ptr %a209 store { ptr, i64, i64 } { ptr @.str.7038, i64 2, i64 0 }, ptr %a210 %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) %t212 = icmp ne i32 %t211, 0 br label %logic.from10555 logic.from10555: br i1 %t212, label %logic.rhs10556, label %logic.end10557 logic.rhs10556: %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t214 = load i64, ptr %t213 %t215 = icmp sge i64 %t214, 10 br label %logic.rend10558 logic.rend10558: br label %logic.end10557 logic.end10557: %t216 = phi i1 [ false, %logic.from10555 ], [ %t215, %logic.rend10558 ] br i1 %t216, label %then10559, label %else10560 then10559: %t217 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 2 %t218 = getelementptr inbounds { ptr, i64, i64 }, ptr %t217, i32 0, i32 1 %t219 = load { ptr, i64, i64 }, ptr %a27 %t220 = extractvalue { ptr, i64, i64 } %t219, 1 %t221 = icmp uge i64 1, %t220 br i1 %t221, label %range10562, label %inrange10563 range10562: call void @finch_panic_index(ptr @.str.7039, i64 307, i64 1, i64 %t220) unreachable inrange10563: %t222 = extractvalue { ptr, i64, i64 } %t219, 0 %t223 = getelementptr inbounds { ptr, i64, i64 }, ptr %t222, i64 1 %t224 = load { ptr, i64, i64 }, ptr %t223 store { ptr, i64, i64 } %t224, ptr %a225 call void @finch_str_copy(ptr %a226, ptr %a225) %t227 = load { ptr, i64, i64 }, ptr %a226 %t228 = insertvalue %S.lsp.FnRec zeroinitializer, { ptr, i64, i64 } %t227, 0 %t229 = load { ptr, i64, i64 }, ptr %a27 %t230 = extractvalue { ptr, i64, i64 } %t229, 1 %t231 = icmp uge i64 2, %t230 br i1 %t231, label %range10564, label %inrange10565 range10564: call void @finch_panic_index(ptr @.str.7040, i64 307, i64 2, i64 %t230) unreachable inrange10565: %t232 = extractvalue { ptr, i64, i64 } %t229, 0 %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %t232, i64 2 %t234 = load { ptr, i64, i64 }, ptr %t233 store { ptr, i64, i64 } %t234, ptr %a235 call void @finch_str_copy(ptr %a236, ptr %a235) %t237 = load { ptr, i64, i64 }, ptr %a236 %t238 = insertvalue %S.lsp.FnRec %t228, { ptr, i64, i64 } %t237, 1 %t239 = load { ptr, i64, i64 }, ptr %a27 %t240 = extractvalue { ptr, i64, i64 } %t239, 1 %t241 = icmp uge i64 3, %t240 br i1 %t241, label %range10566, label %inrange10567 range10566: call void @finch_panic_index(ptr @.str.7041, i64 307, i64 3, i64 %t240) unreachable inrange10567: %t242 = extractvalue { ptr, i64, i64 } %t239, 0 %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i64 3 %t244 = load { ptr, i64, i64 }, ptr %t243 store { ptr, i64, i64 } %t244, ptr %a245 call void @finch_str_copy(ptr %a246, ptr %a245) %t247 = load { ptr, i64, i64 }, ptr %a246 %t248 = insertvalue %S.lsp.FnRec %t238, { ptr, i64, i64 } %t247, 2 %t249 = load { ptr, i64, i64 }, ptr %a27 %t250 = extractvalue { ptr, i64, i64 } %t249, 1 %t251 = icmp uge i64 4, %t250 br i1 %t251, label %range10568, label %inrange10569 range10568: call void @finch_panic_index(ptr @.str.7042, i64 307, i64 4, i64 %t250) unreachable inrange10569: %t252 = extractvalue { ptr, i64, i64 } %t249, 0 %t253 = getelementptr inbounds { ptr, i64, i64 }, ptr %t252, i64 4 %t254 = load { ptr, i64, i64 }, ptr %t253 store { ptr, i64, i64 } %t254, ptr %a255 call void @finch_str_copy(ptr %a256, ptr %a255) %t257 = load { ptr, i64, i64 }, ptr %a256 %t258 = insertvalue %S.lsp.FnRec %t248, { ptr, i64, i64 } %t257, 3 %t259 = load { ptr, i64, i64 }, ptr %a27 %t260 = extractvalue { ptr, i64, i64 } %t259, 1 %t261 = icmp uge i64 5, %t260 br i1 %t261, label %range10570, label %inrange10571 range10570: call void @finch_panic_index(ptr @.str.7043, i64 307, i64 5, i64 %t260) unreachable inrange10571: %t262 = extractvalue { ptr, i64, i64 } %t259, 0 %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 5 %t264 = load { ptr, i64, i64 }, ptr %t263 %t265 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t264) %t266 = insertvalue %S.lsp.FnRec %t258, i64 %t265, 4 %t267 = load { ptr, i64, i64 }, ptr %a27 %t268 = extractvalue { ptr, i64, i64 } %t267, 1 %t269 = icmp uge i64 6, %t268 br i1 %t269, label %range10572, label %inrange10573 range10572: call void @finch_panic_index(ptr @.str.7044, i64 307, i64 6, i64 %t268) unreachable inrange10573: %t270 = extractvalue { ptr, i64, i64 } %t267, 0 %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t270, i64 6 %t272 = load { ptr, i64, i64 }, ptr %t271 %t273 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t272) %t274 = insertvalue %S.lsp.FnRec %t266, i64 %t273, 5 %t275 = load { ptr, i64, i64 }, ptr %a27 %t276 = extractvalue { ptr, i64, i64 } %t275, 1 %t277 = icmp uge i64 7, %t276 br i1 %t277, label %range10574, label %inrange10575 range10574: call void @finch_panic_index(ptr @.str.7045, i64 307, i64 7, i64 %t276) unreachable inrange10575: %t278 = extractvalue { ptr, i64, i64 } %t275, 0 %t279 = getelementptr inbounds { ptr, i64, i64 }, ptr %t278, i64 7 %t280 = load { ptr, i64, i64 }, ptr %t279 %t281 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t280) %t282 = insertvalue %S.lsp.FnRec %t274, i64 %t281, 6 %t283 = load { ptr, i64, i64 }, ptr %a27 %t284 = extractvalue { ptr, i64, i64 } %t283, 1 %t285 = icmp uge i64 8, %t284 br i1 %t285, label %range10576, label %inrange10577 range10576: call void @finch_panic_index(ptr @.str.7046, i64 307, i64 8, i64 %t284) unreachable inrange10577: %t286 = extractvalue { ptr, i64, i64 } %t283, 0 %t287 = getelementptr inbounds { ptr, i64, i64 }, ptr %t286, i64 8 %t288 = load { ptr, i64, i64 }, ptr %t287 %t289 = call { ptr, i64, i64 } @finch.lsp.unesc({ ptr, i64, i64 } %t288) %t290 = insertvalue %S.lsp.FnRec %t282, { ptr, i64, i64 } %t289, 7 %t291 = load { ptr, i64, i64 }, ptr %a27 %t292 = extractvalue { ptr, i64, i64 } %t291, 1 %t293 = icmp uge i64 9, %t292 br i1 %t293, label %range10578, label %inrange10579 range10578: call void @finch_panic_index(ptr @.str.7047, i64 307, i64 9, i64 %t292) unreachable inrange10579: %t294 = extractvalue { ptr, i64, i64 } %t291, 0 %t295 = getelementptr inbounds { ptr, i64, i64 }, ptr %t294, i64 9 %t296 = load { ptr, i64, i64 }, ptr %t295 store { ptr, i64, i64 } %t296, ptr %a297 store { ptr, i64, i64 } { ptr @.str.7049, i64 1, i64 0 }, ptr %a299 call void @finch_str_split(ptr %a300, ptr %a297, ptr %a299) %t301 = load { ptr, i64, i64 }, ptr %a300 %t302 = insertvalue %S.lsp.FnRec %t290, { ptr, i64, i64 } %t301, 8 %t303 = load i64, ptr %t218 %t304 = add i64 %t303, 1 call void @finch_arr_reserve(ptr %t217, i64 %t304, i64 ptrtoint (ptr getelementptr (%S.lsp.FnRec, ptr null, i32 1) to i64)) %t305 = load ptr, ptr %t217 %t306 = getelementptr inbounds %S.lsp.FnRec, ptr %t305, i64 %t303 store %S.lsp.FnRec %t302, ptr %t306 store i64 %t304, ptr %t218 br label %endif10561 else10560: %t307 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t307, ptr %a308 store { ptr, i64, i64 } { ptr @.str.7050, i64 2, i64 0 }, ptr %a309 %t310 = call i32 @finch_str_eq(ptr %a308, ptr %a309) %t311 = icmp ne i32 %t310, 0 br label %logic.from10580 logic.from10580: br i1 %t311, label %logic.rhs10581, label %logic.end10582 logic.rhs10581: %t312 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t313 = load i64, ptr %t312 %t314 = icmp sge i64 %t313, 6 br label %logic.rend10583 logic.rend10583: br label %logic.end10582 logic.end10582: %t315 = phi i1 [ false, %logic.from10580 ], [ %t314, %logic.rend10583 ] br i1 %t315, label %then10584, label %else10585 then10584: %t316 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t316, i32 0, i32 1 %t318 = load { ptr, i64, i64 }, ptr %a27 %t319 = extractvalue { ptr, i64, i64 } %t318, 1 %t320 = icmp uge i64 1, %t319 br i1 %t320, label %range10587, label %inrange10588 range10587: call void @finch_panic_index(ptr @.str.7051, i64 309, i64 1, i64 %t319) unreachable inrange10588: %t321 = extractvalue { ptr, i64, i64 } %t318, 0 %t322 = getelementptr inbounds { ptr, i64, i64 }, ptr %t321, i64 1 %t323 = load { ptr, i64, i64 }, ptr %t322 store { ptr, i64, i64 } %t323, ptr %a324 call void @finch_str_copy(ptr %a325, ptr %a324) %t326 = load { ptr, i64, i64 }, ptr %a325 %t327 = insertvalue %S.lsp.StructRec zeroinitializer, { ptr, i64, i64 } %t326, 0 %t328 = load { ptr, i64, i64 }, ptr %a27 %t329 = extractvalue { ptr, i64, i64 } %t328, 1 %t330 = icmp uge i64 2, %t329 br i1 %t330, label %range10589, label %inrange10590 range10589: call void @finch_panic_index(ptr @.str.7052, i64 309, i64 2, i64 %t329) unreachable inrange10590: %t331 = extractvalue { ptr, i64, i64 } %t328, 0 %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i64 2 %t333 = load { ptr, i64, i64 }, ptr %t332 store { ptr, i64, i64 } %t333, ptr %a334 call void @finch_str_copy(ptr %a335, ptr %a334) %t336 = load { ptr, i64, i64 }, ptr %a335 %t337 = insertvalue %S.lsp.StructRec %t327, { ptr, i64, i64 } %t336, 1 %t338 = load { ptr, i64, i64 }, ptr %a27 %t339 = extractvalue { ptr, i64, i64 } %t338, 1 %t340 = icmp uge i64 3, %t339 br i1 %t340, label %range10591, label %inrange10592 range10591: call void @finch_panic_index(ptr @.str.7053, i64 309, i64 3, i64 %t339) unreachable inrange10592: %t341 = extractvalue { ptr, i64, i64 } %t338, 0 %t342 = getelementptr inbounds { ptr, i64, i64 }, ptr %t341, i64 3 %t343 = load { ptr, i64, i64 }, ptr %t342 store { ptr, i64, i64 } %t343, ptr %a344 call void @finch_str_copy(ptr %a345, ptr %a344) %t346 = load { ptr, i64, i64 }, ptr %a345 %t347 = insertvalue %S.lsp.StructRec %t337, { ptr, i64, i64 } %t346, 2 %t348 = load { ptr, i64, i64 }, ptr %a27 %t349 = extractvalue { ptr, i64, i64 } %t348, 1 %t350 = icmp uge i64 4, %t349 br i1 %t350, label %range10593, label %inrange10594 range10593: call void @finch_panic_index(ptr @.str.7054, i64 309, i64 4, i64 %t349) unreachable inrange10594: %t351 = extractvalue { ptr, i64, i64 } %t348, 0 %t352 = getelementptr inbounds { ptr, i64, i64 }, ptr %t351, i64 4 %t353 = load { ptr, i64, i64 }, ptr %t352 %t354 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t353) %t355 = insertvalue %S.lsp.StructRec %t347, i64 %t354, 3 %t356 = load { ptr, i64, i64 }, ptr %a27 %t357 = extractvalue { ptr, i64, i64 } %t356, 1 %t358 = icmp uge i64 5, %t357 br i1 %t358, label %range10595, label %inrange10596 range10595: call void @finch_panic_index(ptr @.str.7055, i64 309, i64 5, i64 %t357) unreachable inrange10596: %t359 = extractvalue { ptr, i64, i64 } %t356, 0 %t360 = getelementptr inbounds { ptr, i64, i64 }, ptr %t359, i64 5 %t361 = load { ptr, i64, i64 }, ptr %t360 %t362 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t361) %t363 = insertvalue %S.lsp.StructRec %t355, i64 %t362, 4 %t364 = load i64, ptr %t317 %t365 = add i64 %t364, 1 call void @finch_arr_reserve(ptr %t316, i64 %t365, i64 ptrtoint (ptr getelementptr (%S.lsp.StructRec, ptr null, i32 1) to i64)) %t366 = load ptr, ptr %t316 %t367 = getelementptr inbounds %S.lsp.StructRec, ptr %t366, i64 %t364 store %S.lsp.StructRec %t363, ptr %t367 store i64 %t365, ptr %t317 br label %endif10586 else10585: %t368 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t368, ptr %a369 store { ptr, i64, i64 } { ptr @.str.7056, i64 3, i64 0 }, ptr %a370 %t371 = call i32 @finch_str_eq(ptr %a369, ptr %a370) %t372 = icmp ne i32 %t371, 0 br label %logic.from10597 logic.from10597: br i1 %t372, label %logic.rhs10598, label %logic.end10599 logic.rhs10598: %t373 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t374 = load i64, ptr %t373 %t375 = icmp sge i64 %t374, 5 br label %logic.rend10600 logic.rend10600: br label %logic.end10599 logic.end10599: %t376 = phi i1 [ false, %logic.from10597 ], [ %t375, %logic.rend10600 ] br label %logic.from10601 logic.from10601: br i1 %t376, label %logic.rhs10602, label %logic.end10603 logic.rhs10602: %t377 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 %t378 = getelementptr inbounds { ptr, i64, i64 }, ptr %t377, i32 0, i32 1 %t379 = load i64, ptr %t378 %t380 = icmp sgt i64 %t379, 0 br label %logic.rend10604 logic.rend10604: br label %logic.end10603 logic.end10603: %t381 = phi i1 [ false, %logic.from10601 ], [ %t380, %logic.rend10604 ] br i1 %t381, label %then10605, label %else10606 then10605: %t382 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 %t383 = getelementptr inbounds { ptr, i64, i64 }, ptr %t382, i32 0, i32 1 %t384 = load i64, ptr %t383 %t385 = sub i64 %t384, 1 store i64 %t385, ptr %a386 %t387 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 %t388 = load i64, ptr %a386 %t389 = load { ptr, i64, i64 }, ptr %t387 %t390 = extractvalue { ptr, i64, i64 } %t389, 1 %t391 = icmp uge i64 %t388, %t390 br i1 %t391, label %range10608, label %inrange10609 range10608: call void @finch_panic_index(ptr @.str.7057, i64 312, i64 %t388, i64 %t390) unreachable inrange10609: %t392 = extractvalue { ptr, i64, i64 } %t389, 0 %t393 = getelementptr inbounds %S.lsp.StructRec, ptr %t392, i64 %t388 %t394 = getelementptr inbounds %S.lsp.StructRec, ptr %t393, i32 0, i32 5 %t395 = getelementptr inbounds { ptr, i64, i64 }, ptr %t394, i32 0, i32 1 %t396 = load { ptr, i64, i64 }, ptr %a27 %t397 = extractvalue { ptr, i64, i64 } %t396, 1 %t398 = icmp uge i64 3, %t397 br i1 %t398, label %range10610, label %inrange10611 range10610: call void @finch_panic_index(ptr @.str.7058, i64 312, i64 3, i64 %t397) unreachable inrange10611: %t399 = extractvalue { ptr, i64, i64 } %t396, 0 %t400 = getelementptr inbounds { ptr, i64, i64 }, ptr %t399, i64 3 %t401 = load { ptr, i64, i64 }, ptr %t400 store { ptr, i64, i64 } %t401, ptr %a402 call void @finch_str_copy(ptr %a403, ptr %a402) %t404 = load { ptr, i64, i64 }, ptr %a403 %t405 = load i64, ptr %t395 %t406 = add i64 %t405, 1 call void @finch_arr_reserve(ptr %t394, i64 %t406, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t407 = load ptr, ptr %t394 %t408 = getelementptr inbounds { ptr, i64, i64 }, ptr %t407, i64 %t405 store { ptr, i64, i64 } %t404, ptr %t408 store i64 %t406, ptr %t395 %t409 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 %t410 = load i64, ptr %a386 %t411 = load { ptr, i64, i64 }, ptr %t409 %t412 = extractvalue { ptr, i64, i64 } %t411, 1 %t413 = icmp uge i64 %t410, %t412 br i1 %t413, label %range10612, label %inrange10613 range10612: call void @finch_panic_index(ptr @.str.7059, i64 313, i64 %t410, i64 %t412) unreachable inrange10613: %t414 = extractvalue { ptr, i64, i64 } %t411, 0 %t415 = getelementptr inbounds %S.lsp.StructRec, ptr %t414, i64 %t410 %t416 = getelementptr inbounds %S.lsp.StructRec, ptr %t415, i32 0, i32 6 %t417 = getelementptr inbounds { ptr, i64, i64 }, ptr %t416, i32 0, i32 1 %t418 = load { ptr, i64, i64 }, ptr %a27 %t419 = extractvalue { ptr, i64, i64 } %t418, 1 %t420 = icmp uge i64 4, %t419 br i1 %t420, label %range10614, label %inrange10615 range10614: call void @finch_panic_index(ptr @.str.7060, i64 313, i64 4, i64 %t419) unreachable inrange10615: %t421 = extractvalue { ptr, i64, i64 } %t418, 0 %t422 = getelementptr inbounds { ptr, i64, i64 }, ptr %t421, i64 4 %t423 = load { ptr, i64, i64 }, ptr %t422 store { ptr, i64, i64 } %t423, ptr %a424 call void @finch_str_copy(ptr %a425, ptr %a424) %t426 = load { ptr, i64, i64 }, ptr %a425 %t427 = load i64, ptr %t417 %t428 = add i64 %t427, 1 call void @finch_arr_reserve(ptr %t416, i64 %t428, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t429 = load ptr, ptr %t416 %t430 = getelementptr inbounds { ptr, i64, i64 }, ptr %t429, i64 %t427 store { ptr, i64, i64 } %t426, ptr %t430 store i64 %t428, ptr %t417 br label %endif10607 else10606: %t431 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t431, ptr %a432 store { ptr, i64, i64 } { ptr @.str.7061, i64 2, i64 0 }, ptr %a433 %t434 = call i32 @finch_str_eq(ptr %a432, ptr %a433) %t435 = icmp ne i32 %t434, 0 br label %logic.from10616 logic.from10616: br i1 %t435, label %logic.rhs10617, label %logic.end10618 logic.rhs10617: %t436 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t437 = load i64, ptr %t436 %t438 = icmp sge i64 %t437, 7 br label %logic.rend10619 logic.rend10619: br label %logic.end10618 logic.end10618: %t439 = phi i1 [ false, %logic.from10616 ], [ %t438, %logic.rend10619 ] br i1 %t439, label %then10620, label %else10621 then10620: %t440 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 4 %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t440, i32 0, i32 1 %t442 = load { ptr, i64, i64 }, ptr %a27 %t443 = extractvalue { ptr, i64, i64 } %t442, 1 %t444 = icmp uge i64 1, %t443 br i1 %t444, label %range10623, label %inrange10624 range10623: call void @finch_panic_index(ptr @.str.7062, i64 315, i64 1, i64 %t443) unreachable inrange10624: %t445 = extractvalue { ptr, i64, i64 } %t442, 0 %t446 = getelementptr inbounds { ptr, i64, i64 }, ptr %t445, i64 1 %t447 = load { ptr, i64, i64 }, ptr %t446 store { ptr, i64, i64 } %t447, ptr %a448 call void @finch_str_copy(ptr %a449, ptr %a448) %t450 = load { ptr, i64, i64 }, ptr %a449 %t451 = insertvalue %S.lsp.EnumRec zeroinitializer, { ptr, i64, i64 } %t450, 0 %t452 = load { ptr, i64, i64 }, ptr %a27 %t453 = extractvalue { ptr, i64, i64 } %t452, 1 %t454 = icmp uge i64 2, %t453 br i1 %t454, label %range10625, label %inrange10626 range10625: call void @finch_panic_index(ptr @.str.7063, i64 315, i64 2, i64 %t453) unreachable inrange10626: %t455 = extractvalue { ptr, i64, i64 } %t452, 0 %t456 = getelementptr inbounds { ptr, i64, i64 }, ptr %t455, i64 2 %t457 = load { ptr, i64, i64 }, ptr %t456 store { ptr, i64, i64 } %t457, ptr %a458 call void @finch_str_copy(ptr %a459, ptr %a458) %t460 = load { ptr, i64, i64 }, ptr %a459 %t461 = insertvalue %S.lsp.EnumRec %t451, { ptr, i64, i64 } %t460, 1 %t462 = load { ptr, i64, i64 }, ptr %a27 %t463 = extractvalue { ptr, i64, i64 } %t462, 1 %t464 = icmp uge i64 3, %t463 br i1 %t464, label %range10627, label %inrange10628 range10627: call void @finch_panic_index(ptr @.str.7064, i64 315, i64 3, i64 %t463) unreachable inrange10628: %t465 = extractvalue { ptr, i64, i64 } %t462, 0 %t466 = getelementptr inbounds { ptr, i64, i64 }, ptr %t465, i64 3 %t467 = load { ptr, i64, i64 }, ptr %t466 store { ptr, i64, i64 } %t467, ptr %a468 call void @finch_str_copy(ptr %a469, ptr %a468) %t470 = load { ptr, i64, i64 }, ptr %a469 %t471 = insertvalue %S.lsp.EnumRec %t461, { ptr, i64, i64 } %t470, 2 %t472 = load { ptr, i64, i64 }, ptr %a27 %t473 = extractvalue { ptr, i64, i64 } %t472, 1 %t474 = icmp uge i64 4, %t473 br i1 %t474, label %range10629, label %inrange10630 range10629: call void @finch_panic_index(ptr @.str.7065, i64 315, i64 4, i64 %t473) unreachable inrange10630: %t475 = extractvalue { ptr, i64, i64 } %t472, 0 %t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i64 4 %t477 = load { ptr, i64, i64 }, ptr %t476 %t478 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t477) %t479 = insertvalue %S.lsp.EnumRec %t471, i64 %t478, 3 %t480 = load { ptr, i64, i64 }, ptr %a27 %t481 = extractvalue { ptr, i64, i64 } %t480, 1 %t482 = icmp uge i64 5, %t481 br i1 %t482, label %range10631, label %inrange10632 range10631: call void @finch_panic_index(ptr @.str.7066, i64 315, i64 5, i64 %t481) unreachable inrange10632: %t483 = extractvalue { ptr, i64, i64 } %t480, 0 %t484 = getelementptr inbounds { ptr, i64, i64 }, ptr %t483, i64 5 %t485 = load { ptr, i64, i64 }, ptr %t484 %t486 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t485) %t487 = insertvalue %S.lsp.EnumRec %t479, i64 %t486, 4 %t488 = load { ptr, i64, i64 }, ptr %a27 %t489 = extractvalue { ptr, i64, i64 } %t488, 1 %t490 = icmp uge i64 6, %t489 br i1 %t490, label %range10633, label %inrange10634 range10633: call void @finch_panic_index(ptr @.str.7067, i64 315, i64 6, i64 %t489) unreachable inrange10634: %t491 = extractvalue { ptr, i64, i64 } %t488, 0 %t492 = getelementptr inbounds { ptr, i64, i64 }, ptr %t491, i64 6 %t493 = load { ptr, i64, i64 }, ptr %t492 store { ptr, i64, i64 } %t493, ptr %a494 store { ptr, i64, i64 } { ptr @.str.7069, i64 1, i64 0 }, ptr %a496 call void @finch_str_split(ptr %a497, ptr %a494, ptr %a496) %t498 = load { ptr, i64, i64 }, ptr %a497 %t499 = insertvalue %S.lsp.EnumRec %t487, { ptr, i64, i64 } %t498, 5 %t500 = load i64, ptr %t441 %t501 = add i64 %t500, 1 call void @finch_arr_reserve(ptr %t440, i64 %t501, i64 ptrtoint (ptr getelementptr (%S.lsp.EnumRec, ptr null, i32 1) to i64)) %t502 = load ptr, ptr %t440 %t503 = getelementptr inbounds %S.lsp.EnumRec, ptr %t502, i64 %t500 store %S.lsp.EnumRec %t499, ptr %t503 store i64 %t501, ptr %t441 br label %endif10622 else10621: %t504 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t504, ptr %a505 store { ptr, i64, i64 } { ptr @.str.7070, i64 2, i64 0 }, ptr %a506 %t507 = call i32 @finch_str_eq(ptr %a505, ptr %a506) %t508 = icmp ne i32 %t507, 0 br label %logic.from10635 logic.from10635: br i1 %t508, label %logic.rhs10636, label %logic.end10637 logic.rhs10636: %t509 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t510 = load i64, ptr %t509 %t511 = icmp sge i64 %t510, 2 br label %logic.rend10638 logic.rend10638: br label %logic.end10637 logic.end10637: %t512 = phi i1 [ false, %logic.from10635 ], [ %t511, %logic.rend10638 ] br i1 %t512, label %then10639, label %endif10641 then10639: %t513 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 5 %t514 = getelementptr inbounds { ptr, i64, i64 }, ptr %t513, i32 0, i32 1 %t515 = load { ptr, i64, i64 }, ptr %a27 %t516 = extractvalue { ptr, i64, i64 } %t515, 1 %t517 = icmp uge i64 1, %t516 br i1 %t517, label %range10642, label %inrange10643 range10642: call void @finch_panic_index(ptr @.str.7071, i64 317, i64 1, i64 %t516) unreachable inrange10643: %t518 = extractvalue { ptr, i64, i64 } %t515, 0 %t519 = getelementptr inbounds { ptr, i64, i64 }, ptr %t518, i64 1 %t520 = load { ptr, i64, i64 }, ptr %t519 store { ptr, i64, i64 } %t520, ptr %a521 call void @finch_str_copy(ptr %a522, ptr %a521) %t523 = load { ptr, i64, i64 }, ptr %a522 %t524 = load i64, ptr %t514 %t525 = add i64 %t524, 1 call void @finch_arr_reserve(ptr %t513, i64 %t525, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t526 = load ptr, ptr %t513 %t527 = getelementptr inbounds { ptr, i64, i64 }, ptr %t526, i64 %t524 store { ptr, i64, i64 } %t523, ptr %t527 store i64 %t525, ptr %t514 br label %endif10641 endif10641: br label %endif10622 endif10622: br label %endif10607 endif10607: br label %endif10586 endif10586: br label %endif10561 endif10561: br label %endif10538 endif10538: br label %endif10515 endif10515: call void @finch_str_drop(ptr %a37) call void @finch.drop.arr_str(ptr %a27) br label %endif10506 else10505: %t528 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t529 = getelementptr inbounds %S.lsp.Diag, ptr %t528, i32 0, i32 0 %t530 = load i1, ptr %t529 %t531 = xor i1 %t530, true br i1 %t531, label %then10644, label %endif10646 then10644: %t532 = load { ptr, i64, i64 }, ptr %a18 %t533 = call %S.lsp.Diag @finch.lsp.parseDiag({ ptr, i64, i64 } %t532) %t534 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t535 = load %S.lsp.Diag, ptr %t534 store %S.lsp.Diag %t533, ptr %t534 store %S.lsp.Diag %t535, ptr %a536 call void @finch.drop.S_lsp_Diag(ptr %a536) br label %endif10646 endif10646: br label %endif10506 endif10506: br label %each.step10502 each.step10502: %t537 = load i64, ptr %a10 %t538 = add i64 %t537, 1 store i64 %t538, ptr %a10 br label %each.cond10500 each.end10503: call void @finch.drop.arr_str(ptr %a9) %t539 = load %S.lsp.Analysis, ptr %a2 ret %S.lsp.Analysis %t539 } define internal void @finch.copy.S_lsp_Ref(ptr %dst, ptr %src) { entry: %t1 = load %S.lsp.Ref, ptr %src store %S.lsp.Ref %t1, ptr %dst %t2 = getelementptr inbounds %S.lsp.Ref, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.lsp.Ref, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.lsp.Ref, ptr %dst, i32 0, i32 4 %t5 = getelementptr inbounds %S.lsp.Ref, ptr %src, i32 0, i32 4 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.lsp.Ref, ptr %dst, i32 0, i32 7 %t7 = getelementptr inbounds %S.lsp.Ref, ptr %src, i32 0, i32 7 call void @finch_str_copy(ptr %t6, ptr %t7) ret void } define internal void @finch.copy.arr_S_lsp_Ref(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.Ref, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond10667 n.cond10667: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body10668, label %n.end10669 n.body10668: %t8 = getelementptr inbounds %S.lsp.Ref, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.Ref, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_Ref(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond10667 n.end10669: ret void } define internal void @finch.copy.S_lsp_VarRec(ptr %dst, ptr %src) { entry: %t1 = load %S.lsp.VarRec, ptr %src store %S.lsp.VarRec %t1, ptr %dst %t2 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 5 %t9 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 5 call void @finch_str_copy(ptr %t8, ptr %t9) ret void } define internal void @finch.copy.arr_S_lsp_VarRec(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.VarRec, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond10670 n.cond10670: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body10671, label %n.end10672 n.body10671: %t8 = getelementptr inbounds %S.lsp.VarRec, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.VarRec, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_VarRec(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond10670 n.end10672: ret void } define internal void @finch.copy.S_lsp_FnRec(ptr %dst, ptr %src) { entry: %t1 = load %S.lsp.FnRec, ptr %src store %S.lsp.FnRec %t1, ptr %dst %t2 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 3 call void @finch_str_copy(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 7 %t11 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 7 call void @finch_str_copy(ptr %t10, ptr %t11) %t12 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 8 %t13 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 8 call void @finch.copy.arr_str(ptr %t12, ptr %t13) ret void } define internal void @finch.copy.arr_S_lsp_FnRec(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.FnRec, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond10673 n.cond10673: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body10674, label %n.end10675 n.body10674: %t8 = getelementptr inbounds %S.lsp.FnRec, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.FnRec, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_FnRec(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond10673 n.end10675: ret void } define internal void @finch.copy.S_lsp_StructRec(ptr %dst, ptr %src) { entry: %t1 = load %S.lsp.StructRec, ptr %src store %S.lsp.StructRec %t1, ptr %dst %t2 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 5 %t9 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 5 call void @finch.copy.arr_str(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 6 %t11 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 6 call void @finch.copy.arr_str(ptr %t10, ptr %t11) ret void } define internal void @finch.copy.arr_S_lsp_StructRec(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.StructRec, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond10676 n.cond10676: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body10677, label %n.end10678 n.body10677: %t8 = getelementptr inbounds %S.lsp.StructRec, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.StructRec, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_StructRec(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond10676 n.end10678: ret void } define internal void @finch.copy.S_lsp_EnumRec(ptr %dst, ptr %src) { entry: %t1 = load %S.lsp.EnumRec, ptr %src store %S.lsp.EnumRec %t1, ptr %dst %t2 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 5 %t9 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 5 call void @finch.copy.arr_str(ptr %t8, ptr %t9) ret void } define internal void @finch.copy.arr_S_lsp_EnumRec(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.EnumRec, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond10679 n.cond10679: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body10680, label %n.end10681 n.body10680: %t8 = getelementptr inbounds %S.lsp.EnumRec, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.EnumRec, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_EnumRec(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond10679 n.end10681: ret void } define internal void @finch.copy.S_lsp_Diag(ptr %dst, ptr %src) { entry: %t1 = load %S.lsp.Diag, ptr %src store %S.lsp.Diag %t1, ptr %dst %t2 = getelementptr inbounds %S.lsp.Diag, ptr %dst, i32 0, i32 1 %t3 = getelementptr inbounds %S.lsp.Diag, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.lsp.Diag, ptr %dst, i32 0, i32 4 %t5 = getelementptr inbounds %S.lsp.Diag, ptr %src, i32 0, i32 4 call void @finch_str_copy(ptr %t4, ptr %t5) ret void } define internal void @finch.copy.S_lsp_Analysis(ptr %dst, ptr %src) { entry: %t1 = load %S.lsp.Analysis, ptr %src store %S.lsp.Analysis %t1, ptr %dst %t2 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 0 call void @finch.copy.arr_S_lsp_Ref(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 1 call void @finch.copy.arr_S_lsp_VarRec(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 2 call void @finch.copy.arr_S_lsp_FnRec(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 3 call void @finch.copy.arr_S_lsp_StructRec(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 4 %t11 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 4 call void @finch.copy.arr_S_lsp_EnumRec(ptr %t10, ptr %t11) %t12 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 5 %t13 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 5 call void @finch.copy.arr_str(ptr %t12, ptr %t13) %t14 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 6 %t15 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 6 call void @finch.copy.S_lsp_Diag(ptr %t14, ptr %t15) ret void } define internal void @finch.drop.S_lsp_Ref(ptr %a) { entry: %t1 = getelementptr inbounds %S.lsp.Ref, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.lsp.Ref, ptr %a, i32 0, i32 4 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.lsp.Ref, ptr %a, i32 0, i32 7 call void @finch_str_drop(ptr %t3) ret void } define internal void @finch.drop.arr_S_lsp_Ref(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond10682 n.cond10682: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body10683, label %n.end10684 n.body10683: %t7 = getelementptr inbounds %S.lsp.Ref, ptr %t1, i64 %t5 call void @finch.drop.S_lsp_Ref(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond10682 n.end10684: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.S_lsp_VarRec(ptr %a) { entry: %t1 = getelementptr inbounds %S.lsp.VarRec, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.lsp.VarRec, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.lsp.VarRec, ptr %a, i32 0, i32 2 call void @finch_str_drop(ptr %t3) %t4 = getelementptr inbounds %S.lsp.VarRec, ptr %a, i32 0, i32 5 call void @finch_str_drop(ptr %t4) ret void } define internal void @finch.drop.arr_S_lsp_VarRec(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond10685 n.cond10685: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body10686, label %n.end10687 n.body10686: %t7 = getelementptr inbounds %S.lsp.VarRec, ptr %t1, i64 %t5 call void @finch.drop.S_lsp_VarRec(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond10685 n.end10687: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.S_lsp_FnRec(ptr %a) { entry: %t1 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 2 call void @finch_str_drop(ptr %t3) %t4 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 3 call void @finch_str_drop(ptr %t4) %t5 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 7 call void @finch_str_drop(ptr %t5) %t6 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 8 call void @finch.drop.arr_str(ptr %t6) ret void } define internal void @finch.drop.arr_S_lsp_FnRec(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond10688 n.cond10688: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body10689, label %n.end10690 n.body10689: %t7 = getelementptr inbounds %S.lsp.FnRec, ptr %t1, i64 %t5 call void @finch.drop.S_lsp_FnRec(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond10688 n.end10690: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.S_lsp_StructRec(ptr %a) { entry: %t1 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 2 call void @finch_str_drop(ptr %t3) %t4 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 5 call void @finch.drop.arr_str(ptr %t4) %t5 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 6 call void @finch.drop.arr_str(ptr %t5) ret void } define internal void @finch.drop.arr_S_lsp_StructRec(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond10691 n.cond10691: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body10692, label %n.end10693 n.body10692: %t7 = getelementptr inbounds %S.lsp.StructRec, ptr %t1, i64 %t5 call void @finch.drop.S_lsp_StructRec(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond10691 n.end10693: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.S_lsp_EnumRec(ptr %a) { entry: %t1 = getelementptr inbounds %S.lsp.EnumRec, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.lsp.EnumRec, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.lsp.EnumRec, ptr %a, i32 0, i32 2 call void @finch_str_drop(ptr %t3) %t4 = getelementptr inbounds %S.lsp.EnumRec, ptr %a, i32 0, i32 5 call void @finch.drop.arr_str(ptr %t4) ret void } define internal void @finch.drop.arr_S_lsp_EnumRec(ptr %a) { entry: %a4 = alloca i64, align 16 %t1 = load ptr, ptr %a %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 br label %n.cond10694 n.cond10694: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 br i1 %t6, label %n.body10695, label %n.end10696 n.body10695: %t7 = getelementptr inbounds %S.lsp.EnumRec, ptr %t1, i64 %t5 call void @finch.drop.S_lsp_EnumRec(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 br label %n.cond10694 n.end10696: call void @finch_arr_free(ptr %a) ret void } define internal void @finch.drop.S_lsp_Analysis(ptr %a) { entry: %t1 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 0 call void @finch.drop.arr_S_lsp_Ref(ptr %t1) %t2 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 1 call void @finch.drop.arr_S_lsp_VarRec(ptr %t2) %t3 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 2 call void @finch.drop.arr_S_lsp_FnRec(ptr %t3) %t4 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 3 call void @finch.drop.arr_S_lsp_StructRec(ptr %t4) %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 4 call void @finch.drop.arr_S_lsp_EnumRec(ptr %t5) %t6 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 5 call void @finch.drop.arr_str(ptr %t6) %t7 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 6 call void @finch.drop.S_lsp_Diag(ptr %t7) ret void } define internal void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca i64, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca i64, align 16 %a14 = alloca i64, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca i64, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca %S.lsp.Analysis, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca i32, align 16 %a188 = alloca %S.lsp.Analysis, align 16 %a189 = alloca %S.lsp.Analysis, align 16 %a192 = alloca %S.lsp.Analysis, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca %S.lsp.Analysis, align 16 %a211 = alloca %S.lsp.Analysis, align 16 %a213 = alloca %S.lsp.Analysis, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca i32, align 16 %a272 = alloca %S.lsp.Analysis, align 16 %a273 = alloca %S.lsp.Analysis, align 16 %a276 = alloca %S.lsp.Analysis, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 %t3 = load { ptr, i64, i64 }, ptr %t2 call void @finch.host.makeDirs({ ptr, i64, i64 } %t3) store { ptr, i64, i64 } { ptr @.str.7072, i64 0, i64 0 }, ptr %a4 store i64 0, ptr %a5 %t6 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %a7 %t8 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 call void @finch_arr_make(ptr %a7, i64 %t9, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t10 = load ptr, ptr %a7 store i64 0, ptr %a11 %t12 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 2 %t13 = load i64, ptr %t12 store i64 0, ptr %a14 br label %n.cond10647 n.cond10647: %t15 = load i64, ptr %a14 %t16 = icmp slt i64 %t15, %t13 br i1 %t16, label %n.body10648, label %n.end10649 n.body10648: %t17 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 0 %t18 = load ptr, ptr %t17 %t19 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t18, i64 %t15 %t20 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t19, i32 0, i32 0 %t21 = load i64, ptr %t20 %t22 = icmp ne i64 %t21, 0 br i1 %t22, label %entry.live10650, label %entry.next10651 entry.live10650: %t23 = load i64, ptr %a11 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t23 %t25 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t19, i32 0, i32 1 call void @finch_str_copy(ptr %t24, ptr %t25) %t26 = add i64 %t23, 1 store i64 %t26, ptr %a11 br label %entry.next10651 entry.next10651: %t27 = load i64, ptr %a14 %t28 = add i64 %t27, 1 store i64 %t28, ptr %a14 br label %n.cond10647 n.end10649: %t29 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t29, ptr %a30 store i64 0, ptr %a31 br label %each.cond10652 each.cond10652: %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 %t33 = load i64, ptr %t32 %t34 = load i64, ptr %a31 %t35 = icmp slt i64 %t34, %t33 br i1 %t35, label %each.body10653, label %each.end10655 each.body10653: %t36 = load ptr, ptr %a30 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i64 %t34 %t38 = load { ptr, i64, i64 }, ptr %t37 store { ptr, i64, i64 } %t38, ptr %a39 %t40 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 %t41 = load { ptr, i64, i64 }, ptr %t40 store { ptr, i64, i64 } %t41, ptr %a43 store { ptr, i64, i64 } { ptr @.str.7073, i64 4, i64 0 }, ptr %a44 call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) %t45 = load { ptr, i64, i64 }, ptr %a42 %t46 = load i64, ptr %a5 call void @finch_str_from_int(ptr %a47, i64 %t46) %t48 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t45, ptr %a50 store { ptr, i64, i64 } %t48, ptr %a51 call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) store { ptr, i64, i64 } %t45, ptr %a52 call void @finch_str_drop(ptr %a52) store { ptr, i64, i64 } %t48, ptr %a53 call void @finch_str_drop(ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t54, ptr %a56 store { ptr, i64, i64 } { ptr @.str.7074, i64 4, i64 0 }, ptr %a57 call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) store { ptr, i64, i64 } %t54, ptr %a58 call void @finch_str_drop(ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a55 store { ptr, i64, i64 } %t59, ptr %a60 %t61 = load { ptr, i64, i64 }, ptr %a60 %t62 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t63 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t63, ptr %a64 %t65 = call i64 @finch_map_find(ptr %t62, ptr %a64, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t66 = icmp slt i64 %t65, 0 br i1 %t66, label %map.missing10656, label %map.found10657 map.missing10656: store { ptr, i64, i64 } zeroinitializer, ptr %a67 store { ptr, i64, i64 } %t63, ptr %a68 call void @finch_buf_str(ptr %a67, ptr %a68, i32 1) call void @finch_map_missing(ptr @.str.7075, i64 333, ptr %a67) unreachable map.found10657: %t69 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t62, i32 0, i32 0 %t70 = load ptr, ptr %t69 %t71 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t70, i64 %t65 %t72 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t71, i32 0, i32 2 %t73 = load { ptr, i64, i64 }, ptr %t72 store { ptr, i64, i64 } %t61, ptr %a74 store { ptr, i64, i64 } %t73, ptr %a75 %t76 = call i32 @finch_write_file(ptr %a74, ptr %a75) %t77 = icmp ne i32 %t76, 0 %t78 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t78, ptr %a80 store { ptr, i64, i64 } { ptr @.str.7076, i64 11, i64 0 }, ptr %a81 call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) %t82 = load { ptr, i64, i64 }, ptr %a79 %t83 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t83, ptr %a85 store { ptr, i64, i64 } { ptr @.str.7077, i64 1, i64 0 }, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a84 %t88 = load { ptr, i64, i64 }, ptr %a60 store { ptr, i64, i64 } %t87, ptr %a90 store { ptr, i64, i64 } %t88, ptr %a91 call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) store { ptr, i64, i64 } %t87, ptr %a92 call void @finch_str_drop(ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a89 %t94 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t93) store { ptr, i64, i64 } %t93, ptr %a95 call void @finch_str_drop(ptr %a95) store { ptr, i64, i64 } %t82, ptr %a97 store { ptr, i64, i64 } %t94, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) store { ptr, i64, i64 } %t82, ptr %a99 call void @finch_str_drop(ptr %a99) store { ptr, i64, i64 } %t94, ptr %a100 call void @finch_str_drop(ptr %a100) %t101 = load { ptr, i64, i64 }, ptr %a96 %t102 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t101, ptr %a4 store { ptr, i64, i64 } %t102, ptr %a103 call void @finch_str_drop(ptr %a103) %t104 = load i64, ptr %a5 %t105 = add i64 %t104, 1 store i64 %t105, ptr %a5 call void @finch_str_drop(ptr %a60) br label %each.step10654 each.step10654: %t106 = load i64, ptr %a31 %t107 = add i64 %t106, 1 store i64 %t107, ptr %a31 br label %each.cond10652 each.end10655: call void @finch.drop.arr_str(ptr %a30) %t108 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 %t109 = load { ptr, i64, i64 }, ptr %t108 store { ptr, i64, i64 } %t109, ptr %a111 store { ptr, i64, i64 } { ptr @.str.7078, i64 8, i64 0 }, ptr %a112 call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) %t113 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } %t113, ptr %a114 %t115 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 0 %t116 = load { ptr, i64, i64 }, ptr %t115 %t117 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t116) store { ptr, i64, i64 } %t117, ptr %a119 store { ptr, i64, i64 } { ptr @.str.7079, i64 7, i64 0 }, ptr %a120 call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) store { ptr, i64, i64 } %t117, ptr %a121 call void @finch_str_drop(ptr %a121) %t122 = load { ptr, i64, i64 }, ptr %a118 %t123 = load { ptr, i64, i64 }, ptr %a1 %t124 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t123) store { ptr, i64, i64 } %t122, ptr %a126 store { ptr, i64, i64 } %t124, ptr %a127 call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) store { ptr, i64, i64 } %t122, ptr %a128 call void @finch_str_drop(ptr %a128) store { ptr, i64, i64 } %t124, ptr %a129 call void @finch_str_drop(ptr %a129) %t130 = load { ptr, i64, i64 }, ptr %a125 %t131 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t130, ptr %a133 store { ptr, i64, i64 } %t131, ptr %a134 call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) store { ptr, i64, i64 } %t130, ptr %a135 call void @finch_str_drop(ptr %a135) %t136 = load { ptr, i64, i64 }, ptr %a132 store { ptr, i64, i64 } %t136, ptr %a138 store { ptr, i64, i64 } { ptr @.str.7080, i64 3, i64 0 }, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) store { ptr, i64, i64 } %t136, ptr %a140 call void @finch_str_drop(ptr %a140) %t141 = load { ptr, i64, i64 }, ptr %a137 %t142 = load { ptr, i64, i64 }, ptr %a114 %t143 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t142) store { ptr, i64, i64 } %t141, ptr %a145 store { ptr, i64, i64 } %t143, ptr %a146 call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) store { ptr, i64, i64 } %t141, ptr %a147 call void @finch_str_drop(ptr %a147) store { ptr, i64, i64 } %t143, ptr %a148 call void @finch_str_drop(ptr %a148) %t149 = load { ptr, i64, i64 }, ptr %a144 store { ptr, i64, i64 } %t149, ptr %a151 store { ptr, i64, i64 } { ptr @.str.7081, i64 5, i64 0 }, ptr %a152 call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) store { ptr, i64, i64 } %t149, ptr %a153 call void @finch_str_drop(ptr %a153) %t154 = load { ptr, i64, i64 }, ptr %a150 %t155 = call i64 @finch.host.run({ ptr, i64, i64 } %t154) store { ptr, i64, i64 } %t154, ptr %a156 call void @finch_str_drop(ptr %a156) %t157 = load { ptr, i64, i64 }, ptr %a114 store { ptr, i64, i64 } %t157, ptr %a158 store { ptr, i64, i64 } zeroinitializer, ptr %a159 store { ptr, i64, i64 } zeroinitializer, ptr %a160 %t161 = call i32 @finch_try_read_file(ptr %a159, ptr %a158, ptr %a160) %t162 = icmp eq i32 %t161, 0 %t163 = load { ptr, i64, i64 }, ptr %a160 %t164 = load { ptr, i64, i64 }, ptr %a159 br i1 %t162, label %or.failed10658, label %or.ok10659 or.failed10658: store { ptr, i64, i64 } %t163, ptr %a165 call void @finch_str_drop(ptr %a165) br label %or.bend10660 or.bend10660: br label %or.end10661 or.ok10659: br label %or.end10661 or.end10661: %t166 = phi { ptr, i64, i64 } [ { ptr @.str.7082, i64 0, i64 0 }, %or.bend10660 ], [ %t164, %or.ok10659 ] %t167 = call %S.lsp.Analysis @finch.lsp.parseOutput({ ptr, i64, i64 } %t166) store { ptr, i64, i64 } %t166, ptr %a168 call void @finch_str_drop(ptr %a168) store %S.lsp.Analysis %t167, ptr %a169 %t170 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 6 %t171 = getelementptr inbounds %S.lsp.Diag, ptr %t170, i32 0, i32 0 %t172 = load i1, ptr %t171 %t173 = xor i1 %t172, true br i1 %t173, label %then10662, label %else10663 then10662: %t174 = load %S.lsp.Analysis, ptr %a169 %t175 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 %t176 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t176, ptr %a177 store i32 0, ptr %a178 %t179 = call i64 @finch_map_slot(ptr %t175, ptr %a177, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a178) %t180 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t175, i32 0, i32 0 %t181 = load ptr, ptr %t180 %t182 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t181, i64 %t179 %t183 = load i32, ptr %a178 %t184 = icmp ne i32 %t183, 0 br i1 %t184, label %map.new10665, label %map.have10666 map.new10665: %t185 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 1 call void @finch_str_copy(ptr %t185, ptr %a177) %t186 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 2 store %S.lsp.Analysis zeroinitializer, ptr %t186 br label %map.have10666 map.have10666: %t187 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 2 store %S.lsp.Analysis %t174, ptr %a188 call void @finch.copy.S_lsp_Analysis(ptr %a189, ptr %a188) %t190 = load %S.lsp.Analysis, ptr %a189 %t191 = load %S.lsp.Analysis, ptr %t187 store %S.lsp.Analysis %t190, ptr %t187 store %S.lsp.Analysis %t191, ptr %a192 call void @finch.drop.S_lsp_Analysis(ptr %a192) br label %endif10664 else10663: %t193 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 %t194 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t194, ptr %a195 %t196 = call i64 @finch_map_find(ptr %t193, ptr %a195, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t197 = icmp sge i64 %t196, 0 br i1 %t197, label %then10697, label %endif10699 then10697: %t198 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 %t199 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t199, ptr %a200 %t201 = call i64 @finch_map_find(ptr %t198, ptr %a200, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t202 = icmp slt i64 %t201, 0 br i1 %t202, label %map.missing10700, label %map.found10701 map.missing10700: store { ptr, i64, i64 } zeroinitializer, ptr %a203 store { ptr, i64, i64 } %t199, ptr %a204 call void @finch_buf_str(ptr %a203, ptr %a204, i32 1) call void @finch_map_missing(ptr @.str.7083, i64 344, ptr %a203) unreachable map.found10701: %t205 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t198, i32 0, i32 0 %t206 = load ptr, ptr %t205 %t207 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t206, i64 %t201 %t208 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t207, i32 0, i32 2 %t209 = load %S.lsp.Analysis, ptr %t208 store %S.lsp.Analysis %t209, ptr %a210 call void @finch.copy.S_lsp_Analysis(ptr %a211, ptr %a210) %t212 = load %S.lsp.Analysis, ptr %a211 store %S.lsp.Analysis %t212, ptr %a213 %t214 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 2 %t215 = load { ptr, i64, i64 }, ptr %t214 %t216 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 2 store { ptr, i64, i64 } %t215, ptr %a217 call void @finch.copy.arr_S_lsp_FnRec(ptr %a218, ptr %a217) %t219 = load { ptr, i64, i64 }, ptr %a218 %t220 = load { ptr, i64, i64 }, ptr %t216 store { ptr, i64, i64 } %t219, ptr %t216 store { ptr, i64, i64 } %t220, ptr %a221 call void @finch.drop.arr_S_lsp_FnRec(ptr %a221) %t222 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 3 %t223 = load { ptr, i64, i64 }, ptr %t222 %t224 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 3 store { ptr, i64, i64 } %t223, ptr %a225 call void @finch.copy.arr_S_lsp_StructRec(ptr %a226, ptr %a225) %t227 = load { ptr, i64, i64 }, ptr %a226 %t228 = load { ptr, i64, i64 }, ptr %t224 store { ptr, i64, i64 } %t227, ptr %t224 store { ptr, i64, i64 } %t228, ptr %a229 call void @finch.drop.arr_S_lsp_StructRec(ptr %a229) %t230 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 4 %t231 = load { ptr, i64, i64 }, ptr %t230 %t232 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 4 store { ptr, i64, i64 } %t231, ptr %a233 call void @finch.copy.arr_S_lsp_EnumRec(ptr %a234, ptr %a233) %t235 = load { ptr, i64, i64 }, ptr %a234 %t236 = load { ptr, i64, i64 }, ptr %t232 store { ptr, i64, i64 } %t235, ptr %t232 store { ptr, i64, i64 } %t236, ptr %a237 call void @finch.drop.arr_S_lsp_EnumRec(ptr %a237) %t238 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 1 %t239 = load { ptr, i64, i64 }, ptr %t238 %t240 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 1 store { ptr, i64, i64 } %t239, ptr %a241 call void @finch.copy.arr_S_lsp_VarRec(ptr %a242, ptr %a241) %t243 = load { ptr, i64, i64 }, ptr %a242 %t244 = load { ptr, i64, i64 }, ptr %t240 store { ptr, i64, i64 } %t243, ptr %t240 store { ptr, i64, i64 } %t244, ptr %a245 call void @finch.drop.arr_S_lsp_VarRec(ptr %a245) %t246 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 5 %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i32 0, i32 1 %t248 = load i64, ptr %t247 %t249 = icmp eq i64 %t248, 0 br i1 %t249, label %then10702, label %endif10704 then10702: %t250 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 5 %t251 = load { ptr, i64, i64 }, ptr %t250 %t252 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 5 store { ptr, i64, i64 } %t251, ptr %a253 call void @finch.copy.arr_str(ptr %a254, ptr %a253) %t255 = load { ptr, i64, i64 }, ptr %a254 %t256 = load { ptr, i64, i64 }, ptr %t252 store { ptr, i64, i64 } %t255, ptr %t252 store { ptr, i64, i64 } %t256, ptr %a257 call void @finch.drop.arr_str(ptr %a257) br label %endif10704 endif10704: call void @finch.drop.S_lsp_Analysis(ptr %a213) br label %endif10699 endif10699: br label %endif10664 endif10664: %t258 = load %S.lsp.Analysis, ptr %a169 %t259 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 %t260 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t260, ptr %a261 store i32 0, ptr %a262 %t263 = call i64 @finch_map_slot(ptr %t259, ptr %a261, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a262) %t264 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t259, i32 0, i32 0 %t265 = load ptr, ptr %t264 %t266 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t265, i64 %t263 %t267 = load i32, ptr %a262 %t268 = icmp ne i32 %t267, 0 br i1 %t268, label %map.new10705, label %map.have10706 map.new10705: %t269 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 1 call void @finch_str_copy(ptr %t269, ptr %a261) %t270 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 2 store %S.lsp.Analysis zeroinitializer, ptr %t270 br label %map.have10706 map.have10706: %t271 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 2 store %S.lsp.Analysis %t258, ptr %a272 call void @finch.copy.S_lsp_Analysis(ptr %a273, ptr %a272) %t274 = load %S.lsp.Analysis, ptr %a273 %t275 = load %S.lsp.Analysis, ptr %t271 store %S.lsp.Analysis %t274, ptr %t271 store %S.lsp.Analysis %t275, ptr %a276 call void @finch.drop.S_lsp_Analysis(ptr %a276) %t277 = load { ptr, i64, i64 }, ptr %a1 %t278 = load %S.lsp.Analysis, ptr %a169 call void @finch.lsp.Server.publish(ptr %self, { ptr, i64, i64 } %t277, %S.lsp.Analysis %t278) call void @finch.drop.S_lsp_Analysis(ptr %a169) call void @finch_str_drop(ptr %a114) call void @finch_str_drop(ptr %a4) ret void } define internal void @finch.lsp.Server.publish(ptr %self, { ptr, i64, i64 } %p0, %S.lsp.Analysis %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca %S.lsp.Analysis, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca i64, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca i64, align 16 %a29 = alloca i64, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca i64, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca %S.json.Json, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca i64, align 16 %a88 = alloca i64, align 16 %a92 = alloca %S.json.Json, align 16 %a98 = alloca %S.json.Json, align 16 %a100 = alloca %S.json.Json, align 16 %a102 = alloca %S.json.Json, align 16 %a107 = alloca %S.json.Json, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca %S.json.Json, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca %S.json.Json, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store %S.lsp.Analysis %p1, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 call void @finch_str_copy(ptr %a5, ptr %a4) %t6 = load { ptr, i64, i64 }, ptr %a5 %t7 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t8 = call ptr @finch_alloc(i64 %t7) %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 0 store { ptr, i64, i64 } %t6, ptr %t9 %t10 = insertvalue { ptr, i64, i64 } undef, ptr %t8, 0 %t11 = insertvalue { ptr, i64, i64 } %t10, i64 1, 1 %t12 = insertvalue { ptr, i64, i64 } %t11, i64 1, 2 store { ptr, i64, i64 } %t12, ptr %a13 %t14 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 5 store i64 0, ptr %a15 br label %each.cond10707 each.cond10707: %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t17 = load i64, ptr %t16 %t18 = load i64, ptr %a15 %t19 = icmp slt i64 %t18, %t17 br i1 %t19, label %each.body10708, label %each.end10710 each.body10708: %t20 = load ptr, ptr %t14 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 %t25 = load { ptr, i64, i64 }, ptr %a23 store i64 -1, ptr %a26 %t27 = load i64, ptr %t24 %t28 = load ptr, ptr %a13 store i64 0, ptr %a29 br label %find.cond10711 find.cond10711: %t30 = load i64, ptr %a29 %t31 = icmp slt i64 %t30, %t27 br i1 %t31, label %find.body10712, label %find.end10715 find.body10712: %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t30 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } %t25, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 br i1 %t37, label %find.hit10713, label %find.next10714 find.hit10713: store i64 %t30, ptr %a26 br label %find.end10715 find.next10714: %t38 = add i64 %t30, 1 store i64 %t38, ptr %a29 br label %find.cond10711 find.end10715: %t39 = load i64, ptr %a26 %t40 = icmp sge i64 %t39, 0 %t41 = xor i1 %t40, true br i1 %t41, label %then10716, label %endif10718 then10716: %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 %t43 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t43, ptr %a44 call void @finch_str_copy(ptr %a45, ptr %a44) %t46 = load { ptr, i64, i64 }, ptr %a45 %t47 = load i64, ptr %t42 %t48 = add i64 %t47, 1 call void @finch_arr_reserve(ptr %a13, i64 %t48, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t49 = load ptr, ptr %a13 %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 store { ptr, i64, i64 } %t46, ptr %t50 store i64 %t48, ptr %t42 br label %endif10718 endif10718: br label %each.step10709 each.step10709: %t51 = load i64, ptr %a15 %t52 = add i64 %t51, 1 store i64 %t52, ptr %a15 br label %each.cond10707 each.end10710: store { ptr, i64, i64 } zeroinitializer, ptr %a53 store i64 0, ptr %a54 br label %each.cond10719 each.cond10719: %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 %t56 = load i64, ptr %t55 %t57 = load i64, ptr %a54 %t58 = icmp slt i64 %t57, %t56 br i1 %t58, label %each.body10720, label %each.end10722 each.body10720: %t59 = load ptr, ptr %a13 %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i64 %t57 %t61 = load { ptr, i64, i64 }, ptr %t60 store { ptr, i64, i64 } %t61, ptr %a62 %t63 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t63, ptr %a64 %t65 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t66 = getelementptr inbounds %S.lsp.Diag, ptr %t65, i32 0, i32 0 %t67 = load i1, ptr %t66 br label %logic.from10723 logic.from10723: br i1 %t67, label %logic.rhs10724, label %logic.end10725 logic.rhs10724: %t68 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t69 = getelementptr inbounds %S.lsp.Diag, ptr %t68, i32 0, i32 1 %t70 = load { ptr, i64, i64 }, ptr %t69 %t71 = load { ptr, i64, i64 }, ptr %a62 store { ptr, i64, i64 } %t70, ptr %a72 store { ptr, i64, i64 } %t71, ptr %a73 %t74 = call i32 @finch_str_eq(ptr %a72, ptr %a73) %t75 = icmp ne i32 %t74, 0 br label %logic.rend10726 logic.rend10726: br label %logic.end10725 logic.end10725: %t76 = phi i1 [ false, %logic.from10723 ], [ %t75, %logic.rend10726 ] br i1 %t76, label %then10727, label %endif10729 then10727: %t77 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t78 = getelementptr inbounds %S.lsp.Diag, ptr %t77, i32 0, i32 2 %t79 = load i64, ptr %t78 %t80 = sub i64 %t79, 1 store i64 %t80, ptr %a81 %t82 = load i64, ptr %a81 %t83 = icmp slt i64 %t82, 0 br i1 %t83, label %then10730, label %endif10732 then10730: store i64 0, ptr %a81 br label %endif10732 endif10732: %t84 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t85 = getelementptr inbounds %S.lsp.Diag, ptr %t84, i32 0, i32 3 %t86 = load i64, ptr %t85 %t87 = sub i64 %t86, 1 store i64 %t87, ptr %a88 %t89 = load i64, ptr %a88 %t90 = icmp slt i64 %t89, 0 br i1 %t90, label %then10733, label %endif10735 then10733: store i64 0, ptr %a88 br label %endif10735 endif10735: %t91 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t91, ptr %a92 %t93 = load i64, ptr %a81 %t94 = load i64, ptr %a88 %t95 = load i64, ptr %a88 %t96 = add i64 %t95, 1 %t97 = call %S.json.Json @finch.lsp.range(i64 %t93, i64 %t94, i64 %t96) call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7084, i64 5, i64 0 }, %S.json.Json %t97) store %S.json.Json %t97, ptr %a98 call void @finch.drop.S_json_Json(ptr %a98) %t99 = call %S.json.Json @finch.lsp.num(i64 1) call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7085, i64 8, i64 0 }, %S.json.Json %t99) store %S.json.Json %t99, ptr %a100 call void @finch.drop.S_json_Json(ptr %a100) %t101 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7087, i64 5, i64 0 }) call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7086, i64 6, i64 0 }, %S.json.Json %t101) store %S.json.Json %t101, ptr %a102 call void @finch.drop.S_json_Json(ptr %a102) %t103 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t104 = getelementptr inbounds %S.lsp.Diag, ptr %t103, i32 0, i32 4 %t105 = load { ptr, i64, i64 }, ptr %t104 %t106 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t105) call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7088, i64 7, i64 0 }, %S.json.Json %t106) store %S.json.Json %t106, ptr %a107 call void @finch.drop.S_json_Json(ptr %a107) %t108 = load %S.json.Json, ptr %a92 call void @finch.json.Json.push(ptr %a64, %S.json.Json %t108) %t109 = getelementptr inbounds { ptr, i64, i64 }, ptr %a53, i32 0, i32 1 %t110 = load { ptr, i64, i64 }, ptr %a62 store { ptr, i64, i64 } %t110, ptr %a111 call void @finch_str_copy(ptr %a112, ptr %a111) %t113 = load { ptr, i64, i64 }, ptr %a112 %t114 = load i64, ptr %t109 %t115 = add i64 %t114, 1 call void @finch_arr_reserve(ptr %a53, i64 %t115, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t116 = load ptr, ptr %a53 %t117 = getelementptr inbounds { ptr, i64, i64 }, ptr %t116, i64 %t114 store { ptr, i64, i64 } %t113, ptr %t117 store i64 %t115, ptr %t109 call void @finch.drop.S_json_Json(ptr %a92) br label %endif10729 endif10729: %t118 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t118, ptr %a119 %t120 = load { ptr, i64, i64 }, ptr %a62 %t121 = call { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %t120) %t122 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t121) store { ptr, i64, i64 } %t121, ptr %a123 call void @finch_str_drop(ptr %a123) call void @finch.json.Json.set(ptr %a119, { ptr, i64, i64 } { ptr @.str.7089, i64 3, i64 0 }, %S.json.Json %t122) store %S.json.Json %t122, ptr %a124 call void @finch.drop.S_json_Json(ptr %a124) %t125 = load %S.json.Json, ptr %a64 call void @finch.json.Json.set(ptr %a119, { ptr, i64, i64 } { ptr @.str.7090, i64 11, i64 0 }, %S.json.Json %t125) %t126 = load %S.json.Json, ptr %a119 call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.7091, i64 31, i64 0 }, %S.json.Json %t126) call void @finch.drop.S_json_Json(ptr %a119) call void @finch.drop.S_json_Json(ptr %a64) br label %each.step10721 each.step10721: %t127 = load i64, ptr %a54 %t128 = add i64 %t127, 1 store i64 %t128, ptr %a54 br label %each.cond10719 each.end10722: %t129 = load { ptr, i64, i64 }, ptr %a53 %t130 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 5 store { ptr, i64, i64 } %t129, ptr %a131 call void @finch.copy.arr_str(ptr %a132, ptr %a131) %t133 = load { ptr, i64, i64 }, ptr %a132 %t134 = load { ptr, i64, i64 }, ptr %t130 store { ptr, i64, i64 } %t133, ptr %t130 store { ptr, i64, i64 } %t134, ptr %a135 call void @finch.drop.arr_str(ptr %a135) call void @finch.drop.arr_str(ptr %a53) call void @finch.drop.arr_str(ptr %a13) ret void } define internal i64 @finch.lsp.refAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3) { entry: %a1 = alloca %S.lsp.Analysis, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a4 = alloca i64, align 16 %a8 = alloca i64, align 16 %a19 = alloca %S.lsp.Ref, align 16 %a20 = alloca %S.lsp.Ref, align 16 %a22 = alloca %S.lsp.Ref, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 store %S.lsp.Analysis %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 %p3, ptr %a4 %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 0, ptr %a8 br label %for.cond10736 for.cond10736: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t7 br i1 %t10, label %for.body10737, label %for.end10739 for.body10737: %t11 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 %t12 = load i64, ptr %a8 %t13 = load { ptr, i64, i64 }, ptr %t11 %t14 = extractvalue { ptr, i64, i64 } %t13, 1 %t15 = icmp uge i64 %t12, %t14 br i1 %t15, label %range10740, label %inrange10741 range10740: call void @finch_panic_index(ptr @.str.7092, i64 397, i64 %t12, i64 %t14) unreachable inrange10741: %t16 = extractvalue { ptr, i64, i64 } %t13, 0 %t17 = getelementptr inbounds %S.lsp.Ref, ptr %t16, i64 %t12 %t18 = load %S.lsp.Ref, ptr %t17 store %S.lsp.Ref %t18, ptr %a19 call void @finch.copy.S_lsp_Ref(ptr %a20, ptr %a19) %t21 = load %S.lsp.Ref, ptr %a20 store %S.lsp.Ref %t21, ptr %a22 %t23 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = load i64, ptr %a3 %t26 = icmp eq i64 %t24, %t25 br label %logic.from10742 logic.from10742: br i1 %t26, label %logic.rhs10743, label %logic.end10744 logic.rhs10743: %t27 = load i64, ptr %a4 %t28 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 2 %t29 = load i64, ptr %t28 %t30 = icmp sge i64 %t27, %t29 br label %logic.rend10745 logic.rend10745: br label %logic.end10744 logic.end10744: %t31 = phi i1 [ false, %logic.from10742 ], [ %t30, %logic.rend10745 ] br label %logic.from10746 logic.from10746: br i1 %t31, label %logic.rhs10747, label %logic.end10748 logic.rhs10747: %t32 = load i64, ptr %a4 %t33 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 2 %t34 = load i64, ptr %t33 %t35 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 3 %t36 = load i64, ptr %t35 %t37 = add i64 %t34, %t36 %t38 = icmp sle i64 %t32, %t37 br label %logic.rend10749 logic.rend10749: br label %logic.end10748 logic.end10748: %t39 = phi i1 [ false, %logic.from10746 ], [ %t38, %logic.rend10749 ] br label %logic.from10750 logic.from10750: br i1 %t39, label %logic.rhs10751, label %logic.end10752 logic.rhs10751: %t40 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 0 %t41 = load { ptr, i64, i64 }, ptr %t40 %t42 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t41, ptr %a43 store { ptr, i64, i64 } %t42, ptr %a44 %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) %t46 = icmp ne i32 %t45, 0 br label %logic.rend10753 logic.rend10753: br label %logic.end10752 logic.end10752: %t47 = phi i1 [ false, %logic.from10750 ], [ %t46, %logic.rend10753 ] br i1 %t47, label %then10754, label %endif10756 then10754: %t48 = load i64, ptr %a8 call void @finch.drop.S_lsp_Ref(ptr %a22) ret i64 %t48 endif10756: call void @finch.drop.S_lsp_Ref(ptr %a22) br label %for.step10738 for.step10738: %t49 = load i64, ptr %a8 %t50 = add i64 %t49, 1 store i64 %t50, ptr %a8 br label %for.cond10736 for.end10739: ret i64 -1 } define internal %S.json.Json @finch.lsp.hoverAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3) { entry: %a1 = alloca %S.lsp.Analysis, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a4 = alloca i64, align 16 %a10 = alloca i64, align 16 %a15 = alloca %S.json.Json, align 16 %a17 = alloca %S.json.Json, align 16 %a28 = alloca %S.json.Json, align 16 %a30 = alloca %S.json.Json, align 16 store %S.lsp.Analysis %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 %p3, ptr %a4 %t5 = load %S.lsp.Analysis, ptr %a1 %t6 = load { ptr, i64, i64 }, ptr %a2 %t7 = load i64, ptr %a3 %t8 = load i64, ptr %a4 %t9 = call i64 @finch.lsp.refAt(%S.lsp.Analysis %t5, { ptr, i64, i64 } %t6, i64 %t7, i64 %t8) store i64 %t9, ptr %a10 %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, 0 br i1 %t12, label %then10757, label %endif10759 then10757: %t13 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t13 endif10759: %t14 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t14, ptr %a15 %t16 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7094, i64 8, i64 0 }) call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7093, i64 4, i64 0 }, %S.json.Json %t16) store %S.json.Json %t16, ptr %a17 call void @finch.drop.S_json_Json(ptr %a17) %t18 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 %t19 = load i64, ptr %a10 %t20 = load { ptr, i64, i64 }, ptr %t18 %t21 = extractvalue { ptr, i64, i64 } %t20, 1 %t22 = icmp uge i64 %t19, %t21 br i1 %t22, label %range10760, label %inrange10761 range10760: call void @finch_panic_index(ptr @.str.7096, i64 412, i64 %t19, i64 %t21) unreachable inrange10761: %t23 = extractvalue { ptr, i64, i64 } %t20, 0 %t24 = getelementptr inbounds %S.lsp.Ref, ptr %t23, i64 %t19 %t25 = getelementptr inbounds %S.lsp.Ref, ptr %t24, i32 0, i32 7 %t26 = load { ptr, i64, i64 }, ptr %t25 %t27 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t26) call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7095, i64 5, i64 0 }, %S.json.Json %t27) store %S.json.Json %t27, ptr %a28 call void @finch.drop.S_json_Json(ptr %a28) %t29 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t29, ptr %a30 %t31 = load %S.json.Json, ptr %a15 call void @finch.json.Json.set(ptr %a30, { ptr, i64, i64 } { ptr @.str.7097, i64 8, i64 0 }, %S.json.Json %t31) %t32 = load %S.json.Json, ptr %a30 call void @finch.drop.S_json_Json(ptr %a15) ret %S.json.Json %t32 } define internal %S.json.Json @finch.lsp.definitionAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3) { entry: %a1 = alloca %S.lsp.Analysis, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a4 = alloca i64, align 16 %a10 = alloca i64, align 16 %a34 = alloca %S.lsp.Ref, align 16 %a35 = alloca %S.lsp.Ref, align 16 %a37 = alloca %S.lsp.Ref, align 16 %a39 = alloca %S.json.Json, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca %S.json.Json, align 16 %a56 = alloca %S.json.Json, align 16 store %S.lsp.Analysis %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 %p3, ptr %a4 %t5 = load %S.lsp.Analysis, ptr %a1 %t6 = load { ptr, i64, i64 }, ptr %a2 %t7 = load i64, ptr %a3 %t8 = load i64, ptr %a4 %t9 = call i64 @finch.lsp.refAt(%S.lsp.Analysis %t5, { ptr, i64, i64 } %t6, i64 %t7, i64 %t8) store i64 %t9, ptr %a10 %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, 0 br label %logic.from10762 logic.from10762: br i1 %t12, label %logic.end10764, label %logic.rhs10763 logic.rhs10763: %t13 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 %t14 = load i64, ptr %a10 %t15 = load { ptr, i64, i64 }, ptr %t13 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 %t14, %t16 br i1 %t17, label %range10765, label %inrange10766 range10765: call void @finch_panic_index(ptr @.str.7098, i64 420, i64 %t14, i64 %t16) unreachable inrange10766: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds %S.lsp.Ref, ptr %t18, i64 %t14 %t20 = getelementptr inbounds %S.lsp.Ref, ptr %t19, i32 0, i32 4 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load i64, ptr %t21 %t23 = icmp eq i64 %t22, 0 br label %logic.rend10767 logic.rend10767: br label %logic.end10764 logic.end10764: %t24 = phi i1 [ true, %logic.from10762 ], [ %t23, %logic.rend10767 ] br i1 %t24, label %then10768, label %endif10770 then10768: %t25 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t25 endif10770: %t26 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 %t27 = load i64, ptr %a10 %t28 = load { ptr, i64, i64 }, ptr %t26 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 %t27, %t29 br i1 %t30, label %range10771, label %inrange10772 range10771: call void @finch_panic_index(ptr @.str.7099, i64 423, i64 %t27, i64 %t29) unreachable inrange10772: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds %S.lsp.Ref, ptr %t31, i64 %t27 %t33 = load %S.lsp.Ref, ptr %t32 store %S.lsp.Ref %t33, ptr %a34 call void @finch.copy.S_lsp_Ref(ptr %a35, ptr %a34) %t36 = load %S.lsp.Ref, ptr %a35 store %S.lsp.Ref %t36, ptr %a37 %t38 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t38, ptr %a39 %t40 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 4 %t41 = load { ptr, i64, i64 }, ptr %t40 %t42 = call { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %t41) %t43 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t42) store { ptr, i64, i64 } %t42, ptr %a44 call void @finch_str_drop(ptr %a44) call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.7100, i64 3, i64 0 }, %S.json.Json %t43) store %S.json.Json %t43, ptr %a45 call void @finch.drop.S_json_Json(ptr %a45) %t46 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 5 %t47 = load i64, ptr %t46 %t48 = sub i64 %t47, 1 %t49 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 6 %t50 = load i64, ptr %t49 %t51 = sub i64 %t50, 1 %t52 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 6 %t53 = load i64, ptr %t52 %t54 = sub i64 %t53, 1 %t55 = call %S.json.Json @finch.lsp.range(i64 %t48, i64 %t51, i64 %t54) call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.7101, i64 5, i64 0 }, %S.json.Json %t55) store %S.json.Json %t55, ptr %a56 call void @finch.drop.S_json_Json(ptr %a56) %t57 = load %S.json.Json, ptr %a39 call void @finch.drop.S_lsp_Ref(ptr %a37) ret %S.json.Json %t57 } define internal %S.json.Json @finch.lsp.symbolsOf(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca %S.lsp.Analysis, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.json.Json, align 16 %a6 = alloca i64, align 16 %a14 = alloca %S.lsp.FnRec, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca i64, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca %S.json.Json, align 16 %a61 = alloca i64, align 16 %a69 = alloca %S.lsp.StructRec, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca %S.json.Json, align 16 %a95 = alloca i64, align 16 %a103 = alloca %S.lsp.EnumRec, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca %S.json.Json, align 16 store %S.lsp.Analysis %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t3, ptr %a4 %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a6 br label %each.cond10773 each.cond10773: %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load i64, ptr %a6 %t10 = icmp slt i64 %t9, %t8 br i1 %t10, label %each.body10774, label %each.end10776 each.body10774: %t11 = load ptr, ptr %t5 %t12 = getelementptr inbounds %S.lsp.FnRec, ptr %t11, i64 %t9 %t13 = load %S.lsp.FnRec, ptr %t12 store %S.lsp.FnRec %t13, ptr %a14 %t15 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 3 %t16 = load { ptr, i64, i64 }, ptr %t15 %t17 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t16, ptr %a18 store { ptr, i64, i64 } %t17, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp eq i32 %t20, 0 br i1 %t21, label %then10777, label %endif10779 then10777: br label %each.step10775 endif10779: store i64 12, ptr %a22 %t23 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 1 %t24 = load { ptr, i64, i64 }, ptr %t23 store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_copy(ptr %a26, ptr %a25) %t27 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t27, ptr %a28 %t29 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 2 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = icmp sgt i64 %t31, 0 br i1 %t32, label %then10780, label %endif10782 then10780: store i64 6, ptr %a22 %t33 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 2 %t34 = load { ptr, i64, i64 }, ptr %t33 store { ptr, i64, i64 } %t34, ptr %a36 store { ptr, i64, i64 } { ptr @.str.7102, i64 1, i64 0 }, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a35 %t39 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 1 %t40 = load { ptr, i64, i64 }, ptr %t39 store { ptr, i64, i64 } %t38, ptr %a42 store { ptr, i64, i64 } %t40, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) store { ptr, i64, i64 } %t38, ptr %a44 call void @finch_str_drop(ptr %a44) %t45 = load { ptr, i64, i64 }, ptr %a41 %t46 = load { ptr, i64, i64 }, ptr %a28 store { ptr, i64, i64 } %t45, ptr %a28 store { ptr, i64, i64 } %t46, ptr %a47 call void @finch_str_drop(ptr %a47) br label %endif10782 endif10782: %t48 = load { ptr, i64, i64 }, ptr %a28 %t49 = load i64, ptr %a22 %t50 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 4 %t51 = load i64, ptr %t50 %t52 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 5 %t53 = load i64, ptr %t52 %t54 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 6 %t55 = load i64, ptr %t54 %t56 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t48, i64 %t49, i64 %t51, i64 %t53, i64 %t55) call void @finch.json.Json.push(ptr %a4, %S.json.Json %t56) store %S.json.Json %t56, ptr %a57 call void @finch.drop.S_json_Json(ptr %a57) call void @finch_str_drop(ptr %a28) br label %each.step10775 each.step10775: %t58 = load i64, ptr %a6 %t59 = add i64 %t58, 1 store i64 %t59, ptr %a6 br label %each.cond10773 each.end10776: %t60 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 store i64 0, ptr %a61 br label %each.cond10783 each.cond10783: %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i32 0, i32 1 %t63 = load i64, ptr %t62 %t64 = load i64, ptr %a61 %t65 = icmp slt i64 %t64, %t63 br i1 %t65, label %each.body10784, label %each.end10786 each.body10784: %t66 = load ptr, ptr %t60 %t67 = getelementptr inbounds %S.lsp.StructRec, ptr %t66, i64 %t64 %t68 = load %S.lsp.StructRec, ptr %t67 store %S.lsp.StructRec %t68, ptr %a69 %t70 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 2 %t71 = load { ptr, i64, i64 }, ptr %t70 %t72 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t71, ptr %a73 store { ptr, i64, i64 } %t72, ptr %a74 %t75 = call i32 @finch_str_eq(ptr %a73, ptr %a74) %t76 = icmp ne i32 %t75, 0 br i1 %t76, label %then10787, label %endif10789 then10787: %t77 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 1 %t78 = load { ptr, i64, i64 }, ptr %t77 %t79 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 3 %t80 = load i64, ptr %t79 %t81 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 4 %t82 = load i64, ptr %t81 %t83 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 3 %t84 = load i64, ptr %t83 %t85 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 5 %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1 %t87 = load i64, ptr %t86 %t88 = add i64 %t84, %t87 %t89 = add i64 %t88, 1 %t90 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t78, i64 23, i64 %t80, i64 %t82, i64 %t89) call void @finch.json.Json.push(ptr %a4, %S.json.Json %t90) store %S.json.Json %t90, ptr %a91 call void @finch.drop.S_json_Json(ptr %a91) br label %endif10789 endif10789: br label %each.step10785 each.step10785: %t92 = load i64, ptr %a61 %t93 = add i64 %t92, 1 store i64 %t93, ptr %a61 br label %each.cond10783 each.end10786: %t94 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 store i64 0, ptr %a95 br label %each.cond10790 each.cond10790: %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 %t97 = load i64, ptr %t96 %t98 = load i64, ptr %a95 %t99 = icmp slt i64 %t98, %t97 br i1 %t99, label %each.body10791, label %each.end10793 each.body10791: %t100 = load ptr, ptr %t94 %t101 = getelementptr inbounds %S.lsp.EnumRec, ptr %t100, i64 %t98 %t102 = load %S.lsp.EnumRec, ptr %t101 store %S.lsp.EnumRec %t102, ptr %a103 %t104 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 2 %t105 = load { ptr, i64, i64 }, ptr %t104 %t106 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t105, ptr %a107 store { ptr, i64, i64 } %t106, ptr %a108 %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) %t110 = icmp ne i32 %t109, 0 br i1 %t110, label %then10794, label %endif10796 then10794: %t111 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 1 %t112 = load { ptr, i64, i64 }, ptr %t111 %t113 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 3 %t114 = load i64, ptr %t113 %t115 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 4 %t116 = load i64, ptr %t115 %t117 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 3 %t118 = load i64, ptr %t117 %t119 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 5 %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 %t121 = load i64, ptr %t120 %t122 = add i64 %t118, %t121 %t123 = add i64 %t122, 1 %t124 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t112, i64 10, i64 %t114, i64 %t116, i64 %t123) call void @finch.json.Json.push(ptr %a4, %S.json.Json %t124) store %S.json.Json %t124, ptr %a125 call void @finch.drop.S_json_Json(ptr %a125) br label %endif10796 endif10796: br label %each.step10792 each.step10792: %t126 = load i64, ptr %a95 %t127 = add i64 %t126, 1 store i64 %t127, ptr %a95 br label %each.cond10790 each.end10793: %t128 = load %S.json.Json, ptr %a4 ret %S.json.Json %t128 } define internal %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %p0, i64 %p1, i64 %p2, i64 %p3, i64 %p4) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca i64, align 16 %a3 = alloca i64, align 16 %a4 = alloca i64, align 16 %a5 = alloca i64, align 16 %a7 = alloca %S.json.Json, align 16 %a10 = alloca %S.json.Json, align 16 %a13 = alloca %S.json.Json, align 16 %a15 = alloca %S.json.Json, align 16 %a19 = alloca %S.json.Json, align 16 %a22 = alloca %S.json.Json, align 16 %a31 = alloca %S.json.Json, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store i64 %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 %p3, ptr %a4 store i64 %p4, ptr %a5 %t6 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t6, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a1 %t9 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t8) call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7103, i64 4, i64 0 }, %S.json.Json %t9) store %S.json.Json %t9, ptr %a10 call void @finch.drop.S_json_Json(ptr %a10) %t11 = load i64, ptr %a2 %t12 = call %S.json.Json @finch.lsp.num(i64 %t11) call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7104, i64 4, i64 0 }, %S.json.Json %t12) store %S.json.Json %t12, ptr %a13 call void @finch.drop.S_json_Json(ptr %a13) %t14 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t14, ptr %a15 %t16 = load i64, ptr %a3 %t17 = sub i64 %t16, 1 %t18 = call %S.json.Json @finch.lsp.position(i64 %t17, i64 0) call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7105, i64 5, i64 0 }, %S.json.Json %t18) store %S.json.Json %t18, ptr %a19 call void @finch.drop.S_json_Json(ptr %a19) %t20 = load i64, ptr %a5 %t21 = call %S.json.Json @finch.lsp.position(i64 %t20, i64 0) call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7106, i64 3, i64 0 }, %S.json.Json %t21) store %S.json.Json %t21, ptr %a22 call void @finch.drop.S_json_Json(ptr %a22) %t23 = load %S.json.Json, ptr %a15 call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7107, i64 5, i64 0 }, %S.json.Json %t23) %t24 = load i64, ptr %a3 %t25 = sub i64 %t24, 1 %t26 = load i64, ptr %a4 %t27 = sub i64 %t26, 1 %t28 = load i64, ptr %a4 %t29 = sub i64 %t28, 1 %t30 = call %S.json.Json @finch.lsp.range(i64 %t25, i64 %t27, i64 %t29) call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7108, i64 14, i64 0 }, %S.json.Json %t30) store %S.json.Json %t30, ptr %a31 call void @finch.drop.S_json_Json(ptr %a31) %t32 = load %S.json.Json, ptr %a7 call void @finch.drop.S_json_Json(ptr %a15) ret %S.json.Json %t32 } define internal %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %p0, i64 %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca i64, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca %S.json.Json, align 16 %a9 = alloca %S.json.Json, align 16 %a12 = alloca %S.json.Json, align 16 %a18 = alloca %S.json.Json, align 16 %a23 = alloca %S.json.Json, align 16 %a25 = alloca %S.json.Json, align 16 %a28 = alloca %S.json.Json, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store i64 %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 %t5 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t5, ptr %a6 %t7 = load { ptr, i64, i64 }, ptr %a1 %t8 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t7) call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7109, i64 5, i64 0 }, %S.json.Json %t8) store %S.json.Json %t8, ptr %a9 call void @finch.drop.S_json_Json(ptr %a9) %t10 = load i64, ptr %a2 %t11 = call %S.json.Json @finch.lsp.num(i64 %t10) call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7110, i64 4, i64 0 }, %S.json.Json %t11) store %S.json.Json %t11, ptr %a12 call void @finch.drop.S_json_Json(ptr %a12) %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sgt i64 %t14, 0 br i1 %t15, label %then10797, label %endif10799 then10797: %t16 = load { ptr, i64, i64 }, ptr %a3 %t17 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t16) call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7111, i64 6, i64 0 }, %S.json.Json %t17) store %S.json.Json %t17, ptr %a18 call void @finch.drop.S_json_Json(ptr %a18) br label %endif10799 endif10799: %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t20 = load i64, ptr %t19 %t21 = icmp sgt i64 %t20, 0 br i1 %t21, label %then10800, label %endif10802 then10800: %t22 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t22, ptr %a23 %t24 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7113, i64 8, i64 0 }) call void @finch.json.Json.set(ptr %a23, { ptr, i64, i64 } { ptr @.str.7112, i64 4, i64 0 }, %S.json.Json %t24) store %S.json.Json %t24, ptr %a25 call void @finch.drop.S_json_Json(ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a4 %t27 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t26) call void @finch.json.Json.set(ptr %a23, { ptr, i64, i64 } { ptr @.str.7114, i64 5, i64 0 }, %S.json.Json %t27) store %S.json.Json %t27, ptr %a28 call void @finch.drop.S_json_Json(ptr %a28) %t29 = load %S.json.Json, ptr %a23 call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7115, i64 13, i64 0 }, %S.json.Json %t29) call void @finch.drop.S_json_Json(ptr %a23) br label %endif10802 endif10802: %t30 = load %S.json.Json, ptr %a6 ret %S.json.Json %t30 } define internal i1 @finch.lsp.isWordChar(i8 %p0) { entry: %a1 = alloca i8, align 16 store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 97 br label %logic.from10803 logic.from10803: br i1 %t3, label %logic.rhs10804, label %logic.end10805 logic.rhs10804: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 122 br label %logic.rend10806 logic.rend10806: br label %logic.end10805 logic.end10805: %t6 = phi i1 [ false, %logic.from10803 ], [ %t5, %logic.rend10806 ] br label %logic.from10807 logic.from10807: br i1 %t6, label %logic.end10809, label %logic.rhs10808 logic.rhs10808: %t7 = load i8, ptr %a1 %t8 = icmp uge i8 %t7, 65 br label %logic.from10810 logic.from10810: br i1 %t8, label %logic.rhs10811, label %logic.end10812 logic.rhs10811: %t9 = load i8, ptr %a1 %t10 = icmp ule i8 %t9, 90 br label %logic.rend10813 logic.rend10813: br label %logic.end10812 logic.end10812: %t11 = phi i1 [ false, %logic.from10810 ], [ %t10, %logic.rend10813 ] br label %logic.rend10814 logic.rend10814: br label %logic.end10809 logic.end10809: %t12 = phi i1 [ true, %logic.from10807 ], [ %t11, %logic.rend10814 ] br label %logic.from10815 logic.from10815: br i1 %t12, label %logic.end10817, label %logic.rhs10816 logic.rhs10816: %t13 = load i8, ptr %a1 %t14 = icmp uge i8 %t13, 48 br label %logic.from10818 logic.from10818: br i1 %t14, label %logic.rhs10819, label %logic.end10820 logic.rhs10819: %t15 = load i8, ptr %a1 %t16 = icmp ule i8 %t15, 57 br label %logic.rend10821 logic.rend10821: br label %logic.end10820 logic.end10820: %t17 = phi i1 [ false, %logic.from10818 ], [ %t16, %logic.rend10821 ] br label %logic.rend10822 logic.rend10822: br label %logic.end10817 logic.end10817: %t18 = phi i1 [ true, %logic.from10815 ], [ %t17, %logic.rend10822 ] br label %logic.from10823 logic.from10823: br i1 %t18, label %logic.end10825, label %logic.rhs10824 logic.rhs10824: %t19 = load i8, ptr %a1 %t20 = icmp eq i8 %t19, 95 br label %logic.rend10826 logic.rend10826: br label %logic.end10825 logic.end10825: %t21 = phi i1 [ true, %logic.from10823 ], [ %t20, %logic.rend10826 ] ret i1 %t21 } define internal void @finch.lsp.methodItems(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a11 = alloca %S.docs.Doc, align 16 %a12 = alloca i64, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca %S.json.Json, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 0, ptr %a3 br label %each.cond10827 each.cond10827: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 br i1 %t7, label %each.body10828, label %each.end10830 each.body10828: %t8 = load ptr, ptr %a2 %t9 = getelementptr inbounds %S.docs.Doc, ptr %t8, i64 %t6 %t10 = load %S.docs.Doc, ptr %t9 store %S.docs.Doc %t10, ptr %a11 store i64 2, ptr %a12 %t13 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 1 %t14 = load { ptr, i64, i64 }, ptr %t13 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.7117, i64 1, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_starts(ptr %a15, ptr %a17) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %then10831, label %endif10833 then10831: store i64 5, ptr %a12 br label %endif10833 endif10833: %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null br i1 %t21, label %panic10834, label %ok10835 panic10834: call void @finch_panic(ptr @.str.7118, i64 497, ptr @.str.7119) unreachable ok10835: %t22 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 0 %t23 = load { ptr, i64, i64 }, ptr %t22 %t24 = load i64, ptr %a12 %t25 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 1 %t26 = load { ptr, i64, i64 }, ptr %t25 %t27 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 2 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t23, i64 %t24, { ptr, i64, i64 } %t26, { ptr, i64, i64 } %t28) call void @finch.json.Json.push(ptr %t20, %S.json.Json %t29) store %S.json.Json %t29, ptr %a30 call void @finch.drop.S_json_Json(ptr %a30) br label %each.step10829 each.step10829: %t31 = load i64, ptr %a3 %t32 = add i64 %t31, 1 store i64 %t32, ptr %a3 br label %each.cond10827 each.end10830: ret void } define internal %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i64 %p3) { entry: %a1 = alloca %S.lsp.Analysis, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca i64, align 16 %a5 = alloca %S.lsp.VarRec, align 16 %a7 = alloca i64, align 16 %a15 = alloca %S.lsp.VarRec, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca %S.lsp.VarRec, align 16 %a44 = alloca %S.lsp.VarRec, align 16 %a47 = alloca %S.lsp.VarRec, align 16 store %S.lsp.Analysis %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store i64 %p3, ptr %a4 store %S.lsp.VarRec zeroinitializer, ptr %a5 %t6 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 1 store i64 0, ptr %a7 br label %each.cond10836 each.cond10836: %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load i64, ptr %a7 %t11 = icmp slt i64 %t10, %t9 br i1 %t11, label %each.body10837, label %each.end10839 each.body10837: %t12 = load ptr, ptr %t6 %t13 = getelementptr inbounds %S.lsp.VarRec, ptr %t12, i64 %t10 %t14 = load %S.lsp.VarRec, ptr %t13 store %S.lsp.VarRec %t14, ptr %a15 %t16 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 0 %t17 = load { ptr, i64, i64 }, ptr %t16 %t18 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t17, ptr %a19 store { ptr, i64, i64 } %t18, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 br label %logic.from10840 logic.from10840: br i1 %t22, label %logic.rhs10841, label %logic.end10842 logic.rhs10841: %t23 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 3 %t24 = load i64, ptr %t23 %t25 = load i64, ptr %a4 %t26 = icmp sle i64 %t24, %t25 br label %logic.rend10843 logic.rend10843: br label %logic.end10842 logic.end10842: %t27 = phi i1 [ false, %logic.from10840 ], [ %t26, %logic.rend10843 ] br label %logic.from10844 logic.from10844: br i1 %t27, label %logic.rhs10845, label %logic.end10846 logic.rhs10845: %t28 = load i64, ptr %a4 %t29 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 7 %t30 = load i64, ptr %t29 %t31 = add i64 %t30, 1 %t32 = icmp sle i64 %t28, %t31 br label %logic.rend10847 logic.rend10847: br label %logic.end10846 logic.end10846: %t33 = phi i1 [ false, %logic.from10844 ], [ %t32, %logic.rend10847 ] br label %logic.from10848 logic.from10848: br i1 %t33, label %logic.rhs10849, label %logic.end10850 logic.rhs10849: %t34 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 5 %t35 = load { ptr, i64, i64 }, ptr %t34 %t36 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t35, ptr %a37 store { ptr, i64, i64 } %t36, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 br label %logic.rend10851 logic.rend10851: br label %logic.end10850 logic.end10850: %t41 = phi i1 [ false, %logic.from10848 ], [ %t40, %logic.rend10851 ] br i1 %t41, label %then10852, label %endif10854 then10852: %t42 = load %S.lsp.VarRec, ptr %a15 store %S.lsp.VarRec %t42, ptr %a43 call void @finch.copy.S_lsp_VarRec(ptr %a44, ptr %a43) %t45 = load %S.lsp.VarRec, ptr %a44 %t46 = load %S.lsp.VarRec, ptr %a5 store %S.lsp.VarRec %t45, ptr %a5 store %S.lsp.VarRec %t46, ptr %a47 call void @finch.drop.S_lsp_VarRec(ptr %a47) br label %endif10854 endif10854: br label %each.step10838 each.step10838: %t48 = load i64, ptr %a7 %t49 = add i64 %t48, 1 store i64 %t49, ptr %a7 br label %each.cond10836 each.end10839: %t50 = load %S.lsp.VarRec, ptr %a5 ret %S.lsp.VarRec %t50 } define internal void @finch.drop.S_lsp_Names(ptr %a) { entry: %t1 = getelementptr inbounds %S.lsp.Names, ptr %a, i32 0, i32 0 call void @finch.drop.arr_str(ptr %t1) ret void } define internal %S.json.Json @finch.lsp.completionAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i64 %p3, i64 %p4) { entry: %a1 = alloca %S.lsp.Analysis, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca i64, align 16 %a5 = alloca i64, align 16 %a7 = alloca %S.json.Json, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca i64, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca i64, align 16 %a56 = alloca i1, align 16 %a60 = alloca i64, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca i1, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca i64, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca i64, align 16 %a125 = alloca i64, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca i64, align 16 %a146 = alloca %S.lsp.FnRec, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca %S.json.Json, align 16 %a168 = alloca i64, align 16 %a176 = alloca %S.lsp.StructRec, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca %S.json.Json, align 16 %a198 = alloca i64, align 16 %a206 = alloca %S.lsp.EnumRec, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca %S.json.Json, align 16 %a230 = alloca i64, align 16 %a238 = alloca %S.lsp.EnumRec, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca %S.lsp.VarRec, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca i64, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca %S.json.Json, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca %S.lsp.VarRec, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a377 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca i64, align 16 %a387 = alloca %S.lsp.StructRec, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca i64, align 16 %a418 = alloca %S.json.Json, align 16 %a424 = alloca i64, align 16 %a432 = alloca %S.lsp.FnRec, align 16 %a436 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 %a445 = alloca %S.json.Json, align 16 %a450 = alloca %S.lsp.Names, align 16 %a452 = alloca i64, align 16 %a460 = alloca %S.lsp.VarRec, align 16 %a474 = alloca { ptr, i64, i64 }, align 16 %a475 = alloca { ptr, i64, i64 }, align 16 %a488 = alloca %S.json.Json, align 16 %a492 = alloca i64, align 16 %a500 = alloca %S.lsp.FnRec, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a508 = alloca { ptr, i64, i64 }, align 16 %a521 = alloca %S.json.Json, align 16 %a525 = alloca i64, align 16 %a533 = alloca %S.lsp.StructRec, align 16 %a536 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a548 = alloca { ptr, i64, i64 }, align 16 %a549 = alloca { ptr, i64, i64 }, align 16 %a550 = alloca { ptr, i64, i64 }, align 16 %a553 = alloca { ptr, i64, i64 }, align 16 %a554 = alloca %S.json.Json, align 16 %a558 = alloca i64, align 16 %a566 = alloca %S.lsp.EnumRec, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a570 = alloca { ptr, i64, i64 }, align 16 %a581 = alloca { ptr, i64, i64 }, align 16 %a582 = alloca { ptr, i64, i64 }, align 16 %a583 = alloca { ptr, i64, i64 }, align 16 %a586 = alloca { ptr, i64, i64 }, align 16 %a587 = alloca %S.json.Json, align 16 %a591 = alloca i64, align 16 %a599 = alloca { ptr, i64, i64 }, align 16 %a604 = alloca %S.json.Json, align 16 %a608 = alloca { ptr, i64, i64 }, align 16 %a609 = alloca i64, align 16 %a617 = alloca %S.docs.Doc, align 16 %a628 = alloca %S.json.Json, align 16 %a632 = alloca { ptr, i64, i64 }, align 16 %a633 = alloca i64, align 16 %a641 = alloca { ptr, i64, i64 }, align 16 %a646 = alloca %S.json.Json, align 16 %a650 = alloca { ptr, i64, i64 }, align 16 %a651 = alloca i64, align 16 %a659 = alloca { ptr, i64, i64 }, align 16 %a664 = alloca %S.json.Json, align 16 store %S.lsp.Analysis %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store i64 %p3, ptr %a4 store i64 %p4, ptr %a5 %t6 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t6, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a2 %t9 = load i64, ptr %a4 %t10 = call { ptr, i64, i64 } @finch.lsp.lineOf({ ptr, i64, i64 } %t8, i64 %t9) store { ptr, i64, i64 } %t10, ptr %a11 %t12 = load i64, ptr %a5 %t13 = sub i64 %t12, 1 store i64 %t13, ptr %a14 %t15 = load i64, ptr %a14 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 %t17 = load i64, ptr %t16 %t18 = icmp sgt i64 %t15, %t17 br i1 %t18, label %then10855, label %endif10857 then10855: %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 %t20 = load i64, ptr %t19 store i64 %t20, ptr %a14 br label %endif10857 endif10857: %t21 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t21, ptr %a22 %t24 = load i64, ptr %a14 call void @finch_str_sub(ptr %a23, ptr %a22, i64 0, i64 %t24, ptr @.str.7120, i64 519) %t25 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t25, ptr %a26 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a26, i32 0, i32 1 %t28 = load i64, ptr %t27 store i64 %t28, ptr %a29 br label %while.cond10858 while.cond10858: %t30 = load i64, ptr %a29 %t31 = icmp sgt i64 %t30, 0 br label %logic.from10861 logic.from10861: br i1 %t31, label %logic.rhs10862, label %logic.end10863 logic.rhs10862: %t32 = load i64, ptr %a29 %t33 = sub i64 %t32, 1 %t34 = load { ptr, i64, i64 }, ptr %a26 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp uge i64 %t33, %t35 br i1 %t36, label %range10864, label %inrange10865 range10864: call void @finch_panic_index(ptr @.str.7121, i64 522, i64 %t33, i64 %t35) unreachable inrange10865: %t37 = extractvalue { ptr, i64, i64 } %t34, 0 %t38 = getelementptr inbounds i8, ptr %t37, i64 %t33 %t39 = load i8, ptr %t38 %t40 = call i1 @finch.lsp.isWordChar(i8 %t39) br label %logic.rend10866 logic.rend10866: br label %logic.end10863 logic.end10863: %t41 = phi i1 [ false, %logic.from10861 ], [ %t40, %logic.rend10866 ] br i1 %t41, label %while.body10859, label %while.end10860 while.body10859: %t42 = load i64, ptr %a29 %t43 = sub i64 %t42, 1 store i64 %t43, ptr %a29 br label %while.cond10858 while.end10860: %t44 = load i64, ptr %a29 %t45 = icmp sgt i64 %t44, 0 br label %logic.from10867 logic.from10867: br i1 %t45, label %logic.rhs10868, label %logic.end10869 logic.rhs10868: %t46 = load i64, ptr %a29 %t47 = sub i64 %t46, 1 %t48 = load { ptr, i64, i64 }, ptr %a26 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 br i1 %t50, label %range10870, label %inrange10871 range10870: call void @finch_panic_index(ptr @.str.7122, i64 525, i64 %t47, i64 %t49) unreachable inrange10871: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds i8, ptr %t51, i64 %t47 %t53 = load i8, ptr %t52 %t54 = icmp eq i8 %t53, 46 br label %logic.rend10872 logic.rend10872: br label %logic.end10869 logic.end10869: %t55 = phi i1 [ false, %logic.from10867 ], [ %t54, %logic.rend10872 ] store i1 %t55, ptr %a56 %t57 = load i1, ptr %a56 br i1 %t57, label %then10873, label %endif10875 then10873: %t58 = load i64, ptr %a29 %t59 = sub i64 %t58, 1 store i64 %t59, ptr %a60 br label %while.cond10876 while.cond10876: %t61 = load i64, ptr %a60 %t62 = icmp sgt i64 %t61, 0 br label %logic.from10879 logic.from10879: br i1 %t62, label %logic.rhs10880, label %logic.end10881 logic.rhs10880: %t63 = load i64, ptr %a60 %t64 = sub i64 %t63, 1 %t65 = load { ptr, i64, i64 }, ptr %a26 %t66 = extractvalue { ptr, i64, i64 } %t65, 1 %t67 = icmp uge i64 %t64, %t66 br i1 %t67, label %range10882, label %inrange10883 range10882: call void @finch_panic_index(ptr @.str.7123, i64 528, i64 %t64, i64 %t66) unreachable inrange10883: %t68 = extractvalue { ptr, i64, i64 } %t65, 0 %t69 = getelementptr inbounds i8, ptr %t68, i64 %t64 %t70 = load i8, ptr %t69 %t71 = call i1 @finch.lsp.isWordChar(i8 %t70) br label %logic.from10884 logic.from10884: br i1 %t71, label %logic.end10886, label %logic.rhs10885 logic.rhs10885: %t72 = load i64, ptr %a60 %t73 = sub i64 %t72, 1 %t74 = load { ptr, i64, i64 }, ptr %a26 %t75 = extractvalue { ptr, i64, i64 } %t74, 1 %t76 = icmp uge i64 %t73, %t75 br i1 %t76, label %range10887, label %inrange10888 range10887: call void @finch_panic_index(ptr @.str.7124, i64 528, i64 %t73, i64 %t75) unreachable inrange10888: %t77 = extractvalue { ptr, i64, i64 } %t74, 0 %t78 = getelementptr inbounds i8, ptr %t77, i64 %t73 %t79 = load i8, ptr %t78 %t80 = icmp eq i8 %t79, 91 br label %logic.rend10889 logic.rend10889: br label %logic.end10886 logic.end10886: %t81 = phi i1 [ true, %logic.from10884 ], [ %t80, %logic.rend10889 ] br label %logic.from10890 logic.from10890: br i1 %t81, label %logic.end10892, label %logic.rhs10891 logic.rhs10891: %t82 = load i64, ptr %a60 %t83 = sub i64 %t82, 1 %t84 = load { ptr, i64, i64 }, ptr %a26 %t85 = extractvalue { ptr, i64, i64 } %t84, 1 %t86 = icmp uge i64 %t83, %t85 br i1 %t86, label %range10893, label %inrange10894 range10893: call void @finch_panic_index(ptr @.str.7125, i64 528, i64 %t83, i64 %t85) unreachable inrange10894: %t87 = extractvalue { ptr, i64, i64 } %t84, 0 %t88 = getelementptr inbounds i8, ptr %t87, i64 %t83 %t89 = load i8, ptr %t88 %t90 = icmp eq i8 %t89, 93 br label %logic.rend10895 logic.rend10895: br label %logic.end10892 logic.end10892: %t91 = phi i1 [ true, %logic.from10890 ], [ %t90, %logic.rend10895 ] br label %logic.rend10896 logic.rend10896: br label %logic.end10881 logic.end10881: %t92 = phi i1 [ false, %logic.from10879 ], [ %t91, %logic.rend10896 ] br i1 %t92, label %while.body10877, label %while.end10878 while.body10877: %t93 = load i64, ptr %a60 %t94 = sub i64 %t93, 1 store i64 %t94, ptr %a60 br label %while.cond10876 while.end10878: %t95 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t95, ptr %a96 %t98 = load i64, ptr %a60 %t99 = load i64, ptr %a29 %t100 = sub i64 %t99, 1 call void @finch_str_sub(ptr %a97, ptr %a96, i64 %t98, i64 %t100, ptr @.str.7126, i64 531) %t101 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } %t101, ptr %a102 store i1 false, ptr %a103 %t104 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t104, ptr %a105 store { ptr, i64, i64 } { ptr @.str.7128, i64 1, i64 0 }, ptr %a107 %t108 = call i64 @finch_str_find(ptr %a105, ptr %a107) store i64 %t108, ptr %a109 %t110 = load i64, ptr %a109 %t111 = icmp sge i64 %t110, 0 br i1 %t111, label %then10897, label %endif10899 then10897: %t112 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t112, ptr %a113 %t115 = load i64, ptr %a109 call void @finch_str_sub(ptr %a114, ptr %a113, i64 0, i64 %t115, ptr @.str.7129, i64 535) %t116 = load { ptr, i64, i64 }, ptr %a114 %t117 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t116, ptr %a102 store { ptr, i64, i64 } %t117, ptr %a118 call void @finch_str_drop(ptr %a118) store i1 true, ptr %a103 br label %endif10899 endif10899: %t119 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 5 %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 %t121 = load { ptr, i64, i64 }, ptr %a102 store i64 -1, ptr %a122 %t123 = load i64, ptr %t120 %t124 = load ptr, ptr %t119 store i64 0, ptr %a125 br label %find.cond10900 find.cond10900: %t126 = load i64, ptr %a125 %t127 = icmp slt i64 %t126, %t123 br i1 %t127, label %find.body10901, label %find.end10904 find.body10901: %t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t124, i64 %t126 %t129 = load { ptr, i64, i64 }, ptr %t128 store { ptr, i64, i64 } %t129, ptr %a130 store { ptr, i64, i64 } %t121, ptr %a131 %t132 = call i32 @finch_str_eq(ptr %a130, ptr %a131) %t133 = icmp ne i32 %t132, 0 br i1 %t133, label %find.hit10902, label %find.next10903 find.hit10902: store i64 %t126, ptr %a122 br label %find.end10904 find.next10903: %t134 = add i64 %t126, 1 store i64 %t134, ptr %a125 br label %find.cond10900 find.end10904: %t135 = load i64, ptr %a122 %t136 = icmp sge i64 %t135, 0 br i1 %t136, label %then10905, label %endif10907 then10905: %t137 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a138 br label %each.cond10908 each.cond10908: %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 %t140 = load i64, ptr %t139 %t141 = load i64, ptr %a138 %t142 = icmp slt i64 %t141, %t140 br i1 %t142, label %each.body10909, label %each.end10911 each.body10909: %t143 = load ptr, ptr %t137 %t144 = getelementptr inbounds %S.lsp.FnRec, ptr %t143, i64 %t141 %t145 = load %S.lsp.FnRec, ptr %t144 store %S.lsp.FnRec %t145, ptr %a146 %t147 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 0 %t148 = load { ptr, i64, i64 }, ptr %t147 %t149 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t148, ptr %a150 store { ptr, i64, i64 } %t149, ptr %a151 %t152 = call i32 @finch_str_eq(ptr %a150, ptr %a151) %t153 = icmp ne i32 %t152, 0 br label %logic.from10912 logic.from10912: br i1 %t153, label %logic.rhs10913, label %logic.end10914 logic.rhs10913: %t154 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 2 %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 %t156 = load i64, ptr %t155 %t157 = icmp eq i64 %t156, 0 br label %logic.rend10915 logic.rend10915: br label %logic.end10914 logic.end10914: %t158 = phi i1 [ false, %logic.from10912 ], [ %t157, %logic.rend10915 ] br i1 %t158, label %then10916, label %endif10918 then10916: %t159 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 1 %t160 = load { ptr, i64, i64 }, ptr %t159 %t161 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 7 %t162 = load { ptr, i64, i64 }, ptr %t161 %t163 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t160, i64 3, { ptr, i64, i64 } %t162, { ptr, i64, i64 } { ptr @.str.7130, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t163) store %S.json.Json %t163, ptr %a164 call void @finch.drop.S_json_Json(ptr %a164) br label %endif10918 endif10918: br label %each.step10910 each.step10910: %t165 = load i64, ptr %a138 %t166 = add i64 %t165, 1 store i64 %t166, ptr %a138 br label %each.cond10908 each.end10911: %t167 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 store i64 0, ptr %a168 br label %each.cond10919 each.cond10919: %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 %t170 = load i64, ptr %t169 %t171 = load i64, ptr %a168 %t172 = icmp slt i64 %t171, %t170 br i1 %t172, label %each.body10920, label %each.end10922 each.body10920: %t173 = load ptr, ptr %t167 %t174 = getelementptr inbounds %S.lsp.StructRec, ptr %t173, i64 %t171 %t175 = load %S.lsp.StructRec, ptr %t174 store %S.lsp.StructRec %t175, ptr %a176 %t177 = getelementptr inbounds %S.lsp.StructRec, ptr %a176, i32 0, i32 0 %t178 = load { ptr, i64, i64 }, ptr %t177 %t179 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t178, ptr %a180 store { ptr, i64, i64 } %t179, ptr %a181 %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) %t183 = icmp ne i32 %t182, 0 br i1 %t183, label %then10923, label %endif10925 then10923: %t184 = getelementptr inbounds %S.lsp.StructRec, ptr %a176, i32 0, i32 1 %t185 = load { ptr, i64, i64 }, ptr %t184 %t186 = getelementptr inbounds %S.lsp.StructRec, ptr %a176, i32 0, i32 1 %t187 = load { ptr, i64, i64 }, ptr %t186 store { ptr, i64, i64 } { ptr @.str.7131, i64 7, i64 0 }, ptr %a189 store { ptr, i64, i64 } %t187, ptr %a190 call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) %t191 = load { ptr, i64, i64 }, ptr %a188 %t192 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t185, i64 22, { ptr, i64, i64 } %t191, { ptr, i64, i64 } { ptr @.str.7132, i64 0, i64 0 }) store { ptr, i64, i64 } %t191, ptr %a193 call void @finch_str_drop(ptr %a193) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t192) store %S.json.Json %t192, ptr %a194 call void @finch.drop.S_json_Json(ptr %a194) br label %endif10925 endif10925: br label %each.step10921 each.step10921: %t195 = load i64, ptr %a168 %t196 = add i64 %t195, 1 store i64 %t196, ptr %a168 br label %each.cond10919 each.end10922: %t197 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 store i64 0, ptr %a198 br label %each.cond10926 each.cond10926: %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t197, i32 0, i32 1 %t200 = load i64, ptr %t199 %t201 = load i64, ptr %a198 %t202 = icmp slt i64 %t201, %t200 br i1 %t202, label %each.body10927, label %each.end10929 each.body10927: %t203 = load ptr, ptr %t197 %t204 = getelementptr inbounds %S.lsp.EnumRec, ptr %t203, i64 %t201 %t205 = load %S.lsp.EnumRec, ptr %t204 store %S.lsp.EnumRec %t205, ptr %a206 %t207 = getelementptr inbounds %S.lsp.EnumRec, ptr %a206, i32 0, i32 0 %t208 = load { ptr, i64, i64 }, ptr %t207 %t209 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t208, ptr %a210 store { ptr, i64, i64 } %t209, ptr %a211 %t212 = call i32 @finch_str_eq(ptr %a210, ptr %a211) %t213 = icmp ne i32 %t212, 0 br i1 %t213, label %then10930, label %endif10932 then10930: %t214 = getelementptr inbounds %S.lsp.EnumRec, ptr %a206, i32 0, i32 1 %t215 = load { ptr, i64, i64 }, ptr %t214 %t216 = getelementptr inbounds %S.lsp.EnumRec, ptr %a206, i32 0, i32 1 %t217 = load { ptr, i64, i64 }, ptr %t216 store { ptr, i64, i64 } { ptr @.str.7133, i64 5, i64 0 }, ptr %a219 store { ptr, i64, i64 } %t217, ptr %a220 call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) %t221 = load { ptr, i64, i64 }, ptr %a218 %t222 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t215, i64 13, { ptr, i64, i64 } %t221, { ptr, i64, i64 } { ptr @.str.7134, i64 0, i64 0 }) store { ptr, i64, i64 } %t221, ptr %a223 call void @finch_str_drop(ptr %a223) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t222) store %S.json.Json %t222, ptr %a224 call void @finch.drop.S_json_Json(ptr %a224) br label %endif10932 endif10932: br label %each.step10928 each.step10928: %t225 = load i64, ptr %a198 %t226 = add i64 %t225, 1 store i64 %t226, ptr %a198 br label %each.cond10926 each.end10929: %t227 = load %S.json.Json, ptr %a7 %t228 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t227) call void @finch_str_drop(ptr %a102) call void @finch_str_drop(ptr %a26) call void @finch_str_drop(ptr %a11) call void @finch.drop.S_json_Json(ptr %a7) ret %S.json.Json %t228 endif10907: %t229 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 store i64 0, ptr %a230 br label %each.cond10933 each.cond10933: %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i32 0, i32 1 %t232 = load i64, ptr %t231 %t233 = load i64, ptr %a230 %t234 = icmp slt i64 %t233, %t232 br i1 %t234, label %each.body10934, label %each.end10936 each.body10934: %t235 = load ptr, ptr %t229 %t236 = getelementptr inbounds %S.lsp.EnumRec, ptr %t235, i64 %t233 %t237 = load %S.lsp.EnumRec, ptr %t236 store %S.lsp.EnumRec %t237, ptr %a238 %t239 = getelementptr inbounds %S.lsp.EnumRec, ptr %a238, i32 0, i32 1 %t240 = load { ptr, i64, i64 }, ptr %t239 %t241 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t240, ptr %a242 store { ptr, i64, i64 } %t241, ptr %a243 %t244 = call i32 @finch_str_eq(ptr %a242, ptr %a243) %t245 = icmp ne i32 %t244, 0 br label %logic.from10937 logic.from10937: br i1 %t245, label %logic.rhs10938, label %logic.end10939 logic.rhs10938: %t246 = load %S.lsp.Analysis, ptr %a1 %t247 = load { ptr, i64, i64 }, ptr %a3 %t248 = load { ptr, i64, i64 }, ptr %a102 %t249 = load i64, ptr %a4 %t250 = call %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %t246, { ptr, i64, i64 } %t247, { ptr, i64, i64 } %t248, i64 %t249) %t251 = extractvalue %S.lsp.VarRec %t250, 0 store { ptr, i64, i64 } %t251, ptr %a252 call void @finch_str_copy(ptr %a253, ptr %a252) %t254 = load { ptr, i64, i64 }, ptr %a253 store %S.lsp.VarRec %t250, ptr %a255 call void @finch.drop.S_lsp_VarRec(ptr %a255) %t256 = extractvalue { ptr, i64, i64 } %t254, 1 store { ptr, i64, i64 } %t254, ptr %a257 call void @finch_str_drop(ptr %a257) %t258 = icmp eq i64 %t256, 0 br label %logic.rend10940 logic.rend10940: br label %logic.end10939 logic.end10939: %t259 = phi i1 [ false, %logic.from10937 ], [ %t258, %logic.rend10940 ] br i1 %t259, label %then10941, label %endif10943 then10941: %t260 = getelementptr inbounds %S.lsp.EnumRec, ptr %a238, i32 0, i32 5 store i64 0, ptr %a261 br label %each.cond10944 each.cond10944: %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t260, i32 0, i32 1 %t263 = load i64, ptr %t262 %t264 = load i64, ptr %a261 %t265 = icmp slt i64 %t264, %t263 br i1 %t265, label %each.body10945, label %each.end10947 each.body10945: %t266 = load ptr, ptr %t260 %t267 = getelementptr inbounds { ptr, i64, i64 }, ptr %t266, i64 %t264 %t268 = load { ptr, i64, i64 }, ptr %t267 store { ptr, i64, i64 } %t268, ptr %a269 %t270 = load { ptr, i64, i64 }, ptr %a269 %t271 = getelementptr inbounds %S.lsp.EnumRec, ptr %a238, i32 0, i32 1 %t272 = load { ptr, i64, i64 }, ptr %t271 store { ptr, i64, i64 } %t272, ptr %a274 store { ptr, i64, i64 } { ptr @.str.7135, i64 1, i64 0 }, ptr %a275 call void @finch_str_concat(ptr %a273, ptr %a274, ptr %a275) %t276 = load { ptr, i64, i64 }, ptr %a273 %t277 = load { ptr, i64, i64 }, ptr %a269 store { ptr, i64, i64 } %t276, ptr %a279 store { ptr, i64, i64 } %t277, ptr %a280 call void @finch_str_concat(ptr %a278, ptr %a279, ptr %a280) store { ptr, i64, i64 } %t276, ptr %a281 call void @finch_str_drop(ptr %a281) %t282 = load { ptr, i64, i64 }, ptr %a278 %t283 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t270, i64 20, { ptr, i64, i64 } %t282, { ptr, i64, i64 } { ptr @.str.7136, i64 0, i64 0 }) store { ptr, i64, i64 } %t282, ptr %a284 call void @finch_str_drop(ptr %a284) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t283) store %S.json.Json %t283, ptr %a285 call void @finch.drop.S_json_Json(ptr %a285) br label %each.step10946 each.step10946: %t286 = load i64, ptr %a261 %t287 = add i64 %t286, 1 store i64 %t287, ptr %a261 br label %each.cond10944 each.end10947: %t288 = load %S.json.Json, ptr %a7 %t289 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t288) call void @finch_str_drop(ptr %a102) call void @finch_str_drop(ptr %a26) call void @finch_str_drop(ptr %a11) call void @finch.drop.S_json_Json(ptr %a7) ret %S.json.Json %t289 endif10943: br label %each.step10935 each.step10935: %t290 = load i64, ptr %a230 %t291 = add i64 %t290, 1 store i64 %t291, ptr %a230 br label %each.cond10933 each.end10936: %t292 = load %S.lsp.Analysis, ptr %a1 %t293 = load { ptr, i64, i64 }, ptr %a3 %t294 = load { ptr, i64, i64 }, ptr %a102 %t295 = load i64, ptr %a4 %t296 = call %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %t292, { ptr, i64, i64 } %t293, { ptr, i64, i64 } %t294, i64 %t295) %t297 = extractvalue %S.lsp.VarRec %t296, 1 store { ptr, i64, i64 } %t297, ptr %a298 call void @finch_str_copy(ptr %a299, ptr %a298) %t300 = load { ptr, i64, i64 }, ptr %a299 store %S.lsp.VarRec %t296, ptr %a301 call void @finch.drop.S_lsp_VarRec(ptr %a301) store { ptr, i64, i64 } %t300, ptr %a302 %t303 = load i1, ptr %a103 br label %logic.from10948 logic.from10948: br i1 %t303, label %logic.rhs10949, label %logic.end10950 logic.rhs10949: %t304 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t304, ptr %a305 store { ptr, i64, i64 } { ptr @.str.7138, i64 2, i64 0 }, ptr %a307 %t308 = call i32 @finch_str_starts(ptr %a305, ptr %a307) %t309 = icmp ne i32 %t308, 0 br label %logic.rend10951 logic.rend10951: br label %logic.end10950 logic.end10950: %t310 = phi i1 [ false, %logic.from10948 ], [ %t309, %logic.rend10951 ] br i1 %t310, label %then10952, label %else10953 then10952: %t311 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t311, ptr %a312 %t314 = getelementptr inbounds { ptr, i64, i64 }, ptr %a302, i32 0, i32 1 %t315 = load i64, ptr %t314 call void @finch_str_sub(ptr %a313, ptr %a312, i64 2, i64 %t315, ptr @.str.7139, i64 569) %t316 = load { ptr, i64, i64 }, ptr %a313 %t317 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t316, ptr %a302 store { ptr, i64, i64 } %t317, ptr %a318 call void @finch_str_drop(ptr %a318) br label %endif10954 else10953: %t319 = load i1, ptr %a103 br label %logic.from10955 logic.from10955: br i1 %t319, label %logic.rhs10956, label %logic.end10957 logic.rhs10956: %t320 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t320, ptr %a321 store { ptr, i64, i64 } { ptr @.str.7140, i64 3, i64 0 }, ptr %a322 %t323 = call i32 @finch_str_eq(ptr %a321, ptr %a322) %t324 = icmp ne i32 %t323, 0 br label %logic.rend10958 logic.rend10958: br label %logic.end10957 logic.end10957: %t325 = phi i1 [ false, %logic.from10955 ], [ %t324, %logic.rend10958 ] br i1 %t325, label %then10959, label %endif10961 then10959: %t326 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } { ptr @.str.7141, i64 4, i64 0 }, ptr %a302 store { ptr, i64, i64 } %t326, ptr %a327 call void @finch_str_drop(ptr %a327) br label %endif10961 endif10961: br label %endif10954 endif10954: %t328 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t328, ptr %a329 store { ptr, i64, i64 } { ptr @.str.7143, i64 4, i64 0 }, ptr %a331 %t332 = call i32 @finch_str_starts(ptr %a329, ptr %a331) %t333 = icmp ne i32 %t332, 0 br label %logic.from10962 logic.from10962: br i1 %t333, label %logic.rhs10963, label %logic.end10964 logic.rhs10963: %t334 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t334, ptr %a335 store { ptr, i64, i64 } { ptr @.str.7145, i64 1, i64 0 }, ptr %a337 %t338 = call i32 @finch_str_ends(ptr %a335, ptr %a337) %t339 = icmp ne i32 %t338, 0 br label %logic.rend10965 logic.rend10965: br label %logic.end10964 logic.end10964: %t340 = phi i1 [ false, %logic.from10962 ], [ %t339, %logic.rend10965 ] br i1 %t340, label %then10966, label %endif10968 then10966: %t341 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t341, ptr %a342 %t344 = getelementptr inbounds { ptr, i64, i64 }, ptr %a302, i32 0, i32 1 %t345 = load i64, ptr %t344 %t346 = sub i64 %t345, 1 call void @finch_str_sub(ptr %a343, ptr %a342, i64 4, i64 %t346, ptr @.str.7146, i64 574) %t347 = load { ptr, i64, i64 }, ptr %a343 %t348 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t347, ptr %a302 store { ptr, i64, i64 } %t348, ptr %a349 call void @finch_str_drop(ptr %a349) br label %endif10968 endif10968: %t350 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t350, ptr %a351 store { ptr, i64, i64 } { ptr @.str.7148, i64 2, i64 0 }, ptr %a353 %t354 = call i32 @finch_str_starts(ptr %a351, ptr %a353) %t355 = icmp ne i32 %t354, 0 br i1 %t355, label %then10969, label %else10970 then10969: %t356 = call { ptr, i64, i64 } @finch.docs.arrayMethods() call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t356) store { ptr, i64, i64 } %t356, ptr %a357 call void @finch.drop.arr_S_docs_Doc(ptr %a357) br label %endif10971 else10970: %t358 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t358, ptr %a359 store { ptr, i64, i64 } { ptr @.str.7149, i64 3, i64 0 }, ptr %a360 %t361 = call i32 @finch_str_eq(ptr %a359, ptr %a360) %t362 = icmp ne i32 %t361, 0 br i1 %t362, label %then10972, label %else10973 then10972: %t363 = call { ptr, i64, i64 } @finch.docs.strMethods() call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t363) store { ptr, i64, i64 } %t363, ptr %a364 call void @finch.drop.arr_S_docs_Doc(ptr %a364) br label %endif10974 else10973: %t365 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t365, ptr %a366 store { ptr, i64, i64 } { ptr @.str.7151, i64 4, i64 0 }, ptr %a368 %t369 = call i32 @finch_str_starts(ptr %a366, ptr %a368) %t370 = icmp ne i32 %t369, 0 br i1 %t370, label %then10975, label %else10976 then10975: %t371 = call { ptr, i64, i64 } @finch.docs.mapMethods() call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t371) store { ptr, i64, i64 } %t371, ptr %a372 call void @finch.drop.arr_S_docs_Doc(ptr %a372) br label %endif10977 else10976: %t373 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t373, ptr %a374 call void @finch_str_copy(ptr %a375, ptr %a374) %t376 = load { ptr, i64, i64 }, ptr %a375 store { ptr, i64, i64 } %t376, ptr %a377 %t378 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 store i64 0, ptr %a379 br label %each.cond10978 each.cond10978: %t380 = getelementptr inbounds { ptr, i64, i64 }, ptr %t378, i32 0, i32 1 %t381 = load i64, ptr %t380 %t382 = load i64, ptr %a379 %t383 = icmp slt i64 %t382, %t381 br i1 %t383, label %each.body10979, label %each.end10981 each.body10979: %t384 = load ptr, ptr %t378 %t385 = getelementptr inbounds %S.lsp.StructRec, ptr %t384, i64 %t382 %t386 = load %S.lsp.StructRec, ptr %t385 store %S.lsp.StructRec %t386, ptr %a387 %t388 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 1 %t389 = load { ptr, i64, i64 }, ptr %t388 %t390 = load { ptr, i64, i64 }, ptr %a377 store { ptr, i64, i64 } %t389, ptr %a391 store { ptr, i64, i64 } %t390, ptr %a392 %t393 = call i32 @finch_str_eq(ptr %a391, ptr %a392) %t394 = icmp ne i32 %t393, 0 br i1 %t394, label %then10982, label %endif10984 then10982: %t395 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 5 %t396 = getelementptr inbounds { ptr, i64, i64 }, ptr %t395, i32 0, i32 1 %t397 = load i64, ptr %t396 store i64 0, ptr %a398 br label %for.cond10985 for.cond10985: %t399 = load i64, ptr %a398 %t400 = icmp slt i64 %t399, %t397 br i1 %t400, label %for.body10986, label %for.end10988 for.body10986: %t401 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 5 %t402 = load i64, ptr %a398 %t403 = load { ptr, i64, i64 }, ptr %t401 %t404 = extractvalue { ptr, i64, i64 } %t403, 1 %t405 = icmp uge i64 %t402, %t404 br i1 %t405, label %range10989, label %inrange10990 range10989: call void @finch_panic_index(ptr @.str.7152, i64 587, i64 %t402, i64 %t404) unreachable inrange10990: %t406 = extractvalue { ptr, i64, i64 } %t403, 0 %t407 = getelementptr inbounds { ptr, i64, i64 }, ptr %t406, i64 %t402 %t408 = load { ptr, i64, i64 }, ptr %t407 %t409 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 6 %t410 = load i64, ptr %a398 %t411 = load { ptr, i64, i64 }, ptr %t409 %t412 = extractvalue { ptr, i64, i64 } %t411, 1 %t413 = icmp uge i64 %t410, %t412 br i1 %t413, label %range10991, label %inrange10992 range10991: call void @finch_panic_index(ptr @.str.7153, i64 587, i64 %t410, i64 %t412) unreachable inrange10992: %t414 = extractvalue { ptr, i64, i64 } %t411, 0 %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %t414, i64 %t410 %t416 = load { ptr, i64, i64 }, ptr %t415 %t417 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t408, i64 5, { ptr, i64, i64 } %t416, { ptr, i64, i64 } { ptr @.str.7154, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t417) store %S.json.Json %t417, ptr %a418 call void @finch.drop.S_json_Json(ptr %a418) br label %for.step10987 for.step10987: %t419 = load i64, ptr %a398 %t420 = add i64 %t419, 1 store i64 %t420, ptr %a398 br label %for.cond10985 for.end10988: br label %endif10984 endif10984: br label %each.step10980 each.step10980: %t421 = load i64, ptr %a379 %t422 = add i64 %t421, 1 store i64 %t422, ptr %a379 br label %each.cond10978 each.end10981: %t423 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a424 br label %each.cond10993 each.cond10993: %t425 = getelementptr inbounds { ptr, i64, i64 }, ptr %t423, i32 0, i32 1 %t426 = load i64, ptr %t425 %t427 = load i64, ptr %a424 %t428 = icmp slt i64 %t427, %t426 br i1 %t428, label %each.body10994, label %each.end10996 each.body10994: %t429 = load ptr, ptr %t423 %t430 = getelementptr inbounds %S.lsp.FnRec, ptr %t429, i64 %t427 %t431 = load %S.lsp.FnRec, ptr %t430 store %S.lsp.FnRec %t431, ptr %a432 %t433 = getelementptr inbounds %S.lsp.FnRec, ptr %a432, i32 0, i32 2 %t434 = load { ptr, i64, i64 }, ptr %t433 %t435 = load { ptr, i64, i64 }, ptr %a377 store { ptr, i64, i64 } %t434, ptr %a436 store { ptr, i64, i64 } %t435, ptr %a437 %t438 = call i32 @finch_str_eq(ptr %a436, ptr %a437) %t439 = icmp ne i32 %t438, 0 br i1 %t439, label %then10997, label %endif10999 then10997: %t440 = getelementptr inbounds %S.lsp.FnRec, ptr %a432, i32 0, i32 1 %t441 = load { ptr, i64, i64 }, ptr %t440 %t442 = getelementptr inbounds %S.lsp.FnRec, ptr %a432, i32 0, i32 7 %t443 = load { ptr, i64, i64 }, ptr %t442 %t444 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t441, i64 2, { ptr, i64, i64 } %t443, { ptr, i64, i64 } { ptr @.str.7155, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t444) store %S.json.Json %t444, ptr %a445 call void @finch.drop.S_json_Json(ptr %a445) br label %endif10999 endif10999: br label %each.step10995 each.step10995: %t446 = load i64, ptr %a424 %t447 = add i64 %t446, 1 store i64 %t447, ptr %a424 br label %each.cond10993 each.end10996: call void @finch_str_drop(ptr %a377) br label %endif10977 endif10977: br label %endif10974 endif10974: br label %endif10971 endif10971: %t448 = load %S.json.Json, ptr %a7 %t449 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t448) call void @finch_str_drop(ptr %a302) call void @finch_str_drop(ptr %a102) call void @finch_str_drop(ptr %a26) call void @finch_str_drop(ptr %a11) call void @finch.drop.S_json_Json(ptr %a7) ret %S.json.Json %t449 endif10875: store %S.lsp.Names zeroinitializer, ptr %a450 %t451 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 1 store i64 0, ptr %a452 br label %each.cond11000 each.cond11000: %t453 = getelementptr inbounds { ptr, i64, i64 }, ptr %t451, i32 0, i32 1 %t454 = load i64, ptr %t453 %t455 = load i64, ptr %a452 %t456 = icmp slt i64 %t455, %t454 br i1 %t456, label %each.body11001, label %each.end11003 each.body11001: %t457 = load ptr, ptr %t451 %t458 = getelementptr inbounds %S.lsp.VarRec, ptr %t457, i64 %t455 %t459 = load %S.lsp.VarRec, ptr %t458 store %S.lsp.VarRec %t459, ptr %a460 %t461 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 3 %t462 = load i64, ptr %t461 %t463 = load i64, ptr %a4 %t464 = icmp sle i64 %t462, %t463 br label %logic.from11004 logic.from11004: br i1 %t464, label %logic.rhs11005, label %logic.end11006 logic.rhs11005: %t465 = load i64, ptr %a4 %t466 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 7 %t467 = load i64, ptr %t466 %t468 = add i64 %t467, 1 %t469 = icmp sle i64 %t465, %t468 br label %logic.rend11007 logic.rend11007: br label %logic.end11006 logic.end11006: %t470 = phi i1 [ false, %logic.from11004 ], [ %t469, %logic.rend11007 ] br label %logic.from11008 logic.from11008: br i1 %t470, label %logic.rhs11009, label %logic.end11010 logic.rhs11009: %t471 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 5 %t472 = load { ptr, i64, i64 }, ptr %t471 %t473 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t472, ptr %a474 store { ptr, i64, i64 } %t473, ptr %a475 %t476 = call i32 @finch_str_eq(ptr %a474, ptr %a475) %t477 = icmp ne i32 %t476, 0 br label %logic.rend11011 logic.rend11011: br label %logic.end11010 logic.end11010: %t478 = phi i1 [ false, %logic.from11008 ], [ %t477, %logic.rend11011 ] br label %logic.from11012 logic.from11012: br i1 %t478, label %logic.rhs11013, label %logic.end11014 logic.rhs11013: %t479 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 0 %t480 = load { ptr, i64, i64 }, ptr %t479 %t481 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t480) br label %logic.rend11015 logic.rend11015: br label %logic.end11014 logic.end11014: %t482 = phi i1 [ false, %logic.from11012 ], [ %t481, %logic.rend11015 ] br i1 %t482, label %then11016, label %endif11018 then11016: %t483 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 0 %t484 = load { ptr, i64, i64 }, ptr %t483 %t485 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 1 %t486 = load { ptr, i64, i64 }, ptr %t485 %t487 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t484, i64 6, { ptr, i64, i64 } %t486, { ptr, i64, i64 } { ptr @.str.7156, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t487) store %S.json.Json %t487, ptr %a488 call void @finch.drop.S_json_Json(ptr %a488) br label %endif11018 endif11018: br label %each.step11002 each.step11002: %t489 = load i64, ptr %a452 %t490 = add i64 %t489, 1 store i64 %t490, ptr %a452 br label %each.cond11000 each.end11003: %t491 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a492 br label %each.cond11019 each.cond11019: %t493 = getelementptr inbounds { ptr, i64, i64 }, ptr %t491, i32 0, i32 1 %t494 = load i64, ptr %t493 %t495 = load i64, ptr %a492 %t496 = icmp slt i64 %t495, %t494 br i1 %t496, label %each.body11020, label %each.end11022 each.body11020: %t497 = load ptr, ptr %t491 %t498 = getelementptr inbounds %S.lsp.FnRec, ptr %t497, i64 %t495 %t499 = load %S.lsp.FnRec, ptr %t498 store %S.lsp.FnRec %t499, ptr %a500 %t501 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 2 %t502 = getelementptr inbounds { ptr, i64, i64 }, ptr %t501, i32 0, i32 1 %t503 = load i64, ptr %t502 %t504 = icmp eq i64 %t503, 0 br label %logic.from11023 logic.from11023: br i1 %t504, label %logic.rhs11024, label %logic.end11025 logic.rhs11024: %t505 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 0 %t506 = load { ptr, i64, i64 }, ptr %t505 store { ptr, i64, i64 } %t506, ptr %a507 store { ptr, i64, i64 } { ptr @.str.7157, i64 0, i64 0 }, ptr %a508 %t509 = call i32 @finch_str_eq(ptr %a507, ptr %a508) %t510 = icmp ne i32 %t509, 0 br label %logic.rend11026 logic.rend11026: br label %logic.end11025 logic.end11025: %t511 = phi i1 [ false, %logic.from11023 ], [ %t510, %logic.rend11026 ] br label %logic.from11027 logic.from11027: br i1 %t511, label %logic.rhs11028, label %logic.end11029 logic.rhs11028: %t512 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 1 %t513 = load { ptr, i64, i64 }, ptr %t512 %t514 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t513) br label %logic.rend11030 logic.rend11030: br label %logic.end11029 logic.end11029: %t515 = phi i1 [ false, %logic.from11027 ], [ %t514, %logic.rend11030 ] br i1 %t515, label %then11031, label %endif11033 then11031: %t516 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 1 %t517 = load { ptr, i64, i64 }, ptr %t516 %t518 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 7 %t519 = load { ptr, i64, i64 }, ptr %t518 %t520 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t517, i64 3, { ptr, i64, i64 } %t519, { ptr, i64, i64 } { ptr @.str.7158, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t520) store %S.json.Json %t520, ptr %a521 call void @finch.drop.S_json_Json(ptr %a521) br label %endif11033 endif11033: br label %each.step11021 each.step11021: %t522 = load i64, ptr %a492 %t523 = add i64 %t522, 1 store i64 %t523, ptr %a492 br label %each.cond11019 each.end11022: %t524 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 store i64 0, ptr %a525 br label %each.cond11034 each.cond11034: %t526 = getelementptr inbounds { ptr, i64, i64 }, ptr %t524, i32 0, i32 1 %t527 = load i64, ptr %t526 %t528 = load i64, ptr %a525 %t529 = icmp slt i64 %t528, %t527 br i1 %t529, label %each.body11035, label %each.end11037 each.body11035: %t530 = load ptr, ptr %t524 %t531 = getelementptr inbounds %S.lsp.StructRec, ptr %t530, i64 %t528 %t532 = load %S.lsp.StructRec, ptr %t531 store %S.lsp.StructRec %t532, ptr %a533 %t534 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 0 %t535 = load { ptr, i64, i64 }, ptr %t534 store { ptr, i64, i64 } %t535, ptr %a536 store { ptr, i64, i64 } { ptr @.str.7159, i64 0, i64 0 }, ptr %a537 %t538 = call i32 @finch_str_eq(ptr %a536, ptr %a537) %t539 = icmp ne i32 %t538, 0 br label %logic.from11038 logic.from11038: br i1 %t539, label %logic.rhs11039, label %logic.end11040 logic.rhs11039: %t540 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 %t541 = load { ptr, i64, i64 }, ptr %t540 %t542 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t541) br label %logic.rend11041 logic.rend11041: br label %logic.end11040 logic.end11040: %t543 = phi i1 [ false, %logic.from11038 ], [ %t542, %logic.rend11041 ] br i1 %t543, label %then11042, label %endif11044 then11042: %t544 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 %t545 = load { ptr, i64, i64 }, ptr %t544 %t546 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 %t547 = load { ptr, i64, i64 }, ptr %t546 store { ptr, i64, i64 } { ptr @.str.7160, i64 7, i64 0 }, ptr %a549 store { ptr, i64, i64 } %t547, ptr %a550 call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) %t551 = load { ptr, i64, i64 }, ptr %a548 %t552 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t545, i64 22, { ptr, i64, i64 } %t551, { ptr, i64, i64 } { ptr @.str.7161, i64 0, i64 0 }) store { ptr, i64, i64 } %t551, ptr %a553 call void @finch_str_drop(ptr %a553) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t552) store %S.json.Json %t552, ptr %a554 call void @finch.drop.S_json_Json(ptr %a554) br label %endif11044 endif11044: br label %each.step11036 each.step11036: %t555 = load i64, ptr %a525 %t556 = add i64 %t555, 1 store i64 %t556, ptr %a525 br label %each.cond11034 each.end11037: %t557 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 store i64 0, ptr %a558 br label %each.cond11045 each.cond11045: %t559 = getelementptr inbounds { ptr, i64, i64 }, ptr %t557, i32 0, i32 1 %t560 = load i64, ptr %t559 %t561 = load i64, ptr %a558 %t562 = icmp slt i64 %t561, %t560 br i1 %t562, label %each.body11046, label %each.end11048 each.body11046: %t563 = load ptr, ptr %t557 %t564 = getelementptr inbounds %S.lsp.EnumRec, ptr %t563, i64 %t561 %t565 = load %S.lsp.EnumRec, ptr %t564 store %S.lsp.EnumRec %t565, ptr %a566 %t567 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 0 %t568 = load { ptr, i64, i64 }, ptr %t567 store { ptr, i64, i64 } %t568, ptr %a569 store { ptr, i64, i64 } { ptr @.str.7162, i64 0, i64 0 }, ptr %a570 %t571 = call i32 @finch_str_eq(ptr %a569, ptr %a570) %t572 = icmp ne i32 %t571, 0 br label %logic.from11049 logic.from11049: br i1 %t572, label %logic.rhs11050, label %logic.end11051 logic.rhs11050: %t573 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 %t574 = load { ptr, i64, i64 }, ptr %t573 %t575 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t574) br label %logic.rend11052 logic.rend11052: br label %logic.end11051 logic.end11051: %t576 = phi i1 [ false, %logic.from11049 ], [ %t575, %logic.rend11052 ] br i1 %t576, label %then11053, label %endif11055 then11053: %t577 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 %t578 = load { ptr, i64, i64 }, ptr %t577 %t579 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 %t580 = load { ptr, i64, i64 }, ptr %t579 store { ptr, i64, i64 } { ptr @.str.7163, i64 5, i64 0 }, ptr %a582 store { ptr, i64, i64 } %t580, ptr %a583 call void @finch_str_concat(ptr %a581, ptr %a582, ptr %a583) %t584 = load { ptr, i64, i64 }, ptr %a581 %t585 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t578, i64 13, { ptr, i64, i64 } %t584, { ptr, i64, i64 } { ptr @.str.7164, i64 0, i64 0 }) store { ptr, i64, i64 } %t584, ptr %a586 call void @finch_str_drop(ptr %a586) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t585) store %S.json.Json %t585, ptr %a587 call void @finch.drop.S_json_Json(ptr %a587) br label %endif11055 endif11055: br label %each.step11047 each.step11047: %t588 = load i64, ptr %a558 %t589 = add i64 %t588, 1 store i64 %t589, ptr %a558 br label %each.cond11045 each.end11048: %t590 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 5 store i64 0, ptr %a591 br label %each.cond11056 each.cond11056: %t592 = getelementptr inbounds { ptr, i64, i64 }, ptr %t590, i32 0, i32 1 %t593 = load i64, ptr %t592 %t594 = load i64, ptr %a591 %t595 = icmp slt i64 %t594, %t593 br i1 %t595, label %each.body11057, label %each.end11059 each.body11057: %t596 = load ptr, ptr %t590 %t597 = getelementptr inbounds { ptr, i64, i64 }, ptr %t596, i64 %t594 %t598 = load { ptr, i64, i64 }, ptr %t597 store { ptr, i64, i64 } %t598, ptr %a599 %t600 = load { ptr, i64, i64 }, ptr %a599 %t601 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t600) br i1 %t601, label %then11060, label %endif11062 then11060: %t602 = load { ptr, i64, i64 }, ptr %a599 %t603 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t602, i64 9, { ptr, i64, i64 } { ptr @.str.7165, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.7166, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t603) store %S.json.Json %t603, ptr %a604 call void @finch.drop.S_json_Json(ptr %a604) br label %endif11062 endif11062: br label %each.step11058 each.step11058: %t605 = load i64, ptr %a591 %t606 = add i64 %t605, 1 store i64 %t606, ptr %a591 br label %each.cond11056 each.end11059: %t607 = call { ptr, i64, i64 } @finch.docs.builtins() store { ptr, i64, i64 } %t607, ptr %a608 store i64 0, ptr %a609 br label %each.cond11063 each.cond11063: %t610 = getelementptr inbounds { ptr, i64, i64 }, ptr %a608, i32 0, i32 1 %t611 = load i64, ptr %t610 %t612 = load i64, ptr %a609 %t613 = icmp slt i64 %t612, %t611 br i1 %t613, label %each.body11064, label %each.end11066 each.body11064: %t614 = load ptr, ptr %a608 %t615 = getelementptr inbounds %S.docs.Doc, ptr %t614, i64 %t612 %t616 = load %S.docs.Doc, ptr %t615 store %S.docs.Doc %t616, ptr %a617 %t618 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 0 %t619 = load { ptr, i64, i64 }, ptr %t618 %t620 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t619) br i1 %t620, label %then11067, label %endif11069 then11067: %t621 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 0 %t622 = load { ptr, i64, i64 }, ptr %t621 %t623 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 1 %t624 = load { ptr, i64, i64 }, ptr %t623 %t625 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 2 %t626 = load { ptr, i64, i64 }, ptr %t625 %t627 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t622, i64 3, { ptr, i64, i64 } %t624, { ptr, i64, i64 } %t626) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t627) store %S.json.Json %t627, ptr %a628 call void @finch.drop.S_json_Json(ptr %a628) br label %endif11069 endif11069: br label %each.step11065 each.step11065: %t629 = load i64, ptr %a609 %t630 = add i64 %t629, 1 store i64 %t630, ptr %a609 br label %each.cond11063 each.end11066: call void @finch.drop.arr_S_docs_Doc(ptr %a608) %t631 = call { ptr, i64, i64 } @finch.docs.keywords() store { ptr, i64, i64 } %t631, ptr %a632 store i64 0, ptr %a633 br label %each.cond11070 each.cond11070: %t634 = getelementptr inbounds { ptr, i64, i64 }, ptr %a632, i32 0, i32 1 %t635 = load i64, ptr %t634 %t636 = load i64, ptr %a633 %t637 = icmp slt i64 %t636, %t635 br i1 %t637, label %each.body11071, label %each.end11073 each.body11071: %t638 = load ptr, ptr %a632 %t639 = getelementptr inbounds { ptr, i64, i64 }, ptr %t638, i64 %t636 %t640 = load { ptr, i64, i64 }, ptr %t639 store { ptr, i64, i64 } %t640, ptr %a641 %t642 = load { ptr, i64, i64 }, ptr %a641 %t643 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t642) br i1 %t643, label %then11074, label %endif11076 then11074: %t644 = load { ptr, i64, i64 }, ptr %a641 %t645 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t644, i64 14, { ptr, i64, i64 } { ptr @.str.7167, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7168, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t645) store %S.json.Json %t645, ptr %a646 call void @finch.drop.S_json_Json(ptr %a646) br label %endif11076 endif11076: br label %each.step11072 each.step11072: %t647 = load i64, ptr %a633 %t648 = add i64 %t647, 1 store i64 %t648, ptr %a633 br label %each.cond11070 each.end11073: call void @finch.drop.arr_str(ptr %a632) %t649 = call { ptr, i64, i64 } @finch.docs.typeNames() store { ptr, i64, i64 } %t649, ptr %a650 store i64 0, ptr %a651 br label %each.cond11077 each.cond11077: %t652 = getelementptr inbounds { ptr, i64, i64 }, ptr %a650, i32 0, i32 1 %t653 = load i64, ptr %t652 %t654 = load i64, ptr %a651 %t655 = icmp slt i64 %t654, %t653 br i1 %t655, label %each.body11078, label %each.end11080 each.body11078: %t656 = load ptr, ptr %a650 %t657 = getelementptr inbounds { ptr, i64, i64 }, ptr %t656, i64 %t654 %t658 = load { ptr, i64, i64 }, ptr %t657 store { ptr, i64, i64 } %t658, ptr %a659 %t660 = load { ptr, i64, i64 }, ptr %a659 %t661 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t660) br i1 %t661, label %then11081, label %endif11083 then11081: %t662 = load { ptr, i64, i64 }, ptr %a659 %t663 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t662, i64 25, { ptr, i64, i64 } { ptr @.str.7169, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7170, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t663) store %S.json.Json %t663, ptr %a664 call void @finch.drop.S_json_Json(ptr %a664) br label %endif11083 endif11083: br label %each.step11079 each.step11079: %t665 = load i64, ptr %a651 %t666 = add i64 %t665, 1 store i64 %t666, ptr %a651 br label %each.cond11077 each.end11080: call void @finch.drop.arr_str(ptr %a650) %t667 = load %S.json.Json, ptr %a7 %t668 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t667) call void @finch.drop.S_lsp_Names(ptr %a450) call void @finch_str_drop(ptr %a26) call void @finch_str_drop(ptr %a11) call void @finch.drop.S_json_Json(ptr %a7) ret %S.json.Json %t668 } define internal i1 @finch.lsp.Names.add(ptr %self, { ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca i64, align 16 %a8 = alloca i64, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds %S.lsp.Names, ptr %self, i32 0, i32 0 %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i32 0, i32 1 %t4 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a5 %t6 = load i64, ptr %t3 %t7 = load ptr, ptr %t2 store i64 0, ptr %a8 br label %find.cond11084 find.cond11084: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t6 br i1 %t10, label %find.body11085, label %find.end11088 find.body11085: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 %t9 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } %t4, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 br i1 %t16, label %find.hit11086, label %find.next11087 find.hit11086: store i64 %t9, ptr %a5 br label %find.end11088 find.next11087: %t17 = add i64 %t9, 1 store i64 %t17, ptr %a8 br label %find.cond11084 find.end11088: %t18 = load i64, ptr %a5 %t19 = icmp sge i64 %t18, 0 br i1 %t19, label %then11089, label %endif11091 then11089: ret i1 false endif11091: %t20 = getelementptr inbounds %S.lsp.Names, ptr %self, i32 0, i32 0 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t22, ptr %a23 call void @finch_str_copy(ptr %a24, ptr %a23) %t25 = load { ptr, i64, i64 }, ptr %a24 %t26 = load i64, ptr %t21 %t27 = add i64 %t26, 1 call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t28 = load ptr, ptr %t20 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 store { ptr, i64, i64 } %t25, ptr %t29 store i64 %t27, ptr %t21 ret i1 true } define internal %S.json.Json @finch.lsp.completionList(%S.json.Json %p0) { entry: %a1 = alloca %S.json.Json, align 16 %a3 = alloca %S.json.Json, align 16 %a5 = alloca %S.json.Json, align 16 store %S.json.Json %p0, ptr %a1 %t2 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t2, ptr %a3 %t4 = call %S.json.Json @finch.json.new_bool(i1 false) call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.7171, i64 12, i64 0 }, %S.json.Json %t4) store %S.json.Json %t4, ptr %a5 call void @finch.drop.S_json_Json(ptr %a5) %t6 = load %S.json.Json, ptr %a1 call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.7172, i64 5, i64 0 }, %S.json.Json %t6) %t7 = load %S.json.Json, ptr %a3 ret %S.json.Json %t7 } define internal %S.json.Json @finch.lsp.signatureAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i64 %p3, i64 %p4) { entry: %a1 = alloca %S.lsp.Analysis, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca i64, align 16 %a5 = alloca i64, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca i64, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca i64, align 16 %a26 = alloca i64, align 16 %a27 = alloca i64, align 16 %a31 = alloca i64, align 16 %a41 = alloca i8, align 16 %a74 = alloca i64, align 16 %a76 = alloca i64, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca i64, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca %S.lsp.VarRec, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca i64, align 16 %a188 = alloca %S.lsp.FnRec, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca %S.json.Json, align 16 %a209 = alloca %S.json.Json, align 16 %a211 = alloca %S.json.Json, align 16 %a213 = alloca i64, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca %S.json.Json, align 16 %a229 = alloca %S.json.Json, align 16 %a235 = alloca %S.json.Json, align 16 %a238 = alloca %S.json.Json, align 16 %a241 = alloca %S.json.Json, align 16 %a244 = alloca %S.json.Json, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca %S.docs.Doc, align 16 %a258 = alloca %S.json.Json, align 16 %a262 = alloca %S.json.Json, align 16 %a266 = alloca %S.json.Json, align 16 %a268 = alloca %S.json.Json, align 16 %a271 = alloca %S.json.Json, align 16 %a274 = alloca %S.json.Json, align 16 %a277 = alloca %S.json.Json, align 16 store %S.lsp.Analysis %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store i64 %p3, ptr %a4 store i64 %p4, ptr %a5 %t6 = load { ptr, i64, i64 }, ptr %a2 %t7 = load i64, ptr %a4 %t8 = call { ptr, i64, i64 } @finch.lsp.lineOf({ ptr, i64, i64 } %t6, i64 %t7) store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load i64, ptr %a5 %t11 = sub i64 %t10, 1 store i64 %t11, ptr %a12 %t13 = load i64, ptr %a12 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = icmp sgt i64 %t13, %t15 br i1 %t16, label %then11092, label %endif11094 then11092: %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t18 = load i64, ptr %t17 store i64 %t18, ptr %a12 br label %endif11094 endif11094: %t19 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t19, ptr %a20 %t22 = load i64, ptr %a12 call void @finch_str_sub(ptr %a21, ptr %a20, i64 0, i64 %t22, ptr @.str.7173, i64 671) %t23 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t23, ptr %a24 store i64 0, ptr %a25 store i64 0, ptr %a26 store i64 -1, ptr %a27 %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %a24, i32 0, i32 1 %t29 = load i64, ptr %t28 %t30 = sub i64 %t29, 1 store i64 %t30, ptr %a31 br label %while.cond11095 while.cond11095: %t32 = load i64, ptr %a31 %t33 = icmp sge i64 %t32, 0 br i1 %t33, label %while.body11096, label %while.end11097 while.body11096: %t34 = load i64, ptr %a31 %t35 = load { ptr, i64, i64 }, ptr %a24 %t36 = extractvalue { ptr, i64, i64 } %t35, 1 %t37 = icmp uge i64 %t34, %t36 br i1 %t37, label %range11098, label %inrange11099 range11098: call void @finch_panic_index(ptr @.str.7174, i64 678, i64 %t34, i64 %t36) unreachable inrange11099: %t38 = extractvalue { ptr, i64, i64 } %t35, 0 %t39 = getelementptr inbounds i8, ptr %t38, i64 %t34 %t40 = load i8, ptr %t39 store i8 %t40, ptr %a41 %t42 = load i8, ptr %a41 %t43 = icmp eq i8 %t42, 41 br label %logic.from11100 logic.from11100: br i1 %t43, label %logic.end11102, label %logic.rhs11101 logic.rhs11101: %t44 = load i8, ptr %a41 %t45 = icmp eq i8 %t44, 93 br label %logic.rend11103 logic.rend11103: br label %logic.end11102 logic.end11102: %t46 = phi i1 [ true, %logic.from11100 ], [ %t45, %logic.rend11103 ] br i1 %t46, label %then11104, label %else11105 then11104: %t47 = load i64, ptr %a25 %t48 = add i64 %t47, 1 store i64 %t48, ptr %a25 br label %endif11106 else11105: %t49 = load i8, ptr %a41 %t50 = icmp eq i8 %t49, 40 br label %logic.from11107 logic.from11107: br i1 %t50, label %logic.end11109, label %logic.rhs11108 logic.rhs11108: %t51 = load i8, ptr %a41 %t52 = icmp eq i8 %t51, 91 br label %logic.rend11110 logic.rend11110: br label %logic.end11109 logic.end11109: %t53 = phi i1 [ true, %logic.from11107 ], [ %t52, %logic.rend11110 ] br i1 %t53, label %then11111, label %else11112 then11111: %t54 = load i64, ptr %a25 %t55 = icmp eq i64 %t54, 0 br i1 %t55, label %then11114, label %else11115 then11114: %t56 = load i8, ptr %a41 %t57 = icmp eq i8 %t56, 40 br i1 %t57, label %then11117, label %endif11119 then11117: %t58 = load i64, ptr %a31 store i64 %t58, ptr %a27 br label %while.end11097 endif11119: br label %endif11116 else11115: %t59 = load i64, ptr %a25 %t60 = sub i64 %t59, 1 store i64 %t60, ptr %a25 br label %endif11116 endif11116: br label %endif11113 else11112: %t61 = load i8, ptr %a41 %t62 = icmp eq i8 %t61, 44 br label %logic.from11120 logic.from11120: br i1 %t62, label %logic.rhs11121, label %logic.end11122 logic.rhs11121: %t63 = load i64, ptr %a25 %t64 = icmp eq i64 %t63, 0 br label %logic.rend11123 logic.rend11123: br label %logic.end11122 logic.end11122: %t65 = phi i1 [ false, %logic.from11120 ], [ %t64, %logic.rend11123 ] br i1 %t65, label %then11124, label %endif11126 then11124: %t66 = load i64, ptr %a26 %t67 = add i64 %t66, 1 store i64 %t67, ptr %a26 br label %endif11126 endif11126: br label %endif11113 endif11113: br label %endif11106 endif11106: %t68 = load i64, ptr %a31 %t69 = sub i64 %t68, 1 store i64 %t69, ptr %a31 br label %while.cond11095 while.end11097: %t70 = load i64, ptr %a27 %t71 = icmp slt i64 %t70, 0 br i1 %t71, label %then11127, label %endif11129 then11127: %t72 = call %S.json.Json @finch.json.new_null() call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a9) ret %S.json.Json %t72 endif11129: %t73 = load i64, ptr %a27 store i64 %t73, ptr %a74 %t75 = load i64, ptr %a74 store i64 %t75, ptr %a76 br label %while.cond11130 while.cond11130: %t77 = load i64, ptr %a76 %t78 = icmp sgt i64 %t77, 0 br label %logic.from11133 logic.from11133: br i1 %t78, label %logic.rhs11134, label %logic.end11135 logic.rhs11134: %t79 = load i64, ptr %a76 %t80 = sub i64 %t79, 1 %t81 = load { ptr, i64, i64 }, ptr %a24 %t82 = extractvalue { ptr, i64, i64 } %t81, 1 %t83 = icmp uge i64 %t80, %t82 br i1 %t83, label %range11136, label %inrange11137 range11136: call void @finch_panic_index(ptr @.str.7175, i64 700, i64 %t80, i64 %t82) unreachable inrange11137: %t84 = extractvalue { ptr, i64, i64 } %t81, 0 %t85 = getelementptr inbounds i8, ptr %t84, i64 %t80 %t86 = load i8, ptr %t85 %t87 = call i1 @finch.lsp.isWordChar(i8 %t86) br label %logic.rend11138 logic.rend11138: br label %logic.end11135 logic.end11135: %t88 = phi i1 [ false, %logic.from11133 ], [ %t87, %logic.rend11138 ] br i1 %t88, label %while.body11131, label %while.end11132 while.body11131: %t89 = load i64, ptr %a76 %t90 = sub i64 %t89, 1 store i64 %t90, ptr %a76 br label %while.cond11130 while.end11132: %t91 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t91, ptr %a92 %t94 = load i64, ptr %a76 %t95 = load i64, ptr %a74 call void @finch_str_sub(ptr %a93, ptr %a92, i64 %t94, i64 %t95, ptr @.str.7176, i64 703) %t96 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t96, ptr %a97 %t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %a97, i32 0, i32 1 %t99 = load i64, ptr %t98 %t100 = icmp eq i64 %t99, 0 br i1 %t100, label %then11139, label %endif11141 then11139: %t101 = call %S.json.Json @finch.json.new_null() call void @finch_str_drop(ptr %a97) call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a9) ret %S.json.Json %t101 endif11141: store { ptr, i64, i64 } { ptr @.str.7177, i64 0, i64 0 }, ptr %a102 %t103 = load i64, ptr %a76 %t104 = icmp sgt i64 %t103, 0 br label %logic.from11142 logic.from11142: br i1 %t104, label %logic.rhs11143, label %logic.end11144 logic.rhs11143: %t105 = load i64, ptr %a76 %t106 = sub i64 %t105, 1 %t107 = load { ptr, i64, i64 }, ptr %a24 %t108 = extractvalue { ptr, i64, i64 } %t107, 1 %t109 = icmp uge i64 %t106, %t108 br i1 %t109, label %range11145, label %inrange11146 range11145: call void @finch_panic_index(ptr @.str.7178, i64 708, i64 %t106, i64 %t108) unreachable inrange11146: %t110 = extractvalue { ptr, i64, i64 } %t107, 0 %t111 = getelementptr inbounds i8, ptr %t110, i64 %t106 %t112 = load i8, ptr %t111 %t113 = icmp eq i8 %t112, 46 br label %logic.rend11147 logic.rend11147: br label %logic.end11144 logic.end11144: %t114 = phi i1 [ false, %logic.from11142 ], [ %t113, %logic.rend11147 ] br i1 %t114, label %then11148, label %endif11150 then11148: %t115 = load i64, ptr %a76 %t116 = sub i64 %t115, 1 store i64 %t116, ptr %a117 br label %while.cond11151 while.cond11151: %t118 = load i64, ptr %a117 %t119 = icmp sgt i64 %t118, 0 br label %logic.from11154 logic.from11154: br i1 %t119, label %logic.rhs11155, label %logic.end11156 logic.rhs11155: %t120 = load i64, ptr %a117 %t121 = sub i64 %t120, 1 %t122 = load { ptr, i64, i64 }, ptr %a24 %t123 = extractvalue { ptr, i64, i64 } %t122, 1 %t124 = icmp uge i64 %t121, %t123 br i1 %t124, label %range11157, label %inrange11158 range11157: call void @finch_panic_index(ptr @.str.7179, i64 711, i64 %t121, i64 %t123) unreachable inrange11158: %t125 = extractvalue { ptr, i64, i64 } %t122, 0 %t126 = getelementptr inbounds i8, ptr %t125, i64 %t121 %t127 = load i8, ptr %t126 %t128 = call i1 @finch.lsp.isWordChar(i8 %t127) br label %logic.rend11159 logic.rend11159: br label %logic.end11156 logic.end11156: %t129 = phi i1 [ false, %logic.from11154 ], [ %t128, %logic.rend11159 ] br i1 %t129, label %while.body11152, label %while.end11153 while.body11152: %t130 = load i64, ptr %a117 %t131 = sub i64 %t130, 1 store i64 %t131, ptr %a117 br label %while.cond11151 while.end11153: %t132 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t132, ptr %a133 %t135 = load i64, ptr %a117 %t136 = load i64, ptr %a76 %t137 = sub i64 %t136, 1 call void @finch_str_sub(ptr %a134, ptr %a133, i64 %t135, i64 %t137, ptr @.str.7180, i64 714) %t138 = load { ptr, i64, i64 }, ptr %a134 store { ptr, i64, i64 } %t138, ptr %a139 %t140 = load %S.lsp.Analysis, ptr %a1 %t141 = load { ptr, i64, i64 }, ptr %a3 %t142 = load { ptr, i64, i64 }, ptr %a139 %t143 = load i64, ptr %a4 %t144 = call %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %t140, { ptr, i64, i64 } %t141, { ptr, i64, i64 } %t142, i64 %t143) %t145 = extractvalue %S.lsp.VarRec %t144, 1 store { ptr, i64, i64 } %t145, ptr %a146 call void @finch_str_copy(ptr %a147, ptr %a146) %t148 = load { ptr, i64, i64 }, ptr %a147 store %S.lsp.VarRec %t144, ptr %a149 call void @finch.drop.S_lsp_VarRec(ptr %a149) store { ptr, i64, i64 } %t148, ptr %a150 %t151 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } %t151, ptr %a152 store { ptr, i64, i64 } { ptr @.str.7182, i64 4, i64 0 }, ptr %a154 %t155 = call i32 @finch_str_starts(ptr %a152, ptr %a154) %t156 = icmp ne i32 %t155, 0 br label %logic.from11160 logic.from11160: br i1 %t156, label %logic.rhs11161, label %logic.end11162 logic.rhs11161: %t157 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } %t157, ptr %a158 store { ptr, i64, i64 } { ptr @.str.7184, i64 1, i64 0 }, ptr %a160 %t161 = call i32 @finch_str_ends(ptr %a158, ptr %a160) %t162 = icmp ne i32 %t161, 0 br label %logic.rend11163 logic.rend11163: br label %logic.end11162 logic.end11162: %t163 = phi i1 [ false, %logic.from11160 ], [ %t162, %logic.rend11163 ] br i1 %t163, label %then11164, label %endif11166 then11164: %t164 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } %t164, ptr %a165 %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %a150, i32 0, i32 1 %t168 = load i64, ptr %t167 %t169 = sub i64 %t168, 1 call void @finch_str_sub(ptr %a166, ptr %a165, i64 4, i64 %t169, ptr @.str.7185, i64 717) %t170 = load { ptr, i64, i64 }, ptr %a166 %t171 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } %t170, ptr %a150 store { ptr, i64, i64 } %t171, ptr %a172 call void @finch_str_drop(ptr %a172) br label %endif11166 endif11166: %t173 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } %t173, ptr %a174 call void @finch_str_copy(ptr %a175, ptr %a174) %t176 = load { ptr, i64, i64 }, ptr %a175 %t177 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t176, ptr %a102 store { ptr, i64, i64 } %t177, ptr %a178 call void @finch_str_drop(ptr %a178) call void @finch_str_drop(ptr %a150) call void @finch_str_drop(ptr %a139) br label %endif11150 endif11150: %t179 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a180 br label %each.cond11167 each.cond11167: %t181 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 %t182 = load i64, ptr %t181 %t183 = load i64, ptr %a180 %t184 = icmp slt i64 %t183, %t182 br i1 %t184, label %each.body11168, label %each.end11170 each.body11168: %t185 = load ptr, ptr %t179 %t186 = getelementptr inbounds %S.lsp.FnRec, ptr %t185, i64 %t183 %t187 = load %S.lsp.FnRec, ptr %t186 store %S.lsp.FnRec %t187, ptr %a188 %t189 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 1 %t190 = load { ptr, i64, i64 }, ptr %t189 %t191 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } %t190, ptr %a192 store { ptr, i64, i64 } %t191, ptr %a193 %t194 = call i32 @finch_str_eq(ptr %a192, ptr %a193) %t195 = icmp ne i32 %t194, 0 br label %logic.from11171 logic.from11171: br i1 %t195, label %logic.rhs11172, label %logic.end11173 logic.rhs11172: %t196 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 2 %t197 = load { ptr, i64, i64 }, ptr %t196 %t198 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t197, ptr %a199 store { ptr, i64, i64 } %t198, ptr %a200 %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) %t202 = icmp ne i32 %t201, 0 br label %logic.rend11174 logic.rend11174: br label %logic.end11173 logic.end11173: %t203 = phi i1 [ false, %logic.from11171 ], [ %t202, %logic.rend11174 ] br i1 %t203, label %then11175, label %endif11177 then11175: %t204 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t204, ptr %a205 %t206 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 7 %t207 = load { ptr, i64, i64 }, ptr %t206 %t208 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t207) call void @finch.json.Json.set(ptr %a205, { ptr, i64, i64 } { ptr @.str.7186, i64 5, i64 0 }, %S.json.Json %t208) store %S.json.Json %t208, ptr %a209 call void @finch.drop.S_json_Json(ptr %a209) %t210 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t210, ptr %a211 %t212 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 8 store i64 0, ptr %a213 br label %each.cond11178 each.cond11178: %t214 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i32 0, i32 1 %t215 = load i64, ptr %t214 %t216 = load i64, ptr %a213 %t217 = icmp slt i64 %t216, %t215 br i1 %t217, label %each.body11179, label %each.end11181 each.body11179: %t218 = load ptr, ptr %t212 %t219 = getelementptr inbounds { ptr, i64, i64 }, ptr %t218, i64 %t216 %t220 = load { ptr, i64, i64 }, ptr %t219 store { ptr, i64, i64 } %t220, ptr %a221 %t222 = getelementptr inbounds { ptr, i64, i64 }, ptr %a221, i32 0, i32 1 %t223 = load i64, ptr %t222 %t224 = icmp sgt i64 %t223, 0 br i1 %t224, label %then11182, label %endif11184 then11182: %t225 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t225, ptr %a226 %t227 = load { ptr, i64, i64 }, ptr %a221 %t228 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t227) call void @finch.json.Json.set(ptr %a226, { ptr, i64, i64 } { ptr @.str.7187, i64 5, i64 0 }, %S.json.Json %t228) store %S.json.Json %t228, ptr %a229 call void @finch.drop.S_json_Json(ptr %a229) %t230 = load %S.json.Json, ptr %a226 call void @finch.json.Json.push(ptr %a211, %S.json.Json %t230) call void @finch.drop.S_json_Json(ptr %a226) br label %endif11184 endif11184: br label %each.step11180 each.step11180: %t231 = load i64, ptr %a213 %t232 = add i64 %t231, 1 store i64 %t232, ptr %a213 br label %each.cond11178 each.end11181: %t233 = load %S.json.Json, ptr %a211 call void @finch.json.Json.set(ptr %a205, { ptr, i64, i64 } { ptr @.str.7188, i64 10, i64 0 }, %S.json.Json %t233) %t234 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t234, ptr %a235 %t236 = load %S.json.Json, ptr %a205 call void @finch.json.Json.push(ptr %a235, %S.json.Json %t236) %t237 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t237, ptr %a238 %t239 = load %S.json.Json, ptr %a235 call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7189, i64 10, i64 0 }, %S.json.Json %t239) %t240 = call %S.json.Json @finch.lsp.num(i64 0) call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7190, i64 15, i64 0 }, %S.json.Json %t240) store %S.json.Json %t240, ptr %a241 call void @finch.drop.S_json_Json(ptr %a241) %t242 = load i64, ptr %a26 %t243 = call %S.json.Json @finch.lsp.num(i64 %t242) call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7191, i64 15, i64 0 }, %S.json.Json %t243) store %S.json.Json %t243, ptr %a244 call void @finch.drop.S_json_Json(ptr %a244) %t245 = load %S.json.Json, ptr %a238 call void @finch.drop.S_json_Json(ptr %a235) call void @finch.drop.S_json_Json(ptr %a211) call void @finch.drop.S_json_Json(ptr %a205) call void @finch_str_drop(ptr %a102) call void @finch_str_drop(ptr %a97) call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a9) ret %S.json.Json %t245 endif11177: br label %each.step11169 each.step11169: %t246 = load i64, ptr %a180 %t247 = add i64 %t246, 1 store i64 %t247, ptr %a180 br label %each.cond11167 each.end11170: %t248 = call { ptr, i64, i64 } @finch.docs.builtins() %t249 = load { ptr, i64, i64 }, ptr %a97 %t250 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t248, { ptr, i64, i64 } %t249) store { ptr, i64, i64 } %t248, ptr %a251 call void @finch.drop.arr_S_docs_Doc(ptr %a251) store %S.docs.Doc %t250, ptr %a252 %t253 = getelementptr inbounds %S.docs.Doc, ptr %a252, i32 0, i32 0 %t254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i32 0, i32 1 %t255 = load i64, ptr %t254 %t256 = icmp sgt i64 %t255, 0 br i1 %t256, label %then11185, label %endif11187 then11185: %t257 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t257, ptr %a258 %t259 = getelementptr inbounds %S.docs.Doc, ptr %a252, i32 0, i32 1 %t260 = load { ptr, i64, i64 }, ptr %t259 %t261 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t260) call void @finch.json.Json.set(ptr %a258, { ptr, i64, i64 } { ptr @.str.7192, i64 5, i64 0 }, %S.json.Json %t261) store %S.json.Json %t261, ptr %a262 call void @finch.drop.S_json_Json(ptr %a262) %t263 = getelementptr inbounds %S.docs.Doc, ptr %a252, i32 0, i32 2 %t264 = load { ptr, i64, i64 }, ptr %t263 %t265 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t264) call void @finch.json.Json.set(ptr %a258, { ptr, i64, i64 } { ptr @.str.7193, i64 13, i64 0 }, %S.json.Json %t265) store %S.json.Json %t265, ptr %a266 call void @finch.drop.S_json_Json(ptr %a266) %t267 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t267, ptr %a268 %t269 = load %S.json.Json, ptr %a258 call void @finch.json.Json.push(ptr %a268, %S.json.Json %t269) %t270 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t270, ptr %a271 %t272 = load %S.json.Json, ptr %a268 call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7194, i64 10, i64 0 }, %S.json.Json %t272) %t273 = call %S.json.Json @finch.lsp.num(i64 0) call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7195, i64 15, i64 0 }, %S.json.Json %t273) store %S.json.Json %t273, ptr %a274 call void @finch.drop.S_json_Json(ptr %a274) %t275 = load i64, ptr %a26 %t276 = call %S.json.Json @finch.lsp.num(i64 %t275) call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7196, i64 15, i64 0 }, %S.json.Json %t276) store %S.json.Json %t276, ptr %a277 call void @finch.drop.S_json_Json(ptr %a277) %t278 = load %S.json.Json, ptr %a271 call void @finch.drop.S_json_Json(ptr %a268) call void @finch.drop.S_json_Json(ptr %a258) call void @finch.drop.S_docs_Doc(ptr %a252) call void @finch_str_drop(ptr %a102) call void @finch_str_drop(ptr %a97) call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a9) ret %S.json.Json %t278 endif11187: %t279 = call %S.json.Json @finch.json.new_null() call void @finch.drop.S_docs_Doc(ptr %a252) call void @finch_str_drop(ptr %a102) call void @finch_str_drop(ptr %a97) call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a9) ret %S.json.Json %t279 } define internal { ptr, i64, i64 } @finch.lsp.textOf(%S.json.Json %p0) { entry: %a1 = alloca %S.json.Json, align 16 %a3 = alloca %S.json.Json, align 16 %a5 = alloca %S.json.Json, align 16 store %S.json.Json %p0, ptr %a1 %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7197, i64 12, i64 0 }) store %S.json.Json %t2, ptr %a3 %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.7198, i64 4, i64 0 }) call void @finch.drop.S_json_Json(ptr %a3) store %S.json.Json %t4, ptr %a5 %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.7199, i64 0, i64 0 }) call void @finch.drop.S_json_Json(ptr %a5) ret { ptr, i64, i64 } %t6 } define internal { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %p0) { entry: %a1 = alloca %S.json.Json, align 16 %a3 = alloca %S.json.Json, align 16 %a5 = alloca %S.json.Json, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 store %S.json.Json %p0, ptr %a1 %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7200, i64 12, i64 0 }) store %S.json.Json %t2, ptr %a3 %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.7201, i64 3, i64 0 }) call void @finch.drop.S_json_Json(ptr %a3) store %S.json.Json %t4, ptr %a5 %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.7202, i64 0, i64 0 }) call void @finch.drop.S_json_Json(ptr %a5) %t7 = call { ptr, i64, i64 } @finch.lsp.uriToPath({ ptr, i64, i64 } %t6) store { ptr, i64, i64 } %t6, ptr %a8 call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } %t7 } define internal void @finch.lsp.Server.answer(ptr %self, %S.json.Json %p0) { entry: %a1 = alloca %S.json.Json, align 16 %a3 = alloca %S.json.Json, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca %S.json.Json, align 16 %a9 = alloca %S.json.Json, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca %S.json.Json, align 16 %a18 = alloca %S.json.Json, align 16 %a20 = alloca %S.json.Json, align 16 %a22 = alloca %S.json.Json, align 16 %a24 = alloca %S.json.Json, align 16 %a26 = alloca %S.json.Json, align 16 %a28 = alloca %S.json.Json, align 16 %a30 = alloca %S.json.Json, align 16 %a34 = alloca %S.json.Json, align 16 %a36 = alloca %S.json.Json, align 16 %a38 = alloca %S.json.Json, align 16 %a40 = alloca %S.json.Json, align 16 %a44 = alloca %S.json.Json, align 16 %a47 = alloca %S.json.Json, align 16 %a49 = alloca %S.json.Json, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca %S.json.Json, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca i32, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca %S.json.Json, align 16 %a106 = alloca %S.json.Json, align 16 %a108 = alloca %S.json.Json, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca i32, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca %S.json.Json, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca %S.json.Json, align 16 %a184 = alloca %S.json.Json, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca %S.json.Json, align 16 %a212 = alloca %S.json.Json, align 16 %a215 = alloca i64, align 16 %a217 = alloca %S.json.Json, align 16 %a219 = alloca %S.json.Json, align 16 %a222 = alloca i64, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca %S.json.Json, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca %S.lsp.Analysis, align 16 %a245 = alloca %S.lsp.Analysis, align 16 %a247 = alloca %S.lsp.Analysis, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca %S.json.Json, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca %S.json.Json, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca %S.json.Json, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca %S.json.Json, align 16 %a322 = alloca %S.json.Json, align 16 %a328 = alloca %S.json.Json, align 16 store %S.json.Json %p0, ptr %a1 %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7203, i64 6, i64 0 }) store %S.json.Json %t2, ptr %a3 %t4 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a3, { ptr, i64, i64 } { ptr @.str.7204, i64 0, i64 0 }) call void @finch.drop.S_json_Json(ptr %a3) store { ptr, i64, i64 } %t4, ptr %a5 %t6 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7205, i64 6, i64 0 }) store %S.json.Json %t6, ptr %a7 %t8 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7206, i64 2, i64 0 }) store %S.json.Json %t8, ptr %a9 %t10 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.7207, i64 10, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp ne i32 %t13, 0 br i1 %t14, label %match.arm11189, label %match.next11190 match.arm11189: %t15 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t15, ptr %a16 %t17 = call %S.json.Json @finch.lsp.num(i64 1) call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7208, i64 16, i64 0 }, %S.json.Json %t17) store %S.json.Json %t17, ptr %a18 call void @finch.drop.S_json_Json(ptr %a18) %t19 = call %S.json.Json @finch.json.new_bool(i1 true) call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7209, i64 13, i64 0 }, %S.json.Json %t19) store %S.json.Json %t19, ptr %a20 call void @finch.drop.S_json_Json(ptr %a20) %t21 = call %S.json.Json @finch.json.new_bool(i1 true) call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7210, i64 18, i64 0 }, %S.json.Json %t21) store %S.json.Json %t21, ptr %a22 call void @finch.drop.S_json_Json(ptr %a22) %t23 = call %S.json.Json @finch.json.new_bool(i1 true) call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7211, i64 22, i64 0 }, %S.json.Json %t23) store %S.json.Json %t23, ptr %a24 call void @finch.drop.S_json_Json(ptr %a24) %t25 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t25, ptr %a26 %t27 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t27, ptr %a28 %t29 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7212, i64 1, i64 0 }) call void @finch.json.Json.push(ptr %a28, %S.json.Json %t29) store %S.json.Json %t29, ptr %a30 call void @finch.drop.S_json_Json(ptr %a30) %t31 = load %S.json.Json, ptr %a28 call void @finch.json.Json.set(ptr %a26, { ptr, i64, i64 } { ptr @.str.7213, i64 17, i64 0 }, %S.json.Json %t31) %t32 = load %S.json.Json, ptr %a26 call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7214, i64 18, i64 0 }, %S.json.Json %t32) %t33 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t33, ptr %a34 %t35 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t35, ptr %a36 %t37 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7215, i64 1, i64 0 }) call void @finch.json.Json.push(ptr %a36, %S.json.Json %t37) store %S.json.Json %t37, ptr %a38 call void @finch.drop.S_json_Json(ptr %a38) %t39 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7216, i64 1, i64 0 }) call void @finch.json.Json.push(ptr %a36, %S.json.Json %t39) store %S.json.Json %t39, ptr %a40 call void @finch.drop.S_json_Json(ptr %a40) %t41 = load %S.json.Json, ptr %a36 call void @finch.json.Json.set(ptr %a34, { ptr, i64, i64 } { ptr @.str.7217, i64 17, i64 0 }, %S.json.Json %t41) %t42 = load %S.json.Json, ptr %a34 call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7218, i64 21, i64 0 }, %S.json.Json %t42) %t43 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t43, ptr %a44 %t45 = load %S.json.Json, ptr %a16 call void @finch.json.Json.set(ptr %a44, { ptr, i64, i64 } { ptr @.str.7219, i64 12, i64 0 }, %S.json.Json %t45) %t46 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t46, ptr %a47 %t48 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7221, i64 5, i64 0 }) call void @finch.json.Json.set(ptr %a47, { ptr, i64, i64 } { ptr @.str.7220, i64 4, i64 0 }, %S.json.Json %t48) store %S.json.Json %t48, ptr %a49 call void @finch.drop.S_json_Json(ptr %a49) %t50 = load %S.json.Json, ptr %a47 call void @finch.json.Json.set(ptr %a44, { ptr, i64, i64 } { ptr @.str.7222, i64 10, i64 0 }, %S.json.Json %t50) %t51 = load %S.json.Json, ptr %a9 %t52 = load %S.json.Json, ptr %a44 call void @finch.lsp.reply(%S.json.Json %t51, %S.json.Json %t52) call void @finch.drop.S_json_Json(ptr %a47) call void @finch.drop.S_json_Json(ptr %a44) call void @finch.drop.S_json_Json(ptr %a36) call void @finch.drop.S_json_Json(ptr %a34) call void @finch.drop.S_json_Json(ptr %a28) call void @finch.drop.S_json_Json(ptr %a26) call void @finch.drop.S_json_Json(ptr %a16) br label %match.end11188 match.next11190: store { ptr, i64, i64 } %t10, ptr %a53 store { ptr, i64, i64 } { ptr @.str.7223, i64 8, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 br i1 %t56, label %match.arm11191, label %match.next11192 match.arm11191: %t57 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 6 store i1 true, ptr %t57 %t58 = load %S.json.Json, ptr %a9 %t59 = call %S.json.Json @finch.json.new_null() call void @finch.lsp.reply(%S.json.Json %t58, %S.json.Json %t59) store %S.json.Json %t59, ptr %a60 call void @finch.drop.S_json_Json(ptr %a60) br label %match.end11188 match.next11192: store { ptr, i64, i64 } %t10, ptr %a61 store { ptr, i64, i64 } { ptr @.str.7224, i64 4, i64 0 }, ptr %a62 %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) %t64 = icmp ne i32 %t63, 0 br i1 %t64, label %match.arm11193, label %match.next11194 match.arm11193: %t65 = trunc i64 0 to i32 %t66 = call i32 @fflush(ptr null) call void @exit(i32 %t65) br label %match.end11188 match.next11194: store { ptr, i64, i64 } %t10, ptr %a67 store { ptr, i64, i64 } { ptr @.str.7225, i64 20, i64 0 }, ptr %a68 %t69 = call i32 @finch_str_eq(ptr %a67, ptr %a68) %t70 = icmp ne i32 %t69, 0 br i1 %t70, label %match.arm11195, label %match.next11196 match.arm11195: %t71 = load %S.json.Json, ptr %a7 %t72 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t71) store { ptr, i64, i64 } %t72, ptr %a73 %t74 = load %S.json.Json, ptr %a7 %t75 = call { ptr, i64, i64 } @finch.lsp.textOf(%S.json.Json %t74) %t76 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t77 = load { ptr, i64, i64 }, ptr %a73 store { ptr, i64, i64 } %t77, ptr %a78 store i32 0, ptr %a79 %t80 = call i64 @finch_map_slot(ptr %t76, ptr %a78, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a79) %t81 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t76, i32 0, i32 0 %t82 = load ptr, ptr %t81 %t83 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t82, i64 %t80 %t84 = load i32, ptr %a79 %t85 = icmp ne i32 %t84, 0 br i1 %t85, label %map.new11197, label %map.have11198 map.new11197: %t86 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 1 call void @finch_str_copy(ptr %t86, ptr %a78) %t87 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t87 br label %map.have11198 map.have11198: %t88 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 2 %t89 = load { ptr, i64, i64 }, ptr %t88 store { ptr, i64, i64 } %t75, ptr %t88 store { ptr, i64, i64 } %t89, ptr %a90 call void @finch_str_drop(ptr %a90) %t91 = load { ptr, i64, i64 }, ptr %a73 call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t91) call void @finch_str_drop(ptr %a73) br label %match.end11188 match.next11196: store { ptr, i64, i64 } %t10, ptr %a92 store { ptr, i64, i64 } { ptr @.str.7226, i64 22, i64 0 }, ptr %a93 %t94 = call i32 @finch_str_eq(ptr %a92, ptr %a93) %t95 = icmp ne i32 %t94, 0 br i1 %t95, label %match.arm11199, label %match.next11200 match.arm11199: %t96 = load %S.json.Json, ptr %a7 %t97 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t96) store { ptr, i64, i64 } %t97, ptr %a98 %t99 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7227, i64 14, i64 0 }) store %S.json.Json %t99, ptr %a100 %t101 = call i64 @finch.json.Json.len(ptr %a100) %t102 = icmp sgt i64 %t101, 0 br i1 %t102, label %then11201, label %endif11203 then11201: %t103 = call i64 @finch.json.Json.len(ptr %a100) %t104 = sub i64 %t103, 1 %t105 = call %S.json.Json @finch.json.Json.at(ptr %a100, i64 %t104) store %S.json.Json %t105, ptr %a106 %t107 = call %S.json.Json @finch.json.Json.get(ptr %a106, { ptr, i64, i64 } { ptr @.str.7228, i64 4, i64 0 }) call void @finch.drop.S_json_Json(ptr %a106) store %S.json.Json %t107, ptr %a108 %t109 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a108, { ptr, i64, i64 } { ptr @.str.7229, i64 0, i64 0 }) call void @finch.drop.S_json_Json(ptr %a108) %t110 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t111 = load { ptr, i64, i64 }, ptr %a98 store { ptr, i64, i64 } %t111, ptr %a112 store i32 0, ptr %a113 %t114 = call i64 @finch_map_slot(ptr %t110, ptr %a112, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a113) %t115 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t110, i32 0, i32 0 %t116 = load ptr, ptr %t115 %t117 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t116, i64 %t114 %t118 = load i32, ptr %a113 %t119 = icmp ne i32 %t118, 0 br i1 %t119, label %map.new11204, label %map.have11205 map.new11204: %t120 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 1 call void @finch_str_copy(ptr %t120, ptr %a112) %t121 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t121 br label %map.have11205 map.have11205: %t122 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 2 %t123 = load { ptr, i64, i64 }, ptr %t122 store { ptr, i64, i64 } %t109, ptr %t122 store { ptr, i64, i64 } %t123, ptr %a124 call void @finch_str_drop(ptr %a124) %t125 = load { ptr, i64, i64 }, ptr %a98 call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t125) br label %endif11203 endif11203: call void @finch.drop.S_json_Json(ptr %a100) call void @finch_str_drop(ptr %a98) br label %match.end11188 match.next11200: store { ptr, i64, i64 } %t10, ptr %a126 store { ptr, i64, i64 } { ptr @.str.7230, i64 20, i64 0 }, ptr %a127 %t128 = call i32 @finch_str_eq(ptr %a126, ptr %a127) %t129 = icmp ne i32 %t128, 0 br i1 %t129, label %match.arm11206, label %match.next11207 match.arm11206: %t130 = load %S.json.Json, ptr %a7 %t131 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t130) store { ptr, i64, i64 } %t131, ptr %a132 %t133 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t134 = load { ptr, i64, i64 }, ptr %a132 store { ptr, i64, i64 } %t134, ptr %a135 %t136 = call i64 @finch_map_find(ptr %t133, ptr %a135, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t137 = icmp sge i64 %t136, 0 br i1 %t137, label %then11208, label %endif11210 then11208: %t138 = load { ptr, i64, i64 }, ptr %a132 call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t138) br label %endif11210 endif11210: call void @finch_str_drop(ptr %a132) br label %match.end11188 match.next11207: store { ptr, i64, i64 } %t10, ptr %a139 store { ptr, i64, i64 } { ptr @.str.7231, i64 21, i64 0 }, ptr %a140 %t141 = call i32 @finch_str_eq(ptr %a139, ptr %a140) %t142 = icmp ne i32 %t141, 0 br i1 %t142, label %match.arm11211, label %match.next11212 match.arm11211: %t143 = load %S.json.Json, ptr %a7 %t144 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t143) store { ptr, i64, i64 } %t144, ptr %a145 %t146 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t147 = load { ptr, i64, i64 }, ptr %a145 store { ptr, i64, i64 } %t147, ptr %a148 %t149 = call i64 @finch_map_find(ptr %t146, ptr %a148, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t150 = icmp sge i64 %t149, 0 br i1 %t150, label %remove.hit11213, label %remove.end11214 remove.hit11213: %t151 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t146, i32 0, i32 0 %t152 = load ptr, ptr %t151 %t153 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t152, i64 %t149 %t154 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t153, i32 0, i32 1 call void @finch_str_drop(ptr %t154) %t155 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t153, i32 0, i32 2 call void @finch_str_drop(ptr %t155) call void @finch_map_remove_at(ptr %t146, i64 %t149, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64)) br label %remove.end11214 remove.end11214: %t156 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 %t157 = load { ptr, i64, i64 }, ptr %a145 store { ptr, i64, i64 } %t157, ptr %a158 %t159 = call i64 @finch_map_find(ptr %t156, ptr %a158, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t160 = icmp sge i64 %t159, 0 br i1 %t160, label %remove.hit11215, label %remove.end11216 remove.hit11215: %t161 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t156, i32 0, i32 0 %t162 = load ptr, ptr %t161 %t163 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t162, i64 %t159 %t164 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t163, i32 0, i32 1 call void @finch_str_drop(ptr %t164) %t165 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t163, i32 0, i32 2 call void @finch.drop.S_lsp_Analysis(ptr %t165) call void @finch_map_remove_at(ptr %t156, i64 %t159, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64)) br label %remove.end11216 remove.end11216: %t166 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 %t167 = load { ptr, i64, i64 }, ptr %a145 store { ptr, i64, i64 } %t167, ptr %a168 %t169 = call i64 @finch_map_find(ptr %t166, ptr %a168, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t170 = icmp sge i64 %t169, 0 br i1 %t170, label %remove.hit11217, label %remove.end11218 remove.hit11217: %t171 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t166, i32 0, i32 0 %t172 = load ptr, ptr %t171 %t173 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t172, i64 %t169 %t174 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t173, i32 0, i32 1 call void @finch_str_drop(ptr %t174) %t175 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t173, i32 0, i32 2 call void @finch.drop.S_lsp_Analysis(ptr %t175) call void @finch_map_remove_at(ptr %t166, i64 %t169, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64)) br label %remove.end11218 remove.end11218: %t176 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t176, ptr %a177 %t178 = load { ptr, i64, i64 }, ptr %a145 %t179 = call { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %t178) %t180 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t179) store { ptr, i64, i64 } %t179, ptr %a181 call void @finch_str_drop(ptr %a181) call void @finch.json.Json.set(ptr %a177, { ptr, i64, i64 } { ptr @.str.7232, i64 3, i64 0 }, %S.json.Json %t180) store %S.json.Json %t180, ptr %a182 call void @finch.drop.S_json_Json(ptr %a182) %t183 = call %S.json.Json @finch.json.new_list() call void @finch.json.Json.set(ptr %a177, { ptr, i64, i64 } { ptr @.str.7233, i64 11, i64 0 }, %S.json.Json %t183) store %S.json.Json %t183, ptr %a184 call void @finch.drop.S_json_Json(ptr %a184) %t185 = load %S.json.Json, ptr %a177 call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.7234, i64 31, i64 0 }, %S.json.Json %t185) call void @finch.drop.S_json_Json(ptr %a177) call void @finch_str_drop(ptr %a145) br label %match.end11188 match.next11212: store { ptr, i64, i64 } %t10, ptr %a186 store { ptr, i64, i64 } { ptr @.str.7235, i64 18, i64 0 }, ptr %a187 %t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187) %t189 = icmp ne i32 %t188, 0 br i1 %t189, label %match.arm11219, label %match.or11221 match.or11221: store { ptr, i64, i64 } %t10, ptr %a190 store { ptr, i64, i64 } { ptr @.str.7236, i64 23, i64 0 }, ptr %a191 %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) %t193 = icmp ne i32 %t192, 0 br i1 %t193, label %match.arm11219, label %match.or11222 match.or11222: store { ptr, i64, i64 } %t10, ptr %a194 store { ptr, i64, i64 } { ptr @.str.7237, i64 23, i64 0 }, ptr %a195 %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) %t197 = icmp ne i32 %t196, 0 br i1 %t197, label %match.arm11219, label %match.or11223 match.or11223: store { ptr, i64, i64 } %t10, ptr %a198 store { ptr, i64, i64 } { ptr @.str.7238, i64 27, i64 0 }, ptr %a199 %t200 = call i32 @finch_str_eq(ptr %a198, ptr %a199) %t201 = icmp ne i32 %t200, 0 br i1 %t201, label %match.arm11219, label %match.or11224 match.or11224: store { ptr, i64, i64 } %t10, ptr %a202 store { ptr, i64, i64 } { ptr @.str.7239, i64 26, i64 0 }, ptr %a203 %t204 = call i32 @finch_str_eq(ptr %a202, ptr %a203) %t205 = icmp ne i32 %t204, 0 br i1 %t205, label %match.arm11219, label %match.next11220 match.arm11219: %t206 = load %S.json.Json, ptr %a7 %t207 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t206) store { ptr, i64, i64 } %t207, ptr %a208 %t209 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7240, i64 8, i64 0 }) store %S.json.Json %t209, ptr %a210 %t211 = call %S.json.Json @finch.json.Json.get(ptr %a210, { ptr, i64, i64 } { ptr @.str.7241, i64 4, i64 0 }) call void @finch.drop.S_json_Json(ptr %a210) store %S.json.Json %t211, ptr %a212 %t213 = call i64 @finch.json.Json.int_or(ptr %a212, i64 0) call void @finch.drop.S_json_Json(ptr %a212) %t214 = add i64 %t213, 1 store i64 %t214, ptr %a215 %t216 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7242, i64 8, i64 0 }) store %S.json.Json %t216, ptr %a217 %t218 = call %S.json.Json @finch.json.Json.get(ptr %a217, { ptr, i64, i64 } { ptr @.str.7243, i64 9, i64 0 }) call void @finch.drop.S_json_Json(ptr %a217) store %S.json.Json %t218, ptr %a219 %t220 = call i64 @finch.json.Json.int_or(ptr %a219, i64 0) call void @finch.drop.S_json_Json(ptr %a219) %t221 = add i64 %t220, 1 store i64 %t221, ptr %a222 %t223 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 %t224 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t224, ptr %a225 %t226 = call i64 @finch_map_find(ptr %t223, ptr %a225, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t227 = icmp sge i64 %t226, 0 %t228 = xor i1 %t227, true br i1 %t228, label %then11225, label %endif11227 then11225: %t229 = load %S.json.Json, ptr %a9 %t230 = call %S.json.Json @finch.json.new_null() call void @finch.lsp.reply(%S.json.Json %t229, %S.json.Json %t230) store %S.json.Json %t230, ptr %a231 call void @finch.drop.S_json_Json(ptr %a231) call void @finch_str_drop(ptr %a208) call void @finch.drop.S_json_Json(ptr %a9) call void @finch.drop.S_json_Json(ptr %a7) call void @finch_str_drop(ptr %a5) ret void endif11227: %t232 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 %t233 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t233, ptr %a234 %t235 = call i64 @finch_map_find(ptr %t232, ptr %a234, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t236 = icmp slt i64 %t235, 0 br i1 %t236, label %map.missing11228, label %map.found11229 map.missing11228: store { ptr, i64, i64 } zeroinitializer, ptr %a237 store { ptr, i64, i64 } %t233, ptr %a238 call void @finch_buf_str(ptr %a237, ptr %a238, i32 1) call void @finch_map_missing(ptr @.str.7244, i64 842, ptr %a237) unreachable map.found11229: %t239 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t232, i32 0, i32 0 %t240 = load ptr, ptr %t239 %t241 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t240, i64 %t235 %t242 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t241, i32 0, i32 2 %t243 = load %S.lsp.Analysis, ptr %t242 store %S.lsp.Analysis %t243, ptr %a244 call void @finch.copy.S_lsp_Analysis(ptr %a245, ptr %a244) %t246 = load %S.lsp.Analysis, ptr %a245 store %S.lsp.Analysis %t246, ptr %a247 store { ptr, i64, i64 } { ptr @.str.7245, i64 0, i64 0 }, ptr %a248 %t249 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t250 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t250, ptr %a251 %t252 = call i64 @finch_map_find(ptr %t249, ptr %a251, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t253 = icmp sge i64 %t252, 0 br i1 %t253, label %then11230, label %endif11232 then11230: %t254 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t255 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t255, ptr %a256 %t257 = call i64 @finch_map_find(ptr %t254, ptr %a256, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t258 = icmp slt i64 %t257, 0 br i1 %t258, label %map.missing11233, label %map.found11234 map.missing11233: store { ptr, i64, i64 } zeroinitializer, ptr %a259 store { ptr, i64, i64 } %t255, ptr %a260 call void @finch_buf_str(ptr %a259, ptr %a260, i32 1) call void @finch_map_missing(ptr @.str.7246, i64 845, ptr %a259) unreachable map.found11234: %t261 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t254, i32 0, i32 0 %t262 = load ptr, ptr %t261 %t263 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t262, i64 %t257 %t264 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t263, i32 0, i32 2 %t265 = load { ptr, i64, i64 }, ptr %t264 store { ptr, i64, i64 } %t265, ptr %a266 call void @finch_str_copy(ptr %a267, ptr %a266) %t268 = load { ptr, i64, i64 }, ptr %a267 %t269 = load { ptr, i64, i64 }, ptr %a248 store { ptr, i64, i64 } %t268, ptr %a248 store { ptr, i64, i64 } %t269, ptr %a270 call void @finch_str_drop(ptr %a270) br label %endif11232 endif11232: %t271 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t271, ptr %a272 store { ptr, i64, i64 } { ptr @.str.7247, i64 18, i64 0 }, ptr %a273 %t274 = call i32 @finch_str_eq(ptr %a272, ptr %a273) %t275 = icmp ne i32 %t274, 0 br i1 %t275, label %match.arm11236, label %match.next11237 match.arm11236: %t276 = load %S.json.Json, ptr %a9 %t277 = load %S.lsp.Analysis, ptr %a247 %t278 = load { ptr, i64, i64 }, ptr %a208 %t279 = load i64, ptr %a215 %t280 = load i64, ptr %a222 %t281 = call %S.json.Json @finch.lsp.hoverAt(%S.lsp.Analysis %t277, { ptr, i64, i64 } %t278, i64 %t279, i64 %t280) call void @finch.lsp.reply(%S.json.Json %t276, %S.json.Json %t281) store %S.json.Json %t281, ptr %a282 call void @finch.drop.S_json_Json(ptr %a282) br label %match.end11235 match.next11237: store { ptr, i64, i64 } %t271, ptr %a283 store { ptr, i64, i64 } { ptr @.str.7248, i64 23, i64 0 }, ptr %a284 %t285 = call i32 @finch_str_eq(ptr %a283, ptr %a284) %t286 = icmp ne i32 %t285, 0 br i1 %t286, label %match.arm11238, label %match.next11239 match.arm11238: %t287 = load %S.json.Json, ptr %a9 %t288 = load %S.lsp.Analysis, ptr %a247 %t289 = load { ptr, i64, i64 }, ptr %a208 %t290 = load i64, ptr %a215 %t291 = load i64, ptr %a222 %t292 = call %S.json.Json @finch.lsp.definitionAt(%S.lsp.Analysis %t288, { ptr, i64, i64 } %t289, i64 %t290, i64 %t291) call void @finch.lsp.reply(%S.json.Json %t287, %S.json.Json %t292) store %S.json.Json %t292, ptr %a293 call void @finch.drop.S_json_Json(ptr %a293) br label %match.end11235 match.next11239: store { ptr, i64, i64 } %t271, ptr %a294 store { ptr, i64, i64 } { ptr @.str.7249, i64 23, i64 0 }, ptr %a295 %t296 = call i32 @finch_str_eq(ptr %a294, ptr %a295) %t297 = icmp ne i32 %t296, 0 br i1 %t297, label %match.arm11240, label %match.next11241 match.arm11240: %t298 = load %S.json.Json, ptr %a9 %t299 = load %S.lsp.Analysis, ptr %a247 %t300 = load { ptr, i64, i64 }, ptr %a248 %t301 = load { ptr, i64, i64 }, ptr %a208 %t302 = load i64, ptr %a215 %t303 = load i64, ptr %a222 %t304 = call %S.json.Json @finch.lsp.completionAt(%S.lsp.Analysis %t299, { ptr, i64, i64 } %t300, { ptr, i64, i64 } %t301, i64 %t302, i64 %t303) call void @finch.lsp.reply(%S.json.Json %t298, %S.json.Json %t304) store %S.json.Json %t304, ptr %a305 call void @finch.drop.S_json_Json(ptr %a305) br label %match.end11235 match.next11241: store { ptr, i64, i64 } %t271, ptr %a306 store { ptr, i64, i64 } { ptr @.str.7250, i64 27, i64 0 }, ptr %a307 %t308 = call i32 @finch_str_eq(ptr %a306, ptr %a307) %t309 = icmp ne i32 %t308, 0 br i1 %t309, label %match.arm11242, label %match.next11243 match.arm11242: %t310 = load %S.json.Json, ptr %a9 %t311 = load %S.lsp.Analysis, ptr %a247 %t312 = load { ptr, i64, i64 }, ptr %a208 %t313 = call %S.json.Json @finch.lsp.symbolsOf(%S.lsp.Analysis %t311, { ptr, i64, i64 } %t312) call void @finch.lsp.reply(%S.json.Json %t310, %S.json.Json %t313) store %S.json.Json %t313, ptr %a314 call void @finch.drop.S_json_Json(ptr %a314) br label %match.end11235 match.next11243: br label %match.arm11244 match.arm11244: %t315 = load %S.json.Json, ptr %a9 %t316 = load %S.lsp.Analysis, ptr %a247 %t317 = load { ptr, i64, i64 }, ptr %a248 %t318 = load { ptr, i64, i64 }, ptr %a208 %t319 = load i64, ptr %a215 %t320 = load i64, ptr %a222 %t321 = call %S.json.Json @finch.lsp.signatureAt(%S.lsp.Analysis %t316, { ptr, i64, i64 } %t317, { ptr, i64, i64 } %t318, i64 %t319, i64 %t320) call void @finch.lsp.reply(%S.json.Json %t315, %S.json.Json %t321) store %S.json.Json %t321, ptr %a322 call void @finch.drop.S_json_Json(ptr %a322) br label %match.end11235 match.end11235: call void @finch_str_drop(ptr %a248) call void @finch.drop.S_lsp_Analysis(ptr %a247) call void @finch_str_drop(ptr %a208) br label %match.end11188 match.next11220: br label %match.arm11246 match.arm11246: %t323 = getelementptr inbounds %S.json.Json, ptr %a9, i32 0, i32 0 %t324 = load i32, ptr %t323 %t325 = icmp ne i32 %t324, 0 br i1 %t325, label %then11248, label %endif11250 then11248: %t326 = load %S.json.Json, ptr %a9 %t327 = call %S.json.Json @finch.json.new_null() call void @finch.lsp.reply(%S.json.Json %t326, %S.json.Json %t327) store %S.json.Json %t327, ptr %a328 call void @finch.drop.S_json_Json(ptr %a328) br label %endif11250 endif11250: br label %match.end11188 match.end11188: call void @finch.drop.S_json_Json(ptr %a9) call void @finch.drop.S_json_Json(ptr %a7) call void @finch_str_drop(ptr %a5) ret void } define internal void @finch.drop.map_str_S_lsp_Analysis(ptr %a) { entry: %a3 = alloca i64, align 16 %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 br label %n.cond11256 n.cond11256: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 br i1 %t5, label %n.body11257, label %n.end11258 n.body11257: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 br i1 %t11, label %entry.live11259, label %entry.next11260 entry.live11259: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 2 call void @finch.drop.S_lsp_Analysis(ptr %t13) br label %entry.next11260 entry.next11260: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 br label %n.cond11256 n.end11258: call void @finch_map_free(ptr %a) ret void } define internal void @finch.drop.S_lsp_Server(ptr %a) { entry: %t1 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) %t2 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 1 call void @finch_str_drop(ptr %t2) %t3 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 2 call void @finch.drop.map_str_str(ptr %t3) %t4 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 3 call void @finch.drop.map_str_S_lsp_Analysis(ptr %t4) %t5 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 4 call void @finch.drop.map_str_S_lsp_Analysis(ptr %t5) %t6 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 5 call void @finch.drop.arr_str(ptr %t6) ret void } define internal i64 @finch.lsp.run({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca %S.lsp.Server, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca %S.json.Json, align 16 store { ptr, i64, i64 } %p0, ptr %a1 call void @finch.host.binaryStdio() %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_copy(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 %t6 = insertvalue %S.lsp.Server zeroinitializer, { ptr, i64, i64 } %t5, 0 %t7 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t7, ptr %a9 store { ptr, i64, i64 } { ptr @.str.7251, i64 11, i64 0 }, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) store { ptr, i64, i64 } %t7, ptr %a11 call void @finch_str_drop(ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a8 %t13 = call i64 @finch.host.pid() call void @finch_str_from_int(ptr %a14, i64 %t13) %t15 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t12, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) store { ptr, i64, i64 } %t12, ptr %a19 call void @finch_str_drop(ptr %a19) store { ptr, i64, i64 } %t15, ptr %a20 call void @finch_str_drop(ptr %a20) %t21 = load { ptr, i64, i64 }, ptr %a16 %t22 = insertvalue %S.lsp.Server %t6, { ptr, i64, i64 } %t21, 1 store %S.lsp.Server %t22, ptr %a23 br label %while.cond11251 while.cond11251: br label %while.body11252 while.body11252: %t24 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.lsp.readMessage() %t25 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 0 %t26 = xor i1 %t25, true %t27 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 2 %t28 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 1 br i1 %t26, label %or.failed11254, label %or.ok11255 or.failed11254: store { ptr, i64, i64 } %t27, ptr %a29 call void @finch_str_drop(ptr %a29) br label %while.end11253 or.ok11255: store %S.json.Json %t28, ptr %a30 %t31 = load %S.json.Json, ptr %a30 call void @finch.lsp.Server.answer(ptr %a23, %S.json.Json %t31) call void @finch.drop.S_json_Json(ptr %a30) br label %while.cond11251 while.end11253: %t32 = getelementptr inbounds %S.lsp.Server, ptr %a23, i32 0, i32 1 %t33 = load { ptr, i64, i64 }, ptr %t32 call void @finch.host.removeTree({ ptr, i64, i64 } %t33) call void @finch.drop.S_lsp_Server(ptr %a23) ret i64 0 } define internal %S.json.Json @finch.json.new_null() { entry: %t1 = insertvalue %S.json.Json zeroinitializer, i32 0, 0 ret %S.json.Json %t1 } define internal %S.json.Json @finch.json.new_bool(i1 %p0) { entry: %a1 = alloca i1, align 16 store i1 %p0, ptr %a1 %t2 = insertvalue %S.json.Json zeroinitializer, i32 1, 0 %t3 = load i1, ptr %a1 %t4 = insertvalue %S.json.Json %t2, i1 %t3, 1 ret %S.json.Json %t4 } define internal %S.json.Json @finch.json.new_number(double %p0) { entry: %a1 = alloca double, align 16 store double %p0, ptr %a1 %t2 = insertvalue %S.json.Json zeroinitializer, i32 2, 0 %t3 = load double, ptr %a1 %t4 = insertvalue %S.json.Json %t2, double %t3, 2 ret %S.json.Json %t4 } define internal %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = insertvalue %S.json.Json zeroinitializer, i32 3, 0 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 call void @finch_str_copy(ptr %a5, ptr %a4) %t6 = load { ptr, i64, i64 }, ptr %a5 %t7 = insertvalue %S.json.Json %t2, { ptr, i64, i64 } %t6, 3 ret %S.json.Json %t7 } define internal %S.json.Json @finch.json.new_list() { entry: %t1 = insertvalue %S.json.Json zeroinitializer, i32 4, 0 ret %S.json.Json %t1 } define internal %S.json.Json @finch.json.new_object() { entry: %t1 = insertvalue %S.json.Json zeroinitializer, i32 5, 0 ret %S.json.Json %t1 } define internal i1 @finch.json.Json.is_null(ptr %self) { entry: %t1 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t2 = load i32, ptr %t1 %t3 = icmp eq i32 %t2, 0 ret i1 %t3 } define internal i64 @finch.json.Json.len(ptr %self) { entry: %t1 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t2 = load i32, ptr %t1 %t3 = icmp eq i32 %t2, 4 br i1 %t3, label %match.arm11262, label %match.or11264 match.or11264: %t4 = icmp eq i32 %t2, 5 br i1 %t4, label %match.arm11262, label %match.next11263 match.arm11262: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 br label %match.from11265 match.from11265: br label %match.end11261 match.next11263: %t8 = icmp eq i32 %t2, 3 br i1 %t8, label %match.arm11266, label %match.next11267 match.arm11266: %t9 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 3 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t11 = load i64, ptr %t10 br label %match.from11268 match.from11268: br label %match.end11261 match.next11267: br label %match.arm11269 match.arm11269: br label %match.from11271 match.from11271: br label %match.end11261 match.end11261: %t12 = phi i64 [ %t7, %match.from11265 ], [ %t11, %match.from11268 ], [ 0, %match.from11271 ] ret i64 %t12 } define internal i1 @finch.json.Json.has(ptr %self, { ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca i64, align 16 %a11 = alloca i64, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 5 br label %logic.from11272 logic.from11272: br i1 %t4, label %logic.rhs11273, label %logic.end11274 logic.rhs11273: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a8 %t9 = load i64, ptr %t6 %t10 = load ptr, ptr %t5 store i64 0, ptr %a11 br label %find.cond11275 find.cond11275: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t9 br i1 %t13, label %find.body11276, label %find.end11279 find.body11276: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } %t7, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %find.hit11277, label %find.next11278 find.hit11277: store i64 %t12, ptr %a8 br label %find.end11279 find.next11278: %t20 = add i64 %t12, 1 store i64 %t20, ptr %a11 br label %find.cond11275 find.end11279: %t21 = load i64, ptr %a8 %t22 = icmp sge i64 %t21, 0 br label %logic.rend11280 logic.rend11280: br label %logic.end11274 logic.end11274: %t23 = phi i1 [ false, %logic.from11272 ], [ %t22, %logic.rend11280 ] ret i1 %t23 } define internal void @finch.copy.arr_S_json_Json(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.json.Json, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond11294 n.cond11294: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body11295, label %n.end11296 n.body11295: %t8 = getelementptr inbounds %S.json.Json, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.json.Json, ptr %t2, i64 %t6 call void @finch.copy.S_json_Json(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond11294 n.end11296: ret void } define internal void @finch.copy.S_json_Json(ptr %dst, ptr %src) { entry: %t1 = load %S.json.Json, ptr %src store %S.json.Json %t1, ptr %dst %t2 = getelementptr inbounds %S.json.Json, ptr %dst, i32 0, i32 3 %t3 = getelementptr inbounds %S.json.Json, ptr %src, i32 0, i32 3 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.json.Json, ptr %dst, i32 0, i32 4 %t5 = getelementptr inbounds %S.json.Json, ptr %src, i32 0, i32 4 call void @finch.copy.arr_S_json_Json(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.json.Json, ptr %dst, i32 0, i32 5 %t7 = getelementptr inbounds %S.json.Json, ptr %src, i32 0, i32 5 call void @finch.copy.arr_str(ptr %t6, ptr %t7) ret void } define internal %S.json.Json @finch.json.Json.get(ptr %self, { ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca i64, align 16 %a12 = alloca i64, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca i64, align 16 %a35 = alloca %S.json.Json, align 16 %a36 = alloca %S.json.Json, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp ne i32 %t3, 5 br i1 %t4, label %then11281, label %endif11283 then11281: %t5 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t5 endif11283: %t6 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a9 %t10 = load i64, ptr %t7 %t11 = load ptr, ptr %t6 store i64 0, ptr %a12 br label %find.cond11284 find.cond11284: %t13 = load i64, ptr %a12 %t14 = icmp slt i64 %t13, %t10 br i1 %t14, label %find.body11285, label %find.end11288 find.body11285: %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i64 %t13 %t16 = load { ptr, i64, i64 }, ptr %t15 store { ptr, i64, i64 } %t16, ptr %a17 store { ptr, i64, i64 } %t8, ptr %a18 %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) %t20 = icmp ne i32 %t19, 0 br i1 %t20, label %find.hit11286, label %find.next11287 find.hit11286: store i64 %t13, ptr %a9 br label %find.end11288 find.next11287: %t21 = add i64 %t13, 1 store i64 %t21, ptr %a12 br label %find.cond11284 find.end11288: %t22 = load i64, ptr %a9 store i64 %t22, ptr %a23 %t24 = load i64, ptr %a23 %t25 = icmp slt i64 %t24, 0 br i1 %t25, label %then11289, label %endif11291 then11289: %t26 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t26 endif11291: %t27 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t28 = load i64, ptr %a23 %t29 = load { ptr, i64, i64 }, ptr %t27 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 %t28, %t30 br i1 %t31, label %range11292, label %inrange11293 range11292: call void @finch_panic_index(ptr @.str.7252, i64 84, i64 %t28, i64 %t30) unreachable inrange11293: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds %S.json.Json, ptr %t32, i64 %t28 %t34 = load %S.json.Json, ptr %t33 store %S.json.Json %t34, ptr %a35 call void @finch.copy.S_json_Json(ptr %a36, ptr %a35) %t37 = load %S.json.Json, ptr %a36 ret %S.json.Json %t37 } define internal %S.json.Json @finch.json.Json.at(ptr %self, i64 %p0) { entry: %a1 = alloca i64, align 16 %a23 = alloca %S.json.Json, align 16 %a24 = alloca %S.json.Json, align 16 store i64 %p0, ptr %a1 %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp ne i32 %t3, 4 br label %logic.from11297 logic.from11297: br i1 %t4, label %logic.end11299, label %logic.rhs11298 logic.rhs11298: %t5 = load i64, ptr %a1 %t6 = icmp slt i64 %t5, 0 br label %logic.rend11300 logic.rend11300: br label %logic.end11299 logic.end11299: %t7 = phi i1 [ true, %logic.from11297 ], [ %t6, %logic.rend11300 ] br label %logic.from11301 logic.from11301: br i1 %t7, label %logic.end11303, label %logic.rhs11302 logic.rhs11302: %t8 = load i64, ptr %a1 %t9 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t11 = load i64, ptr %t10 %t12 = icmp sge i64 %t8, %t11 br label %logic.rend11304 logic.rend11304: br label %logic.end11303 logic.end11303: %t13 = phi i1 [ true, %logic.from11301 ], [ %t12, %logic.rend11304 ] br i1 %t13, label %then11305, label %endif11307 then11305: %t14 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t14 endif11307: %t15 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t16 = load i64, ptr %a1 %t17 = load { ptr, i64, i64 }, ptr %t15 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 %t16, %t18 br i1 %t19, label %range11308, label %inrange11309 range11308: call void @finch_panic_index(ptr @.str.7253, i64 92, i64 %t16, i64 %t18) unreachable inrange11309: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.json.Json, ptr %t20, i64 %t16 %t22 = load %S.json.Json, ptr %t21 store %S.json.Json %t22, ptr %a23 call void @finch.copy.S_json_Json(ptr %a24, ptr %a23) %t25 = load %S.json.Json, ptr %a24 ret %S.json.Json %t25 } define internal { ptr, i64, i64 } @finch.json.Json.str_or(ptr %self, { ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 3 br i1 %t4, label %then11310, label %endif11312 then11310: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 3 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 call void @finch_str_copy(ptr %a8, ptr %a7) %t9 = load { ptr, i64, i64 }, ptr %a8 ret { ptr, i64, i64 } %t9 endif11312: %t10 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t10, ptr %a11 call void @finch_str_copy(ptr %a12, ptr %a11) %t13 = load { ptr, i64, i64 }, ptr %a12 ret { ptr, i64, i64 } %t13 } define internal double @finch.json.Json.float_or(ptr %self, double %p0) { entry: %a1 = alloca double, align 16 store double %p0, ptr %a1 %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 2 br i1 %t4, label %then11313, label %endif11315 then11313: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 2 %t6 = load double, ptr %t5 ret double %t6 endif11315: %t7 = load double, ptr %a1 ret double %t7 } define internal i64 @finch.json.Json.int_or(ptr %self, i64 %p0) { entry: %a1 = alloca i64, align 16 store i64 %p0, ptr %a1 %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 2 br i1 %t4, label %then11316, label %endif11318 then11316: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 2 %t6 = load double, ptr %t5 %t7 = fptosi double %t6 to i64 ret i64 %t7 endif11318: %t8 = load i64, ptr %a1 ret i64 %t8 } define internal i1 @finch.json.Json.bool_or(ptr %self, i1 %p0) { entry: %a1 = alloca i1, align 16 store i1 %p0, ptr %a1 %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 1 br i1 %t4, label %then11319, label %endif11321 then11319: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 1 %t6 = load i1, ptr %t5 ret i1 %t6 endif11321: %t7 = load i1, ptr %a1 ret i1 %t7 } define internal { ptr, i64, i64 } @finch.json.Json.names(ptr %self) { entry: %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %t1 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 %t2 = load { ptr, i64, i64 }, ptr %t1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch.copy.arr_str(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 ret { ptr, i64, i64 } %t5 } define internal void @finch.json.Json.push(ptr %self, %S.json.Json %p0) { entry: %a1 = alloca %S.json.Json, align 16 %a5 = alloca %S.json.Json, align 16 %a6 = alloca %S.json.Json, align 16 store %S.json.Json %p0, ptr %a1 %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i32 0, i32 1 %t4 = load %S.json.Json, ptr %a1 store %S.json.Json %t4, ptr %a5 call void @finch.copy.S_json_Json(ptr %a6, ptr %a5) %t7 = load %S.json.Json, ptr %a6 %t8 = load i64, ptr %t3 %t9 = add i64 %t8, 1 call void @finch_arr_reserve(ptr %t2, i64 %t9, i64 ptrtoint (ptr getelementptr (%S.json.Json, ptr null, i32 1) to i64)) %t10 = load ptr, ptr %t2 %t11 = getelementptr inbounds %S.json.Json, ptr %t10, i64 %t8 store %S.json.Json %t7, ptr %t11 store i64 %t9, ptr %t3 ret void } define internal void @finch.json.Json.set(ptr %self, { ptr, i64, i64 } %p0, %S.json.Json %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca %S.json.Json, align 16 %a6 = alloca i64, align 16 %a9 = alloca i64, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca i64, align 16 %a31 = alloca %S.json.Json, align 16 %a32 = alloca %S.json.Json, align 16 %a35 = alloca %S.json.Json, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca %S.json.Json, align 16 %a50 = alloca %S.json.Json, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store %S.json.Json %p1, ptr %a2 %t3 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i32 0, i32 1 %t5 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a6 %t7 = load i64, ptr %t4 %t8 = load ptr, ptr %t3 store i64 0, ptr %a9 br label %find.cond11322 find.cond11322: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t7 br i1 %t11, label %find.body11323, label %find.end11326 find.body11323: %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 %t10 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } %t5, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 br i1 %t17, label %find.hit11324, label %find.next11325 find.hit11324: store i64 %t10, ptr %a6 br label %find.end11326 find.next11325: %t18 = add i64 %t10, 1 store i64 %t18, ptr %a9 br label %find.cond11322 find.end11326: %t19 = load i64, ptr %a6 store i64 %t19, ptr %a20 %t21 = load i64, ptr %a20 %t22 = icmp sge i64 %t21, 0 br i1 %t22, label %then11327, label %endif11329 then11327: %t23 = load %S.json.Json, ptr %a2 %t24 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t25 = load i64, ptr %a20 %t26 = load { ptr, i64, i64 }, ptr %t24 %t27 = extractvalue { ptr, i64, i64 } %t26, 1 %t28 = icmp uge i64 %t25, %t27 br i1 %t28, label %range11330, label %inrange11331 range11330: call void @finch_panic_index(ptr @.str.7254, i64 140, i64 %t25, i64 %t27) unreachable inrange11331: %t29 = extractvalue { ptr, i64, i64 } %t26, 0 %t30 = getelementptr inbounds %S.json.Json, ptr %t29, i64 %t25 store %S.json.Json %t23, ptr %a31 call void @finch.copy.S_json_Json(ptr %a32, ptr %a31) %t33 = load %S.json.Json, ptr %a32 %t34 = load %S.json.Json, ptr %t30 store %S.json.Json %t33, ptr %t30 store %S.json.Json %t34, ptr %a35 call void @finch.drop.S_json_Json(ptr %a35) ret void endif11329: %t36 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i32 0, i32 1 %t38 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t38, ptr %a39 call void @finch_str_copy(ptr %a40, ptr %a39) %t41 = load { ptr, i64, i64 }, ptr %a40 %t42 = load i64, ptr %t37 %t43 = add i64 %t42, 1 call void @finch_arr_reserve(ptr %t36, i64 %t43, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t44 = load ptr, ptr %t36 %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i64 %t42 store { ptr, i64, i64 } %t41, ptr %t45 store i64 %t43, ptr %t37 %t46 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i32 0, i32 1 %t48 = load %S.json.Json, ptr %a2 store %S.json.Json %t48, ptr %a49 call void @finch.copy.S_json_Json(ptr %a50, ptr %a49) %t51 = load %S.json.Json, ptr %a50 %t52 = load i64, ptr %t47 %t53 = add i64 %t52, 1 call void @finch_arr_reserve(ptr %t46, i64 %t53, i64 ptrtoint (ptr getelementptr (%S.json.Json, ptr null, i32 1) to i64)) %t54 = load ptr, ptr %t46 %t55 = getelementptr inbounds %S.json.Json, ptr %t54, i64 %t52 store %S.json.Json %t51, ptr %t55 store i64 %t53, ptr %t47 ret void } define internal { ptr, i64, i64 } @finch.json.quote({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca i64, align 16 %a17 = alloca i8, align 16 %a20 = alloca i64, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 store { ptr, i64, i64 } { ptr @.str.7255, i64 1, i64 0 }, ptr %t4 %t5 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t6 = insertvalue { ptr, i64, i64 } %t5, i64 1, 1 %t7 = insertvalue { ptr, i64, i64 } %t6, i64 1, 2 store { ptr, i64, i64 } %t7, ptr %a8 store i64 0, ptr %a9 br label %each.cond11332 each.cond11332: %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t11 = load i64, ptr %t10 %t12 = load i64, ptr %a9 %t13 = icmp slt i64 %t12, %t11 br i1 %t13, label %each.body11333, label %each.end11335 each.body11333: %t14 = load ptr, ptr %a1 %t15 = getelementptr inbounds i8, ptr %t14, i64 %t12 %t16 = load i8, ptr %t15 store i8 %t16, ptr %a17 %t18 = load i8, ptr %a17 %t19 = zext i8 %t18 to i64 store i64 %t19, ptr %a20 %t21 = load i8, ptr %a17 %t22 = icmp eq i8 %t21, 34 br i1 %t22, label %then11336, label %else11337 then11336: %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = add i64 %t24, 1 call void @finch_arr_reserve(ptr %a8, i64 %t25, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t26 = load ptr, ptr %a8 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t24 store { ptr, i64, i64 } { ptr @.str.7256, i64 2, i64 0 }, ptr %t27 store i64 %t25, ptr %t23 br label %endif11338 else11337: %t28 = load i8, ptr %a17 %t29 = icmp eq i8 %t28, 92 br i1 %t29, label %then11339, label %else11340 then11339: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = add i64 %t31, 1 call void @finch_arr_reserve(ptr %a8, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t33 = load ptr, ptr %a8 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 store { ptr, i64, i64 } { ptr @.str.7257, i64 2, i64 0 }, ptr %t34 store i64 %t32, ptr %t30 br label %endif11341 else11340: %t35 = load i8, ptr %a17 %t36 = icmp eq i8 %t35, 10 br i1 %t36, label %then11342, label %else11343 then11342: %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t38 = load i64, ptr %t37 %t39 = add i64 %t38, 1 call void @finch_arr_reserve(ptr %a8, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t40 = load ptr, ptr %a8 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 store { ptr, i64, i64 } { ptr @.str.7258, i64 2, i64 0 }, ptr %t41 store i64 %t39, ptr %t37 br label %endif11344 else11343: %t42 = load i8, ptr %a17 %t43 = icmp eq i8 %t42, 13 br i1 %t43, label %then11345, label %else11346 then11345: %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t45 = load i64, ptr %t44 %t46 = add i64 %t45, 1 call void @finch_arr_reserve(ptr %a8, i64 %t46, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t47 = load ptr, ptr %a8 %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i64 %t45 store { ptr, i64, i64 } { ptr @.str.7259, i64 2, i64 0 }, ptr %t48 store i64 %t46, ptr %t44 br label %endif11347 else11346: %t49 = load i8, ptr %a17 %t50 = icmp eq i8 %t49, 9 br i1 %t50, label %then11348, label %else11349 then11348: %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t52 = load i64, ptr %t51 %t53 = add i64 %t52, 1 call void @finch_arr_reserve(ptr %a8, i64 %t53, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t54 = load ptr, ptr %a8 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 store { ptr, i64, i64 } { ptr @.str.7260, i64 2, i64 0 }, ptr %t55 store i64 %t53, ptr %t51 br label %endif11350 else11349: %t56 = load i64, ptr %a20 %t57 = icmp slt i64 %t56, 32 br i1 %t57, label %then11351, label %else11352 then11351: %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t59 = load i64, ptr %a20 %t60 = sdiv i64 %t59, 16 %t61 = call { ptr, i64, i64 } @finch.json.hexdigit(i64 %t60) store { ptr, i64, i64 } { ptr @.str.7261, i64 4, i64 0 }, ptr %a63 store { ptr, i64, i64 } %t61, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) store { ptr, i64, i64 } %t61, ptr %a65 call void @finch_str_drop(ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a62 %t67 = load i64, ptr %a20 %t68 = srem i64 %t67, 16 %t69 = call { ptr, i64, i64 } @finch.json.hexdigit(i64 %t68) store { ptr, i64, i64 } %t66, ptr %a71 store { ptr, i64, i64 } %t69, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) store { ptr, i64, i64 } %t66, ptr %a73 call void @finch_str_drop(ptr %a73) store { ptr, i64, i64 } %t69, ptr %a74 call void @finch_str_drop(ptr %a74) %t75 = load { ptr, i64, i64 }, ptr %a70 %t76 = load i64, ptr %t58 %t77 = add i64 %t76, 1 call void @finch_arr_reserve(ptr %a8, i64 %t77, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t78 = load ptr, ptr %a8 %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i64 %t76 store { ptr, i64, i64 } %t75, ptr %t79 store i64 %t77, ptr %t58 br label %endif11353 else11352: %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t81 = load i8, ptr %a17 call void @finch_str_from_char(ptr %a82, i8 signext %t81) %t83 = load { ptr, i64, i64 }, ptr %a82 %t84 = load i64, ptr %t80 %t85 = add i64 %t84, 1 call void @finch_arr_reserve(ptr %a8, i64 %t85, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t86 = load ptr, ptr %a8 %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i64 %t84 store { ptr, i64, i64 } %t83, ptr %t87 store i64 %t85, ptr %t80 br label %endif11353 endif11353: br label %endif11350 endif11350: br label %endif11347 endif11347: br label %endif11344 endif11344: br label %endif11341 endif11341: br label %endif11338 endif11338: br label %each.step11334 each.step11334: %t88 = load i64, ptr %a9 %t89 = add i64 %t88, 1 store i64 %t89, ptr %a9 br label %each.cond11332 each.end11335: %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t91 = load i64, ptr %t90 %t92 = add i64 %t91, 1 call void @finch_arr_reserve(ptr %a8, i64 %t92, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t93 = load ptr, ptr %a8 %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i64 %t91 store { ptr, i64, i64 } { ptr @.str.7262, i64 1, i64 0 }, ptr %t94 store i64 %t92, ptr %t90 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.7263, i64 0, i64 0 }, ptr %a96 call void @finch_str_join(ptr %a97, ptr %a8, ptr %a96) %t98 = load { ptr, i64, i64 }, ptr %a97 call void @finch.drop.arr_str(ptr %a8) ret { ptr, i64, i64 } %t98 } define internal { ptr, i64, i64 } @finch.json.hexdigit(i64 %p0) { entry: %a1 = alloca i64, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 store i64 %p0, ptr %a1 store { ptr, i64, i64 } { ptr @.str.7264, i64 16, i64 0 }, ptr %a2 %t3 = load i64, ptr %a1 %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = extractvalue { ptr, i64, i64 } %t4, 1 %t6 = icmp uge i64 %t3, %t5 br i1 %t6, label %range11354, label %inrange11355 range11354: call void @finch_panic_index(ptr @.str.7265, i64 175, i64 %t3, i64 %t5) unreachable inrange11355: %t7 = extractvalue { ptr, i64, i64 } %t4, 0 %t8 = getelementptr inbounds i8, ptr %t7, i64 %t3 %t9 = load i8, ptr %t8 call void @finch_str_from_char(ptr %a10, i8 signext %t9) %t11 = load { ptr, i64, i64 }, ptr %a10 call void @finch_str_drop(ptr %a2) ret { ptr, i64, i64 } %t11 } define internal { ptr, i64, i64 } @finch.json.number_text(double %p0) { entry: %a1 = alloca double, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 store double %p0, ptr %a1 %t2 = load double, ptr %a1 %t3 = load double, ptr %a1 %t4 = fptosi double %t3 to i64 %t5 = sitofp i64 %t4 to double %t6 = fcmp oeq double %t2, %t5 br label %logic.from11356 logic.from11356: br i1 %t6, label %logic.rhs11357, label %logic.end11358 logic.rhs11357: %t7 = load double, ptr %a1 %t8 = fneg double 1000000000000000.0 %t9 = fcmp ogt double %t7, %t8 br label %logic.rend11359 logic.rend11359: br label %logic.end11358 logic.end11358: %t10 = phi i1 [ false, %logic.from11356 ], [ %t9, %logic.rend11359 ] br label %logic.from11360 logic.from11360: br i1 %t10, label %logic.rhs11361, label %logic.end11362 logic.rhs11361: %t11 = load double, ptr %a1 %t12 = fcmp olt double %t11, 1000000000000000.0 br label %logic.rend11363 logic.rend11363: br label %logic.end11362 logic.end11362: %t13 = phi i1 [ false, %logic.from11360 ], [ %t12, %logic.rend11363 ] br i1 %t13, label %then11364, label %endif11366 then11364: %t14 = load double, ptr %a1 %t15 = fptosi double %t14 to i64 call void @finch_str_from_int(ptr %a16, i64 %t15) %t17 = load { ptr, i64, i64 }, ptr %a16 ret { ptr, i64, i64 } %t17 endif11366: %t18 = load double, ptr %a1 call void @finch_str_from_float(ptr %a19, double %t18) %t20 = load { ptr, i64, i64 }, ptr %a19 ret { ptr, i64, i64 } %t20 } define internal void @finch.json.write(%S.json.Json %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, ptr %p3) { entry: %a1 = alloca %S.json.Json, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca ptr, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca i64, align 16 %a113 = alloca i64, align 16 %a114 = alloca %S.json.Json, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca i64, align 16 %a203 = alloca i64, align 16 %a204 = alloca %S.json.Json, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 store %S.json.Json %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store ptr %p3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.7266, i64 0, i64 0 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.7267, i64 0, i64 0 }, ptr %a6 store { ptr, i64, i64 } { ptr @.str.7268, i64 1, i64 0 }, ptr %a7 store { ptr, i64, i64 } { ptr @.str.7269, i64 1, i64 0 }, ptr %a8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t10 = load i64, ptr %t9 %t11 = icmp sgt i64 %t10, 0 br i1 %t11, label %then11367, label %endif11369 then11367: %t12 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.7270, i64 1, i64 0 }, ptr %a5 store { ptr, i64, i64 } %t12, ptr %a13 call void @finch_str_drop(ptr %a13) %t14 = load { ptr, i64, i64 }, ptr %a3 %t15 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t14, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a16 %t20 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t19, ptr %a6 store { ptr, i64, i64 } %t20, ptr %a21 call void @finch_str_drop(ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.7271, i64 2, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t22, ptr %a23 call void @finch_str_drop(ptr %a23) br label %endif11369 endif11369: %t24 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 0 %t25 = load i32, ptr %t24 %t26 = icmp eq i32 %t25, 0 br i1 %t26, label %match.arm11371, label %match.next11372 match.arm11371: %t27 = load ptr, ptr %a4 %t28 = icmp eq ptr %t27, null br i1 %t28, label %panic11373, label %ok11374 panic11373: call void @finch_panic(ptr @.str.7272, i64 200, ptr @.str.7273) unreachable ok11374: %t29 = getelementptr inbounds %S.json.Writer, ptr %t27, i32 0, i32 0 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = add i64 %t31, 1 call void @finch_arr_reserve(ptr %t29, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t33 = load ptr, ptr %t29 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 store { ptr, i64, i64 } { ptr @.str.7274, i64 4, i64 0 }, ptr %t34 store i64 %t32, ptr %t30 br label %match.end11370 match.next11372: %t35 = icmp eq i32 %t25, 1 br i1 %t35, label %match.arm11375, label %match.next11376 match.arm11375: %t36 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 1 %t37 = load i1, ptr %t36 br i1 %t37, label %then11377, label %else11378 then11377: %t38 = load ptr, ptr %a4 %t39 = icmp eq ptr %t38, null br i1 %t39, label %panic11380, label %ok11381 panic11380: call void @finch_panic(ptr @.str.7275, i64 203, ptr @.str.7276) unreachable ok11381: %t40 = getelementptr inbounds %S.json.Writer, ptr %t38, i32 0, i32 0 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 %t42 = load i64, ptr %t41 %t43 = add i64 %t42, 1 call void @finch_arr_reserve(ptr %t40, i64 %t43, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t44 = load ptr, ptr %t40 %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i64 %t42 store { ptr, i64, i64 } { ptr @.str.7277, i64 4, i64 0 }, ptr %t45 store i64 %t43, ptr %t41 br label %endif11379 else11378: %t46 = load ptr, ptr %a4 %t47 = icmp eq ptr %t46, null br i1 %t47, label %panic11382, label %ok11383 panic11382: call void @finch_panic(ptr @.str.7278, i64 205, ptr @.str.7279) unreachable ok11383: %t48 = getelementptr inbounds %S.json.Writer, ptr %t46, i32 0, i32 0 %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i32 0, i32 1 %t50 = load i64, ptr %t49 %t51 = add i64 %t50, 1 call void @finch_arr_reserve(ptr %t48, i64 %t51, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t52 = load ptr, ptr %t48 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 %t50 store { ptr, i64, i64 } { ptr @.str.7280, i64 5, i64 0 }, ptr %t53 store i64 %t51, ptr %t49 br label %endif11379 endif11379: br label %match.end11370 match.next11376: %t54 = icmp eq i32 %t25, 2 br i1 %t54, label %match.arm11384, label %match.next11385 match.arm11384: %t55 = load ptr, ptr %a4 %t56 = icmp eq ptr %t55, null br i1 %t56, label %panic11386, label %ok11387 panic11386: call void @finch_panic(ptr @.str.7281, i64 208, ptr @.str.7282) unreachable ok11387: %t57 = getelementptr inbounds %S.json.Writer, ptr %t55, i32 0, i32 0 %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i32 0, i32 1 %t59 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 2 %t60 = load double, ptr %t59 %t61 = call { ptr, i64, i64 } @finch.json.number_text(double %t60) %t62 = load i64, ptr %t58 %t63 = add i64 %t62, 1 call void @finch_arr_reserve(ptr %t57, i64 %t63, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t64 = load ptr, ptr %t57 %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i64 %t62 store { ptr, i64, i64 } %t61, ptr %t65 store i64 %t63, ptr %t58 br label %match.end11370 match.next11385: %t66 = icmp eq i32 %t25, 3 br i1 %t66, label %match.arm11388, label %match.next11389 match.arm11388: %t67 = load ptr, ptr %a4 %t68 = icmp eq ptr %t67, null br i1 %t68, label %panic11390, label %ok11391 panic11390: call void @finch_panic(ptr @.str.7283, i64 209, ptr @.str.7284) unreachable ok11391: %t69 = getelementptr inbounds %S.json.Writer, ptr %t67, i32 0, i32 0 %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i32 0, i32 1 %t71 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 3 %t72 = load { ptr, i64, i64 }, ptr %t71 %t73 = call { ptr, i64, i64 } @finch.json.quote({ ptr, i64, i64 } %t72) %t74 = load i64, ptr %t70 %t75 = add i64 %t74, 1 call void @finch_arr_reserve(ptr %t69, i64 %t75, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t76 = load ptr, ptr %t69 %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i64 %t74 store { ptr, i64, i64 } %t73, ptr %t77 store i64 %t75, ptr %t70 br label %match.end11370 match.next11389: %t78 = icmp eq i32 %t25, 4 br i1 %t78, label %match.arm11392, label %match.next11393 match.arm11392: %t79 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %t79, i32 0, i32 1 %t81 = load i64, ptr %t80 %t82 = icmp eq i64 %t81, 0 br i1 %t82, label %then11394, label %endif11396 then11394: %t83 = load ptr, ptr %a4 %t84 = icmp eq ptr %t83, null br i1 %t84, label %panic11397, label %ok11398 panic11397: call void @finch_panic(ptr @.str.7285, i64 212, ptr @.str.7286) unreachable ok11398: %t85 = getelementptr inbounds %S.json.Writer, ptr %t83, i32 0, i32 0 %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1 %t87 = load i64, ptr %t86 %t88 = add i64 %t87, 1 call void @finch_arr_reserve(ptr %t85, i64 %t88, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t89 = load ptr, ptr %t85 %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i64 %t87 store { ptr, i64, i64 } { ptr @.str.7287, i64 2, i64 0 }, ptr %t90 store i64 %t88, ptr %t86 call void @finch_str_drop(ptr %a8) call void @finch_str_drop(ptr %a7) call void @finch_str_drop(ptr %a6) call void @finch_str_drop(ptr %a5) ret void endif11396: %t91 = load ptr, ptr %a4 %t92 = icmp eq ptr %t91, null br i1 %t92, label %panic11399, label %ok11400 panic11399: call void @finch_panic(ptr @.str.7288, i64 215, ptr @.str.7289) unreachable ok11400: %t93 = getelementptr inbounds %S.json.Writer, ptr %t91, i32 0, i32 0 %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i32 0, i32 1 %t95 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.7290, i64 1, i64 0 }, ptr %a97 store { ptr, i64, i64 } %t95, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) %t99 = load { ptr, i64, i64 }, ptr %a96 %t100 = load i64, ptr %t94 %t101 = add i64 %t100, 1 call void @finch_arr_reserve(ptr %t93, i64 %t101, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t102 = load ptr, ptr %t93 %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i64 %t100 store { ptr, i64, i64 } %t99, ptr %t103 store i64 %t101, ptr %t94 %t104 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 store i64 0, ptr %a105 br label %each.cond11401 each.cond11401: %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 %t107 = load i64, ptr %t106 %t108 = load i64, ptr %a105 %t109 = icmp slt i64 %t108, %t107 br i1 %t109, label %each.body11402, label %each.end11404 each.body11402: %t110 = load ptr, ptr %t104 %t111 = getelementptr inbounds %S.json.Json, ptr %t110, i64 %t108 %t112 = load %S.json.Json, ptr %t111 store i64 %t108, ptr %a113 store %S.json.Json %t112, ptr %a114 %t115 = load i64, ptr %a113 %t116 = icmp sgt i64 %t115, 0 br i1 %t116, label %then11405, label %endif11407 then11405: %t117 = load ptr, ptr %a4 %t118 = icmp eq ptr %t117, null br i1 %t118, label %panic11408, label %ok11409 panic11408: call void @finch_panic(ptr @.str.7291, i64 218, ptr @.str.7292) unreachable ok11409: %t119 = getelementptr inbounds %S.json.Writer, ptr %t117, i32 0, i32 0 %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 %t121 = load { ptr, i64, i64 }, ptr %a7 %t122 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t121, ptr %a124 store { ptr, i64, i64 } %t122, ptr %a125 call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) %t126 = load { ptr, i64, i64 }, ptr %a123 %t127 = load i64, ptr %t120 %t128 = add i64 %t127, 1 call void @finch_arr_reserve(ptr %t119, i64 %t128, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t129 = load ptr, ptr %t119 %t130 = getelementptr inbounds { ptr, i64, i64 }, ptr %t129, i64 %t127 store { ptr, i64, i64 } %t126, ptr %t130 store i64 %t128, ptr %t120 br label %endif11407 endif11407: %t131 = load ptr, ptr %a4 %t132 = icmp eq ptr %t131, null br i1 %t132, label %panic11410, label %ok11411 panic11410: call void @finch_panic(ptr @.str.7293, i64 220, ptr @.str.7294) unreachable ok11411: %t133 = getelementptr inbounds %S.json.Writer, ptr %t131, i32 0, i32 0 %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 %t135 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t135, ptr %a136 call void @finch_str_copy(ptr %a137, ptr %a136) %t138 = load { ptr, i64, i64 }, ptr %a137 %t139 = load i64, ptr %t134 %t140 = add i64 %t139, 1 call void @finch_arr_reserve(ptr %t133, i64 %t140, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t141 = load ptr, ptr %t133 %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i64 %t139 store { ptr, i64, i64 } %t138, ptr %t142 store i64 %t140, ptr %t134 %t143 = load %S.json.Json, ptr %a114 %t144 = load { ptr, i64, i64 }, ptr %a2 %t145 = load { ptr, i64, i64 }, ptr %a6 %t146 = load ptr, ptr %a4 call void @finch.json.write(%S.json.Json %t143, { ptr, i64, i64 } %t144, { ptr, i64, i64 } %t145, ptr %t146) br label %each.step11403 each.step11403: %t147 = load i64, ptr %a105 %t148 = add i64 %t147, 1 store i64 %t148, ptr %a105 br label %each.cond11401 each.end11404: %t149 = load ptr, ptr %a4 %t150 = icmp eq ptr %t149, null br i1 %t150, label %panic11412, label %ok11413 panic11412: call void @finch_panic(ptr @.str.7295, i64 223, ptr @.str.7296) unreachable ok11413: %t151 = getelementptr inbounds %S.json.Writer, ptr %t149, i32 0, i32 0 %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 %t153 = load { ptr, i64, i64 }, ptr %a5 %t154 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t153, ptr %a156 store { ptr, i64, i64 } %t154, ptr %a157 call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) %t158 = load { ptr, i64, i64 }, ptr %a155 store { ptr, i64, i64 } %t158, ptr %a160 store { ptr, i64, i64 } { ptr @.str.7297, i64 1, i64 0 }, ptr %a161 call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) store { ptr, i64, i64 } %t158, ptr %a162 call void @finch_str_drop(ptr %a162) %t163 = load { ptr, i64, i64 }, ptr %a159 %t164 = load i64, ptr %t152 %t165 = add i64 %t164, 1 call void @finch_arr_reserve(ptr %t151, i64 %t165, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t166 = load ptr, ptr %t151 %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %t166, i64 %t164 store { ptr, i64, i64 } %t163, ptr %t167 store i64 %t165, ptr %t152 br label %match.end11370 match.next11393: %t168 = icmp eq i32 %t25, 5 br i1 %t168, label %match.arm11414, label %match.next11415 match.arm11414: %t169 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %t169, i32 0, i32 1 %t171 = load i64, ptr %t170 %t172 = icmp eq i64 %t171, 0 br i1 %t172, label %then11416, label %endif11418 then11416: %t173 = load ptr, ptr %a4 %t174 = icmp eq ptr %t173, null br i1 %t174, label %panic11419, label %ok11420 panic11419: call void @finch_panic(ptr @.str.7298, i64 227, ptr @.str.7299) unreachable ok11420: %t175 = getelementptr inbounds %S.json.Writer, ptr %t173, i32 0, i32 0 %t176 = getelementptr inbounds { ptr, i64, i64 }, ptr %t175, i32 0, i32 1 %t177 = load i64, ptr %t176 %t178 = add i64 %t177, 1 call void @finch_arr_reserve(ptr %t175, i64 %t178, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t179 = load ptr, ptr %t175 %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i64 %t177 store { ptr, i64, i64 } { ptr @.str.7300, i64 2, i64 0 }, ptr %t180 store i64 %t178, ptr %t176 call void @finch_str_drop(ptr %a8) call void @finch_str_drop(ptr %a7) call void @finch_str_drop(ptr %a6) call void @finch_str_drop(ptr %a5) ret void endif11418: %t181 = load ptr, ptr %a4 %t182 = icmp eq ptr %t181, null br i1 %t182, label %panic11421, label %ok11422 panic11421: call void @finch_panic(ptr @.str.7301, i64 230, ptr @.str.7302) unreachable ok11422: %t183 = getelementptr inbounds %S.json.Writer, ptr %t181, i32 0, i32 0 %t184 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i32 0, i32 1 %t185 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.7303, i64 1, i64 0 }, ptr %a187 store { ptr, i64, i64 } %t185, ptr %a188 call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) %t189 = load { ptr, i64, i64 }, ptr %a186 %t190 = load i64, ptr %t184 %t191 = add i64 %t190, 1 call void @finch_arr_reserve(ptr %t183, i64 %t191, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t192 = load ptr, ptr %t183 %t193 = getelementptr inbounds { ptr, i64, i64 }, ptr %t192, i64 %t190 store { ptr, i64, i64 } %t189, ptr %t193 store i64 %t191, ptr %t184 %t194 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 store i64 0, ptr %a195 br label %each.cond11423 each.cond11423: %t196 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1 %t197 = load i64, ptr %t196 %t198 = load i64, ptr %a195 %t199 = icmp slt i64 %t198, %t197 br i1 %t199, label %each.body11424, label %each.end11426 each.body11424: %t200 = load ptr, ptr %t194 %t201 = getelementptr inbounds %S.json.Json, ptr %t200, i64 %t198 %t202 = load %S.json.Json, ptr %t201 store i64 %t198, ptr %a203 store %S.json.Json %t202, ptr %a204 %t205 = load i64, ptr %a203 %t206 = icmp sgt i64 %t205, 0 br i1 %t206, label %then11427, label %endif11429 then11427: %t207 = load ptr, ptr %a4 %t208 = icmp eq ptr %t207, null br i1 %t208, label %panic11430, label %ok11431 panic11430: call void @finch_panic(ptr @.str.7304, i64 233, ptr @.str.7305) unreachable ok11431: %t209 = getelementptr inbounds %S.json.Writer, ptr %t207, i32 0, i32 0 %t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i32 0, i32 1 %t211 = load { ptr, i64, i64 }, ptr %a7 %t212 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t211, ptr %a214 store { ptr, i64, i64 } %t212, ptr %a215 call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) %t216 = load { ptr, i64, i64 }, ptr %a213 %t217 = load i64, ptr %t210 %t218 = add i64 %t217, 1 call void @finch_arr_reserve(ptr %t209, i64 %t218, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t219 = load ptr, ptr %t209 %t220 = getelementptr inbounds { ptr, i64, i64 }, ptr %t219, i64 %t217 store { ptr, i64, i64 } %t216, ptr %t220 store i64 %t218, ptr %t210 br label %endif11429 endif11429: %t221 = load ptr, ptr %a4 %t222 = icmp eq ptr %t221, null br i1 %t222, label %panic11432, label %ok11433 panic11432: call void @finch_panic(ptr @.str.7306, i64 235, ptr @.str.7307) unreachable ok11433: %t223 = getelementptr inbounds %S.json.Writer, ptr %t221, i32 0, i32 0 %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i32 0, i32 1 %t225 = load { ptr, i64, i64 }, ptr %a6 %t226 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 5 %t227 = load i64, ptr %a203 %t228 = load { ptr, i64, i64 }, ptr %t226 %t229 = extractvalue { ptr, i64, i64 } %t228, 1 %t230 = icmp uge i64 %t227, %t229 br i1 %t230, label %range11434, label %inrange11435 range11434: call void @finch_panic_index(ptr @.str.7308, i64 235, i64 %t227, i64 %t229) unreachable inrange11435: %t231 = extractvalue { ptr, i64, i64 } %t228, 0 %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t231, i64 %t227 %t233 = load { ptr, i64, i64 }, ptr %t232 %t234 = call { ptr, i64, i64 } @finch.json.quote({ ptr, i64, i64 } %t233) store { ptr, i64, i64 } %t225, ptr %a236 store { ptr, i64, i64 } %t234, ptr %a237 call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) store { ptr, i64, i64 } %t234, ptr %a238 call void @finch_str_drop(ptr %a238) %t239 = load { ptr, i64, i64 }, ptr %a235 %t240 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t239, ptr %a242 store { ptr, i64, i64 } %t240, ptr %a243 call void @finch_str_concat(ptr %a241, ptr %a242, ptr %a243) store { ptr, i64, i64 } %t239, ptr %a244 call void @finch_str_drop(ptr %a244) %t245 = load { ptr, i64, i64 }, ptr %a241 %t246 = load i64, ptr %t224 %t247 = add i64 %t246, 1 call void @finch_arr_reserve(ptr %t223, i64 %t247, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t248 = load ptr, ptr %t223 %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i64 %t246 store { ptr, i64, i64 } %t245, ptr %t249 store i64 %t247, ptr %t224 %t250 = load %S.json.Json, ptr %a204 %t251 = load { ptr, i64, i64 }, ptr %a2 %t252 = load { ptr, i64, i64 }, ptr %a6 %t253 = load ptr, ptr %a4 call void @finch.json.write(%S.json.Json %t250, { ptr, i64, i64 } %t251, { ptr, i64, i64 } %t252, ptr %t253) br label %each.step11425 each.step11425: %t254 = load i64, ptr %a195 %t255 = add i64 %t254, 1 store i64 %t255, ptr %a195 br label %each.cond11423 each.end11426: %t256 = load ptr, ptr %a4 %t257 = icmp eq ptr %t256, null br i1 %t257, label %panic11436, label %ok11437 panic11436: call void @finch_panic(ptr @.str.7309, i64 238, ptr @.str.7310) unreachable ok11437: %t258 = getelementptr inbounds %S.json.Writer, ptr %t256, i32 0, i32 0 %t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %t258, i32 0, i32 1 %t260 = load { ptr, i64, i64 }, ptr %a5 %t261 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t260, ptr %a263 store { ptr, i64, i64 } %t261, ptr %a264 call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) %t265 = load { ptr, i64, i64 }, ptr %a262 store { ptr, i64, i64 } %t265, ptr %a267 store { ptr, i64, i64 } { ptr @.str.7311, i64 1, i64 0 }, ptr %a268 call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) store { ptr, i64, i64 } %t265, ptr %a269 call void @finch_str_drop(ptr %a269) %t270 = load { ptr, i64, i64 }, ptr %a266 %t271 = load i64, ptr %t259 %t272 = add i64 %t271, 1 call void @finch_arr_reserve(ptr %t258, i64 %t272, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t273 = load ptr, ptr %t258 %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 %t271 store { ptr, i64, i64 } %t270, ptr %t274 store i64 %t272, ptr %t259 br label %match.end11370 match.next11415: br i1 true, label %panic11438, label %ok11439 panic11438: call void @finch_panic(ptr @.str.7312, i64 199, ptr @.str.7313) unreachable ok11439: unreachable match.end11370: call void @finch_str_drop(ptr %a8) call void @finch_str_drop(ptr %a7) call void @finch_str_drop(ptr %a6) call void @finch_str_drop(ptr %a5) ret void } define internal void @finch.drop.S_json_Writer(ptr %a) { entry: %t1 = getelementptr inbounds %S.json.Writer, ptr %a, i32 0, i32 0 call void @finch.drop.arr_str(ptr %t1) ret void } define internal { ptr, i64, i64 } @finch.json.stringify(%S.json.Json %p0) { entry: %a1 = alloca %S.json.Json, align 16 %a2 = alloca %S.json.Writer, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 store %S.json.Json %p0, ptr %a1 store %S.json.Writer zeroinitializer, ptr %a2 %t3 = load %S.json.Json, ptr %a1 call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.7314, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7315, i64 0, i64 0 }, ptr %a2) %t4 = getelementptr inbounds %S.json.Writer, ptr %a2, i32 0, i32 0 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.7316, i64 0, i64 0 }, ptr %a6 call void @finch_str_join(ptr %a7, ptr %t4, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 call void @finch.drop.S_json_Writer(ptr %a2) ret { ptr, i64, i64 } %t8 } define internal { ptr, i64, i64 } @finch.json.pretty(%S.json.Json %p0) { entry: %a1 = alloca %S.json.Json, align 16 %a2 = alloca %S.json.Writer, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 store %S.json.Json %p0, ptr %a1 store %S.json.Writer zeroinitializer, ptr %a2 %t3 = load %S.json.Json, ptr %a1 call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.7317, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.7318, i64 0, i64 0 }, ptr %a2) %t4 = getelementptr inbounds %S.json.Writer, ptr %a2, i32 0, i32 0 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.7319, i64 0, i64 0 }, ptr %a6 call void @finch_str_join(ptr %a7, ptr %t4, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 call void @finch.drop.S_json_Writer(ptr %a2) ret { ptr, i64, i64 } %t8 } define internal { ptr, i64, i64 } @finch.json.where(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a3 = alloca i64, align 16 %a8 = alloca i64, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 1, ptr %a2 store i64 1, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic11440, label %ok11441 panic11440: call void @finch_panic(ptr @.str.7320, i64 268, ptr @.str.7321) unreachable ok11441: %t6 = getelementptr inbounds %S.json.Reader, ptr %t4, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 0, ptr %a8 br label %for.cond11442 for.cond11442: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t7 br i1 %t10, label %for.body11443, label %for.end11445 for.body11443: %t11 = load i64, ptr %a8 %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic11446, label %ok11447 panic11446: call void @finch_panic(ptr @.str.7322, i64 269, ptr @.str.7323) unreachable ok11447: %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = icmp slt i64 %t11, %t16 br label %logic.from11448 logic.from11448: br i1 %t17, label %logic.rhs11449, label %logic.end11450 logic.rhs11449: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic11451, label %ok11452 panic11451: call void @finch_panic(ptr @.str.7324, i64 269, ptr @.str.7325) unreachable ok11452: %t20 = getelementptr inbounds %S.json.Reader, ptr %t18, i32 0, i32 0 %t21 = load i64, ptr %a8 %t22 = load { ptr, i64, i64 }, ptr %t20 %t23 = extractvalue { ptr, i64, i64 } %t22, 1 %t24 = icmp uge i64 %t21, %t23 br i1 %t24, label %range11453, label %inrange11454 range11453: call void @finch_panic_index(ptr @.str.7326, i64 269, i64 %t21, i64 %t23) unreachable inrange11454: %t25 = extractvalue { ptr, i64, i64 } %t22, 0 %t26 = getelementptr inbounds i8, ptr %t25, i64 %t21 %t27 = load i8, ptr %t26 %t28 = icmp eq i8 %t27, 10 br label %logic.rend11455 logic.rend11455: br label %logic.end11450 logic.end11450: %t29 = phi i1 [ false, %logic.from11448 ], [ %t28, %logic.rend11455 ] br i1 %t29, label %then11456, label %else11457 then11456: %t30 = load i64, ptr %a2 %t31 = add i64 %t30, 1 store i64 %t31, ptr %a2 store i64 1, ptr %a3 br label %endif11458 else11457: %t32 = load i64, ptr %a3 %t33 = add i64 %t32, 1 store i64 %t33, ptr %a3 br label %endif11458 endif11458: br label %for.step11444 for.step11444: %t34 = load i64, ptr %a8 %t35 = add i64 %t34, 1 store i64 %t35, ptr %a8 br label %for.cond11442 for.end11445: %t36 = load i64, ptr %a2 call void @finch_str_from_int(ptr %a37, i64 %t36) %t38 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } { ptr @.str.7327, i64 5, i64 0 }, ptr %a40 store { ptr, i64, i64 } %t38, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) store { ptr, i64, i64 } %t38, ptr %a42 call void @finch_str_drop(ptr %a42) %t43 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t43, ptr %a45 store { ptr, i64, i64 } { ptr @.str.7328, i64 9, i64 0 }, ptr %a46 call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) store { ptr, i64, i64 } %t43, ptr %a47 call void @finch_str_drop(ptr %a47) %t48 = load { ptr, i64, i64 }, ptr %a44 %t49 = load i64, ptr %a3 call void @finch_str_from_int(ptr %a50, i64 %t49) %t51 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } %t48, ptr %a53 store { ptr, i64, i64 } %t51, ptr %a54 call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) store { ptr, i64, i64 } %t48, ptr %a55 call void @finch_str_drop(ptr %a55) store { ptr, i64, i64 } %t51, ptr %a56 call void @finch_str_drop(ptr %a56) %t57 = load { ptr, i64, i64 }, ptr %a52 ret { ptr, i64, i64 } %t57 } define internal i8 @finch.json.peek(ptr %p0) { entry: %a1 = alloca ptr, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic11459, label %ok11460 panic11459: call void @finch_panic(ptr @.str.7329, i64 280, ptr @.str.7330) unreachable ok11460: %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic11461, label %ok11462 panic11461: call void @finch_panic(ptr @.str.7331, i64 280, ptr @.str.7332) unreachable ok11462: %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 0 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 %t10 = load i64, ptr %t9 %t11 = icmp slt i64 %t5, %t10 br i1 %t11, label %then11463, label %endif11465 then11463: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic11466, label %ok11467 panic11466: call void @finch_panic(ptr @.str.7333, i64 281, ptr @.str.7334) unreachable ok11467: %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic11468, label %ok11469 panic11468: call void @finch_panic(ptr @.str.7335, i64 281, ptr @.str.7336) unreachable ok11469: %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = load { ptr, i64, i64 }, ptr %t14 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 br i1 %t21, label %range11470, label %inrange11471 range11470: call void @finch_panic_index(ptr @.str.7337, i64 281, i64 %t18, i64 %t20) unreachable inrange11471: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds i8, ptr %t22, i64 %t18 %t24 = load i8, ptr %t23 ret i8 %t24 endif11465: %t25 = trunc i64 0 to i8 ret i8 %t25 } define internal void @finch.json.skip_space(ptr %p0) { entry: %a1 = alloca ptr, align 16 store ptr %p0, ptr %a1 br label %while.cond11472 while.cond11472: %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic11475, label %ok11476 panic11475: call void @finch_panic(ptr @.str.7338, i64 287, ptr @.str.7339) unreachable ok11476: %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic11477, label %ok11478 panic11477: call void @finch_panic(ptr @.str.7340, i64 287, ptr @.str.7341) unreachable ok11478: %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 0 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 %t10 = load i64, ptr %t9 %t11 = icmp slt i64 %t5, %t10 br label %logic.from11479 logic.from11479: br i1 %t11, label %logic.rhs11480, label %logic.end11481 logic.rhs11480: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic11482, label %ok11483 panic11482: call void @finch_panic(ptr @.str.7342, i64 287, ptr @.str.7343) unreachable ok11483: %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic11484, label %ok11485 panic11484: call void @finch_panic(ptr @.str.7344, i64 287, ptr @.str.7345) unreachable ok11485: %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = load { ptr, i64, i64 }, ptr %t14 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 br i1 %t21, label %range11486, label %inrange11487 range11486: call void @finch_panic_index(ptr @.str.7346, i64 287, i64 %t18, i64 %t20) unreachable inrange11487: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds i8, ptr %t22, i64 %t18 %t24 = load i8, ptr %t23 %t25 = icmp eq i8 %t24, 32 br label %logic.from11488 logic.from11488: br i1 %t25, label %logic.end11490, label %logic.rhs11489 logic.rhs11489: %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null br i1 %t27, label %panic11491, label %ok11492 panic11491: call void @finch_panic(ptr @.str.7347, i64 287, ptr @.str.7348) unreachable ok11492: %t28 = getelementptr inbounds %S.json.Reader, ptr %t26, i32 0, i32 0 %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null br i1 %t30, label %panic11493, label %ok11494 panic11493: call void @finch_panic(ptr @.str.7349, i64 287, ptr @.str.7350) unreachable ok11494: %t31 = getelementptr inbounds %S.json.Reader, ptr %t29, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = load { ptr, i64, i64 }, ptr %t28 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 br i1 %t35, label %range11495, label %inrange11496 range11495: call void @finch_panic_index(ptr @.str.7351, i64 287, i64 %t32, i64 %t34) unreachable inrange11496: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 %t38 = load i8, ptr %t37 %t39 = icmp eq i8 %t38, 10 br label %logic.rend11497 logic.rend11497: br label %logic.end11490 logic.end11490: %t40 = phi i1 [ true, %logic.from11488 ], [ %t39, %logic.rend11497 ] br label %logic.from11498 logic.from11498: br i1 %t40, label %logic.end11500, label %logic.rhs11499 logic.rhs11499: %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null br i1 %t42, label %panic11501, label %ok11502 panic11501: call void @finch_panic(ptr @.str.7352, i64 287, ptr @.str.7353) unreachable ok11502: %t43 = getelementptr inbounds %S.json.Reader, ptr %t41, i32 0, i32 0 %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null br i1 %t45, label %panic11503, label %ok11504 panic11503: call void @finch_panic(ptr @.str.7354, i64 287, ptr @.str.7355) unreachable ok11504: %t46 = getelementptr inbounds %S.json.Reader, ptr %t44, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = load { ptr, i64, i64 }, ptr %t43 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 br i1 %t50, label %range11505, label %inrange11506 range11505: call void @finch_panic_index(ptr @.str.7356, i64 287, i64 %t47, i64 %t49) unreachable inrange11506: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds i8, ptr %t51, i64 %t47 %t53 = load i8, ptr %t52 %t54 = icmp eq i8 %t53, 9 br label %logic.rend11507 logic.rend11507: br label %logic.end11500 logic.end11500: %t55 = phi i1 [ true, %logic.from11498 ], [ %t54, %logic.rend11507 ] br label %logic.from11508 logic.from11508: br i1 %t55, label %logic.end11510, label %logic.rhs11509 logic.rhs11509: %t56 = load ptr, ptr %a1 %t57 = icmp eq ptr %t56, null br i1 %t57, label %panic11511, label %ok11512 panic11511: call void @finch_panic(ptr @.str.7357, i64 287, ptr @.str.7358) unreachable ok11512: %t58 = getelementptr inbounds %S.json.Reader, ptr %t56, i32 0, i32 0 %t59 = load ptr, ptr %a1 %t60 = icmp eq ptr %t59, null br i1 %t60, label %panic11513, label %ok11514 panic11513: call void @finch_panic(ptr @.str.7359, i64 287, ptr @.str.7360) unreachable ok11514: %t61 = getelementptr inbounds %S.json.Reader, ptr %t59, i32 0, i32 1 %t62 = load i64, ptr %t61 %t63 = load { ptr, i64, i64 }, ptr %t58 %t64 = extractvalue { ptr, i64, i64 } %t63, 1 %t65 = icmp uge i64 %t62, %t64 br i1 %t65, label %range11515, label %inrange11516 range11515: call void @finch_panic_index(ptr @.str.7361, i64 287, i64 %t62, i64 %t64) unreachable inrange11516: %t66 = extractvalue { ptr, i64, i64 } %t63, 0 %t67 = getelementptr inbounds i8, ptr %t66, i64 %t62 %t68 = load i8, ptr %t67 %t69 = icmp eq i8 %t68, 13 br label %logic.rend11517 logic.rend11517: br label %logic.end11510 logic.end11510: %t70 = phi i1 [ true, %logic.from11508 ], [ %t69, %logic.rend11517 ] br label %logic.rend11518 logic.rend11518: br label %logic.end11481 logic.end11481: %t71 = phi i1 [ false, %logic.from11479 ], [ %t70, %logic.rend11518 ] br i1 %t71, label %while.body11473, label %while.end11474 while.body11473: %t72 = load ptr, ptr %a1 %t73 = icmp eq ptr %t72, null br i1 %t73, label %panic11519, label %ok11520 panic11519: call void @finch_panic(ptr @.str.7362, i64 288, ptr @.str.7363) unreachable ok11520: %t74 = getelementptr inbounds %S.json.Reader, ptr %t72, i32 0, i32 1 %t75 = load i64, ptr %t74 %t76 = add i64 %t75, 1 store i64 %t76, ptr %t74 br label %while.cond11472 while.end11474: ret void } define internal { ptr, i64, i64 } @finch.json.unexpected(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic11521, label %ok11522 panic11521: call void @finch_panic(ptr @.str.7364, i64 293, ptr @.str.7365) unreachable ok11522: %t5 = getelementptr inbounds %S.json.Reader, ptr %t3, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null br i1 %t8, label %panic11523, label %ok11524 panic11523: call void @finch_panic(ptr @.str.7366, i64 293, ptr @.str.7367) unreachable ok11524: %t9 = getelementptr inbounds %S.json.Reader, ptr %t7, i32 0, i32 0 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t11 = load i64, ptr %t10 %t12 = icmp sge i64 %t6, %t11 br i1 %t12, label %then11525, label %endif11527 then11525: %t13 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.7368, i64 26, i64 0 }, ptr %a15 store { ptr, i64, i64 } %t13, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t17, ptr %a19 store { ptr, i64, i64 } { ptr @.str.7369, i64 12, i64 0 }, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) store { ptr, i64, i64 } %t17, ptr %a21 call void @finch_str_drop(ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a18 %t23 = load ptr, ptr %a1 %t24 = call { ptr, i64, i64 } @finch.json.where(ptr %t23) store { ptr, i64, i64 } %t22, ptr %a26 store { ptr, i64, i64 } %t24, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) store { ptr, i64, i64 } %t22, ptr %a28 call void @finch_str_drop(ptr %a28) store { ptr, i64, i64 } %t24, ptr %a29 call void @finch_str_drop(ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t30, ptr %a32 store { ptr, i64, i64 } { ptr @.str.7370, i64 1, i64 0 }, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) store { ptr, i64, i64 } %t30, ptr %a34 call void @finch_str_drop(ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a31 ret { ptr, i64, i64 } %t35 endif11527: %t36 = load ptr, ptr %a1 %t37 = icmp eq ptr %t36, null br i1 %t37, label %panic11528, label %ok11529 panic11528: call void @finch_panic(ptr @.str.7372, i64 296, ptr @.str.7373) unreachable ok11529: %t38 = getelementptr inbounds %S.json.Reader, ptr %t36, i32 0, i32 0 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null br i1 %t40, label %panic11530, label %ok11531 panic11530: call void @finch_panic(ptr @.str.7374, i64 296, ptr @.str.7375) unreachable ok11531: %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 1 %t42 = load i64, ptr %t41 %t43 = load { ptr, i64, i64 }, ptr %t38 %t44 = extractvalue { ptr, i64, i64 } %t43, 1 %t45 = icmp uge i64 %t42, %t44 br i1 %t45, label %range11532, label %inrange11533 range11532: call void @finch_panic_index(ptr @.str.7376, i64 296, i64 %t42, i64 %t44) unreachable inrange11533: %t46 = extractvalue { ptr, i64, i64 } %t43, 0 %t47 = getelementptr inbounds i8, ptr %t46, i64 %t42 %t48 = load i8, ptr %t47 call void @finch_str_from_char(ptr %a49, i8 signext %t48) %t50 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } { ptr @.str.7371, i64 13, i64 0 }, ptr %a52 store { ptr, i64, i64 } %t50, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) store { ptr, i64, i64 } %t50, ptr %a54 call void @finch_str_drop(ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a51 store { ptr, i64, i64 } %t55, ptr %a57 store { ptr, i64, i64 } { ptr @.str.7377, i64 8, i64 0 }, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) store { ptr, i64, i64 } %t55, ptr %a59 call void @finch_str_drop(ptr %a59) %t60 = load { ptr, i64, i64 }, ptr %a56 %t61 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t60, ptr %a63 store { ptr, i64, i64 } %t61, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) store { ptr, i64, i64 } %t60, ptr %a65 call void @finch_str_drop(ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a62 store { ptr, i64, i64 } %t66, ptr %a68 store { ptr, i64, i64 } { ptr @.str.7378, i64 12, i64 0 }, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) store { ptr, i64, i64 } %t66, ptr %a70 call void @finch_str_drop(ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a67 %t72 = load ptr, ptr %a1 %t73 = call { ptr, i64, i64 } @finch.json.where(ptr %t72) store { ptr, i64, i64 } %t71, ptr %a75 store { ptr, i64, i64 } %t73, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) store { ptr, i64, i64 } %t71, ptr %a77 call void @finch_str_drop(ptr %a77) store { ptr, i64, i64 } %t73, ptr %a78 call void @finch_str_drop(ptr %a78) %t79 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } %t79, ptr %a81 store { ptr, i64, i64 } { ptr @.str.7379, i64 1, i64 0 }, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) store { ptr, i64, i64 } %t79, ptr %a83 call void @finch_str_drop(ptr %a83) %t84 = load { ptr, i64, i64 }, ptr %a80 ret { ptr, i64, i64 } %t84 } define internal i1 @finch.json.comes(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic11534, label %ok11535 panic11534: call void @finch_panic(ptr @.str.7380, i64 301, ptr @.str.7381) unreachable ok11535: %t5 = getelementptr inbounds %S.json.Reader, ptr %t3, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic11536, label %ok11537 panic11536: call void @finch_panic(ptr @.str.7382, i64 301, ptr @.str.7383) unreachable ok11537: %t10 = getelementptr inbounds %S.json.Reader, ptr %t8, i32 0, i32 1 %t11 = load i64, ptr %t10 %t12 = sub i64 %t7, %t11 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sge i64 %t12, %t14 br label %logic.from11538 logic.from11538: br i1 %t15, label %logic.rhs11539, label %logic.end11540 logic.rhs11539: %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null br i1 %t17, label %panic11541, label %ok11542 panic11541: call void @finch_panic(ptr @.str.7384, i64 301, ptr @.str.7385) unreachable ok11542: %t18 = getelementptr inbounds %S.json.Reader, ptr %t16, i32 0, i32 0 %t19 = load { ptr, i64, i64 }, ptr %t18 store { ptr, i64, i64 } %t19, ptr %a20 %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null br i1 %t23, label %panic11543, label %ok11544 panic11543: call void @finch_panic(ptr @.str.7387, i64 301, ptr @.str.7388) unreachable ok11544: %t24 = getelementptr inbounds %S.json.Reader, ptr %t22, i32 0, i32 1 %t25 = load i64, ptr %t24 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null br i1 %t27, label %panic11545, label %ok11546 panic11545: call void @finch_panic(ptr @.str.7389, i64 301, ptr @.str.7390) unreachable ok11546: %t28 = getelementptr inbounds %S.json.Reader, ptr %t26, i32 0, i32 1 %t29 = load i64, ptr %t28 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = add i64 %t29, %t31 call void @finch_str_sub(ptr %a21, ptr %a20, i64 %t25, i64 %t32, ptr @.str.7386, i64 301) %t33 = load { ptr, i64, i64 }, ptr %a21 %t34 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t33, ptr %a35 store { ptr, i64, i64 } %t34, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 store { ptr, i64, i64 } %t33, ptr %a39 call void @finch_str_drop(ptr %a39) br label %logic.rend11547 logic.rend11547: br label %logic.end11540 logic.end11540: %t40 = phi i1 [ false, %logic.from11538 ], [ %t38, %logic.rend11547 ] ret i1 %t40 } define internal { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = call i1 @finch.json.comes(ptr %t3, { ptr, i64, i64 } %t4) %t6 = xor i1 %t5, true br i1 %t6, label %then11548, label %endif11550 then11548: %t7 = load ptr, ptr %a1 %t8 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.7391, i64 1, i64 0 }, ptr %a10 store { ptr, i64, i64 } %t8, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t12, ptr %a14 store { ptr, i64, i64 } { ptr @.str.7392, i64 1, i64 0 }, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) store { ptr, i64, i64 } %t12, ptr %a16 call void @finch_str_drop(ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a13 %t18 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t7, { ptr, i64, i64 } %t17) store { ptr, i64, i64 } %t17, ptr %a19 call void @finch_str_drop(ptr %a19) %t20 = insertvalue { i1, i8, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t18, 2 ret { i1, i8, { ptr, i64, i64 } } %t20 endif11550: %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t22 = load i64, ptr %t21 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null br i1 %t24, label %panic11551, label %ok11552 panic11551: call void @finch_panic(ptr @.str.7393, i64 308, ptr @.str.7394) unreachable ok11552: %t25 = getelementptr inbounds %S.json.Reader, ptr %t23, i32 0, i32 1 %t26 = load i64, ptr %t25 %t27 = add i64 %t26, %t22 store i64 %t27, ptr %t25 ret { i1, i8, { ptr, i64, i64 } } { i1 true, i8 0, { ptr, i64, i64 } zeroinitializer } } define internal i64 @finch.json.hex_value(i8 %p0) { entry: %a1 = alloca i8, align 16 store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 48 br label %logic.from11553 logic.from11553: br i1 %t3, label %logic.rhs11554, label %logic.end11555 logic.rhs11554: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 57 br label %logic.rend11556 logic.rend11556: br label %logic.end11555 logic.end11555: %t6 = phi i1 [ false, %logic.from11553 ], [ %t5, %logic.rend11556 ] br i1 %t6, label %then11557, label %endif11559 then11557: %t7 = load i8, ptr %a1 %t8 = zext i8 %t7 to i64 %t9 = zext i8 48 to i64 %t10 = sub i64 %t8, %t9 ret i64 %t10 endif11559: %t11 = load i8, ptr %a1 %t12 = icmp uge i8 %t11, 97 br label %logic.from11560 logic.from11560: br i1 %t12, label %logic.rhs11561, label %logic.end11562 logic.rhs11561: %t13 = load i8, ptr %a1 %t14 = icmp ule i8 %t13, 102 br label %logic.rend11563 logic.rend11563: br label %logic.end11562 logic.end11562: %t15 = phi i1 [ false, %logic.from11560 ], [ %t14, %logic.rend11563 ] br i1 %t15, label %then11564, label %endif11566 then11564: %t16 = load i8, ptr %a1 %t17 = zext i8 %t16 to i64 %t18 = zext i8 97 to i64 %t19 = sub i64 %t17, %t18 %t20 = add i64 %t19, 10 ret i64 %t20 endif11566: %t21 = load i8, ptr %a1 %t22 = icmp uge i8 %t21, 65 br label %logic.from11567 logic.from11567: br i1 %t22, label %logic.rhs11568, label %logic.end11569 logic.rhs11568: %t23 = load i8, ptr %a1 %t24 = icmp ule i8 %t23, 70 br label %logic.rend11570 logic.rend11570: br label %logic.end11569 logic.end11569: %t25 = phi i1 [ false, %logic.from11567 ], [ %t24, %logic.rend11570 ] br i1 %t25, label %then11571, label %endif11573 then11571: %t26 = load i8, ptr %a1 %t27 = zext i8 %t26 to i64 %t28 = zext i8 65 to i64 %t29 = sub i64 %t27, %t28 %t30 = add i64 %t29, 10 ret i64 %t30 endif11573: ret i64 -1 } define internal { ptr, i64, i64 } @finch.json.utf8(i64 %p0) { entry: %a1 = alloca i64, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 store i64 %p0, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a2 %t3 = load i64, ptr %a1 %t4 = icmp slt i64 %t3, 128 br i1 %t4, label %then11574, label %else11575 then11574: %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t6 = load i64, ptr %a1 %t7 = trunc i64 %t6 to i8 %t8 = load i64, ptr %t5 %t9 = add i64 %t8, 1 call void @finch_arr_reserve(ptr %a2, i64 %t9, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t10 = load ptr, ptr %a2 %t11 = getelementptr inbounds i8, ptr %t10, i64 %t8 store i8 %t7, ptr %t11 store i64 %t9, ptr %t5 br label %endif11576 else11575: %t12 = load i64, ptr %a1 %t13 = icmp slt i64 %t12, 2048 br i1 %t13, label %then11577, label %else11578 then11577: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t15 = load i64, ptr %a1 %t16 = sdiv i64 %t15, 64 %t17 = add i64 192, %t16 %t18 = trunc i64 %t17 to i8 %t19 = load i64, ptr %t14 %t20 = add i64 %t19, 1 call void @finch_arr_reserve(ptr %a2, i64 %t20, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t21 = load ptr, ptr %a2 %t22 = getelementptr inbounds i8, ptr %t21, i64 %t19 store i8 %t18, ptr %t22 store i64 %t20, ptr %t14 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t24 = load i64, ptr %a1 %t25 = srem i64 %t24, 64 %t26 = add i64 128, %t25 %t27 = trunc i64 %t26 to i8 %t28 = load i64, ptr %t23 %t29 = add i64 %t28, 1 call void @finch_arr_reserve(ptr %a2, i64 %t29, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t30 = load ptr, ptr %a2 %t31 = getelementptr inbounds i8, ptr %t30, i64 %t28 store i8 %t27, ptr %t31 store i64 %t29, ptr %t23 br label %endif11579 else11578: %t32 = load i64, ptr %a1 %t33 = icmp slt i64 %t32, 65536 br i1 %t33, label %then11580, label %else11581 then11580: %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t35 = load i64, ptr %a1 %t36 = sdiv i64 %t35, 4096 %t37 = add i64 224, %t36 %t38 = trunc i64 %t37 to i8 %t39 = load i64, ptr %t34 %t40 = add i64 %t39, 1 call void @finch_arr_reserve(ptr %a2, i64 %t40, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t41 = load ptr, ptr %a2 %t42 = getelementptr inbounds i8, ptr %t41, i64 %t39 store i8 %t38, ptr %t42 store i64 %t40, ptr %t34 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t44 = load i64, ptr %a1 %t45 = sdiv i64 %t44, 64 %t46 = srem i64 %t45, 64 %t47 = add i64 128, %t46 %t48 = trunc i64 %t47 to i8 %t49 = load i64, ptr %t43 %t50 = add i64 %t49, 1 call void @finch_arr_reserve(ptr %a2, i64 %t50, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t51 = load ptr, ptr %a2 %t52 = getelementptr inbounds i8, ptr %t51, i64 %t49 store i8 %t48, ptr %t52 store i64 %t50, ptr %t43 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t54 = load i64, ptr %a1 %t55 = srem i64 %t54, 64 %t56 = add i64 128, %t55 %t57 = trunc i64 %t56 to i8 %t58 = load i64, ptr %t53 %t59 = add i64 %t58, 1 call void @finch_arr_reserve(ptr %a2, i64 %t59, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t60 = load ptr, ptr %a2 %t61 = getelementptr inbounds i8, ptr %t60, i64 %t58 store i8 %t57, ptr %t61 store i64 %t59, ptr %t53 br label %endif11582 else11581: %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t63 = load i64, ptr %a1 %t64 = sdiv i64 %t63, 262144 %t65 = add i64 240, %t64 %t66 = trunc i64 %t65 to i8 %t67 = load i64, ptr %t62 %t68 = add i64 %t67, 1 call void @finch_arr_reserve(ptr %a2, i64 %t68, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t69 = load ptr, ptr %a2 %t70 = getelementptr inbounds i8, ptr %t69, i64 %t67 store i8 %t66, ptr %t70 store i64 %t68, ptr %t62 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t72 = load i64, ptr %a1 %t73 = sdiv i64 %t72, 4096 %t74 = srem i64 %t73, 64 %t75 = add i64 128, %t74 %t76 = trunc i64 %t75 to i8 %t77 = load i64, ptr %t71 %t78 = add i64 %t77, 1 call void @finch_arr_reserve(ptr %a2, i64 %t78, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t79 = load ptr, ptr %a2 %t80 = getelementptr inbounds i8, ptr %t79, i64 %t77 store i8 %t76, ptr %t80 store i64 %t78, ptr %t71 %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t82 = load i64, ptr %a1 %t83 = sdiv i64 %t82, 64 %t84 = srem i64 %t83, 64 %t85 = add i64 128, %t84 %t86 = trunc i64 %t85 to i8 %t87 = load i64, ptr %t81 %t88 = add i64 %t87, 1 call void @finch_arr_reserve(ptr %a2, i64 %t88, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t89 = load ptr, ptr %a2 %t90 = getelementptr inbounds i8, ptr %t89, i64 %t87 store i8 %t86, ptr %t90 store i64 %t88, ptr %t81 %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t92 = load i64, ptr %a1 %t93 = srem i64 %t92, 64 %t94 = add i64 128, %t93 %t95 = trunc i64 %t94 to i8 %t96 = load i64, ptr %t91 %t97 = add i64 %t96, 1 call void @finch_arr_reserve(ptr %a2, i64 %t97, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t98 = load ptr, ptr %a2 %t99 = getelementptr inbounds i8, ptr %t98, i64 %t96 store i8 %t95, ptr %t99 store i64 %t97, ptr %t91 br label %endif11582 endif11582: br label %endif11579 endif11579: br label %endif11576 endif11576: %t100 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } zeroinitializer, ptr %a101 store { ptr, i64, i64 } %t100, ptr %a102 call void @finch_str_from_bytes(ptr %a101, ptr %a102) %t103 = load { ptr, i64, i64 }, ptr %a101 call void @finch.drop.arr_u8(ptr %a2) ret { ptr, i64, i64 } %t103 } define internal { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a3 = alloca i64, align 16 store ptr %p0, ptr %a1 store i64 0, ptr %a2 store i64 0, ptr %a3 br label %for.cond11583 for.cond11583: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, 4 br i1 %t5, label %for.body11584, label %for.end11586 for.body11584: %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic11587, label %ok11588 panic11587: call void @finch_panic(ptr @.str.7395, i64 348, ptr @.str.7396) unreachable ok11588: %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic11589, label %ok11590 panic11589: call void @finch_panic(ptr @.str.7397, i64 348, ptr @.str.7398) unreachable ok11590: %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 0 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sge i64 %t9, %t14 br label %logic.from11591 logic.from11591: br i1 %t15, label %logic.end11593, label %logic.rhs11592 logic.rhs11592: %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null br i1 %t17, label %panic11594, label %ok11595 panic11594: call void @finch_panic(ptr @.str.7399, i64 348, ptr @.str.7400) unreachable ok11595: %t18 = getelementptr inbounds %S.json.Reader, ptr %t16, i32 0, i32 0 %t19 = load ptr, ptr %a1 %t20 = icmp eq ptr %t19, null br i1 %t20, label %panic11596, label %ok11597 panic11596: call void @finch_panic(ptr @.str.7401, i64 348, ptr @.str.7402) unreachable ok11597: %t21 = getelementptr inbounds %S.json.Reader, ptr %t19, i32 0, i32 1 %t22 = load i64, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %t18 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 %t22, %t24 br i1 %t25, label %range11598, label %inrange11599 range11598: call void @finch_panic_index(ptr @.str.7403, i64 348, i64 %t22, i64 %t24) unreachable inrange11599: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds i8, ptr %t26, i64 %t22 %t28 = load i8, ptr %t27 %t29 = call i64 @finch.json.hex_value(i8 %t28) %t30 = icmp slt i64 %t29, 0 br label %logic.rend11600 logic.rend11600: br label %logic.end11593 logic.end11593: %t31 = phi i1 [ true, %logic.from11591 ], [ %t30, %logic.rend11600 ] br i1 %t31, label %then11601, label %endif11603 then11601: %t32 = load ptr, ptr %a1 %t33 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t32, { ptr, i64, i64 } { ptr @.str.7404, i64 19, i64 0 }) %t34 = insertvalue { i1, i64, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t33, 2 ret { i1, i64, { ptr, i64, i64 } } %t34 endif11603: %t35 = load i64, ptr %a2 %t36 = mul i64 %t35, 16 %t37 = load ptr, ptr %a1 %t38 = icmp eq ptr %t37, null br i1 %t38, label %panic11604, label %ok11605 panic11604: call void @finch_panic(ptr @.str.7405, i64 351, ptr @.str.7406) unreachable ok11605: %t39 = getelementptr inbounds %S.json.Reader, ptr %t37, i32 0, i32 0 %t40 = load ptr, ptr %a1 %t41 = icmp eq ptr %t40, null br i1 %t41, label %panic11606, label %ok11607 panic11606: call void @finch_panic(ptr @.str.7407, i64 351, ptr @.str.7408) unreachable ok11607: %t42 = getelementptr inbounds %S.json.Reader, ptr %t40, i32 0, i32 1 %t43 = load i64, ptr %t42 %t44 = load { ptr, i64, i64 }, ptr %t39 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 %t43, %t45 br i1 %t46, label %range11608, label %inrange11609 range11608: call void @finch_panic_index(ptr @.str.7409, i64 351, i64 %t43, i64 %t45) unreachable inrange11609: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds i8, ptr %t47, i64 %t43 %t49 = load i8, ptr %t48 %t50 = call i64 @finch.json.hex_value(i8 %t49) %t51 = add i64 %t36, %t50 store i64 %t51, ptr %a2 %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null br i1 %t53, label %panic11610, label %ok11611 panic11610: call void @finch_panic(ptr @.str.7410, i64 352, ptr @.str.7411) unreachable ok11611: %t54 = getelementptr inbounds %S.json.Reader, ptr %t52, i32 0, i32 1 %t55 = load i64, ptr %t54 %t56 = add i64 %t55, 1 store i64 %t56, ptr %t54 br label %for.step11585 for.step11585: %t57 = load i64, ptr %a3 %t58 = add i64 %t57, 1 store i64 %t58, ptr %a3 br label %for.cond11583 for.end11586: %t59 = load i64, ptr %a2 %t60 = insertvalue { i1, i64, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t61 = insertvalue { i1, i64, { ptr, i64, i64 } } %t60, i64 %t59, 1 ret { i1, i64, { ptr, i64, i64 } } %t61 } define internal { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca i64, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca i8, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca i8, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca i64, align 16 %a216 = alloca i64, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic11612, label %ok11613 panic11612: call void @finch_panic(ptr @.str.7412, i64 358, ptr @.str.7413) unreachable ok11613: %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = add i64 %t5, 1 store i64 %t6, ptr %t4 store { ptr, i64, i64 } zeroinitializer, ptr %a7 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic11614, label %ok11615 panic11614: call void @finch_panic(ptr @.str.7414, i64 360, ptr @.str.7415) unreachable ok11615: %t10 = getelementptr inbounds %S.json.Reader, ptr %t8, i32 0, i32 1 %t11 = load i64, ptr %t10 store i64 %t11, ptr %a12 br label %while.cond11616 while.cond11616: br label %while.body11617 while.body11617: %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null br i1 %t14, label %panic11619, label %ok11620 panic11619: call void @finch_panic(ptr @.str.7416, i64 362, ptr @.str.7417) unreachable ok11620: %t15 = getelementptr inbounds %S.json.Reader, ptr %t13, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = load ptr, ptr %a1 %t18 = icmp eq ptr %t17, null br i1 %t18, label %panic11621, label %ok11622 panic11621: call void @finch_panic(ptr @.str.7418, i64 362, ptr @.str.7419) unreachable ok11622: %t19 = getelementptr inbounds %S.json.Reader, ptr %t17, i32 0, i32 0 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 %t21 = load i64, ptr %t20 %t22 = icmp sge i64 %t16, %t21 br i1 %t22, label %then11623, label %endif11625 then11623: %t23 = load ptr, ptr %a1 %t24 = call { ptr, i64, i64 } @finch.json.where(ptr %t23) store { ptr, i64, i64 } { ptr @.str.7420, i64 30, i64 0 }, ptr %a26 store { ptr, i64, i64 } %t24, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) store { ptr, i64, i64 } %t24, ptr %a28 call void @finch_str_drop(ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t29, ptr %a31 store { ptr, i64, i64 } { ptr @.str.7421, i64 1, i64 0 }, ptr %a32 call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) store { ptr, i64, i64 } %t29, ptr %a33 call void @finch_str_drop(ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a30 call void @finch.drop.arr_str(ptr %a7) %t35 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t34, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t35 endif11625: %t36 = load ptr, ptr %a1 %t37 = icmp eq ptr %t36, null br i1 %t37, label %panic11626, label %ok11627 panic11626: call void @finch_panic(ptr @.str.7422, i64 365, ptr @.str.7423) unreachable ok11627: %t38 = getelementptr inbounds %S.json.Reader, ptr %t36, i32 0, i32 0 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null br i1 %t40, label %panic11628, label %ok11629 panic11628: call void @finch_panic(ptr @.str.7424, i64 365, ptr @.str.7425) unreachable ok11629: %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 1 %t42 = load i64, ptr %t41 %t43 = load { ptr, i64, i64 }, ptr %t38 %t44 = extractvalue { ptr, i64, i64 } %t43, 1 %t45 = icmp uge i64 %t42, %t44 br i1 %t45, label %range11630, label %inrange11631 range11630: call void @finch_panic_index(ptr @.str.7426, i64 365, i64 %t42, i64 %t44) unreachable inrange11631: %t46 = extractvalue { ptr, i64, i64 } %t43, 0 %t47 = getelementptr inbounds i8, ptr %t46, i64 %t42 %t48 = load i8, ptr %t47 store i8 %t48, ptr %a49 %t50 = load i8, ptr %a49 %t51 = icmp eq i8 %t50, 34 br i1 %t51, label %then11632, label %endif11634 then11632: %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t53 = load ptr, ptr %a1 %t54 = icmp eq ptr %t53, null br i1 %t54, label %panic11635, label %ok11636 panic11635: call void @finch_panic(ptr @.str.7427, i64 367, ptr @.str.7428) unreachable ok11636: %t55 = getelementptr inbounds %S.json.Reader, ptr %t53, i32 0, i32 0 %t56 = load { ptr, i64, i64 }, ptr %t55 store { ptr, i64, i64 } %t56, ptr %a57 %t59 = load i64, ptr %a12 %t60 = load ptr, ptr %a1 %t61 = icmp eq ptr %t60, null br i1 %t61, label %panic11637, label %ok11638 panic11637: call void @finch_panic(ptr @.str.7430, i64 367, ptr @.str.7431) unreachable ok11638: %t62 = getelementptr inbounds %S.json.Reader, ptr %t60, i32 0, i32 1 %t63 = load i64, ptr %t62 call void @finch_str_sub(ptr %a58, ptr %a57, i64 %t59, i64 %t63, ptr @.str.7429, i64 367) %t64 = load { ptr, i64, i64 }, ptr %a58 %t65 = load i64, ptr %t52 %t66 = add i64 %t65, 1 call void @finch_arr_reserve(ptr %a7, i64 %t66, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t67 = load ptr, ptr %a7 %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i64 %t65 store { ptr, i64, i64 } %t64, ptr %t68 store i64 %t66, ptr %t52 %t69 = load ptr, ptr %a1 %t70 = icmp eq ptr %t69, null br i1 %t70, label %panic11639, label %ok11640 panic11639: call void @finch_panic(ptr @.str.7432, i64 368, ptr @.str.7433) unreachable ok11640: %t71 = getelementptr inbounds %S.json.Reader, ptr %t69, i32 0, i32 1 %t72 = load i64, ptr %t71 %t73 = add i64 %t72, 1 store i64 %t73, ptr %t71 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.7434, i64 0, i64 0 }, ptr %a75 call void @finch_str_join(ptr %a76, ptr %a7, ptr %a75) %t77 = load { ptr, i64, i64 }, ptr %a76 call void @finch.drop.arr_str(ptr %a7) %t78 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t79 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t78, { ptr, i64, i64 } %t77, 1 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t79 endif11634: %t80 = load i8, ptr %a49 %t81 = zext i8 %t80 to i64 %t82 = icmp slt i64 %t81, 32 br i1 %t82, label %then11641, label %endif11643 then11641: %t83 = load ptr, ptr %a1 %t84 = call { ptr, i64, i64 } @finch.json.where(ptr %t83) store { ptr, i64, i64 } { ptr @.str.7435, i64 55, i64 0 }, ptr %a86 store { ptr, i64, i64 } %t84, ptr %a87 call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) store { ptr, i64, i64 } %t84, ptr %a88 call void @finch_str_drop(ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a85 store { ptr, i64, i64 } %t89, ptr %a91 store { ptr, i64, i64 } { ptr @.str.7436, i64 1, i64 0 }, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) store { ptr, i64, i64 } %t89, ptr %a93 call void @finch_str_drop(ptr %a93) %t94 = load { ptr, i64, i64 }, ptr %a90 call void @finch.drop.arr_str(ptr %a7) %t95 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t94, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t95 endif11643: %t96 = load i8, ptr %a49 %t97 = icmp ne i8 %t96, 92 br i1 %t97, label %then11644, label %endif11646 then11644: %t98 = load ptr, ptr %a1 %t99 = icmp eq ptr %t98, null br i1 %t99, label %panic11647, label %ok11648 panic11647: call void @finch_panic(ptr @.str.7437, i64 375, ptr @.str.7438) unreachable ok11648: %t100 = getelementptr inbounds %S.json.Reader, ptr %t98, i32 0, i32 1 %t101 = load i64, ptr %t100 %t102 = add i64 %t101, 1 store i64 %t102, ptr %t100 br label %while.cond11616 endif11646: %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t104 = load ptr, ptr %a1 %t105 = icmp eq ptr %t104, null br i1 %t105, label %panic11649, label %ok11650 panic11649: call void @finch_panic(ptr @.str.7439, i64 378, ptr @.str.7440) unreachable ok11650: %t106 = getelementptr inbounds %S.json.Reader, ptr %t104, i32 0, i32 0 %t107 = load { ptr, i64, i64 }, ptr %t106 store { ptr, i64, i64 } %t107, ptr %a108 %t110 = load i64, ptr %a12 %t111 = load ptr, ptr %a1 %t112 = icmp eq ptr %t111, null br i1 %t112, label %panic11651, label %ok11652 panic11651: call void @finch_panic(ptr @.str.7442, i64 378, ptr @.str.7443) unreachable ok11652: %t113 = getelementptr inbounds %S.json.Reader, ptr %t111, i32 0, i32 1 %t114 = load i64, ptr %t113 call void @finch_str_sub(ptr %a109, ptr %a108, i64 %t110, i64 %t114, ptr @.str.7441, i64 378) %t115 = load { ptr, i64, i64 }, ptr %a109 %t116 = load i64, ptr %t103 %t117 = add i64 %t116, 1 call void @finch_arr_reserve(ptr %a7, i64 %t117, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t118 = load ptr, ptr %a7 %t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %t118, i64 %t116 store { ptr, i64, i64 } %t115, ptr %t119 store i64 %t117, ptr %t103 %t120 = load ptr, ptr %a1 %t121 = icmp eq ptr %t120, null br i1 %t121, label %panic11653, label %ok11654 panic11653: call void @finch_panic(ptr @.str.7444, i64 379, ptr @.str.7445) unreachable ok11654: %t122 = getelementptr inbounds %S.json.Reader, ptr %t120, i32 0, i32 1 %t123 = load i64, ptr %t122 %t124 = add i64 %t123, 1 store i64 %t124, ptr %t122 %t125 = load ptr, ptr %a1 %t126 = call i8 @finch.json.peek(ptr %t125) store i8 %t126, ptr %a127 %t128 = load ptr, ptr %a1 %t129 = icmp eq ptr %t128, null br i1 %t129, label %panic11655, label %ok11656 panic11655: call void @finch_panic(ptr @.str.7446, i64 381, ptr @.str.7447) unreachable ok11656: %t130 = getelementptr inbounds %S.json.Reader, ptr %t128, i32 0, i32 1 %t131 = load i64, ptr %t130 %t132 = add i64 %t131, 1 store i64 %t132, ptr %t130 %t133 = load i8, ptr %a127 %t134 = icmp eq i8 %t133, 110 br i1 %t134, label %then11657, label %else11658 then11657: %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t136 = load i64, ptr %t135 %t137 = add i64 %t136, 1 call void @finch_arr_reserve(ptr %a7, i64 %t137, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t138 = load ptr, ptr %a7 %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i64 %t136 store { ptr, i64, i64 } { ptr @.str.7448, i64 1, i64 0 }, ptr %t139 store i64 %t137, ptr %t135 br label %endif11659 else11658: %t140 = load i8, ptr %a127 %t141 = icmp eq i8 %t140, 116 br i1 %t141, label %then11660, label %else11661 then11660: %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t143 = load i64, ptr %t142 %t144 = add i64 %t143, 1 call void @finch_arr_reserve(ptr %a7, i64 %t144, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t145 = load ptr, ptr %a7 %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i64 %t143 store { ptr, i64, i64 } { ptr @.str.7449, i64 1, i64 0 }, ptr %t146 store i64 %t144, ptr %t142 br label %endif11662 else11661: %t147 = load i8, ptr %a127 %t148 = icmp eq i8 %t147, 114 br i1 %t148, label %then11663, label %else11664 then11663: %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t150 = load i64, ptr %t149 %t151 = add i64 %t150, 1 call void @finch_arr_reserve(ptr %a7, i64 %t151, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t152 = load ptr, ptr %a7 %t153 = getelementptr inbounds { ptr, i64, i64 }, ptr %t152, i64 %t150 store { ptr, i64, i64 } { ptr @.str.7450, i64 1, i64 0 }, ptr %t153 store i64 %t151, ptr %t149 br label %endif11665 else11664: %t154 = load i8, ptr %a127 %t155 = icmp eq i8 %t154, 98 br i1 %t155, label %then11666, label %else11667 then11666: %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t157 = call { ptr, i64, i64 } @finch.json.utf8(i64 8) %t158 = load i64, ptr %t156 %t159 = add i64 %t158, 1 call void @finch_arr_reserve(ptr %a7, i64 %t159, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t160 = load ptr, ptr %a7 %t161 = getelementptr inbounds { ptr, i64, i64 }, ptr %t160, i64 %t158 store { ptr, i64, i64 } %t157, ptr %t161 store i64 %t159, ptr %t156 br label %endif11668 else11667: %t162 = load i8, ptr %a127 %t163 = icmp eq i8 %t162, 102 br i1 %t163, label %then11669, label %else11670 then11669: %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t165 = call { ptr, i64, i64 } @finch.json.utf8(i64 12) %t166 = load i64, ptr %t164 %t167 = add i64 %t166, 1 call void @finch_arr_reserve(ptr %a7, i64 %t167, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t168 = load ptr, ptr %a7 %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t168, i64 %t166 store { ptr, i64, i64 } %t165, ptr %t169 store i64 %t167, ptr %t164 br label %endif11671 else11670: %t170 = load i8, ptr %a127 %t171 = icmp eq i8 %t170, 34 br label %logic.from11672 logic.from11672: br i1 %t171, label %logic.end11674, label %logic.rhs11673 logic.rhs11673: %t172 = load i8, ptr %a127 %t173 = icmp eq i8 %t172, 92 br label %logic.rend11675 logic.rend11675: br label %logic.end11674 logic.end11674: %t174 = phi i1 [ true, %logic.from11672 ], [ %t173, %logic.rend11675 ] br label %logic.from11676 logic.from11676: br i1 %t174, label %logic.end11678, label %logic.rhs11677 logic.rhs11677: %t175 = load i8, ptr %a127 %t176 = icmp eq i8 %t175, 47 br label %logic.rend11679 logic.rend11679: br label %logic.end11678 logic.end11678: %t177 = phi i1 [ true, %logic.from11676 ], [ %t176, %logic.rend11679 ] br i1 %t177, label %then11680, label %else11681 then11680: %t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t179 = load i8, ptr %a127 call void @finch_str_from_char(ptr %a180, i8 signext %t179) %t181 = load { ptr, i64, i64 }, ptr %a180 %t182 = load i64, ptr %t178 %t183 = add i64 %t182, 1 call void @finch_arr_reserve(ptr %a7, i64 %t183, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t184 = load ptr, ptr %a7 %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i64 %t182 store { ptr, i64, i64 } %t181, ptr %t185 store i64 %t183, ptr %t178 br label %endif11682 else11681: %t186 = load i8, ptr %a127 %t187 = icmp eq i8 %t186, 117 br i1 %t187, label %then11683, label %else11684 then11683: %t188 = load ptr, ptr %a1 %t189 = call { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %t188) %t190 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 0 %t191 = xor i1 %t190, true %t192 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 2 %t193 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 1 br i1 %t191, label %try.failed11686, label %try.ok11687 try.failed11686: call void @finch.drop.arr_str(ptr %a7) %t194 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t192, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t194 try.ok11687: store i64 %t193, ptr %a195 %t196 = load i64, ptr %a195 %t197 = icmp sge i64 %t196, 55296 br label %logic.from11688 logic.from11688: br i1 %t197, label %logic.rhs11689, label %logic.end11690 logic.rhs11689: %t198 = load i64, ptr %a195 %t199 = icmp slt i64 %t198, 56320 br label %logic.rend11691 logic.rend11691: br label %logic.end11690 logic.end11690: %t200 = phi i1 [ false, %logic.from11688 ], [ %t199, %logic.rend11691 ] br label %logic.from11692 logic.from11692: br i1 %t200, label %logic.rhs11693, label %logic.end11694 logic.rhs11693: %t201 = load ptr, ptr %a1 %t202 = call i1 @finch.json.comes(ptr %t201, { ptr, i64, i64 } { ptr @.str.7451, i64 2, i64 0 }) br label %logic.rend11695 logic.rend11695: br label %logic.end11694 logic.end11694: %t203 = phi i1 [ false, %logic.from11692 ], [ %t202, %logic.rend11695 ] br i1 %t203, label %then11696, label %endif11698 then11696: %t204 = load ptr, ptr %a1 %t205 = icmp eq ptr %t204, null br i1 %t205, label %panic11699, label %ok11700 panic11699: call void @finch_panic(ptr @.str.7452, i64 398, ptr @.str.7453) unreachable ok11700: %t206 = getelementptr inbounds %S.json.Reader, ptr %t204, i32 0, i32 1 %t207 = load i64, ptr %t206 %t208 = add i64 %t207, 2 store i64 %t208, ptr %t206 %t209 = load ptr, ptr %a1 %t210 = call { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %t209) %t211 = extractvalue { i1, i64, { ptr, i64, i64 } } %t210, 0 %t212 = xor i1 %t211, true %t213 = extractvalue { i1, i64, { ptr, i64, i64 } } %t210, 2 %t214 = extractvalue { i1, i64, { ptr, i64, i64 } } %t210, 1 br i1 %t212, label %try.failed11701, label %try.ok11702 try.failed11701: call void @finch.drop.arr_str(ptr %a7) %t215 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t213, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t215 try.ok11702: store i64 %t214, ptr %a216 %t217 = load i64, ptr %a195 %t218 = sub i64 %t217, 55296 %t219 = mul i64 %t218, 1024 %t220 = add i64 65536, %t219 %t221 = load i64, ptr %a216 %t222 = sub i64 %t221, 56320 %t223 = add i64 %t220, %t222 store i64 %t223, ptr %a195 br label %endif11698 endif11698: %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t225 = load i64, ptr %a195 %t226 = call { ptr, i64, i64 } @finch.json.utf8(i64 %t225) %t227 = load i64, ptr %t224 %t228 = add i64 %t227, 1 call void @finch_arr_reserve(ptr %a7, i64 %t228, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t229 = load ptr, ptr %a7 %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i64 %t227 store { ptr, i64, i64 } %t226, ptr %t230 store i64 %t228, ptr %t224 br label %endif11685 else11684: %t231 = load i8, ptr %a127 call void @finch_str_from_char(ptr %a232, i8 signext %t231) %t233 = load { ptr, i64, i64 }, ptr %a232 store { ptr, i64, i64 } { ptr @.str.7454, i64 22, i64 0 }, ptr %a235 store { ptr, i64, i64 } %t233, ptr %a236 call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) store { ptr, i64, i64 } %t233, ptr %a237 call void @finch_str_drop(ptr %a237) %t238 = load { ptr, i64, i64 }, ptr %a234 store { ptr, i64, i64 } %t238, ptr %a240 store { ptr, i64, i64 } { ptr @.str.7455, i64 12, i64 0 }, ptr %a241 call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) store { ptr, i64, i64 } %t238, ptr %a242 call void @finch_str_drop(ptr %a242) %t243 = load { ptr, i64, i64 }, ptr %a239 %t244 = load ptr, ptr %a1 %t245 = call { ptr, i64, i64 } @finch.json.where(ptr %t244) store { ptr, i64, i64 } %t243, ptr %a247 store { ptr, i64, i64 } %t245, ptr %a248 call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) store { ptr, i64, i64 } %t243, ptr %a249 call void @finch_str_drop(ptr %a249) store { ptr, i64, i64 } %t245, ptr %a250 call void @finch_str_drop(ptr %a250) %t251 = load { ptr, i64, i64 }, ptr %a246 store { ptr, i64, i64 } %t251, ptr %a253 store { ptr, i64, i64 } { ptr @.str.7456, i64 1, i64 0 }, ptr %a254 call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) store { ptr, i64, i64 } %t251, ptr %a255 call void @finch_str_drop(ptr %a255) %t256 = load { ptr, i64, i64 }, ptr %a252 call void @finch.drop.arr_str(ptr %a7) %t257 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t256, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t257 endif11685: br label %endif11682 endif11682: br label %endif11671 endif11671: br label %endif11668 endif11668: br label %endif11665 endif11665: br label %endif11662 endif11662: br label %endif11659 endif11659: %t258 = load ptr, ptr %a1 %t259 = icmp eq ptr %t258, null br i1 %t259, label %panic11703, label %ok11704 panic11703: call void @finch_panic(ptr @.str.7457, i64 406, ptr @.str.7458) unreachable ok11704: %t260 = getelementptr inbounds %S.json.Reader, ptr %t258, i32 0, i32 1 %t261 = load i64, ptr %t260 store i64 %t261, ptr %a12 br label %while.cond11616 } define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_number(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a6 = alloca i64, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca double, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca double, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic11705, label %ok11706 panic11705: call void @finch_panic(ptr @.str.7459, i64 411, ptr @.str.7460) unreachable ok11706: %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 store i64 %t5, ptr %a6 %t7 = load ptr, ptr %a1 %t8 = call i8 @finch.json.peek(ptr %t7) %t9 = icmp eq i8 %t8, 45 br i1 %t9, label %then11707, label %endif11709 then11707: %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic11710, label %ok11711 panic11710: call void @finch_panic(ptr @.str.7461, i64 413, ptr @.str.7462) unreachable ok11711: %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = add i64 %t13, 1 store i64 %t14, ptr %t12 br label %endif11709 endif11709: br label %while.cond11712 while.cond11712: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic11715, label %ok11716 panic11715: call void @finch_panic(ptr @.str.7463, i64 415, ptr @.str.7464) unreachable ok11716: %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = load ptr, ptr %a1 %t20 = icmp eq ptr %t19, null br i1 %t20, label %panic11717, label %ok11718 panic11717: call void @finch_panic(ptr @.str.7465, i64 415, ptr @.str.7466) unreachable ok11718: %t21 = getelementptr inbounds %S.json.Reader, ptr %t19, i32 0, i32 0 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = icmp slt i64 %t18, %t23 br label %logic.from11719 logic.from11719: br i1 %t24, label %logic.rhs11720, label %logic.end11721 logic.rhs11720: %t25 = load ptr, ptr %a1 %t26 = icmp eq ptr %t25, null br i1 %t26, label %panic11722, label %ok11723 panic11722: call void @finch_panic(ptr @.str.7467, i64 415, ptr @.str.7468) unreachable ok11723: %t27 = getelementptr inbounds %S.json.Reader, ptr %t25, i32 0, i32 0 %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic11724, label %ok11725 panic11724: call void @finch_panic(ptr @.str.7469, i64 415, ptr @.str.7470) unreachable ok11725: %t30 = getelementptr inbounds %S.json.Reader, ptr %t28, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = load { ptr, i64, i64 }, ptr %t27 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 br i1 %t34, label %range11726, label %inrange11727 range11726: call void @finch_panic_index(ptr @.str.7471, i64 415, i64 %t31, i64 %t33) unreachable inrange11727: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds i8, ptr %t35, i64 %t31 %t37 = load i8, ptr %t36 %t38 = icmp uge i8 %t37, 48 br label %logic.from11728 logic.from11728: br i1 %t38, label %logic.rhs11729, label %logic.end11730 logic.rhs11729: %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null br i1 %t40, label %panic11731, label %ok11732 panic11731: call void @finch_panic(ptr @.str.7472, i64 415, ptr @.str.7473) unreachable ok11732: %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 0 %t42 = load ptr, ptr %a1 %t43 = icmp eq ptr %t42, null br i1 %t43, label %panic11733, label %ok11734 panic11733: call void @finch_panic(ptr @.str.7474, i64 415, ptr @.str.7475) unreachable ok11734: %t44 = getelementptr inbounds %S.json.Reader, ptr %t42, i32 0, i32 1 %t45 = load i64, ptr %t44 %t46 = load { ptr, i64, i64 }, ptr %t41 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 %t45, %t47 br i1 %t48, label %range11735, label %inrange11736 range11735: call void @finch_panic_index(ptr @.str.7476, i64 415, i64 %t45, i64 %t47) unreachable inrange11736: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds i8, ptr %t49, i64 %t45 %t51 = load i8, ptr %t50 %t52 = icmp ule i8 %t51, 57 br label %logic.rend11737 logic.rend11737: br label %logic.end11730 logic.end11730: %t53 = phi i1 [ false, %logic.from11728 ], [ %t52, %logic.rend11737 ] br label %logic.from11738 logic.from11738: br i1 %t53, label %logic.end11740, label %logic.rhs11739 logic.rhs11739: %t54 = load ptr, ptr %a1 %t55 = icmp eq ptr %t54, null br i1 %t55, label %panic11741, label %ok11742 panic11741: call void @finch_panic(ptr @.str.7477, i64 415, ptr @.str.7478) unreachable ok11742: %t56 = getelementptr inbounds %S.json.Reader, ptr %t54, i32 0, i32 0 %t57 = load ptr, ptr %a1 %t58 = icmp eq ptr %t57, null br i1 %t58, label %panic11743, label %ok11744 panic11743: call void @finch_panic(ptr @.str.7479, i64 415, ptr @.str.7480) unreachable ok11744: %t59 = getelementptr inbounds %S.json.Reader, ptr %t57, i32 0, i32 1 %t60 = load i64, ptr %t59 %t61 = load { ptr, i64, i64 }, ptr %t56 %t62 = extractvalue { ptr, i64, i64 } %t61, 1 %t63 = icmp uge i64 %t60, %t62 br i1 %t63, label %range11745, label %inrange11746 range11745: call void @finch_panic_index(ptr @.str.7481, i64 415, i64 %t60, i64 %t62) unreachable inrange11746: %t64 = extractvalue { ptr, i64, i64 } %t61, 0 %t65 = getelementptr inbounds i8, ptr %t64, i64 %t60 %t66 = load i8, ptr %t65 %t67 = icmp eq i8 %t66, 46 br label %logic.rend11747 logic.rend11747: br label %logic.end11740 logic.end11740: %t68 = phi i1 [ true, %logic.from11738 ], [ %t67, %logic.rend11747 ] br label %logic.from11748 logic.from11748: br i1 %t68, label %logic.end11750, label %logic.rhs11749 logic.rhs11749: %t69 = load ptr, ptr %a1 %t70 = icmp eq ptr %t69, null br i1 %t70, label %panic11751, label %ok11752 panic11751: call void @finch_panic(ptr @.str.7482, i64 415, ptr @.str.7483) unreachable ok11752: %t71 = getelementptr inbounds %S.json.Reader, ptr %t69, i32 0, i32 0 %t72 = load ptr, ptr %a1 %t73 = icmp eq ptr %t72, null br i1 %t73, label %panic11753, label %ok11754 panic11753: call void @finch_panic(ptr @.str.7484, i64 415, ptr @.str.7485) unreachable ok11754: %t74 = getelementptr inbounds %S.json.Reader, ptr %t72, i32 0, i32 1 %t75 = load i64, ptr %t74 %t76 = load { ptr, i64, i64 }, ptr %t71 %t77 = extractvalue { ptr, i64, i64 } %t76, 1 %t78 = icmp uge i64 %t75, %t77 br i1 %t78, label %range11755, label %inrange11756 range11755: call void @finch_panic_index(ptr @.str.7486, i64 415, i64 %t75, i64 %t77) unreachable inrange11756: %t79 = extractvalue { ptr, i64, i64 } %t76, 0 %t80 = getelementptr inbounds i8, ptr %t79, i64 %t75 %t81 = load i8, ptr %t80 %t82 = icmp eq i8 %t81, 101 br label %logic.rend11757 logic.rend11757: br label %logic.end11750 logic.end11750: %t83 = phi i1 [ true, %logic.from11748 ], [ %t82, %logic.rend11757 ] br label %logic.from11758 logic.from11758: br i1 %t83, label %logic.end11760, label %logic.rhs11759 logic.rhs11759: %t84 = load ptr, ptr %a1 %t85 = icmp eq ptr %t84, null br i1 %t85, label %panic11761, label %ok11762 panic11761: call void @finch_panic(ptr @.str.7487, i64 415, ptr @.str.7488) unreachable ok11762: %t86 = getelementptr inbounds %S.json.Reader, ptr %t84, i32 0, i32 0 %t87 = load ptr, ptr %a1 %t88 = icmp eq ptr %t87, null br i1 %t88, label %panic11763, label %ok11764 panic11763: call void @finch_panic(ptr @.str.7489, i64 415, ptr @.str.7490) unreachable ok11764: %t89 = getelementptr inbounds %S.json.Reader, ptr %t87, i32 0, i32 1 %t90 = load i64, ptr %t89 %t91 = load { ptr, i64, i64 }, ptr %t86 %t92 = extractvalue { ptr, i64, i64 } %t91, 1 %t93 = icmp uge i64 %t90, %t92 br i1 %t93, label %range11765, label %inrange11766 range11765: call void @finch_panic_index(ptr @.str.7491, i64 415, i64 %t90, i64 %t92) unreachable inrange11766: %t94 = extractvalue { ptr, i64, i64 } %t91, 0 %t95 = getelementptr inbounds i8, ptr %t94, i64 %t90 %t96 = load i8, ptr %t95 %t97 = icmp eq i8 %t96, 69 br label %logic.rend11767 logic.rend11767: br label %logic.end11760 logic.end11760: %t98 = phi i1 [ true, %logic.from11758 ], [ %t97, %logic.rend11767 ] br label %logic.from11768 logic.from11768: br i1 %t98, label %logic.end11770, label %logic.rhs11769 logic.rhs11769: %t99 = load ptr, ptr %a1 %t100 = icmp eq ptr %t99, null br i1 %t100, label %panic11771, label %ok11772 panic11771: call void @finch_panic(ptr @.str.7492, i64 415, ptr @.str.7493) unreachable ok11772: %t101 = getelementptr inbounds %S.json.Reader, ptr %t99, i32 0, i32 0 %t102 = load ptr, ptr %a1 %t103 = icmp eq ptr %t102, null br i1 %t103, label %panic11773, label %ok11774 panic11773: call void @finch_panic(ptr @.str.7494, i64 415, ptr @.str.7495) unreachable ok11774: %t104 = getelementptr inbounds %S.json.Reader, ptr %t102, i32 0, i32 1 %t105 = load i64, ptr %t104 %t106 = load { ptr, i64, i64 }, ptr %t101 %t107 = extractvalue { ptr, i64, i64 } %t106, 1 %t108 = icmp uge i64 %t105, %t107 br i1 %t108, label %range11775, label %inrange11776 range11775: call void @finch_panic_index(ptr @.str.7496, i64 415, i64 %t105, i64 %t107) unreachable inrange11776: %t109 = extractvalue { ptr, i64, i64 } %t106, 0 %t110 = getelementptr inbounds i8, ptr %t109, i64 %t105 %t111 = load i8, ptr %t110 %t112 = icmp eq i8 %t111, 43 br label %logic.rend11777 logic.rend11777: br label %logic.end11770 logic.end11770: %t113 = phi i1 [ true, %logic.from11768 ], [ %t112, %logic.rend11777 ] br label %logic.from11778 logic.from11778: br i1 %t113, label %logic.end11780, label %logic.rhs11779 logic.rhs11779: %t114 = load ptr, ptr %a1 %t115 = icmp eq ptr %t114, null br i1 %t115, label %panic11781, label %ok11782 panic11781: call void @finch_panic(ptr @.str.7497, i64 415, ptr @.str.7498) unreachable ok11782: %t116 = getelementptr inbounds %S.json.Reader, ptr %t114, i32 0, i32 0 %t117 = load ptr, ptr %a1 %t118 = icmp eq ptr %t117, null br i1 %t118, label %panic11783, label %ok11784 panic11783: call void @finch_panic(ptr @.str.7499, i64 415, ptr @.str.7500) unreachable ok11784: %t119 = getelementptr inbounds %S.json.Reader, ptr %t117, i32 0, i32 1 %t120 = load i64, ptr %t119 %t121 = load { ptr, i64, i64 }, ptr %t116 %t122 = extractvalue { ptr, i64, i64 } %t121, 1 %t123 = icmp uge i64 %t120, %t122 br i1 %t123, label %range11785, label %inrange11786 range11785: call void @finch_panic_index(ptr @.str.7501, i64 415, i64 %t120, i64 %t122) unreachable inrange11786: %t124 = extractvalue { ptr, i64, i64 } %t121, 0 %t125 = getelementptr inbounds i8, ptr %t124, i64 %t120 %t126 = load i8, ptr %t125 %t127 = icmp eq i8 %t126, 45 br label %logic.rend11787 logic.rend11787: br label %logic.end11780 logic.end11780: %t128 = phi i1 [ true, %logic.from11778 ], [ %t127, %logic.rend11787 ] br label %logic.rend11788 logic.rend11788: br label %logic.end11721 logic.end11721: %t129 = phi i1 [ false, %logic.from11719 ], [ %t128, %logic.rend11788 ] br i1 %t129, label %while.body11713, label %while.end11714 while.body11713: %t130 = load ptr, ptr %a1 %t131 = icmp eq ptr %t130, null br i1 %t131, label %panic11789, label %ok11790 panic11789: call void @finch_panic(ptr @.str.7502, i64 416, ptr @.str.7503) unreachable ok11790: %t132 = getelementptr inbounds %S.json.Reader, ptr %t130, i32 0, i32 1 %t133 = load i64, ptr %t132 %t134 = add i64 %t133, 1 store i64 %t134, ptr %t132 br label %while.cond11712 while.end11714: %t135 = load ptr, ptr %a1 %t136 = icmp eq ptr %t135, null br i1 %t136, label %panic11791, label %ok11792 panic11791: call void @finch_panic(ptr @.str.7504, i64 418, ptr @.str.7505) unreachable ok11792: %t137 = getelementptr inbounds %S.json.Reader, ptr %t135, i32 0, i32 0 %t138 = load { ptr, i64, i64 }, ptr %t137 store { ptr, i64, i64 } %t138, ptr %a139 %t141 = load i64, ptr %a6 %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null br i1 %t143, label %panic11793, label %ok11794 panic11793: call void @finch_panic(ptr @.str.7507, i64 418, ptr @.str.7508) unreachable ok11794: %t144 = getelementptr inbounds %S.json.Reader, ptr %t142, i32 0, i32 1 %t145 = load i64, ptr %t144 call void @finch_str_sub(ptr %a140, ptr %a139, i64 %t141, i64 %t145, ptr @.str.7506, i64 418) %t146 = load { ptr, i64, i64 }, ptr %a140 store { ptr, i64, i64 } zeroinitializer, ptr %a147 store double 0.0, ptr %a148 store { ptr, i64, i64 } %t146, ptr %a149 %t150 = call i32 @finch_str_try_float(ptr %a149, ptr %a148, ptr %a147) %t151 = icmp eq i32 %t150, 0 %t152 = load { ptr, i64, i64 }, ptr %a147 store { ptr, i64, i64 } %t146, ptr %a153 call void @finch_str_drop(ptr %a153) %t154 = load double, ptr %a148 br i1 %t151, label %or.failed11795, label %or.ok11796 or.failed11795: store { ptr, i64, i64 } %t152, ptr %a155 %t156 = load i64, ptr %a6 %t157 = load ptr, ptr %a1 %t158 = icmp eq ptr %t157, null br i1 %t158, label %panic11797, label %ok11798 panic11797: call void @finch_panic(ptr @.str.7509, i64 419, ptr @.str.7510) unreachable ok11798: %t159 = getelementptr inbounds %S.json.Reader, ptr %t157, i32 0, i32 1 store i64 %t156, ptr %t159 %t160 = load ptr, ptr %a1 %t161 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t160, { ptr, i64, i64 } { ptr @.str.7511, i64 8, i64 0 }) call void @finch_str_drop(ptr %a155) %t162 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t161, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t162 or.ok11796: store double %t154, ptr %a163 %t164 = load double, ptr %a163 %t165 = call %S.json.Json @finch.json.new_number(double %t164) %t166 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t167 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t166, %S.json.Json %t165, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t167 } define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a5 = alloca i8, align 16 %a22 = alloca %S.json.Json, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca %S.json.Json, align 16 %a103 = alloca %S.json.Json, align 16 %a128 = alloca %S.json.Json, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t2) %t3 = load ptr, ptr %a1 %t4 = call i8 @finch.json.peek(ptr %t3) store i8 %t4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic11799, label %ok11800 panic11799: call void @finch_panic(ptr @.str.7512, i64 428, ptr @.str.7513) unreachable ok11800: %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic11801, label %ok11802 panic11801: call void @finch_panic(ptr @.str.7514, i64 428, ptr @.str.7515) unreachable ok11802: %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 0 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sge i64 %t9, %t14 br i1 %t15, label %then11803, label %endif11805 then11803: %t16 = load ptr, ptr %a1 %t17 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t16, { ptr, i64, i64 } { ptr @.str.7516, i64 7, i64 0 }) %t18 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t17, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t18 endif11805: %t19 = load i8, ptr %a5 %t20 = icmp eq i8 %t19, 123 br i1 %t20, label %then11806, label %endif11808 then11806: %t21 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t21, ptr %a22 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null br i1 %t24, label %panic11809, label %ok11810 panic11809: call void @finch_panic(ptr @.str.7517, i64 433, ptr @.str.7518) unreachable ok11810: %t25 = getelementptr inbounds %S.json.Reader, ptr %t23, i32 0, i32 1 %t26 = load i64, ptr %t25 %t27 = add i64 %t26, 1 store i64 %t27, ptr %t25 %t28 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t28) %t29 = load ptr, ptr %a1 %t30 = call i8 @finch.json.peek(ptr %t29) %t31 = icmp eq i8 %t30, 125 br i1 %t31, label %then11811, label %endif11813 then11811: %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null br i1 %t33, label %panic11814, label %ok11815 panic11814: call void @finch_panic(ptr @.str.7519, i64 436, ptr @.str.7520) unreachable ok11815: %t34 = getelementptr inbounds %S.json.Reader, ptr %t32, i32 0, i32 1 %t35 = load i64, ptr %t34 %t36 = add i64 %t35, 1 store i64 %t36, ptr %t34 %t37 = load %S.json.Json, ptr %a22 %t38 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t39 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t38, %S.json.Json %t37, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t39 endif11813: br label %while.cond11816 while.cond11816: br label %while.body11817 while.body11817: %t40 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t40) %t41 = load ptr, ptr %a1 %t42 = call i8 @finch.json.peek(ptr %t41) %t43 = icmp ne i8 %t42, 34 br i1 %t43, label %then11819, label %endif11821 then11819: %t44 = load ptr, ptr %a1 %t45 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t44, { ptr, i64, i64 } { ptr @.str.7521, i64 15, i64 0 }) call void @finch.drop.S_json_Json(ptr %a22) %t46 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t45, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t46 endif11821: %t47 = load ptr, ptr %a1 %t48 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %t47) %t49 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 0 %t50 = xor i1 %t49, true %t51 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 2 %t52 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 1 br i1 %t50, label %try.failed11822, label %try.ok11823 try.failed11822: call void @finch.drop.S_json_Json(ptr %a22) %t53 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t51, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t53 try.ok11823: store { ptr, i64, i64 } %t52, ptr %a54 %t55 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t55) %t56 = load ptr, ptr %a1 %t57 = call i8 @finch.json.peek(ptr %t56) %t58 = icmp ne i8 %t57, 58 br i1 %t58, label %then11824, label %endif11826 then11824: %t59 = load ptr, ptr %a1 %t60 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t59, { ptr, i64, i64 } { ptr @.str.7522, i64 3, i64 0 }) call void @finch_str_drop(ptr %a54) call void @finch.drop.S_json_Json(ptr %a22) %t61 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t60, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t61 endif11826: %t62 = load ptr, ptr %a1 %t63 = icmp eq ptr %t62, null br i1 %t63, label %panic11827, label %ok11828 panic11827: call void @finch_panic(ptr @.str.7523, i64 449, ptr @.str.7524) unreachable ok11828: %t64 = getelementptr inbounds %S.json.Reader, ptr %t62, i32 0, i32 1 %t65 = load i64, ptr %t64 %t66 = add i64 %t65, 1 store i64 %t66, ptr %t64 %t67 = load ptr, ptr %a1 %t68 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %t67) %t69 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 0 %t70 = xor i1 %t69, true %t71 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 2 %t72 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 1 br i1 %t70, label %try.failed11829, label %try.ok11830 try.failed11829: call void @finch_str_drop(ptr %a54) call void @finch.drop.S_json_Json(ptr %a22) %t73 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t71, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t73 try.ok11830: store %S.json.Json %t72, ptr %a74 %t75 = load { ptr, i64, i64 }, ptr %a54 %t76 = load %S.json.Json, ptr %a74 call void @finch.json.Json.set(ptr %a22, { ptr, i64, i64 } %t75, %S.json.Json %t76) %t77 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t77) %t78 = load ptr, ptr %a1 %t79 = call i8 @finch.json.peek(ptr %t78) %t80 = icmp eq i8 %t79, 44 br i1 %t80, label %then11831, label %endif11833 then11831: %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null br i1 %t82, label %panic11834, label %ok11835 panic11834: call void @finch_panic(ptr @.str.7525, i64 454, ptr @.str.7526) unreachable ok11835: %t83 = getelementptr inbounds %S.json.Reader, ptr %t81, i32 0, i32 1 %t84 = load i64, ptr %t83 %t85 = add i64 %t84, 1 store i64 %t85, ptr %t83 call void @finch.drop.S_json_Json(ptr %a74) call void @finch_str_drop(ptr %a54) br label %while.cond11816 endif11833: %t86 = load ptr, ptr %a1 %t87 = call i8 @finch.json.peek(ptr %t86) %t88 = icmp eq i8 %t87, 125 br i1 %t88, label %then11836, label %endif11838 then11836: %t89 = load ptr, ptr %a1 %t90 = icmp eq ptr %t89, null br i1 %t90, label %panic11839, label %ok11840 panic11839: call void @finch_panic(ptr @.str.7527, i64 458, ptr @.str.7528) unreachable ok11840: %t91 = getelementptr inbounds %S.json.Reader, ptr %t89, i32 0, i32 1 %t92 = load i64, ptr %t91 %t93 = add i64 %t92, 1 store i64 %t93, ptr %t91 %t94 = load %S.json.Json, ptr %a22 call void @finch.drop.S_json_Json(ptr %a74) call void @finch_str_drop(ptr %a54) %t95 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t96 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t95, %S.json.Json %t94, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t96 endif11838: %t97 = load ptr, ptr %a1 %t98 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t97, { ptr, i64, i64 } { ptr @.str.7529, i64 10, i64 0 }) call void @finch.drop.S_json_Json(ptr %a74) call void @finch_str_drop(ptr %a54) call void @finch.drop.S_json_Json(ptr %a22) %t99 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t98, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t99 endif11808: %t100 = load i8, ptr %a5 %t101 = icmp eq i8 %t100, 91 br i1 %t101, label %then11841, label %endif11843 then11841: %t102 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t102, ptr %a103 %t104 = load ptr, ptr %a1 %t105 = icmp eq ptr %t104, null br i1 %t105, label %panic11844, label %ok11845 panic11844: call void @finch_panic(ptr @.str.7530, i64 466, ptr @.str.7531) unreachable ok11845: %t106 = getelementptr inbounds %S.json.Reader, ptr %t104, i32 0, i32 1 %t107 = load i64, ptr %t106 %t108 = add i64 %t107, 1 store i64 %t108, ptr %t106 %t109 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t109) %t110 = load ptr, ptr %a1 %t111 = call i8 @finch.json.peek(ptr %t110) %t112 = icmp eq i8 %t111, 93 br i1 %t112, label %then11846, label %endif11848 then11846: %t113 = load ptr, ptr %a1 %t114 = icmp eq ptr %t113, null br i1 %t114, label %panic11849, label %ok11850 panic11849: call void @finch_panic(ptr @.str.7532, i64 469, ptr @.str.7533) unreachable ok11850: %t115 = getelementptr inbounds %S.json.Reader, ptr %t113, i32 0, i32 1 %t116 = load i64, ptr %t115 %t117 = add i64 %t116, 1 store i64 %t117, ptr %t115 %t118 = load %S.json.Json, ptr %a103 %t119 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t120 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t119, %S.json.Json %t118, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t120 endif11848: br label %while.cond11851 while.cond11851: br label %while.body11852 while.body11852: %t121 = load ptr, ptr %a1 %t122 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %t121) %t123 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 0 %t124 = xor i1 %t123, true %t125 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 2 %t126 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 1 br i1 %t124, label %try.failed11854, label %try.ok11855 try.failed11854: call void @finch.drop.S_json_Json(ptr %a103) %t127 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t125, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t127 try.ok11855: store %S.json.Json %t126, ptr %a128 %t129 = load %S.json.Json, ptr %a128 call void @finch.json.Json.push(ptr %a103, %S.json.Json %t129) %t130 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t130) %t131 = load ptr, ptr %a1 %t132 = call i8 @finch.json.peek(ptr %t131) %t133 = icmp eq i8 %t132, 44 br i1 %t133, label %then11856, label %endif11858 then11856: %t134 = load ptr, ptr %a1 %t135 = icmp eq ptr %t134, null br i1 %t135, label %panic11859, label %ok11860 panic11859: call void @finch_panic(ptr @.str.7534, i64 477, ptr @.str.7535) unreachable ok11860: %t136 = getelementptr inbounds %S.json.Reader, ptr %t134, i32 0, i32 1 %t137 = load i64, ptr %t136 %t138 = add i64 %t137, 1 store i64 %t138, ptr %t136 call void @finch.drop.S_json_Json(ptr %a128) br label %while.cond11851 endif11858: %t139 = load ptr, ptr %a1 %t140 = call i8 @finch.json.peek(ptr %t139) %t141 = icmp eq i8 %t140, 93 br i1 %t141, label %then11861, label %endif11863 then11861: %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null br i1 %t143, label %panic11864, label %ok11865 panic11864: call void @finch_panic(ptr @.str.7536, i64 481, ptr @.str.7537) unreachable ok11865: %t144 = getelementptr inbounds %S.json.Reader, ptr %t142, i32 0, i32 1 %t145 = load i64, ptr %t144 %t146 = add i64 %t145, 1 store i64 %t146, ptr %t144 %t147 = load %S.json.Json, ptr %a103 call void @finch.drop.S_json_Json(ptr %a128) %t148 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t149 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t148, %S.json.Json %t147, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t149 endif11863: %t150 = load ptr, ptr %a1 %t151 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t150, { ptr, i64, i64 } { ptr @.str.7538, i64 10, i64 0 }) call void @finch.drop.S_json_Json(ptr %a128) call void @finch.drop.S_json_Json(ptr %a103) %t152 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t151, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t152 endif11843: %t153 = load i8, ptr %a5 %t154 = icmp eq i8 %t153, 34 br i1 %t154, label %then11866, label %endif11868 then11866: %t155 = load ptr, ptr %a1 %t156 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %t155) %t157 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 0 %t158 = xor i1 %t157, true %t159 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 2 %t160 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 1 br i1 %t158, label %try.failed11869, label %try.ok11870 try.failed11869: %t161 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t159, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t161 try.ok11870: store { ptr, i64, i64 } %t160, ptr %a162 %t163 = load { ptr, i64, i64 }, ptr %a162 %t164 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t163) call void @finch_str_drop(ptr %a162) %t165 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t166 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t165, %S.json.Json %t164, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t166 endif11868: %t167 = load i8, ptr %a5 %t168 = icmp eq i8 %t167, 116 br i1 %t168, label %then11871, label %endif11873 then11871: %t169 = load ptr, ptr %a1 %t170 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t169, { ptr, i64, i64 } { ptr @.str.7539, i64 4, i64 0 }) %t171 = extractvalue { i1, i8, { ptr, i64, i64 } } %t170, 0 %t172 = xor i1 %t171, true %t173 = extractvalue { i1, i8, { ptr, i64, i64 } } %t170, 2 br i1 %t172, label %try.failed11874, label %try.ok11875 try.failed11874: %t174 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t173, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t174 try.ok11875: %t175 = call %S.json.Json @finch.json.new_bool(i1 true) %t176 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t177 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t176, %S.json.Json %t175, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t177 endif11873: %t178 = load i8, ptr %a5 %t179 = icmp eq i8 %t178, 102 br i1 %t179, label %then11876, label %endif11878 then11876: %t180 = load ptr, ptr %a1 %t181 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t180, { ptr, i64, i64 } { ptr @.str.7540, i64 5, i64 0 }) %t182 = extractvalue { i1, i8, { ptr, i64, i64 } } %t181, 0 %t183 = xor i1 %t182, true %t184 = extractvalue { i1, i8, { ptr, i64, i64 } } %t181, 2 br i1 %t183, label %try.failed11879, label %try.ok11880 try.failed11879: %t185 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t184, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t185 try.ok11880: %t186 = call %S.json.Json @finch.json.new_bool(i1 false) %t187 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t188 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t187, %S.json.Json %t186, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t188 endif11878: %t189 = load i8, ptr %a5 %t190 = icmp eq i8 %t189, 110 br i1 %t190, label %then11881, label %endif11883 then11881: %t191 = load ptr, ptr %a1 %t192 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t191, { ptr, i64, i64 } { ptr @.str.7541, i64 4, i64 0 }) %t193 = extractvalue { i1, i8, { ptr, i64, i64 } } %t192, 0 %t194 = xor i1 %t193, true %t195 = extractvalue { i1, i8, { ptr, i64, i64 } } %t192, 2 br i1 %t194, label %try.failed11884, label %try.ok11885 try.failed11884: %t196 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t195, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t196 try.ok11885: %t197 = call %S.json.Json @finch.json.new_null() %t198 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t199 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t198, %S.json.Json %t197, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t199 endif11883: %t200 = load i8, ptr %a5 %t201 = icmp eq i8 %t200, 45 br label %logic.from11886 logic.from11886: br i1 %t201, label %logic.end11888, label %logic.rhs11887 logic.rhs11887: %t202 = load i8, ptr %a5 %t203 = icmp uge i8 %t202, 48 br label %logic.from11889 logic.from11889: br i1 %t203, label %logic.rhs11890, label %logic.end11891 logic.rhs11890: %t204 = load i8, ptr %a5 %t205 = icmp ule i8 %t204, 57 br label %logic.rend11892 logic.rend11892: br label %logic.end11891 logic.end11891: %t206 = phi i1 [ false, %logic.from11889 ], [ %t205, %logic.rend11892 ] br label %logic.rend11893 logic.rend11893: br label %logic.end11888 logic.end11888: %t207 = phi i1 [ true, %logic.from11886 ], [ %t206, %logic.rend11893 ] br i1 %t207, label %then11894, label %endif11896 then11894: %t208 = load ptr, ptr %a1 %t209 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_number(ptr %t208) %t210 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 0 %t211 = xor i1 %t210, true %t212 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 2 %t213 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 1 br i1 %t211, label %try.failed11897, label %try.ok11898 try.failed11897: %t214 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t212, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t214 try.ok11898: %t215 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t216 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t215, %S.json.Json %t213, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t216 endif11896: %t217 = load ptr, ptr %a1 %t218 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t217, { ptr, i64, i64 } { ptr @.str.7542, i64 7, i64 0 }) %t219 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t218, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t219 } define internal void @finch.drop.S_json_Reader(ptr %a) { entry: %t1 = getelementptr inbounds %S.json.Reader, ptr %a, i32 0, i32 0 call void @finch_str_drop(ptr %t1) ret void } define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.parse({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca %S.json.Reader, align 16 %a14 = alloca %S.json.Json, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_copy(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 %t6 = insertvalue %S.json.Reader zeroinitializer, { ptr, i64, i64 } %t5, 0 store %S.json.Reader %t6, ptr %a7 %t8 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %a7) %t9 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 0 %t10 = xor i1 %t9, true %t11 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 2 %t12 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 1 br i1 %t10, label %try.failed11899, label %try.ok11900 try.failed11899: call void @finch.drop.S_json_Reader(ptr %a7) %t13 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t11, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t13 try.ok11900: store %S.json.Json %t12, ptr %a14 call void @finch.json.skip_space(ptr %a7) %t15 = getelementptr inbounds %S.json.Reader, ptr %a7, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = getelementptr inbounds %S.json.Reader, ptr %a7, i32 0, i32 0 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load i64, ptr %t18 %t20 = icmp slt i64 %t16, %t19 br i1 %t20, label %then11901, label %endif11903 then11901: %t21 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %a7, { ptr, i64, i64 } { ptr @.str.7543, i64 19, i64 0 }) call void @finch.drop.S_json_Json(ptr %a14) call void @finch.drop.S_json_Reader(ptr %a7) %t22 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t21, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t22 endif11903: %t23 = load %S.json.Json, ptr %a14 call void @finch.drop.S_json_Reader(ptr %a7) %t24 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t25 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, %S.json.Json %t23, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t25 } define internal { ptr, i64, i64 } @finch.embedded.names() { entry: %a1 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } zeroinitializer, ptr %a1 %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t3 = load i64, ptr %t2 %t4 = add i64 %t3, 1 call void @finch_arr_reserve(ptr %a1, i64 %t4, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t5 = load ptr, ptr %a1 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 %t3 store { ptr, i64, i64 } { ptr @.str.7544, i64 18, i64 0 }, ptr %t6 store i64 %t4, ptr %t2 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = add i64 %t8, 1 call void @finch_arr_reserve(ptr %a1, i64 %t9, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t8 store { ptr, i64, i64 } { ptr @.str.7545, i64 12, i64 0 }, ptr %t11 store i64 %t9, ptr %t7 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = add i64 %t13, 1 call void @finch_arr_reserve(ptr %a1, i64 %t14, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 store { ptr, i64, i64 } { ptr @.str.7546, i64 12, i64 0 }, ptr %t16 store i64 %t14, ptr %t12 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = add i64 %t18, 1 call void @finch_arr_reserve(ptr %a1, i64 %t19, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t20 = load ptr, ptr %a1 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 store { ptr, i64, i64 } { ptr @.str.7547, i64 12, i64 0 }, ptr %t21 store i64 %t19, ptr %t17 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = add i64 %t23, 1 call void @finch_arr_reserve(ptr %a1, i64 %t24, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t25 = load ptr, ptr %a1 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i64 %t23 store { ptr, i64, i64 } { ptr @.str.7548, i64 20, i64 0 }, ptr %t26 store i64 %t24, ptr %t22 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t28 = load i64, ptr %t27 %t29 = add i64 %t28, 1 call void @finch_arr_reserve(ptr %a1, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t30 = load ptr, ptr %a1 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28 store { ptr, i64, i64 } { ptr @.str.7549, i64 12, i64 0 }, ptr %t31 store i64 %t29, ptr %t27 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t33 = load i64, ptr %t32 %t34 = add i64 %t33, 1 call void @finch_arr_reserve(ptr %a1, i64 %t34, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t35 = load ptr, ptr %a1 %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t33 store { ptr, i64, i64 } { ptr @.str.7550, i64 20, i64 0 }, ptr %t36 store i64 %t34, ptr %t32 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t38 = load i64, ptr %t37 %t39 = add i64 %t38, 1 call void @finch_arr_reserve(ptr %a1, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t40 = load ptr, ptr %a1 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 store { ptr, i64, i64 } { ptr @.str.7551, i64 15, i64 0 }, ptr %t41 store i64 %t39, ptr %t37 %t42 = load { ptr, i64, i64 }, ptr %a1 ret { ptr, i64, i64 } %t42 } define internal { ptr, i64, i64 } @finch.embedded.texts() { entry: %a1 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } zeroinitializer, ptr %a1 %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t3 = load i64, ptr %t2 %t4 = add i64 %t3, 1 call void @finch_arr_reserve(ptr %a1, i64 %t4, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t5 = load ptr, ptr %a1 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 %t3 store { ptr, i64, i64 } { ptr @.str.7552, i64 24981, i64 0 }, ptr %t6 store i64 %t4, ptr %t2 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = add i64 %t8, 1 call void @finch_arr_reserve(ptr %a1, i64 %t9, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t8 store { ptr, i64, i64 } { ptr @.str.7553, i64 12884, i64 0 }, ptr %t11 store i64 %t9, ptr %t7 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = add i64 %t13, 1 call void @finch_arr_reserve(ptr %a1, i64 %t14, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 store { ptr, i64, i64 } { ptr @.str.7554, i64 2846, i64 0 }, ptr %t16 store i64 %t14, ptr %t12 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = add i64 %t18, 1 call void @finch_arr_reserve(ptr %a1, i64 %t19, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t20 = load ptr, ptr %a1 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 store { ptr, i64, i64 } { ptr @.str.7555, i64 1406, i64 0 }, ptr %t21 store i64 %t19, ptr %t17 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = add i64 %t23, 1 call void @finch_arr_reserve(ptr %a1, i64 %t24, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t25 = load ptr, ptr %a1 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i64 %t23 store { ptr, i64, i64 } { ptr @.str.7556, i64 995, i64 0 }, ptr %t26 store i64 %t24, ptr %t22 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t28 = load i64, ptr %t27 %t29 = add i64 %t28, 1 call void @finch_arr_reserve(ptr %a1, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t30 = load ptr, ptr %a1 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28 store { ptr, i64, i64 } { ptr @.str.7557, i64 2539, i64 0 }, ptr %t31 store i64 %t29, ptr %t27 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t33 = load i64, ptr %t32 %t34 = add i64 %t33, 1 call void @finch_arr_reserve(ptr %a1, i64 %t34, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t35 = load ptr, ptr %a1 %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t33 store { ptr, i64, i64 } { ptr @.str.7558, i64 1792, i64 0 }, ptr %t36 store i64 %t34, ptr %t32 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t38 = load i64, ptr %t37 %t39 = add i64 %t38, 1 call void @finch_arr_reserve(ptr %a1, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t40 = load ptr, ptr %a1 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 store { ptr, i64, i64 } { ptr @.str.7559, i64 365, i64 0 }, ptr %t41 store i64 %t39, ptr %t37 %t42 = load { ptr, i64, i64 }, ptr %a1 ret { ptr, i64, i64 } %t42 } define i32 @main(i32 %argc, ptr %argv) { entry: %args = alloca { ptr, i64, i64 } call void @finch_args(ptr %args, i32 %argc, ptr %argv) %a = load { ptr, i64, i64 }, ptr %args %r = call i64 @finch.main.main({ ptr, i64, i64 } %a) %code = trunc i64 %r to i32 ret i32 %code }